From 43820673b594530e4acff25d5d0055b13cf3744c Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Wed, 20 Aug 2014 01:38:27 -0400 Subject: linux-libre{,-lts,-grsec}: Remove mips64el hacks That isn't to say "drop code allowing for flexibility around non-x86 architectures", just remove the many mips-specific hacks. --- libre/linux-libre-grsec/Kbuild | 19 ---- libre/linux-libre-grsec/Kbuild.platforms | 6 -- libre/linux-libre-grsec/PKGBUILD | 97 +++---------------- libre/linux-libre-grsec/linux-libre-grsec.install | 12 +-- libre/linux-libre-lts/Kbuild | 19 ---- libre/linux-libre-lts/Kbuild.platforms | 6 -- libre/linux-libre-lts/PKGBUILD | 106 +++----------------- libre/linux-libre-lts/linux-libre-lts.install | 12 +-- libre/linux-libre/Kbuild | 19 ---- libre/linux-libre/Kbuild.platforms | 6 -- libre/linux-libre/PKGBUILD | 113 +++------------------- libre/linux-libre/linux-libre.install | 12 +-- 12 files changed, 58 insertions(+), 369 deletions(-) delete mode 100644 libre/linux-libre-grsec/Kbuild delete mode 100644 libre/linux-libre-grsec/Kbuild.platforms delete mode 100644 libre/linux-libre-lts/Kbuild delete mode 100644 libre/linux-libre-lts/Kbuild.platforms delete mode 100644 libre/linux-libre/Kbuild delete mode 100644 libre/linux-libre/Kbuild.platforms diff --git a/libre/linux-libre-grsec/Kbuild b/libre/linux-libre-grsec/Kbuild deleted file mode 100644 index 8a9d7dceb..000000000 --- a/libre/linux-libre-grsec/Kbuild +++ /dev/null @@ -1,19 +0,0 @@ -# Fail on warnings - also for files referenced in subdirs -# -Werror can be disabled for specific files using: -# CFLAGS_ := -Wno-error -subdir-ccflags-y := -Wno-error - -# platform specific definitions -include arch/mips/Kbuild.platforms -obj-y := $(platform-y) - -# make clean traverses $(obj-) without having included .config, so -# everything ends up here -obj- := $(platform-) - -# mips object files -# The object files are linked as core-y files would be linked - -obj-y += kernel/ -obj-y += mm/ -obj-y += math-emu/ diff --git a/libre/linux-libre-grsec/Kbuild.platforms b/libre/linux-libre-grsec/Kbuild.platforms deleted file mode 100644 index 90a226888..000000000 --- a/libre/linux-libre-grsec/Kbuild.platforms +++ /dev/null @@ -1,6 +0,0 @@ -# All platforms listed in alphabetic order - -platforms += loongson - -# include the platform specific files -include $(patsubst %, $(srctree)/arch/mips/%/Platform, $(platforms)) diff --git a/libre/linux-libre-grsec/PKGBUILD b/libre/linux-libre-grsec/PKGBUILD index 872a8cdbd..55292906f 100644 --- a/libre/linux-libre-grsec/PKGBUILD +++ b/libre/linux-libre-grsec/PKGBUILD @@ -20,8 +20,7 @@ _timestamp=201408140023 _pkgver=${_basekernel}.${_sublevel} pkgver=${_basekernel}.${_sublevel}.${_timestamp} pkgrel=1 -_lxopkgver=${_basekernel}.9 # nearly always the same as pkgver -arch=('i686' 'x86_64' 'mips64el') +arch=('i686' 'x86_64') url="https://grsecurity.net/" license=('GPL2') makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc') @@ -34,11 +33,9 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn 'config.i686' 'config.x86_64' # standard config files for mkinitcpio ramdisk "${pkgbase}.preset" - 'Kbuild' - 'Kbuild.platforms' 'boot-logo.patch' 'change-default-console-loglevel.patch' - "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.xz") + ) sha256sums=('93450dc189131b6a4de862f35c5087a58cc7bae1c24caa535d2357cc3301b688' 'c58b09c71666a79f5dcf83d05aaa5d64ab3fb83782a7dadabdc1a4e29c5b09ab' 'b4072cb368bba37ff8d538068016f60891d5d0c1206bb9821090b08a44bf3d11' @@ -46,19 +43,16 @@ sha256sums=('93450dc189131b6a4de862f35c5087a58cc7bae1c24caa535d2357cc3301b688' 'd47cc4487a687782d4010c81002a48ee0171981863ab38b9f656d6e780d4a297' 'b4e55b41c014df808daad8105e4cbbf684df94641c213d2d9e6fc87e2a4ea59f' '9d2f34f1a8c514a7117b9b017a1f7312fb351f4d0b079eed102f89361534d486' - 'c5451d5e1eafc4f8d28b1a2958ec3102c124433a414a86450fc32058e004156b' - '55bf07738a3286168a7929ae16dbca29defd14e77b9d24c487ae4c3d12bb9eb9' 'f913384dd6dbafca476fcf4ccd35f0f497dda5f3074866022facdb92647771f6' - 'faced4eb4c47c4eb1a9ee8a5bf8a7c4b49d6b4d78efbe426e410730e6267d182' - '1a0c1d5e3c46306766304663e9d4503ca452c4f93d5154a4ca43a03588e20d00') -if [ "$CARCH" != "mips64el" ]; then - # don't use the Loongson-specific patches on non-mips64el arches. - unset source[${#source[@]}-1] - unset sha256sums[${#sha256sums[@]}-1] -fi + 'faced4eb4c47c4eb1a9ee8a5bf8a7c4b49d6b4d78efbe426e410730e6267d182') _kernelname=${pkgbase#linux-libre} -_localversionname=-libre-grsec +_localversioname=-libre-grsec + +case "$CARCH" in + i686|x86_64) KARCH=x86;; + mips64el) KARCH=mips;; +esac prepare() { cd "${srcdir}/linux-${_basekernel}" @@ -82,27 +76,7 @@ prepare() { # (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227) patch -p1 -i "${srcdir}/change-default-console-loglevel.patch" - if [ "$CARCH" == "mips64el" ]; then - sed -i "s|^EXTRAVERSION.*|EXTRAVERSION =-libre-grsec|" Makefile - sed -r "s|^( SUBLEVEL = ).*|\1$_sublevel|" \ - < "${srcdir}/lxo-config.patch" > lxo-config.patch - msg2 "Adding loongson-community patches" - patch -p1 -i ${srcdir}/${_basekernel}*-*-loongson-community.patch - patch -p0 -i lxo-config.patch - - # ensure N32, add localversion, remove uevent helper as per - # https://git.kernel.org/?p=linux/hotplug/udev.git;a=blob_plain;f=README - # and make USB storage support builtin (e.g. for booting from USB - # disks without slowly loading an initramfs) - sed -ri \ - -e "s|CONFIG_MIPS32_N32=.*|CONFIG_MIPS32_N32=y|g" \ - -e "s|CONFIG_UEVENT_HELPER_PATH=.*|CONFIG_UEVENT_HELPER_PATH=\"\"|g" \ - -e "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" \ - -e "s;(CONFIG_USB(_COMMON|_EHCI_HCD|_OHCI_HCD|_STORAGE.*|_UAS)?)=.*;\1=y;g" \ - ./.config - else - cat "${srcdir}/config.${CARCH}" > ./.config # simpler - fi + cat "${srcdir}/config.${CARCH}" > ./.config if [ "${_kernelname}" != "" ]; then sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" ./.config @@ -133,22 +107,13 @@ prepare() { build() { cd "${srcdir}/linux-${_basekernel}" - if [ "$CARCH" == "mips64el" ]; then - # The build system passes it directly to linker, disable to avoid - # having unknown -Wl,... options. - export LDFLAGS="" - # bzImage is arch-specific and not supported on mips; vmlinux is - # useful for oprofile. - make ${MAKEFLAGS} LOCALVERSION= vmlinux vmlinuz modules - else - make ${MAKEFLAGS} LOCALVERSION= bzImage modules - fi + make ${MAKEFLAGS} LOCALVERSION= bzImage modules } _package() { pkgdesc="The ${pkgbase^} kernel and modules with grsecurity/PaX patches" [ "${pkgbase}" = "linux-libre" ] && groups=('base') - depends=('coreutils' 'linux-libre-firmware' 'kmod' 'grsec-common') + depends=('coreutils' 'linux-libre-firmware' 'kmod' 'grsec-common' 'mkinitcpio>=0.7') optdepends=('crda: to set the correct wireless channels of your country' 'gradm: to configure and enable Role Based Access Control (RBAC)' 'paxd: to enable PaX exploit mitigations and apply exceptions automatically') @@ -157,18 +122,9 @@ _package() { replaces=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}") backup=("etc/mkinitcpio.d/${pkgbase}.preset") install=${pkgbase}.install - if [ "$CARCH" = "mips64el" ]; then - optdepends+=('mkinitcpio: to make the initramfs (needs reinstall of this package)') - conflicts+=('mkinitcpio<0.7') - else - depends+=('mkinitcpio>=0.7') - fi cd "${srcdir}/linux-${_basekernel}" - KARCH=x86 - [ $CARCH = "mips64el" ] && KARCH=mips - # get kernel version _kernver="$(make LOCALVERSION= kernelrelease)" _basekernel=${_kernver%%-*} @@ -177,12 +133,7 @@ _package() { mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot} make LOCALVERSION= INSTALL_MOD_PATH="${pkgdir}" modules_install - if [ "$CARCH" == "mips64el" ]; then - cp vmlinuz "${pkgdir}/boot/vmlinuz-${pkgbase}" - cp vmlinux "${pkgdir}/boot/vmlinux-${pkgbase}" - else - cp arch/${KARCH}/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}" - fi + cp arch/${KARCH}/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}" # set correct depmod command for install cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" @@ -201,12 +152,6 @@ _package() { -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \ -i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" - # mkinitcpio 0.7 relies on bzImage to find the kernel version - if [ "$CARCH" == "mips64el" ]; then - sed -e "s|ALL_kver=.*|ALL_kver=\"${_kernver}\"|" \ - -i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" - fi - # remove build and source links rm -f "${pkgdir}"/lib/modules/${_kernver}/{source,build} # remove the firmware @@ -245,9 +190,6 @@ _package-headers() { conflicts=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") replaces=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") - KARCH=x86 - [ $CARCH = "mips64el" ] && KARCH=mips - # in case of repackaging this is empty if [ -z "${_kernver}" ]; then cd "${srcdir}/linux-${_basekernel}" @@ -279,12 +221,6 @@ _package-headers() { cp Module.symvers "${pkgdir}/usr/lib/modules/${_kernver}/build" cp -a scripts "${pkgdir}/usr/lib/modules/${_kernver}/build" - if [ "$CARCH" = "mips64el" ]; then - cp arch/${KARCH}/Kbuild "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/" - cp -a arch/${KARCH}/loongson "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/" - cp ${srcdir}/Kbuild.platforms "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/" - fi - # fix permissions on scripts dir chmod og-w -R "${pkgdir}/usr/lib/modules/${_kernver}/build/scripts" mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/.tmp_versions" @@ -370,12 +306,7 @@ _package-headers() { done # remove unneeded architectures - rm -rf "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch/{alpha,arc,arm,arm26,arm64,avr32,blackfin,c6x,cris,frv,h8300,hexagon,ia64,m32r,m68k,m68knommu,metag,microblaze,mn10300,openrisc,parisc,powerpc,ppc,s390,score,sh,sh64,sparc,sparc64,tile,unicore32,um,v850,xtensa} - if [ "$CARCH" = "mips64el" ]; then - rm -rf ${pkgdir}/usr/lib/modules/${_kernver}/build/arch/x86 - else - rm -rf ${pkgdir}/usr/lib/modules/${_kernver}/build/arch/mips - fi + find "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch -mindepth 1 -maxdepth 1 -type d -not -name "$KARCH" -exec rm -rf {} + } _package-docs() { diff --git a/libre/linux-libre-grsec/linux-libre-grsec.install b/libre/linux-libre-grsec/linux-libre-grsec.install index 572c893d1..71bc3aabc 100644 --- a/libre/linux-libre-grsec/linux-libre-grsec.install +++ b/libre/linux-libre-grsec/linux-libre-grsec.install @@ -19,10 +19,8 @@ post_install () { # updating module dependencies echo ">>> Updating module dependencies. Please wait ..." depmod ${KERNEL_VERSION} - if command -v mkinitcpio 2>&1 > /dev/null; then - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - fi + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} _uderef_warning } @@ -39,10 +37,8 @@ post_upgrade() { # updating module dependencies echo ">>> Updating module dependencies. Please wait ..." depmod ${KERNEL_VERSION} - if command -v mkinitcpio 2>&1 > /dev/null; then - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - fi + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} if [ $(vercmp $2 3.13) -lt 0 ]; then echo ">>> WARNING: AT keyboard support is no longer built into the kernel." diff --git a/libre/linux-libre-lts/Kbuild b/libre/linux-libre-lts/Kbuild deleted file mode 100644 index 8a9d7dceb..000000000 --- a/libre/linux-libre-lts/Kbuild +++ /dev/null @@ -1,19 +0,0 @@ -# Fail on warnings - also for files referenced in subdirs -# -Werror can be disabled for specific files using: -# CFLAGS_ := -Wno-error -subdir-ccflags-y := -Wno-error - -# platform specific definitions -include arch/mips/Kbuild.platforms -obj-y := $(platform-y) - -# make clean traverses $(obj-) without having included .config, so -# everything ends up here -obj- := $(platform-) - -# mips object files -# The object files are linked as core-y files would be linked - -obj-y += kernel/ -obj-y += mm/ -obj-y += math-emu/ diff --git a/libre/linux-libre-lts/Kbuild.platforms b/libre/linux-libre-lts/Kbuild.platforms deleted file mode 100644 index 90a226888..000000000 --- a/libre/linux-libre-lts/Kbuild.platforms +++ /dev/null @@ -1,6 +0,0 @@ -# All platforms listed in alphabetic order - -platforms += loongson - -# include the platform specific files -include $(patsubst %, $(srctree)/arch/mips/%/Platform, $(platforms)) diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD index 96cbce644..1488f31e5 100644 --- a/libre/linux-libre-lts/PKGBUILD +++ b/libre/linux-libre-lts/PKGBUILD @@ -14,8 +14,7 @@ _basekernel=3.14 _sublevel=17 pkgver=${_basekernel}.${_sublevel} pkgrel=1 -_lxopkgver=${_basekernel}.16 # nearly always the same as pkgver -arch=('i686' 'x86_64' 'mips64el') +arch=('i686' 'x86_64') url="http://linux-libre.fsfla.org/" license=('GPL2') makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc') @@ -26,38 +25,33 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn 'config.i686' 'config.x86_64' # standard config files for mkinitcpio ramdisk "${pkgbase}.preset" - 'Kbuild' - 'Kbuild.platforms' 'boot-logo.patch' 'change-default-console-loglevel.patch' '0001-Bluetooth-allocate-static-minor-for-vhci.patch' '0002-module-allow-multiple-calls-to-MODULE_DEVICE_TABLE-p.patch' '0003-module-remove-MODULE_GENERIC_TABLE.patch' '0006-genksyms-fix-typeof-handling.patch' - "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.xz") + ) sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b' 'f747eeb343d5105bcd1a1b02ce391c746bccbce62e58394b674fc553be844ccc' '9e7dcc90121995024632476d50286b62dbb73da20a7970653a2d72a0a98406c0' '35f283689c4f8b346bc05ac57c3cce50a61a1d0c11a665fc1abf519bb3f1beea' 'f621efae2b2303f4d7bf992904c9ac88d64d1ed773f2d8e7f789389e0094f95a' - 'c5451d5e1eafc4f8d28b1a2958ec3102c124433a414a86450fc32058e004156b' - '55bf07738a3286168a7929ae16dbca29defd14e77b9d24c487ae4c3d12bb9eb9' '5ae80ee1cbc0c894d9f5dd99d201999ea3b384fab9d047051b28dca12e355c47' 'faced4eb4c47c4eb1a9ee8a5bf8a7c4b49d6b4d78efbe426e410730e6267d182' '6d72e14552df59e6310f16c176806c408355951724cd5b48a47bf01591b8be02' '52dec83a8805a8642d74d764494acda863e0aa23e3d249e80d4b457e20a3fd29' '65d58f63215ee3c5f9c4fc6bce36fc5311a6c7dbdbe1ad29de40647b47ff9c0d' - 'cf2e7a2d00787f754028e7459688c2755a406e632ce48b60952fa4ff7ed6f4b7' - 'b9546e1b3896f17a7ef7f59299806e734865238ade838d4725b5efd5bda2a47f') -if [ "$CARCH" != "mips64el" ]; then - # don't use the Loongson-specific patches on non-mips64el arches. - unset source[${#source[@]}-1] - unset sha256sums[${#sha256sums[@]}-1] -fi + 'cf2e7a2d00787f754028e7459688c2755a406e632ce48b60952fa4ff7ed6f4b7') _kernelname=${pkgbase#linux-libre} _localversionname=-libre-lts +case "$CARCH" in + i686|x86_64) KARCH=x86;; + mips64el) KARCH=mips;; +esac + prepare() { cd "${srcdir}/linux-${_basekernel}" @@ -87,27 +81,7 @@ prepare() { # http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=dc53324060f324e8af6867f57bf4891c13c6ef18 patch -p1 -i "${srcdir}/0006-genksyms-fix-typeof-handling.patch" - if [ "$CARCH" == "mips64el" ]; then - sed -i "s|^EXTRAVERSION.*|EXTRAVERSION =-libre-lts|" Makefile - sed -r "s|^( SUBLEVEL = ).*|\1$_sublevel|" \ - < "${srcdir}/lxo-config.patch" > lxo-config.patch - msg2 "Adding loongson-community patches" - patch -p1 -i ${srcdir}/${_basekernel}*-*-loongson-community.patch - patch -p0 -i lxo-config.patch - - # ensure N32, add localversion, remove uevent helper as per - # https://git.kernel.org/?p=linux/hotplug/udev.git;a=blob_plain;f=README - # and make USB storage support builtin (e.g. for booting from USB - # disks without slowly loading an initramfs) - sed -ri \ - -e "s|CONFIG_MIPS32_N32=.*|CONFIG_MIPS32_N32=y|g" \ - -e "s|CONFIG_UEVENT_HELPER_PATH=.*|CONFIG_UEVENT_HELPER_PATH=\"\"|g" \ - -e "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" \ - -e "s;(CONFIG_USB(_COMMON|_EHCI_HCD|_OHCI_HCD|_STORAGE.*|_UAS)?)=.*;\1=y;g" \ - ./.config - else - cat "${srcdir}/config.${CARCH}" > ./.config # simpler - fi + cat "${srcdir}/config.${CARCH}" > ./.config if [ "${_kernelname}" != "" ]; then sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" ./.config @@ -138,45 +112,22 @@ prepare() { build() { cd "${srcdir}/linux-${_basekernel}" - if [ "$CARCH" == "mips64el" ]; then - # The build system passes it directly to linker, disable to avoid - # having unknown -Wl,... options. - export LDFLAGS="" - # bzImage is arch-specific and not supported on mips; vmlinux is - # useful for oprofile. - make ${MAKEFLAGS} LOCALVERSION= vmlinux vmlinuz modules - else - make ${MAKEFLAGS} LOCALVERSION= bzImage modules - fi + make ${MAKEFLAGS} LOCALVERSION= bzImage modules } _package() { pkgdesc="The ${pkgbase^} kernel and modules - stable longtime supported kernel package suitable for servers" [ "${pkgbase}" = "linux-libre" ] && groups=('base') - depends=('coreutils' 'linux-libre-firmware' 'kmod') + depends=('coreutils' 'linux-libre-firmware' 'kmod' 'mkinitcpio>=0.7') optdepends=('crda: to set the correct wireless channels of your country') - provides=("kernel26${_kernelname}=${pkgver}" "linux${_kernelname}=${pkgver}") - conflicts=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}") - replaces=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}") + provides=("kernel26${_kernelname}=${pkgver}" "linux${_kernelname}=${pkgver}" "linux-libre${_kernelname}-kmod-alx") + conflicts=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}" "linux-libre${_kernelname}-kmod-alx") + replaces=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}" "linux-libre${_kernelname}-kmod-alx") backup=("etc/mkinitcpio.d/${pkgbase}.preset") install=${pkgbase}.install - if [ "$CARCH" != "mips64el" ]; then - provides+=("linux-libre${_kernelname}-kmod-alx") - conflicts+=("linux-libre${_kernelname}-kmod-alx") - replaces+=("linux-libre${_kernelname}-kmod-alx") - fi - if [ "$CARCH" = "mips64el" ]; then - optdepends+=('mkinitcpio: to make the initramfs (needs reinstall of this package)') - conflicts+=('mkinitcpio<0.7') - else - depends+=('mkinitcpio>=0.7') - fi cd "${srcdir}/linux-${_basekernel}" - KARCH=x86 - [ $CARCH = "mips64el" ] && KARCH=mips - # get kernel version _kernver="$(make LOCALVERSION= kernelrelease)" _basekernel=${_kernver%%-*} @@ -185,12 +136,7 @@ _package() { mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot} make LOCALVERSION= INSTALL_MOD_PATH="${pkgdir}" modules_install - if [ "$CARCH" == "mips64el" ]; then - cp vmlinuz "${pkgdir}/boot/vmlinuz-${pkgbase}" - cp vmlinux "${pkgdir}/boot/vmlinux-${pkgbase}" - else - cp arch/${KARCH}/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}" - fi + cp arch/$KARCH/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}" # set correct depmod command for install cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" @@ -209,12 +155,6 @@ _package() { -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \ -i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" - # mkinitcpio 0.7 relies on bzImage to find the kernel version - if [ "$CARCH" == "mips64el" ]; then - sed -e "s|ALL_kver=.*|ALL_kver=\"${_kernver}\"|" \ - -i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" - fi - # remove build and source links rm -f "${pkgdir}"/lib/modules/${_kernver}/{source,build} # remove the firmware @@ -244,9 +184,6 @@ _package-headers() { conflicts=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") replaces=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") - KARCH=x86 - [ $CARCH = "mips64el" ] && KARCH=mips - # in case of repackaging this is empty if [ -z "${_kernver}" ]; then cd "${srcdir}/linux-${_basekernel}" @@ -278,12 +215,6 @@ _package-headers() { cp Module.symvers "${pkgdir}/usr/lib/modules/${_kernver}/build" cp -a scripts "${pkgdir}/usr/lib/modules/${_kernver}/build" - if [ "$CARCH" = "mips64el" ]; then - cp arch/${KARCH}/Kbuild "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/" - cp -a arch/${KARCH}/loongson "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/" - cp ${srcdir}/Kbuild.platforms "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/" - fi - # fix permissions on scripts dir chmod og-w -R "${pkgdir}/usr/lib/modules/${_kernver}/build/scripts" mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/.tmp_versions" @@ -369,12 +300,7 @@ _package-headers() { done # remove unneeded architectures - rm -rf "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch/{alpha,arc,arm,arm26,arm64,avr32,blackfin,c6x,cris,frv,h8300,hexagon,ia64,m32r,m68k,m68knommu,metag,microblaze,mn10300,openrisc,parisc,powerpc,ppc,s390,score,sh,sh64,sparc,sparc64,tile,unicore32,um,v850,xtensa} - if [ "$CARCH" = "mips64el" ]; then - rm -rf ${pkgdir}/usr/lib/modules/${_kernver}/build/arch/x86 - else - rm -rf ${pkgdir}/usr/lib/modules/${_kernver}/build/arch/mips - fi + find "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch -mindepth 1 -maxdepth 1 -type d -not -name "$KARCH" -exec rm -rf {} + } _package-docs() { diff --git a/libre/linux-libre-lts/linux-libre-lts.install b/libre/linux-libre-lts/linux-libre-lts.install index bd7e68999..c68bdd50e 100644 --- a/libre/linux-libre-lts/linux-libre-lts.install +++ b/libre/linux-libre-lts/linux-libre-lts.install @@ -8,10 +8,8 @@ post_install () { # updating module dependencies echo ">>> Updating module dependencies. Please wait ..." depmod ${KERNEL_VERSION} - if command -v mkinitcpio 2>&1 > /dev/null; then - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - fi + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} } post_upgrade() { @@ -22,10 +20,8 @@ post_upgrade() { # updating module dependencies echo ">>> Updating module dependencies. Please wait ..." depmod ${KERNEL_VERSION} - if command -v mkinitcpio 2>&1 > /dev/null; then - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - fi + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} if [ $(vercmp $2 3.13) -lt 0 ]; then echo ">>> WARNING: AT keyboard support is no longer built into the kernel." diff --git a/libre/linux-libre/Kbuild b/libre/linux-libre/Kbuild deleted file mode 100644 index 8a9d7dceb..000000000 --- a/libre/linux-libre/Kbuild +++ /dev/null @@ -1,19 +0,0 @@ -# Fail on warnings - also for files referenced in subdirs -# -Werror can be disabled for specific files using: -# CFLAGS_ := -Wno-error -subdir-ccflags-y := -Wno-error - -# platform specific definitions -include arch/mips/Kbuild.platforms -obj-y := $(platform-y) - -# make clean traverses $(obj-) without having included .config, so -# everything ends up here -obj- := $(platform-) - -# mips object files -# The object files are linked as core-y files would be linked - -obj-y += kernel/ -obj-y += mm/ -obj-y += math-emu/ diff --git a/libre/linux-libre/Kbuild.platforms b/libre/linux-libre/Kbuild.platforms deleted file mode 100644 index 90a226888..000000000 --- a/libre/linux-libre/Kbuild.platforms +++ /dev/null @@ -1,6 +0,0 @@ -# All platforms listed in alphabetic order - -platforms += loongson - -# include the platform specific files -include $(patsubst %, $(srctree)/arch/mips/%/Platform, $(platforms)) diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD index d7479db9e..a198bb0d2 100644 --- a/libre/linux-libre/PKGBUILD +++ b/libre/linux-libre/PKGBUILD @@ -14,8 +14,7 @@ _basekernel=3.16 _sublevel=1 pkgver=${_basekernel}.${_sublevel} pkgrel=1 -_lxopkgver=${_basekernel}.0 # nearly always the same as pkgver -arch=('i686' 'x86_64' 'mips64el') +arch=('i686' 'x86_64') url="http://linux-libre.fsfla.org/" license=('GPL2') makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc') @@ -26,32 +25,27 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn 'config.i686' 'config.x86_64' # standard config files for mkinitcpio ramdisk "${pkgbase}.preset" - 'Kbuild' - 'Kbuild.platforms' 'boot-logo.patch' 'change-default-console-loglevel.patch' 'compal-laptop-hwmon-fix.patch' - "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.xz") + ) sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218' '3bbc78694d76b12b6229799d7c4daf5215b9dd731908d96b03603aceb54ad5c7' '46f70101acc6ffa57ea8f077db55ad554dd4b335c2e0fa85edf61db9f89c45ed' '5b809f025fc13ccffb77092fadf044b4a52d9b8242028b01d15845589c4e1e19' 'dfe01c93d83cdac9ca502715ceb6ac9502d327c939fec2e3052a5a58422dc176' - 'c5451d5e1eafc4f8d28b1a2958ec3102c124433a414a86450fc32058e004156b' - '55bf07738a3286168a7929ae16dbca29defd14e77b9d24c487ae4c3d12bb9eb9' '8303b426b1a6dce456b2350003558ae312d21cab0ae6c1f0d7b9d21395f4e177' '1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99' - 'f36f61a0a72bcb0a9c04264343503bfbf927c9ea0db819e66734a3933b060588' - '86a5e1ab424fe5dec8dffe24253d11575d5e7a51b7fb117db95a5bf1efdba3fd') -if [ "$CARCH" != "mips64el" ]; then - # don't use the Loongson-specific patches on non-mips64el arches. - unset source[${#source[@]}-1] - unset sha256sums[${#sha256sums[@]}-1] -fi + 'f36f61a0a72bcb0a9c04264343503bfbf927c9ea0db819e66734a3933b060588') _kernelname=${pkgbase#linux-libre} _localversionname=-libre +case "$CARCH" in + i686|x86_64) KARCH=x86;; + mips64el) KARCH=mips;; +esac + prepare() { cd "${srcdir}/linux-${_basekernel}" @@ -73,27 +67,7 @@ prepare() { # #41458 fix hwmon for compal-laptop module patch -p1 -i "${srcdir}/compal-laptop-hwmon-fix.patch" - if [ "$CARCH" == "mips64el" ]; then - sed -i "s|^EXTRAVERSION.*|EXTRAVERSION =-libre|" Makefile - sed -r "s|^( SUBLEVEL = ).*|\1$_sublevel|" \ - < "${srcdir}/lxo-config.patch" > lxo-config.patch - msg2 "Adding loongson-community patches" - patch -p1 -i ${srcdir}/${_basekernel}*-*-loongson-community.patch - patch -p0 -i lxo-config.patch - - # ensure N32, add localversion, remove uevent helper as per - # https://git.kernel.org/?p=linux/hotplug/udev.git;a=blob_plain;f=README - # and make USB storage support builtin (e.g. for booting from USB - # disks without slowly loading an initramfs) - sed -ri \ - -e "s|CONFIG_MIPS32_N32=.*|CONFIG_MIPS32_N32=y|g" \ - -e "s|CONFIG_UEVENT_HELPER_PATH=.*|CONFIG_UEVENT_HELPER_PATH=\"\"|g" \ - -e "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" \ - -e "s;(CONFIG_USB(_COMMON|_EHCI_HCD|_OHCI_HCD|_STORAGE.*|_UAS)?)=.*;\1=y;g" \ - ./.config - else - cat "${srcdir}/config.${CARCH}" > ./.config # simpler - fi + cat "${srcdir}/config.${CARCH}" > ./.config if [ "${_kernelname}" != "" ]; then sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" ./.config @@ -124,45 +98,22 @@ prepare() { build() { cd "${srcdir}/linux-${_basekernel}" - if [ "$CARCH" == "mips64el" ]; then - # The build system passes it directly to linker, disable to avoid - # having unknown -Wl,... options. - export LDFLAGS="" - # bzImage is arch-specific and not supported on mips; vmlinux is - # useful for oprofile. - make ${MAKEFLAGS} LOCALVERSION= vmlinux vmlinuz modules - else - make ${MAKEFLAGS} LOCALVERSION= bzImage modules - fi + make ${MAKEFLAGS} LOCALVERSION= bzImage modules } _package() { pkgdesc="The ${pkgbase^} kernel and modules" [ "${pkgbase}" = "linux-libre" ] && groups=('base') - depends=('coreutils' 'linux-libre-firmware' 'kmod') + depends=('coreutils' 'linux-libre-firmware' 'kmod' 'mkinitcpio>=0.7') optdepends=('crda: to set the correct wireless channels of your country') - provides=("kernel26${_kernelname}=${pkgver}" "linux${_kernelname}=${pkgver}") - conflicts=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}") - replaces=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}") + provides=("kernel26${_kernelname}=${pkgver}" "linux${_kernelname}=${pkgver}" "linux-libre${_kernelname}-kmod-alx") + conflicts=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}" "linux-libre${_kernelname}-kmod-alx") + replaces=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}" "linux-libre${_kernelname}-kmod-alx") backup=("etc/mkinitcpio.d/${pkgbase}.preset") install=${pkgbase}.install - if [ "$CARCH" != "mips64el" ]; then - provides+=("linux-libre${_kernelname}-kmod-alx") - conflicts+=("linux-libre${_kernelname}-kmod-alx") - replaces+=("linux-libre${_kernelname}-kmod-alx") - fi - if [ "$CARCH" = "mips64el" ]; then - optdepends+=('mkinitcpio: to make the initramfs (needs reinstall of this package)') - conflicts+=('mkinitcpio<0.7') - else - depends+=('mkinitcpio>=0.7') - fi cd "${srcdir}/linux-${_basekernel}" - KARCH=x86 - [ $CARCH = "mips64el" ] && KARCH=mips - # get kernel version _kernver="$(make LOCALVERSION= kernelrelease)" _basekernel=${_kernver%%-*} @@ -170,13 +121,7 @@ _package() { mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot} make LOCALVERSION= INSTALL_MOD_PATH="${pkgdir}" modules_install - - if [ "$CARCH" == "mips64el" ]; then - cp vmlinuz "${pkgdir}/boot/vmlinuz-${pkgbase}" - cp vmlinux "${pkgdir}/boot/vmlinux-${pkgbase}" - else - cp arch/${KARCH}/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}" - fi + cp arch/$KARCH/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}" # set correct depmod command for install cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" @@ -195,12 +140,6 @@ _package() { -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \ -i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" - # mkinitcpio 0.7 relies on bzImage to find the kernel version - if [ "$CARCH" == "mips64el" ]; then - sed -e "s|ALL_kver=.*|ALL_kver=\"${_kernver}\"|" \ - -i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" - fi - # remove build and source links rm -f "${pkgdir}"/lib/modules/${_kernver}/{source,build} # remove the firmware @@ -230,15 +169,6 @@ _package-headers() { conflicts=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") replaces=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") - KARCH=x86 - [ $CARCH = "mips64el" ] && KARCH=mips - - # in case of repackaging this is empty - if [ -z "${_kernver}" ]; then - cd "${srcdir}/linux-${_basekernel}" - _kernver="$(make LOCALVERSION= kernelrelease)" - fi - install -dm755 "${pkgdir}/usr/lib/modules/${_kernver}" cd "${srcdir}/linux-${_basekernel}" @@ -264,12 +194,6 @@ _package-headers() { cp Module.symvers "${pkgdir}/usr/lib/modules/${_kernver}/build" cp -a scripts "${pkgdir}/usr/lib/modules/${_kernver}/build" - if [ "$CARCH" = "mips64el" ]; then - cp arch/${KARCH}/Kbuild "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/" - cp -a arch/${KARCH}/loongson "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/" - cp ${srcdir}/Kbuild.platforms "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/" - fi - # fix permissions on scripts dir chmod og-w -R "${pkgdir}/usr/lib/modules/${_kernver}/build/scripts" mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/.tmp_versions" @@ -355,12 +279,7 @@ _package-headers() { done # remove unneeded architectures - rm -rf "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch/{alpha,arc,arm,arm26,arm64,avr32,blackfin,c6x,cris,frv,h8300,hexagon,ia64,m32r,m68k,m68knommu,metag,microblaze,mn10300,openrisc,parisc,powerpc,ppc,s390,score,sh,sh64,sparc,sparc64,tile,unicore32,um,v850,xtensa} - if [ "$CARCH" = "mips64el" ]; then - rm -rf ${pkgdir}/usr/lib/modules/${_kernver}/build/arch/x86 - else - rm -rf ${pkgdir}/usr/lib/modules/${_kernver}/build/arch/mips - fi + find "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch -mindepth 1 -maxdepth 1 -type d -not -name "$KARCH" -exec rm -rf {} + } _package-docs() { diff --git a/libre/linux-libre/linux-libre.install b/libre/linux-libre/linux-libre.install index 34be5215e..32514d892 100644 --- a/libre/linux-libre/linux-libre.install +++ b/libre/linux-libre/linux-libre.install @@ -8,10 +8,8 @@ post_install () { # updating module dependencies echo ">>> Updating module dependencies. Please wait ..." depmod ${KERNEL_VERSION} - if command -v mkinitcpio 2>&1 > /dev/null; then - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - fi + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} } post_upgrade() { @@ -22,10 +20,8 @@ post_upgrade() { # updating module dependencies echo ">>> Updating module dependencies. Please wait ..." depmod ${KERNEL_VERSION} - if command -v mkinitcpio 2>&1 > /dev/null; then - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - fi + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} if [ $(vercmp $2 3.13) -lt 0 ]; then echo ">>> WARNING: AT keyboard support is no longer built into the kernel." -- cgit v1.2.3 From 7d87ee0c4752139c1ba492188ea5c07b01057159 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Wed, 20 Aug 2014 02:00:50 -0400 Subject: linux-libre{,-lts,-grsec}: Adjust version numbers following discussion This also renames some variables to make consistency easier. --- libre/linux-libre-grsec/PKGBUILD | 96 +++++++++++------------ libre/linux-libre-grsec/linux-libre-grsec.install | 58 -------------- libre/linux-libre-grsec/linux-libre-grsec.preset | 14 ---- libre/linux-libre-grsec/linux.install | 58 ++++++++++++++ libre/linux-libre-grsec/linux.preset | 14 ++++ libre/linux-libre-lts/PKGBUILD | 87 ++++++++++---------- libre/linux-libre-lts/linux-libre-lts.install | 37 --------- libre/linux-libre-lts/linux-libre-lts.preset | 14 ---- libre/linux-libre-lts/linux.install | 37 +++++++++ libre/linux-libre-lts/linux.preset | 14 ++++ libre/linux-libre/PKGBUILD | 83 +++++++++++--------- libre/linux-libre/config.i686 | 2 +- libre/linux-libre/config.x86_64 | 2 +- libre/linux-libre/linux-libre.install | 37 --------- libre/linux-libre/linux-libre.preset | 14 ---- libre/linux-libre/linux.install | 37 +++++++++ libre/linux-libre/linux.preset | 14 ++++ 17 files changed, 308 insertions(+), 310 deletions(-) delete mode 100644 libre/linux-libre-grsec/linux-libre-grsec.install delete mode 100644 libre/linux-libre-grsec/linux-libre-grsec.preset create mode 100644 libre/linux-libre-grsec/linux.install create mode 100644 libre/linux-libre-grsec/linux.preset delete mode 100644 libre/linux-libre-lts/linux-libre-lts.install delete mode 100644 libre/linux-libre-lts/linux-libre-lts.preset create mode 100644 libre/linux-libre-lts/linux.install create mode 100644 libre/linux-libre-lts/linux.preset delete mode 100644 libre/linux-libre/linux-libre.install delete mode 100644 libre/linux-libre/linux-libre.preset create mode 100644 libre/linux-libre/linux.install create mode 100644 libre/linux-libre/linux.preset diff --git a/libre/linux-libre-grsec/PKGBUILD b/libre/linux-libre-grsec/PKGBUILD index 55292906f..e2fc2a8be 100644 --- a/libre/linux-libre-grsec/PKGBUILD +++ b/libre/linux-libre-grsec/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 117382 2014-08-14 07:07:04Z thestinger $ +# $Id$ # Maintainer (Arch): Daniel Micay # Contributor (Arch): Tobias Powalowski # Contributor (Arch): Thomas Baechler @@ -11,28 +11,30 @@ # Contributor: Márcio Silva # Contributor: Luke Shumaker -pkgbase=linux-libre-grsec # Build stock -libre-grsec kernel -#pkgbase=linux-libre-custom # Build kernel with a different name -_basekernel=3.15 -_sublevel=10 +pkgbase=linux-libre-grsec # Build kernel with -grsec localname +_pkgbasever=3.15-gnu +_pkgver=3.15.10-gnu _grsecver=3.0 _timestamp=201408140023 -_pkgver=${_basekernel}.${_sublevel} -pkgver=${_basekernel}.${_sublevel}.${_timestamp} + +_replaces=('kernel26%' 'kernel26-libre%' 'linux%' 'linux-libre%-kmod-alx') # '%' gets replaced with _kernelname + +_srcname=linux-${_pkgbasever%-*} +pkgver=${_pkgver//-/.}.${_timestamp} pkgrel=1 arch=('i686' 'x86_64') url="https://grsecurity.net/" license=('GPL2') makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc') options=('!strip') -source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gnu/linux-libre-${_basekernel}-gnu.tar.xz" - "http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}-gnu/patch-${_basekernel}-gnu-${_pkgver}-gnu.xz" - "https://grsecurity.net/test/grsecurity-${_grsecver}-${_pkgver}-${_timestamp}.patch" - "https://grsecurity.net/test/grsecurity-${_grsecver}-${_pkgver}-${_timestamp}.patch.sig" +source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/linux-libre-${_pkgbasever}.tar.xz" + "http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/patch-${_pkgbasever}-${_pkgver}.xz" + "https://grsecurity.net/test/grsecurity-${_grsecver}-${_pkgver%-*}-${_timestamp}.patch" + "https://grsecurity.net/test/grsecurity-${_grsecver}-${_pkgver%-*}-${_timestamp}.patch.sig" # the main kernel config files 'config.i686' 'config.x86_64' # standard config files for mkinitcpio ramdisk - "${pkgbase}.preset" + 'linux.preset' 'boot-logo.patch' 'change-default-console-loglevel.patch' ) @@ -42,12 +44,12 @@ sha256sums=('93450dc189131b6a4de862f35c5087a58cc7bae1c24caa535d2357cc3301b688' 'SKIP' 'd47cc4487a687782d4010c81002a48ee0171981863ab38b9f656d6e780d4a297' 'b4e55b41c014df808daad8105e4cbbf684df94641c213d2d9e6fc87e2a4ea59f' - '9d2f34f1a8c514a7117b9b017a1f7312fb351f4d0b079eed102f89361534d486' + 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' 'f913384dd6dbafca476fcf4ccd35f0f497dda5f3074866022facdb92647771f6' 'faced4eb4c47c4eb1a9ee8a5bf8a7c4b49d6b4d78efbe426e410730e6267d182') _kernelname=${pkgbase#linux-libre} -_localversioname=-libre-grsec +_replaces=("${_replaces[@]/\%/${_kernelname}}") case "$CARCH" in i686|x86_64) KARCH=x86;; @@ -55,14 +57,15 @@ case "$CARCH" in esac prepare() { - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" - if [ "${_basekernel}" != "${_pkgver}" ]; then - patch -p1 -i "${srcdir}/patch-${_basekernel}-gnu-${_pkgver}-gnu" + # add upstream patch + if [ "${_pkgbasever}" != "${_pkgver}" ]; then + patch -p1 -i "${srcdir}/patch-${_pkgbasever}-${_pkgver}" fi # add grsecurity patches - patch -Np1 -i "${srcdir}/grsecurity-${_grsecver}-${_pkgver}-${_timestamp}.patch" + patch -Np1 -i "${srcdir}/grsecurity-${_grsecver}-${_pkgver%-*}-${_timestamp}.patch" rm localversion-grsec # add freedo as boot logo @@ -79,12 +82,12 @@ prepare() { cat "${srcdir}/config.${CARCH}" > ./.config if [ "${_kernelname}" != "" ]; then - sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" ./.config + sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config fi - # set extraversion to pkgrel - sed -ri "s|^(EXTRAVERSION =).*|\1 .${_timestamp}-${pkgrel}|" Makefile + # append pkgrel to extraversion + sed -ri "s|^(EXTRAVERSION =.*\S).*|\1-${_timestamp}-${pkgrel}|" Makefile # don't run depmod on 'make install'. We'll do this ourselves in packaging sed -i '2iexit 0' scripts/depmod.sh @@ -105,25 +108,25 @@ prepare() { } build() { - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" make ${MAKEFLAGS} LOCALVERSION= bzImage modules } _package() { - pkgdesc="The ${pkgbase^} kernel and modules with grsecurity/PaX patches" + pkgdesc="The Linux-libre kernel and modules with grsecurity/PaX patches" [ "${pkgbase}" = "linux-libre" ] && groups=('base') - depends=('coreutils' 'linux-libre-firmware' 'kmod' 'grsec-common' 'mkinitcpio>=0.7') + depends=('coreutils' 'linux-firmware' 'kmod' 'grsec-common' 'mkinitcpio>=0.7') optdepends=('crda: to set the correct wireless channels of your country' 'gradm: to configure and enable Role Based Access Control (RBAC)' 'paxd: to enable PaX exploit mitigations and apply exceptions automatically') - provides=("kernel26${_kernelname}=${pkgver}" "linux${_kernelname}=${pkgver}") - conflicts=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}") - replaces=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}") + provides=( "${_replaces[@]/%/=${pkgver}}") + conflicts=("${_replaces[@]}") + replaces=( "${_replaces[@]}") backup=("etc/mkinitcpio.d/${pkgbase}.preset") - install=${pkgbase}.install + install=linux.install - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" # get kernel version _kernver="$(make LOCALVERSION= kernelrelease)" @@ -132,8 +135,7 @@ _package() { mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot} make LOCALVERSION= INSTALL_MOD_PATH="${pkgdir}" modules_install - - cp arch/${KARCH}/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}" + cp arch/$KARCH/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}" # set correct depmod command for install cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" @@ -144,9 +146,9 @@ _package() { -i "${startdir}/${install}" # install mkinitcpio preset file for kernel - install -D -m644 "${srcdir}/${pkgbase}.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" + install -D -m644 "${srcdir}/linux.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" sed \ - -e "1s|'linux*.*'|'${pkgbase}'|" \ + -e "1s|'linux.*'|'${pkgbase}'|" \ -e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgbase}\"|" \ -e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgbase}.img\"|" \ -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \ @@ -159,10 +161,10 @@ _package() { # gzip -9 all modules to save 100MB of space find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; # make room for external modules - ln -s "../extramodules-${_basekernel}${_localversionname:--libre-grsec}" "${pkgdir}/lib/modules/${_kernver}/extramodules" + ln -s "../extramodules-${_basekernel}${_kernelname:--PARABOLA}" "${pkgdir}/lib/modules/${_kernver}/extramodules" # add real version for building modules and running depmod from post_install/upgrade - mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--libre-grsec}" - echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--libre-grsec}/version" + mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--PARABOLA}" + echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--PARABOLA}/version" # Now we call depmod... depmod -b "${pkgdir}" -F System.map "${_kernver}" @@ -186,19 +188,13 @@ _package() { _package-headers() { pkgdesc="Header files and scripts for building modules for ${pkgbase^} kernel" - provides=("kernel26${_kernelname}-headers=${pkgver}" "linux${_kernelname}-headers=${pkgver}") - conflicts=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") - replaces=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") - - # in case of repackaging this is empty - if [ -z "${_kernver}" ]; then - cd "${srcdir}/linux-${_basekernel}" - _kernver="$(make LOCALVERSION= kernelrelease)" - fi + provides=( "${_replaces[@]/%/-headers=${pkgver}}") + conflicts=("${_replaces[@]/%/-headers}") + replaces=( "${_replaces[@]/%/-headers}") install -dm755 "${pkgdir}/usr/lib/modules/${_kernver}" - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" install -D -m644 Makefile \ "${pkgdir}/usr/lib/modules/${_kernver}/build/Makefile" install -D -m644 kernel/Makefile \ @@ -311,11 +307,11 @@ _package-headers() { _package-docs() { pkgdesc="Kernel hackers manual - HTML documentation that comes with the ${pkgbase^} kernel" - provides=("kernel26${_kernelname}-docs=${pkgver}" "linux${_kernelname}-docs=${pkgver}") - conflicts=("kernel26${_kernelname}-docs" "kernel26-libre${_kernelname}-docs" "linux${_kernelname}-docs") - replaces=("kernel26${_kernelname}-docs" "kernel26-libre${_kernelname}-docs" "linux${_kernelname}-docs") + provides=( "${_replaces[@]/%/-docs=${pkgver}}") + conflicts=("${_replaces[@]/%/-docs}") + replaces=( "${_replaces[@]/%/-docs}") - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build" cp -al Documentation "${pkgdir}/usr/lib/modules/${_kernver}/build" diff --git a/libre/linux-libre-grsec/linux-libre-grsec.install b/libre/linux-libre-grsec/linux-libre-grsec.install deleted file mode 100644 index 71bc3aabc..000000000 --- a/libre/linux-libre-grsec/linux-libre-grsec.install +++ /dev/null @@ -1,58 +0,0 @@ -# arg 1: the new package version -# arg 2: the old package version - -KERNEL_NAME=-grsec -KERNEL_VERSION= - -_uderef_warning() { - if [[ $(uname -m) = x86_64 ]]; then - cat <>> Updating module dependencies. Please wait ..." - depmod ${KERNEL_VERSION} - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - - _uderef_warning -} - -post_upgrade() { - if findmnt --fstab -uno SOURCE /boot &>/dev/null && ! mountpoint -q /boot; then - echo "WARNING: /boot appears to be a separate partition but is not mounted." - fi - - if getent group proc-trusted >/dev/null; then - groupdel proc-trusted - fi - - # updating module dependencies - echo ">>> Updating module dependencies. Please wait ..." - depmod ${KERNEL_VERSION} - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - - if [ $(vercmp $2 3.13) -lt 0 ]; then - echo ">>> WARNING: AT keyboard support is no longer built into the kernel." - echo ">>> In order to use your keyboard during early init, you MUST" - echo ">>> include the 'keyboard' hook in your mkinitcpio.conf." - fi - - if [[ $(vercmp $2 3.15.6.201407232200-2) -lt 0 ]]; then - _uderef_warning - fi -} - -post_remove() { - # also remove the compat symlinks - rm -f boot/initramfs-linux-libre${KERNEL_NAME}.img - rm -f boot/initramfs-linux-libre${KERNEL_NAME}-fallback.img -} diff --git a/libre/linux-libre-grsec/linux-libre-grsec.preset b/libre/linux-libre-grsec/linux-libre-grsec.preset deleted file mode 100644 index 3fe913d44..000000000 --- a/libre/linux-libre-grsec/linux-libre-grsec.preset +++ /dev/null @@ -1,14 +0,0 @@ -# mkinitcpio preset file for the 'linux-libre-grsec' package - -ALL_config="/etc/mkinitcpio.conf" -ALL_kver="/boot/vmlinuz-linux-libre-grsec" - -PRESETS=('default' 'fallback') - -#default_config="/etc/mkinitcpio.conf" -default_image="/boot/initramfs-linux-libre-grsec.img" -#default_options="" - -#fallback_config="/etc/mkinitcpio.conf" -fallback_image="/boot/initramfs-linux-libre-grsec-fallback.img" -fallback_options="-S autodetect" diff --git a/libre/linux-libre-grsec/linux.install b/libre/linux-libre-grsec/linux.install new file mode 100644 index 000000000..406ab9ae9 --- /dev/null +++ b/libre/linux-libre-grsec/linux.install @@ -0,0 +1,58 @@ +# arg 1: the new package version +# arg 2: the old package version + +KERNEL_NAME= +KERNEL_VERSION= + +_uderef_warning() { + if [[ $(uname -m) = x86_64 ]]; then + cat <>> Updating module dependencies. Please wait ..." + depmod ${KERNEL_VERSION} + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} + + _uderef_warning +} + +post_upgrade() { + if findmnt --fstab -uno SOURCE /boot &>/dev/null && ! mountpoint -q /boot; then + echo "WARNING: /boot appears to be a separate partition but is not mounted." + fi + + if getent group proc-trusted >/dev/null; then + groupdel proc-trusted + fi + + # updating module dependencies + echo ">>> Updating module dependencies. Please wait ..." + depmod ${KERNEL_VERSION} + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} + + if [ $(vercmp $2 3.13) -lt 0 ]; then + echo ">>> WARNING: AT keyboard support is no longer built into the kernel." + echo ">>> In order to use your keyboard during early init, you MUST" + echo ">>> include the 'keyboard' hook in your mkinitcpio.conf." + fi + + if [[ $(vercmp $2 3.15.6.201407232200-2) -lt 0 ]]; then + _uderef_warning + fi +} + +post_remove() { + # also remove the compat symlinks + rm -f boot/initramfs-linux-libre${KERNEL_NAME}.img + rm -f boot/initramfs-linux-libre${KERNEL_NAME}-fallback.img +} diff --git a/libre/linux-libre-grsec/linux.preset b/libre/linux-libre-grsec/linux.preset new file mode 100644 index 000000000..b06292d10 --- /dev/null +++ b/libre/linux-libre-grsec/linux.preset @@ -0,0 +1,14 @@ +# mkinitcpio preset file for the 'linux' package + +ALL_config="/etc/mkinitcpio.conf" +ALL_kver="/boot/vmlinuz-linux" + +PRESETS=('default' 'fallback') + +#default_config="/etc/mkinitcpio.conf" +default_image="/boot/initramfs-linux.img" +#default_options="" + +#fallback_config="/etc/mkinitcpio.conf" +fallback_image="/boot/initramfs-linux-fallback.img" +fallback_options="-S autodetect" diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD index 1488f31e5..5186dfc29 100644 --- a/libre/linux-libre-lts/PKGBUILD +++ b/libre/linux-libre-lts/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 219733 2014-08-14 06:14:31Z bpiotrowski $ +# $Id$ # Maintainer (Arch): Tobias Powalowski # Maintainer (Arch): Thomas Baechler # Maintainer: André Silva @@ -8,23 +8,26 @@ # Contributor: Márcio Silva # Contributor: Luke Shumaker -pkgbase=linux-libre-lts # Build stock -libre-lts kernel -#pkgbase=linux-libre-custom # Build kernel with a different name -_basekernel=3.14 -_sublevel=17 -pkgver=${_basekernel}.${_sublevel} +pkgbase=linux-libre-lts # Build kernel with -lts localname +_pkgbasever=3.14-gnu +_pkgver=3.14.17-gnu + +_replaces=('kernel26%' 'kernel26-libre%' 'linux%' 'linux-libre%-kmod-alx') # '%' gets replaced with _kernelname + +_srcname=linux-${_pkgbasever%-*} +pkgver=${_pkgver//-/.} pkgrel=1 arch=('i686' 'x86_64') url="http://linux-libre.fsfla.org/" license=('GPL2') makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc') options=('!strip') -source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gnu/linux-libre-${_basekernel}-gnu.tar.xz" - "http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/patch-${_basekernel}-gnu-${pkgver}-gnu.xz" +source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/linux-libre-${_pkgbasever}.tar.xz" + "http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/patch-${_pkgbasever}-${_pkgver}.xz" # the main kernel config files 'config.i686' 'config.x86_64' # standard config files for mkinitcpio ramdisk - "${pkgbase}.preset" + 'linux.preset' 'boot-logo.patch' 'change-default-console-loglevel.patch' '0001-Bluetooth-allocate-static-minor-for-vhci.patch' @@ -36,7 +39,7 @@ sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b' 'f747eeb343d5105bcd1a1b02ce391c746bccbce62e58394b674fc553be844ccc' '9e7dcc90121995024632476d50286b62dbb73da20a7970653a2d72a0a98406c0' '35f283689c4f8b346bc05ac57c3cce50a61a1d0c11a665fc1abf519bb3f1beea' - 'f621efae2b2303f4d7bf992904c9ac88d64d1ed773f2d8e7f789389e0094f95a' + 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' '5ae80ee1cbc0c894d9f5dd99d201999ea3b384fab9d047051b28dca12e355c47' 'faced4eb4c47c4eb1a9ee8a5bf8a7c4b49d6b4d78efbe426e410730e6267d182' '6d72e14552df59e6310f16c176806c408355951724cd5b48a47bf01591b8be02' @@ -45,7 +48,7 @@ sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b' 'cf2e7a2d00787f754028e7459688c2755a406e632ce48b60952fa4ff7ed6f4b7') _kernelname=${pkgbase#linux-libre} -_localversionname=-libre-lts +_replaces=("${_replaces[@]/\%/${_kernelname}}") case "$CARCH" in i686|x86_64) KARCH=x86;; @@ -53,10 +56,11 @@ case "$CARCH" in esac prepare() { - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" - if [ "${_basekernel}" != "${pkgver}" ]; then - patch -p1 -i "${srcdir}/patch-${_basekernel}-gnu-${pkgver}-gnu" + # add upstream patch + if [ "${_pkgbasever}" != "${_pkgver}" ]; then + patch -p1 -i "${srcdir}/patch-${_pkgbasever}-${_pkgver}" fi # add freedo as boot logo @@ -84,12 +88,12 @@ prepare() { cat "${srcdir}/config.${CARCH}" > ./.config if [ "${_kernelname}" != "" ]; then - sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" ./.config + sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config fi - # set extraversion to pkgrel - sed -ri "s|^(EXTRAVERSION =).*|\1 -${pkgrel}|" Makefile + # append pkgrel to extraversion + sed -ri "s|^(EXTRAVERSION =.*\S).*|\1-${pkgrel}|" Makefile # don't run depmod on 'make install'. We'll do this ourselves in packaging sed -i '2iexit 0' scripts/depmod.sh @@ -110,23 +114,23 @@ prepare() { } build() { - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" make ${MAKEFLAGS} LOCALVERSION= bzImage modules } _package() { - pkgdesc="The ${pkgbase^} kernel and modules - stable longtime supported kernel package suitable for servers" + pkgdesc="The ${pkgbase/linux/Linux} kernel and modules" [ "${pkgbase}" = "linux-libre" ] && groups=('base') - depends=('coreutils' 'linux-libre-firmware' 'kmod' 'mkinitcpio>=0.7') + depends=('coreutils' 'linux-firmware' 'kmod' 'mkinitcpio>=0.7') optdepends=('crda: to set the correct wireless channels of your country') - provides=("kernel26${_kernelname}=${pkgver}" "linux${_kernelname}=${pkgver}" "linux-libre${_kernelname}-kmod-alx") - conflicts=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}" "linux-libre${_kernelname}-kmod-alx") - replaces=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}" "linux-libre${_kernelname}-kmod-alx") + provides=( "${_replaces[@]/%/=${pkgver}}") + conflicts=("${_replaces[@]}") + replaces=( "${_replaces[@]}") backup=("etc/mkinitcpio.d/${pkgbase}.preset") - install=${pkgbase}.install + install=linux.install - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" # get kernel version _kernver="$(make LOCALVERSION= kernelrelease)" @@ -135,7 +139,6 @@ _package() { mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot} make LOCALVERSION= INSTALL_MOD_PATH="${pkgdir}" modules_install - cp arch/$KARCH/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}" # set correct depmod command for install @@ -147,9 +150,9 @@ _package() { -i "${startdir}/${install}" # install mkinitcpio preset file for kernel - install -D -m644 "${srcdir}/${pkgbase}.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" + install -D -m644 "${srcdir}/linux.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" sed \ - -e "1s|'linux*.*'|'${pkgbase}'|" \ + -e "1s|'linux.*'|'${pkgbase}'|" \ -e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgbase}\"|" \ -e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgbase}.img\"|" \ -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \ @@ -162,10 +165,10 @@ _package() { # gzip -9 all modules to save 100MB of space find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; # make room for external modules - ln -s "../extramodules-${_basekernel}${_localversionname:--libre-lts}" "${pkgdir}/lib/modules/${_kernver}/extramodules" + ln -s "../extramodules-${_basekernel}${_kernelname:--PARABOLA}" "${pkgdir}/lib/modules/${_kernver}/extramodules" # add real version for building modules and running depmod from post_install/upgrade - mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--libre-lts}" - echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--libre-lts}/version" + mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--PARABOLA}" + echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--PARABOLA}/version" # Now we call depmod... depmod -b "${pkgdir}" -F System.map "${_kernver}" @@ -180,19 +183,13 @@ _package() { _package-headers() { pkgdesc="Header files and scripts for building modules for ${pkgbase^} kernel" - provides=("kernel26${_kernelname}-headers=${pkgver}" "linux${_kernelname}-headers=${pkgver}") - conflicts=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") - replaces=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") - - # in case of repackaging this is empty - if [ -z "${_kernver}" ]; then - cd "${srcdir}/linux-${_basekernel}" - _kernver="$(make LOCALVERSION= kernelrelease)" - fi + provides=( "${_replaces[@]/%/-headers=${pkgver}}") + conflicts=("${_replaces[@]/%/-headers}") + replaces=( "${_replaces[@]/%/-headers}") install -dm755 "${pkgdir}/usr/lib/modules/${_kernver}" - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" install -D -m644 Makefile \ "${pkgdir}/usr/lib/modules/${_kernver}/build/Makefile" install -D -m644 kernel/Makefile \ @@ -305,11 +302,11 @@ _package-headers() { _package-docs() { pkgdesc="Kernel hackers manual - HTML documentation that comes with the ${pkgbase^} kernel" - provides=("kernel26${_kernelname}-docs=${pkgver}" "linux${_kernelname}-docs=${pkgver}") - conflicts=("kernel26${_kernelname}-docs" "kernel26-libre${_kernelname}-docs" "linux${_kernelname}-docs") - replaces=("kernel26${_kernelname}-docs" "kernel26-libre${_kernelname}-docs" "linux${_kernelname}-docs") + provides=( "${_replaces[@]/%/-docs=${pkgver}}") + conflicts=("${_replaces[@]/%/-docs}") + replaces=( "${_replaces[@]/%/-docs}") - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build" cp -al Documentation "${pkgdir}/usr/lib/modules/${_kernver}/build" diff --git a/libre/linux-libre-lts/linux-libre-lts.install b/libre/linux-libre-lts/linux-libre-lts.install deleted file mode 100644 index c68bdd50e..000000000 --- a/libre/linux-libre-lts/linux-libre-lts.install +++ /dev/null @@ -1,37 +0,0 @@ -# arg 1: the new package version -# arg 2: the old package version - -KERNEL_NAME=-lts -KERNEL_VERSION= - -post_install () { - # updating module dependencies - echo ">>> Updating module dependencies. Please wait ..." - depmod ${KERNEL_VERSION} - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} -} - -post_upgrade() { - if findmnt --fstab -uno SOURCE /boot &>/dev/null && ! mountpoint -q /boot; then - echo "WARNING: /boot appears to be a separate partition but is not mounted." - fi - - # updating module dependencies - echo ">>> Updating module dependencies. Please wait ..." - depmod ${KERNEL_VERSION} - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - - if [ $(vercmp $2 3.13) -lt 0 ]; then - echo ">>> WARNING: AT keyboard support is no longer built into the kernel." - echo ">>> In order to use your keyboard during early init, you MUST" - echo ">>> include the 'keyboard' hook in your mkinitcpio.conf." - fi -} - -post_remove() { - # also remove the compat symlinks - rm -f boot/initramfs-linux-libre${KERNEL_NAME}.img - rm -f boot/initramfs-linux-libre${KERNEL_NAME}-fallback.img -} diff --git a/libre/linux-libre-lts/linux-libre-lts.preset b/libre/linux-libre-lts/linux-libre-lts.preset deleted file mode 100644 index 37cf35ed0..000000000 --- a/libre/linux-libre-lts/linux-libre-lts.preset +++ /dev/null @@ -1,14 +0,0 @@ -# mkinitcpio preset file for the 'linux-libre-lts' package - -ALL_config="/etc/mkinitcpio.conf" -ALL_kver="/boot/vmlinuz-linux-libre-lts" - -PRESETS=('default' 'fallback') - -#default_config="/etc/mkinitcpio.conf" -default_image="/boot/initramfs-linux-libre-lts.img" -#default_options="" - -#fallback_config="/etc/mkinitcpio.conf" -fallback_image="/boot/initramfs-linux-libre-lts-fallback.img" -fallback_options="-S autodetect" diff --git a/libre/linux-libre-lts/linux.install b/libre/linux-libre-lts/linux.install new file mode 100644 index 000000000..32514d892 --- /dev/null +++ b/libre/linux-libre-lts/linux.install @@ -0,0 +1,37 @@ +# arg 1: the new package version +# arg 2: the old package version + +KERNEL_NAME= +KERNEL_VERSION= + +post_install () { + # updating module dependencies + echo ">>> Updating module dependencies. Please wait ..." + depmod ${KERNEL_VERSION} + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} +} + +post_upgrade() { + if findmnt --fstab -uno SOURCE /boot &>/dev/null && ! mountpoint -q /boot; then + echo "WARNING: /boot appears to be a separate partition but is not mounted." + fi + + # updating module dependencies + echo ">>> Updating module dependencies. Please wait ..." + depmod ${KERNEL_VERSION} + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} + + if [ $(vercmp $2 3.13) -lt 0 ]; then + echo ">>> WARNING: AT keyboard support is no longer built into the kernel." + echo ">>> In order to use your keyboard during early init, you MUST" + echo ">>> include the 'keyboard' hook in your mkinitcpio.conf." + fi +} + +post_remove() { + # also remove the compat symlinks + rm -f boot/initramfs-linux-libre${KERNEL_NAME}.img + rm -f boot/initramfs-linux-libre${KERNEL_NAME}-fallback.img +} diff --git a/libre/linux-libre-lts/linux.preset b/libre/linux-libre-lts/linux.preset new file mode 100644 index 000000000..b06292d10 --- /dev/null +++ b/libre/linux-libre-lts/linux.preset @@ -0,0 +1,14 @@ +# mkinitcpio preset file for the 'linux' package + +ALL_config="/etc/mkinitcpio.conf" +ALL_kver="/boot/vmlinuz-linux" + +PRESETS=('default' 'fallback') + +#default_config="/etc/mkinitcpio.conf" +default_image="/boot/initramfs-linux.img" +#default_options="" + +#fallback_config="/etc/mkinitcpio.conf" +fallback_image="/boot/initramfs-linux-fallback.img" +fallback_options="-S autodetect" diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD index a198bb0d2..3c29cab4c 100644 --- a/libre/linux-libre/PKGBUILD +++ b/libre/linux-libre/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 219731 2014-08-14 06:02:01Z tpowa $ +# $Id$ # Maintainer (Arch): Tobias Powalowski # Maintainer (Arch): Thomas Baechler # Maintainer: André Silva @@ -8,38 +8,42 @@ # Contributor: Márcio Silva # Contributor: Luke Shumaker -pkgbase=linux-libre # Build stock -libre kernel +pkgbase=linux-libre # Build stock -PARABOLA kernel #pkgbase=linux-libre-custom # Build kernel with a different name -_basekernel=3.16 -_sublevel=1 -pkgver=${_basekernel}.${_sublevel} +_pkgbasever=3.16-gnu +_pkgver=3.16.1-gnu + +_replaces=('kernel26%' 'kernel26-libre%' 'linux%' 'linux-libre%-kmod-alx') # '%' gets replaced with _kernelname + +_srcname=linux-${_pkgbasever%-*} +pkgver=${_pkgver//-/.} pkgrel=1 arch=('i686' 'x86_64') url="http://linux-libre.fsfla.org/" license=('GPL2') makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc') options=('!strip') -source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gnu/linux-libre-${_basekernel}-gnu.tar.xz" - "http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/patch-${_basekernel}-gnu-${pkgver}-gnu.xz" +source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/linux-libre-${_pkgbasever}.tar.xz" + "http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/patch-${_pkgbasever}-${_pkgver}.xz" # the main kernel config files 'config.i686' 'config.x86_64' # standard config files for mkinitcpio ramdisk - "${pkgbase}.preset" + 'linux.preset' 'boot-logo.patch' 'change-default-console-loglevel.patch' 'compal-laptop-hwmon-fix.patch' ) sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218' '3bbc78694d76b12b6229799d7c4daf5215b9dd731908d96b03603aceb54ad5c7' - '46f70101acc6ffa57ea8f077db55ad554dd4b335c2e0fa85edf61db9f89c45ed' - '5b809f025fc13ccffb77092fadf044b4a52d9b8242028b01d15845589c4e1e19' - 'dfe01c93d83cdac9ca502715ceb6ac9502d327c939fec2e3052a5a58422dc176' + '65739ffbc01d1ecea8328130b14e0258aa036e37ede2f0b1aa9b8efa2ad68a66' + '0d827a89f8955e1f39b6a6d10887d1ca7a46b42cc4417bf823eb9f260c26f660' + 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' '8303b426b1a6dce456b2350003558ae312d21cab0ae6c1f0d7b9d21395f4e177' '1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99' 'f36f61a0a72bcb0a9c04264343503bfbf927c9ea0db819e66734a3933b060588') _kernelname=${pkgbase#linux-libre} -_localversionname=-libre +_replaces=("${_replaces[@]/\%/${_kernelname}}") case "$CARCH" in i686|x86_64) KARCH=x86;; @@ -47,10 +51,11 @@ case "$CARCH" in esac prepare() { - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" - if [ "${_basekernel}" != "${pkgver}" ]; then - patch -p1 -i "${srcdir}/patch-${_basekernel}-gnu-${pkgver}-gnu" + # add upstream patch + if [ "${_pkgbasever}" != "${_pkgver}" ]; then + patch -p1 -i "${srcdir}/patch-${_pkgbasever}-${_pkgver}" fi # add freedo as boot logo @@ -70,12 +75,12 @@ prepare() { cat "${srcdir}/config.${CARCH}" > ./.config if [ "${_kernelname}" != "" ]; then - sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" ./.config + sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config fi - # set extraversion to pkgrel - sed -ri "s|^(EXTRAVERSION =).*|\1 -${pkgrel}|" Makefile + # append pkgrel to extraversion + sed -ri "s|^(EXTRAVERSION =.*\S).*|\1-${pkgrel}|" Makefile # don't run depmod on 'make install'. We'll do this ourselves in packaging sed -i '2iexit 0' scripts/depmod.sh @@ -96,23 +101,23 @@ prepare() { } build() { - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" make ${MAKEFLAGS} LOCALVERSION= bzImage modules } _package() { - pkgdesc="The ${pkgbase^} kernel and modules" + pkgdesc="The ${pkgbase/linux/Linux} kernel and modules" [ "${pkgbase}" = "linux-libre" ] && groups=('base') - depends=('coreutils' 'linux-libre-firmware' 'kmod' 'mkinitcpio>=0.7') + depends=('coreutils' 'linux-firmware' 'kmod' 'mkinitcpio>=0.7') optdepends=('crda: to set the correct wireless channels of your country') - provides=("kernel26${_kernelname}=${pkgver}" "linux${_kernelname}=${pkgver}" "linux-libre${_kernelname}-kmod-alx") - conflicts=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}" "linux-libre${_kernelname}-kmod-alx") - replaces=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}" "linux-libre${_kernelname}-kmod-alx") + provides=( "${_replaces[@]/%/=${pkgver}}") + conflicts=("${_replaces[@]}") + replaces=( "${_replaces[@]}") backup=("etc/mkinitcpio.d/${pkgbase}.preset") - install=${pkgbase}.install + install=linux.install - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" # get kernel version _kernver="$(make LOCALVERSION= kernelrelease)" @@ -132,9 +137,9 @@ _package() { -i "${startdir}/${install}" # install mkinitcpio preset file for kernel - install -D -m644 "${srcdir}/${pkgbase}.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" + install -D -m644 "${srcdir}/linux.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" sed \ - -e "1s|'linux*.*'|'${pkgbase}'|" \ + -e "1s|'linux.*'|'${pkgbase}'|" \ -e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgbase}\"|" \ -e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgbase}.img\"|" \ -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \ @@ -147,10 +152,10 @@ _package() { # gzip -9 all modules to save 100MB of space find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; # make room for external modules - ln -s "../extramodules-${_basekernel}${_localversionname:--libre}" "${pkgdir}/lib/modules/${_kernver}/extramodules" + ln -s "../extramodules-${_basekernel}${_kernelname:--PARABOLA}" "${pkgdir}/lib/modules/${_kernver}/extramodules" # add real version for building modules and running depmod from post_install/upgrade - mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--libre}" - echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--libre}/version" + mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--PARABOLA}" + echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--PARABOLA}/version" # Now we call depmod... depmod -b "${pkgdir}" -F System.map "${_kernver}" @@ -165,13 +170,13 @@ _package() { _package-headers() { pkgdesc="Header files and scripts for building modules for ${pkgbase^} kernel" - provides=("kernel26${_kernelname}-headers=${pkgver}" "linux${_kernelname}-headers=${pkgver}") - conflicts=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") - replaces=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") + provides=( "${_replaces[@]/%/-headers=${pkgver}}") + conflicts=("${_replaces[@]/%/-headers}") + replaces=( "${_replaces[@]/%/-headers}") install -dm755 "${pkgdir}/usr/lib/modules/${_kernver}" - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" install -D -m644 Makefile \ "${pkgdir}/usr/lib/modules/${_kernver}/build/Makefile" install -D -m644 kernel/Makefile \ @@ -284,11 +289,11 @@ _package-headers() { _package-docs() { pkgdesc="Kernel hackers manual - HTML documentation that comes with the ${pkgbase^} kernel" - provides=("kernel26${_kernelname}-docs=${pkgver}" "linux${_kernelname}-docs=${pkgver}") - conflicts=("kernel26${_kernelname}-docs" "kernel26-libre${_kernelname}-docs" "linux${_kernelname}-docs") - replaces=("kernel26${_kernelname}-docs" "kernel26-libre${_kernelname}-docs" "linux${_kernelname}-docs") + provides=( "${_replaces[@]/%/-docs=${pkgver}}") + conflicts=("${_replaces[@]/%/-docs}") + replaces=( "${_replaces[@]/%/-docs}") - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build" cp -al Documentation "${pkgdir}/usr/lib/modules/${_kernver}/build" diff --git a/libre/linux-libre/config.i686 b/libre/linux-libre/config.i686 index 330771a68..3a04607aa 100644 --- a/libre/linux-libre/config.i686 +++ b/libre/linux-libre/config.i686 @@ -49,7 +49,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="-libre" +CONFIG_LOCALVERSION="-PARABOLA" CONFIG_LOCALVERSION_AUTO=y CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/libre/linux-libre/config.x86_64 b/libre/linux-libre/config.x86_64 index 6ed5f2847..f6d137835 100644 --- a/libre/linux-libre/config.x86_64 +++ b/libre/linux-libre/config.x86_64 @@ -50,7 +50,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="-libre" +CONFIG_LOCALVERSION="-PARABOLA" CONFIG_LOCALVERSION_AUTO=y CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/libre/linux-libre/linux-libre.install b/libre/linux-libre/linux-libre.install deleted file mode 100644 index 32514d892..000000000 --- a/libre/linux-libre/linux-libre.install +++ /dev/null @@ -1,37 +0,0 @@ -# arg 1: the new package version -# arg 2: the old package version - -KERNEL_NAME= -KERNEL_VERSION= - -post_install () { - # updating module dependencies - echo ">>> Updating module dependencies. Please wait ..." - depmod ${KERNEL_VERSION} - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} -} - -post_upgrade() { - if findmnt --fstab -uno SOURCE /boot &>/dev/null && ! mountpoint -q /boot; then - echo "WARNING: /boot appears to be a separate partition but is not mounted." - fi - - # updating module dependencies - echo ">>> Updating module dependencies. Please wait ..." - depmod ${KERNEL_VERSION} - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - - if [ $(vercmp $2 3.13) -lt 0 ]; then - echo ">>> WARNING: AT keyboard support is no longer built into the kernel." - echo ">>> In order to use your keyboard during early init, you MUST" - echo ">>> include the 'keyboard' hook in your mkinitcpio.conf." - fi -} - -post_remove() { - # also remove the compat symlinks - rm -f boot/initramfs-linux-libre${KERNEL_NAME}.img - rm -f boot/initramfs-linux-libre${KERNEL_NAME}-fallback.img -} diff --git a/libre/linux-libre/linux-libre.preset b/libre/linux-libre/linux-libre.preset deleted file mode 100644 index 0ac59eb14..000000000 --- a/libre/linux-libre/linux-libre.preset +++ /dev/null @@ -1,14 +0,0 @@ -# mkinitcpio preset file for the 'linux-libre' package - -ALL_config="/etc/mkinitcpio.conf" -ALL_kver="/boot/vmlinuz-linux-libre" - -PRESETS=('default' 'fallback') - -#default_config="/etc/mkinitcpio.conf" -default_image="/boot/initramfs-linux-libre.img" -#default_options="" - -#fallback_config="/etc/mkinitcpio.conf" -fallback_image="/boot/initramfs-linux-libre-fallback.img" -fallback_options="-S autodetect" diff --git a/libre/linux-libre/linux.install b/libre/linux-libre/linux.install new file mode 100644 index 000000000..32514d892 --- /dev/null +++ b/libre/linux-libre/linux.install @@ -0,0 +1,37 @@ +# arg 1: the new package version +# arg 2: the old package version + +KERNEL_NAME= +KERNEL_VERSION= + +post_install () { + # updating module dependencies + echo ">>> Updating module dependencies. Please wait ..." + depmod ${KERNEL_VERSION} + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} +} + +post_upgrade() { + if findmnt --fstab -uno SOURCE /boot &>/dev/null && ! mountpoint -q /boot; then + echo "WARNING: /boot appears to be a separate partition but is not mounted." + fi + + # updating module dependencies + echo ">>> Updating module dependencies. Please wait ..." + depmod ${KERNEL_VERSION} + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} + + if [ $(vercmp $2 3.13) -lt 0 ]; then + echo ">>> WARNING: AT keyboard support is no longer built into the kernel." + echo ">>> In order to use your keyboard during early init, you MUST" + echo ">>> include the 'keyboard' hook in your mkinitcpio.conf." + fi +} + +post_remove() { + # also remove the compat symlinks + rm -f boot/initramfs-linux-libre${KERNEL_NAME}.img + rm -f boot/initramfs-linux-libre${KERNEL_NAME}-fallback.img +} diff --git a/libre/linux-libre/linux.preset b/libre/linux-libre/linux.preset new file mode 100644 index 000000000..b06292d10 --- /dev/null +++ b/libre/linux-libre/linux.preset @@ -0,0 +1,14 @@ +# mkinitcpio preset file for the 'linux' package + +ALL_config="/etc/mkinitcpio.conf" +ALL_kver="/boot/vmlinuz-linux" + +PRESETS=('default' 'fallback') + +#default_config="/etc/mkinitcpio.conf" +default_image="/boot/initramfs-linux.img" +#default_options="" + +#fallback_config="/etc/mkinitcpio.conf" +fallback_image="/boot/initramfs-linux-fallback.img" +fallback_options="-S autodetect" -- cgit v1.2.3 From 92f0fa3c89a53b4034a5928bb57935279ceeae68 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Tue, 19 Aug 2014 21:30:37 -0400 Subject: linux-libre{,-lts,-grsec}: Insert the Freedo logos directly instead of using a patch --- libre/linux-libre-grsec/PKGBUILD | 9 +- libre/linux-libre-grsec/boot-logo.patch | 22687 ---------------------- libre/linux-libre-grsec/logo_linux_clut224.ppm | 861 + libre/linux-libre-grsec/logo_linux_mono.pbm | 159 + libre/linux-libre-grsec/logo_linux_vga16.ppm | 18724 ++++++++++++++++++ libre/linux-libre-lts/PKGBUILD | 9 +- libre/linux-libre-lts/boot-logo.patch | 23163 ---------------------- libre/linux-libre-lts/logo_linux_clut224.ppm | 861 + libre/linux-libre-lts/logo_linux_mono.pbm | 159 + libre/linux-libre-lts/logo_linux_vga16.ppm | 18724 ++++++++++++++++++ libre/linux-libre/PKGBUILD | 9 +- libre/linux-libre/boot-logo.patch | 23167 ----------------------- 12 files changed, 39506 insertions(+), 69026 deletions(-) delete mode 100644 libre/linux-libre-grsec/boot-logo.patch create mode 100644 libre/linux-libre-grsec/logo_linux_clut224.ppm create mode 100644 libre/linux-libre-grsec/logo_linux_mono.pbm create mode 100644 libre/linux-libre-grsec/logo_linux_vga16.ppm delete mode 100644 libre/linux-libre-lts/boot-logo.patch create mode 100644 libre/linux-libre-lts/logo_linux_clut224.ppm create mode 100644 libre/linux-libre-lts/logo_linux_mono.pbm create mode 100644 libre/linux-libre-lts/logo_linux_vga16.ppm delete mode 100644 libre/linux-libre/boot-logo.patch diff --git a/libre/linux-libre-grsec/PKGBUILD b/libre/linux-libre-grsec/PKGBUILD index e2fc2a8be..8e1013c40 100644 --- a/libre/linux-libre-grsec/PKGBUILD +++ b/libre/linux-libre-grsec/PKGBUILD @@ -35,7 +35,7 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/li 'config.i686' 'config.x86_64' # standard config files for mkinitcpio ramdisk 'linux.preset' - 'boot-logo.patch' + 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' ) sha256sums=('93450dc189131b6a4de862f35c5087a58cc7bae1c24caa535d2357cc3301b688' @@ -45,7 +45,9 @@ sha256sums=('93450dc189131b6a4de862f35c5087a58cc7bae1c24caa535d2357cc3301b688' 'd47cc4487a687782d4010c81002a48ee0171981863ab38b9f656d6e780d4a297' 'b4e55b41c014df808daad8105e4cbbf684df94641c213d2d9e6fc87e2a4ea59f' 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' - 'f913384dd6dbafca476fcf4ccd35f0f497dda5f3074866022facdb92647771f6' + '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' + '2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53' + 'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015' 'faced4eb4c47c4eb1a9ee8a5bf8a7c4b49d6b4d78efbe426e410730e6267d182') _kernelname=${pkgbase#linux-libre} @@ -69,7 +71,8 @@ prepare() { rm localversion-grsec # add freedo as boot logo - patch -p1 -i "${srcdir}/boot-logo.patch" + install -m644 -t drivers/video/logo \ + "${srcdir}/logo_linux_"{clut224.ppm,vga16.ppm,mono.pbm} # add latest fixes from stable queue, if needed # http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git diff --git a/libre/linux-libre-grsec/boot-logo.patch b/libre/linux-libre-grsec/boot-logo.patch deleted file mode 100644 index 2de761ff4..000000000 --- a/libre/linux-libre-grsec/boot-logo.patch +++ /dev/null @@ -1,22687 +0,0 @@ -diff --git a/drivers/video/logo/logo_linux_clut224.ppm b/drivers/video/logo/logo_linux_clut224.ppm -index 2630570..c9d8373 100644 ---- a/drivers/video/logo/logo_linux_clut224.ppm -+++ b/drivers/video/logo/logo_linux_clut224.ppm -@@ -1,1124 +1,861 @@ - P3 --# Standard 224-color Linux logo --80 80 -+80 78 - 255 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 1 1 1 0 0 0 --0 0 0 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 2 1 0 2 1 0 3 2 2 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 2 2 2 0 0 0 3 4 3 26 28 28 --37 38 37 37 38 37 14 17 19 2 2 2 0 0 0 2 2 2 --5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 3 3 3 0 0 0 1 1 1 6 6 6 --2 2 2 0 0 0 3 3 3 4 4 4 4 4 4 4 4 4 --4 4 5 3 3 3 1 0 0 0 0 0 1 0 0 0 0 0 --1 1 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --2 2 2 0 0 0 0 0 0 14 17 19 60 74 84 137 136 137 --153 152 153 137 136 137 125 124 125 60 73 81 6 6 6 3 1 0 --0 0 0 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 0 0 0 4 4 4 41 54 63 125 124 125 --60 73 81 6 6 6 4 0 0 3 3 3 4 4 4 4 4 4 --4 4 4 0 0 0 6 9 11 41 54 63 41 65 82 22 30 35 --2 2 2 2 1 0 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 5 5 5 5 5 5 2 2 2 0 0 0 --4 0 0 6 6 6 41 54 63 137 136 137 174 174 174 167 166 167 --165 164 165 165 164 165 163 162 163 163 162 163 125 124 125 41 54 63 --1 1 1 0 0 0 0 0 0 3 3 3 5 5 5 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 --3 3 3 2 0 0 4 0 0 60 73 81 156 155 156 167 166 167 --163 162 163 85 115 134 5 7 8 0 0 0 4 4 4 5 5 5 --0 0 0 2 5 5 55 98 126 90 154 193 90 154 193 72 125 159 --37 51 59 2 0 0 1 1 1 4 5 5 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 5 5 5 4 4 4 1 1 1 0 0 0 3 3 3 --37 38 37 125 124 125 163 162 163 174 174 174 158 157 158 158 157 158 --156 155 156 156 155 156 158 157 158 165 164 165 174 174 174 166 165 166 --125 124 125 16 19 21 1 0 0 0 0 0 0 0 0 4 4 4 --5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 1 1 1 --0 0 0 0 0 0 37 38 37 153 152 153 174 174 174 158 157 158 --174 174 174 163 162 163 37 38 37 4 3 3 4 0 0 1 1 1 --0 0 0 22 40 52 101 161 196 101 161 196 90 154 193 101 161 196 --64 123 161 14 17 19 0 0 0 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 --5 5 5 2 2 2 0 0 0 4 0 0 24 26 27 85 115 134 --156 155 156 174 174 174 167 166 167 156 155 156 154 153 154 157 156 157 --156 155 156 156 155 156 155 154 155 153 152 153 158 157 158 167 166 167 --174 174 174 156 155 156 60 74 84 16 19 21 0 0 0 0 0 0 --1 1 1 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 5 5 5 6 6 6 3 3 3 0 0 0 4 0 0 --13 16 17 60 73 81 137 136 137 165 164 165 156 155 156 153 152 153 --174 174 174 177 184 187 60 73 81 3 1 0 0 0 0 1 1 2 --22 30 35 64 123 161 136 185 209 90 154 193 90 154 193 90 154 193 --90 154 193 21 29 34 0 0 0 3 2 2 4 4 5 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 3 3 3 --0 0 0 0 0 0 10 13 16 60 74 84 157 156 157 174 174 174 --174 174 174 158 157 158 153 152 153 154 153 154 156 155 156 155 154 155 --156 155 156 155 154 155 154 153 154 157 156 157 154 153 154 153 152 153 --163 162 163 174 174 174 177 184 187 137 136 137 60 73 81 13 16 17 --4 0 0 0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 --5 5 5 4 4 4 1 1 1 0 0 0 3 3 3 41 54 63 --131 129 131 174 174 174 174 174 174 174 174 174 167 166 167 174 174 174 --190 197 201 137 136 137 24 26 27 4 0 0 16 21 25 50 82 103 --90 154 193 136 185 209 90 154 193 101 161 196 101 161 196 101 161 196 --31 91 132 3 6 7 0 0 0 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 2 2 2 0 0 0 4 0 0 --4 0 0 43 57 68 137 136 137 177 184 187 174 174 174 163 162 163 --155 154 155 155 154 155 156 155 156 155 154 155 158 157 158 165 164 165 --167 166 167 166 165 166 163 162 163 157 156 157 155 154 155 155 154 155 --153 152 153 156 155 156 167 166 167 174 174 174 174 174 174 131 129 131 --41 54 63 5 5 5 0 0 0 0 0 0 3 3 3 4 4 4 --1 1 1 0 0 0 1 0 0 26 28 28 125 124 125 174 174 174 --177 184 187 174 174 174 174 174 174 156 155 156 131 129 131 137 136 137 --125 124 125 24 26 27 4 0 0 41 65 82 90 154 193 136 185 209 --136 185 209 101 161 196 53 118 160 37 112 160 90 154 193 34 86 122 --7 12 15 0 0 0 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 3 3 3 0 0 0 0 0 0 5 5 5 37 38 37 --125 124 125 167 166 167 174 174 174 167 166 167 158 157 158 155 154 155 --156 155 156 156 155 156 156 155 156 163 162 163 167 166 167 155 154 155 --137 136 137 153 152 153 156 155 156 165 164 165 163 162 163 156 155 156 --156 155 156 156 155 156 155 154 155 158 157 158 166 165 166 174 174 174 --167 166 167 125 124 125 37 38 37 1 0 0 0 0 0 0 0 0 --0 0 0 24 26 27 60 74 84 158 157 158 174 174 174 174 174 174 --166 165 166 158 157 158 125 124 125 41 54 63 13 16 17 6 6 6 --6 6 6 37 38 37 80 127 157 136 185 209 101 161 196 101 161 196 --90 154 193 28 67 93 6 10 14 13 20 25 13 20 25 6 10 14 --1 1 2 4 3 3 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --1 1 1 1 0 0 4 3 3 37 38 37 60 74 84 153 152 153 --167 166 167 167 166 167 158 157 158 154 153 154 155 154 155 156 155 156 --157 156 157 158 157 158 167 166 167 167 166 167 131 129 131 43 57 68 --26 28 28 37 38 37 60 73 81 131 129 131 165 164 165 166 165 166 --158 157 158 155 154 155 156 155 156 156 155 156 156 155 156 158 157 158 --165 164 165 174 174 174 163 162 163 60 74 84 16 19 21 13 16 17 --60 73 81 131 129 131 174 174 174 174 174 174 167 166 167 165 164 165 --137 136 137 60 73 81 24 26 27 4 0 0 4 0 0 16 19 21 --52 104 138 101 161 196 136 185 209 136 185 209 90 154 193 27 99 146 --13 20 25 4 5 7 2 5 5 4 5 7 1 1 2 0 0 0 --4 4 4 4 4 4 3 3 3 2 2 2 2 2 2 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 0 0 0 --0 0 0 13 16 17 60 73 81 137 136 137 174 174 174 166 165 166 --158 157 158 156 155 156 157 156 157 156 155 156 155 154 155 158 157 158 --167 166 167 174 174 174 153 152 153 60 73 81 16 19 21 4 0 0 --4 0 0 4 0 0 6 6 6 26 28 28 60 74 84 158 157 158 --174 174 174 166 165 166 157 156 157 155 154 155 156 155 156 156 155 156 --155 154 155 158 157 158 167 166 167 167 166 167 131 129 131 125 124 125 --137 136 137 167 166 167 167 166 167 174 174 174 158 157 158 125 124 125 --16 19 21 4 0 0 4 0 0 10 13 16 49 76 92 107 159 188 --136 185 209 136 185 209 90 154 193 26 108 161 22 40 52 6 10 14 --2 3 3 1 1 2 1 1 2 4 4 5 4 4 5 4 4 5 --4 4 5 2 2 1 0 0 0 0 0 0 0 0 0 2 2 2 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 5 5 5 3 3 3 0 0 0 1 0 0 4 0 0 --37 51 59 131 129 131 167 166 167 167 166 167 163 162 163 157 156 157 --157 156 157 155 154 155 153 152 153 157 156 157 167 166 167 174 174 174 --153 152 153 125 124 125 37 38 37 4 0 0 4 0 0 4 0 0 --4 3 3 4 3 3 4 0 0 6 6 6 4 0 0 37 38 37 --125 124 125 174 174 174 174 174 174 165 164 165 156 155 156 154 153 154 --156 155 156 156 155 156 155 154 155 163 162 163 158 157 158 163 162 163 --174 174 174 174 174 174 174 174 174 125 124 125 37 38 37 0 0 0 --4 0 0 6 9 11 41 54 63 90 154 193 136 185 209 146 190 211 --136 185 209 37 112 160 22 40 52 6 10 14 3 6 7 1 1 2 --1 1 2 3 3 3 1 1 2 3 3 3 4 4 4 4 4 4 --2 2 2 2 0 0 16 19 21 37 38 37 24 26 27 0 0 0 --0 0 0 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 --4 4 4 0 0 0 0 0 0 0 0 0 26 28 28 120 125 127 --158 157 158 174 174 174 165 164 165 157 156 157 155 154 155 156 155 156 --153 152 153 153 152 153 167 166 167 174 174 174 174 174 174 125 124 125 --37 38 37 4 0 0 0 0 0 4 0 0 4 3 3 4 4 4 --4 4 4 4 4 4 5 5 5 4 0 0 4 0 0 4 0 0 --4 3 3 43 57 68 137 136 137 174 174 174 174 174 174 165 164 165 --154 153 154 153 152 153 153 152 153 153 152 153 163 162 163 174 174 174 --174 174 174 153 152 153 60 73 81 6 6 6 4 0 0 4 3 3 --32 43 50 80 127 157 136 185 209 146 190 211 146 190 211 90 154 193 --28 67 93 28 67 93 40 71 93 3 6 7 1 1 2 2 5 5 --50 82 103 79 117 143 26 37 45 0 0 0 3 3 3 1 1 1 --0 0 0 41 54 63 137 136 137 174 174 174 153 152 153 60 73 81 --2 0 0 0 0 0 --4 4 4 4 4 4 4 4 4 4 4 4 6 6 6 2 2 2 --0 0 0 2 0 0 24 26 27 60 74 84 153 152 153 174 174 174 --174 174 174 157 156 157 154 153 154 156 155 156 154 153 154 153 152 153 --165 164 165 174 174 174 177 184 187 137 136 137 43 57 68 6 6 6 --4 0 0 2 0 0 3 3 3 5 5 5 5 5 5 4 4 4 --4 4 4 4 4 4 4 4 4 5 5 5 6 6 6 4 3 3 --4 0 0 4 0 0 24 26 27 60 73 81 153 152 153 174 174 174 --174 174 174 158 157 158 158 157 158 174 174 174 174 174 174 158 157 158 --60 74 84 24 26 27 4 0 0 4 0 0 17 23 27 59 113 148 --136 185 209 191 222 234 146 190 211 136 185 209 31 91 132 7 11 13 --22 40 52 101 161 196 90 154 193 6 9 11 3 4 4 43 95 132 --136 185 209 172 205 220 55 98 126 0 0 0 0 0 0 2 0 0 --26 28 28 153 152 153 177 184 187 167 166 167 177 184 187 165 164 165 --37 38 37 0 0 0 --4 4 4 4 4 4 5 5 5 5 5 5 1 1 1 0 0 0 --13 16 17 60 73 81 137 136 137 174 174 174 174 174 174 165 164 165 --153 152 153 153 152 153 155 154 155 154 153 154 158 157 158 174 174 174 --177 184 187 163 162 163 60 73 81 16 19 21 4 0 0 4 0 0 --4 3 3 4 4 4 5 5 5 5 5 5 4 4 4 5 5 5 --5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 5 5 5 --6 6 6 4 0 0 4 0 0 4 0 0 24 26 27 60 74 84 --166 165 166 174 174 174 177 184 187 165 164 165 125 124 125 24 26 27 --4 0 0 4 0 0 5 5 5 50 82 103 136 185 209 172 205 220 --146 190 211 136 185 209 26 108 161 22 40 52 7 12 15 44 81 103 --71 116 144 28 67 93 37 51 59 41 65 82 100 139 164 101 161 196 --90 154 193 90 154 193 28 67 93 0 0 0 0 0 0 26 28 28 --125 124 125 167 166 167 163 162 163 153 152 153 163 162 163 174 174 174 --85 115 134 4 0 0 --4 4 4 5 5 5 4 4 4 1 0 0 4 0 0 34 47 55 --125 124 125 174 174 174 174 174 174 167 166 167 157 156 157 153 152 153 --155 154 155 155 154 155 158 157 158 166 165 166 167 166 167 154 153 154 --125 124 125 26 28 28 4 0 0 4 0 0 4 0 0 5 5 5 --5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 1 1 1 --0 0 0 0 0 0 1 1 1 4 4 4 4 4 4 4 4 4 --5 5 5 5 5 5 4 3 3 4 0 0 4 0 0 6 6 6 --37 38 37 131 129 131 137 136 137 37 38 37 0 0 0 4 0 0 --4 5 5 43 61 72 90 154 193 172 205 220 146 190 211 136 185 209 --90 154 193 28 67 93 13 20 25 43 61 72 71 116 144 44 81 103 --2 5 5 7 11 13 59 113 148 101 161 196 90 154 193 28 67 93 --13 20 25 6 10 14 0 0 0 13 16 17 60 73 81 137 136 137 --166 165 166 158 157 158 156 155 156 154 153 154 167 166 167 174 174 174 --60 73 81 4 0 0 --4 4 4 4 4 4 0 0 0 3 3 3 60 74 84 174 174 174 --174 174 174 167 166 167 163 162 163 155 154 155 157 156 157 155 154 155 --156 155 156 163 162 163 167 166 167 158 157 158 125 124 125 37 38 37 --4 3 3 4 0 0 4 0 0 6 6 6 6 6 6 5 5 5 --4 4 4 4 4 4 4 4 4 1 1 1 0 0 0 2 3 3 --10 13 16 7 11 13 1 0 0 0 0 0 2 2 1 4 4 4 --4 4 4 4 4 4 4 4 4 5 5 5 4 3 3 4 0 0 --4 0 0 7 11 13 13 16 17 4 0 0 3 3 3 34 47 55 --80 127 157 146 190 211 172 205 220 136 185 209 136 185 209 136 185 209 --28 67 93 22 40 52 55 98 126 55 98 126 21 29 34 7 11 13 --50 82 103 101 161 196 101 161 196 35 83 115 13 20 25 2 2 1 --1 1 2 1 1 2 37 51 59 131 129 131 174 174 174 174 174 174 --167 166 167 163 162 163 163 162 163 167 166 167 174 174 174 125 124 125 --16 19 21 4 0 0 --4 4 4 4 0 0 4 0 0 60 74 84 174 174 174 174 174 174 --158 157 158 155 154 155 155 154 155 156 155 156 155 154 155 158 157 158 --167 166 167 165 164 165 131 129 131 60 73 81 13 16 17 4 0 0 --4 0 0 4 3 3 6 6 6 4 3 3 5 5 5 4 4 4 --4 4 4 3 2 2 0 0 0 0 0 0 7 11 13 45 69 86 --80 127 157 71 116 144 43 61 72 7 11 13 0 0 0 1 1 1 --4 3 3 4 4 4 4 4 4 4 4 4 6 6 6 5 5 5 --3 2 2 4 0 0 1 0 0 21 29 34 59 113 148 136 185 209 --146 190 211 136 185 209 136 185 209 136 185 209 136 185 209 136 185 209 --68 124 159 44 81 103 22 40 52 13 16 17 43 61 72 90 154 193 --136 185 209 59 113 148 21 29 34 3 4 3 1 1 1 0 0 0 --24 26 27 125 124 125 163 162 163 174 174 174 166 165 166 165 164 165 --163 162 163 125 124 125 125 124 125 125 124 125 125 124 125 26 28 28 --4 0 0 4 3 3 --3 3 3 0 0 0 24 26 27 153 152 153 177 184 187 158 157 158 --156 155 156 156 155 156 155 154 155 155 154 155 165 164 165 174 174 174 --155 154 155 60 74 84 26 28 28 4 0 0 4 0 0 3 1 0 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 --2 0 0 0 0 0 0 0 0 32 43 50 72 125 159 101 161 196 --136 185 209 101 161 196 101 161 196 79 117 143 32 43 50 0 0 0 --0 0 0 2 2 2 4 4 4 4 4 4 3 3 3 1 0 0 --0 0 0 4 5 5 49 76 92 101 161 196 146 190 211 146 190 211 --136 185 209 136 185 209 136 185 209 136 185 209 136 185 209 90 154 193 --28 67 93 13 16 17 37 51 59 80 127 157 136 185 209 90 154 193 --22 40 52 6 9 11 3 4 3 2 2 1 16 19 21 60 73 81 --137 136 137 163 162 163 158 157 158 166 165 166 167 166 167 153 152 153 --60 74 84 37 38 37 6 6 6 13 16 17 4 0 0 1 0 0 --3 2 2 4 4 4 --3 2 2 4 0 0 37 38 37 137 136 137 167 166 167 158 157 158 --157 156 157 154 153 154 157 156 157 167 166 167 174 174 174 125 124 125 --37 38 37 4 0 0 4 0 0 4 0 0 4 3 3 4 4 4 --4 4 4 4 4 4 5 5 5 5 5 5 1 1 1 0 0 0 --0 0 0 16 21 25 55 98 126 90 154 193 136 185 209 101 161 196 --101 161 196 101 161 196 136 185 209 136 185 209 101 161 196 55 98 126 --14 17 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --22 40 52 90 154 193 146 190 211 146 190 211 136 185 209 136 185 209 --136 185 209 136 185 209 136 185 209 101 161 196 35 83 115 7 11 13 --17 23 27 59 113 148 136 185 209 101 161 196 34 86 122 7 12 15 --2 5 5 3 4 3 6 6 6 60 73 81 131 129 131 163 162 163 --166 165 166 174 174 174 174 174 174 163 162 163 125 124 125 41 54 63 --13 16 17 4 0 0 4 0 0 4 0 0 1 0 0 2 2 2 --4 4 4 4 4 4 --1 1 1 2 1 0 43 57 68 137 136 137 153 152 153 153 152 153 --163 162 163 156 155 156 165 164 165 167 166 167 60 74 84 6 6 6 --4 0 0 4 0 0 5 5 5 4 4 4 4 4 4 4 4 4 --4 5 5 6 6 6 4 3 3 0 0 0 0 0 0 11 15 18 --40 71 93 100 139 164 101 161 196 101 161 196 101 161 196 101 161 196 --101 161 196 101 161 196 101 161 196 101 161 196 136 185 209 136 185 209 --101 161 196 45 69 86 6 6 6 0 0 0 17 23 27 55 98 126 --136 185 209 146 190 211 136 185 209 136 185 209 136 185 209 136 185 209 --136 185 209 136 185 209 90 154 193 22 40 52 7 11 13 50 82 103 --136 185 209 136 185 209 53 118 160 22 40 52 7 11 13 2 5 5 --3 4 3 37 38 37 125 124 125 157 156 157 166 165 166 167 166 167 --174 174 174 174 174 174 137 136 137 60 73 81 4 0 0 4 0 0 --4 0 0 4 0 0 5 5 5 3 3 3 3 3 3 4 4 4 --4 4 4 4 4 4 --4 0 0 4 0 0 41 54 63 137 136 137 125 124 125 131 129 131 --155 154 155 167 166 167 174 174 174 60 74 84 6 6 6 4 0 0 --4 3 3 6 6 6 4 4 4 4 4 4 4 4 4 5 5 5 --4 4 4 1 1 1 0 0 0 3 6 7 41 65 82 72 125 159 --101 161 196 101 161 196 101 161 196 90 154 193 90 154 193 101 161 196 --101 161 196 101 161 196 101 161 196 101 161 196 101 161 196 136 185 209 --136 185 209 136 185 209 80 127 157 55 98 126 101 161 196 146 190 211 --136 185 209 136 185 209 136 185 209 101 161 196 136 185 209 101 161 196 --136 185 209 101 161 196 35 83 115 22 30 35 101 161 196 172 205 220 --90 154 193 28 67 93 7 11 13 2 5 5 3 4 3 13 16 17 --85 115 134 167 166 167 174 174 174 174 174 174 174 174 174 174 174 174 --167 166 167 60 74 84 13 16 17 4 0 0 4 0 0 4 3 3 --6 6 6 5 5 5 4 4 4 5 5 5 4 4 4 5 5 5 --5 5 5 5 5 5 --1 1 1 4 0 0 41 54 63 137 136 137 137 136 137 125 124 125 --131 129 131 167 166 167 157 156 157 37 38 37 6 6 6 4 0 0 --6 6 6 5 5 5 4 4 4 4 4 4 4 5 5 2 2 1 --0 0 0 0 0 0 26 37 45 58 111 146 101 161 196 101 161 196 --101 161 196 90 154 193 90 154 193 90 154 193 101 161 196 101 161 196 --101 161 196 101 161 196 101 161 196 101 161 196 101 161 196 101 161 196 --101 161 196 136 185 209 136 185 209 136 185 209 146 190 211 136 185 209 --136 185 209 101 161 196 136 185 209 136 185 209 101 161 196 136 185 209 --101 161 196 136 185 209 136 185 209 136 185 209 136 185 209 16 89 141 --7 11 13 2 5 5 2 5 5 13 16 17 60 73 81 154 154 154 --174 174 174 174 174 174 174 174 174 174 174 174 163 162 163 125 124 125 --24 26 27 4 0 0 4 0 0 4 0 0 5 5 5 5 5 5 --4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 --5 5 5 4 4 4 --4 0 0 6 6 6 37 38 37 137 136 137 137 136 137 131 129 131 --131 129 131 153 152 153 131 129 131 26 28 28 4 0 0 4 3 3 --6 6 6 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 --13 20 25 51 88 114 90 154 193 101 161 196 101 161 196 90 154 193 --90 154 193 90 154 193 90 154 193 90 154 193 90 154 193 101 161 196 --101 161 196 101 161 196 101 161 196 101 161 196 136 185 209 101 161 196 --101 161 196 136 185 209 101 161 196 136 185 209 136 185 209 101 161 196 --136 185 209 101 161 196 136 185 209 101 161 196 101 161 196 101 161 196 --136 185 209 136 185 209 136 185 209 37 112 160 21 29 34 5 7 8 --2 5 5 13 16 17 43 57 68 131 129 131 174 174 174 174 174 174 --174 174 174 167 166 167 157 156 157 125 124 125 37 38 37 4 0 0 --4 0 0 4 0 0 5 5 5 5 5 5 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --1 1 1 4 0 0 41 54 63 153 152 153 137 136 137 137 136 137 --137 136 137 153 152 153 125 124 125 24 26 27 4 0 0 3 2 2 --4 4 4 4 4 4 4 3 3 4 0 0 3 6 7 43 61 72 --64 123 161 101 161 196 90 154 193 90 154 193 90 154 193 90 154 193 --90 154 193 90 154 193 90 154 193 90 154 193 101 161 196 90 154 193 --101 161 196 101 161 196 101 161 196 101 161 196 101 161 196 101 161 196 --101 161 196 101 161 196 101 161 196 101 161 196 101 161 196 101 161 196 --136 185 209 101 161 196 101 161 196 136 185 209 136 185 209 101 161 196 --101 161 196 90 154 193 28 67 93 13 16 17 7 11 13 3 6 7 --37 51 59 125 124 125 163 162 163 174 174 174 167 166 167 166 165 166 --167 166 167 131 129 131 60 73 81 4 0 0 4 0 0 4 0 0 --3 3 3 5 5 5 6 6 6 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 4 0 0 41 54 63 137 136 137 153 152 153 137 136 137 --153 152 153 157 156 157 125 124 125 24 26 27 0 0 0 2 2 2 --4 4 4 4 4 4 2 0 0 0 0 0 28 67 93 90 154 193 --90 154 193 90 154 193 90 154 193 90 154 193 64 123 161 90 154 193 --90 154 193 90 154 193 90 154 193 90 154 193 90 154 193 101 161 196 --90 154 193 101 161 196 101 161 196 101 161 196 90 154 193 136 185 209 --101 161 196 101 161 196 136 185 209 101 161 196 136 185 209 101 161 196 --101 161 196 101 161 196 136 185 209 101 161 196 101 161 196 90 154 193 --35 83 115 13 16 17 3 6 7 2 5 5 13 16 17 60 74 84 --154 154 154 166 165 166 165 164 165 158 157 158 163 162 163 157 156 157 --60 74 84 13 16 17 4 0 0 4 0 0 3 2 2 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --1 1 1 4 0 0 41 54 63 157 156 157 155 154 155 137 136 137 --153 152 153 158 157 158 137 136 137 26 28 28 2 0 0 2 2 2 --4 4 4 4 4 4 1 0 0 6 10 14 34 86 122 90 154 193 --64 123 161 90 154 193 64 123 161 90 154 193 90 154 193 90 154 193 --64 123 161 90 154 193 90 154 193 90 154 193 90 154 193 90 154 193 --101 161 196 101 161 196 101 161 196 101 161 196 101 161 196 101 161 196 --101 161 196 101 161 196 101 161 196 101 161 196 101 161 196 101 161 196 --136 185 209 101 161 196 136 185 209 90 154 193 26 108 161 22 40 52 --13 16 17 5 7 8 2 5 5 2 5 5 37 38 37 165 164 165 --174 174 174 163 162 163 154 154 154 165 164 165 167 166 167 60 73 81 --6 6 6 4 0 0 4 0 0 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 6 6 6 41 54 63 156 155 156 158 157 158 153 152 153 --156 155 156 165 164 165 137 136 137 26 28 28 0 0 0 2 2 2 --4 4 5 4 4 4 2 0 0 7 12 15 31 96 139 64 123 161 --90 154 193 64 123 161 90 154 193 90 154 193 64 123 161 90 154 193 --90 154 193 90 154 193 90 154 193 90 154 193 90 154 193 90 154 193 --90 154 193 90 154 193 90 154 193 101 161 196 101 161 196 101 161 196 --101 161 196 101 161 196 101 161 196 101 161 196 101 161 196 136 185 209 --101 161 196 136 185 209 26 108 161 22 40 52 7 11 13 5 7 8 --2 5 5 2 5 5 2 5 5 2 2 1 37 38 37 158 157 158 --174 174 174 154 154 154 156 155 156 167 166 167 165 164 165 37 38 37 --4 0 0 4 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --3 1 0 4 0 0 60 73 81 157 156 157 163 162 163 153 152 153 --158 157 158 167 166 167 137 136 137 26 28 28 2 0 0 2 2 2 --4 5 5 4 4 4 4 0 0 7 12 15 24 86 132 26 108 161 --37 112 160 64 123 161 90 154 193 64 123 161 90 154 193 90 154 193 --90 154 193 90 154 193 90 154 193 90 154 193 90 154 193 90 154 193 --90 154 193 101 161 196 90 154 193 101 161 196 101 161 196 101 161 196 --101 161 196 101 161 196 101 161 196 136 185 209 101 161 196 136 185 209 --90 154 193 35 83 115 13 16 17 13 16 17 7 11 13 3 6 7 --5 7 8 6 6 6 3 4 3 2 2 1 30 32 34 154 154 154 --167 166 167 154 154 154 154 154 154 174 174 174 165 164 165 37 38 37 --6 6 6 4 0 0 6 6 6 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 4 0 0 41 54 63 163 162 163 166 165 166 154 154 154 --163 162 163 174 174 174 137 136 137 26 28 28 0 0 0 2 2 2 --4 5 5 4 4 5 1 1 2 6 10 14 28 67 93 18 97 151 --18 97 151 18 97 151 26 108 161 37 112 160 37 112 160 90 154 193 --64 123 161 90 154 193 90 154 193 90 154 193 90 154 193 101 161 196 --90 154 193 101 161 196 101 161 196 90 154 193 101 161 196 101 161 196 --101 161 196 101 161 196 101 161 196 136 185 209 90 154 193 16 89 141 --13 20 25 7 11 13 5 7 8 5 7 8 2 5 5 4 5 5 --3 4 3 4 5 5 3 4 3 0 0 0 37 38 37 158 157 158 --174 174 174 158 157 158 158 157 158 167 166 167 174 174 174 41 54 63 --4 0 0 3 2 2 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --1 1 1 4 0 0 60 73 81 165 164 165 174 174 174 158 157 158 --167 166 167 174 174 174 153 152 153 26 28 28 2 0 0 2 2 2 --4 5 5 4 4 4 4 0 0 7 12 15 10 87 144 10 87 144 --18 97 151 18 97 151 18 97 151 26 108 161 26 108 161 26 108 161 --26 108 161 37 112 160 53 118 160 90 154 193 90 154 193 90 154 193 --90 154 193 90 154 193 101 161 196 101 161 196 101 161 196 101 161 196 --101 161 196 136 185 209 90 154 193 26 108 161 22 40 52 13 16 17 --7 11 13 3 6 7 5 7 8 5 7 8 2 5 5 4 5 5 --4 5 5 6 6 6 3 4 3 0 0 0 30 32 34 158 157 158 --174 174 174 156 155 156 155 154 155 165 164 165 154 153 154 37 38 37 --4 0 0 4 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 4 0 0 60 73 81 167 166 167 174 174 174 163 162 163 --174 174 174 174 174 174 153 152 153 26 28 28 0 0 0 3 3 3 --5 5 5 4 4 4 1 1 2 7 12 15 28 67 93 18 97 151 --18 97 151 18 97 151 18 97 151 18 97 151 18 97 151 26 108 161 --26 108 161 26 108 161 26 108 161 26 108 161 26 108 161 26 108 161 --90 154 193 26 108 161 90 154 193 90 154 193 90 154 193 101 161 196 --101 161 196 26 108 161 22 40 52 13 16 17 7 11 13 2 5 5 --2 5 5 6 6 6 2 5 5 4 5 5 4 5 5 4 5 5 --3 4 3 5 5 5 3 4 3 2 0 0 30 32 34 137 136 137 --153 152 153 137 136 137 131 129 131 137 136 137 131 129 131 37 38 37 --4 0 0 4 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --1 1 1 4 0 0 60 73 81 167 166 167 174 174 174 166 165 166 --174 174 174 177 184 187 153 152 153 30 32 34 1 0 0 3 3 3 --5 5 5 4 3 3 4 0 0 7 12 15 10 87 144 10 87 144 --18 97 151 18 97 151 18 97 151 26 108 161 26 108 161 26 108 161 --26 108 161 26 108 161 26 108 161 26 108 161 26 108 161 26 108 161 --26 108 161 26 108 161 26 108 161 90 154 193 90 154 193 26 108 161 --35 83 115 13 16 17 7 11 13 5 7 8 3 6 7 5 7 8 --2 5 5 6 6 6 4 5 5 4 5 5 3 4 3 4 5 5 --3 4 3 6 6 6 3 4 3 0 0 0 26 28 28 125 124 125 --131 129 131 125 124 125 125 124 125 131 129 131 131 129 131 37 38 37 --4 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --3 1 0 4 0 0 60 73 81 174 174 174 177 184 187 167 166 167 --174 174 174 177 184 187 153 152 153 30 32 34 0 0 0 3 3 3 --5 5 5 4 4 4 1 1 2 6 10 14 28 67 93 18 97 151 --18 97 151 18 97 151 18 97 151 18 97 151 18 97 151 26 108 161 --26 108 161 26 108 161 26 108 161 26 108 161 26 108 161 26 108 161 --26 108 161 90 154 193 26 108 161 26 108 161 24 86 132 13 20 25 --7 11 13 13 20 25 22 40 52 5 7 8 3 4 3 3 4 3 --4 5 5 3 4 3 4 5 5 3 4 3 4 5 5 3 4 3 --4 4 4 5 5 5 3 3 3 2 0 0 26 28 28 125 124 125 --137 136 137 125 124 125 125 124 125 137 136 137 131 129 131 37 38 37 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --1 1 1 4 0 0 60 73 81 174 174 174 177 184 187 174 174 174 --174 174 174 190 197 201 157 156 157 30 32 34 1 0 0 3 3 3 --5 5 5 4 3 3 4 0 0 7 12 15 10 87 144 10 87 144 --18 97 151 19 95 150 19 95 150 18 97 151 18 97 151 26 108 161 --18 97 151 26 108 161 26 108 161 26 108 161 26 108 161 90 154 193 --26 108 161 26 108 161 26 108 161 22 40 52 2 5 5 3 4 3 --28 67 93 37 112 160 34 86 122 2 5 5 3 4 3 3 4 3 --3 4 3 3 4 3 3 4 3 2 2 1 3 4 3 4 4 4 --4 5 5 5 5 5 3 3 3 0 0 0 26 28 28 131 129 131 --137 136 137 125 124 125 125 124 125 137 136 137 131 129 131 37 38 37 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 4 0 0 60 73 81 174 174 174 177 184 187 174 174 174 --174 174 174 190 197 201 158 157 158 30 32 34 0 0 0 2 2 2 --5 5 5 4 4 4 1 1 2 6 10 14 28 67 93 18 97 151 --10 87 144 19 95 150 19 95 150 18 97 151 18 97 151 18 97 151 --26 108 161 26 108 161 26 108 161 26 108 161 26 108 161 26 108 161 --18 97 151 22 40 52 2 5 5 2 2 1 22 40 52 26 108 161 --90 154 193 37 112 160 22 40 52 3 4 3 13 20 25 22 30 35 --3 6 7 1 1 1 2 2 2 6 9 11 5 5 5 4 3 3 --4 4 4 5 5 5 3 3 3 2 0 0 26 28 28 131 129 131 --137 136 137 125 124 125 125 124 125 137 136 137 131 129 131 37 38 37 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --1 1 1 4 0 0 60 73 81 177 184 187 193 200 203 174 174 174 --177 184 187 193 200 203 163 162 163 30 32 34 4 0 0 2 2 2 --5 5 5 4 3 3 4 0 0 6 10 14 24 86 132 10 87 144 --10 87 144 10 87 144 19 95 150 19 95 150 19 95 150 18 97 151 --26 108 161 26 108 161 26 108 161 90 154 193 26 108 161 28 67 93 --6 10 14 2 5 5 13 20 25 24 86 132 37 112 160 90 154 193 --10 87 144 7 12 15 2 5 5 28 67 93 37 112 160 28 67 93 --2 2 1 7 12 15 35 83 115 28 67 93 3 6 7 1 0 0 --4 4 4 5 5 5 3 3 3 0 0 0 26 28 28 131 129 131 --137 136 137 125 124 125 125 124 125 137 136 137 131 129 131 37 38 37 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 4 0 0 60 73 81 174 174 174 190 197 201 174 174 174 --177 184 187 193 200 203 163 162 163 30 32 34 0 0 0 2 2 2 --5 5 5 4 4 4 1 1 2 6 10 14 28 67 93 10 87 144 --10 87 144 16 89 141 19 95 150 10 87 144 26 108 161 26 108 161 --26 108 161 26 108 161 26 108 161 28 67 93 6 10 14 1 1 2 --7 12 15 28 67 93 26 108 161 16 89 141 24 86 132 21 29 34 --3 4 3 21 29 34 37 112 160 37 112 160 27 99 146 21 29 34 --21 29 34 26 108 161 90 154 193 35 83 115 1 1 2 2 0 0 --4 4 4 5 5 5 3 3 3 2 0 0 26 28 28 125 124 125 --137 136 137 125 124 125 125 124 125 137 136 137 131 129 131 37 38 37 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --3 1 0 4 0 0 60 73 81 193 200 203 193 200 203 174 174 174 --190 197 201 193 200 203 165 164 165 37 38 37 4 0 0 2 2 2 --5 5 5 4 3 3 4 0 0 6 10 14 24 86 132 10 87 144 --10 87 144 10 87 144 16 89 141 18 97 151 18 97 151 10 87 144 --24 86 132 24 86 132 13 20 25 4 5 7 4 5 7 22 40 52 --18 97 151 37 112 160 26 108 161 7 12 15 1 1 1 0 0 0 --28 67 93 37 112 160 26 108 161 28 67 93 22 40 52 28 67 93 --26 108 161 90 154 193 26 108 161 10 87 144 0 0 0 2 0 0 --4 4 4 5 5 5 3 3 3 0 0 0 26 28 28 131 129 131 --137 136 137 125 124 125 125 124 125 137 136 137 131 129 131 37 38 37 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 6 6 6 60 73 81 174 174 174 193 200 203 174 174 174 --190 197 201 193 200 203 165 164 165 30 32 34 0 0 0 2 2 2 --5 5 5 4 4 4 1 1 2 6 10 14 28 67 93 10 87 144 --10 87 144 10 87 144 10 87 144 18 97 151 28 67 93 6 10 14 --0 0 0 1 1 2 4 5 7 13 20 25 16 89 141 26 108 161 --26 108 161 26 108 161 24 86 132 6 9 11 2 3 3 22 40 52 --37 112 160 16 89 141 22 40 52 28 67 93 26 108 161 26 108 161 --90 154 193 26 108 161 26 108 161 28 67 93 1 1 1 4 0 0 --4 4 4 5 5 5 3 3 3 4 0 0 26 28 28 124 126 130 --137 136 137 125 124 125 125 124 125 137 136 137 131 129 131 37 38 37 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 4 0 0 60 73 81 193 200 203 193 200 203 174 174 174 --193 200 203 193 200 203 167 166 167 37 38 37 4 0 0 2 2 2 --5 5 5 4 4 4 4 0 0 6 10 14 28 67 93 10 87 144 --10 87 144 10 87 144 18 97 151 10 87 144 13 20 25 4 5 7 --1 1 2 1 1 1 22 40 52 26 108 161 26 108 161 26 108 161 --26 108 161 26 108 161 26 108 161 24 86 132 22 40 52 22 40 52 --22 40 52 22 40 52 10 87 144 26 108 161 26 108 161 26 108 161 --26 108 161 26 108 161 90 154 193 10 87 144 0 0 0 4 0 0 --4 4 4 5 5 5 3 3 3 0 0 0 26 28 28 131 129 131 --137 136 137 125 124 125 125 124 125 137 136 137 131 129 131 37 38 37 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 6 6 6 60 73 81 174 174 174 220 221 221 174 174 174 --190 197 201 205 212 215 167 166 167 30 32 34 0 0 0 2 2 2 --5 5 5 4 4 4 1 1 2 6 10 14 28 67 93 10 87 144 --10 87 144 10 87 144 10 87 144 10 87 144 22 40 52 1 1 2 --2 0 0 1 1 2 24 86 132 26 108 161 26 108 161 26 108 161 --26 108 161 19 95 150 16 89 141 10 87 144 22 40 52 22 40 52 --10 87 144 26 108 161 37 112 160 26 108 161 26 108 161 26 108 161 --26 108 161 26 108 161 26 108 161 28 67 93 2 0 0 3 1 0 --4 4 4 5 5 5 3 3 3 2 0 0 26 28 28 131 129 131 --137 136 137 125 124 125 125 124 125 137 136 137 131 129 131 37 38 37 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 4 0 0 60 73 81 220 221 221 190 197 201 174 174 174 --193 200 203 193 200 203 174 174 174 37 38 37 4 0 0 2 2 2 --5 5 5 4 4 4 3 2 2 1 1 2 13 20 25 10 87 144 --10 87 144 10 87 144 10 87 144 10 87 144 10 87 144 13 20 25 --13 20 25 22 40 52 10 87 144 18 97 151 18 97 151 26 108 161 --10 87 144 13 20 25 6 10 14 21 29 34 24 86 132 18 97 151 --26 108 161 26 108 161 26 108 161 26 108 161 26 108 161 26 108 161 --26 108 161 90 154 193 18 97 151 13 20 25 0 0 0 4 3 3 --4 4 4 5 5 5 3 3 3 0 0 0 26 28 28 131 129 131 --137 136 137 125 124 125 125 124 125 137 136 137 131 129 131 37 38 37 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 6 6 6 60 73 81 174 174 174 220 221 221 174 174 174 --190 197 201 220 221 221 167 166 167 30 32 34 1 0 0 2 2 2 --5 5 5 4 4 4 4 4 5 2 5 5 4 5 7 13 20 25 --28 67 93 10 87 144 10 87 144 10 87 144 10 87 144 10 87 144 --10 87 144 10 87 144 18 97 151 10 87 144 18 97 151 18 97 151 --28 67 93 2 3 3 0 0 0 28 67 93 26 108 161 26 108 161 --26 108 161 26 108 161 26 108 161 26 108 161 26 108 161 26 108 161 --26 108 161 10 87 144 13 20 25 1 1 2 3 2 2 4 4 4 --4 4 4 5 5 5 3 3 3 2 0 0 26 28 28 131 129 131 --137 136 137 125 124 125 125 124 125 137 136 137 131 129 131 37 38 37 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 4 0 0 60 73 81 220 221 221 190 197 201 174 174 174 --193 200 203 193 200 203 174 174 174 26 28 28 4 0 0 4 3 3 --5 5 5 4 4 4 4 4 4 4 4 5 1 1 2 2 5 5 --4 5 7 22 40 52 10 87 144 10 87 144 18 97 151 10 87 144 --10 87 144 10 87 144 10 87 144 10 87 144 10 87 144 18 97 151 --10 87 144 28 67 93 22 40 52 10 87 144 26 108 161 18 97 151 --18 97 151 18 97 151 26 108 161 26 108 161 26 108 161 26 108 161 --22 40 52 1 1 2 0 0 0 2 3 3 4 4 4 4 4 4 --4 4 4 5 5 5 4 4 4 0 0 0 26 28 28 131 129 131 --137 136 137 125 124 125 125 124 125 137 136 137 131 129 131 37 38 37 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 6 6 6 60 73 81 174 174 174 220 221 221 174 174 174 --190 197 201 220 221 221 190 197 201 41 54 63 4 0 0 2 2 2 --6 6 6 4 4 4 4 4 4 4 4 5 4 4 5 3 3 3 --1 1 2 1 1 2 6 10 14 22 40 52 10 87 144 18 97 151 --18 97 151 10 87 144 10 87 144 10 87 144 18 97 151 10 87 144 --10 87 144 18 97 151 26 108 161 18 97 151 18 97 151 10 87 144 --26 108 161 26 108 161 26 108 161 10 87 144 28 67 93 6 10 14 --1 1 2 1 1 2 4 3 3 4 4 5 4 4 4 4 4 4 --5 5 5 5 5 5 1 1 1 4 0 0 37 51 59 137 136 137 --137 136 137 125 124 125 125 124 125 137 136 137 131 129 131 37 38 37 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 4 0 0 60 73 81 220 221 221 193 200 203 174 174 174 --193 200 203 193 200 203 220 221 221 137 136 137 13 16 17 4 0 0 --2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 --4 4 5 4 3 3 1 1 2 4 5 7 13 20 25 28 67 93 --10 87 144 10 87 144 10 87 144 10 87 144 10 87 144 10 87 144 --10 87 144 18 97 151 18 97 151 10 87 144 18 97 151 26 108 161 --26 108 161 18 97 151 28 67 93 6 10 14 0 0 0 0 0 0 --2 3 3 4 5 5 4 4 5 4 4 4 4 4 4 5 5 5 --3 3 3 1 1 1 0 0 0 16 19 21 125 124 125 137 136 137 --131 129 131 125 124 125 125 124 125 137 136 137 131 129 131 37 38 37 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 6 6 6 60 73 81 174 174 174 220 221 221 174 174 174 --193 200 203 190 197 201 220 221 221 220 221 221 153 152 153 30 32 34 --0 0 0 0 0 0 2 2 2 4 4 4 4 4 4 4 4 4 --4 4 4 4 5 5 4 5 7 1 1 2 1 1 2 4 5 7 --13 20 25 28 67 93 10 87 144 18 97 151 10 87 144 10 87 144 --10 87 144 10 87 144 10 87 144 18 97 151 26 108 161 18 97 151 --28 67 93 7 12 15 0 0 0 0 0 0 2 2 1 4 4 4 --4 5 5 4 5 5 4 4 4 4 4 4 3 3 3 0 0 0 --0 0 0 0 0 0 37 38 37 125 124 125 158 157 158 131 129 131 --125 124 125 125 124 125 125 124 125 137 136 137 131 129 131 37 38 37 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 3 3 4 0 0 41 54 63 193 200 203 220 221 221 174 174 174 --193 200 203 193 200 203 193 200 203 220 221 221 244 246 246 193 200 203 --120 125 127 5 5 5 1 0 0 0 0 0 1 1 1 4 4 4 --4 4 4 4 4 4 4 5 5 4 5 5 4 4 5 1 1 2 --4 5 7 4 5 7 22 40 52 10 87 144 10 87 144 10 87 144 --10 87 144 10 87 144 18 97 151 10 87 144 10 87 144 13 20 25 --4 5 7 2 3 3 1 1 2 4 4 4 4 5 5 4 4 4 --4 4 4 4 4 4 4 4 4 1 1 1 0 0 0 1 1 2 --24 26 27 60 74 84 153 152 153 163 162 163 137 136 137 125 124 125 --125 124 125 125 124 125 125 124 125 137 136 137 125 124 125 26 28 28 --0 0 0 3 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 0 0 6 6 6 26 28 28 156 155 156 220 221 221 220 221 221 --174 174 174 193 200 203 193 200 203 193 200 203 205 212 215 220 221 221 --220 221 221 167 166 167 60 73 81 7 11 13 0 0 0 0 0 0 --3 3 3 4 4 4 4 4 4 4 4 4 4 4 5 4 4 5 --4 4 5 1 1 2 1 1 2 4 5 7 22 40 52 10 87 144 --10 87 144 10 87 144 10 87 144 22 40 52 4 5 7 1 1 2 --1 1 2 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 --5 5 5 2 2 2 0 0 0 4 0 0 16 19 21 60 73 81 --137 136 137 167 166 167 158 157 158 137 136 137 131 129 131 131 129 131 --125 124 125 125 124 125 131 129 131 155 154 155 60 74 84 5 7 8 --0 0 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --5 5 5 4 0 0 4 0 0 60 73 81 193 200 203 220 221 221 --193 200 203 193 200 203 193 200 203 193 200 203 205 212 215 220 221 221 --220 221 221 220 221 221 220 221 221 137 136 137 43 57 68 6 6 6 --4 0 0 1 1 1 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 5 4 4 5 3 2 2 1 1 2 2 5 5 13 20 25 --22 40 52 22 40 52 13 20 25 2 3 3 1 1 2 3 3 3 --4 5 7 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --1 1 1 0 0 0 2 3 3 41 54 63 131 129 131 166 165 166 --166 165 166 155 154 155 153 152 153 137 136 137 137 136 137 125 124 125 --125 124 125 137 136 137 137 136 137 125 124 125 37 38 37 4 3 3 --4 3 3 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 3 3 6 6 6 6 6 6 13 16 17 60 73 81 167 166 167 --220 221 221 220 221 221 220 221 221 193 200 203 193 200 203 193 200 203 --205 212 215 220 221 221 220 221 221 244 246 246 205 212 215 125 124 125 --24 26 27 0 0 0 0 0 0 2 2 2 5 5 5 5 5 5 --4 4 4 4 4 4 4 4 4 4 4 5 1 1 2 4 5 7 --4 5 7 4 5 7 1 1 2 3 2 2 4 4 5 4 4 4 --4 4 4 4 4 4 5 5 5 4 4 4 0 0 0 0 0 0 --2 0 0 26 28 28 125 124 125 174 174 174 174 174 174 166 165 166 --156 155 156 153 152 153 137 136 137 137 136 137 131 129 131 137 136 137 --137 136 137 137 136 137 60 74 84 30 32 34 4 0 0 4 0 0 --5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --5 5 5 6 6 6 4 0 0 4 0 0 6 6 6 26 28 28 --125 124 125 174 174 174 220 221 221 220 221 221 220 221 221 193 200 203 --205 212 215 220 221 221 205 212 215 220 221 221 220 221 221 244 246 246 --193 200 203 60 74 84 13 16 17 4 0 0 0 0 0 3 3 3 --5 5 5 5 5 5 4 4 4 4 4 4 4 4 5 3 3 3 --1 1 2 3 3 3 4 4 5 4 4 5 4 4 4 4 4 4 --5 5 5 5 5 5 2 2 2 0 0 0 0 0 0 13 16 17 --60 74 84 174 174 174 193 200 203 174 174 174 167 166 167 163 162 163 --153 152 153 153 152 153 137 136 137 137 136 137 153 152 153 137 136 137 --125 124 125 41 54 63 24 26 27 4 0 0 4 0 0 5 5 5 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 3 3 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 --6 6 6 37 38 37 131 129 131 220 221 221 220 221 221 220 221 221 --193 200 203 193 200 203 220 221 221 205 212 215 220 221 221 244 246 246 --244 246 246 244 246 246 174 174 174 41 54 63 0 0 0 0 0 0 --0 0 0 4 4 4 5 5 5 5 5 5 4 4 4 4 4 5 --4 4 5 4 4 5 4 4 4 4 4 4 6 6 6 6 6 6 --3 3 3 0 0 0 2 0 0 13 16 17 60 73 81 156 155 156 --220 221 221 193 200 203 174 174 174 165 164 165 163 162 163 154 153 154 --153 152 153 153 152 153 158 157 158 163 162 163 137 136 137 60 73 81 --13 16 17 4 0 0 4 0 0 4 3 3 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --5 5 5 4 3 3 4 3 3 6 6 6 6 6 6 6 6 6 --6 6 6 6 6 6 6 6 6 37 38 37 167 166 167 244 246 246 --244 246 246 220 221 221 205 212 215 205 212 215 220 221 221 193 200 203 --220 221 221 244 246 246 244 246 246 244 246 246 137 136 137 37 38 37 --3 2 2 0 0 0 1 1 1 5 5 5 5 5 5 4 4 4 --4 4 4 4 4 4 4 4 4 5 5 5 4 4 4 1 1 1 --0 0 0 5 5 5 43 57 68 153 152 153 193 200 203 220 221 221 --177 184 187 174 174 174 167 166 167 166 165 166 158 157 158 157 156 157 --158 157 158 166 165 166 156 155 156 85 115 134 13 16 17 4 0 0 --4 0 0 4 0 0 5 5 5 5 5 5 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --5 5 5 4 3 3 6 6 6 6 6 6 4 0 0 6 6 6 --6 6 6 6 6 6 6 6 6 6 6 6 13 16 17 60 73 81 --177 184 187 220 221 221 220 221 221 220 221 221 205 212 215 220 221 221 --220 221 221 205 212 215 220 221 221 244 246 246 244 246 246 205 212 215 --125 124 125 30 32 34 0 0 0 0 0 0 2 2 2 5 5 5 --4 4 4 4 4 4 4 4 4 1 1 1 0 0 0 1 0 0 --37 38 37 131 129 131 205 212 215 220 221 221 193 200 203 174 174 174 --174 174 174 174 174 174 167 166 167 165 164 165 166 165 166 167 166 167 --158 157 158 125 124 125 37 38 37 4 0 0 4 0 0 4 0 0 --4 3 3 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 5 5 5 4 3 3 4 3 3 6 6 6 6 6 6 --4 0 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 --26 28 28 125 124 125 205 212 215 220 221 221 220 221 221 220 221 221 --205 212 215 220 221 221 205 212 215 220 221 221 220 221 221 244 246 246 --244 246 246 190 197 201 60 74 84 16 19 21 4 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 16 19 21 120 125 127 --177 184 187 220 221 221 205 212 215 177 184 187 174 174 174 177 184 187 --174 174 174 174 174 174 167 166 167 174 174 174 166 165 166 137 136 137 --60 73 81 13 16 17 4 0 0 4 0 0 4 3 3 6 6 6 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --5 5 5 4 3 3 5 5 5 4 3 3 6 6 6 4 0 0 --6 6 6 6 6 6 4 0 0 6 6 6 4 0 0 6 6 6 --6 6 6 6 6 6 37 38 37 137 136 137 193 200 203 220 221 221 --220 221 221 205 212 215 220 221 221 205 212 215 205 212 215 220 221 221 --220 221 221 220 221 221 244 246 246 166 165 166 43 57 68 2 2 2 --0 0 0 4 0 0 16 19 21 60 73 81 157 156 157 202 210 214 --220 221 221 193 200 203 177 184 187 177 184 187 177 184 187 174 174 174 --174 174 174 174 174 174 174 174 174 157 156 157 60 74 84 24 26 27 --4 0 0 4 0 0 4 0 0 6 6 6 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 5 5 5 4 3 3 5 5 5 6 6 6 --6 6 6 4 0 0 6 6 6 6 6 6 6 6 6 4 0 0 --4 0 0 4 0 0 6 6 6 24 26 27 60 73 81 167 166 167 --220 221 221 220 221 221 220 221 221 205 212 215 205 212 215 205 212 215 --205 212 215 220 221 221 220 221 221 220 221 221 205 212 215 137 136 137 --60 74 84 125 124 125 137 136 137 190 197 201 220 221 221 193 200 203 --177 184 187 177 184 187 177 184 187 174 174 174 174 174 174 177 184 187 --190 197 201 174 174 174 125 124 125 37 38 37 6 6 6 4 0 0 --4 0 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 5 5 5 5 5 5 4 3 3 6 6 6 --4 0 0 6 6 6 6 6 6 6 6 6 4 0 0 6 6 6 --6 6 6 6 6 6 4 0 0 4 0 0 6 6 6 6 6 6 --125 124 125 193 200 203 244 246 246 220 221 221 205 212 215 205 212 215 --205 212 215 193 200 203 205 212 215 205 212 215 220 221 221 220 221 221 --193 200 203 193 200 203 205 212 215 193 200 203 193 200 203 177 184 187 --190 197 201 190 197 201 174 174 174 190 197 201 193 200 203 190 197 201 --153 152 153 60 73 81 4 0 0 4 0 0 4 0 0 3 2 2 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 4 3 3 --6 6 6 4 3 3 4 3 3 4 3 3 6 6 6 6 6 6 --4 0 0 6 6 6 6 6 6 6 6 6 4 0 0 4 0 0 --4 0 0 26 28 28 131 129 131 220 221 221 244 246 246 220 221 221 --205 212 215 193 200 203 205 212 215 193 200 203 193 200 203 205 212 215 --220 221 221 193 200 203 193 200 203 193 200 203 190 197 201 174 174 174 --174 174 174 190 197 201 193 200 203 193 200 203 167 166 167 125 124 125 --6 6 6 4 0 0 4 0 0 4 3 3 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 --5 5 5 4 3 3 5 5 5 6 6 6 4 3 3 5 5 5 --6 6 6 6 6 6 4 0 0 6 6 6 6 6 6 6 6 6 --4 0 0 4 0 0 6 6 6 41 54 63 158 157 158 220 221 221 --220 221 221 220 221 221 193 200 203 193 200 203 193 200 203 190 197 201 --190 197 201 190 197 201 190 197 201 190 197 201 174 174 174 193 200 203 --193 200 203 220 221 221 174 174 174 125 124 125 37 38 37 4 0 0 --4 0 0 4 3 3 6 6 6 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 5 5 5 4 3 3 4 3 3 4 3 3 5 5 5 --4 3 3 6 6 6 5 5 5 4 3 3 6 6 6 6 6 6 --6 6 6 6 6 6 4 0 0 4 0 0 13 16 17 60 73 81 --174 174 174 220 221 221 220 221 221 205 212 215 190 197 201 174 174 174 --193 200 203 174 174 174 190 197 201 174 174 174 193 200 203 220 221 221 --193 200 203 131 129 131 37 38 37 6 6 6 4 0 0 4 0 0 --6 6 6 6 6 6 4 3 3 5 5 5 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 --5 5 5 4 3 3 4 3 3 5 5 5 4 3 3 4 3 3 --5 5 5 6 6 6 6 6 6 4 0 0 6 6 6 6 6 6 --6 6 6 125 124 125 174 174 174 220 221 221 220 221 221 193 200 203 --193 200 203 193 200 203 193 200 203 193 200 203 220 221 221 158 157 158 --60 73 81 6 6 6 4 0 0 4 0 0 5 5 5 6 6 6 --5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 5 5 5 5 5 5 4 3 3 5 5 5 4 3 3 --5 5 5 5 5 5 6 6 6 6 6 6 4 0 0 4 0 0 --4 0 0 4 0 0 26 28 28 125 124 125 174 174 174 193 200 203 --193 200 203 174 174 174 193 200 203 167 166 167 125 124 125 6 6 6 --6 6 6 6 6 6 4 0 0 6 6 6 6 6 6 5 5 5 --4 3 3 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 --4 3 3 6 6 6 4 0 0 6 6 6 6 6 6 6 6 6 --6 6 6 4 0 0 4 0 0 6 6 6 37 38 37 125 124 125 --153 152 153 131 129 131 125 124 125 37 38 37 6 6 6 6 6 6 --6 6 6 4 0 0 6 6 6 6 6 6 4 3 3 5 5 5 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 5 5 5 5 5 5 4 3 3 5 5 5 4 3 3 --6 6 6 6 6 6 4 0 0 4 0 0 6 6 6 6 6 6 --24 26 27 24 26 27 6 6 6 6 6 6 6 6 6 4 0 0 --6 6 6 6 6 6 4 0 0 6 6 6 5 5 5 4 3 3 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 5 5 5 4 3 3 5 5 5 6 6 6 --4 0 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 --6 6 6 6 6 6 6 6 6 4 0 0 6 6 6 6 6 6 --4 0 0 6 6 6 6 6 6 4 3 3 5 5 5 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 5 5 5 4 3 3 5 5 5 --5 5 5 5 5 5 4 0 0 6 6 6 4 0 0 6 6 6 --6 6 6 6 6 6 6 6 6 4 0 0 6 6 6 4 0 0 --6 6 6 4 3 3 5 5 5 4 3 3 5 5 5 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 --4 3 3 6 6 6 4 3 3 6 6 6 6 6 6 6 6 6 --4 0 0 6 6 6 4 0 0 6 6 6 6 6 6 6 6 6 --6 6 6 4 3 3 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 5 5 5 4 3 3 5 5 5 4 0 0 6 6 6 --6 6 6 4 0 0 6 6 6 6 6 6 4 0 0 6 6 6 --4 3 3 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 5 5 5 4 3 3 5 5 5 6 6 6 4 3 3 --4 3 3 6 6 6 6 6 6 4 3 3 6 6 6 4 3 3 --5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 5 5 5 4 3 3 6 6 6 --5 5 5 4 3 3 4 3 3 4 3 3 5 5 5 5 5 5 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 4 3 3 --5 5 5 4 3 3 5 5 5 5 5 5 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 --4 4 4 4 4 4 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 23 30 36 44 54 65 57 72 88 44 54 65 6 12 15 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 31 41 52 -+103 134 161 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 -+82 108 129 8 14 16 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 17 24 30 126 162 196 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 161 203 243 92 119 140 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 154 195 235 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 138 174 208 21 27 33 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 70 96 117 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 49 59 70 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 3 6 52 62 74 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 -+82 108 129 149 191 231 170 212 252 170 212 252 170 212 252 129 165 199 82 108 129 149 191 231 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 37 48 59 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 21 13 4 31 23 12 0 2 0 0 2 0 105 75 32 155 111 43 23 15 7 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 6 9 3 10 13 146 188 228 170 212 252 170 212 252 170 212 252 157 198 239 0 6 9 -+0 2 0 52 62 74 170 212 252 170 212 252 154 195 235 0 6 9 0 2 0 55 66 77 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 151 193 233 17 24 30 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+10 12 8 23 15 7 139 99 44 206 148 61 67 49 21 0 2 0 125 92 35 206 148 61 -+15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 96 127 154 170 212 252 170 212 252 170 212 252 170 212 252 92 119 140 21 22 20 -+10 12 8 53 68 84 170 212 252 170 212 252 92 119 140 10 12 8 7 10 5 53 68 84 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 -+0 6 9 0 3 6 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 22 20 -+62 64 61 38 40 37 0 2 0 34 26 8 212 153 66 64 46 18 0 2 0 170 124 49 -+180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 65 87 102 115 117 114 -+43 44 42 88 115 136 170 212 252 170 212 252 68 83 99 108 110 107 60 62 59 88 115 136 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+80 98 121 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 10 12 8 56 58 55 95 96 94 178 180 177 215 217 214 198 200 197 -+158 160 156 138 140 137 82 83 81 0 2 0 64 46 18 228 167 73 23 15 7 41 31 10 -+250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 -+0 2 0 126 162 196 170 212 252 170 212 252 57 72 88 0 2 0 0 2 0 126 162 196 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+157 198 239 8 14 16 0 6 9 0 2 0 45 47 44 195 197 194 192 194 191 38 40 37 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 192 194 191 234 236 233 176 178 175 118 120 117 143 145 142 176 178 175 -+215 217 214 234 236 233 234 236 233 104 106 103 0 2 0 142 101 40 134 100 43 0 2 0 -+164 119 51 170 124 49 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 115 152 185 8 14 16 -+49 59 70 166 207 248 170 212 252 170 212 252 119 150 178 8 14 16 55 66 77 166 207 248 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 92 119 140 0 2 0 0 2 0 200 202 199 254 255 252 254 255 252 244 246 243 -+40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 38 40 37 234 236 233 234 236 233 234 236 233 135 137 134 215 217 214 171 173 170 -+141 142 139 138 140 137 138 140 137 135 137 134 31 32 30 3 6 2 212 153 66 15 9 7 -+78 58 25 248 178 79 41 31 10 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 3 6 21 27 33 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 154 195 235 0 6 9 82 83 81 254 255 252 254 255 252 254 255 252 254 255 252 -+188 190 187 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 62 64 61 234 236 233 234 236 233 234 236 233 198 200 197 131 133 130 198 200 197 -+232 234 231 234 236 233 234 236 233 234 236 233 152 154 151 0 2 0 147 105 44 67 49 21 -+23 15 7 250 179 73 158 114 46 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 61 76 92 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 154 195 235 103 134 161 80 98 121 -+52 62 74 18 22 24 0 2 0 3 10 13 38 45 51 80 98 121 151 193 233 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 109 141 168 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 -+226 228 225 65 66 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 43 44 42 234 236 233 234 236 233 234 236 233 234 236 233 131 133 130 192 194 191 -+152 154 151 141 142 139 141 142 139 141 142 139 158 160 156 3 6 2 82 62 28 129 95 39 -+0 2 0 206 148 61 248 178 79 21 13 4 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 96 115 138 -+170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 18 22 24 0 2 0 0 2 0 -+34 26 8 75 55 22 114 83 33 95 68 30 55 39 17 7 0 0 0 6 9 84 103 125 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 84 103 125 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 171 173 170 -+0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 18 20 17 234 236 233 234 236 233 234 236 233 234 236 233 138 140 137 178 180 177 -+226 228 225 234 236 233 234 236 233 234 236 233 231 233 230 45 47 44 23 15 7 190 136 56 -+0 2 0 147 105 44 250 179 73 64 46 18 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 126 162 196 0 2 0 26 20 13 190 136 56 245 175 76 -+250 179 73 161 117 49 164 119 51 245 175 76 250 179 73 206 148 61 75 55 22 0 2 0 -+126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 68 83 99 0 2 0 252 254 250 254 255 252 254 255 252 254 255 252 71 73 70 -+8 14 16 88 115 136 17 24 30 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 232 234 231 234 236 233 234 236 233 234 236 233 215 217 214 148 150 147 -+183 185 181 141 142 139 135 137 134 135 137 134 141 142 139 87 89 86 0 2 0 202 145 58 -+3 6 2 88 66 26 250 179 73 109 79 35 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 157 198 239 -+170 212 252 170 212 252 166 207 248 26 33 39 26 20 13 224 163 69 250 179 73 250 179 73 -+250 179 73 197 142 62 202 145 58 250 179 73 250 179 73 250 179 73 234 172 70 21 13 4 -+38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 52 62 74 21 22 20 254 255 252 254 255 252 254 255 252 254 255 252 21 22 20 -+49 59 70 170 212 252 166 207 248 91 123 149 8 14 16 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 215 217 214 234 236 233 234 236 233 234 236 233 234 236 233 123 125 122 -+188 190 187 229 231 228 234 236 233 234 236 233 222 224 221 118 120 117 0 2 0 168 123 54 -+34 26 8 67 49 21 250 179 73 134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 34 41 47 170 212 252 -+170 212 252 170 212 252 85 112 133 0 2 0 164 119 51 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 129 95 39 -+0 2 0 138 174 208 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 34 44 55 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 24 22 25 -+52 62 74 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 178 180 177 234 236 233 234 236 233 234 236 233 234 236 233 141 142 139 -+198 200 197 148 150 147 135 137 134 135 137 134 148 150 147 123 125 122 0 2 0 190 136 56 -+21 13 4 78 58 25 250 179 73 129 95 39 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 82 108 129 170 212 252 -+170 212 252 170 212 252 23 30 36 58 42 19 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 147 105 44 -+0 2 0 139 181 221 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 34 41 47 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 -+25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 6 9 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 91 93 90 234 236 233 234 236 233 234 236 233 234 236 233 126 127 125 -+169 171 168 222 224 221 234 236 233 229 231 228 178 180 177 71 73 70 0 2 0 212 153 66 -+0 2 0 95 68 30 250 179 73 119 87 37 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 138 174 208 170 212 252 -+170 212 252 154 195 235 0 2 0 125 92 35 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 119 87 37 -+0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 57 72 88 7 10 5 252 254 250 254 255 252 254 255 252 254 255 252 95 96 94 -+0 6 9 166 207 248 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 8 14 16 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 7 10 5 222 224 221 234 236 233 234 236 233 234 236 233 141 142 139 -+183 185 181 138 140 137 131 133 130 141 142 139 192 194 191 102 104 101 0 2 0 224 163 69 -+0 2 0 105 75 32 250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 27 33 170 212 252 170 212 252 -+170 212 252 115 152 185 0 2 0 180 132 57 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 10 12 8 -+38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 82 108 129 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 158 160 156 -+0 2 0 92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 141 142 139 234 236 233 234 236 233 234 236 233 131 133 130 -+185 187 183 231 233 230 222 224 221 158 160 156 138 140 137 48 50 48 3 6 2 250 179 73 -+134 100 43 206 148 61 218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 75 94 116 170 212 252 170 212 252 -+170 212 252 92 119 140 0 2 0 224 163 69 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 87 61 23 7 0 0 -+134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 109 141 168 0 2 0 178 180 177 254 255 252 254 255 252 254 255 252 252 254 250 -+39 43 45 10 16 18 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+88 115 136 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 45 47 44 234 236 233 234 236 233 234 236 233 131 133 130 -+148 150 147 138 140 137 148 150 147 210 212 209 152 154 151 26 27 25 29 21 8 250 179 73 -+250 179 73 234 172 70 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 170 212 252 -+170 212 252 103 134 161 0 2 0 202 145 58 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 238 175 73 75 55 22 0 2 0 75 102 123 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 140 177 211 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 -+183 185 181 0 2 0 75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 57 72 88 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 162 164 161 234 236 233 234 236 233 135 137 134 -+226 228 225 198 200 197 104 106 103 15 17 14 0 2 0 15 9 7 147 105 44 250 179 73 -+248 178 79 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 21 27 33 170 212 252 170 212 252 170 212 252 -+170 212 252 122 159 192 0 2 0 175 129 54 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 202 145 58 55 39 17 0 2 0 82 108 129 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 12 17 20 60 62 59 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 69 71 68 0 6 9 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 159 201 241 26 33 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 162 164 161 215 217 214 95 96 94 -+56 58 55 0 2 0 0 2 0 0 2 0 61 44 16 238 175 73 250 179 73 250 179 73 -+218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 88 115 136 170 212 252 170 212 252 170 212 252 -+170 212 252 143 185 225 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 212 153 66 95 68 30 0 2 0 8 14 16 103 134 161 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 68 83 99 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 -+254 255 252 210 212 209 0 6 9 53 68 84 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 126 162 196 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 23 15 7 250 179 73 250 179 73 250 179 73 -+250 179 73 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 166 207 248 0 2 0 52 36 13 158 114 46 180 132 57 161 117 49 119 87 37 -+41 31 10 0 2 0 0 2 0 72 87 103 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 115 152 185 0 2 0 152 154 151 254 255 252 238 241 237 85 87 84 -+229 231 228 254 255 252 99 101 98 0 2 0 126 162 196 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 -+250 179 73 105 75 32 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 32 39 45 0 2 0 57 72 88 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 85 112 133 12 17 20 0 2 0 0 2 0 0 2 0 0 2 0 -+34 41 47 92 110 133 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 166 207 248 6 12 15 71 73 70 254 255 252 229 231 228 0 2 0 -+141 142 139 254 255 252 231 233 230 10 12 8 34 44 55 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 154 195 235 6 12 15 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 125 92 35 250 179 73 250 179 73 -+250 179 73 180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 68 83 99 -+129 165 199 85 112 133 0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 126 162 196 119 156 189 134 170 204 149 191 231 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 57 72 88 3 6 2 242 244 240 254 255 252 35 37 34 -+78 80 77 254 255 252 254 255 252 128 130 127 0 2 0 105 137 164 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 91 123 149 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 55 39 17 250 179 73 250 179 73 -+250 179 73 245 175 76 7 10 5 0 2 0 44 54 65 103 134 161 161 203 243 170 212 252 -+170 212 252 21 27 33 25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 61 76 92 0 2 0 242 244 240 254 255 252 102 104 101 -+10 12 8 231 233 230 254 255 252 244 246 243 26 27 25 21 27 33 159 201 241 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 32 39 45 0 6 9 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 218 158 64 250 179 73 -+250 179 73 250 179 73 75 55 22 0 2 0 161 203 243 170 212 252 170 212 252 170 212 252 -+115 147 174 0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 159 201 241 146 188 228 -+140 177 211 134 170 204 146 188 228 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 17 24 30 62 64 61 254 255 252 254 255 252 215 217 214 -+0 2 0 102 104 101 254 255 252 254 255 252 166 168 165 0 2 0 72 87 103 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 75 32 250 179 73 -+250 179 73 250 179 73 150 108 46 0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 -+49 59 70 3 10 13 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 166 207 248 109 141 168 65 87 102 28 35 41 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 28 35 41 70 96 117 138 174 208 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 0 2 0 102 104 101 254 255 252 254 255 252 254 255 252 -+102 104 101 0 2 0 192 194 191 254 255 252 254 255 252 78 80 77 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 34 44 55 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 61 76 92 154 195 235 0 6 9 29 21 8 250 179 73 -+250 179 73 250 179 73 224 163 69 0 2 0 68 83 99 170 212 252 170 212 252 143 179 213 -+0 2 0 72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+161 203 243 96 115 138 17 24 30 0 2 0 0 2 0 45 47 44 102 104 101 123 125 122 -+138 140 137 143 145 142 115 117 114 82 83 81 43 44 42 0 2 0 0 2 0 32 39 45 -+126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 0 2 0 85 87 84 254 255 252 254 255 252 254 255 252 -+242 244 240 27 29 27 35 37 34 254 255 252 254 255 252 231 233 230 10 12 8 21 27 33 -+159 201 241 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 6 9 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 44 54 65 170 212 252 170 212 252 34 44 55 0 2 0 82 62 28 -+109 79 35 224 163 69 250 179 73 52 36 13 15 20 22 170 212 252 170 212 252 75 89 106 -+0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 -+25 32 38 0 2 0 40 41 39 155 157 153 238 241 237 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 115 117 114 18 20 17 -+0 2 0 68 83 99 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 52 62 74 7 10 5 234 236 233 254 255 252 254 255 252 -+254 255 252 195 197 194 102 104 101 254 255 252 254 255 252 254 255 252 162 164 161 0 2 0 -+72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 119 156 189 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 115 147 174 170 212 252 91 123 149 0 2 0 0 2 0 6 12 15 -+0 2 0 15 9 7 197 142 62 125 92 35 0 2 0 115 152 185 113 145 172 3 6 2 -+41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 113 145 172 0 6 9 -+10 12 8 155 157 153 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 232 234 231 -+87 89 86 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 115 152 185 0 2 0 138 140 137 254 255 252 254 255 252 -+254 255 252 254 255 252 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 65 66 64 -+0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 154 195 235 170 212 252 143 179 213 88 115 136 149 191 231 170 212 252 -+126 162 196 3 6 2 64 46 18 202 145 58 0 2 0 0 2 0 0 2 0 0 2 0 -+92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 143 179 213 3 10 13 27 29 27 -+215 217 214 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 155 157 153 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 23 30 36 27 29 27 249 251 248 254 255 252 -+254 255 252 188 190 187 7 10 5 226 228 225 254 255 252 254 255 252 254 255 252 231 233 230 -+7 10 5 21 27 33 159 201 241 170 212 252 103 134 161 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 55 66 77 11 4 3 250 179 73 24 17 10 0 2 0 0 2 0 0 2 0 -+143 185 225 170 212 252 170 212 252 170 212 252 159 201 241 28 35 41 7 10 5 200 202 199 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 155 157 153 0 2 0 55 66 77 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 96 127 154 0 2 0 158 160 156 254 255 252 -+254 255 252 192 194 191 0 2 0 176 178 175 254 255 252 254 255 252 254 255 252 254 255 252 -+141 142 139 0 2 0 72 87 103 129 165 199 0 6 9 0 6 9 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 12 17 20 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 -+138 174 208 17 24 30 29 21 8 250 179 73 101 72 28 0 2 0 0 2 0 32 39 45 -+170 212 252 170 212 252 170 212 252 170 212 252 57 72 88 0 2 0 152 154 151 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 108 110 107 0 2 0 115 152 185 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 18 22 24 40 41 39 254 255 252 -+254 255 252 232 234 231 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 10 12 8 0 2 0 8 14 16 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 41 51 62 61 76 92 34 44 55 3 10 13 -+0 2 0 11 4 3 164 119 51 250 179 73 175 129 54 0 2 0 0 2 0 82 108 129 -+170 212 252 170 212 252 170 212 252 98 129 156 0 2 0 95 96 94 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 238 241 237 18 20 17 25 32 38 166 207 248 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 85 112 133 0 2 0 188 190 187 -+254 255 252 254 255 252 198 200 197 242 244 240 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 120 122 119 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 6 9 7 0 0 -+31 23 12 202 145 58 250 179 73 250 179 73 238 175 73 0 2 0 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 28 35 41 31 32 30 244 246 243 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 85 112 133 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 0 2 0 148 150 147 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 222 224 221 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+7 0 0 234 172 70 250 179 73 250 179 73 250 179 73 34 26 8 0 2 0 149 191 231 -+170 212 252 170 212 252 129 165 199 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 48 50 48 3 10 13 146 188 228 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 0 2 0 118 120 117 -+254 255 252 254 255 252 254 255 252 169 171 168 231 233 230 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 170 124 49 250 179 73 250 179 73 250 179 73 48 33 15 6 12 15 170 212 252 -+170 212 252 170 212 252 65 87 102 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 195 197 194 0 2 0 84 103 125 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 3 10 13 85 87 84 -+254 255 252 254 255 252 234 236 233 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 99 101 98 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 95 68 30 250 179 73 250 179 73 250 179 73 34 26 8 34 44 55 170 212 252 -+170 212 252 163 205 246 8 14 16 62 64 61 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 35 37 34 34 44 55 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 26 33 39 60 62 59 -+254 255 252 254 255 252 238 241 237 0 2 0 108 110 107 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 158 160 156 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 23 15 7 248 178 79 250 179 73 245 175 76 0 2 0 63 78 94 170 212 252 -+170 212 252 109 141 168 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 104 106 103 0 2 0 -+154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 69 71 68 -+254 255 252 254 255 252 244 246 243 0 2 0 91 93 90 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 215 217 214 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 197 142 62 250 179 73 212 153 66 0 2 0 92 110 133 170 212 252 -+170 212 252 80 98 121 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 176 178 175 0 2 0 -+105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 8 14 16 87 89 86 -+254 255 252 254 255 252 254 255 252 40 41 39 21 22 20 252 254 250 254 255 252 254 255 252 -+254 255 252 254 255 252 252 254 250 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 125 92 35 250 179 73 170 124 49 0 2 0 113 145 172 170 212 252 -+170 212 252 53 68 84 15 17 14 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 242 244 240 0 2 0 -+63 78 94 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 0 2 0 104 106 103 -+254 255 252 254 255 252 254 255 252 123 125 122 0 2 0 166 168 165 254 255 252 254 255 252 -+254 255 252 254 255 252 234 236 233 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 7 0 0 52 36 13 250 179 73 129 95 39 0 2 0 143 179 213 170 212 252 -+170 212 252 32 39 45 48 50 48 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 60 62 59 -+18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 2 0 102 104 101 -+254 255 252 254 255 252 254 255 252 226 228 225 15 17 14 10 12 8 215 217 214 254 255 252 -+254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 88 66 26 29 21 8 0 2 0 166 207 248 170 212 252 -+170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 123 125 122 -+0 2 0 149 191 231 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 56 58 55 -+254 255 252 254 255 252 254 255 252 254 255 252 178 180 177 0 2 0 38 40 37 238 241 237 -+254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 7 0 0 0 2 0 161 203 243 170 212 252 -+149 191 231 0 2 0 123 125 122 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 141 142 139 -+0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 -+210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 120 122 119 0 2 0 21 22 20 -+143 145 142 244 246 243 219 221 218 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 149 191 231 170 212 252 -+129 165 199 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 155 157 153 -+0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 0 6 9 -+69 71 68 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 71 73 70 0 2 0 -+0 2 0 0 2 0 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 170 212 252 -+129 165 199 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 169 171 168 -+0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 75 94 116 -+0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 134 170 204 170 212 252 -+134 170 204 0 2 0 152 154 151 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 -+0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 -+44 54 65 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 35 37 34 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 -+138 174 208 0 2 0 143 145 142 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 198 200 197 -+0 2 0 103 134 161 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+157 198 239 28 35 41 0 2 0 188 190 187 254 255 252 252 254 250 3 6 2 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 115 152 185 170 212 252 -+143 179 213 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 -+0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 146 188 228 0 6 9 26 27 25 242 244 240 176 178 175 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 170 212 252 -+143 185 225 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 185 187 183 -+0 2 0 105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 163 205 246 0 2 0 0 2 0 102 104 101 60 62 59 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 80 98 121 170 212 252 -+149 191 231 0 2 0 118 120 117 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 143 145 142 -+0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 143 179 213 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 170 212 252 -+170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 108 110 107 -+0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 115 152 185 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 170 212 252 -+170 212 252 34 44 55 43 44 42 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 -+15 20 22 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 75 94 116 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 -+170 212 252 63 78 94 3 6 2 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 31 32 30 -+41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+161 203 243 6 12 15 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 -+170 212 252 88 115 136 0 2 0 210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 249 251 248 0 2 0 -+68 83 99 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+96 127 154 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 61 76 92 -+170 212 252 119 150 178 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 0 2 0 -+91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+28 35 41 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 -+146 188 228 143 185 225 0 2 0 126 127 125 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 85 87 84 0 6 9 -+154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 98 129 156 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+72 90 112 170 212 252 18 22 24 56 58 55 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 238 241 237 7 10 5 55 66 77 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 0 6 9 -+0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 122 159 192 72 87 103 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 113 145 172 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 139 181 221 8 14 16 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 18 22 24 109 141 168 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 12 17 20 166 207 248 -+170 212 252 170 212 252 170 212 252 170 212 252 146 188 228 23 30 36 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 101 72 28 202 145 58 -+180 132 57 0 2 0 38 45 51 3 10 13 69 71 68 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 200 202 199 0 2 0 75 89 106 170 212 252 -+170 212 252 170 212 252 170 212 252 109 141 168 8 14 16 0 2 0 21 13 4 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 7 0 0 0 2 0 101 72 28 218 158 64 250 179 73 250 179 73 -+250 179 73 139 99 44 0 2 0 8 14 16 0 2 0 238 241 237 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 244 246 243 38 40 37 3 10 13 139 181 221 170 212 252 -+170 212 252 161 203 243 66 80 97 0 2 0 31 23 12 191 142 60 248 183 74 180 132 57 -+44 34 15 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 23 15 7 190 136 56 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 150 108 46 0 2 0 0 2 0 82 83 81 222 224 221 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 102 104 101 0 2 0 98 129 156 170 212 252 163 205 246 -+98 129 156 23 30 36 0 2 0 82 62 28 234 172 70 248 183 74 248 183 74 248 183 74 -+248 183 74 158 114 46 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 64 46 18 109 79 35 150 108 46 224 163 69 250 179 73 -+250 179 73 250 179 73 250 179 73 158 114 46 0 2 0 0 2 0 3 6 2 115 117 114 -+234 236 233 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 176 178 175 0 2 0 57 72 88 146 188 228 80 98 121 8 14 16 -+0 2 0 24 17 10 158 114 46 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 242 178 77 58 42 19 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 0 2 0 67 49 21 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 95 68 30 0 2 0 0 2 0 -+0 2 0 52 54 51 108 110 107 162 164 161 219 221 218 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 -+219 221 218 178 180 177 18 20 17 6 12 15 26 33 39 0 2 0 0 2 0 52 36 13 -+164 119 51 242 178 77 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 242 178 77 -+187 138 56 175 129 54 158 114 46 82 62 28 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 78 58 25 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 234 172 70 142 101 40 -+44 34 15 10 12 8 0 2 0 0 2 0 0 2 0 18 20 17 60 62 59 71 73 70 -+82 83 81 95 96 94 104 106 103 118 120 117 115 117 114 78 80 77 40 41 39 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 44 34 15 105 75 32 191 142 60 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 105 75 32 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 187 138 56 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 142 101 40 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 206 148 61 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 161 117 49 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 228 167 73 250 179 73 -+238 175 73 190 136 56 158 114 46 234 172 70 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 147 105 44 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 67 49 21 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 -+31 23 12 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 21 13 4 -+0 2 0 0 2 0 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 -+134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 155 111 43 248 183 74 248 183 74 -+248 183 74 248 183 74 224 163 69 55 39 17 64 46 18 164 119 51 242 178 77 248 183 74 -+75 55 22 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 228 167 73 88 66 26 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 168 123 54 248 183 74 -+248 183 74 248 183 74 158 114 46 0 2 0 7 0 0 0 2 0 10 12 8 44 34 15 -+15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 29 21 8 250 179 73 250 179 73 158 114 46 15 14 3 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 175 129 54 -+248 183 74 248 183 74 114 83 33 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 29 21 8 147 105 44 58 42 19 0 2 0 7 0 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+105 75 32 218 158 64 23 15 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -diff --git a/drivers/video/logo/logo_linux_mono.pbm b/drivers/video/logo/logo_linux_mono.pbm -index 2f14d9f..3d3c358 100644 ---- a/drivers/video/logo/logo_linux_mono.pbm -+++ b/drivers/video/logo/logo_linux_mono.pbm -@@ -1,203 +1,159 @@ --P1 --# Standard black and white Linux logo --80 80 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 --1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 1 1 --1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 --1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 --0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 --1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 --0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 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 1 1 1 1 1 1 1 1 1 1 1 0 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 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 1 1 0 1 1 1 1 1 1 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 --1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 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 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 0 0 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 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 1 1 1 0 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 0 0 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 1 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 --1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 --1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 --1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 --1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 --1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -+P2 -+80 78 -+255 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 255 255 255 255 255 0 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 -+255 0 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 -+255 255 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 -+255 255 0 0 0 0 0 0 0 0 -+0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 -+255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 255 255 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 0 255 255 0 0 255 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 255 255 255 0 0 255 -+255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 255 -+255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 0 -+255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 -+0 255 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 -+0 255 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 -+0 0 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 255 255 255 -+255 0 0 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 255 0 0 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 -+255 0 0 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 0 0 255 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 255 255 255 -+255 255 0 0 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 255 255 255 255 0 255 255 255 -+255 255 255 0 0 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 0 255 255 255 -+255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 0 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 0 -+0 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 255 -+0 0 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -diff --git a/drivers/video/logo/logo_linux_vga16.ppm b/drivers/video/logo/logo_linux_vga16.ppm -index 1850c15..f279f97 100644 ---- a/drivers/video/logo/logo_linux_vga16.ppm -+++ b/drivers/video/logo/logo_linux_vga16.ppm -@@ -1,1604 +1,18724 @@ - P3 --# Standard 16-color Linux logo --80 80 --255 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 170 170 170 85 85 85 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 170 170 170 170 170 --170 170 170 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 170 170 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 170 170 170 255 255 255 255 255 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 255 255 255 170 170 170 170 170 170 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 0 0 0 0 0 0 255 255 255 -- 85 85 85 0 0 0 0 0 0 0 0 0 --255 255 255 170 170 170 0 0 0 85 85 85 --170 170 170 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 170 170 170 -- 85 85 85 0 0 0 0 0 0 0 0 0 --255 255 255 85 85 85 0 0 0 0 0 0 -- 85 85 85 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 0 0 0 0 0 0 170 170 170 -- 85 85 85 85 85 85 85 85 85 85 85 85 --255 255 255 85 85 85 0 0 0 0 0 0 -- 85 85 85 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 170 170 170 170 170 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 170 170 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 170 85 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 85 85 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 85 85 85 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 170 170 170 170 170 170 170 170 0 0 0 -- 0 0 0 0 0 0 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 170 170 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 170 170 170 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 170 170 170 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 170 170 170 --170 170 170 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 170 170 170 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 170 170 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 170 170 170 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 85 85 85 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 0 0 0 85 85 85 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 85 85 85 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 -- 0 0 0 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 85 85 85 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 85 85 85 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 170 170 170 -- 85 85 85 0 0 0 0 0 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 85 85 85 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 170 85 0 170 85 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 85 85 85 85 85 85 170 85 0 --170 85 0 170 85 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -+# CREATOR: GIMP PNM Filter Version 1.1 -+80 78 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 diff --git a/libre/linux-libre-grsec/logo_linux_clut224.ppm b/libre/linux-libre-grsec/logo_linux_clut224.ppm new file mode 100644 index 000000000..c9d837347 --- /dev/null +++ b/libre/linux-libre-grsec/logo_linux_clut224.ppm @@ -0,0 +1,861 @@ +P3 +80 78 +255 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 23 30 36 44 54 65 57 72 88 44 54 65 6 12 15 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 31 41 52 +103 134 161 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 +82 108 129 8 14 16 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 17 24 30 126 162 196 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 161 203 243 92 119 140 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 154 195 235 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 138 174 208 21 27 33 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 70 96 117 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 49 59 70 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 3 6 52 62 74 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 +82 108 129 149 191 231 170 212 252 170 212 252 170 212 252 129 165 199 82 108 129 149 191 231 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 37 48 59 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 21 13 4 31 23 12 0 2 0 0 2 0 105 75 32 155 111 43 23 15 7 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 6 9 3 10 13 146 188 228 170 212 252 170 212 252 170 212 252 157 198 239 0 6 9 +0 2 0 52 62 74 170 212 252 170 212 252 154 195 235 0 6 9 0 2 0 55 66 77 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 151 193 233 17 24 30 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +10 12 8 23 15 7 139 99 44 206 148 61 67 49 21 0 2 0 125 92 35 206 148 61 +15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 96 127 154 170 212 252 170 212 252 170 212 252 170 212 252 92 119 140 21 22 20 +10 12 8 53 68 84 170 212 252 170 212 252 92 119 140 10 12 8 7 10 5 53 68 84 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 +0 6 9 0 3 6 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 22 20 +62 64 61 38 40 37 0 2 0 34 26 8 212 153 66 64 46 18 0 2 0 170 124 49 +180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 65 87 102 115 117 114 +43 44 42 88 115 136 170 212 252 170 212 252 68 83 99 108 110 107 60 62 59 88 115 136 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +80 98 121 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 10 12 8 56 58 55 95 96 94 178 180 177 215 217 214 198 200 197 +158 160 156 138 140 137 82 83 81 0 2 0 64 46 18 228 167 73 23 15 7 41 31 10 +250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 +0 2 0 126 162 196 170 212 252 170 212 252 57 72 88 0 2 0 0 2 0 126 162 196 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +157 198 239 8 14 16 0 6 9 0 2 0 45 47 44 195 197 194 192 194 191 38 40 37 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 192 194 191 234 236 233 176 178 175 118 120 117 143 145 142 176 178 175 +215 217 214 234 236 233 234 236 233 104 106 103 0 2 0 142 101 40 134 100 43 0 2 0 +164 119 51 170 124 49 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 115 152 185 8 14 16 +49 59 70 166 207 248 170 212 252 170 212 252 119 150 178 8 14 16 55 66 77 166 207 248 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 92 119 140 0 2 0 0 2 0 200 202 199 254 255 252 254 255 252 244 246 243 +40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 38 40 37 234 236 233 234 236 233 234 236 233 135 137 134 215 217 214 171 173 170 +141 142 139 138 140 137 138 140 137 135 137 134 31 32 30 3 6 2 212 153 66 15 9 7 +78 58 25 248 178 79 41 31 10 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 3 6 21 27 33 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 154 195 235 0 6 9 82 83 81 254 255 252 254 255 252 254 255 252 254 255 252 +188 190 187 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 62 64 61 234 236 233 234 236 233 234 236 233 198 200 197 131 133 130 198 200 197 +232 234 231 234 236 233 234 236 233 234 236 233 152 154 151 0 2 0 147 105 44 67 49 21 +23 15 7 250 179 73 158 114 46 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 61 76 92 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 154 195 235 103 134 161 80 98 121 +52 62 74 18 22 24 0 2 0 3 10 13 38 45 51 80 98 121 151 193 233 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 109 141 168 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 +226 228 225 65 66 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 43 44 42 234 236 233 234 236 233 234 236 233 234 236 233 131 133 130 192 194 191 +152 154 151 141 142 139 141 142 139 141 142 139 158 160 156 3 6 2 82 62 28 129 95 39 +0 2 0 206 148 61 248 178 79 21 13 4 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 96 115 138 +170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 18 22 24 0 2 0 0 2 0 +34 26 8 75 55 22 114 83 33 95 68 30 55 39 17 7 0 0 0 6 9 84 103 125 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 84 103 125 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 171 173 170 +0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 18 20 17 234 236 233 234 236 233 234 236 233 234 236 233 138 140 137 178 180 177 +226 228 225 234 236 233 234 236 233 234 236 233 231 233 230 45 47 44 23 15 7 190 136 56 +0 2 0 147 105 44 250 179 73 64 46 18 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 126 162 196 0 2 0 26 20 13 190 136 56 245 175 76 +250 179 73 161 117 49 164 119 51 245 175 76 250 179 73 206 148 61 75 55 22 0 2 0 +126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 68 83 99 0 2 0 252 254 250 254 255 252 254 255 252 254 255 252 71 73 70 +8 14 16 88 115 136 17 24 30 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 232 234 231 234 236 233 234 236 233 234 236 233 215 217 214 148 150 147 +183 185 181 141 142 139 135 137 134 135 137 134 141 142 139 87 89 86 0 2 0 202 145 58 +3 6 2 88 66 26 250 179 73 109 79 35 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 157 198 239 +170 212 252 170 212 252 166 207 248 26 33 39 26 20 13 224 163 69 250 179 73 250 179 73 +250 179 73 197 142 62 202 145 58 250 179 73 250 179 73 250 179 73 234 172 70 21 13 4 +38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 52 62 74 21 22 20 254 255 252 254 255 252 254 255 252 254 255 252 21 22 20 +49 59 70 170 212 252 166 207 248 91 123 149 8 14 16 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 215 217 214 234 236 233 234 236 233 234 236 233 234 236 233 123 125 122 +188 190 187 229 231 228 234 236 233 234 236 233 222 224 221 118 120 117 0 2 0 168 123 54 +34 26 8 67 49 21 250 179 73 134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 34 41 47 170 212 252 +170 212 252 170 212 252 85 112 133 0 2 0 164 119 51 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 129 95 39 +0 2 0 138 174 208 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 34 44 55 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 24 22 25 +52 62 74 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 178 180 177 234 236 233 234 236 233 234 236 233 234 236 233 141 142 139 +198 200 197 148 150 147 135 137 134 135 137 134 148 150 147 123 125 122 0 2 0 190 136 56 +21 13 4 78 58 25 250 179 73 129 95 39 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 82 108 129 170 212 252 +170 212 252 170 212 252 23 30 36 58 42 19 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 147 105 44 +0 2 0 139 181 221 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 34 41 47 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 +25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 6 9 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 91 93 90 234 236 233 234 236 233 234 236 233 234 236 233 126 127 125 +169 171 168 222 224 221 234 236 233 229 231 228 178 180 177 71 73 70 0 2 0 212 153 66 +0 2 0 95 68 30 250 179 73 119 87 37 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 138 174 208 170 212 252 +170 212 252 154 195 235 0 2 0 125 92 35 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 119 87 37 +0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 57 72 88 7 10 5 252 254 250 254 255 252 254 255 252 254 255 252 95 96 94 +0 6 9 166 207 248 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 8 14 16 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 7 10 5 222 224 221 234 236 233 234 236 233 234 236 233 141 142 139 +183 185 181 138 140 137 131 133 130 141 142 139 192 194 191 102 104 101 0 2 0 224 163 69 +0 2 0 105 75 32 250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 27 33 170 212 252 170 212 252 +170 212 252 115 152 185 0 2 0 180 132 57 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 10 12 8 +38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 82 108 129 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 158 160 156 +0 2 0 92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 141 142 139 234 236 233 234 236 233 234 236 233 131 133 130 +185 187 183 231 233 230 222 224 221 158 160 156 138 140 137 48 50 48 3 6 2 250 179 73 +134 100 43 206 148 61 218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 75 94 116 170 212 252 170 212 252 +170 212 252 92 119 140 0 2 0 224 163 69 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 87 61 23 7 0 0 +134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 109 141 168 0 2 0 178 180 177 254 255 252 254 255 252 254 255 252 252 254 250 +39 43 45 10 16 18 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +88 115 136 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 45 47 44 234 236 233 234 236 233 234 236 233 131 133 130 +148 150 147 138 140 137 148 150 147 210 212 209 152 154 151 26 27 25 29 21 8 250 179 73 +250 179 73 234 172 70 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 170 212 252 +170 212 252 103 134 161 0 2 0 202 145 58 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 238 175 73 75 55 22 0 2 0 75 102 123 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 140 177 211 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 +183 185 181 0 2 0 75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 57 72 88 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 162 164 161 234 236 233 234 236 233 135 137 134 +226 228 225 198 200 197 104 106 103 15 17 14 0 2 0 15 9 7 147 105 44 250 179 73 +248 178 79 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 21 27 33 170 212 252 170 212 252 170 212 252 +170 212 252 122 159 192 0 2 0 175 129 54 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 202 145 58 55 39 17 0 2 0 82 108 129 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 12 17 20 60 62 59 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 69 71 68 0 6 9 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 159 201 241 26 33 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 162 164 161 215 217 214 95 96 94 +56 58 55 0 2 0 0 2 0 0 2 0 61 44 16 238 175 73 250 179 73 250 179 73 +218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 88 115 136 170 212 252 170 212 252 170 212 252 +170 212 252 143 185 225 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 212 153 66 95 68 30 0 2 0 8 14 16 103 134 161 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 68 83 99 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 +254 255 252 210 212 209 0 6 9 53 68 84 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 126 162 196 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 23 15 7 250 179 73 250 179 73 250 179 73 +250 179 73 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 166 207 248 0 2 0 52 36 13 158 114 46 180 132 57 161 117 49 119 87 37 +41 31 10 0 2 0 0 2 0 72 87 103 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 115 152 185 0 2 0 152 154 151 254 255 252 238 241 237 85 87 84 +229 231 228 254 255 252 99 101 98 0 2 0 126 162 196 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 +250 179 73 105 75 32 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 32 39 45 0 2 0 57 72 88 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 85 112 133 12 17 20 0 2 0 0 2 0 0 2 0 0 2 0 +34 41 47 92 110 133 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 166 207 248 6 12 15 71 73 70 254 255 252 229 231 228 0 2 0 +141 142 139 254 255 252 231 233 230 10 12 8 34 44 55 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 154 195 235 6 12 15 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 125 92 35 250 179 73 250 179 73 +250 179 73 180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 68 83 99 +129 165 199 85 112 133 0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 126 162 196 119 156 189 134 170 204 149 191 231 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 57 72 88 3 6 2 242 244 240 254 255 252 35 37 34 +78 80 77 254 255 252 254 255 252 128 130 127 0 2 0 105 137 164 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 91 123 149 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 55 39 17 250 179 73 250 179 73 +250 179 73 245 175 76 7 10 5 0 2 0 44 54 65 103 134 161 161 203 243 170 212 252 +170 212 252 21 27 33 25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 61 76 92 0 2 0 242 244 240 254 255 252 102 104 101 +10 12 8 231 233 230 254 255 252 244 246 243 26 27 25 21 27 33 159 201 241 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 32 39 45 0 6 9 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 218 158 64 250 179 73 +250 179 73 250 179 73 75 55 22 0 2 0 161 203 243 170 212 252 170 212 252 170 212 252 +115 147 174 0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 159 201 241 146 188 228 +140 177 211 134 170 204 146 188 228 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 17 24 30 62 64 61 254 255 252 254 255 252 215 217 214 +0 2 0 102 104 101 254 255 252 254 255 252 166 168 165 0 2 0 72 87 103 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 75 32 250 179 73 +250 179 73 250 179 73 150 108 46 0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 +49 59 70 3 10 13 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 166 207 248 109 141 168 65 87 102 28 35 41 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 28 35 41 70 96 117 138 174 208 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 0 2 0 102 104 101 254 255 252 254 255 252 254 255 252 +102 104 101 0 2 0 192 194 191 254 255 252 254 255 252 78 80 77 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 34 44 55 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 61 76 92 154 195 235 0 6 9 29 21 8 250 179 73 +250 179 73 250 179 73 224 163 69 0 2 0 68 83 99 170 212 252 170 212 252 143 179 213 +0 2 0 72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +161 203 243 96 115 138 17 24 30 0 2 0 0 2 0 45 47 44 102 104 101 123 125 122 +138 140 137 143 145 142 115 117 114 82 83 81 43 44 42 0 2 0 0 2 0 32 39 45 +126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 0 2 0 85 87 84 254 255 252 254 255 252 254 255 252 +242 244 240 27 29 27 35 37 34 254 255 252 254 255 252 231 233 230 10 12 8 21 27 33 +159 201 241 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 6 9 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 44 54 65 170 212 252 170 212 252 34 44 55 0 2 0 82 62 28 +109 79 35 224 163 69 250 179 73 52 36 13 15 20 22 170 212 252 170 212 252 75 89 106 +0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 +25 32 38 0 2 0 40 41 39 155 157 153 238 241 237 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 115 117 114 18 20 17 +0 2 0 68 83 99 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 52 62 74 7 10 5 234 236 233 254 255 252 254 255 252 +254 255 252 195 197 194 102 104 101 254 255 252 254 255 252 254 255 252 162 164 161 0 2 0 +72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 119 156 189 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 115 147 174 170 212 252 91 123 149 0 2 0 0 2 0 6 12 15 +0 2 0 15 9 7 197 142 62 125 92 35 0 2 0 115 152 185 113 145 172 3 6 2 +41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 113 145 172 0 6 9 +10 12 8 155 157 153 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 232 234 231 +87 89 86 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 115 152 185 0 2 0 138 140 137 254 255 252 254 255 252 +254 255 252 254 255 252 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 65 66 64 +0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 154 195 235 170 212 252 143 179 213 88 115 136 149 191 231 170 212 252 +126 162 196 3 6 2 64 46 18 202 145 58 0 2 0 0 2 0 0 2 0 0 2 0 +92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 143 179 213 3 10 13 27 29 27 +215 217 214 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 155 157 153 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 23 30 36 27 29 27 249 251 248 254 255 252 +254 255 252 188 190 187 7 10 5 226 228 225 254 255 252 254 255 252 254 255 252 231 233 230 +7 10 5 21 27 33 159 201 241 170 212 252 103 134 161 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 55 66 77 11 4 3 250 179 73 24 17 10 0 2 0 0 2 0 0 2 0 +143 185 225 170 212 252 170 212 252 170 212 252 159 201 241 28 35 41 7 10 5 200 202 199 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 155 157 153 0 2 0 55 66 77 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 96 127 154 0 2 0 158 160 156 254 255 252 +254 255 252 192 194 191 0 2 0 176 178 175 254 255 252 254 255 252 254 255 252 254 255 252 +141 142 139 0 2 0 72 87 103 129 165 199 0 6 9 0 6 9 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 12 17 20 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 +138 174 208 17 24 30 29 21 8 250 179 73 101 72 28 0 2 0 0 2 0 32 39 45 +170 212 252 170 212 252 170 212 252 170 212 252 57 72 88 0 2 0 152 154 151 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 108 110 107 0 2 0 115 152 185 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 18 22 24 40 41 39 254 255 252 +254 255 252 232 234 231 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 10 12 8 0 2 0 8 14 16 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 41 51 62 61 76 92 34 44 55 3 10 13 +0 2 0 11 4 3 164 119 51 250 179 73 175 129 54 0 2 0 0 2 0 82 108 129 +170 212 252 170 212 252 170 212 252 98 129 156 0 2 0 95 96 94 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 238 241 237 18 20 17 25 32 38 166 207 248 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 85 112 133 0 2 0 188 190 187 +254 255 252 254 255 252 198 200 197 242 244 240 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 120 122 119 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 6 9 7 0 0 +31 23 12 202 145 58 250 179 73 250 179 73 238 175 73 0 2 0 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 28 35 41 31 32 30 244 246 243 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 85 112 133 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 0 2 0 148 150 147 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 222 224 221 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +7 0 0 234 172 70 250 179 73 250 179 73 250 179 73 34 26 8 0 2 0 149 191 231 +170 212 252 170 212 252 129 165 199 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 48 50 48 3 10 13 146 188 228 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 0 2 0 118 120 117 +254 255 252 254 255 252 254 255 252 169 171 168 231 233 230 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 170 124 49 250 179 73 250 179 73 250 179 73 48 33 15 6 12 15 170 212 252 +170 212 252 170 212 252 65 87 102 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 195 197 194 0 2 0 84 103 125 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 3 10 13 85 87 84 +254 255 252 254 255 252 234 236 233 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 99 101 98 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 95 68 30 250 179 73 250 179 73 250 179 73 34 26 8 34 44 55 170 212 252 +170 212 252 163 205 246 8 14 16 62 64 61 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 35 37 34 34 44 55 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 26 33 39 60 62 59 +254 255 252 254 255 252 238 241 237 0 2 0 108 110 107 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 158 160 156 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 23 15 7 248 178 79 250 179 73 245 175 76 0 2 0 63 78 94 170 212 252 +170 212 252 109 141 168 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 104 106 103 0 2 0 +154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 69 71 68 +254 255 252 254 255 252 244 246 243 0 2 0 91 93 90 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 215 217 214 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 197 142 62 250 179 73 212 153 66 0 2 0 92 110 133 170 212 252 +170 212 252 80 98 121 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 176 178 175 0 2 0 +105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 8 14 16 87 89 86 +254 255 252 254 255 252 254 255 252 40 41 39 21 22 20 252 254 250 254 255 252 254 255 252 +254 255 252 254 255 252 252 254 250 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 125 92 35 250 179 73 170 124 49 0 2 0 113 145 172 170 212 252 +170 212 252 53 68 84 15 17 14 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 242 244 240 0 2 0 +63 78 94 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 0 2 0 104 106 103 +254 255 252 254 255 252 254 255 252 123 125 122 0 2 0 166 168 165 254 255 252 254 255 252 +254 255 252 254 255 252 234 236 233 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 7 0 0 52 36 13 250 179 73 129 95 39 0 2 0 143 179 213 170 212 252 +170 212 252 32 39 45 48 50 48 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 60 62 59 +18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 2 0 102 104 101 +254 255 252 254 255 252 254 255 252 226 228 225 15 17 14 10 12 8 215 217 214 254 255 252 +254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 88 66 26 29 21 8 0 2 0 166 207 248 170 212 252 +170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 123 125 122 +0 2 0 149 191 231 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 56 58 55 +254 255 252 254 255 252 254 255 252 254 255 252 178 180 177 0 2 0 38 40 37 238 241 237 +254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 7 0 0 0 2 0 161 203 243 170 212 252 +149 191 231 0 2 0 123 125 122 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 141 142 139 +0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 +210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 120 122 119 0 2 0 21 22 20 +143 145 142 244 246 243 219 221 218 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 149 191 231 170 212 252 +129 165 199 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 155 157 153 +0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 0 6 9 +69 71 68 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 71 73 70 0 2 0 +0 2 0 0 2 0 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 170 212 252 +129 165 199 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 169 171 168 +0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 75 94 116 +0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 134 170 204 170 212 252 +134 170 204 0 2 0 152 154 151 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 +0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 +44 54 65 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 35 37 34 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 +138 174 208 0 2 0 143 145 142 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 198 200 197 +0 2 0 103 134 161 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +157 198 239 28 35 41 0 2 0 188 190 187 254 255 252 252 254 250 3 6 2 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 115 152 185 170 212 252 +143 179 213 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 +0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 146 188 228 0 6 9 26 27 25 242 244 240 176 178 175 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 170 212 252 +143 185 225 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 185 187 183 +0 2 0 105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 163 205 246 0 2 0 0 2 0 102 104 101 60 62 59 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 80 98 121 170 212 252 +149 191 231 0 2 0 118 120 117 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 143 145 142 +0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 143 179 213 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 170 212 252 +170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 108 110 107 +0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 115 152 185 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 170 212 252 +170 212 252 34 44 55 43 44 42 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 +15 20 22 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 75 94 116 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 +170 212 252 63 78 94 3 6 2 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 31 32 30 +41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +161 203 243 6 12 15 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 +170 212 252 88 115 136 0 2 0 210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 249 251 248 0 2 0 +68 83 99 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +96 127 154 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 61 76 92 +170 212 252 119 150 178 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 0 2 0 +91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +28 35 41 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 +146 188 228 143 185 225 0 2 0 126 127 125 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 85 87 84 0 6 9 +154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 98 129 156 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +72 90 112 170 212 252 18 22 24 56 58 55 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 238 241 237 7 10 5 55 66 77 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 0 6 9 +0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 122 159 192 72 87 103 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 113 145 172 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 139 181 221 8 14 16 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 18 22 24 109 141 168 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 12 17 20 166 207 248 +170 212 252 170 212 252 170 212 252 170 212 252 146 188 228 23 30 36 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 101 72 28 202 145 58 +180 132 57 0 2 0 38 45 51 3 10 13 69 71 68 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 200 202 199 0 2 0 75 89 106 170 212 252 +170 212 252 170 212 252 170 212 252 109 141 168 8 14 16 0 2 0 21 13 4 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 7 0 0 0 2 0 101 72 28 218 158 64 250 179 73 250 179 73 +250 179 73 139 99 44 0 2 0 8 14 16 0 2 0 238 241 237 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 244 246 243 38 40 37 3 10 13 139 181 221 170 212 252 +170 212 252 161 203 243 66 80 97 0 2 0 31 23 12 191 142 60 248 183 74 180 132 57 +44 34 15 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 23 15 7 190 136 56 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 150 108 46 0 2 0 0 2 0 82 83 81 222 224 221 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 102 104 101 0 2 0 98 129 156 170 212 252 163 205 246 +98 129 156 23 30 36 0 2 0 82 62 28 234 172 70 248 183 74 248 183 74 248 183 74 +248 183 74 158 114 46 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 64 46 18 109 79 35 150 108 46 224 163 69 250 179 73 +250 179 73 250 179 73 250 179 73 158 114 46 0 2 0 0 2 0 3 6 2 115 117 114 +234 236 233 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 176 178 175 0 2 0 57 72 88 146 188 228 80 98 121 8 14 16 +0 2 0 24 17 10 158 114 46 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 242 178 77 58 42 19 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 0 2 0 67 49 21 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 95 68 30 0 2 0 0 2 0 +0 2 0 52 54 51 108 110 107 162 164 161 219 221 218 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 +219 221 218 178 180 177 18 20 17 6 12 15 26 33 39 0 2 0 0 2 0 52 36 13 +164 119 51 242 178 77 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 242 178 77 +187 138 56 175 129 54 158 114 46 82 62 28 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 78 58 25 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 234 172 70 142 101 40 +44 34 15 10 12 8 0 2 0 0 2 0 0 2 0 18 20 17 60 62 59 71 73 70 +82 83 81 95 96 94 104 106 103 118 120 117 115 117 114 78 80 77 40 41 39 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 44 34 15 105 75 32 191 142 60 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 105 75 32 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 187 138 56 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 142 101 40 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 206 148 61 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 161 117 49 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 228 167 73 250 179 73 +238 175 73 190 136 56 158 114 46 234 172 70 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 147 105 44 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 67 49 21 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 +31 23 12 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 21 13 4 +0 2 0 0 2 0 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 +134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 155 111 43 248 183 74 248 183 74 +248 183 74 248 183 74 224 163 69 55 39 17 64 46 18 164 119 51 242 178 77 248 183 74 +75 55 22 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 228 167 73 88 66 26 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 168 123 54 248 183 74 +248 183 74 248 183 74 158 114 46 0 2 0 7 0 0 0 2 0 10 12 8 44 34 15 +15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 29 21 8 250 179 73 250 179 73 158 114 46 15 14 3 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 175 129 54 +248 183 74 248 183 74 114 83 33 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 29 21 8 147 105 44 58 42 19 0 2 0 7 0 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +105 75 32 218 158 64 23 15 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + diff --git a/libre/linux-libre-grsec/logo_linux_mono.pbm b/libre/linux-libre-grsec/logo_linux_mono.pbm new file mode 100644 index 000000000..3d3c35807 --- /dev/null +++ b/libre/linux-libre-grsec/logo_linux_mono.pbm @@ -0,0 +1,159 @@ +P2 +80 78 +255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 255 255 255 255 255 0 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 +255 0 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 +255 255 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 +255 255 0 0 0 0 0 0 0 0 +0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 +255 255 255 0 0 0 0 0 0 0 +0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 255 255 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 0 255 255 0 0 255 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 255 255 255 0 0 255 +255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 255 +255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 0 +255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 +0 255 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 +0 255 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 +0 0 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 255 255 255 +255 0 0 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 255 0 0 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 +255 0 0 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 0 0 255 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 255 255 255 +255 255 0 0 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 255 255 255 255 0 255 255 255 +255 255 255 0 0 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 0 255 255 255 +255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 0 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 0 +0 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 255 +0 0 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 diff --git a/libre/linux-libre-grsec/logo_linux_vga16.ppm b/libre/linux-libre-grsec/logo_linux_vga16.ppm new file mode 100644 index 000000000..f279f972c --- /dev/null +++ b/libre/linux-libre-grsec/logo_linux_vga16.ppm @@ -0,0 +1,18724 @@ +P3 +# CREATOR: GIMP PNM Filter Version 1.1 +80 78 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +170 +170 +170 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +170 +170 +170 +85 +85 +85 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +170 +170 +170 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +85 +85 +85 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +170 +170 +170 +170 +170 +170 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD index 5186dfc29..192de5963 100644 --- a/libre/linux-libre-lts/PKGBUILD +++ b/libre/linux-libre-lts/PKGBUILD @@ -28,7 +28,7 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/li 'config.i686' 'config.x86_64' # standard config files for mkinitcpio ramdisk 'linux.preset' - 'boot-logo.patch' + 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' '0001-Bluetooth-allocate-static-minor-for-vhci.patch' '0002-module-allow-multiple-calls-to-MODULE_DEVICE_TABLE-p.patch' @@ -40,7 +40,9 @@ sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b' '9e7dcc90121995024632476d50286b62dbb73da20a7970653a2d72a0a98406c0' '35f283689c4f8b346bc05ac57c3cce50a61a1d0c11a665fc1abf519bb3f1beea' 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' - '5ae80ee1cbc0c894d9f5dd99d201999ea3b384fab9d047051b28dca12e355c47' + '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' + '2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53' + 'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015' 'faced4eb4c47c4eb1a9ee8a5bf8a7c4b49d6b4d78efbe426e410730e6267d182' '6d72e14552df59e6310f16c176806c408355951724cd5b48a47bf01591b8be02' '52dec83a8805a8642d74d764494acda863e0aa23e3d249e80d4b457e20a3fd29' @@ -64,7 +66,8 @@ prepare() { fi # add freedo as boot logo - patch -p1 -i "${srcdir}/boot-logo.patch" + install -m644 -t drivers/video/logo \ + "${srcdir}/logo_linux_"{clut224.ppm,vga16.ppm,mono.pbm} # add latest fixes from stable queue, if needed # http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git diff --git a/libre/linux-libre-lts/boot-logo.patch b/libre/linux-libre-lts/boot-logo.patch deleted file mode 100644 index c392928a5..000000000 --- a/libre/linux-libre-lts/boot-logo.patch +++ /dev/null @@ -1,23163 +0,0 @@ -diff -Nur linux-2.6.39.1/drivers/video/logo/logo_linux_clut224.ppm linux-2.6.39-LIBRE/drivers/video/logo/logo_linux_clut224.ppm ---- linux-2.6.39.1/drivers/video/logo/logo_linux_clut224.ppm 2011-06-02 21:34:20.000000000 -0300 -+++ linux-2.6.39-LIBRE/drivers/video/logo/logo_linux_clut224.ppm 2011-06-22 13:42:06.000000000 -0300 -@@ -1,1604 +1,861 @@ - P3 --# Standard 224-color Linux logo --80 80 -+80 78 - 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 6 6 6 10 10 10 10 10 10 -- 10 10 10 6 6 6 6 6 6 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 10 10 10 14 14 14 -- 22 22 22 26 26 26 30 30 30 34 34 34 -- 30 30 30 30 30 30 26 26 26 18 18 18 -- 14 14 14 10 10 10 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 26 26 26 42 42 42 -- 54 54 54 66 66 66 78 78 78 78 78 78 -- 78 78 78 74 74 74 66 66 66 54 54 54 -- 42 42 42 26 26 26 18 18 18 10 10 10 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 22 22 22 42 42 42 66 66 66 86 86 86 -- 66 66 66 38 38 38 38 38 38 22 22 22 -- 26 26 26 34 34 34 54 54 54 66 66 66 -- 86 86 86 70 70 70 46 46 46 26 26 26 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 26 26 26 -- 50 50 50 82 82 82 58 58 58 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 54 54 54 86 86 86 66 66 66 -- 38 38 38 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 22 22 22 50 50 50 -- 78 78 78 34 34 34 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 6 6 6 70 70 70 -- 78 78 78 46 46 46 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 42 42 42 82 82 82 -- 26 26 26 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 14 14 14 -- 46 46 46 34 34 34 6 6 6 2 2 6 -- 42 42 42 78 78 78 42 42 42 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 30 30 30 66 66 66 58 58 58 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 26 26 26 -- 86 86 86 101 101 101 46 46 46 10 10 10 -- 2 2 6 58 58 58 70 70 70 34 34 34 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 42 42 42 86 86 86 10 10 10 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 30 30 30 -- 94 94 94 94 94 94 58 58 58 26 26 26 -- 2 2 6 6 6 6 78 78 78 54 54 54 -- 22 22 22 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 62 62 62 62 62 62 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 26 26 26 -- 54 54 54 38 38 38 18 18 18 10 10 10 -- 2 2 6 2 2 6 34 34 34 82 82 82 -- 38 38 38 14 14 14 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 30 30 30 78 78 78 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 10 10 10 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 78 78 78 -- 50 50 50 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 14 14 14 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 54 54 54 -- 66 66 66 26 26 26 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 82 82 82 2 2 6 2 2 6 -- 2 2 6 6 6 6 10 10 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 14 14 14 10 10 10 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 18 18 18 -- 82 82 82 34 34 34 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 2 2 6 -- 6 6 6 6 6 6 22 22 22 34 34 34 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 34 34 34 -- 10 10 10 50 50 50 22 22 22 2 2 6 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 86 86 86 42 42 42 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 2 2 6 -- 38 38 38 116 116 116 94 94 94 22 22 22 -- 22 22 22 2 2 6 2 2 6 2 2 6 -- 14 14 14 86 86 86 138 138 138 162 162 162 --154 154 154 38 38 38 26 26 26 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 86 86 86 46 46 46 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 14 14 14 --134 134 134 198 198 198 195 195 195 116 116 116 -- 10 10 10 2 2 6 2 2 6 6 6 6 --101 98 89 187 187 187 210 210 210 218 218 218 --214 214 214 134 134 134 14 14 14 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 86 86 86 50 50 50 18 18 18 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 54 54 54 --218 218 218 195 195 195 226 226 226 246 246 246 -- 58 58 58 2 2 6 2 2 6 30 30 30 --210 210 210 253 253 253 174 174 174 123 123 123 --221 221 221 234 234 234 74 74 74 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 82 82 82 2 2 6 106 106 106 --170 170 170 26 26 26 86 86 86 226 226 226 --123 123 123 10 10 10 14 14 14 46 46 46 --231 231 231 190 190 190 6 6 6 70 70 70 -- 90 90 90 238 238 238 158 158 158 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 86 86 86 6 6 6 116 116 116 --106 106 106 6 6 6 70 70 70 149 149 149 --128 128 128 18 18 18 38 38 38 54 54 54 --221 221 221 106 106 106 2 2 6 14 14 14 -- 46 46 46 190 190 190 198 198 198 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 62 62 62 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 94 94 94 14 14 14 101 101 101 --128 128 128 2 2 6 18 18 18 116 116 116 --118 98 46 121 92 8 121 92 8 98 78 10 --162 162 162 106 106 106 2 2 6 2 2 6 -- 2 2 6 195 195 195 195 195 195 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 62 62 62 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 1 -- 0 0 1 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 90 90 90 14 14 14 58 58 58 --210 210 210 26 26 26 54 38 6 154 114 10 --226 170 11 236 186 11 225 175 15 184 144 12 --215 174 15 175 146 61 37 26 9 2 2 6 -- 70 70 70 246 246 246 138 138 138 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 66 66 66 26 26 26 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 14 14 14 10 10 10 --195 195 195 188 164 115 192 133 9 225 175 15 --239 182 13 234 190 10 232 195 16 232 200 30 --245 207 45 241 208 19 232 195 16 184 144 12 --218 194 134 211 206 186 42 42 42 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 50 50 50 74 74 74 30 30 30 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 86 86 86 14 14 14 2 2 6 --121 87 25 192 133 9 219 162 10 239 182 13 --236 186 11 232 195 16 241 208 19 244 214 54 --246 218 60 246 218 38 246 215 20 241 208 19 --241 208 19 226 184 13 121 87 25 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 50 50 50 82 82 82 34 34 34 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 82 82 82 30 30 30 61 42 6 --180 123 7 206 145 10 230 174 11 239 182 13 --234 190 10 238 202 15 241 208 19 246 218 74 --246 218 38 246 215 20 246 215 20 246 215 20 --226 184 13 215 174 15 184 144 12 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 26 26 26 94 94 94 42 42 42 14 14 14 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 50 50 50 104 69 6 --192 133 9 216 158 10 236 178 12 236 186 11 --232 195 16 241 208 19 244 214 54 245 215 43 --246 215 20 246 215 20 241 208 19 198 155 10 --200 144 11 216 158 10 156 118 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 90 90 90 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 46 46 46 22 22 22 --137 92 6 210 162 10 239 182 13 238 190 10 --238 202 15 241 208 19 246 215 20 246 215 20 --241 208 19 203 166 17 185 133 11 210 150 10 --216 158 10 210 150 10 102 78 10 2 2 6 -- 6 6 6 54 54 54 14 14 14 2 2 6 -- 2 2 6 62 62 62 74 74 74 30 30 30 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 78 78 78 50 50 50 6 6 6 -- 94 70 30 139 102 15 190 146 13 226 184 13 --232 200 30 232 195 16 215 174 15 190 146 13 --168 122 10 192 133 9 210 150 10 213 154 11 --202 150 34 182 157 106 101 98 89 2 2 6 -- 2 2 6 78 78 78 116 116 116 58 58 58 -- 2 2 6 22 22 22 90 90 90 46 46 46 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 50 50 50 6 6 6 --128 128 128 174 154 114 156 107 11 168 122 10 --198 155 10 184 144 12 197 138 11 200 144 11 --206 145 10 206 145 10 197 138 11 188 164 115 --195 195 195 198 198 198 174 174 174 14 14 14 -- 2 2 6 22 22 22 116 116 116 116 116 116 -- 22 22 22 2 2 6 74 74 74 70 70 70 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 101 101 101 26 26 26 10 10 10 --138 138 138 190 190 190 174 154 114 156 107 11 --197 138 11 200 144 11 197 138 11 192 133 9 --180 123 7 190 142 34 190 178 144 187 187 187 --202 202 202 221 221 221 214 214 214 66 66 66 -- 2 2 6 2 2 6 50 50 50 62 62 62 -- 6 6 6 2 2 6 10 10 10 90 90 90 -- 50 50 50 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 34 34 34 -- 74 74 74 74 74 74 2 2 6 6 6 6 --144 144 144 198 198 198 190 190 190 178 166 146 --154 121 60 156 107 11 156 107 11 168 124 44 --174 154 114 187 187 187 190 190 190 210 210 210 --246 246 246 253 253 253 253 253 253 182 182 182 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 62 62 62 -- 74 74 74 34 34 34 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 10 10 10 22 22 22 54 54 54 -- 94 94 94 18 18 18 2 2 6 46 46 46 --234 234 234 221 221 221 190 190 190 190 190 190 --190 190 190 187 187 187 187 187 187 190 190 190 --190 190 190 195 195 195 214 214 214 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 -- 82 82 82 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 14 14 14 -- 86 86 86 54 54 54 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 46 46 46 90 90 90 -- 46 46 46 18 18 18 6 6 6 182 182 182 --253 253 253 246 246 246 206 206 206 190 190 190 --190 190 190 190 190 190 190 190 190 190 190 190 --206 206 206 231 231 231 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --202 202 202 14 14 14 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 42 42 42 86 86 86 42 42 42 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 14 14 14 38 38 38 74 74 74 66 66 66 -- 2 2 6 6 6 6 90 90 90 250 250 250 --253 253 253 253 253 253 238 238 238 198 198 198 --190 190 190 190 190 190 195 195 195 221 221 221 --246 246 246 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 82 82 82 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 78 78 78 70 70 70 34 34 34 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 34 34 34 66 66 66 78 78 78 6 6 6 -- 2 2 6 18 18 18 218 218 218 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --226 226 226 231 231 231 246 246 246 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 178 178 178 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 18 18 18 90 90 90 62 62 62 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 26 26 26 -- 58 58 58 90 90 90 18 18 18 2 2 6 -- 2 2 6 110 110 110 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 231 231 231 18 18 18 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 94 94 94 -- 54 54 54 26 26 26 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 22 22 22 50 50 50 -- 90 90 90 26 26 26 2 2 6 2 2 6 -- 14 14 14 195 195 195 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 242 242 242 54 54 54 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 -- 86 86 86 50 50 50 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 38 38 38 82 82 82 -- 34 34 34 2 2 6 2 2 6 2 2 6 -- 42 42 42 195 195 195 246 246 246 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 242 242 242 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 246 246 246 238 238 238 --226 226 226 231 231 231 101 101 101 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 38 38 38 82 82 82 42 42 42 14 14 14 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 26 26 26 62 62 62 66 66 66 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 70 70 70 170 170 170 206 206 206 234 234 234 --246 246 246 250 250 250 250 250 250 238 238 238 --226 226 226 231 231 231 238 238 238 250 250 250 --250 250 250 250 250 250 246 246 246 231 231 231 --214 214 214 206 206 206 202 202 202 202 202 202 --198 198 198 202 202 202 182 182 182 18 18 18 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 62 62 62 66 66 66 30 30 30 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 42 42 42 82 82 82 18 18 18 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 94 94 94 182 182 182 218 218 218 242 242 242 --250 250 250 253 253 253 253 253 253 250 250 250 --234 234 234 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --238 238 238 226 226 226 210 210 210 202 202 202 --195 195 195 195 195 195 210 210 210 158 158 158 -- 6 6 6 14 14 14 50 50 50 14 14 14 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 86 86 86 46 46 46 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 54 54 54 70 70 70 2 2 6 -- 2 2 6 10 10 10 2 2 6 22 22 22 --166 166 166 231 231 231 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --231 231 231 206 206 206 198 198 198 226 226 226 -- 94 94 94 2 2 6 6 6 6 38 38 38 -- 30 30 30 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 62 62 62 66 66 66 -- 26 26 26 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 74 74 74 50 50 50 2 2 6 -- 26 26 26 26 26 26 2 2 6 106 106 106 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 246 246 246 218 218 218 202 202 202 --210 210 210 14 14 14 2 2 6 2 2 6 -- 30 30 30 22 22 22 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 86 86 86 -- 42 42 42 14 14 14 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 90 90 90 22 22 22 2 2 6 -- 42 42 42 2 2 6 18 18 18 218 218 218 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 250 250 250 221 221 221 --218 218 218 101 101 101 2 2 6 14 14 14 -- 18 18 18 38 38 38 10 10 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 78 78 78 -- 58 58 58 22 22 22 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 54 54 54 82 82 82 2 2 6 26 26 26 -- 22 22 22 2 2 6 123 123 123 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --238 238 238 198 198 198 6 6 6 38 38 38 -- 58 58 58 26 26 26 38 38 38 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 78 78 78 30 30 30 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 30 30 30 -- 74 74 74 58 58 58 2 2 6 42 42 42 -- 2 2 6 22 22 22 231 231 231 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 246 246 246 46 46 46 38 38 38 -- 42 42 42 14 14 14 38 38 38 14 14 14 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 86 86 86 46 46 46 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 42 42 42 -- 90 90 90 18 18 18 18 18 18 26 26 26 -- 2 2 6 116 116 116 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 250 250 250 238 238 238 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 94 94 94 6 6 6 -- 2 2 6 2 2 6 10 10 10 34 34 34 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 10 10 10 26 26 26 66 66 66 -- 82 82 82 2 2 6 38 38 38 6 6 6 -- 14 14 14 210 210 210 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 246 246 246 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 144 144 144 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 42 42 42 74 74 74 30 30 30 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 42 42 42 90 90 90 -- 26 26 26 6 6 6 42 42 42 2 2 6 -- 74 74 74 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 242 242 242 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 182 182 182 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 10 10 10 86 86 86 38 38 38 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 26 26 26 66 66 66 82 82 82 -- 2 2 6 22 22 22 18 18 18 2 2 6 --149 149 149 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 206 206 206 2 2 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 86 86 86 46 46 46 14 14 14 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 18 18 18 46 46 46 86 86 86 18 18 18 -- 2 2 6 34 34 34 10 10 10 6 6 6 --210 210 210 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 221 221 221 6 6 6 -- 2 2 6 2 2 6 6 6 6 30 30 30 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 82 82 82 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 26 26 26 66 66 66 62 62 62 2 2 6 -- 2 2 6 38 38 38 10 10 10 26 26 26 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 238 238 238 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 6 6 6 -- 2 2 6 2 2 6 10 10 10 30 30 30 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 58 58 58 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 78 78 78 6 6 6 2 2 6 -- 2 2 6 46 46 46 14 14 14 42 42 42 --246 246 246 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 10 10 10 -- 2 2 6 2 2 6 22 22 22 14 14 14 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 62 62 62 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 74 74 74 2 2 6 2 2 6 -- 14 14 14 70 70 70 34 34 34 62 62 62 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 14 14 14 -- 2 2 6 2 2 6 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 62 62 62 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 54 54 54 62 62 62 2 2 6 2 2 6 -- 2 2 6 30 30 30 46 46 46 70 70 70 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 226 226 226 10 10 10 -- 2 2 6 6 6 6 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 58 58 58 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 58 58 58 62 62 62 2 2 6 2 2 6 -- 2 2 6 2 2 6 30 30 30 78 78 78 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 206 206 206 2 2 6 -- 22 22 22 34 34 34 18 14 6 22 22 22 -- 26 26 26 18 18 18 6 6 6 2 2 6 -- 2 2 6 82 82 82 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 26 26 26 -- 62 62 62 106 106 106 74 54 14 185 133 11 --210 162 10 121 92 8 6 6 6 62 62 62 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 158 158 158 18 18 18 -- 14 14 14 2 2 6 2 2 6 2 2 6 -- 6 6 6 18 18 18 66 66 66 38 38 38 -- 6 6 6 94 94 94 50 50 50 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 10 10 10 10 10 10 18 18 18 38 38 38 -- 78 78 78 142 134 106 216 158 10 242 186 14 --246 190 14 246 190 14 156 118 10 10 10 10 -- 90 90 90 238 238 238 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 230 190 --238 204 91 238 204 91 181 142 44 37 26 9 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 38 38 38 46 46 46 -- 26 26 26 106 106 106 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 22 22 22 -- 30 30 30 38 38 38 50 50 50 70 70 70 --106 106 106 190 142 34 226 170 11 242 186 14 --246 190 14 246 190 14 246 190 14 154 114 10 -- 6 6 6 74 74 74 226 226 226 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 228 184 62 --241 196 14 241 208 19 232 195 16 38 30 10 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 30 30 30 26 26 26 --203 166 17 154 142 90 66 66 66 26 26 26 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 38 38 38 58 58 58 -- 78 78 78 86 86 86 101 101 101 123 123 123 --175 146 61 210 150 10 234 174 13 246 186 14 --246 190 14 246 190 14 246 190 14 238 190 10 --102 78 10 2 2 6 46 46 46 198 198 198 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 224 178 62 --242 186 14 241 196 14 210 166 10 22 18 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 6 6 6 121 92 8 --238 202 15 232 195 16 82 82 82 34 34 34 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 38 38 38 70 70 70 154 122 46 --190 142 34 200 144 11 197 138 11 197 138 11 --213 154 11 226 170 11 242 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --225 175 15 46 32 6 2 2 6 22 22 22 --158 158 158 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 242 242 242 224 178 62 --239 182 13 236 186 11 213 154 11 46 32 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 61 42 6 225 175 15 --238 190 10 236 186 11 112 100 78 42 42 42 -- 14 14 14 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 54 54 54 154 122 46 213 154 11 --226 170 11 230 174 11 226 170 11 226 170 11 --236 178 12 242 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --241 196 14 184 144 12 10 10 10 2 2 6 -- 6 6 6 116 116 116 242 242 242 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 231 231 231 198 198 198 214 170 54 --236 178 12 236 178 12 210 150 10 137 92 6 -- 18 14 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 70 47 6 200 144 11 236 178 12 --239 182 13 239 182 13 124 112 88 58 58 58 -- 22 22 22 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 70 70 70 180 133 36 226 170 11 --239 182 13 242 186 14 242 186 14 246 186 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 232 195 16 98 70 6 2 2 6 -- 2 2 6 2 2 6 66 66 66 221 221 221 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 206 206 206 198 198 198 214 166 58 --230 174 11 230 174 11 216 158 10 192 133 9 --163 110 8 116 81 8 102 78 10 116 81 8 --167 114 7 197 138 11 226 170 11 239 182 13 --242 186 14 242 186 14 162 146 94 78 78 78 -- 34 34 34 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 30 30 30 78 78 78 190 142 34 226 170 11 --239 182 13 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 241 196 14 203 166 17 22 18 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 --218 218 218 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 206 206 206 198 198 198 202 162 69 --226 170 11 236 178 12 224 166 10 210 150 10 --200 144 11 197 138 11 192 133 9 197 138 11 --210 150 10 226 170 11 242 186 14 246 190 14 --246 190 14 246 186 14 225 175 15 124 112 88 -- 62 62 62 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 174 135 50 224 166 10 --239 182 13 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 241 196 14 139 102 15 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 78 78 78 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 214 214 214 198 198 198 190 150 46 --219 162 10 236 178 12 234 174 13 224 166 10 --216 158 10 213 154 11 213 154 11 216 158 10 --226 170 11 239 182 13 246 190 14 246 190 14 --246 190 14 246 190 14 242 186 14 206 162 42 --101 101 101 58 58 58 30 30 30 14 14 14 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 74 74 74 174 135 50 216 158 10 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 241 196 14 226 184 13 -- 61 42 6 2 2 6 2 2 6 2 2 6 -- 22 22 22 238 238 238 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 226 226 226 187 187 187 180 133 36 --216 158 10 236 178 12 239 182 13 236 178 12 --230 174 11 226 170 11 226 170 11 230 174 11 --236 178 12 242 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 186 14 239 182 13 --206 162 42 106 106 106 66 66 66 34 34 34 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 26 26 26 70 70 70 163 133 67 213 154 11 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 241 196 14 --190 146 13 18 14 6 2 2 6 2 2 6 -- 46 46 46 246 246 246 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 221 221 221 86 86 86 156 107 11 --216 158 10 236 178 12 242 186 14 246 186 14 --242 186 14 239 182 13 239 182 13 242 186 14 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --242 186 14 225 175 15 142 122 72 66 66 66 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 26 26 26 70 70 70 163 133 67 210 150 10 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --232 195 16 121 92 8 34 34 34 106 106 106 --221 221 221 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --242 242 242 82 82 82 18 14 6 163 110 8 --216 158 10 236 178 12 242 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 242 186 14 163 133 67 -- 46 46 46 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 163 133 67 210 150 10 --236 178 12 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --241 196 14 215 174 15 190 178 144 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 218 218 218 -- 58 58 58 2 2 6 22 18 6 167 114 7 --216 158 10 236 178 12 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 186 14 242 186 14 190 150 46 -- 54 54 54 22 22 22 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 38 38 38 86 86 86 180 133 36 213 154 11 --236 178 12 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 232 195 16 190 146 13 214 214 214 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 170 170 170 26 26 26 -- 2 2 6 2 2 6 37 26 9 163 110 8 --219 162 10 239 182 13 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 236 178 12 224 166 10 142 122 72 -- 46 46 46 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 109 106 95 192 133 9 224 166 10 --242 186 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --242 186 14 226 184 13 210 162 10 142 110 46 --226 226 226 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --198 198 198 66 66 66 2 2 6 2 2 6 -- 2 2 6 2 2 6 50 34 6 156 107 11 --219 162 10 239 182 13 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 242 186 14 --234 174 13 213 154 11 154 122 46 66 66 66 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 58 58 58 154 121 60 206 145 10 234 174 13 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 236 178 12 210 162 10 163 110 8 -- 61 42 6 138 138 138 218 218 218 250 250 250 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 210 210 210 144 144 144 66 66 66 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 61 42 6 163 110 8 --216 158 10 236 178 12 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 239 182 13 230 174 11 216 158 10 --190 142 34 124 112 88 70 70 70 38 38 38 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 62 62 62 168 124 44 206 145 10 224 166 10 --236 178 12 239 182 13 242 186 14 242 186 14 --246 186 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 236 178 12 216 158 10 175 118 6 -- 80 54 7 2 2 6 6 6 6 30 30 30 -- 54 54 54 62 62 62 50 50 50 38 38 38 -- 14 14 14 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 80 54 7 167 114 7 --213 154 11 236 178 12 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 242 186 14 239 182 13 239 182 13 --230 174 11 210 150 10 174 135 50 124 112 88 -- 82 82 82 54 54 54 34 34 34 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 158 118 36 192 133 9 200 144 11 --216 158 10 219 162 10 224 166 10 226 170 11 --230 174 11 236 178 12 239 182 13 239 182 13 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 230 174 11 210 150 10 163 110 8 --104 69 6 10 10 10 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 91 60 6 167 114 7 --206 145 10 230 174 11 242 186 14 246 190 14 --246 190 14 246 190 14 246 186 14 242 186 14 --239 182 13 230 174 11 224 166 10 213 154 11 --180 133 36 124 112 88 86 86 86 58 58 58 -- 38 38 38 22 22 22 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 34 34 34 70 70 70 138 110 50 158 118 36 --167 114 7 180 123 7 192 133 9 197 138 11 --200 144 11 206 145 10 213 154 11 219 162 10 --224 166 10 230 174 11 239 182 13 242 186 14 --246 186 14 246 186 14 246 186 14 246 186 14 --239 182 13 216 158 10 185 133 11 152 99 6 --104 69 6 18 14 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 80 54 7 152 99 6 --192 133 9 219 162 10 236 178 12 239 182 13 --246 186 14 242 186 14 239 182 13 236 178 12 --224 166 10 206 145 10 192 133 9 154 121 60 -- 94 94 94 62 62 62 42 42 42 22 22 22 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 18 18 18 34 34 34 58 58 58 78 78 78 --101 98 89 124 112 88 142 110 46 156 107 11 --163 110 8 167 114 7 175 118 6 180 123 7 --185 133 11 197 138 11 210 150 10 219 162 10 --226 170 11 236 178 12 236 178 12 234 174 13 --219 162 10 197 138 11 163 110 8 130 83 6 -- 91 60 6 10 10 10 2 2 6 2 2 6 -- 18 18 18 38 38 38 38 38 38 38 38 38 -- 38 38 38 38 38 38 38 38 38 38 38 38 -- 38 38 38 38 38 38 26 26 26 2 2 6 -- 2 2 6 6 6 6 70 47 6 137 92 6 --175 118 6 200 144 11 219 162 10 230 174 11 --234 174 13 230 174 11 219 162 10 210 150 10 --192 133 9 163 110 8 124 112 88 82 82 82 -- 50 50 50 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 22 22 22 34 34 34 -- 42 42 42 58 58 58 74 74 74 86 86 86 --101 98 89 122 102 70 130 98 46 121 87 25 --137 92 6 152 99 6 163 110 8 180 123 7 --185 133 11 197 138 11 206 145 10 200 144 11 --180 123 7 156 107 11 130 83 6 104 69 6 -- 50 34 6 54 54 54 110 110 110 101 98 89 -- 86 86 86 82 82 82 78 78 78 78 78 78 -- 78 78 78 78 78 78 78 78 78 78 78 78 -- 78 78 78 82 82 82 86 86 86 94 94 94 --106 106 106 101 101 101 86 66 34 124 80 6 --156 107 11 180 123 7 192 133 9 200 144 11 --206 145 10 200 144 11 192 133 9 175 118 6 --139 102 15 109 106 95 70 70 70 42 42 42 -- 22 22 22 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 10 10 10 -- 14 14 14 22 22 22 30 30 30 38 38 38 -- 50 50 50 62 62 62 74 74 74 90 90 90 --101 98 89 112 100 78 121 87 25 124 80 6 --137 92 6 152 99 6 152 99 6 152 99 6 --138 86 6 124 80 6 98 70 6 86 66 30 --101 98 89 82 82 82 58 58 58 46 46 46 -- 38 38 38 34 34 34 34 34 34 34 34 34 -- 34 34 34 34 34 34 34 34 34 34 34 34 -- 34 34 34 34 34 34 38 38 38 42 42 42 -- 54 54 54 82 82 82 94 86 76 91 60 6 --134 86 6 156 107 11 167 114 7 175 118 6 --175 118 6 167 114 7 152 99 6 121 87 25 --101 98 89 62 62 62 34 34 34 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 6 6 6 10 10 10 -- 18 18 18 22 22 22 30 30 30 42 42 42 -- 50 50 50 66 66 66 86 86 86 101 98 89 --106 86 58 98 70 6 104 69 6 104 69 6 --104 69 6 91 60 6 82 62 34 90 90 90 -- 62 62 62 38 38 38 22 22 22 14 14 14 -- 10 10 10 10 10 10 10 10 10 10 10 10 -- 10 10 10 10 10 10 6 6 6 10 10 10 -- 10 10 10 10 10 10 10 10 10 14 14 14 -- 22 22 22 42 42 42 70 70 70 89 81 66 -- 80 54 7 104 69 6 124 80 6 137 92 6 --134 86 6 116 81 8 100 82 52 86 86 86 -- 58 58 58 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 10 10 10 14 14 14 -- 18 18 18 26 26 26 38 38 38 54 54 54 -- 70 70 70 86 86 86 94 86 76 89 81 66 -- 89 81 66 86 86 86 74 74 74 50 50 50 -- 30 30 30 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 34 34 34 58 58 58 -- 82 82 82 89 81 66 89 81 66 89 81 66 -- 94 86 66 94 86 76 74 74 74 50 50 50 -- 26 26 26 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 6 6 6 14 14 14 18 18 18 -- 30 30 30 38 38 38 46 46 46 54 54 54 -- 50 50 50 42 42 42 30 30 30 18 18 18 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 26 26 26 -- 38 38 38 50 50 50 58 58 58 58 58 58 -- 54 54 54 42 42 42 30 30 30 18 18 18 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 6 6 6 10 10 10 14 14 14 18 18 18 -- 18 18 18 14 14 14 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 14 14 14 18 18 18 22 22 22 22 22 22 -- 18 18 18 14 14 14 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 23 30 36 44 54 65 57 72 88 44 54 65 6 12 15 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 31 41 52 -+103 134 161 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 -+82 108 129 8 14 16 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 17 24 30 126 162 196 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 161 203 243 92 119 140 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 154 195 235 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 138 174 208 21 27 33 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 70 96 117 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 49 59 70 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 3 6 52 62 74 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 -+82 108 129 149 191 231 170 212 252 170 212 252 170 212 252 129 165 199 82 108 129 149 191 231 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 37 48 59 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 21 13 4 31 23 12 0 2 0 0 2 0 105 75 32 155 111 43 23 15 7 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 6 9 3 10 13 146 188 228 170 212 252 170 212 252 170 212 252 157 198 239 0 6 9 -+0 2 0 52 62 74 170 212 252 170 212 252 154 195 235 0 6 9 0 2 0 55 66 77 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 151 193 233 17 24 30 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+10 12 8 23 15 7 139 99 44 206 148 61 67 49 21 0 2 0 125 92 35 206 148 61 -+15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 96 127 154 170 212 252 170 212 252 170 212 252 170 212 252 92 119 140 21 22 20 -+10 12 8 53 68 84 170 212 252 170 212 252 92 119 140 10 12 8 7 10 5 53 68 84 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 -+0 6 9 0 3 6 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 22 20 -+62 64 61 38 40 37 0 2 0 34 26 8 212 153 66 64 46 18 0 2 0 170 124 49 -+180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 65 87 102 115 117 114 -+43 44 42 88 115 136 170 212 252 170 212 252 68 83 99 108 110 107 60 62 59 88 115 136 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+80 98 121 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 10 12 8 56 58 55 95 96 94 178 180 177 215 217 214 198 200 197 -+158 160 156 138 140 137 82 83 81 0 2 0 64 46 18 228 167 73 23 15 7 41 31 10 -+250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 -+0 2 0 126 162 196 170 212 252 170 212 252 57 72 88 0 2 0 0 2 0 126 162 196 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+157 198 239 8 14 16 0 6 9 0 2 0 45 47 44 195 197 194 192 194 191 38 40 37 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 192 194 191 234 236 233 176 178 175 118 120 117 143 145 142 176 178 175 -+215 217 214 234 236 233 234 236 233 104 106 103 0 2 0 142 101 40 134 100 43 0 2 0 -+164 119 51 170 124 49 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 115 152 185 8 14 16 -+49 59 70 166 207 248 170 212 252 170 212 252 119 150 178 8 14 16 55 66 77 166 207 248 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 92 119 140 0 2 0 0 2 0 200 202 199 254 255 252 254 255 252 244 246 243 -+40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 38 40 37 234 236 233 234 236 233 234 236 233 135 137 134 215 217 214 171 173 170 -+141 142 139 138 140 137 138 140 137 135 137 134 31 32 30 3 6 2 212 153 66 15 9 7 -+78 58 25 248 178 79 41 31 10 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 3 6 21 27 33 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 154 195 235 0 6 9 82 83 81 254 255 252 254 255 252 254 255 252 254 255 252 -+188 190 187 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 62 64 61 234 236 233 234 236 233 234 236 233 198 200 197 131 133 130 198 200 197 -+232 234 231 234 236 233 234 236 233 234 236 233 152 154 151 0 2 0 147 105 44 67 49 21 -+23 15 7 250 179 73 158 114 46 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 61 76 92 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 154 195 235 103 134 161 80 98 121 -+52 62 74 18 22 24 0 2 0 3 10 13 38 45 51 80 98 121 151 193 233 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 109 141 168 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 -+226 228 225 65 66 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 43 44 42 234 236 233 234 236 233 234 236 233 234 236 233 131 133 130 192 194 191 -+152 154 151 141 142 139 141 142 139 141 142 139 158 160 156 3 6 2 82 62 28 129 95 39 -+0 2 0 206 148 61 248 178 79 21 13 4 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 96 115 138 -+170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 18 22 24 0 2 0 0 2 0 -+34 26 8 75 55 22 114 83 33 95 68 30 55 39 17 7 0 0 0 6 9 84 103 125 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 84 103 125 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 171 173 170 -+0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 18 20 17 234 236 233 234 236 233 234 236 233 234 236 233 138 140 137 178 180 177 -+226 228 225 234 236 233 234 236 233 234 236 233 231 233 230 45 47 44 23 15 7 190 136 56 -+0 2 0 147 105 44 250 179 73 64 46 18 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 126 162 196 0 2 0 26 20 13 190 136 56 245 175 76 -+250 179 73 161 117 49 164 119 51 245 175 76 250 179 73 206 148 61 75 55 22 0 2 0 -+126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 68 83 99 0 2 0 252 254 250 254 255 252 254 255 252 254 255 252 71 73 70 -+8 14 16 88 115 136 17 24 30 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 232 234 231 234 236 233 234 236 233 234 236 233 215 217 214 148 150 147 -+183 185 181 141 142 139 135 137 134 135 137 134 141 142 139 87 89 86 0 2 0 202 145 58 -+3 6 2 88 66 26 250 179 73 109 79 35 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 157 198 239 -+170 212 252 170 212 252 166 207 248 26 33 39 26 20 13 224 163 69 250 179 73 250 179 73 -+250 179 73 197 142 62 202 145 58 250 179 73 250 179 73 250 179 73 234 172 70 21 13 4 -+38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 52 62 74 21 22 20 254 255 252 254 255 252 254 255 252 254 255 252 21 22 20 -+49 59 70 170 212 252 166 207 248 91 123 149 8 14 16 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 215 217 214 234 236 233 234 236 233 234 236 233 234 236 233 123 125 122 -+188 190 187 229 231 228 234 236 233 234 236 233 222 224 221 118 120 117 0 2 0 168 123 54 -+34 26 8 67 49 21 250 179 73 134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 34 41 47 170 212 252 -+170 212 252 170 212 252 85 112 133 0 2 0 164 119 51 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 129 95 39 -+0 2 0 138 174 208 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 34 44 55 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 24 22 25 -+52 62 74 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 178 180 177 234 236 233 234 236 233 234 236 233 234 236 233 141 142 139 -+198 200 197 148 150 147 135 137 134 135 137 134 148 150 147 123 125 122 0 2 0 190 136 56 -+21 13 4 78 58 25 250 179 73 129 95 39 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 82 108 129 170 212 252 -+170 212 252 170 212 252 23 30 36 58 42 19 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 147 105 44 -+0 2 0 139 181 221 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 34 41 47 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 -+25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 6 9 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 91 93 90 234 236 233 234 236 233 234 236 233 234 236 233 126 127 125 -+169 171 168 222 224 221 234 236 233 229 231 228 178 180 177 71 73 70 0 2 0 212 153 66 -+0 2 0 95 68 30 250 179 73 119 87 37 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 138 174 208 170 212 252 -+170 212 252 154 195 235 0 2 0 125 92 35 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 119 87 37 -+0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 57 72 88 7 10 5 252 254 250 254 255 252 254 255 252 254 255 252 95 96 94 -+0 6 9 166 207 248 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 8 14 16 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 7 10 5 222 224 221 234 236 233 234 236 233 234 236 233 141 142 139 -+183 185 181 138 140 137 131 133 130 141 142 139 192 194 191 102 104 101 0 2 0 224 163 69 -+0 2 0 105 75 32 250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 27 33 170 212 252 170 212 252 -+170 212 252 115 152 185 0 2 0 180 132 57 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 10 12 8 -+38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 82 108 129 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 158 160 156 -+0 2 0 92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 141 142 139 234 236 233 234 236 233 234 236 233 131 133 130 -+185 187 183 231 233 230 222 224 221 158 160 156 138 140 137 48 50 48 3 6 2 250 179 73 -+134 100 43 206 148 61 218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 75 94 116 170 212 252 170 212 252 -+170 212 252 92 119 140 0 2 0 224 163 69 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 87 61 23 7 0 0 -+134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 109 141 168 0 2 0 178 180 177 254 255 252 254 255 252 254 255 252 252 254 250 -+39 43 45 10 16 18 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+88 115 136 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 45 47 44 234 236 233 234 236 233 234 236 233 131 133 130 -+148 150 147 138 140 137 148 150 147 210 212 209 152 154 151 26 27 25 29 21 8 250 179 73 -+250 179 73 234 172 70 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 170 212 252 -+170 212 252 103 134 161 0 2 0 202 145 58 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 238 175 73 75 55 22 0 2 0 75 102 123 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 140 177 211 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 -+183 185 181 0 2 0 75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 57 72 88 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 162 164 161 234 236 233 234 236 233 135 137 134 -+226 228 225 198 200 197 104 106 103 15 17 14 0 2 0 15 9 7 147 105 44 250 179 73 -+248 178 79 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 21 27 33 170 212 252 170 212 252 170 212 252 -+170 212 252 122 159 192 0 2 0 175 129 54 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 202 145 58 55 39 17 0 2 0 82 108 129 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 12 17 20 60 62 59 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 69 71 68 0 6 9 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 159 201 241 26 33 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 162 164 161 215 217 214 95 96 94 -+56 58 55 0 2 0 0 2 0 0 2 0 61 44 16 238 175 73 250 179 73 250 179 73 -+218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 88 115 136 170 212 252 170 212 252 170 212 252 -+170 212 252 143 185 225 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 212 153 66 95 68 30 0 2 0 8 14 16 103 134 161 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 68 83 99 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 -+254 255 252 210 212 209 0 6 9 53 68 84 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 126 162 196 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 23 15 7 250 179 73 250 179 73 250 179 73 -+250 179 73 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 166 207 248 0 2 0 52 36 13 158 114 46 180 132 57 161 117 49 119 87 37 -+41 31 10 0 2 0 0 2 0 72 87 103 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 115 152 185 0 2 0 152 154 151 254 255 252 238 241 237 85 87 84 -+229 231 228 254 255 252 99 101 98 0 2 0 126 162 196 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 -+250 179 73 105 75 32 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 32 39 45 0 2 0 57 72 88 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 85 112 133 12 17 20 0 2 0 0 2 0 0 2 0 0 2 0 -+34 41 47 92 110 133 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 166 207 248 6 12 15 71 73 70 254 255 252 229 231 228 0 2 0 -+141 142 139 254 255 252 231 233 230 10 12 8 34 44 55 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 154 195 235 6 12 15 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 125 92 35 250 179 73 250 179 73 -+250 179 73 180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 68 83 99 -+129 165 199 85 112 133 0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 126 162 196 119 156 189 134 170 204 149 191 231 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 57 72 88 3 6 2 242 244 240 254 255 252 35 37 34 -+78 80 77 254 255 252 254 255 252 128 130 127 0 2 0 105 137 164 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 91 123 149 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 55 39 17 250 179 73 250 179 73 -+250 179 73 245 175 76 7 10 5 0 2 0 44 54 65 103 134 161 161 203 243 170 212 252 -+170 212 252 21 27 33 25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 61 76 92 0 2 0 242 244 240 254 255 252 102 104 101 -+10 12 8 231 233 230 254 255 252 244 246 243 26 27 25 21 27 33 159 201 241 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 32 39 45 0 6 9 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 218 158 64 250 179 73 -+250 179 73 250 179 73 75 55 22 0 2 0 161 203 243 170 212 252 170 212 252 170 212 252 -+115 147 174 0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 159 201 241 146 188 228 -+140 177 211 134 170 204 146 188 228 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 17 24 30 62 64 61 254 255 252 254 255 252 215 217 214 -+0 2 0 102 104 101 254 255 252 254 255 252 166 168 165 0 2 0 72 87 103 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 75 32 250 179 73 -+250 179 73 250 179 73 150 108 46 0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 -+49 59 70 3 10 13 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 166 207 248 109 141 168 65 87 102 28 35 41 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 28 35 41 70 96 117 138 174 208 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 0 2 0 102 104 101 254 255 252 254 255 252 254 255 252 -+102 104 101 0 2 0 192 194 191 254 255 252 254 255 252 78 80 77 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 34 44 55 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 61 76 92 154 195 235 0 6 9 29 21 8 250 179 73 -+250 179 73 250 179 73 224 163 69 0 2 0 68 83 99 170 212 252 170 212 252 143 179 213 -+0 2 0 72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+161 203 243 96 115 138 17 24 30 0 2 0 0 2 0 45 47 44 102 104 101 123 125 122 -+138 140 137 143 145 142 115 117 114 82 83 81 43 44 42 0 2 0 0 2 0 32 39 45 -+126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 0 2 0 85 87 84 254 255 252 254 255 252 254 255 252 -+242 244 240 27 29 27 35 37 34 254 255 252 254 255 252 231 233 230 10 12 8 21 27 33 -+159 201 241 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 6 9 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 44 54 65 170 212 252 170 212 252 34 44 55 0 2 0 82 62 28 -+109 79 35 224 163 69 250 179 73 52 36 13 15 20 22 170 212 252 170 212 252 75 89 106 -+0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 -+25 32 38 0 2 0 40 41 39 155 157 153 238 241 237 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 115 117 114 18 20 17 -+0 2 0 68 83 99 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 52 62 74 7 10 5 234 236 233 254 255 252 254 255 252 -+254 255 252 195 197 194 102 104 101 254 255 252 254 255 252 254 255 252 162 164 161 0 2 0 -+72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 119 156 189 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 115 147 174 170 212 252 91 123 149 0 2 0 0 2 0 6 12 15 -+0 2 0 15 9 7 197 142 62 125 92 35 0 2 0 115 152 185 113 145 172 3 6 2 -+41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 113 145 172 0 6 9 -+10 12 8 155 157 153 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 232 234 231 -+87 89 86 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 115 152 185 0 2 0 138 140 137 254 255 252 254 255 252 -+254 255 252 254 255 252 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 65 66 64 -+0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 154 195 235 170 212 252 143 179 213 88 115 136 149 191 231 170 212 252 -+126 162 196 3 6 2 64 46 18 202 145 58 0 2 0 0 2 0 0 2 0 0 2 0 -+92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 143 179 213 3 10 13 27 29 27 -+215 217 214 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 155 157 153 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 23 30 36 27 29 27 249 251 248 254 255 252 -+254 255 252 188 190 187 7 10 5 226 228 225 254 255 252 254 255 252 254 255 252 231 233 230 -+7 10 5 21 27 33 159 201 241 170 212 252 103 134 161 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 55 66 77 11 4 3 250 179 73 24 17 10 0 2 0 0 2 0 0 2 0 -+143 185 225 170 212 252 170 212 252 170 212 252 159 201 241 28 35 41 7 10 5 200 202 199 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 155 157 153 0 2 0 55 66 77 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 96 127 154 0 2 0 158 160 156 254 255 252 -+254 255 252 192 194 191 0 2 0 176 178 175 254 255 252 254 255 252 254 255 252 254 255 252 -+141 142 139 0 2 0 72 87 103 129 165 199 0 6 9 0 6 9 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 12 17 20 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 -+138 174 208 17 24 30 29 21 8 250 179 73 101 72 28 0 2 0 0 2 0 32 39 45 -+170 212 252 170 212 252 170 212 252 170 212 252 57 72 88 0 2 0 152 154 151 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 108 110 107 0 2 0 115 152 185 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 18 22 24 40 41 39 254 255 252 -+254 255 252 232 234 231 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 10 12 8 0 2 0 8 14 16 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 41 51 62 61 76 92 34 44 55 3 10 13 -+0 2 0 11 4 3 164 119 51 250 179 73 175 129 54 0 2 0 0 2 0 82 108 129 -+170 212 252 170 212 252 170 212 252 98 129 156 0 2 0 95 96 94 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 238 241 237 18 20 17 25 32 38 166 207 248 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 85 112 133 0 2 0 188 190 187 -+254 255 252 254 255 252 198 200 197 242 244 240 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 120 122 119 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 6 9 7 0 0 -+31 23 12 202 145 58 250 179 73 250 179 73 238 175 73 0 2 0 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 28 35 41 31 32 30 244 246 243 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 85 112 133 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 0 2 0 148 150 147 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 222 224 221 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+7 0 0 234 172 70 250 179 73 250 179 73 250 179 73 34 26 8 0 2 0 149 191 231 -+170 212 252 170 212 252 129 165 199 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 48 50 48 3 10 13 146 188 228 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 0 2 0 118 120 117 -+254 255 252 254 255 252 254 255 252 169 171 168 231 233 230 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 170 124 49 250 179 73 250 179 73 250 179 73 48 33 15 6 12 15 170 212 252 -+170 212 252 170 212 252 65 87 102 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 195 197 194 0 2 0 84 103 125 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 3 10 13 85 87 84 -+254 255 252 254 255 252 234 236 233 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 99 101 98 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 95 68 30 250 179 73 250 179 73 250 179 73 34 26 8 34 44 55 170 212 252 -+170 212 252 163 205 246 8 14 16 62 64 61 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 35 37 34 34 44 55 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 26 33 39 60 62 59 -+254 255 252 254 255 252 238 241 237 0 2 0 108 110 107 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 158 160 156 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 23 15 7 248 178 79 250 179 73 245 175 76 0 2 0 63 78 94 170 212 252 -+170 212 252 109 141 168 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 104 106 103 0 2 0 -+154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 69 71 68 -+254 255 252 254 255 252 244 246 243 0 2 0 91 93 90 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 215 217 214 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 197 142 62 250 179 73 212 153 66 0 2 0 92 110 133 170 212 252 -+170 212 252 80 98 121 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 176 178 175 0 2 0 -+105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 8 14 16 87 89 86 -+254 255 252 254 255 252 254 255 252 40 41 39 21 22 20 252 254 250 254 255 252 254 255 252 -+254 255 252 254 255 252 252 254 250 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 125 92 35 250 179 73 170 124 49 0 2 0 113 145 172 170 212 252 -+170 212 252 53 68 84 15 17 14 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 242 244 240 0 2 0 -+63 78 94 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 0 2 0 104 106 103 -+254 255 252 254 255 252 254 255 252 123 125 122 0 2 0 166 168 165 254 255 252 254 255 252 -+254 255 252 254 255 252 234 236 233 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 7 0 0 52 36 13 250 179 73 129 95 39 0 2 0 143 179 213 170 212 252 -+170 212 252 32 39 45 48 50 48 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 60 62 59 -+18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 2 0 102 104 101 -+254 255 252 254 255 252 254 255 252 226 228 225 15 17 14 10 12 8 215 217 214 254 255 252 -+254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 88 66 26 29 21 8 0 2 0 166 207 248 170 212 252 -+170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 123 125 122 -+0 2 0 149 191 231 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 56 58 55 -+254 255 252 254 255 252 254 255 252 254 255 252 178 180 177 0 2 0 38 40 37 238 241 237 -+254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 7 0 0 0 2 0 161 203 243 170 212 252 -+149 191 231 0 2 0 123 125 122 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 141 142 139 -+0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 -+210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 120 122 119 0 2 0 21 22 20 -+143 145 142 244 246 243 219 221 218 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 149 191 231 170 212 252 -+129 165 199 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 155 157 153 -+0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 0 6 9 -+69 71 68 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 71 73 70 0 2 0 -+0 2 0 0 2 0 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 170 212 252 -+129 165 199 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 169 171 168 -+0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 75 94 116 -+0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 134 170 204 170 212 252 -+134 170 204 0 2 0 152 154 151 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 -+0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 -+44 54 65 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 35 37 34 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 -+138 174 208 0 2 0 143 145 142 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 198 200 197 -+0 2 0 103 134 161 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+157 198 239 28 35 41 0 2 0 188 190 187 254 255 252 252 254 250 3 6 2 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 115 152 185 170 212 252 -+143 179 213 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 -+0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 146 188 228 0 6 9 26 27 25 242 244 240 176 178 175 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 170 212 252 -+143 185 225 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 185 187 183 -+0 2 0 105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 163 205 246 0 2 0 0 2 0 102 104 101 60 62 59 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 80 98 121 170 212 252 -+149 191 231 0 2 0 118 120 117 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 143 145 142 -+0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 143 179 213 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 170 212 252 -+170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 108 110 107 -+0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 115 152 185 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 170 212 252 -+170 212 252 34 44 55 43 44 42 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 -+15 20 22 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 75 94 116 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 -+170 212 252 63 78 94 3 6 2 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 31 32 30 -+41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+161 203 243 6 12 15 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 -+170 212 252 88 115 136 0 2 0 210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 249 251 248 0 2 0 -+68 83 99 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+96 127 154 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 61 76 92 -+170 212 252 119 150 178 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 0 2 0 -+91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+28 35 41 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 -+146 188 228 143 185 225 0 2 0 126 127 125 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 85 87 84 0 6 9 -+154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 98 129 156 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+72 90 112 170 212 252 18 22 24 56 58 55 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 238 241 237 7 10 5 55 66 77 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 0 6 9 -+0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 122 159 192 72 87 103 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 113 145 172 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 139 181 221 8 14 16 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 18 22 24 109 141 168 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 12 17 20 166 207 248 -+170 212 252 170 212 252 170 212 252 170 212 252 146 188 228 23 30 36 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 101 72 28 202 145 58 -+180 132 57 0 2 0 38 45 51 3 10 13 69 71 68 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 200 202 199 0 2 0 75 89 106 170 212 252 -+170 212 252 170 212 252 170 212 252 109 141 168 8 14 16 0 2 0 21 13 4 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 7 0 0 0 2 0 101 72 28 218 158 64 250 179 73 250 179 73 -+250 179 73 139 99 44 0 2 0 8 14 16 0 2 0 238 241 237 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 244 246 243 38 40 37 3 10 13 139 181 221 170 212 252 -+170 212 252 161 203 243 66 80 97 0 2 0 31 23 12 191 142 60 248 183 74 180 132 57 -+44 34 15 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 23 15 7 190 136 56 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 150 108 46 0 2 0 0 2 0 82 83 81 222 224 221 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 102 104 101 0 2 0 98 129 156 170 212 252 163 205 246 -+98 129 156 23 30 36 0 2 0 82 62 28 234 172 70 248 183 74 248 183 74 248 183 74 -+248 183 74 158 114 46 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 64 46 18 109 79 35 150 108 46 224 163 69 250 179 73 -+250 179 73 250 179 73 250 179 73 158 114 46 0 2 0 0 2 0 3 6 2 115 117 114 -+234 236 233 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 176 178 175 0 2 0 57 72 88 146 188 228 80 98 121 8 14 16 -+0 2 0 24 17 10 158 114 46 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 242 178 77 58 42 19 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 0 2 0 67 49 21 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 95 68 30 0 2 0 0 2 0 -+0 2 0 52 54 51 108 110 107 162 164 161 219 221 218 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 -+219 221 218 178 180 177 18 20 17 6 12 15 26 33 39 0 2 0 0 2 0 52 36 13 -+164 119 51 242 178 77 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 242 178 77 -+187 138 56 175 129 54 158 114 46 82 62 28 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 78 58 25 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 234 172 70 142 101 40 -+44 34 15 10 12 8 0 2 0 0 2 0 0 2 0 18 20 17 60 62 59 71 73 70 -+82 83 81 95 96 94 104 106 103 118 120 117 115 117 114 78 80 77 40 41 39 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 44 34 15 105 75 32 191 142 60 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 105 75 32 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 187 138 56 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 142 101 40 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 206 148 61 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 161 117 49 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 228 167 73 250 179 73 -+238 175 73 190 136 56 158 114 46 234 172 70 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 147 105 44 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 67 49 21 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 -+31 23 12 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 21 13 4 -+0 2 0 0 2 0 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 -+134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 155 111 43 248 183 74 248 183 74 -+248 183 74 248 183 74 224 163 69 55 39 17 64 46 18 164 119 51 242 178 77 248 183 74 -+75 55 22 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 228 167 73 88 66 26 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 168 123 54 248 183 74 -+248 183 74 248 183 74 158 114 46 0 2 0 7 0 0 0 2 0 10 12 8 44 34 15 -+15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 29 21 8 250 179 73 250 179 73 158 114 46 15 14 3 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 175 129 54 -+248 183 74 248 183 74 114 83 33 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 29 21 8 147 105 44 58 42 19 0 2 0 7 0 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+105 75 32 218 158 64 23 15 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -diff -Nur linux-2.6.39.1/drivers/video/logo/logo_linux_mono.pbm linux-2.6.39-LIBRE/drivers/video/logo/logo_linux_mono.pbm ---- linux-2.6.39.1/drivers/video/logo/logo_linux_mono.pbm 2011-06-02 21:34:20.000000000 -0300 -+++ linux-2.6.39-LIBRE/drivers/video/logo/logo_linux_mono.pbm 2011-06-22 13:42:06.000000000 -0300 -@@ -1,203 +1,159 @@ --P1 --# Standard black and white Linux logo --80 80 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 --1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 1 1 --1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 --1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 --0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 --1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 --0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 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 1 1 1 1 1 1 1 1 1 1 1 0 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 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 1 1 0 1 1 1 1 1 1 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 --1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 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 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 0 0 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 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 1 1 1 0 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 0 0 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 1 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 --1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 --1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 --1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 --1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 --1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -+P2 -+80 78 -+255 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 255 255 255 255 255 0 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 -+255 0 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 -+255 255 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 -+255 255 0 0 0 0 0 0 0 0 -+0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 -+255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 255 255 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 0 255 255 0 0 255 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 255 255 255 0 0 255 -+255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 255 -+255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 0 -+255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 -+0 255 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 -+0 255 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 -+0 0 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 255 255 255 -+255 0 0 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 255 0 0 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 -+255 0 0 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 0 0 255 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 255 255 255 -+255 255 0 0 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 255 255 255 255 0 255 255 255 -+255 255 255 0 0 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 0 255 255 255 -+255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 0 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 0 -+0 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 255 -+0 0 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -diff -Nur linux-2.6.39.1/drivers/video/logo/logo_linux_vga16.ppm linux-2.6.39-LIBRE/drivers/video/logo/logo_linux_vga16.ppm ---- linux-2.6.39.1/drivers/video/logo/logo_linux_vga16.ppm 2011-06-02 21:34:20.000000000 -0300 -+++ linux-2.6.39-LIBRE/drivers/video/logo/logo_linux_vga16.ppm 2011-06-22 13:42:06.000000000 -0300 -@@ -1,1604 +1,18724 @@ - P3 --# Standard 16-color Linux logo --80 80 -+# CREATOR: GIMP PNM Filter Version 1.1 -+80 78 - 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 170 170 170 85 85 85 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 170 170 170 170 170 --170 170 170 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 170 170 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 170 170 170 255 255 255 255 255 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 255 255 255 170 170 170 170 170 170 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 0 0 0 0 0 0 255 255 255 -- 85 85 85 0 0 0 0 0 0 0 0 0 --255 255 255 170 170 170 0 0 0 85 85 85 --170 170 170 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 170 170 170 -- 85 85 85 0 0 0 0 0 0 0 0 0 --255 255 255 85 85 85 0 0 0 0 0 0 -- 85 85 85 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 0 0 0 0 0 0 170 170 170 -- 85 85 85 85 85 85 85 85 85 85 85 85 --255 255 255 85 85 85 0 0 0 0 0 0 -- 85 85 85 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 170 170 170 170 170 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 170 170 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 170 85 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 85 85 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 85 85 85 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 170 170 170 170 170 170 170 170 0 0 0 -- 0 0 0 0 0 0 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 170 170 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 170 170 170 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 170 170 170 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 170 170 170 --170 170 170 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 170 170 170 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 170 170 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 170 170 170 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 85 85 85 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 0 0 0 85 85 85 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 85 85 85 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 -- 0 0 0 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 85 85 85 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 85 85 85 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 170 170 170 -- 85 85 85 0 0 0 0 0 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 85 85 85 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 170 85 0 170 85 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 85 85 85 85 85 85 170 85 0 --170 85 0 170 85 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 diff --git a/libre/linux-libre-lts/logo_linux_clut224.ppm b/libre/linux-libre-lts/logo_linux_clut224.ppm new file mode 100644 index 000000000..c9d837347 --- /dev/null +++ b/libre/linux-libre-lts/logo_linux_clut224.ppm @@ -0,0 +1,861 @@ +P3 +80 78 +255 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 23 30 36 44 54 65 57 72 88 44 54 65 6 12 15 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 31 41 52 +103 134 161 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 +82 108 129 8 14 16 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 17 24 30 126 162 196 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 161 203 243 92 119 140 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 154 195 235 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 138 174 208 21 27 33 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 70 96 117 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 49 59 70 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 3 6 52 62 74 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 +82 108 129 149 191 231 170 212 252 170 212 252 170 212 252 129 165 199 82 108 129 149 191 231 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 37 48 59 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 21 13 4 31 23 12 0 2 0 0 2 0 105 75 32 155 111 43 23 15 7 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 6 9 3 10 13 146 188 228 170 212 252 170 212 252 170 212 252 157 198 239 0 6 9 +0 2 0 52 62 74 170 212 252 170 212 252 154 195 235 0 6 9 0 2 0 55 66 77 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 151 193 233 17 24 30 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +10 12 8 23 15 7 139 99 44 206 148 61 67 49 21 0 2 0 125 92 35 206 148 61 +15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 96 127 154 170 212 252 170 212 252 170 212 252 170 212 252 92 119 140 21 22 20 +10 12 8 53 68 84 170 212 252 170 212 252 92 119 140 10 12 8 7 10 5 53 68 84 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 +0 6 9 0 3 6 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 22 20 +62 64 61 38 40 37 0 2 0 34 26 8 212 153 66 64 46 18 0 2 0 170 124 49 +180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 65 87 102 115 117 114 +43 44 42 88 115 136 170 212 252 170 212 252 68 83 99 108 110 107 60 62 59 88 115 136 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +80 98 121 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 10 12 8 56 58 55 95 96 94 178 180 177 215 217 214 198 200 197 +158 160 156 138 140 137 82 83 81 0 2 0 64 46 18 228 167 73 23 15 7 41 31 10 +250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 +0 2 0 126 162 196 170 212 252 170 212 252 57 72 88 0 2 0 0 2 0 126 162 196 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +157 198 239 8 14 16 0 6 9 0 2 0 45 47 44 195 197 194 192 194 191 38 40 37 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 192 194 191 234 236 233 176 178 175 118 120 117 143 145 142 176 178 175 +215 217 214 234 236 233 234 236 233 104 106 103 0 2 0 142 101 40 134 100 43 0 2 0 +164 119 51 170 124 49 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 115 152 185 8 14 16 +49 59 70 166 207 248 170 212 252 170 212 252 119 150 178 8 14 16 55 66 77 166 207 248 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 92 119 140 0 2 0 0 2 0 200 202 199 254 255 252 254 255 252 244 246 243 +40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 38 40 37 234 236 233 234 236 233 234 236 233 135 137 134 215 217 214 171 173 170 +141 142 139 138 140 137 138 140 137 135 137 134 31 32 30 3 6 2 212 153 66 15 9 7 +78 58 25 248 178 79 41 31 10 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 3 6 21 27 33 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 154 195 235 0 6 9 82 83 81 254 255 252 254 255 252 254 255 252 254 255 252 +188 190 187 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 62 64 61 234 236 233 234 236 233 234 236 233 198 200 197 131 133 130 198 200 197 +232 234 231 234 236 233 234 236 233 234 236 233 152 154 151 0 2 0 147 105 44 67 49 21 +23 15 7 250 179 73 158 114 46 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 61 76 92 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 154 195 235 103 134 161 80 98 121 +52 62 74 18 22 24 0 2 0 3 10 13 38 45 51 80 98 121 151 193 233 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 109 141 168 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 +226 228 225 65 66 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 43 44 42 234 236 233 234 236 233 234 236 233 234 236 233 131 133 130 192 194 191 +152 154 151 141 142 139 141 142 139 141 142 139 158 160 156 3 6 2 82 62 28 129 95 39 +0 2 0 206 148 61 248 178 79 21 13 4 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 96 115 138 +170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 18 22 24 0 2 0 0 2 0 +34 26 8 75 55 22 114 83 33 95 68 30 55 39 17 7 0 0 0 6 9 84 103 125 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 84 103 125 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 171 173 170 +0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 18 20 17 234 236 233 234 236 233 234 236 233 234 236 233 138 140 137 178 180 177 +226 228 225 234 236 233 234 236 233 234 236 233 231 233 230 45 47 44 23 15 7 190 136 56 +0 2 0 147 105 44 250 179 73 64 46 18 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 126 162 196 0 2 0 26 20 13 190 136 56 245 175 76 +250 179 73 161 117 49 164 119 51 245 175 76 250 179 73 206 148 61 75 55 22 0 2 0 +126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 68 83 99 0 2 0 252 254 250 254 255 252 254 255 252 254 255 252 71 73 70 +8 14 16 88 115 136 17 24 30 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 232 234 231 234 236 233 234 236 233 234 236 233 215 217 214 148 150 147 +183 185 181 141 142 139 135 137 134 135 137 134 141 142 139 87 89 86 0 2 0 202 145 58 +3 6 2 88 66 26 250 179 73 109 79 35 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 157 198 239 +170 212 252 170 212 252 166 207 248 26 33 39 26 20 13 224 163 69 250 179 73 250 179 73 +250 179 73 197 142 62 202 145 58 250 179 73 250 179 73 250 179 73 234 172 70 21 13 4 +38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 52 62 74 21 22 20 254 255 252 254 255 252 254 255 252 254 255 252 21 22 20 +49 59 70 170 212 252 166 207 248 91 123 149 8 14 16 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 215 217 214 234 236 233 234 236 233 234 236 233 234 236 233 123 125 122 +188 190 187 229 231 228 234 236 233 234 236 233 222 224 221 118 120 117 0 2 0 168 123 54 +34 26 8 67 49 21 250 179 73 134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 34 41 47 170 212 252 +170 212 252 170 212 252 85 112 133 0 2 0 164 119 51 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 129 95 39 +0 2 0 138 174 208 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 34 44 55 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 24 22 25 +52 62 74 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 178 180 177 234 236 233 234 236 233 234 236 233 234 236 233 141 142 139 +198 200 197 148 150 147 135 137 134 135 137 134 148 150 147 123 125 122 0 2 0 190 136 56 +21 13 4 78 58 25 250 179 73 129 95 39 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 82 108 129 170 212 252 +170 212 252 170 212 252 23 30 36 58 42 19 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 147 105 44 +0 2 0 139 181 221 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 34 41 47 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 +25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 6 9 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 91 93 90 234 236 233 234 236 233 234 236 233 234 236 233 126 127 125 +169 171 168 222 224 221 234 236 233 229 231 228 178 180 177 71 73 70 0 2 0 212 153 66 +0 2 0 95 68 30 250 179 73 119 87 37 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 138 174 208 170 212 252 +170 212 252 154 195 235 0 2 0 125 92 35 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 119 87 37 +0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 57 72 88 7 10 5 252 254 250 254 255 252 254 255 252 254 255 252 95 96 94 +0 6 9 166 207 248 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 8 14 16 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 7 10 5 222 224 221 234 236 233 234 236 233 234 236 233 141 142 139 +183 185 181 138 140 137 131 133 130 141 142 139 192 194 191 102 104 101 0 2 0 224 163 69 +0 2 0 105 75 32 250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 27 33 170 212 252 170 212 252 +170 212 252 115 152 185 0 2 0 180 132 57 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 10 12 8 +38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 82 108 129 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 158 160 156 +0 2 0 92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 141 142 139 234 236 233 234 236 233 234 236 233 131 133 130 +185 187 183 231 233 230 222 224 221 158 160 156 138 140 137 48 50 48 3 6 2 250 179 73 +134 100 43 206 148 61 218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 75 94 116 170 212 252 170 212 252 +170 212 252 92 119 140 0 2 0 224 163 69 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 87 61 23 7 0 0 +134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 109 141 168 0 2 0 178 180 177 254 255 252 254 255 252 254 255 252 252 254 250 +39 43 45 10 16 18 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +88 115 136 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 45 47 44 234 236 233 234 236 233 234 236 233 131 133 130 +148 150 147 138 140 137 148 150 147 210 212 209 152 154 151 26 27 25 29 21 8 250 179 73 +250 179 73 234 172 70 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 170 212 252 +170 212 252 103 134 161 0 2 0 202 145 58 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 238 175 73 75 55 22 0 2 0 75 102 123 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 140 177 211 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 +183 185 181 0 2 0 75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 57 72 88 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 162 164 161 234 236 233 234 236 233 135 137 134 +226 228 225 198 200 197 104 106 103 15 17 14 0 2 0 15 9 7 147 105 44 250 179 73 +248 178 79 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 21 27 33 170 212 252 170 212 252 170 212 252 +170 212 252 122 159 192 0 2 0 175 129 54 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 202 145 58 55 39 17 0 2 0 82 108 129 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 12 17 20 60 62 59 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 69 71 68 0 6 9 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 159 201 241 26 33 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 162 164 161 215 217 214 95 96 94 +56 58 55 0 2 0 0 2 0 0 2 0 61 44 16 238 175 73 250 179 73 250 179 73 +218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 88 115 136 170 212 252 170 212 252 170 212 252 +170 212 252 143 185 225 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 212 153 66 95 68 30 0 2 0 8 14 16 103 134 161 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 68 83 99 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 +254 255 252 210 212 209 0 6 9 53 68 84 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 126 162 196 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 23 15 7 250 179 73 250 179 73 250 179 73 +250 179 73 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 166 207 248 0 2 0 52 36 13 158 114 46 180 132 57 161 117 49 119 87 37 +41 31 10 0 2 0 0 2 0 72 87 103 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 115 152 185 0 2 0 152 154 151 254 255 252 238 241 237 85 87 84 +229 231 228 254 255 252 99 101 98 0 2 0 126 162 196 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 +250 179 73 105 75 32 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 32 39 45 0 2 0 57 72 88 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 85 112 133 12 17 20 0 2 0 0 2 0 0 2 0 0 2 0 +34 41 47 92 110 133 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 166 207 248 6 12 15 71 73 70 254 255 252 229 231 228 0 2 0 +141 142 139 254 255 252 231 233 230 10 12 8 34 44 55 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 154 195 235 6 12 15 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 125 92 35 250 179 73 250 179 73 +250 179 73 180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 68 83 99 +129 165 199 85 112 133 0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 126 162 196 119 156 189 134 170 204 149 191 231 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 57 72 88 3 6 2 242 244 240 254 255 252 35 37 34 +78 80 77 254 255 252 254 255 252 128 130 127 0 2 0 105 137 164 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 91 123 149 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 55 39 17 250 179 73 250 179 73 +250 179 73 245 175 76 7 10 5 0 2 0 44 54 65 103 134 161 161 203 243 170 212 252 +170 212 252 21 27 33 25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 61 76 92 0 2 0 242 244 240 254 255 252 102 104 101 +10 12 8 231 233 230 254 255 252 244 246 243 26 27 25 21 27 33 159 201 241 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 32 39 45 0 6 9 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 218 158 64 250 179 73 +250 179 73 250 179 73 75 55 22 0 2 0 161 203 243 170 212 252 170 212 252 170 212 252 +115 147 174 0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 159 201 241 146 188 228 +140 177 211 134 170 204 146 188 228 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 17 24 30 62 64 61 254 255 252 254 255 252 215 217 214 +0 2 0 102 104 101 254 255 252 254 255 252 166 168 165 0 2 0 72 87 103 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 75 32 250 179 73 +250 179 73 250 179 73 150 108 46 0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 +49 59 70 3 10 13 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 166 207 248 109 141 168 65 87 102 28 35 41 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 28 35 41 70 96 117 138 174 208 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 0 2 0 102 104 101 254 255 252 254 255 252 254 255 252 +102 104 101 0 2 0 192 194 191 254 255 252 254 255 252 78 80 77 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 34 44 55 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 61 76 92 154 195 235 0 6 9 29 21 8 250 179 73 +250 179 73 250 179 73 224 163 69 0 2 0 68 83 99 170 212 252 170 212 252 143 179 213 +0 2 0 72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +161 203 243 96 115 138 17 24 30 0 2 0 0 2 0 45 47 44 102 104 101 123 125 122 +138 140 137 143 145 142 115 117 114 82 83 81 43 44 42 0 2 0 0 2 0 32 39 45 +126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 0 2 0 85 87 84 254 255 252 254 255 252 254 255 252 +242 244 240 27 29 27 35 37 34 254 255 252 254 255 252 231 233 230 10 12 8 21 27 33 +159 201 241 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 6 9 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 44 54 65 170 212 252 170 212 252 34 44 55 0 2 0 82 62 28 +109 79 35 224 163 69 250 179 73 52 36 13 15 20 22 170 212 252 170 212 252 75 89 106 +0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 +25 32 38 0 2 0 40 41 39 155 157 153 238 241 237 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 115 117 114 18 20 17 +0 2 0 68 83 99 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 52 62 74 7 10 5 234 236 233 254 255 252 254 255 252 +254 255 252 195 197 194 102 104 101 254 255 252 254 255 252 254 255 252 162 164 161 0 2 0 +72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 119 156 189 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 115 147 174 170 212 252 91 123 149 0 2 0 0 2 0 6 12 15 +0 2 0 15 9 7 197 142 62 125 92 35 0 2 0 115 152 185 113 145 172 3 6 2 +41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 113 145 172 0 6 9 +10 12 8 155 157 153 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 232 234 231 +87 89 86 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 115 152 185 0 2 0 138 140 137 254 255 252 254 255 252 +254 255 252 254 255 252 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 65 66 64 +0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 154 195 235 170 212 252 143 179 213 88 115 136 149 191 231 170 212 252 +126 162 196 3 6 2 64 46 18 202 145 58 0 2 0 0 2 0 0 2 0 0 2 0 +92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 143 179 213 3 10 13 27 29 27 +215 217 214 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 155 157 153 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 23 30 36 27 29 27 249 251 248 254 255 252 +254 255 252 188 190 187 7 10 5 226 228 225 254 255 252 254 255 252 254 255 252 231 233 230 +7 10 5 21 27 33 159 201 241 170 212 252 103 134 161 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 55 66 77 11 4 3 250 179 73 24 17 10 0 2 0 0 2 0 0 2 0 +143 185 225 170 212 252 170 212 252 170 212 252 159 201 241 28 35 41 7 10 5 200 202 199 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 155 157 153 0 2 0 55 66 77 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 96 127 154 0 2 0 158 160 156 254 255 252 +254 255 252 192 194 191 0 2 0 176 178 175 254 255 252 254 255 252 254 255 252 254 255 252 +141 142 139 0 2 0 72 87 103 129 165 199 0 6 9 0 6 9 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 12 17 20 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 +138 174 208 17 24 30 29 21 8 250 179 73 101 72 28 0 2 0 0 2 0 32 39 45 +170 212 252 170 212 252 170 212 252 170 212 252 57 72 88 0 2 0 152 154 151 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 108 110 107 0 2 0 115 152 185 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 18 22 24 40 41 39 254 255 252 +254 255 252 232 234 231 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 10 12 8 0 2 0 8 14 16 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 41 51 62 61 76 92 34 44 55 3 10 13 +0 2 0 11 4 3 164 119 51 250 179 73 175 129 54 0 2 0 0 2 0 82 108 129 +170 212 252 170 212 252 170 212 252 98 129 156 0 2 0 95 96 94 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 238 241 237 18 20 17 25 32 38 166 207 248 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 85 112 133 0 2 0 188 190 187 +254 255 252 254 255 252 198 200 197 242 244 240 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 120 122 119 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 6 9 7 0 0 +31 23 12 202 145 58 250 179 73 250 179 73 238 175 73 0 2 0 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 28 35 41 31 32 30 244 246 243 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 85 112 133 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 0 2 0 148 150 147 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 222 224 221 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +7 0 0 234 172 70 250 179 73 250 179 73 250 179 73 34 26 8 0 2 0 149 191 231 +170 212 252 170 212 252 129 165 199 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 48 50 48 3 10 13 146 188 228 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 0 2 0 118 120 117 +254 255 252 254 255 252 254 255 252 169 171 168 231 233 230 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 170 124 49 250 179 73 250 179 73 250 179 73 48 33 15 6 12 15 170 212 252 +170 212 252 170 212 252 65 87 102 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 195 197 194 0 2 0 84 103 125 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 3 10 13 85 87 84 +254 255 252 254 255 252 234 236 233 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 99 101 98 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 95 68 30 250 179 73 250 179 73 250 179 73 34 26 8 34 44 55 170 212 252 +170 212 252 163 205 246 8 14 16 62 64 61 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 35 37 34 34 44 55 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 26 33 39 60 62 59 +254 255 252 254 255 252 238 241 237 0 2 0 108 110 107 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 158 160 156 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 23 15 7 248 178 79 250 179 73 245 175 76 0 2 0 63 78 94 170 212 252 +170 212 252 109 141 168 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 104 106 103 0 2 0 +154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 69 71 68 +254 255 252 254 255 252 244 246 243 0 2 0 91 93 90 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 215 217 214 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 197 142 62 250 179 73 212 153 66 0 2 0 92 110 133 170 212 252 +170 212 252 80 98 121 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 176 178 175 0 2 0 +105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 8 14 16 87 89 86 +254 255 252 254 255 252 254 255 252 40 41 39 21 22 20 252 254 250 254 255 252 254 255 252 +254 255 252 254 255 252 252 254 250 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 125 92 35 250 179 73 170 124 49 0 2 0 113 145 172 170 212 252 +170 212 252 53 68 84 15 17 14 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 242 244 240 0 2 0 +63 78 94 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 0 2 0 104 106 103 +254 255 252 254 255 252 254 255 252 123 125 122 0 2 0 166 168 165 254 255 252 254 255 252 +254 255 252 254 255 252 234 236 233 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 7 0 0 52 36 13 250 179 73 129 95 39 0 2 0 143 179 213 170 212 252 +170 212 252 32 39 45 48 50 48 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 60 62 59 +18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 2 0 102 104 101 +254 255 252 254 255 252 254 255 252 226 228 225 15 17 14 10 12 8 215 217 214 254 255 252 +254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 88 66 26 29 21 8 0 2 0 166 207 248 170 212 252 +170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 123 125 122 +0 2 0 149 191 231 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 56 58 55 +254 255 252 254 255 252 254 255 252 254 255 252 178 180 177 0 2 0 38 40 37 238 241 237 +254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 7 0 0 0 2 0 161 203 243 170 212 252 +149 191 231 0 2 0 123 125 122 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 141 142 139 +0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 +210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 120 122 119 0 2 0 21 22 20 +143 145 142 244 246 243 219 221 218 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 149 191 231 170 212 252 +129 165 199 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 155 157 153 +0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 0 6 9 +69 71 68 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 71 73 70 0 2 0 +0 2 0 0 2 0 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 170 212 252 +129 165 199 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 169 171 168 +0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 75 94 116 +0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 134 170 204 170 212 252 +134 170 204 0 2 0 152 154 151 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 +0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 +44 54 65 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 35 37 34 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 +138 174 208 0 2 0 143 145 142 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 198 200 197 +0 2 0 103 134 161 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +157 198 239 28 35 41 0 2 0 188 190 187 254 255 252 252 254 250 3 6 2 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 115 152 185 170 212 252 +143 179 213 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 +0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 146 188 228 0 6 9 26 27 25 242 244 240 176 178 175 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 170 212 252 +143 185 225 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 185 187 183 +0 2 0 105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 163 205 246 0 2 0 0 2 0 102 104 101 60 62 59 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 80 98 121 170 212 252 +149 191 231 0 2 0 118 120 117 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 143 145 142 +0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 143 179 213 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 170 212 252 +170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 108 110 107 +0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 115 152 185 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 170 212 252 +170 212 252 34 44 55 43 44 42 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 +15 20 22 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 75 94 116 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 +170 212 252 63 78 94 3 6 2 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 31 32 30 +41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +161 203 243 6 12 15 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 +170 212 252 88 115 136 0 2 0 210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 249 251 248 0 2 0 +68 83 99 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +96 127 154 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 61 76 92 +170 212 252 119 150 178 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 0 2 0 +91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +28 35 41 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 +146 188 228 143 185 225 0 2 0 126 127 125 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 85 87 84 0 6 9 +154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 98 129 156 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +72 90 112 170 212 252 18 22 24 56 58 55 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 238 241 237 7 10 5 55 66 77 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 0 6 9 +0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 122 159 192 72 87 103 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 113 145 172 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 139 181 221 8 14 16 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 18 22 24 109 141 168 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 12 17 20 166 207 248 +170 212 252 170 212 252 170 212 252 170 212 252 146 188 228 23 30 36 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 101 72 28 202 145 58 +180 132 57 0 2 0 38 45 51 3 10 13 69 71 68 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 200 202 199 0 2 0 75 89 106 170 212 252 +170 212 252 170 212 252 170 212 252 109 141 168 8 14 16 0 2 0 21 13 4 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 7 0 0 0 2 0 101 72 28 218 158 64 250 179 73 250 179 73 +250 179 73 139 99 44 0 2 0 8 14 16 0 2 0 238 241 237 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 244 246 243 38 40 37 3 10 13 139 181 221 170 212 252 +170 212 252 161 203 243 66 80 97 0 2 0 31 23 12 191 142 60 248 183 74 180 132 57 +44 34 15 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 23 15 7 190 136 56 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 150 108 46 0 2 0 0 2 0 82 83 81 222 224 221 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 102 104 101 0 2 0 98 129 156 170 212 252 163 205 246 +98 129 156 23 30 36 0 2 0 82 62 28 234 172 70 248 183 74 248 183 74 248 183 74 +248 183 74 158 114 46 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 64 46 18 109 79 35 150 108 46 224 163 69 250 179 73 +250 179 73 250 179 73 250 179 73 158 114 46 0 2 0 0 2 0 3 6 2 115 117 114 +234 236 233 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 176 178 175 0 2 0 57 72 88 146 188 228 80 98 121 8 14 16 +0 2 0 24 17 10 158 114 46 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 242 178 77 58 42 19 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 0 2 0 67 49 21 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 95 68 30 0 2 0 0 2 0 +0 2 0 52 54 51 108 110 107 162 164 161 219 221 218 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 +219 221 218 178 180 177 18 20 17 6 12 15 26 33 39 0 2 0 0 2 0 52 36 13 +164 119 51 242 178 77 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 242 178 77 +187 138 56 175 129 54 158 114 46 82 62 28 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 78 58 25 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 234 172 70 142 101 40 +44 34 15 10 12 8 0 2 0 0 2 0 0 2 0 18 20 17 60 62 59 71 73 70 +82 83 81 95 96 94 104 106 103 118 120 117 115 117 114 78 80 77 40 41 39 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 44 34 15 105 75 32 191 142 60 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 105 75 32 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 187 138 56 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 142 101 40 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 206 148 61 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 161 117 49 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 228 167 73 250 179 73 +238 175 73 190 136 56 158 114 46 234 172 70 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 147 105 44 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 67 49 21 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 +31 23 12 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 21 13 4 +0 2 0 0 2 0 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 +134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 155 111 43 248 183 74 248 183 74 +248 183 74 248 183 74 224 163 69 55 39 17 64 46 18 164 119 51 242 178 77 248 183 74 +75 55 22 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 228 167 73 88 66 26 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 168 123 54 248 183 74 +248 183 74 248 183 74 158 114 46 0 2 0 7 0 0 0 2 0 10 12 8 44 34 15 +15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 29 21 8 250 179 73 250 179 73 158 114 46 15 14 3 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 175 129 54 +248 183 74 248 183 74 114 83 33 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 29 21 8 147 105 44 58 42 19 0 2 0 7 0 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +105 75 32 218 158 64 23 15 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + diff --git a/libre/linux-libre-lts/logo_linux_mono.pbm b/libre/linux-libre-lts/logo_linux_mono.pbm new file mode 100644 index 000000000..3d3c35807 --- /dev/null +++ b/libre/linux-libre-lts/logo_linux_mono.pbm @@ -0,0 +1,159 @@ +P2 +80 78 +255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 255 255 255 255 255 0 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 +255 0 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 +255 255 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 +255 255 0 0 0 0 0 0 0 0 +0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 +255 255 255 0 0 0 0 0 0 0 +0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 255 255 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 0 255 255 0 0 255 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 255 255 255 0 0 255 +255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 255 +255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 0 +255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 +0 255 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 +0 255 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 +0 0 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 255 255 255 +255 0 0 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 255 0 0 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 +255 0 0 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 0 0 255 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 255 255 255 +255 255 0 0 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 255 255 255 255 0 255 255 255 +255 255 255 0 0 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 0 255 255 255 +255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 0 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 0 +0 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 255 +0 0 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 diff --git a/libre/linux-libre-lts/logo_linux_vga16.ppm b/libre/linux-libre-lts/logo_linux_vga16.ppm new file mode 100644 index 000000000..f279f972c --- /dev/null +++ b/libre/linux-libre-lts/logo_linux_vga16.ppm @@ -0,0 +1,18724 @@ +P3 +# CREATOR: GIMP PNM Filter Version 1.1 +80 78 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +170 +170 +170 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +170 +170 +170 +85 +85 +85 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +170 +170 +170 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +85 +85 +85 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +170 +170 +170 +170 +170 +170 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD index 3c29cab4c..367ae5d54 100644 --- a/libre/linux-libre/PKGBUILD +++ b/libre/linux-libre/PKGBUILD @@ -29,7 +29,7 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/li 'config.i686' 'config.x86_64' # standard config files for mkinitcpio ramdisk 'linux.preset' - 'boot-logo.patch' + 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' 'compal-laptop-hwmon-fix.patch' ) @@ -38,7 +38,9 @@ sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218' '65739ffbc01d1ecea8328130b14e0258aa036e37ede2f0b1aa9b8efa2ad68a66' '0d827a89f8955e1f39b6a6d10887d1ca7a46b42cc4417bf823eb9f260c26f660' 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' - '8303b426b1a6dce456b2350003558ae312d21cab0ae6c1f0d7b9d21395f4e177' + '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' + '2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53' + 'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015' '1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99' 'f36f61a0a72bcb0a9c04264343503bfbf927c9ea0db819e66734a3933b060588') @@ -59,7 +61,8 @@ prepare() { fi # add freedo as boot logo - patch -p1 -i "${srcdir}/boot-logo.patch" + install -m644 -t drivers/video/logo \ + "${srcdir}/logo_linux_"{clut224.ppm,vga16.ppm,mono.pbm} # add latest fixes from stable queue, if needed # http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git diff --git a/libre/linux-libre/boot-logo.patch b/libre/linux-libre/boot-logo.patch deleted file mode 100644 index 3f4e0dea4..000000000 --- a/libre/linux-libre/boot-logo.patch +++ /dev/null @@ -1,23167 +0,0 @@ -diff --git a/drivers/video/logo/logo_linux_clut224.ppm b/drivers/video/logo/logo_linux_clut224.ppm -index 3c14e43..c9d8373 100644 ---- a/drivers/video/logo/logo_linux_clut224.ppm -+++ b/drivers/video/logo/logo_linux_clut224.ppm -@@ -1,1604 +1,861 @@ - P3 --# Standard 224-color Linux logo --80 80 -+80 78 - 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 6 6 6 10 10 10 10 10 10 -- 10 10 10 6 6 6 6 6 6 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 10 10 10 14 14 14 -- 22 22 22 26 26 26 30 30 30 34 34 34 -- 30 30 30 30 30 30 26 26 26 18 18 18 -- 14 14 14 10 10 10 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 26 26 26 42 42 42 -- 54 54 54 66 66 66 78 78 78 78 78 78 -- 78 78 78 74 74 74 66 66 66 54 54 54 -- 42 42 42 26 26 26 18 18 18 10 10 10 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 22 22 22 42 42 42 66 66 66 86 86 86 -- 66 66 66 38 38 38 38 38 38 22 22 22 -- 26 26 26 34 34 34 54 54 54 66 66 66 -- 86 86 86 70 70 70 46 46 46 26 26 26 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 26 26 26 -- 50 50 50 82 82 82 58 58 58 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 54 54 54 86 86 86 66 66 66 -- 38 38 38 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 22 22 22 50 50 50 -- 78 78 78 34 34 34 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 6 6 6 70 70 70 -- 78 78 78 46 46 46 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 42 42 42 82 82 82 -- 26 26 26 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 14 14 14 -- 46 46 46 34 34 34 6 6 6 2 2 6 -- 42 42 42 78 78 78 42 42 42 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 30 30 30 66 66 66 58 58 58 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 26 26 26 -- 86 86 86 101 101 101 46 46 46 10 10 10 -- 2 2 6 58 58 58 70 70 70 34 34 34 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 42 42 42 86 86 86 10 10 10 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 30 30 30 -- 94 94 94 94 94 94 58 58 58 26 26 26 -- 2 2 6 6 6 6 78 78 78 54 54 54 -- 22 22 22 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 62 62 62 62 62 62 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 26 26 26 -- 54 54 54 38 38 38 18 18 18 10 10 10 -- 2 2 6 2 2 6 34 34 34 82 82 82 -- 38 38 38 14 14 14 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 30 30 30 78 78 78 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 10 10 10 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 78 78 78 -- 50 50 50 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 14 14 14 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 54 54 54 -- 66 66 66 26 26 26 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 82 82 82 2 2 6 2 2 6 -- 2 2 6 6 6 6 10 10 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 14 14 14 10 10 10 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 18 18 18 -- 82 82 82 34 34 34 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 2 2 6 -- 6 6 6 6 6 6 22 22 22 34 34 34 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 34 34 34 -- 10 10 10 50 50 50 22 22 22 2 2 6 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 86 86 86 42 42 42 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 2 2 6 -- 38 38 38 116 116 116 94 94 94 22 22 22 -- 22 22 22 2 2 6 2 2 6 2 2 6 -- 14 14 14 86 86 86 138 138 138 162 162 162 --154 154 154 38 38 38 26 26 26 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 86 86 86 46 46 46 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 14 14 14 --134 134 134 198 198 198 195 195 195 116 116 116 -- 10 10 10 2 2 6 2 2 6 6 6 6 --101 98 89 187 187 187 210 210 210 218 218 218 --214 214 214 134 134 134 14 14 14 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 86 86 86 50 50 50 18 18 18 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 54 54 54 --218 218 218 195 195 195 226 226 226 246 246 246 -- 58 58 58 2 2 6 2 2 6 30 30 30 --210 210 210 253 253 253 174 174 174 123 123 123 --221 221 221 234 234 234 74 74 74 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 82 82 82 2 2 6 106 106 106 --170 170 170 26 26 26 86 86 86 226 226 226 --123 123 123 10 10 10 14 14 14 46 46 46 --231 231 231 190 190 190 6 6 6 70 70 70 -- 90 90 90 238 238 238 158 158 158 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 86 86 86 6 6 6 116 116 116 --106 106 106 6 6 6 70 70 70 149 149 149 --128 128 128 18 18 18 38 38 38 54 54 54 --221 221 221 106 106 106 2 2 6 14 14 14 -- 46 46 46 190 190 190 198 198 198 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 62 62 62 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 94 94 94 14 14 14 101 101 101 --128 128 128 2 2 6 18 18 18 116 116 116 --118 98 46 121 92 8 121 92 8 98 78 10 --162 162 162 106 106 106 2 2 6 2 2 6 -- 2 2 6 195 195 195 195 195 195 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 62 62 62 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 1 -- 0 0 1 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 90 90 90 14 14 14 58 58 58 --210 210 210 26 26 26 54 38 6 154 114 10 --226 170 11 236 186 11 225 175 15 184 144 12 --215 174 15 175 146 61 37 26 9 2 2 6 -- 70 70 70 246 246 246 138 138 138 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 66 66 66 26 26 26 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 14 14 14 10 10 10 --195 195 195 188 164 115 192 133 9 225 175 15 --239 182 13 234 190 10 232 195 16 232 200 30 --245 207 45 241 208 19 232 195 16 184 144 12 --218 194 134 211 206 186 42 42 42 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 50 50 50 74 74 74 30 30 30 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 86 86 86 14 14 14 2 2 6 --121 87 25 192 133 9 219 162 10 239 182 13 --236 186 11 232 195 16 241 208 19 244 214 54 --246 218 60 246 218 38 246 215 20 241 208 19 --241 208 19 226 184 13 121 87 25 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 50 50 50 82 82 82 34 34 34 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 82 82 82 30 30 30 61 42 6 --180 123 7 206 145 10 230 174 11 239 182 13 --234 190 10 238 202 15 241 208 19 246 218 74 --246 218 38 246 215 20 246 215 20 246 215 20 --226 184 13 215 174 15 184 144 12 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 26 26 26 94 94 94 42 42 42 14 14 14 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 50 50 50 104 69 6 --192 133 9 216 158 10 236 178 12 236 186 11 --232 195 16 241 208 19 244 214 54 245 215 43 --246 215 20 246 215 20 241 208 19 198 155 10 --200 144 11 216 158 10 156 118 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 90 90 90 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 46 46 46 22 22 22 --137 92 6 210 162 10 239 182 13 238 190 10 --238 202 15 241 208 19 246 215 20 246 215 20 --241 208 19 203 166 17 185 133 11 210 150 10 --216 158 10 210 150 10 102 78 10 2 2 6 -- 6 6 6 54 54 54 14 14 14 2 2 6 -- 2 2 6 62 62 62 74 74 74 30 30 30 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 78 78 78 50 50 50 6 6 6 -- 94 70 30 139 102 15 190 146 13 226 184 13 --232 200 30 232 195 16 215 174 15 190 146 13 --168 122 10 192 133 9 210 150 10 213 154 11 --202 150 34 182 157 106 101 98 89 2 2 6 -- 2 2 6 78 78 78 116 116 116 58 58 58 -- 2 2 6 22 22 22 90 90 90 46 46 46 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 50 50 50 6 6 6 --128 128 128 174 154 114 156 107 11 168 122 10 --198 155 10 184 144 12 197 138 11 200 144 11 --206 145 10 206 145 10 197 138 11 188 164 115 --195 195 195 198 198 198 174 174 174 14 14 14 -- 2 2 6 22 22 22 116 116 116 116 116 116 -- 22 22 22 2 2 6 74 74 74 70 70 70 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 101 101 101 26 26 26 10 10 10 --138 138 138 190 190 190 174 154 114 156 107 11 --197 138 11 200 144 11 197 138 11 192 133 9 --180 123 7 190 142 34 190 178 144 187 187 187 --202 202 202 221 221 221 214 214 214 66 66 66 -- 2 2 6 2 2 6 50 50 50 62 62 62 -- 6 6 6 2 2 6 10 10 10 90 90 90 -- 50 50 50 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 34 34 34 -- 74 74 74 74 74 74 2 2 6 6 6 6 --144 144 144 198 198 198 190 190 190 178 166 146 --154 121 60 156 107 11 156 107 11 168 124 44 --174 154 114 187 187 187 190 190 190 210 210 210 --246 246 246 253 253 253 253 253 253 182 182 182 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 62 62 62 -- 74 74 74 34 34 34 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 10 10 10 22 22 22 54 54 54 -- 94 94 94 18 18 18 2 2 6 46 46 46 --234 234 234 221 221 221 190 190 190 190 190 190 --190 190 190 187 187 187 187 187 187 190 190 190 --190 190 190 195 195 195 214 214 214 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 -- 82 82 82 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 14 14 14 -- 86 86 86 54 54 54 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 46 46 46 90 90 90 -- 46 46 46 18 18 18 6 6 6 182 182 182 --253 253 253 246 246 246 206 206 206 190 190 190 --190 190 190 190 190 190 190 190 190 190 190 190 --206 206 206 231 231 231 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --202 202 202 14 14 14 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 42 42 42 86 86 86 42 42 42 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 14 14 14 38 38 38 74 74 74 66 66 66 -- 2 2 6 6 6 6 90 90 90 250 250 250 --253 253 253 253 253 253 238 238 238 198 198 198 --190 190 190 190 190 190 195 195 195 221 221 221 --246 246 246 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 82 82 82 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 78 78 78 70 70 70 34 34 34 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 34 34 34 66 66 66 78 78 78 6 6 6 -- 2 2 6 18 18 18 218 218 218 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --226 226 226 231 231 231 246 246 246 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 178 178 178 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 18 18 18 90 90 90 62 62 62 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 26 26 26 -- 58 58 58 90 90 90 18 18 18 2 2 6 -- 2 2 6 110 110 110 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 231 231 231 18 18 18 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 94 94 94 -- 54 54 54 26 26 26 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 22 22 22 50 50 50 -- 90 90 90 26 26 26 2 2 6 2 2 6 -- 14 14 14 195 195 195 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 242 242 242 54 54 54 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 -- 86 86 86 50 50 50 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 38 38 38 82 82 82 -- 34 34 34 2 2 6 2 2 6 2 2 6 -- 42 42 42 195 195 195 246 246 246 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 242 242 242 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 246 246 246 238 238 238 --226 226 226 231 231 231 101 101 101 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 38 38 38 82 82 82 42 42 42 14 14 14 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 26 26 26 62 62 62 66 66 66 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 70 70 70 170 170 170 206 206 206 234 234 234 --246 246 246 250 250 250 250 250 250 238 238 238 --226 226 226 231 231 231 238 238 238 250 250 250 --250 250 250 250 250 250 246 246 246 231 231 231 --214 214 214 206 206 206 202 202 202 202 202 202 --198 198 198 202 202 202 182 182 182 18 18 18 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 62 62 62 66 66 66 30 30 30 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 42 42 42 82 82 82 18 18 18 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 94 94 94 182 182 182 218 218 218 242 242 242 --250 250 250 253 253 253 253 253 253 250 250 250 --234 234 234 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --238 238 238 226 226 226 210 210 210 202 202 202 --195 195 195 195 195 195 210 210 210 158 158 158 -- 6 6 6 14 14 14 50 50 50 14 14 14 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 86 86 86 46 46 46 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 54 54 54 70 70 70 2 2 6 -- 2 2 6 10 10 10 2 2 6 22 22 22 --166 166 166 231 231 231 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --231 231 231 206 206 206 198 198 198 226 226 226 -- 94 94 94 2 2 6 6 6 6 38 38 38 -- 30 30 30 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 62 62 62 66 66 66 -- 26 26 26 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 74 74 74 50 50 50 2 2 6 -- 26 26 26 26 26 26 2 2 6 106 106 106 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 246 246 246 218 218 218 202 202 202 --210 210 210 14 14 14 2 2 6 2 2 6 -- 30 30 30 22 22 22 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 86 86 86 -- 42 42 42 14 14 14 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 90 90 90 22 22 22 2 2 6 -- 42 42 42 2 2 6 18 18 18 218 218 218 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 250 250 250 221 221 221 --218 218 218 101 101 101 2 2 6 14 14 14 -- 18 18 18 38 38 38 10 10 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 78 78 78 -- 58 58 58 22 22 22 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 54 54 54 82 82 82 2 2 6 26 26 26 -- 22 22 22 2 2 6 123 123 123 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --238 238 238 198 198 198 6 6 6 38 38 38 -- 58 58 58 26 26 26 38 38 38 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 78 78 78 30 30 30 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 30 30 30 -- 74 74 74 58 58 58 2 2 6 42 42 42 -- 2 2 6 22 22 22 231 231 231 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 246 246 246 46 46 46 38 38 38 -- 42 42 42 14 14 14 38 38 38 14 14 14 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 86 86 86 46 46 46 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 42 42 42 -- 90 90 90 18 18 18 18 18 18 26 26 26 -- 2 2 6 116 116 116 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 250 250 250 238 238 238 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 94 94 94 6 6 6 -- 2 2 6 2 2 6 10 10 10 34 34 34 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 10 10 10 26 26 26 66 66 66 -- 82 82 82 2 2 6 38 38 38 6 6 6 -- 14 14 14 210 210 210 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 246 246 246 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 144 144 144 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 42 42 42 74 74 74 30 30 30 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 42 42 42 90 90 90 -- 26 26 26 6 6 6 42 42 42 2 2 6 -- 74 74 74 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 242 242 242 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 182 182 182 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 10 10 10 86 86 86 38 38 38 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 26 26 26 66 66 66 82 82 82 -- 2 2 6 22 22 22 18 18 18 2 2 6 --149 149 149 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 206 206 206 2 2 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 86 86 86 46 46 46 14 14 14 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 18 18 18 46 46 46 86 86 86 18 18 18 -- 2 2 6 34 34 34 10 10 10 6 6 6 --210 210 210 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 221 221 221 6 6 6 -- 2 2 6 2 2 6 6 6 6 30 30 30 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 82 82 82 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 26 26 26 66 66 66 62 62 62 2 2 6 -- 2 2 6 38 38 38 10 10 10 26 26 26 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 238 238 238 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 6 6 6 -- 2 2 6 2 2 6 10 10 10 30 30 30 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 58 58 58 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 78 78 78 6 6 6 2 2 6 -- 2 2 6 46 46 46 14 14 14 42 42 42 --246 246 246 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 10 10 10 -- 2 2 6 2 2 6 22 22 22 14 14 14 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 62 62 62 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 74 74 74 2 2 6 2 2 6 -- 14 14 14 70 70 70 34 34 34 62 62 62 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 14 14 14 -- 2 2 6 2 2 6 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 62 62 62 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 54 54 54 62 62 62 2 2 6 2 2 6 -- 2 2 6 30 30 30 46 46 46 70 70 70 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 226 226 226 10 10 10 -- 2 2 6 6 6 6 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 58 58 58 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 58 58 58 62 62 62 2 2 6 2 2 6 -- 2 2 6 2 2 6 30 30 30 78 78 78 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 206 206 206 2 2 6 -- 22 22 22 34 34 34 18 14 6 22 22 22 -- 26 26 26 18 18 18 6 6 6 2 2 6 -- 2 2 6 82 82 82 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 26 26 26 -- 62 62 62 106 106 106 74 54 14 185 133 11 --210 162 10 121 92 8 6 6 6 62 62 62 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 158 158 158 18 18 18 -- 14 14 14 2 2 6 2 2 6 2 2 6 -- 6 6 6 18 18 18 66 66 66 38 38 38 -- 6 6 6 94 94 94 50 50 50 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 10 10 10 10 10 10 18 18 18 38 38 38 -- 78 78 78 142 134 106 216 158 10 242 186 14 --246 190 14 246 190 14 156 118 10 10 10 10 -- 90 90 90 238 238 238 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 230 190 --238 204 91 238 204 91 181 142 44 37 26 9 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 38 38 38 46 46 46 -- 26 26 26 106 106 106 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 22 22 22 -- 30 30 30 38 38 38 50 50 50 70 70 70 --106 106 106 190 142 34 226 170 11 242 186 14 --246 190 14 246 190 14 246 190 14 154 114 10 -- 6 6 6 74 74 74 226 226 226 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 228 184 62 --241 196 14 241 208 19 232 195 16 38 30 10 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 30 30 30 26 26 26 --203 166 17 154 142 90 66 66 66 26 26 26 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 38 38 38 58 58 58 -- 78 78 78 86 86 86 101 101 101 123 123 123 --175 146 61 210 150 10 234 174 13 246 186 14 --246 190 14 246 190 14 246 190 14 238 190 10 --102 78 10 2 2 6 46 46 46 198 198 198 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 224 178 62 --242 186 14 241 196 14 210 166 10 22 18 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 6 6 6 121 92 8 --238 202 15 232 195 16 82 82 82 34 34 34 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 38 38 38 70 70 70 154 122 46 --190 142 34 200 144 11 197 138 11 197 138 11 --213 154 11 226 170 11 242 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --225 175 15 46 32 6 2 2 6 22 22 22 --158 158 158 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 242 242 242 224 178 62 --239 182 13 236 186 11 213 154 11 46 32 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 61 42 6 225 175 15 --238 190 10 236 186 11 112 100 78 42 42 42 -- 14 14 14 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 54 54 54 154 122 46 213 154 11 --226 170 11 230 174 11 226 170 11 226 170 11 --236 178 12 242 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --241 196 14 184 144 12 10 10 10 2 2 6 -- 6 6 6 116 116 116 242 242 242 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 231 231 231 198 198 198 214 170 54 --236 178 12 236 178 12 210 150 10 137 92 6 -- 18 14 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 70 47 6 200 144 11 236 178 12 --239 182 13 239 182 13 124 112 88 58 58 58 -- 22 22 22 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 70 70 70 180 133 36 226 170 11 --239 182 13 242 186 14 242 186 14 246 186 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 232 195 16 98 70 6 2 2 6 -- 2 2 6 2 2 6 66 66 66 221 221 221 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 206 206 206 198 198 198 214 166 58 --230 174 11 230 174 11 216 158 10 192 133 9 --163 110 8 116 81 8 102 78 10 116 81 8 --167 114 7 197 138 11 226 170 11 239 182 13 --242 186 14 242 186 14 162 146 94 78 78 78 -- 34 34 34 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 30 30 30 78 78 78 190 142 34 226 170 11 --239 182 13 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 241 196 14 203 166 17 22 18 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 --218 218 218 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 206 206 206 198 198 198 202 162 69 --226 170 11 236 178 12 224 166 10 210 150 10 --200 144 11 197 138 11 192 133 9 197 138 11 --210 150 10 226 170 11 242 186 14 246 190 14 --246 190 14 246 186 14 225 175 15 124 112 88 -- 62 62 62 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 174 135 50 224 166 10 --239 182 13 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 241 196 14 139 102 15 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 78 78 78 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 214 214 214 198 198 198 190 150 46 --219 162 10 236 178 12 234 174 13 224 166 10 --216 158 10 213 154 11 213 154 11 216 158 10 --226 170 11 239 182 13 246 190 14 246 190 14 --246 190 14 246 190 14 242 186 14 206 162 42 --101 101 101 58 58 58 30 30 30 14 14 14 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 74 74 74 174 135 50 216 158 10 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 241 196 14 226 184 13 -- 61 42 6 2 2 6 2 2 6 2 2 6 -- 22 22 22 238 238 238 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 226 226 226 187 187 187 180 133 36 --216 158 10 236 178 12 239 182 13 236 178 12 --230 174 11 226 170 11 226 170 11 230 174 11 --236 178 12 242 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 186 14 239 182 13 --206 162 42 106 106 106 66 66 66 34 34 34 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 26 26 26 70 70 70 163 133 67 213 154 11 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 241 196 14 --190 146 13 18 14 6 2 2 6 2 2 6 -- 46 46 46 246 246 246 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 221 221 221 86 86 86 156 107 11 --216 158 10 236 178 12 242 186 14 246 186 14 --242 186 14 239 182 13 239 182 13 242 186 14 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --242 186 14 225 175 15 142 122 72 66 66 66 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 26 26 26 70 70 70 163 133 67 210 150 10 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --232 195 16 121 92 8 34 34 34 106 106 106 --221 221 221 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --242 242 242 82 82 82 18 14 6 163 110 8 --216 158 10 236 178 12 242 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 242 186 14 163 133 67 -- 46 46 46 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 163 133 67 210 150 10 --236 178 12 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --241 196 14 215 174 15 190 178 144 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 218 218 218 -- 58 58 58 2 2 6 22 18 6 167 114 7 --216 158 10 236 178 12 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 186 14 242 186 14 190 150 46 -- 54 54 54 22 22 22 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 38 38 38 86 86 86 180 133 36 213 154 11 --236 178 12 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 232 195 16 190 146 13 214 214 214 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 170 170 170 26 26 26 -- 2 2 6 2 2 6 37 26 9 163 110 8 --219 162 10 239 182 13 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 236 178 12 224 166 10 142 122 72 -- 46 46 46 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 109 106 95 192 133 9 224 166 10 --242 186 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --242 186 14 226 184 13 210 162 10 142 110 46 --226 226 226 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --198 198 198 66 66 66 2 2 6 2 2 6 -- 2 2 6 2 2 6 50 34 6 156 107 11 --219 162 10 239 182 13 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 242 186 14 --234 174 13 213 154 11 154 122 46 66 66 66 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 58 58 58 154 121 60 206 145 10 234 174 13 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 236 178 12 210 162 10 163 110 8 -- 61 42 6 138 138 138 218 218 218 250 250 250 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 210 210 210 144 144 144 66 66 66 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 61 42 6 163 110 8 --216 158 10 236 178 12 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 239 182 13 230 174 11 216 158 10 --190 142 34 124 112 88 70 70 70 38 38 38 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 62 62 62 168 124 44 206 145 10 224 166 10 --236 178 12 239 182 13 242 186 14 242 186 14 --246 186 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 236 178 12 216 158 10 175 118 6 -- 80 54 7 2 2 6 6 6 6 30 30 30 -- 54 54 54 62 62 62 50 50 50 38 38 38 -- 14 14 14 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 80 54 7 167 114 7 --213 154 11 236 178 12 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 242 186 14 239 182 13 239 182 13 --230 174 11 210 150 10 174 135 50 124 112 88 -- 82 82 82 54 54 54 34 34 34 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 158 118 36 192 133 9 200 144 11 --216 158 10 219 162 10 224 166 10 226 170 11 --230 174 11 236 178 12 239 182 13 239 182 13 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 230 174 11 210 150 10 163 110 8 --104 69 6 10 10 10 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 91 60 6 167 114 7 --206 145 10 230 174 11 242 186 14 246 190 14 --246 190 14 246 190 14 246 186 14 242 186 14 --239 182 13 230 174 11 224 166 10 213 154 11 --180 133 36 124 112 88 86 86 86 58 58 58 -- 38 38 38 22 22 22 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 34 34 34 70 70 70 138 110 50 158 118 36 --167 114 7 180 123 7 192 133 9 197 138 11 --200 144 11 206 145 10 213 154 11 219 162 10 --224 166 10 230 174 11 239 182 13 242 186 14 --246 186 14 246 186 14 246 186 14 246 186 14 --239 182 13 216 158 10 185 133 11 152 99 6 --104 69 6 18 14 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 80 54 7 152 99 6 --192 133 9 219 162 10 236 178 12 239 182 13 --246 186 14 242 186 14 239 182 13 236 178 12 --224 166 10 206 145 10 192 133 9 154 121 60 -- 94 94 94 62 62 62 42 42 42 22 22 22 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 18 18 18 34 34 34 58 58 58 78 78 78 --101 98 89 124 112 88 142 110 46 156 107 11 --163 110 8 167 114 7 175 118 6 180 123 7 --185 133 11 197 138 11 210 150 10 219 162 10 --226 170 11 236 178 12 236 178 12 234 174 13 --219 162 10 197 138 11 163 110 8 130 83 6 -- 91 60 6 10 10 10 2 2 6 2 2 6 -- 18 18 18 38 38 38 38 38 38 38 38 38 -- 38 38 38 38 38 38 38 38 38 38 38 38 -- 38 38 38 38 38 38 26 26 26 2 2 6 -- 2 2 6 6 6 6 70 47 6 137 92 6 --175 118 6 200 144 11 219 162 10 230 174 11 --234 174 13 230 174 11 219 162 10 210 150 10 --192 133 9 163 110 8 124 112 88 82 82 82 -- 50 50 50 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 22 22 22 34 34 34 -- 42 42 42 58 58 58 74 74 74 86 86 86 --101 98 89 122 102 70 130 98 46 121 87 25 --137 92 6 152 99 6 163 110 8 180 123 7 --185 133 11 197 138 11 206 145 10 200 144 11 --180 123 7 156 107 11 130 83 6 104 69 6 -- 50 34 6 54 54 54 110 110 110 101 98 89 -- 86 86 86 82 82 82 78 78 78 78 78 78 -- 78 78 78 78 78 78 78 78 78 78 78 78 -- 78 78 78 82 82 82 86 86 86 94 94 94 --106 106 106 101 101 101 86 66 34 124 80 6 --156 107 11 180 123 7 192 133 9 200 144 11 --206 145 10 200 144 11 192 133 9 175 118 6 --139 102 15 109 106 95 70 70 70 42 42 42 -- 22 22 22 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 10 10 10 -- 14 14 14 22 22 22 30 30 30 38 38 38 -- 50 50 50 62 62 62 74 74 74 90 90 90 --101 98 89 112 100 78 121 87 25 124 80 6 --137 92 6 152 99 6 152 99 6 152 99 6 --138 86 6 124 80 6 98 70 6 86 66 30 --101 98 89 82 82 82 58 58 58 46 46 46 -- 38 38 38 34 34 34 34 34 34 34 34 34 -- 34 34 34 34 34 34 34 34 34 34 34 34 -- 34 34 34 34 34 34 38 38 38 42 42 42 -- 54 54 54 82 82 82 94 86 76 91 60 6 --134 86 6 156 107 11 167 114 7 175 118 6 --175 118 6 167 114 7 152 99 6 121 87 25 --101 98 89 62 62 62 34 34 34 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 6 6 6 10 10 10 -- 18 18 18 22 22 22 30 30 30 42 42 42 -- 50 50 50 66 66 66 86 86 86 101 98 89 --106 86 58 98 70 6 104 69 6 104 69 6 --104 69 6 91 60 6 82 62 34 90 90 90 -- 62 62 62 38 38 38 22 22 22 14 14 14 -- 10 10 10 10 10 10 10 10 10 10 10 10 -- 10 10 10 10 10 10 6 6 6 10 10 10 -- 10 10 10 10 10 10 10 10 10 14 14 14 -- 22 22 22 42 42 42 70 70 70 89 81 66 -- 80 54 7 104 69 6 124 80 6 137 92 6 --134 86 6 116 81 8 100 82 52 86 86 86 -- 58 58 58 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 10 10 10 14 14 14 -- 18 18 18 26 26 26 38 38 38 54 54 54 -- 70 70 70 86 86 86 94 86 76 89 81 66 -- 89 81 66 86 86 86 74 74 74 50 50 50 -- 30 30 30 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 34 34 34 58 58 58 -- 82 82 82 89 81 66 89 81 66 89 81 66 -- 94 86 66 94 86 76 74 74 74 50 50 50 -- 26 26 26 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 6 6 6 14 14 14 18 18 18 -- 30 30 30 38 38 38 46 46 46 54 54 54 -- 50 50 50 42 42 42 30 30 30 18 18 18 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 26 26 26 -- 38 38 38 50 50 50 58 58 58 58 58 58 -- 54 54 54 42 42 42 30 30 30 18 18 18 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 6 6 6 10 10 10 14 14 14 18 18 18 -- 18 18 18 14 14 14 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 14 14 14 18 18 18 22 22 22 22 22 22 -- 18 18 18 14 14 14 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 23 30 36 44 54 65 57 72 88 44 54 65 6 12 15 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 31 41 52 -+103 134 161 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 -+82 108 129 8 14 16 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 17 24 30 126 162 196 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 161 203 243 92 119 140 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 154 195 235 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 138 174 208 21 27 33 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 70 96 117 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 49 59 70 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 3 6 52 62 74 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 -+82 108 129 149 191 231 170 212 252 170 212 252 170 212 252 129 165 199 82 108 129 149 191 231 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 37 48 59 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 21 13 4 31 23 12 0 2 0 0 2 0 105 75 32 155 111 43 23 15 7 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 6 9 3 10 13 146 188 228 170 212 252 170 212 252 170 212 252 157 198 239 0 6 9 -+0 2 0 52 62 74 170 212 252 170 212 252 154 195 235 0 6 9 0 2 0 55 66 77 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 151 193 233 17 24 30 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+10 12 8 23 15 7 139 99 44 206 148 61 67 49 21 0 2 0 125 92 35 206 148 61 -+15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 96 127 154 170 212 252 170 212 252 170 212 252 170 212 252 92 119 140 21 22 20 -+10 12 8 53 68 84 170 212 252 170 212 252 92 119 140 10 12 8 7 10 5 53 68 84 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 -+0 6 9 0 3 6 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 22 20 -+62 64 61 38 40 37 0 2 0 34 26 8 212 153 66 64 46 18 0 2 0 170 124 49 -+180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 65 87 102 115 117 114 -+43 44 42 88 115 136 170 212 252 170 212 252 68 83 99 108 110 107 60 62 59 88 115 136 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+80 98 121 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 10 12 8 56 58 55 95 96 94 178 180 177 215 217 214 198 200 197 -+158 160 156 138 140 137 82 83 81 0 2 0 64 46 18 228 167 73 23 15 7 41 31 10 -+250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 -+0 2 0 126 162 196 170 212 252 170 212 252 57 72 88 0 2 0 0 2 0 126 162 196 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+157 198 239 8 14 16 0 6 9 0 2 0 45 47 44 195 197 194 192 194 191 38 40 37 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 192 194 191 234 236 233 176 178 175 118 120 117 143 145 142 176 178 175 -+215 217 214 234 236 233 234 236 233 104 106 103 0 2 0 142 101 40 134 100 43 0 2 0 -+164 119 51 170 124 49 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 115 152 185 8 14 16 -+49 59 70 166 207 248 170 212 252 170 212 252 119 150 178 8 14 16 55 66 77 166 207 248 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 92 119 140 0 2 0 0 2 0 200 202 199 254 255 252 254 255 252 244 246 243 -+40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 38 40 37 234 236 233 234 236 233 234 236 233 135 137 134 215 217 214 171 173 170 -+141 142 139 138 140 137 138 140 137 135 137 134 31 32 30 3 6 2 212 153 66 15 9 7 -+78 58 25 248 178 79 41 31 10 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 3 6 21 27 33 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 154 195 235 0 6 9 82 83 81 254 255 252 254 255 252 254 255 252 254 255 252 -+188 190 187 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 62 64 61 234 236 233 234 236 233 234 236 233 198 200 197 131 133 130 198 200 197 -+232 234 231 234 236 233 234 236 233 234 236 233 152 154 151 0 2 0 147 105 44 67 49 21 -+23 15 7 250 179 73 158 114 46 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 61 76 92 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 154 195 235 103 134 161 80 98 121 -+52 62 74 18 22 24 0 2 0 3 10 13 38 45 51 80 98 121 151 193 233 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 109 141 168 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 -+226 228 225 65 66 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 43 44 42 234 236 233 234 236 233 234 236 233 234 236 233 131 133 130 192 194 191 -+152 154 151 141 142 139 141 142 139 141 142 139 158 160 156 3 6 2 82 62 28 129 95 39 -+0 2 0 206 148 61 248 178 79 21 13 4 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 96 115 138 -+170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 18 22 24 0 2 0 0 2 0 -+34 26 8 75 55 22 114 83 33 95 68 30 55 39 17 7 0 0 0 6 9 84 103 125 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 84 103 125 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 171 173 170 -+0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 18 20 17 234 236 233 234 236 233 234 236 233 234 236 233 138 140 137 178 180 177 -+226 228 225 234 236 233 234 236 233 234 236 233 231 233 230 45 47 44 23 15 7 190 136 56 -+0 2 0 147 105 44 250 179 73 64 46 18 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 126 162 196 0 2 0 26 20 13 190 136 56 245 175 76 -+250 179 73 161 117 49 164 119 51 245 175 76 250 179 73 206 148 61 75 55 22 0 2 0 -+126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 68 83 99 0 2 0 252 254 250 254 255 252 254 255 252 254 255 252 71 73 70 -+8 14 16 88 115 136 17 24 30 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 232 234 231 234 236 233 234 236 233 234 236 233 215 217 214 148 150 147 -+183 185 181 141 142 139 135 137 134 135 137 134 141 142 139 87 89 86 0 2 0 202 145 58 -+3 6 2 88 66 26 250 179 73 109 79 35 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 157 198 239 -+170 212 252 170 212 252 166 207 248 26 33 39 26 20 13 224 163 69 250 179 73 250 179 73 -+250 179 73 197 142 62 202 145 58 250 179 73 250 179 73 250 179 73 234 172 70 21 13 4 -+38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 52 62 74 21 22 20 254 255 252 254 255 252 254 255 252 254 255 252 21 22 20 -+49 59 70 170 212 252 166 207 248 91 123 149 8 14 16 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 215 217 214 234 236 233 234 236 233 234 236 233 234 236 233 123 125 122 -+188 190 187 229 231 228 234 236 233 234 236 233 222 224 221 118 120 117 0 2 0 168 123 54 -+34 26 8 67 49 21 250 179 73 134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 34 41 47 170 212 252 -+170 212 252 170 212 252 85 112 133 0 2 0 164 119 51 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 129 95 39 -+0 2 0 138 174 208 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 34 44 55 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 24 22 25 -+52 62 74 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 178 180 177 234 236 233 234 236 233 234 236 233 234 236 233 141 142 139 -+198 200 197 148 150 147 135 137 134 135 137 134 148 150 147 123 125 122 0 2 0 190 136 56 -+21 13 4 78 58 25 250 179 73 129 95 39 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 82 108 129 170 212 252 -+170 212 252 170 212 252 23 30 36 58 42 19 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 147 105 44 -+0 2 0 139 181 221 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 34 41 47 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 -+25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 6 9 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 91 93 90 234 236 233 234 236 233 234 236 233 234 236 233 126 127 125 -+169 171 168 222 224 221 234 236 233 229 231 228 178 180 177 71 73 70 0 2 0 212 153 66 -+0 2 0 95 68 30 250 179 73 119 87 37 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 138 174 208 170 212 252 -+170 212 252 154 195 235 0 2 0 125 92 35 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 119 87 37 -+0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 57 72 88 7 10 5 252 254 250 254 255 252 254 255 252 254 255 252 95 96 94 -+0 6 9 166 207 248 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 8 14 16 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 7 10 5 222 224 221 234 236 233 234 236 233 234 236 233 141 142 139 -+183 185 181 138 140 137 131 133 130 141 142 139 192 194 191 102 104 101 0 2 0 224 163 69 -+0 2 0 105 75 32 250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 27 33 170 212 252 170 212 252 -+170 212 252 115 152 185 0 2 0 180 132 57 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 10 12 8 -+38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 82 108 129 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 158 160 156 -+0 2 0 92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 141 142 139 234 236 233 234 236 233 234 236 233 131 133 130 -+185 187 183 231 233 230 222 224 221 158 160 156 138 140 137 48 50 48 3 6 2 250 179 73 -+134 100 43 206 148 61 218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 75 94 116 170 212 252 170 212 252 -+170 212 252 92 119 140 0 2 0 224 163 69 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 87 61 23 7 0 0 -+134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 109 141 168 0 2 0 178 180 177 254 255 252 254 255 252 254 255 252 252 254 250 -+39 43 45 10 16 18 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+88 115 136 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 45 47 44 234 236 233 234 236 233 234 236 233 131 133 130 -+148 150 147 138 140 137 148 150 147 210 212 209 152 154 151 26 27 25 29 21 8 250 179 73 -+250 179 73 234 172 70 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 170 212 252 -+170 212 252 103 134 161 0 2 0 202 145 58 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 238 175 73 75 55 22 0 2 0 75 102 123 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 140 177 211 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 -+183 185 181 0 2 0 75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 57 72 88 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 162 164 161 234 236 233 234 236 233 135 137 134 -+226 228 225 198 200 197 104 106 103 15 17 14 0 2 0 15 9 7 147 105 44 250 179 73 -+248 178 79 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 21 27 33 170 212 252 170 212 252 170 212 252 -+170 212 252 122 159 192 0 2 0 175 129 54 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 202 145 58 55 39 17 0 2 0 82 108 129 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 12 17 20 60 62 59 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 69 71 68 0 6 9 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 159 201 241 26 33 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 162 164 161 215 217 214 95 96 94 -+56 58 55 0 2 0 0 2 0 0 2 0 61 44 16 238 175 73 250 179 73 250 179 73 -+218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 88 115 136 170 212 252 170 212 252 170 212 252 -+170 212 252 143 185 225 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 212 153 66 95 68 30 0 2 0 8 14 16 103 134 161 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 68 83 99 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 -+254 255 252 210 212 209 0 6 9 53 68 84 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 126 162 196 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 23 15 7 250 179 73 250 179 73 250 179 73 -+250 179 73 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 166 207 248 0 2 0 52 36 13 158 114 46 180 132 57 161 117 49 119 87 37 -+41 31 10 0 2 0 0 2 0 72 87 103 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 115 152 185 0 2 0 152 154 151 254 255 252 238 241 237 85 87 84 -+229 231 228 254 255 252 99 101 98 0 2 0 126 162 196 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 -+250 179 73 105 75 32 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 32 39 45 0 2 0 57 72 88 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 85 112 133 12 17 20 0 2 0 0 2 0 0 2 0 0 2 0 -+34 41 47 92 110 133 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 166 207 248 6 12 15 71 73 70 254 255 252 229 231 228 0 2 0 -+141 142 139 254 255 252 231 233 230 10 12 8 34 44 55 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 154 195 235 6 12 15 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 125 92 35 250 179 73 250 179 73 -+250 179 73 180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 68 83 99 -+129 165 199 85 112 133 0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 126 162 196 119 156 189 134 170 204 149 191 231 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 57 72 88 3 6 2 242 244 240 254 255 252 35 37 34 -+78 80 77 254 255 252 254 255 252 128 130 127 0 2 0 105 137 164 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 91 123 149 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 55 39 17 250 179 73 250 179 73 -+250 179 73 245 175 76 7 10 5 0 2 0 44 54 65 103 134 161 161 203 243 170 212 252 -+170 212 252 21 27 33 25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 61 76 92 0 2 0 242 244 240 254 255 252 102 104 101 -+10 12 8 231 233 230 254 255 252 244 246 243 26 27 25 21 27 33 159 201 241 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 32 39 45 0 6 9 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 218 158 64 250 179 73 -+250 179 73 250 179 73 75 55 22 0 2 0 161 203 243 170 212 252 170 212 252 170 212 252 -+115 147 174 0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 159 201 241 146 188 228 -+140 177 211 134 170 204 146 188 228 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 17 24 30 62 64 61 254 255 252 254 255 252 215 217 214 -+0 2 0 102 104 101 254 255 252 254 255 252 166 168 165 0 2 0 72 87 103 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 75 32 250 179 73 -+250 179 73 250 179 73 150 108 46 0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 -+49 59 70 3 10 13 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 166 207 248 109 141 168 65 87 102 28 35 41 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 28 35 41 70 96 117 138 174 208 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 0 2 0 102 104 101 254 255 252 254 255 252 254 255 252 -+102 104 101 0 2 0 192 194 191 254 255 252 254 255 252 78 80 77 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 34 44 55 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 61 76 92 154 195 235 0 6 9 29 21 8 250 179 73 -+250 179 73 250 179 73 224 163 69 0 2 0 68 83 99 170 212 252 170 212 252 143 179 213 -+0 2 0 72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+161 203 243 96 115 138 17 24 30 0 2 0 0 2 0 45 47 44 102 104 101 123 125 122 -+138 140 137 143 145 142 115 117 114 82 83 81 43 44 42 0 2 0 0 2 0 32 39 45 -+126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 0 2 0 85 87 84 254 255 252 254 255 252 254 255 252 -+242 244 240 27 29 27 35 37 34 254 255 252 254 255 252 231 233 230 10 12 8 21 27 33 -+159 201 241 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 6 9 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 44 54 65 170 212 252 170 212 252 34 44 55 0 2 0 82 62 28 -+109 79 35 224 163 69 250 179 73 52 36 13 15 20 22 170 212 252 170 212 252 75 89 106 -+0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 -+25 32 38 0 2 0 40 41 39 155 157 153 238 241 237 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 115 117 114 18 20 17 -+0 2 0 68 83 99 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 52 62 74 7 10 5 234 236 233 254 255 252 254 255 252 -+254 255 252 195 197 194 102 104 101 254 255 252 254 255 252 254 255 252 162 164 161 0 2 0 -+72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 119 156 189 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 115 147 174 170 212 252 91 123 149 0 2 0 0 2 0 6 12 15 -+0 2 0 15 9 7 197 142 62 125 92 35 0 2 0 115 152 185 113 145 172 3 6 2 -+41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 113 145 172 0 6 9 -+10 12 8 155 157 153 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 232 234 231 -+87 89 86 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 115 152 185 0 2 0 138 140 137 254 255 252 254 255 252 -+254 255 252 254 255 252 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 65 66 64 -+0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 154 195 235 170 212 252 143 179 213 88 115 136 149 191 231 170 212 252 -+126 162 196 3 6 2 64 46 18 202 145 58 0 2 0 0 2 0 0 2 0 0 2 0 -+92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 143 179 213 3 10 13 27 29 27 -+215 217 214 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 155 157 153 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 23 30 36 27 29 27 249 251 248 254 255 252 -+254 255 252 188 190 187 7 10 5 226 228 225 254 255 252 254 255 252 254 255 252 231 233 230 -+7 10 5 21 27 33 159 201 241 170 212 252 103 134 161 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 55 66 77 11 4 3 250 179 73 24 17 10 0 2 0 0 2 0 0 2 0 -+143 185 225 170 212 252 170 212 252 170 212 252 159 201 241 28 35 41 7 10 5 200 202 199 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 155 157 153 0 2 0 55 66 77 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 96 127 154 0 2 0 158 160 156 254 255 252 -+254 255 252 192 194 191 0 2 0 176 178 175 254 255 252 254 255 252 254 255 252 254 255 252 -+141 142 139 0 2 0 72 87 103 129 165 199 0 6 9 0 6 9 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 12 17 20 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 -+138 174 208 17 24 30 29 21 8 250 179 73 101 72 28 0 2 0 0 2 0 32 39 45 -+170 212 252 170 212 252 170 212 252 170 212 252 57 72 88 0 2 0 152 154 151 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 108 110 107 0 2 0 115 152 185 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 18 22 24 40 41 39 254 255 252 -+254 255 252 232 234 231 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 10 12 8 0 2 0 8 14 16 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 41 51 62 61 76 92 34 44 55 3 10 13 -+0 2 0 11 4 3 164 119 51 250 179 73 175 129 54 0 2 0 0 2 0 82 108 129 -+170 212 252 170 212 252 170 212 252 98 129 156 0 2 0 95 96 94 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 238 241 237 18 20 17 25 32 38 166 207 248 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 85 112 133 0 2 0 188 190 187 -+254 255 252 254 255 252 198 200 197 242 244 240 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 120 122 119 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 6 9 7 0 0 -+31 23 12 202 145 58 250 179 73 250 179 73 238 175 73 0 2 0 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 28 35 41 31 32 30 244 246 243 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 85 112 133 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 0 2 0 148 150 147 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 222 224 221 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+7 0 0 234 172 70 250 179 73 250 179 73 250 179 73 34 26 8 0 2 0 149 191 231 -+170 212 252 170 212 252 129 165 199 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 48 50 48 3 10 13 146 188 228 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 0 2 0 118 120 117 -+254 255 252 254 255 252 254 255 252 169 171 168 231 233 230 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 170 124 49 250 179 73 250 179 73 250 179 73 48 33 15 6 12 15 170 212 252 -+170 212 252 170 212 252 65 87 102 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 195 197 194 0 2 0 84 103 125 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 3 10 13 85 87 84 -+254 255 252 254 255 252 234 236 233 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 99 101 98 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 95 68 30 250 179 73 250 179 73 250 179 73 34 26 8 34 44 55 170 212 252 -+170 212 252 163 205 246 8 14 16 62 64 61 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 35 37 34 34 44 55 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 26 33 39 60 62 59 -+254 255 252 254 255 252 238 241 237 0 2 0 108 110 107 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 158 160 156 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 23 15 7 248 178 79 250 179 73 245 175 76 0 2 0 63 78 94 170 212 252 -+170 212 252 109 141 168 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 104 106 103 0 2 0 -+154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 69 71 68 -+254 255 252 254 255 252 244 246 243 0 2 0 91 93 90 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 215 217 214 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 197 142 62 250 179 73 212 153 66 0 2 0 92 110 133 170 212 252 -+170 212 252 80 98 121 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 176 178 175 0 2 0 -+105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 8 14 16 87 89 86 -+254 255 252 254 255 252 254 255 252 40 41 39 21 22 20 252 254 250 254 255 252 254 255 252 -+254 255 252 254 255 252 252 254 250 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 125 92 35 250 179 73 170 124 49 0 2 0 113 145 172 170 212 252 -+170 212 252 53 68 84 15 17 14 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 242 244 240 0 2 0 -+63 78 94 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 0 2 0 104 106 103 -+254 255 252 254 255 252 254 255 252 123 125 122 0 2 0 166 168 165 254 255 252 254 255 252 -+254 255 252 254 255 252 234 236 233 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 7 0 0 52 36 13 250 179 73 129 95 39 0 2 0 143 179 213 170 212 252 -+170 212 252 32 39 45 48 50 48 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 60 62 59 -+18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 2 0 102 104 101 -+254 255 252 254 255 252 254 255 252 226 228 225 15 17 14 10 12 8 215 217 214 254 255 252 -+254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 88 66 26 29 21 8 0 2 0 166 207 248 170 212 252 -+170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 123 125 122 -+0 2 0 149 191 231 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 56 58 55 -+254 255 252 254 255 252 254 255 252 254 255 252 178 180 177 0 2 0 38 40 37 238 241 237 -+254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 7 0 0 0 2 0 161 203 243 170 212 252 -+149 191 231 0 2 0 123 125 122 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 141 142 139 -+0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 -+210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 120 122 119 0 2 0 21 22 20 -+143 145 142 244 246 243 219 221 218 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 149 191 231 170 212 252 -+129 165 199 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 155 157 153 -+0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 0 6 9 -+69 71 68 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 71 73 70 0 2 0 -+0 2 0 0 2 0 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 170 212 252 -+129 165 199 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 169 171 168 -+0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 75 94 116 -+0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 134 170 204 170 212 252 -+134 170 204 0 2 0 152 154 151 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 -+0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 -+44 54 65 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 35 37 34 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 -+138 174 208 0 2 0 143 145 142 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 198 200 197 -+0 2 0 103 134 161 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+157 198 239 28 35 41 0 2 0 188 190 187 254 255 252 252 254 250 3 6 2 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 115 152 185 170 212 252 -+143 179 213 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 -+0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 146 188 228 0 6 9 26 27 25 242 244 240 176 178 175 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 170 212 252 -+143 185 225 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 185 187 183 -+0 2 0 105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 163 205 246 0 2 0 0 2 0 102 104 101 60 62 59 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 80 98 121 170 212 252 -+149 191 231 0 2 0 118 120 117 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 143 145 142 -+0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 143 179 213 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 170 212 252 -+170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 108 110 107 -+0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 115 152 185 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 170 212 252 -+170 212 252 34 44 55 43 44 42 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 -+15 20 22 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 75 94 116 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 -+170 212 252 63 78 94 3 6 2 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 31 32 30 -+41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+161 203 243 6 12 15 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 -+170 212 252 88 115 136 0 2 0 210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 249 251 248 0 2 0 -+68 83 99 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+96 127 154 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 61 76 92 -+170 212 252 119 150 178 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 0 2 0 -+91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+28 35 41 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 -+146 188 228 143 185 225 0 2 0 126 127 125 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 85 87 84 0 6 9 -+154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 98 129 156 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+72 90 112 170 212 252 18 22 24 56 58 55 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 238 241 237 7 10 5 55 66 77 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 0 6 9 -+0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 122 159 192 72 87 103 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 113 145 172 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 139 181 221 8 14 16 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 18 22 24 109 141 168 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 12 17 20 166 207 248 -+170 212 252 170 212 252 170 212 252 170 212 252 146 188 228 23 30 36 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 101 72 28 202 145 58 -+180 132 57 0 2 0 38 45 51 3 10 13 69 71 68 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 200 202 199 0 2 0 75 89 106 170 212 252 -+170 212 252 170 212 252 170 212 252 109 141 168 8 14 16 0 2 0 21 13 4 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 7 0 0 0 2 0 101 72 28 218 158 64 250 179 73 250 179 73 -+250 179 73 139 99 44 0 2 0 8 14 16 0 2 0 238 241 237 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 244 246 243 38 40 37 3 10 13 139 181 221 170 212 252 -+170 212 252 161 203 243 66 80 97 0 2 0 31 23 12 191 142 60 248 183 74 180 132 57 -+44 34 15 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 23 15 7 190 136 56 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 150 108 46 0 2 0 0 2 0 82 83 81 222 224 221 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 102 104 101 0 2 0 98 129 156 170 212 252 163 205 246 -+98 129 156 23 30 36 0 2 0 82 62 28 234 172 70 248 183 74 248 183 74 248 183 74 -+248 183 74 158 114 46 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 64 46 18 109 79 35 150 108 46 224 163 69 250 179 73 -+250 179 73 250 179 73 250 179 73 158 114 46 0 2 0 0 2 0 3 6 2 115 117 114 -+234 236 233 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 176 178 175 0 2 0 57 72 88 146 188 228 80 98 121 8 14 16 -+0 2 0 24 17 10 158 114 46 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 242 178 77 58 42 19 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 0 2 0 67 49 21 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 95 68 30 0 2 0 0 2 0 -+0 2 0 52 54 51 108 110 107 162 164 161 219 221 218 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 -+219 221 218 178 180 177 18 20 17 6 12 15 26 33 39 0 2 0 0 2 0 52 36 13 -+164 119 51 242 178 77 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 242 178 77 -+187 138 56 175 129 54 158 114 46 82 62 28 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 78 58 25 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 234 172 70 142 101 40 -+44 34 15 10 12 8 0 2 0 0 2 0 0 2 0 18 20 17 60 62 59 71 73 70 -+82 83 81 95 96 94 104 106 103 118 120 117 115 117 114 78 80 77 40 41 39 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 44 34 15 105 75 32 191 142 60 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 105 75 32 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 187 138 56 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 142 101 40 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 206 148 61 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 161 117 49 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 228 167 73 250 179 73 -+238 175 73 190 136 56 158 114 46 234 172 70 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 147 105 44 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 67 49 21 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 -+31 23 12 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 21 13 4 -+0 2 0 0 2 0 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 -+134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 155 111 43 248 183 74 248 183 74 -+248 183 74 248 183 74 224 163 69 55 39 17 64 46 18 164 119 51 242 178 77 248 183 74 -+75 55 22 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 228 167 73 88 66 26 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 168 123 54 248 183 74 -+248 183 74 248 183 74 158 114 46 0 2 0 7 0 0 0 2 0 10 12 8 44 34 15 -+15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 29 21 8 250 179 73 250 179 73 158 114 46 15 14 3 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 175 129 54 -+248 183 74 248 183 74 114 83 33 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 29 21 8 147 105 44 58 42 19 0 2 0 7 0 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+105 75 32 218 158 64 23 15 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -diff --git a/drivers/video/logo/logo_linux_mono.pbm b/drivers/video/logo/logo_linux_mono.pbm -index 2f14d9f..3d3c358 100644 ---- a/drivers/video/logo/logo_linux_mono.pbm -+++ b/drivers/video/logo/logo_linux_mono.pbm -@@ -1,203 +1,159 @@ --P1 --# Standard black and white Linux logo --80 80 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 --1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 1 1 --1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 --1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 --0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 --1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 --0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 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 1 1 1 1 1 1 1 1 1 1 1 0 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 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 1 1 0 1 1 1 1 1 1 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 --1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 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 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 0 0 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 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 1 1 1 0 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 0 0 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 1 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 --1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 --1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 --1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 --1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 --1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -+P2 -+80 78 -+255 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 255 255 255 255 255 0 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 -+255 0 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 -+255 255 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 -+255 255 0 0 0 0 0 0 0 0 -+0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 -+255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 255 255 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 0 255 255 0 0 255 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 255 255 255 0 0 255 -+255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 255 -+255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 0 -+255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 -+0 255 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 -+0 255 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 -+0 0 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 255 255 255 -+255 0 0 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 255 0 0 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 -+255 0 0 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 0 0 255 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 255 255 255 -+255 255 0 0 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 255 255 255 255 0 255 255 255 -+255 255 255 0 0 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 0 255 255 255 -+255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 0 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 0 -+0 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 255 -+0 0 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -diff --git a/drivers/video/logo/logo_linux_vga16.ppm b/drivers/video/logo/logo_linux_vga16.ppm -index 1850c15..f279f97 100644 ---- a/drivers/video/logo/logo_linux_vga16.ppm -+++ b/drivers/video/logo/logo_linux_vga16.ppm -@@ -1,1604 +1,18724 @@ - P3 --# Standard 16-color Linux logo --80 80 --255 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 170 170 170 85 85 85 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 170 170 170 170 170 --170 170 170 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 170 170 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 170 170 170 255 255 255 255 255 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 255 255 255 170 170 170 170 170 170 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 0 0 0 0 0 0 255 255 255 -- 85 85 85 0 0 0 0 0 0 0 0 0 --255 255 255 170 170 170 0 0 0 85 85 85 --170 170 170 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 170 170 170 -- 85 85 85 0 0 0 0 0 0 0 0 0 --255 255 255 85 85 85 0 0 0 0 0 0 -- 85 85 85 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 0 0 0 0 0 0 170 170 170 -- 85 85 85 85 85 85 85 85 85 85 85 85 --255 255 255 85 85 85 0 0 0 0 0 0 -- 85 85 85 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 170 170 170 170 170 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 170 170 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 170 85 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 85 85 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 85 85 85 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 170 170 170 170 170 170 170 170 0 0 0 -- 0 0 0 0 0 0 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 170 170 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 170 170 170 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 170 170 170 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 170 170 170 --170 170 170 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 170 170 170 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 170 170 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 170 170 170 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 85 85 85 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 0 0 0 85 85 85 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 85 85 85 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 -- 0 0 0 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 85 85 85 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 85 85 85 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 170 170 170 -- 85 85 85 0 0 0 0 0 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 85 85 85 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 170 85 0 170 85 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 85 85 85 85 85 85 170 85 0 --170 85 0 170 85 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -+# CREATOR: GIMP PNM Filter Version 1.1 -+80 78 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -- cgit v1.2.3 From abea971649ac7e7e72893eb53aae2a6389a66106 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Wed, 20 Aug 2014 21:33:52 -0400 Subject: Rename all the kernel-depending packages. --- libre/acpi_call-libre-lts/PKGBUILD | 45 ----- libre/acpi_call-libre-lts/acpi_call.install | 14 -- libre/acpi_call-libre/PKGBUILD | 45 ----- libre/acpi_call-libre/acpi_call.install | 14 -- libre/acpi_call-parabola-grsec/PKGBUILD | 64 +++++++ libre/acpi_call-parabola-grsec/kmod.install | 14 ++ libre/acpi_call-parabola-lts/PKGBUILD | 64 +++++++ libre/acpi_call-parabola-lts/kmod.install | 14 ++ libre/acpi_call-parabola/PKGBUILD | 64 +++++++ libre/acpi_call-parabola/kmod.install | 14 ++ libre/bbswitch-libre/PKGBUILD | 38 ---- libre/bbswitch-libre/bbswitch.install | 12 -- libre/bbswitch-parabola-grsec/PKGBUILD | 58 ++++++ libre/bbswitch-parabola-grsec/kmod.install | 14 ++ libre/bbswitch-parabola-lts/PKGBUILD | 58 ++++++ libre/bbswitch-parabola-lts/kmod.install | 14 ++ libre/bbswitch-parabola/PKGBUILD | 58 ++++++ libre/bbswitch-parabola/kmod.install | 14 ++ libre/linux-libre-api-headers/PKGBUILD | 38 ++-- libre/linux-libre-firmware/PKGBUILD | 28 ++- libre/linux-libre-manpages/PKGBUILD | 16 +- libre/linux-libre-tools/PKGBUILD | 213 ++++++++++----------- libre/lirc-libre/PKGBUILD | 106 ---------- libre/lirc-libre/irexec.service | 11 -- libre/lirc-libre/lirc-utils.install | 13 -- libre/lirc-libre/lirc.install | 14 -- libre/lirc-libre/lirc.logrotate | 5 - libre/lirc-libre/lirc.tmpfiles | 1 - libre/lirc-libre/wpc8769l-build-fix.patch | 90 --------- libre/lirc-parabola-grsec/PKGBUILD | 136 +++++++++++++ libre/lirc-parabola-grsec/irexec.service | 11 ++ libre/lirc-parabola-grsec/kmod.install | 14 ++ libre/lirc-parabola-grsec/lirc-utils.install | 13 ++ libre/lirc-parabola-grsec/lirc.logrotate | 5 + libre/lirc-parabola-grsec/lirc.tmpfiles | 1 + libre/lirc-parabola-grsec/wpc8769l-build-fix.patch | 90 +++++++++ libre/lirc-parabola-lts/PKGBUILD | 136 +++++++++++++ libre/lirc-parabola-lts/irexec.service | 11 ++ libre/lirc-parabola-lts/kmod.install | 14 ++ libre/lirc-parabola-lts/lirc-utils.install | 13 ++ libre/lirc-parabola-lts/lirc.logrotate | 5 + libre/lirc-parabola-lts/lirc.tmpfiles | 1 + libre/lirc-parabola-lts/wpc8769l-build-fix.patch | 90 +++++++++ libre/lirc-parabola/PKGBUILD | 136 +++++++++++++ libre/lirc-parabola/irexec.service | 11 ++ libre/lirc-parabola/kmod.install | 14 ++ libre/lirc-parabola/lirc-utils.install | 13 ++ libre/lirc-parabola/lirc.logrotate | 5 + libre/lirc-parabola/lirc.tmpfiles | 1 + libre/lirc-parabola/wpc8769l-build-fix.patch | 90 +++++++++ libre/tp_smapi-libre-lts/PKGBUILD | 61 ------ libre/tp_smapi-libre-lts/tp_smapi-lts.install | 13 -- libre/tp_smapi-libre/PKGBUILD | 64 ------- libre/tp_smapi-libre/tp_smapi.install | 13 -- libre/tp_smapi-parabola-grsec/PKGBUILD | 80 ++++++++ libre/tp_smapi-parabola-grsec/kmod.install | 14 ++ libre/tp_smapi-parabola-lts/PKGBUILD | 80 ++++++++ libre/tp_smapi-parabola-lts/kmod.install | 14 ++ libre/tp_smapi-parabola/PKGBUILD | 80 ++++++++ libre/tp_smapi-parabola/kmod.install | 14 ++ libre/update-kernel-modules.sh | 28 +++ libre/vhba-module-libre/60-vhba.rules | 1 - libre/vhba-module-libre/PKGBUILD | 45 ----- libre/vhba-module-libre/vhba-module.install | 22 --- libre/vhba-module-parabola-grsec/60-vhba.rules | 1 + libre/vhba-module-parabola-grsec/PKGBUILD | 61 ++++++ .../vhba-module-parabola-grsec/vhba-module.install | 20 ++ libre/vhba-module-parabola-lts/60-vhba.rules | 1 + libre/vhba-module-parabola-lts/PKGBUILD | 61 ++++++ libre/vhba-module-parabola-lts/vhba-module.install | 20 ++ libre/vhba-module-parabola/60-vhba.rules | 1 + libre/vhba-module-parabola/PKGBUILD | 61 ++++++ libre/vhba-module-parabola/vhba-module.install | 20 ++ 73 files changed, 1956 insertions(+), 782 deletions(-) delete mode 100644 libre/acpi_call-libre-lts/PKGBUILD delete mode 100644 libre/acpi_call-libre-lts/acpi_call.install delete mode 100644 libre/acpi_call-libre/PKGBUILD delete mode 100644 libre/acpi_call-libre/acpi_call.install create mode 100644 libre/acpi_call-parabola-grsec/PKGBUILD create mode 100644 libre/acpi_call-parabola-grsec/kmod.install create mode 100644 libre/acpi_call-parabola-lts/PKGBUILD create mode 100644 libre/acpi_call-parabola-lts/kmod.install create mode 100644 libre/acpi_call-parabola/PKGBUILD create mode 100644 libre/acpi_call-parabola/kmod.install delete mode 100644 libre/bbswitch-libre/PKGBUILD delete mode 100644 libre/bbswitch-libre/bbswitch.install create mode 100644 libre/bbswitch-parabola-grsec/PKGBUILD create mode 100644 libre/bbswitch-parabola-grsec/kmod.install create mode 100644 libre/bbswitch-parabola-lts/PKGBUILD create mode 100644 libre/bbswitch-parabola-lts/kmod.install create mode 100644 libre/bbswitch-parabola/PKGBUILD create mode 100644 libre/bbswitch-parabola/kmod.install delete mode 100644 libre/lirc-libre/PKGBUILD delete mode 100644 libre/lirc-libre/irexec.service delete mode 100644 libre/lirc-libre/lirc-utils.install delete mode 100644 libre/lirc-libre/lirc.install delete mode 100644 libre/lirc-libre/lirc.logrotate delete mode 100644 libre/lirc-libre/lirc.tmpfiles delete mode 100644 libre/lirc-libre/wpc8769l-build-fix.patch create mode 100644 libre/lirc-parabola-grsec/PKGBUILD create mode 100644 libre/lirc-parabola-grsec/irexec.service create mode 100644 libre/lirc-parabola-grsec/kmod.install create mode 100644 libre/lirc-parabola-grsec/lirc-utils.install create mode 100644 libre/lirc-parabola-grsec/lirc.logrotate create mode 100644 libre/lirc-parabola-grsec/lirc.tmpfiles create mode 100644 libre/lirc-parabola-grsec/wpc8769l-build-fix.patch create mode 100644 libre/lirc-parabola-lts/PKGBUILD create mode 100644 libre/lirc-parabola-lts/irexec.service create mode 100644 libre/lirc-parabola-lts/kmod.install create mode 100644 libre/lirc-parabola-lts/lirc-utils.install create mode 100644 libre/lirc-parabola-lts/lirc.logrotate create mode 100644 libre/lirc-parabola-lts/lirc.tmpfiles create mode 100644 libre/lirc-parabola-lts/wpc8769l-build-fix.patch create mode 100644 libre/lirc-parabola/PKGBUILD create mode 100644 libre/lirc-parabola/irexec.service create mode 100644 libre/lirc-parabola/kmod.install create mode 100644 libre/lirc-parabola/lirc-utils.install create mode 100644 libre/lirc-parabola/lirc.logrotate create mode 100644 libre/lirc-parabola/lirc.tmpfiles create mode 100644 libre/lirc-parabola/wpc8769l-build-fix.patch delete mode 100644 libre/tp_smapi-libre-lts/PKGBUILD delete mode 100644 libre/tp_smapi-libre-lts/tp_smapi-lts.install delete mode 100644 libre/tp_smapi-libre/PKGBUILD delete mode 100644 libre/tp_smapi-libre/tp_smapi.install create mode 100644 libre/tp_smapi-parabola-grsec/PKGBUILD create mode 100644 libre/tp_smapi-parabola-grsec/kmod.install create mode 100644 libre/tp_smapi-parabola-lts/PKGBUILD create mode 100644 libre/tp_smapi-parabola-lts/kmod.install create mode 100644 libre/tp_smapi-parabola/PKGBUILD create mode 100644 libre/tp_smapi-parabola/kmod.install create mode 100755 libre/update-kernel-modules.sh delete mode 100644 libre/vhba-module-libre/60-vhba.rules delete mode 100644 libre/vhba-module-libre/PKGBUILD delete mode 100644 libre/vhba-module-libre/vhba-module.install create mode 100644 libre/vhba-module-parabola-grsec/60-vhba.rules create mode 100644 libre/vhba-module-parabola-grsec/PKGBUILD create mode 100644 libre/vhba-module-parabola-grsec/vhba-module.install create mode 100644 libre/vhba-module-parabola-lts/60-vhba.rules create mode 100644 libre/vhba-module-parabola-lts/PKGBUILD create mode 100644 libre/vhba-module-parabola-lts/vhba-module.install create mode 100644 libre/vhba-module-parabola/60-vhba.rules create mode 100644 libre/vhba-module-parabola/PKGBUILD create mode 100644 libre/vhba-module-parabola/vhba-module.install diff --git a/libre/acpi_call-libre-lts/PKGBUILD b/libre/acpi_call-libre-lts/PKGBUILD deleted file mode 100644 index 184c5dec1..000000000 --- a/libre/acpi_call-libre-lts/PKGBUILD +++ /dev/null @@ -1,45 +0,0 @@ -# $Id: PKGBUILD 115349 2014-07-09 09:06:25Z fyan $ -# Maintainer (Arch): Maxime Gauduin -# Contributor (Arch): mortzu -# Contributor (Arch): fnord0 -# Maintainer: André Silva - -_pkgname=acpi_call-lts -pkgname=acpi_call-libre-lts -pkgver=1.1.0 -pkgrel=7 -_extramodules=extramodules-3.14-libre-lts -pkgdesc='A linux kernel module that enables calls to ACPI methods through /proc/acpi/call (built for the linux-libre-lts kernel package)' -arch=('i686' 'x86_64') -url="http://github.com/mkottman/${_pkgname%-*}" -license=('GPL') -depends=('linux-libre-lts>=3.14.11') -makedepends=('linux-libre-lts-headers>=3.14.11') -replaces=("${_pkgname}") -conflicts=("${_pkgname}") -provides=("${_pkgname%-*}" "${_pkgname}=${pkgver}") -install="${_pkgname%-*}.install" -source=("${url}/archive/v${pkgver}.tar.gz") -sha256sums=('d0d14b42944282724fca76f57d598eed794ef97448f387d1c489d85ad813f2f0') - -build() { - cd ${_pkgname%-*}-${pkgver} - - _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" - - make KVERSION="${_kernver}" -} - -package() { - cd ${_pkgname%-*}-${pkgver} - - install -dm 755 "${pkgdir}"/usr/lib/{modules/${_extramodules},modules-load.d} - install -m 644 ${_pkgname%-*}.ko "${pkgdir}"/usr/lib/modules/${_extramodules}/ - gzip "${pkgdir}"/usr/lib/modules/${_extramodules}/${_pkgname%-*}.ko - echo ${_pkgname%-*} > "${pkgdir}"/usr/lib/modules-load.d/${_pkgname}.conf - - install -dm 755 "${pkgdir}"/usr/share/${_pkgname} - cp -dr --no-preserve='ownership' {examples,support} "${pkgdir}"/usr/share/${_pkgname}/ -} - -# vim: ts=2 sw=2 et: diff --git a/libre/acpi_call-libre-lts/acpi_call.install b/libre/acpi_call-libre-lts/acpi_call.install deleted file mode 100644 index 890b0dfeb..000000000 --- a/libre/acpi_call-libre-lts/acpi_call.install +++ /dev/null @@ -1,14 +0,0 @@ -post_install() { - _extramodules=extramodules-3.14-libre-lts - depmod $(cat /usr/lib/modules/${_extramodules}/version) -} - -post_upgrade() { - post_install -} - -post_remove() { - post_install -} - -# vim: ts=2 sw=2 et: diff --git a/libre/acpi_call-libre/PKGBUILD b/libre/acpi_call-libre/PKGBUILD deleted file mode 100644 index 8fa5a4279..000000000 --- a/libre/acpi_call-libre/PKGBUILD +++ /dev/null @@ -1,45 +0,0 @@ -# $Id: PKGBUILD 116819 2014-08-04 07:10:28Z tpowa $ -# Maintainer (Arch): Maxime Gauduin -# Contributor (Arch): mortzu -# Contributor (Arch): fnord0 -# Maintainer: André Silva - -_pkgname=acpi_call -pkgname=acpi_call-libre -pkgver=1.1.0 -pkgrel=11 -_extramodules=extramodules-3.16-libre -pkgdesc='A linux kernel module that enables calls to ACPI methods through /proc/acpi/call (built for the linux-libre kernel package)' -arch=('i686' 'x86_64') -url="http://github.com/mkottman/${_pkgname}" -license=('GPL') -depends=('linux-libre>=3.16' 'linux-libre<3.17') -makedepends=('linux-libre-headers>=3.16' 'linux-libre-headers<3.17') -replaces=("${_pkgname}") -conflicts=("${_pkgname}") -provides=("${_pkgname}=${pkgver}") -install="${_pkgname}.install" -source=("${url}/archive/v${pkgver}.tar.gz") -sha256sums=('d0d14b42944282724fca76f57d598eed794ef97448f387d1c489d85ad813f2f0') - -build() { - cd ${_pkgname}-${pkgver} - - _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" - - make KVERSION="${_kernver}" -} - -package() { - cd ${_pkgname}-${pkgver} - - install -dm 755 "${pkgdir}"/usr/lib/{modules/${_extramodules},modules-load.d} - install -m 644 ${_pkgname}.ko "${pkgdir}"/usr/lib/modules/${_extramodules} - gzip "${pkgdir}"/usr/lib/modules/${_extramodules}/${_pkgname}.ko - echo ${_pkgname} > "${pkgdir}"/usr/lib/modules-load.d/${_pkgname}.conf - - install -dm 755 "${pkgdir}"/usr/share/${_pkgname} - cp -dr --no-preserve='ownership' {examples,support} "${pkgdir}"/usr/share/${_pkgname}/ -} - -# vim: ts=2 sw=2 et: diff --git a/libre/acpi_call-libre/acpi_call.install b/libre/acpi_call-libre/acpi_call.install deleted file mode 100644 index 7c2497c99..000000000 --- a/libre/acpi_call-libre/acpi_call.install +++ /dev/null @@ -1,14 +0,0 @@ -post_install() { - _extramodules=extramodules-3.16-libre - depmod $(cat /usr/lib/modules/${_extramodules}/version) -} - -post_upgrade() { - post_install -} - -post_remove() { - post_install -} - -# vim: ts=2 sw=2 et: diff --git a/libre/acpi_call-parabola-grsec/PKGBUILD b/libre/acpi_call-parabola-grsec/PKGBUILD new file mode 100644 index 000000000..af2e44bf2 --- /dev/null +++ b/libre/acpi_call-parabola-grsec/PKGBUILD @@ -0,0 +1,64 @@ +# $Id: PKGBUILD 116819 2014-08-04 07:10:28Z tpowa $ +# Maintainer (Arch): Maxime Gauduin +# Contributor (Arch): mortzu +# Contributor (Arch): fnord0 +# Maintainer: André Silva +# Contributor: Luke Shumaker + +# Kernel info +_basekernel=3.15 +_kernelname=-grsec + +# Source info +_pkgname=acpi_call +pkgver=1.1.0 +pkgdesc="A linux kernel module that enables calls to ACPI methods through /proc/acpi/call (built for the linux-libre${_kernelname} kernel package)" +url="http://github.com/mkottman/${_pkgname}" +license=('GPL') +source=("${url}/archive/v${pkgver}.tar.gz") +sha256sums=('d0d14b42944282724fca76f57d598eed794ef97448f387d1c489d85ad813f2f0') + +# Package info +pkgrel=12.${_basekernel/./} +arch=('i686' 'x86_64') +install='kmod.install' +_replaces=("${_pkgname}" "${_pkgname}-libre") + +# Generic (you shouldn't have to modify any of these variables) +pkgname=${_pkgname}-parabola${_kernelname} +_toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) +_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") +makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") +replaces=( "${_replaces[@]/%/${_kernelname}}") +conflicts=("${_replaces[@]/%/${_kernelname}}") +provides=( "${_replaces[@]/%/${_kernelname}=${_pkgver}}") +if [[ -n "${_kernelname}" ]]; then + provides+=("${_pkgname}-parabola=${pkgver}") # pkgname without _kernelname +fi + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + make KVERSION="${_kernver}" +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + # Set the correct extramodules directory for install + cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" + true && install=${install}.pkg + sed -r "s/(_extramodules=).*/\1${_extramodules}/" -i "${startdir}/${install}" + + # Actually install + install -dm 755 "${pkgdir}"/usr/lib/{modules/${_extramodules},modules-load.d} + install -m 644 ${_pkgname}.ko "${pkgdir}"/usr/lib/modules/${_extramodules} + gzip "${pkgdir}"/usr/lib/modules/${_extramodules}/${_pkgname}.ko + echo ${_pkgname} > "${pkgdir}"/usr/lib/modules-load.d/${pkgname}.conf + + install -dm 755 "${pkgdir}"/usr/share/${pkgname} + cp -dr --no-preserve='ownership' {examples,support} "${pkgdir}"/usr/share/${pkgname}/ +} diff --git a/libre/acpi_call-parabola-grsec/kmod.install b/libre/acpi_call-parabola-grsec/kmod.install new file mode 100644 index 000000000..d4bd8cb34 --- /dev/null +++ b/libre/acpi_call-parabola-grsec/kmod.install @@ -0,0 +1,14 @@ +post_install() { + _extramodules=THIS_IS_AUTOMATICALLY_SET_BY_PKGBUILD + depmod $(cat /usr/lib/modules/${_extramodules}/version) +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} + +# vim: ts=2 sw=2 et: diff --git a/libre/acpi_call-parabola-lts/PKGBUILD b/libre/acpi_call-parabola-lts/PKGBUILD new file mode 100644 index 000000000..8f03cbfb5 --- /dev/null +++ b/libre/acpi_call-parabola-lts/PKGBUILD @@ -0,0 +1,64 @@ +# $Id: PKGBUILD 116819 2014-08-04 07:10:28Z tpowa $ +# Maintainer (Arch): Maxime Gauduin +# Contributor (Arch): mortzu +# Contributor (Arch): fnord0 +# Maintainer: André Silva +# Contributor: Luke Shumaker + +# Kernel info +_basekernel=3.14 +_kernelname=-lts + +# Source info +_pkgname=acpi_call +pkgver=1.1.0 +pkgdesc="A linux kernel module that enables calls to ACPI methods through /proc/acpi/call (built for the linux-libre${_kernelname} kernel package)" +url="http://github.com/mkottman/${_pkgname}" +license=('GPL') +source=("${url}/archive/v${pkgver}.tar.gz") +sha256sums=('d0d14b42944282724fca76f57d598eed794ef97448f387d1c489d85ad813f2f0') + +# Package info +pkgrel=12.${_basekernel/./} +arch=('i686' 'x86_64') +install='kmod.install' +_replaces=("${_pkgname}" "${_pkgname}-libre") + +# Generic (you shouldn't have to modify any of these variables) +pkgname=${_pkgname}-parabola${_kernelname} +_toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) +_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") +makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") +replaces=( "${_replaces[@]/%/${_kernelname}}") +conflicts=("${_replaces[@]/%/${_kernelname}}") +provides=( "${_replaces[@]/%/${_kernelname}=${_pkgver}}") +if [[ -n "${_kernelname}" ]]; then + provides+=("${_pkgname}-parabola=${pkgver}") # pkgname without _kernelname +fi + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + make KVERSION="${_kernver}" +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + # Set the correct extramodules directory for install + cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" + true && install=${install}.pkg + sed -r "s/(_extramodules=).*/\1${_extramodules}/" -i "${startdir}/${install}" + + # Actually install + install -dm 755 "${pkgdir}"/usr/lib/{modules/${_extramodules},modules-load.d} + install -m 644 ${_pkgname}.ko "${pkgdir}"/usr/lib/modules/${_extramodules} + gzip "${pkgdir}"/usr/lib/modules/${_extramodules}/${_pkgname}.ko + echo ${_pkgname} > "${pkgdir}"/usr/lib/modules-load.d/${pkgname}.conf + + install -dm 755 "${pkgdir}"/usr/share/${pkgname} + cp -dr --no-preserve='ownership' {examples,support} "${pkgdir}"/usr/share/${pkgname}/ +} diff --git a/libre/acpi_call-parabola-lts/kmod.install b/libre/acpi_call-parabola-lts/kmod.install new file mode 100644 index 000000000..d4bd8cb34 --- /dev/null +++ b/libre/acpi_call-parabola-lts/kmod.install @@ -0,0 +1,14 @@ +post_install() { + _extramodules=THIS_IS_AUTOMATICALLY_SET_BY_PKGBUILD + depmod $(cat /usr/lib/modules/${_extramodules}/version) +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} + +# vim: ts=2 sw=2 et: diff --git a/libre/acpi_call-parabola/PKGBUILD b/libre/acpi_call-parabola/PKGBUILD new file mode 100644 index 000000000..480e8d48a --- /dev/null +++ b/libre/acpi_call-parabola/PKGBUILD @@ -0,0 +1,64 @@ +# $Id: PKGBUILD 116819 2014-08-04 07:10:28Z tpowa $ +# Maintainer (Arch): Maxime Gauduin +# Contributor (Arch): mortzu +# Contributor (Arch): fnord0 +# Maintainer: André Silva +# Contributor: Luke Shumaker + +# Kernel info +_basekernel=3.16 +_kernelname= + +# Source info +_pkgname=acpi_call +pkgver=1.1.0 +pkgdesc="A linux kernel module that enables calls to ACPI methods through /proc/acpi/call (built for the linux-libre${_kernelname} kernel package)" +url="http://github.com/mkottman/${_pkgname}" +license=('GPL') +source=("${url}/archive/v${pkgver}.tar.gz") +sha256sums=('d0d14b42944282724fca76f57d598eed794ef97448f387d1c489d85ad813f2f0') + +# Package info +pkgrel=12.${_basekernel/./} +arch=('i686' 'x86_64') +install='kmod.install' +_replaces=("${_pkgname}" "${_pkgname}-libre") + +# Generic (you shouldn't have to modify any of these variables) +pkgname=${_pkgname}-parabola${_kernelname} +_toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) +_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") +makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") +replaces=( "${_replaces[@]/%/${_kernelname}}") +conflicts=("${_replaces[@]/%/${_kernelname}}") +provides=( "${_replaces[@]/%/${_kernelname}=${_pkgver}}") +if [[ -n "${_kernelname}" ]]; then + provides+=("${_pkgname}-parabola=${pkgver}") # pkgname without _kernelname +fi + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + make KVERSION="${_kernver}" +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + # Set the correct extramodules directory for install + cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" + true && install=${install}.pkg + sed -r "s/(_extramodules=).*/\1${_extramodules}/" -i "${startdir}/${install}" + + # Actually install + install -dm 755 "${pkgdir}"/usr/lib/{modules/${_extramodules},modules-load.d} + install -m 644 ${_pkgname}.ko "${pkgdir}"/usr/lib/modules/${_extramodules} + gzip "${pkgdir}"/usr/lib/modules/${_extramodules}/${_pkgname}.ko + echo ${_pkgname} > "${pkgdir}"/usr/lib/modules-load.d/${pkgname}.conf + + install -dm 755 "${pkgdir}"/usr/share/${pkgname} + cp -dr --no-preserve='ownership' {examples,support} "${pkgdir}"/usr/share/${pkgname}/ +} diff --git a/libre/acpi_call-parabola/kmod.install b/libre/acpi_call-parabola/kmod.install new file mode 100644 index 000000000..d4bd8cb34 --- /dev/null +++ b/libre/acpi_call-parabola/kmod.install @@ -0,0 +1,14 @@ +post_install() { + _extramodules=THIS_IS_AUTOMATICALLY_SET_BY_PKGBUILD + depmod $(cat /usr/lib/modules/${_extramodules}/version) +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} + +# vim: ts=2 sw=2 et: diff --git a/libre/bbswitch-libre/PKGBUILD b/libre/bbswitch-libre/PKGBUILD deleted file mode 100644 index e333c4ef3..000000000 --- a/libre/bbswitch-libre/PKGBUILD +++ /dev/null @@ -1,38 +0,0 @@ -# $Id: PKGBUILD 116821 2014-08-04 07:12:07Z tpowa $ -# Maintainer (Arch): Sven-Hendrik Haase -# Contributor (Arch): M0Rf30 -# Contributor (Arch): Samsagax -# Maintainer: André Silva - -_pkgname=bbswitch -pkgname=bbswitch-libre -pkgver=0.8 -_extramodules=extramodules-3.16-libre # Don't forget to update bbswitch.install -pkgrel=15 -pkgdesc="Kernel module allowing to switch dedicated graphics card on Optimus laptops (built for the linux-libre kernel package)" -arch=('i686' 'x86_64' 'mips64el') -url=("http://github.com/Bumblebee-Project/bbswitch") -license=('GPL') -depends=('linux-libre>=3.16' 'linux-libre<3.17') -makedepends=('linux-libre-headers>=3.16' 'linux-libre-headers<3.17') -replaces=($_pkgname) -conflicts=($_pkgname) -provides=($_pkgname=$pkgver) -install=bbswitch.install -source=("https://github.com/Bumblebee-Project/bbswitch/archive/v${pkgver}.tar.gz") -md5sums=('5b116b31ace3604ddf9d1fc1f4bc5807') - -build() { - cd ${srcdir}/${_pkgname}-${pkgver} - - _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" - - make KDIR=/lib/modules/${_kernver}/build -} - -package() { - cd ${srcdir}/${_pkgname}-${pkgver} - - install -Dm644 bbswitch.ko "${pkgdir}"/usr/lib/modules/${_extramodules}/bbswitch.ko - gzip "${pkgdir}/usr/lib/modules/${_extramodules}/bbswitch.ko" -} diff --git a/libre/bbswitch-libre/bbswitch.install b/libre/bbswitch-libre/bbswitch.install deleted file mode 100644 index 06a68a267..000000000 --- a/libre/bbswitch-libre/bbswitch.install +++ /dev/null @@ -1,12 +0,0 @@ -post_install() { - EXTRAMODULES='extramodules-3.16-libre' - depmod $(cat /usr/lib/modules/$EXTRAMODULES/version) -} - -post_upgrade() { - post_install -} - -post_remove() { - post_install -} diff --git a/libre/bbswitch-parabola-grsec/PKGBUILD b/libre/bbswitch-parabola-grsec/PKGBUILD new file mode 100644 index 000000000..7d2ea7c48 --- /dev/null +++ b/libre/bbswitch-parabola-grsec/PKGBUILD @@ -0,0 +1,58 @@ +# $Id: PKGBUILD 116821 2014-08-04 07:12:07Z tpowa $ +# Maintainer (Arch): Sven-Hendrik Haase +# Contributor (Arch): M0Rf30 +# Contributor (Arch): Samsagax +# Maintainer: André Silva +# Contributor: Luke Shumaker + +# Kernel info +_basekernel=3.15 +_kernelname=-grsec + +# Source info +_pkgname=bbswitch +pkgver=0.8 +pkgdesc="Kernel module allowing to switch dedicated graphics card on Optimus laptops (built for the linux-libre${_kernelname} kernel package)" +url="http://github.com/Bumblebee-Project/bbswitch" +license=('GPL') +source=("https://github.com/Bumblebee-Project/bbswitch/archive/v${pkgver}.tar.gz") +md5sums=('5b116b31ace3604ddf9d1fc1f4bc5807') + +# Package info +pkgrel=16.${_basekernel/./} +arch=('i686' 'x86_64') +install='kmod.install' + +# Generic (you shouldn't have to modify any of these variables) +pkgname=${_pkgname}-parabola${_kernelname} +_toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) +_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") +makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") +replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability +conflicts=("${_pkgname}${_kernelname}") # for Arch-compatability +provides=( "${_pkgname}${_kernelname}=${pkgver}") # for Arch-compatability +if [[ -n "${_kernelname}" ]]; then + provides+=("${_pkgname}-parabola=${pkgver}") # pkgname without _kernelname +fi + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + make KDIR=/lib/modules/${_kernver}/build +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + # Set the correct extramodules directory for install + cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" + true && install=${install}.pkg + sed -r "s/(_extramodules=).*/\1${_extramodules}/" -i "${startdir}/${install}" + + # Actually install + install -Dm644 bbswitch.ko "${pkgdir}"/usr/lib/modules/${_extramodules}/bbswitch.ko + gzip "${pkgdir}/usr/lib/modules/${_extramodules}/bbswitch.ko" +} diff --git a/libre/bbswitch-parabola-grsec/kmod.install b/libre/bbswitch-parabola-grsec/kmod.install new file mode 100644 index 000000000..d4bd8cb34 --- /dev/null +++ b/libre/bbswitch-parabola-grsec/kmod.install @@ -0,0 +1,14 @@ +post_install() { + _extramodules=THIS_IS_AUTOMATICALLY_SET_BY_PKGBUILD + depmod $(cat /usr/lib/modules/${_extramodules}/version) +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} + +# vim: ts=2 sw=2 et: diff --git a/libre/bbswitch-parabola-lts/PKGBUILD b/libre/bbswitch-parabola-lts/PKGBUILD new file mode 100644 index 000000000..59cf046ab --- /dev/null +++ b/libre/bbswitch-parabola-lts/PKGBUILD @@ -0,0 +1,58 @@ +# $Id: PKGBUILD 116821 2014-08-04 07:12:07Z tpowa $ +# Maintainer (Arch): Sven-Hendrik Haase +# Contributor (Arch): M0Rf30 +# Contributor (Arch): Samsagax +# Maintainer: André Silva +# Contributor: Luke Shumaker + +# Kernel info +_basekernel=3.14 +_kernelname=-lts + +# Source info +_pkgname=bbswitch +pkgver=0.8 +pkgdesc="Kernel module allowing to switch dedicated graphics card on Optimus laptops (built for the linux-libre${_kernelname} kernel package)" +url="http://github.com/Bumblebee-Project/bbswitch" +license=('GPL') +source=("https://github.com/Bumblebee-Project/bbswitch/archive/v${pkgver}.tar.gz") +md5sums=('5b116b31ace3604ddf9d1fc1f4bc5807') + +# Package info +pkgrel=16.${_basekernel/./} +arch=('i686' 'x86_64') +install='kmod.install' + +# Generic (you shouldn't have to modify any of these variables) +pkgname=${_pkgname}-parabola${_kernelname} +_toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) +_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") +makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") +replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability +conflicts=("${_pkgname}${_kernelname}") # for Arch-compatability +provides=( "${_pkgname}${_kernelname}=${pkgver}") # for Arch-compatability +if [[ -n "${_kernelname}" ]]; then + provides+=("${_pkgname}-parabola=${pkgver}") # pkgname without _kernelname +fi + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + make KDIR=/lib/modules/${_kernver}/build +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + # Set the correct extramodules directory for install + cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" + true && install=${install}.pkg + sed -r "s/(_extramodules=).*/\1${_extramodules}/" -i "${startdir}/${install}" + + # Actually install + install -Dm644 bbswitch.ko "${pkgdir}"/usr/lib/modules/${_extramodules}/bbswitch.ko + gzip "${pkgdir}/usr/lib/modules/${_extramodules}/bbswitch.ko" +} diff --git a/libre/bbswitch-parabola-lts/kmod.install b/libre/bbswitch-parabola-lts/kmod.install new file mode 100644 index 000000000..d4bd8cb34 --- /dev/null +++ b/libre/bbswitch-parabola-lts/kmod.install @@ -0,0 +1,14 @@ +post_install() { + _extramodules=THIS_IS_AUTOMATICALLY_SET_BY_PKGBUILD + depmod $(cat /usr/lib/modules/${_extramodules}/version) +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} + +# vim: ts=2 sw=2 et: diff --git a/libre/bbswitch-parabola/PKGBUILD b/libre/bbswitch-parabola/PKGBUILD new file mode 100644 index 000000000..83f37239b --- /dev/null +++ b/libre/bbswitch-parabola/PKGBUILD @@ -0,0 +1,58 @@ +# $Id: PKGBUILD 116821 2014-08-04 07:12:07Z tpowa $ +# Maintainer (Arch): Sven-Hendrik Haase +# Contributor (Arch): M0Rf30 +# Contributor (Arch): Samsagax +# Maintainer: André Silva +# Contributor: Luke Shumaker + +# Kernel info +_basekernel=3.16 +_kernelname= + +# Source info +_pkgname=bbswitch +pkgver=0.8 +pkgdesc="Kernel module allowing to switch dedicated graphics card on Optimus laptops (built for the linux-libre${_kernelname} kernel package)" +url="http://github.com/Bumblebee-Project/bbswitch" +license=('GPL') +source=("https://github.com/Bumblebee-Project/bbswitch/archive/v${pkgver}.tar.gz") +md5sums=('5b116b31ace3604ddf9d1fc1f4bc5807') + +# Package info +pkgrel=16.${_basekernel/./} +arch=('i686' 'x86_64') +install='kmod.install' + +# Generic (you shouldn't have to modify any of these variables) +pkgname=${_pkgname}-parabola${_kernelname} +_toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) +_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") +makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") +replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability +conflicts=("${_pkgname}${_kernelname}") # for Arch-compatability +provides=( "${_pkgname}${_kernelname}=${pkgver}") # for Arch-compatability +if [[ -n "${_kernelname}" ]]; then + provides+=("${_pkgname}-parabola=${pkgver}") # pkgname without _kernelname +fi + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + make KDIR=/lib/modules/${_kernver}/build +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + # Set the correct extramodules directory for install + cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" + true && install=${install}.pkg + sed -r "s/(_extramodules=).*/\1${_extramodules}/" -i "${startdir}/${install}" + + # Actually install + install -Dm644 bbswitch.ko "${pkgdir}"/usr/lib/modules/${_extramodules}/bbswitch.ko + gzip "${pkgdir}/usr/lib/modules/${_extramodules}/bbswitch.ko" +} diff --git a/libre/bbswitch-parabola/kmod.install b/libre/bbswitch-parabola/kmod.install new file mode 100644 index 000000000..d4bd8cb34 --- /dev/null +++ b/libre/bbswitch-parabola/kmod.install @@ -0,0 +1,14 @@ +post_install() { + _extramodules=THIS_IS_AUTOMATICALLY_SET_BY_PKGBUILD + depmod $(cat /usr/lib/modules/${_extramodules}/version) +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} + +# vim: ts=2 sw=2 et: diff --git a/libre/linux-libre-api-headers/PKGBUILD b/libre/linux-libre-api-headers/PKGBUILD index 245282994..88f017199 100644 --- a/libre/linux-libre-api-headers/PKGBUILD +++ b/libre/linux-libre-api-headers/PKGBUILD @@ -1,54 +1,58 @@ # $Id: PKGBUILD 211667 2014-04-23 02:10:08Z allan $ # Maintainer (Arch): Allan McRae # Maintainer: André Silva +# Contributor: Luke Shumaker # toolchain build order: linux-libre-api-headers->glibc->binutils->gcc->binutils->glibc pkgname=linux-libre-api-headers -_basekernel=3.14 -_sublevel=1 -pkgver=${_basekernel}.${_sublevel} +_pkgbasever=3.14-gnu +_pkgver=3.14.1-gnu + +_srcname=linux-${_pkgbasever%-*} +pkgver=${_pkgver//-/.} pkgrel=1 pkgdesc="Kernel headers sanitized for use in userspace" -arch=('i686' 'x86_64' 'mips64el') +arch=('i686' 'x86_64') url="http://www.gnu.org/software/libc" license=('GPL2') -provides=("linux-api-headers=${pkgver}") +provides=( "linux-api-headers=${pkgver}") conflicts=('linux-api-headers') -replaces=('linux-api-headers') -source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gnu/linux-libre-${_basekernel}-gnu.tar.xz" - "http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/patch-${_basekernel}-gnu-${pkgver}-gnu.xz" +replaces=( 'linux-api-headers') +source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/linux-libre-${_pkgver}.tar.xz" + "http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/patch-${_pkgbasever}-${_pkgver}.xz" linux-3.14-xattr_header.patch) md5sums=('c108ec52eeb2a9b9ddbb8d12496ff25f' '2b4862b3c76011e66e536f18fbf0fb27' '22926521588b2e95f3c2a2cb428e7cf9') prepare() { - cd ${srcdir}/linux-${_basekernel} + cd "${srcdir}/${_srcname}" - if [ "${_basekernel}" != "${pkgver}" ]; then - patch -p1 -i "${srcdir}/patch-${_basekernel}-gnu-${pkgver}-gnu" + # add upstream patch + if [ "${_pkgbasever}" != "${_pkgver}" ]; then + patch -p1 -i "${srcdir}/patch-${_pkgbasever}-${_pkgver}" fi # fix xattr.h dual inclusion issues # https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/patch/?id=ea1a8217 - patch -p1 -i $srcdir/linux-3.14-xattr_header.patch + patch -p1 -i "$srcdir"/linux-3.14-xattr_header.patch } build() { - cd ${srcdir}/linux-${_basekernel} + cd "${srcdir}/${_srcname}" make mrproper make headers_check } package() { - cd ${srcdir}/linux-${_basekernel} - make INSTALL_HDR_PATH=${pkgdir}/usr headers_install + cd "${srcdir}/${_srcname}" + make INSTALL_HDR_PATH="${pkgdir}"/usr headers_install # use headers from libdrm - rm -r ${pkgdir}/usr/include/drm + rm -r "${pkgdir}"/usr/include/drm # clean-up unnecessary files generated during install - find ${pkgdir} \( -name .install -o -name ..install.cmd \) -delete + find "${pkgdir}" \( -name .install -o -name ..install.cmd \) -delete } diff --git a/libre/linux-libre-firmware/PKGBUILD b/libre/linux-libre-firmware/PKGBUILD index 6f11508e9..7634b5110 100644 --- a/libre/linux-libre-firmware/PKGBUILD +++ b/libre/linux-libre-firmware/PKGBUILD @@ -1,10 +1,14 @@ # Maintainer: André Silva # Contributor: Márcio Silva +# Contributor: Luke Shumaker pkgname=linux-libre-firmware -pkgver=3.16 +_pkgver=3.16-gnu + +_srcname=linux-${_pkgver%-*} +pkgver=${_pkgver//-/.} pkgrel=1 -pkgdesc='Free firmware files for Linux-libre' +pkgdesc='Firmware files for Linux-libre' arch=('any') url=('http://linux-libre.fsfla.org/') license=('GPL2') @@ -38,24 +42,14 @@ replaces=('linux-firmware' 'rt2x00-rt61-fw' 'rt2x00-rt71w-fw' 'amd-ucode') -source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/$pkgver-gnu/linux-libre-$pkgver-gnu.tar.xz") +source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/linux-libre-${_pkgver}.tar.xz") sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218') package() { + cd "${srcdir}/${_srcname}" - # create firmware folder to put the free firmware files there - install -d -m755 $pkgdir/usr/lib/firmware - - cd $srcdir/linux-$pkgver - - # compile free firmware files - make INSTALL_FW_PATH=$pkgdir/usr/lib/firmware firmware_install - - # create licenses folder to put the licenses files there - install -d -m755 $pkgdir/usr/share/licenses/$pkgname - - # move WHENCE file to linux-firmware license folder - cd $srcdir/linux-$pkgver - install -m644 firmware/WHENCE $pkgdir/usr/share/licenses/$pkgname + install -d -m755 "$pkgdir"/usr/lib/firmware + make INSTALL_FW_PATH="$pkgdir"/usr/lib/firmware firmware_install + install -Dm644 firmware/WHENCE $pkgdir/usr/share/licenses/$pkgname } diff --git a/libre/linux-libre-manpages/PKGBUILD b/libre/linux-libre-manpages/PKGBUILD index 088f6c6c1..1a96051e3 100644 --- a/libre/linux-libre-manpages/PKGBUILD +++ b/libre/linux-libre-manpages/PKGBUILD @@ -2,11 +2,15 @@ # Maintainer (Arch): Tobias Powalowski # Maintainer (Arch): Thomas Baechler # Maintainer: André Silva +# Contributor: Luke Shumaker pkgname=linux-libre-manpages -pkgver=3.14 +_pkgver=3.14-gnu + +_srcname=linux-${_pkgver%-*} +pkgver=${_pkgver//-/.} pkgrel=1 -pkgdesc="Kernel hackers manual - Section 9 manpages that comes with the Linux-libre kernel" +pkgdesc="Kernel hackers manual - Section 9 manpages that come with the Linux-libre kernel" arch=('any') url="http://linux-libre.fsfla.org/" license=('GPL2') @@ -14,18 +18,16 @@ makedepends=('xmlto' 'docbook-xsl') replaces=('kernel26-manpages' 'kernel26-libre-manpages' 'linux-manpages') conflicts=('kernel26-manpages' 'kernel26-libre-manpages' 'linux-manpages') provides=('kernel26-manpages' 'linux-manpages') -source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/linux-libre-${pkgver}-gnu.tar.xz") +source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/linux-libre-${_pkgver}.tar.xz") sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b') build() { - cd "${srcdir}/linux-$pkgver" + cd "${srcdir}/${_srcname}" make mandocs } package() { install -d "${pkgdir}/usr/share/man/man9/" - install "${srcdir}"/linux-$pkgver/Documentation/DocBook/man/*.9.gz \ + install -m644 "${srcdir}"/${_srcname}/Documentation/DocBook/man/*.9.gz \ "${pkgdir}/usr/share/man/man9/" - - find "${pkgdir}" -type f -exec chmod 644 {} \; } diff --git a/libre/linux-libre-tools/PKGBUILD b/libre/linux-libre-tools/PKGBUILD index 5ff82d377..bb54168dc 100644 --- a/libre/linux-libre-tools/PKGBUILD +++ b/libre/linux-libre-tools/PKGBUILD @@ -1,42 +1,45 @@ # $Id: PKGBUILD 116876 2014-08-05 00:19:20Z seblu $ # Maintainer (Arch): Sébastien Luttringer # Maintainer: André Silva +# Contributor: Luke Shumaker pkgbase=linux-libre-tools -pkgname=( - 'acpidump-libre' - 'cgroup_event_listener-libre' - 'cpupower-libre' - 'libtraceevent-libre' - 'linux-libre-tools-meta' - 'perf-libre' - 'tmon-libre' - 'usbip-libre' - 'x86_energy_perf_policy-libre' +_pkgname=( + 'acpidump' + 'cgroup_event_listener' + 'cpupower' + 'libtraceevent' + 'perf' + 'tmon' + 'usbip' + 'x86_energy_perf_policy' ) -_basekernel=3.16 -#_sublevel=7 -#_pkgver=$_basekernel.$_sublevel -pkgver=$_basekernel +pkgname=("$pkgbase" "${_pkgname[@]/#/${pkgbase}-}") + +_pkgbasever=3.16-gnu +_pkgver=3.16-gnu + +_srcname=linux-${_pkgbasever%-*} +pkgver=${_pkgver//-/.} pkgrel=1 license=('GPL2') -arch=('i686' 'x86_64' 'mips64el') +arch=('i686' 'x86_64') url='http://linux-libre.fsfla.org/' options=('!strip') -# split packages need all package dependencies set manually in makedepends -# kernel source deps + makedepends=('asciidoc' 'xmlto') -# perf-libre deps -makedepends+=('perl' 'python2' 'libnewt' 'elfutils' 'libunwind' 'numactl') -# cpupower-libre deps -makedepends+=('pciutils') -# usbip-libre deps -makedepends+=('glib2' 'sysfsutils' 'udev') -# tmon-libre deps -makedepends+=('ncurses') +# split packages need all package dependencies set manually in makedepends +declare -A _depends +_depends[perf]='perl python2 libnewt elfutils libunwind numactl' +_depends[cpupower]='pciutils' +_depends[usbip]='glib2 sysfsutils libsystemd' +makedepends+=(systemd) # libsystemd for runtime, systemd for make. IDK, it's what Arch does +_depends[tmon]='ncurses' +makedepends+=(${_depends[@]}) + groups=("$pkgbase") -source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/$_basekernel-gnu/linux-libre-$_basekernel-gnu.tar.xz" - #"http://linux-libre.fsfla.org/pub/linux-libre/releases/$_pkgver-gnu/patch-$_basekernel-gnu-$_pkgver-gnu.xz" +source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/linux-libre-${_pkgbasever}.tar.xz" + #"http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/patch-${_pkgbasever}-${_pkgver}.xz" 'cpupower.default' 'cpupower.systemd' 'cpupower.service' @@ -54,25 +57,28 @@ sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218' '7547815bb761d49d198b85f95011535713c2ed4a004f249a9cf6ba985af8c4ed') prepare() { - cd linux-$pkgver - # apply stable patching set - if (( NOEXTRACT == 0 )) && [[ -e "$srcdir"/patch-$_basekernel-gnu-$_pkgver-gnu ]]; then - msg2 'Applying stable patch set' - patch -Np1 -i "$srcdir"/patch-$_basekernel-gnu-$_pkgver-gnu + cd "${srcdir}/${_srcname}" + + # add upstream patch + if [ "${_pkgbasever}" != "${_pkgver}" ]; then + patch -p1 -i "${srcdir}/patch-${_pkgbasever}-${_pkgver}" fi + patch -N -p1 -i "$srcdir/01-fix-perf-python.patch" patch -N -p1 -i "$srcdir/02-parabola-paths.patch" patch -N -p1 -i "$srcdir/03-fix-tmon-ltinfo.patch" } build() { - msg2 'libtraceevent-libre' - pushd linux-$pkgver/tools/lib/traceevent + cd "${srcdir}/${_srcname}" + + msg2 'libtraceevent' + pushd $_srcname/tools/lib/traceevent make popd - msg2 'perf-libre' - pushd linux-$pkgver/tools/perf + msg2 'perf' + pushd $_srcname/tools/perf make \ WERROR=0 \ DESTDIR="$pkgdir/usr" \ @@ -84,20 +90,20 @@ build() { all man popd - msg2 'cpupower-libre' - pushd linux-$pkgver/tools/power/cpupower + msg2 'cpupower' + pushd $_srcname/tools/power/cpupower # we cannot use --as-needed #LDFLAGS=${LDFLAGS:+"$LDFLAGS,--no-as-needed"} make VERSION=$pkgver-$pkgrel popd - msg2 'x86_energy_perf_policy-libre' - pushd linux-$pkgver/tools/power/x86/x86_energy_perf_policy + msg2 'x86_energy_perf_policy' + pushd $_srcname/tools/power/x86/x86_energy_perf_policy make popd - msg2 'usbip-libre' - pushd linux-$pkgver/drivers/staging/usbip/userspace + msg2 'usbip' + pushd $_srcname/drivers/staging/usbip/userspace # fix missing man page sed -i 's/usbip_bind_driver.8//' Makefile.am ./autogen.sh @@ -105,62 +111,45 @@ build() { make popd - msg2 'tmon-libre' - pushd linux-$pkgver/tools/thermal/tmon + msg2 'tmon' + pushd $_srcname/tools/thermal/tmon make popd - msg2 'acpidump-libre' - pushd linux-$pkgver/tools/power/acpi + msg2 'acpidump' + pushd $_srcname/tools/power/acpi make popd - msg2 'cgroup_event_listener-libre' - pushd linux-$pkgver/tools/cgroup + msg2 'cgroup_event_listener' + pushd $_srcname/tools/cgroup make popd } -package_linux-libre-tools-meta() { - pkgdesc='Linux kernel tools meta package' +_package_meta() { + pkgdesc='Linux-libre kernel tools meta package' groups=() - depends=( - 'acpidump-libre' - 'cgroup_event_listener-libre' - 'cpupower-libre' - 'libtraceevent-libre' - 'linux-libre-tools-meta' - 'perf-libre' - 'tmon-libre' - 'usbip-libre' - 'x86_energy_perf_policy-libre' - ) - replaces=('linux-tools-meta') - conflicts=('linux-tools-meta') - provides=("linux-tools-meta=$pkgver") + depends=("${_pkgname[@]/#/${pkgbase}-}") + replaces=( linux{,-libre}-tools-meta) + conflicts=(linux{,-libre}-tools-meta) + provides=( linux{,-libre}-tools-meta=$pkgver) } -package_libtraceevent-libre() { - pkgdesc='Linux kernel trace event library' +_package_libtraceevent() { + pkgdesc='Linux-libre kernel trace event library' depends=('glibc') - replaces=('libtraceevent') - conflicts=('libtraceevent') - provides=("libtraceevent=$pkgver") - cd linux-$pkgver/tools/lib/traceevent + cd $_srcname/tools/lib/traceevent install -dm 755 "$pkgdir/usr/lib" install -m 644 libtraceevent.a libtraceevent.so "$pkgdir/usr/lib" } -package_perf-libre() { - pkgdesc='Linux kernel performance auditing tool' - depends=('perl' 'python2' 'libnewt' 'elfutils' 'libunwind' 'binutils' - 'numactl') - replaces=('perf') - conflicts=('perf') - provides=("perf=$pkgver") +_package_perf() { + pkgdesc='Linux-libre kernel performance auditing tool' + depends=('binutils') - cd linux-$pkgver/tools/perf + cd $_srcname/tools/perf make \ WERROR=0 \ DESTDIR="$pkgdir/usr" \ @@ -176,16 +165,15 @@ package_perf-libre() { rm -r usr/etc } -package_cpupower-libre() { - pkgdesc='Linux kernel tool to examine and tune power saving related features of your processor' +_package_cpupower() { + pkgdesc='Linux-libre kernel tool to examine and tune power saving related features of your processor' backup=('etc/default/cpupower') - depends=('bash' 'pciutils') - replaces=('cpupower' 'cpufrequtils') - conflicts=('cpupower' 'cpufrequtils') - provides=("cpupower=$pkgver") + depends=('bash') + replaces=('cpufrequtils') + conflicts=('cpufrequtils') install=cpupower.install - pushd linux-$pkgver/tools/power/cpupower + pushd $_srcname/tools/power/cpupower make \ DESTDIR="$pkgdir" \ sbindir='/usr/bin' \ @@ -199,26 +187,19 @@ package_cpupower-libre() { install -Dm 755 cpupower.systemd "$pkgdir/usr/lib/systemd/scripts/cpupower" } -package_x86_energy_perf_policy-libre() { +_package_x86_energy_perf_policy() { pkgdesc='Read or write MSR_IA32_ENERGY_PERF_BIAS' depends=('glibc') - replaces=('x86_energy_perf_policy') - conflicts=('x86_energy_perf_policy') - provides=("x86_energy_perf_policy=$pkgver") - cd linux-$pkgver/tools/power/x86/x86_energy_perf_policy + cd $_srcname/tools/power/x86/x86_energy_perf_policy install -Dm 755 x86_energy_perf_policy "$pkgdir/usr/bin/x86_energy_perf_policy" install -Dm 644 x86_energy_perf_policy.8 "$pkgdir/usr/share/man/man8/x86_energy_perf_policy.8" } -package_usbip-libre() { - pkgdesc='An USB device sharing system over IP network' - depends=('glib2' 'sysfsutils' 'libsystemd') - replaces=('usbip') - conflicts=('usbip') - provides=("usbip=$pkgver") +_package_usbip() { + pkgdesc='A USB device sharing system over IP network' - pushd linux-$pkgver/drivers/staging/usbip/userspace + pushd $_srcname/drivers/staging/usbip/userspace make install DESTDIR="$pkgdir" popd # module loading @@ -228,39 +209,43 @@ package_usbip-libre() { install -Dm 644 usbipd.service "$pkgdir/usr/lib/systemd/system/usbipd.service" } -package_tmon-libre() { - pkgdesc='Monitoring and Testing Tool for Linux kernel thermal subsystem' - depends=('glibc' 'ncurses') - replaces=('tmon') - conflicts=('tmon') - provides=("tmon=$pkgver") +_package_tmon() { + pkgdesc='Monitoring and Testing Tool for Linux-libre kernel thermal subsystem' + depends=('glibc') - cd linux-$pkgver/tools/thermal/tmon + cd $_srcname/tools/thermal/tmon make install INSTALL_ROOT="$pkgdir" } -package_acpidump-libre() { +_package_acpidump() { pkgdesc='Dump system ACPI tables to an ASCII file' depends=('glibc') - replaces=('acpidump') - conflicts=('acpidump' 'iasl') - provides=("acpidump=$pkgver") + conflicts=('iasl') - cd linux-$pkgver/tools/power/acpi + cd $_srcname/tools/power/acpi make install sbindir=/usr/bin mandir=/usr/share/man DESTDIR="$pkgdir" #install -Dm755 acpidump "$pkgdir/usr/bin/acpidump" #install -Dm644 acpidump.8 "$pkgdir/usr/share/man/man8/acpidump.8" } -package_cgroup_event_listener-libre() { +_package_cgroup_event_listener() { pkgdesc='Simple listener of cgroup events' depends=('glibc') - replaces=('cgroup_event_listener') - conflicts=('cgroup_event_listener') - provides=("cgroup_event_listener=$pkgver") - cd linux-$pkgver/tools/cgroup + cd $_srcname/tools/cgroup install -Dm755 cgroup_event_listener "$pkgdir/usr/bin/cgroup_event_listener" } +eval "package_${pkgbase}() { _package_meta; }" +for _p in "${_pkgname[@]}"; do + eval " + package_${pkgbase}-${_p}() { + _package_${_p} + depends+=(${_depends[${_p}]}) + replaces+=( ${_p}{,-libre}) + conflicts+=(${_p}{,-libre}) + provides+=( ${_p}{,-libre}=${pkgver}) + }" +done + # vim:set ts=2 sw=2 et: diff --git a/libre/lirc-libre/PKGBUILD b/libre/lirc-libre/PKGBUILD deleted file mode 100644 index 7d296b088..000000000 --- a/libre/lirc-libre/PKGBUILD +++ /dev/null @@ -1,106 +0,0 @@ -# $Id: PKGBUILD 220120 2014-08-16 22:32:11Z lfleischer $ -# Maintainer (Arch): Paul Mattal -# Maintainer: André Silva - -_pkgbase=lirc -pkgbase=lirc-libre -pkgname=('lirc-libre' 'lirc-libre-utils') -_pkgver=0.9.1a -[[ $_pkgver =~ [a-z]$ ]] && pkgver="${_pkgver:0:-1}.${_pkgver: -1}" || pkgver="$_pkgver" -pkgrel=1 -epoch=1 -_extramodules=extramodules-3.16-libre -arch=('i686' 'x86_64' 'mips64el') -url="http://www.lirc.org/" -license=('GPL') -# NOTICE: Don't forget to bump version in depends in package_lirc()! -makedepends=('help2man' 'linux-libre>=3.16' 'linux-libre<3.17' 'linux-libre-headers>=3.16' 'linux-libre-headers<3.17' 'alsa-lib' 'libx11' 'libftdi-compat' 'libirman' 'python2') -options=('!makeflags' '!strip') -source=("http://prdownloads.sourceforge.net/${_pkgbase}/${_pkgbase}-${_pkgver}.tar.bz2" - "wpc8769l-build-fix.patch" - lirc.logrotate - irexec.service - lirc.tmpfiles) -md5sums=('1f1fac162ed309dd50f307e96a292957' - '9ec33169b3407f74264062d7679dd269' - '3deb02604b37811d41816e9b4385fcc3' - '32df3b9bc859565d6acf5f0e5b747083' - 'febf25c154a7d36f01159e84f26c2d9a') - -prepare() { - cd "${srcdir}/lirc-${_pkgver}" - - patch -Np1 -i "${srcdir}/wpc8769l-build-fix.patch" - - sed -i '/AC_PATH_XTRA/d' configure.ac - sed -e 's/@X_CFLAGS@//g' \ - -e 's/@X_LIBS@//g' \ - -e 's/@X_PRE_LIBS@//g' \ - -e 's/@X_EXTRA_LIBS@//g' -i Makefile.am tools/Makefile.am - - libtoolize - autoreconf -} - -build() { - cd "${srcdir}/lirc-${_pkgver}" - _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" - - PYTHON=python2 ./configure --enable-sandboxed --prefix=/usr \ - --with-driver=all --with-kerneldir="/usr/lib/modules/${_kernver}/build/" \ - --with-moduledir="/usr/lib/modules/${_kernver}/kernel/drivers/misc" \ - --sbindir=/usr/bin --with-transmitter - - # Remove drivers already in kernel - sed -e "s:lirc_dev::" -e "s:lirc_bt829::" -e "s:lirc_igorplugusb::" \ - -e "s:lirc_imon::" -e "s:lirc_parallel::" -e "s:lirc_sasem::" \ - -e "s:lirc_serial::" -e "s:lirc_sir::" -e "s:lirc_ttusbir::" \ - -e "s:lirc_atiusb::" -e "s:lirc_i2c::" \ - -i Makefile drivers/Makefile drivers/*/Makefile tools/Makefile - make -} - -package_lirc-libre() { - pkgdesc="Linux Infrared Remote Control kernel modules for stock kernel (built for the linux-libre kernel package)" - depends=('lirc-libre-utils' 'linux-libre>=3.16' 'linux-libre<3.17') - replaces=('lirc' 'lirc+pctv') - conflicts=('lirc') - provides=("lirc=$pkgver") - install=lirc.install - - cd "${srcdir}/lirc-${_pkgver}/drivers" - - make DESTDIR="${pkgdir}" moduledir="/usr/lib/modules/${_extramodules}" install - gzip -9 "${pkgdir}/usr/lib/modules/${_extramodules}"/*.ko - - # set the kernel we've built for inside the install script - sed -i "s/^EXTRAMODULES=.*$/EXTRAMODULES=${_extramodules}/" "${startdir}/lirc.install" -} - -package_lirc-libre-utils() { - pkgdesc="Linux Infrared Remote Control utils (built for the linux-libre kernel package)" - depends=('alsa-lib' 'libx11' 'libftdi-compat' 'libirman') - optdepends=('python2: pronto2lirc utility') - options=('strip') - backup=('etc/lirc/lirc_options.conf' 'etc/lirc/lircd.conf' 'etc/lirc/lircmd.conf') - replaces=('lirc-utils' 'lirc-utils-libre') - conflicts=('lirc-utils' 'lirc-utils-libre') - provides=("lirc-utils=$pkgver" 'lirc-utils-libre') - install=lirc-utils.install - - cd "${srcdir}/lirc-${_pkgver}" - - make DESTDIR="${pkgdir}" install - - install -Dm644 "${srcdir}"/irexec.service "${pkgdir}"/usr/lib/systemd/system/irexec.service - install -Dm644 "${srcdir}"/lirc.tmpfiles "${pkgdir}"/usr/lib/tmpfiles.d/lirc.conf - - cp -rp remotes "${pkgdir}/usr/share/lirc" - chmod -R go-w "${pkgdir}/usr/share/lirc/" - - # install the logrotate config - install -Dm644 "${srcdir}/lirc.logrotate" "${pkgdir}/etc/logrotate.d/lirc" - - # remove built modules - rm -r "${pkgdir}/usr/lib/modules" -} diff --git a/libre/lirc-libre/irexec.service b/libre/lirc-libre/irexec.service deleted file mode 100644 index dffbbf5e0..000000000 --- a/libre/lirc-libre/irexec.service +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=LIRC command handler -After=network.target - -[Service] -Type=forking -ExecStart=/usr/bin/irexec --daemon - -[Install] -WantedBy=multi-user.target -Wants=lircd.service diff --git a/libre/lirc-libre/lirc-utils.install b/libre/lirc-libre/lirc-utils.install deleted file mode 100644 index f7faa07eb..000000000 --- a/libre/lirc-libre/lirc-utils.install +++ /dev/null @@ -1,13 +0,0 @@ -post_install() { - systemd-tmpfiles --create lirc.conf -} - -post_upgrade() { - post_install - - if [[ "$(vercmp $2 1:0.9.1-1)" -lt 0 ]]; then - echo ':: lirc.service and lircm.service have been replaced' - echo ' by the upstream unit files lircd.service and' - echo ' lircmd.service.' - fi -} diff --git a/libre/lirc-libre/lirc.install b/libre/lirc-libre/lirc.install deleted file mode 100644 index d89c3d94c..000000000 --- a/libre/lirc-libre/lirc.install +++ /dev/null @@ -1,14 +0,0 @@ -EXTRAMODULES=extramodules-3.16-libre - -post_install() { - echo ">>> Updating module dependencies. Please wait ..." - depmod "$(cat /usr/lib/modules/$EXTRAMODULES/version)" >/dev/null 2>&1 -} - -post_upgrade() { - post_install -} - -post_remove() { - post_install -} diff --git a/libre/lirc-libre/lirc.logrotate b/libre/lirc-libre/lirc.logrotate deleted file mode 100644 index 623c4f328..000000000 --- a/libre/lirc-libre/lirc.logrotate +++ /dev/null @@ -1,5 +0,0 @@ -/var/log/lircd { - missingok - notifempty - delaycompress -} diff --git a/libre/lirc-libre/lirc.tmpfiles b/libre/lirc-libre/lirc.tmpfiles deleted file mode 100644 index 0b80e2e47..000000000 --- a/libre/lirc-libre/lirc.tmpfiles +++ /dev/null @@ -1 +0,0 @@ -d /run/lirc 0755 root root - diff --git a/libre/lirc-libre/wpc8769l-build-fix.patch b/libre/lirc-libre/wpc8769l-build-fix.patch deleted file mode 100644 index 5e25693ab..000000000 --- a/libre/lirc-libre/wpc8769l-build-fix.patch +++ /dev/null @@ -1,90 +0,0 @@ -diff --git a/drivers/lirc_wpc8769l/lirc_wpc8769l.c b/drivers/lirc_wpc8769l/lirc_wpc8769l.c -index 790efa2..4248fe9 100644 ---- a/drivers/lirc_wpc8769l/lirc_wpc8769l.c -+++ b/drivers/lirc_wpc8769l/lirc_wpc8769l.c -@@ -51,17 +51,13 @@ - #include - - #include -+#include - - #include -+#include - --#include "drivers/kcompat.h" --#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35) --#include --#include --#else --#include "drivers/lirc.h" --#include "drivers/lirc_dev/lirc_dev.h" --#endif -+#include "media/lirc_dev.h" -+#include "media/lirc.h" - - #include "lirc_wpc8769l.h" - -@@ -105,11 +101,11 @@ static unsigned int baseport2; - static unsigned int irq; - - /* Debugging flag. */ --static int debug; -+static bool debug; - - /* If true, we skip ACPI autodetection and use the parameter-supplied I/O and - * IRQ. */ --static int skip_probe; -+static bool skip_probe; - - /* Whether the device is open or not. */ - static int lirc_wpc8769l_is_open; -@@ -360,14 +356,14 @@ static irqreturn_t irq_handler(int irqno, void *blah, struct pt_regs *regs) - size = count << 3; - - ldata = (unsigned long *) data_buf; -- next_one = generic_find_next_le_bit(ldata, size, 0); -+ next_one = find_next_bit(ldata, size, 0); - - if (next_one > 0) - put_pulse_bit(next_one - * WPC8769L_USECS_PER_BIT); - - while (next_one < size) { -- next_zero = generic_find_next_zero_le_bit(ldata, -+ next_zero = find_next_zero_bit(ldata, - size, next_one + 1); - - put_space_bit( -@@ -375,7 +371,7 @@ static irqreturn_t irq_handler(int irqno, void *blah, struct pt_regs *regs) - * WPC8769L_USECS_PER_BIT); - - if (next_zero < size) { -- next_one = generic_find_next_le_bit(ldata, -+ next_one = find_next_bit(ldata, - size, next_zero + 1); - - put_pulse_bit( -@@ -922,12 +918,12 @@ static int wpc8769l_acpi_detect(void) - #ifdef MODULE - static struct platform_device *lirc_wpc8769l_platform_dev; - --static int __devinit lirc_wpc8769l_probe(struct platform_device *dev) -+static int lirc_wpc8769l_probe(struct platform_device *dev) - { - return 0; - } - --static int __devexit lirc_wpc8769l_remove(struct platform_device *dev) -+static int lirc_wpc8769l_remove(struct platform_device *dev) - { - return 0; - } -@@ -955,7 +951,7 @@ static int lirc_wpc8769l_resume(struct platform_device *dev) - - static struct platform_driver lirc_wpc8769l_platform_driver = { - .probe = lirc_wpc8769l_probe, -- .remove = __devexit_p(lirc_wpc8769l_remove), -+ .remove = lirc_wpc8769l_remove, - .suspend = lirc_wpc8769l_suspend, - .resume = lirc_wpc8769l_resume, - .driver = { diff --git a/libre/lirc-parabola-grsec/PKGBUILD b/libre/lirc-parabola-grsec/PKGBUILD new file mode 100644 index 000000000..53e090f93 --- /dev/null +++ b/libre/lirc-parabola-grsec/PKGBUILD @@ -0,0 +1,136 @@ +# $Id: PKGBUILD 220120 2014-08-16 22:32:11Z lfleischer $ +# Maintainer (Arch): Paul Mattal +# Maintainer: André Silva +# Contributor: Luke Shumaker + +# Kernel info +_basekernel=3.15 +_kernelname=-grsec + +# Source info +_pkgname=lirc-parabola${_kernelname} +# Only build lirc-utils once; for the stock kernel +if [[ -n "${_kernelname}" ]]; then + pkgname=$_pkgname +else + pkgbase=$_pkgname + pkgname=("$_pkgname" lirc-utils-parabola) +fi + +_pkgver=0.9.1a +[[ $_pkgver =~ [a-z]$ ]] && pkgver="${_pkgver:0:-1}.${_pkgver: -1}" || pkgver="$_pkgver" + +url="http://www.lirc.org/" +license=('GPL') +source=("http://prdownloads.sourceforge.net/lirc/lirc-${_pkgver}.tar.bz2" + "wpc8769l-build-fix.patch" + lirc.logrotate + irexec.service + lirc.tmpfiles) +md5sums=('1f1fac162ed309dd50f307e96a292957' + '9ec33169b3407f74264062d7679dd269' + '3deb02604b37811d41816e9b4385fcc3' + '32df3b9bc859565d6acf5f0e5b747083' + 'febf25c154a7d36f01159e84f26c2d9a') + +# Package info +pkgrel=1.${_basekernel/./} +epoch=1 +arch=('i686' 'x86_64' 'mips64el') +options=('!makeflags' '!strip') +makedepends=('help2man' 'alsa-lib' 'libx11' 'libftdi-compat' 'libirman' 'python2') + +# Generic (you shouldn't have to modify any of these variables) +_toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) +_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +makedepends+=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}" + "linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") + +prepare() { + cd "${srcdir}/lirc-${_pkgver}" + + patch -Np1 -i "${srcdir}/wpc8769l-build-fix.patch" + + sed -i '/AC_PATH_XTRA/d' configure.ac + sed -e 's/@X_CFLAGS@//g' \ + -e 's/@X_LIBS@//g' \ + -e 's/@X_PRE_LIBS@//g' \ + -e 's/@X_EXTRA_LIBS@//g' -i Makefile.am tools/Makefile.am + + libtoolize + autoreconf +} + +build() { + cd "${srcdir}/lirc-${_pkgver}" + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + PYTHON=python2 ./configure --enable-sandboxed --prefix=/usr \ + --with-driver=all --with-kerneldir="/usr/lib/modules/${_kernver}/build/" \ + --with-moduledir="/usr/lib/modules/${_kernver}/kernel/drivers/misc" \ + --sbindir=/usr/bin --with-transmitter + + # Remove drivers already in kernel + sed -e "s:lirc_dev::" -e "s:lirc_bt829::" -e "s:lirc_igorplugusb::" \ + -e "s:lirc_imon::" -e "s:lirc_parallel::" -e "s:lirc_sasem::" \ + -e "s:lirc_serial::" -e "s:lirc_sir::" -e "s:lirc_ttusbir::" \ + -e "s:lirc_atiusb::" -e "s:lirc_i2c::" \ + -i Makefile drivers/Makefile drivers/*/Makefile tools/Makefile + make +} + +_package_lirc() { + pkgdesc="Linux Infrared Remote Control kernel modules (built for the linux-libre${_kernelname} kernel package)" + depends=('lirc-libre-utils' "linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") + replaces=('lirc+pctv') + [[ -z "$_kernelname" ]] || provides=("lirc-parabola=${pkgver}") + install=kmod.install + + replaces+=( "lirc${_kernelname}" "lirc-libre${_kernelname}") + conflicts+=("lirc${_kernelname}" "lirc-libre${_kernelname}") + provides+=( "lirc${_kernelname}=${pkgver}" "lirc-libre${_kernelname}=${pkgver}") + + cd "${srcdir}/lirc-${_pkgver}/drivers" + + # Set the correct extramodules directory for install + cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" + true && install=${install}.pkg + sed -r "s/(_extramodules=).*/\1${_extramodules}/" -i "${startdir}/${install}" + + make DESTDIR="${pkgdir}" moduledir="/usr/lib/modules/${_extramodules}" install + gzip -9 "${pkgdir}/usr/lib/modules/${_extramodules}"/*.ko +} +if [[ -n "$_kernelname" ]]; then + eval "package() { _package_lirc; }" +else + eval "package_${_pkgname}() { _package_lirc; }" +fi + +package_lirc-utils-parabola() { + pkgdesc="Linux Infrared Remote Control utilities" + depends=('alsa-lib' 'libx11' 'libftdi-compat' 'libirman') + optdepends=('python2: pronto2lirc utility') + options=('strip') + backup=('etc/lirc/lirc_options.conf' 'etc/lirc/lircd.conf' 'etc/lirc/lircmd.conf') + + replaces=( 'lirc-utils' 'lirc-utils-libre') + conflicts=('lirc-utils' 'lirc-utils-libre') + provides=( "lirc-utils=$pkgver" "lirc-utils-libre=$pkgver") + install=kmod.install + + cd "${srcdir}/lirc-${_pkgver}" + + make DESTDIR="${pkgdir}" install + + install -Dm644 "${srcdir}"/irexec.service "${pkgdir}"/usr/lib/systemd/system/irexec.service + install -Dm644 "${srcdir}"/lirc.tmpfiles "${pkgdir}"/usr/lib/tmpfiles.d/lirc.conf + + cp -rp remotes "${pkgdir}/usr/share/lirc" + chmod -R go-w "${pkgdir}/usr/share/lirc/" + + # install the logrotate config + install -Dm644 "${srcdir}/lirc.logrotate" "${pkgdir}/etc/logrotate.d/lirc" + + # remove built modules + rm -r "${pkgdir}/usr/lib/modules" +} diff --git a/libre/lirc-parabola-grsec/irexec.service b/libre/lirc-parabola-grsec/irexec.service new file mode 100644 index 000000000..dffbbf5e0 --- /dev/null +++ b/libre/lirc-parabola-grsec/irexec.service @@ -0,0 +1,11 @@ +[Unit] +Description=LIRC command handler +After=network.target + +[Service] +Type=forking +ExecStart=/usr/bin/irexec --daemon + +[Install] +WantedBy=multi-user.target +Wants=lircd.service diff --git a/libre/lirc-parabola-grsec/kmod.install b/libre/lirc-parabola-grsec/kmod.install new file mode 100644 index 000000000..d4bd8cb34 --- /dev/null +++ b/libre/lirc-parabola-grsec/kmod.install @@ -0,0 +1,14 @@ +post_install() { + _extramodules=THIS_IS_AUTOMATICALLY_SET_BY_PKGBUILD + depmod $(cat /usr/lib/modules/${_extramodules}/version) +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} + +# vim: ts=2 sw=2 et: diff --git a/libre/lirc-parabola-grsec/lirc-utils.install b/libre/lirc-parabola-grsec/lirc-utils.install new file mode 100644 index 000000000..f7faa07eb --- /dev/null +++ b/libre/lirc-parabola-grsec/lirc-utils.install @@ -0,0 +1,13 @@ +post_install() { + systemd-tmpfiles --create lirc.conf +} + +post_upgrade() { + post_install + + if [[ "$(vercmp $2 1:0.9.1-1)" -lt 0 ]]; then + echo ':: lirc.service and lircm.service have been replaced' + echo ' by the upstream unit files lircd.service and' + echo ' lircmd.service.' + fi +} diff --git a/libre/lirc-parabola-grsec/lirc.logrotate b/libre/lirc-parabola-grsec/lirc.logrotate new file mode 100644 index 000000000..623c4f328 --- /dev/null +++ b/libre/lirc-parabola-grsec/lirc.logrotate @@ -0,0 +1,5 @@ +/var/log/lircd { + missingok + notifempty + delaycompress +} diff --git a/libre/lirc-parabola-grsec/lirc.tmpfiles b/libre/lirc-parabola-grsec/lirc.tmpfiles new file mode 100644 index 000000000..0b80e2e47 --- /dev/null +++ b/libre/lirc-parabola-grsec/lirc.tmpfiles @@ -0,0 +1 @@ +d /run/lirc 0755 root root - diff --git a/libre/lirc-parabola-grsec/wpc8769l-build-fix.patch b/libre/lirc-parabola-grsec/wpc8769l-build-fix.patch new file mode 100644 index 000000000..5e25693ab --- /dev/null +++ b/libre/lirc-parabola-grsec/wpc8769l-build-fix.patch @@ -0,0 +1,90 @@ +diff --git a/drivers/lirc_wpc8769l/lirc_wpc8769l.c b/drivers/lirc_wpc8769l/lirc_wpc8769l.c +index 790efa2..4248fe9 100644 +--- a/drivers/lirc_wpc8769l/lirc_wpc8769l.c ++++ b/drivers/lirc_wpc8769l/lirc_wpc8769l.c +@@ -51,17 +51,13 @@ + #include + + #include ++#include + + #include ++#include + +-#include "drivers/kcompat.h" +-#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35) +-#include +-#include +-#else +-#include "drivers/lirc.h" +-#include "drivers/lirc_dev/lirc_dev.h" +-#endif ++#include "media/lirc_dev.h" ++#include "media/lirc.h" + + #include "lirc_wpc8769l.h" + +@@ -105,11 +101,11 @@ static unsigned int baseport2; + static unsigned int irq; + + /* Debugging flag. */ +-static int debug; ++static bool debug; + + /* If true, we skip ACPI autodetection and use the parameter-supplied I/O and + * IRQ. */ +-static int skip_probe; ++static bool skip_probe; + + /* Whether the device is open or not. */ + static int lirc_wpc8769l_is_open; +@@ -360,14 +356,14 @@ static irqreturn_t irq_handler(int irqno, void *blah, struct pt_regs *regs) + size = count << 3; + + ldata = (unsigned long *) data_buf; +- next_one = generic_find_next_le_bit(ldata, size, 0); ++ next_one = find_next_bit(ldata, size, 0); + + if (next_one > 0) + put_pulse_bit(next_one + * WPC8769L_USECS_PER_BIT); + + while (next_one < size) { +- next_zero = generic_find_next_zero_le_bit(ldata, ++ next_zero = find_next_zero_bit(ldata, + size, next_one + 1); + + put_space_bit( +@@ -375,7 +371,7 @@ static irqreturn_t irq_handler(int irqno, void *blah, struct pt_regs *regs) + * WPC8769L_USECS_PER_BIT); + + if (next_zero < size) { +- next_one = generic_find_next_le_bit(ldata, ++ next_one = find_next_bit(ldata, + size, next_zero + 1); + + put_pulse_bit( +@@ -922,12 +918,12 @@ static int wpc8769l_acpi_detect(void) + #ifdef MODULE + static struct platform_device *lirc_wpc8769l_platform_dev; + +-static int __devinit lirc_wpc8769l_probe(struct platform_device *dev) ++static int lirc_wpc8769l_probe(struct platform_device *dev) + { + return 0; + } + +-static int __devexit lirc_wpc8769l_remove(struct platform_device *dev) ++static int lirc_wpc8769l_remove(struct platform_device *dev) + { + return 0; + } +@@ -955,7 +951,7 @@ static int lirc_wpc8769l_resume(struct platform_device *dev) + + static struct platform_driver lirc_wpc8769l_platform_driver = { + .probe = lirc_wpc8769l_probe, +- .remove = __devexit_p(lirc_wpc8769l_remove), ++ .remove = lirc_wpc8769l_remove, + .suspend = lirc_wpc8769l_suspend, + .resume = lirc_wpc8769l_resume, + .driver = { diff --git a/libre/lirc-parabola-lts/PKGBUILD b/libre/lirc-parabola-lts/PKGBUILD new file mode 100644 index 000000000..beca86a2f --- /dev/null +++ b/libre/lirc-parabola-lts/PKGBUILD @@ -0,0 +1,136 @@ +# $Id: PKGBUILD 220120 2014-08-16 22:32:11Z lfleischer $ +# Maintainer (Arch): Paul Mattal +# Maintainer: André Silva +# Contributor: Luke Shumaker + +# Kernel info +_basekernel=3.14 +_kernelname=-lts + +# Source info +_pkgname=lirc-parabola${_kernelname} +# Only build lirc-utils once; for the stock kernel +if [[ -n "${_kernelname}" ]]; then + pkgname=$_pkgname +else + pkgbase=$_pkgname + pkgname=("$_pkgname" lirc-utils-parabola) +fi + +_pkgver=0.9.1a +[[ $_pkgver =~ [a-z]$ ]] && pkgver="${_pkgver:0:-1}.${_pkgver: -1}" || pkgver="$_pkgver" + +url="http://www.lirc.org/" +license=('GPL') +source=("http://prdownloads.sourceforge.net/lirc/lirc-${_pkgver}.tar.bz2" + "wpc8769l-build-fix.patch" + lirc.logrotate + irexec.service + lirc.tmpfiles) +md5sums=('1f1fac162ed309dd50f307e96a292957' + '9ec33169b3407f74264062d7679dd269' + '3deb02604b37811d41816e9b4385fcc3' + '32df3b9bc859565d6acf5f0e5b747083' + 'febf25c154a7d36f01159e84f26c2d9a') + +# Package info +pkgrel=1.${_basekernel/./} +epoch=1 +arch=('i686' 'x86_64' 'mips64el') +options=('!makeflags' '!strip') +makedepends=('help2man' 'alsa-lib' 'libx11' 'libftdi-compat' 'libirman' 'python2') + +# Generic (you shouldn't have to modify any of these variables) +_toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) +_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +makedepends+=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}" + "linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") + +prepare() { + cd "${srcdir}/lirc-${_pkgver}" + + patch -Np1 -i "${srcdir}/wpc8769l-build-fix.patch" + + sed -i '/AC_PATH_XTRA/d' configure.ac + sed -e 's/@X_CFLAGS@//g' \ + -e 's/@X_LIBS@//g' \ + -e 's/@X_PRE_LIBS@//g' \ + -e 's/@X_EXTRA_LIBS@//g' -i Makefile.am tools/Makefile.am + + libtoolize + autoreconf +} + +build() { + cd "${srcdir}/lirc-${_pkgver}" + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + PYTHON=python2 ./configure --enable-sandboxed --prefix=/usr \ + --with-driver=all --with-kerneldir="/usr/lib/modules/${_kernver}/build/" \ + --with-moduledir="/usr/lib/modules/${_kernver}/kernel/drivers/misc" \ + --sbindir=/usr/bin --with-transmitter + + # Remove drivers already in kernel + sed -e "s:lirc_dev::" -e "s:lirc_bt829::" -e "s:lirc_igorplugusb::" \ + -e "s:lirc_imon::" -e "s:lirc_parallel::" -e "s:lirc_sasem::" \ + -e "s:lirc_serial::" -e "s:lirc_sir::" -e "s:lirc_ttusbir::" \ + -e "s:lirc_atiusb::" -e "s:lirc_i2c::" \ + -i Makefile drivers/Makefile drivers/*/Makefile tools/Makefile + make +} + +_package_lirc() { + pkgdesc="Linux Infrared Remote Control kernel modules (built for the linux-libre${_kernelname} kernel package)" + depends=('lirc-libre-utils' "linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") + replaces=('lirc+pctv') + [[ -z "$_kernelname" ]] || provides=("lirc-parabola=${pkgver}") + install=kmod.install + + replaces+=( "lirc${_kernelname}" "lirc-libre${_kernelname}") + conflicts+=("lirc${_kernelname}" "lirc-libre${_kernelname}") + provides+=( "lirc${_kernelname}=${pkgver}" "lirc-libre${_kernelname}=${pkgver}") + + cd "${srcdir}/lirc-${_pkgver}/drivers" + + # Set the correct extramodules directory for install + cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" + true && install=${install}.pkg + sed -r "s/(_extramodules=).*/\1${_extramodules}/" -i "${startdir}/${install}" + + make DESTDIR="${pkgdir}" moduledir="/usr/lib/modules/${_extramodules}" install + gzip -9 "${pkgdir}/usr/lib/modules/${_extramodules}"/*.ko +} +if [[ -n "$_kernelname" ]]; then + eval "package() { _package_lirc; }" +else + eval "package_${_pkgname}() { _package_lirc; }" +fi + +package_lirc-utils-parabola() { + pkgdesc="Linux Infrared Remote Control utilities" + depends=('alsa-lib' 'libx11' 'libftdi-compat' 'libirman') + optdepends=('python2: pronto2lirc utility') + options=('strip') + backup=('etc/lirc/lirc_options.conf' 'etc/lirc/lircd.conf' 'etc/lirc/lircmd.conf') + + replaces=( 'lirc-utils' 'lirc-utils-libre') + conflicts=('lirc-utils' 'lirc-utils-libre') + provides=( "lirc-utils=$pkgver" "lirc-utils-libre=$pkgver") + install=kmod.install + + cd "${srcdir}/lirc-${_pkgver}" + + make DESTDIR="${pkgdir}" install + + install -Dm644 "${srcdir}"/irexec.service "${pkgdir}"/usr/lib/systemd/system/irexec.service + install -Dm644 "${srcdir}"/lirc.tmpfiles "${pkgdir}"/usr/lib/tmpfiles.d/lirc.conf + + cp -rp remotes "${pkgdir}/usr/share/lirc" + chmod -R go-w "${pkgdir}/usr/share/lirc/" + + # install the logrotate config + install -Dm644 "${srcdir}/lirc.logrotate" "${pkgdir}/etc/logrotate.d/lirc" + + # remove built modules + rm -r "${pkgdir}/usr/lib/modules" +} diff --git a/libre/lirc-parabola-lts/irexec.service b/libre/lirc-parabola-lts/irexec.service new file mode 100644 index 000000000..dffbbf5e0 --- /dev/null +++ b/libre/lirc-parabola-lts/irexec.service @@ -0,0 +1,11 @@ +[Unit] +Description=LIRC command handler +After=network.target + +[Service] +Type=forking +ExecStart=/usr/bin/irexec --daemon + +[Install] +WantedBy=multi-user.target +Wants=lircd.service diff --git a/libre/lirc-parabola-lts/kmod.install b/libre/lirc-parabola-lts/kmod.install new file mode 100644 index 000000000..d4bd8cb34 --- /dev/null +++ b/libre/lirc-parabola-lts/kmod.install @@ -0,0 +1,14 @@ +post_install() { + _extramodules=THIS_IS_AUTOMATICALLY_SET_BY_PKGBUILD + depmod $(cat /usr/lib/modules/${_extramodules}/version) +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} + +# vim: ts=2 sw=2 et: diff --git a/libre/lirc-parabola-lts/lirc-utils.install b/libre/lirc-parabola-lts/lirc-utils.install new file mode 100644 index 000000000..f7faa07eb --- /dev/null +++ b/libre/lirc-parabola-lts/lirc-utils.install @@ -0,0 +1,13 @@ +post_install() { + systemd-tmpfiles --create lirc.conf +} + +post_upgrade() { + post_install + + if [[ "$(vercmp $2 1:0.9.1-1)" -lt 0 ]]; then + echo ':: lirc.service and lircm.service have been replaced' + echo ' by the upstream unit files lircd.service and' + echo ' lircmd.service.' + fi +} diff --git a/libre/lirc-parabola-lts/lirc.logrotate b/libre/lirc-parabola-lts/lirc.logrotate new file mode 100644 index 000000000..623c4f328 --- /dev/null +++ b/libre/lirc-parabola-lts/lirc.logrotate @@ -0,0 +1,5 @@ +/var/log/lircd { + missingok + notifempty + delaycompress +} diff --git a/libre/lirc-parabola-lts/lirc.tmpfiles b/libre/lirc-parabola-lts/lirc.tmpfiles new file mode 100644 index 000000000..0b80e2e47 --- /dev/null +++ b/libre/lirc-parabola-lts/lirc.tmpfiles @@ -0,0 +1 @@ +d /run/lirc 0755 root root - diff --git a/libre/lirc-parabola-lts/wpc8769l-build-fix.patch b/libre/lirc-parabola-lts/wpc8769l-build-fix.patch new file mode 100644 index 000000000..5e25693ab --- /dev/null +++ b/libre/lirc-parabola-lts/wpc8769l-build-fix.patch @@ -0,0 +1,90 @@ +diff --git a/drivers/lirc_wpc8769l/lirc_wpc8769l.c b/drivers/lirc_wpc8769l/lirc_wpc8769l.c +index 790efa2..4248fe9 100644 +--- a/drivers/lirc_wpc8769l/lirc_wpc8769l.c ++++ b/drivers/lirc_wpc8769l/lirc_wpc8769l.c +@@ -51,17 +51,13 @@ + #include + + #include ++#include + + #include ++#include + +-#include "drivers/kcompat.h" +-#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35) +-#include +-#include +-#else +-#include "drivers/lirc.h" +-#include "drivers/lirc_dev/lirc_dev.h" +-#endif ++#include "media/lirc_dev.h" ++#include "media/lirc.h" + + #include "lirc_wpc8769l.h" + +@@ -105,11 +101,11 @@ static unsigned int baseport2; + static unsigned int irq; + + /* Debugging flag. */ +-static int debug; ++static bool debug; + + /* If true, we skip ACPI autodetection and use the parameter-supplied I/O and + * IRQ. */ +-static int skip_probe; ++static bool skip_probe; + + /* Whether the device is open or not. */ + static int lirc_wpc8769l_is_open; +@@ -360,14 +356,14 @@ static irqreturn_t irq_handler(int irqno, void *blah, struct pt_regs *regs) + size = count << 3; + + ldata = (unsigned long *) data_buf; +- next_one = generic_find_next_le_bit(ldata, size, 0); ++ next_one = find_next_bit(ldata, size, 0); + + if (next_one > 0) + put_pulse_bit(next_one + * WPC8769L_USECS_PER_BIT); + + while (next_one < size) { +- next_zero = generic_find_next_zero_le_bit(ldata, ++ next_zero = find_next_zero_bit(ldata, + size, next_one + 1); + + put_space_bit( +@@ -375,7 +371,7 @@ static irqreturn_t irq_handler(int irqno, void *blah, struct pt_regs *regs) + * WPC8769L_USECS_PER_BIT); + + if (next_zero < size) { +- next_one = generic_find_next_le_bit(ldata, ++ next_one = find_next_bit(ldata, + size, next_zero + 1); + + put_pulse_bit( +@@ -922,12 +918,12 @@ static int wpc8769l_acpi_detect(void) + #ifdef MODULE + static struct platform_device *lirc_wpc8769l_platform_dev; + +-static int __devinit lirc_wpc8769l_probe(struct platform_device *dev) ++static int lirc_wpc8769l_probe(struct platform_device *dev) + { + return 0; + } + +-static int __devexit lirc_wpc8769l_remove(struct platform_device *dev) ++static int lirc_wpc8769l_remove(struct platform_device *dev) + { + return 0; + } +@@ -955,7 +951,7 @@ static int lirc_wpc8769l_resume(struct platform_device *dev) + + static struct platform_driver lirc_wpc8769l_platform_driver = { + .probe = lirc_wpc8769l_probe, +- .remove = __devexit_p(lirc_wpc8769l_remove), ++ .remove = lirc_wpc8769l_remove, + .suspend = lirc_wpc8769l_suspend, + .resume = lirc_wpc8769l_resume, + .driver = { diff --git a/libre/lirc-parabola/PKGBUILD b/libre/lirc-parabola/PKGBUILD new file mode 100644 index 000000000..39cfdc70e --- /dev/null +++ b/libre/lirc-parabola/PKGBUILD @@ -0,0 +1,136 @@ +# $Id: PKGBUILD 220120 2014-08-16 22:32:11Z lfleischer $ +# Maintainer (Arch): Paul Mattal +# Maintainer: André Silva +# Contributor: Luke Shumaker + +# Kernel info +_basekernel=3.16 +_kernelname= + +# Source info +_pkgname=lirc-parabola${_kernelname} +# Only build lirc-utils once; for the stock kernel +if [[ -n "${_kernelname}" ]]; then + pkgname=$_pkgname +else + pkgbase=$_pkgname + pkgname=("$_pkgname" lirc-utils-parabola) +fi + +_pkgver=0.9.1a +[[ $_pkgver =~ [a-z]$ ]] && pkgver="${_pkgver:0:-1}.${_pkgver: -1}" || pkgver="$_pkgver" + +url="http://www.lirc.org/" +license=('GPL') +source=("http://prdownloads.sourceforge.net/lirc/lirc-${_pkgver}.tar.bz2" + "wpc8769l-build-fix.patch" + lirc.logrotate + irexec.service + lirc.tmpfiles) +md5sums=('1f1fac162ed309dd50f307e96a292957' + '9ec33169b3407f74264062d7679dd269' + '3deb02604b37811d41816e9b4385fcc3' + '32df3b9bc859565d6acf5f0e5b747083' + 'febf25c154a7d36f01159e84f26c2d9a') + +# Package info +pkgrel=1.${_basekernel/./} +epoch=1 +arch=('i686' 'x86_64' 'mips64el') +options=('!makeflags' '!strip') +makedepends=('help2man' 'alsa-lib' 'libx11' 'libftdi-compat' 'libirman' 'python2') + +# Generic (you shouldn't have to modify any of these variables) +_toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) +_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +makedepends+=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}" + "linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") + +prepare() { + cd "${srcdir}/lirc-${_pkgver}" + + patch -Np1 -i "${srcdir}/wpc8769l-build-fix.patch" + + sed -i '/AC_PATH_XTRA/d' configure.ac + sed -e 's/@X_CFLAGS@//g' \ + -e 's/@X_LIBS@//g' \ + -e 's/@X_PRE_LIBS@//g' \ + -e 's/@X_EXTRA_LIBS@//g' -i Makefile.am tools/Makefile.am + + libtoolize + autoreconf +} + +build() { + cd "${srcdir}/lirc-${_pkgver}" + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + PYTHON=python2 ./configure --enable-sandboxed --prefix=/usr \ + --with-driver=all --with-kerneldir="/usr/lib/modules/${_kernver}/build/" \ + --with-moduledir="/usr/lib/modules/${_kernver}/kernel/drivers/misc" \ + --sbindir=/usr/bin --with-transmitter + + # Remove drivers already in kernel + sed -e "s:lirc_dev::" -e "s:lirc_bt829::" -e "s:lirc_igorplugusb::" \ + -e "s:lirc_imon::" -e "s:lirc_parallel::" -e "s:lirc_sasem::" \ + -e "s:lirc_serial::" -e "s:lirc_sir::" -e "s:lirc_ttusbir::" \ + -e "s:lirc_atiusb::" -e "s:lirc_i2c::" \ + -i Makefile drivers/Makefile drivers/*/Makefile tools/Makefile + make +} + +_package_lirc() { + pkgdesc="Linux Infrared Remote Control kernel modules (built for the linux-libre${_kernelname} kernel package)" + depends=('lirc-libre-utils' "linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") + replaces=('lirc+pctv') + [[ -z "$_kernelname" ]] || provides=("lirc-parabola=${pkgver}") + install=kmod.install + + replaces+=( "lirc${_kernelname}" "lirc-libre${_kernelname}") + conflicts+=("lirc${_kernelname}" "lirc-libre${_kernelname}") + provides+=( "lirc${_kernelname}=${pkgver}" "lirc-libre${_kernelname}=${pkgver}") + + cd "${srcdir}/lirc-${_pkgver}/drivers" + + # Set the correct extramodules directory for install + cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" + true && install=${install}.pkg + sed -r "s/(_extramodules=).*/\1${_extramodules}/" -i "${startdir}/${install}" + + make DESTDIR="${pkgdir}" moduledir="/usr/lib/modules/${_extramodules}" install + gzip -9 "${pkgdir}/usr/lib/modules/${_extramodules}"/*.ko +} +if [[ -n "$_kernelname" ]]; then + eval "package() { _package_lirc; }" +else + eval "package_${_pkgname}() { _package_lirc; }" +fi + +package_lirc-utils-parabola() { + pkgdesc="Linux Infrared Remote Control utilities" + depends=('alsa-lib' 'libx11' 'libftdi-compat' 'libirman') + optdepends=('python2: pronto2lirc utility') + options=('strip') + backup=('etc/lirc/lirc_options.conf' 'etc/lirc/lircd.conf' 'etc/lirc/lircmd.conf') + + replaces=( 'lirc-utils' 'lirc-utils-libre') + conflicts=('lirc-utils' 'lirc-utils-libre') + provides=( "lirc-utils=$pkgver" "lirc-utils-libre=$pkgver") + install=kmod.install + + cd "${srcdir}/lirc-${_pkgver}" + + make DESTDIR="${pkgdir}" install + + install -Dm644 "${srcdir}"/irexec.service "${pkgdir}"/usr/lib/systemd/system/irexec.service + install -Dm644 "${srcdir}"/lirc.tmpfiles "${pkgdir}"/usr/lib/tmpfiles.d/lirc.conf + + cp -rp remotes "${pkgdir}/usr/share/lirc" + chmod -R go-w "${pkgdir}/usr/share/lirc/" + + # install the logrotate config + install -Dm644 "${srcdir}/lirc.logrotate" "${pkgdir}/etc/logrotate.d/lirc" + + # remove built modules + rm -r "${pkgdir}/usr/lib/modules" +} diff --git a/libre/lirc-parabola/irexec.service b/libre/lirc-parabola/irexec.service new file mode 100644 index 000000000..dffbbf5e0 --- /dev/null +++ b/libre/lirc-parabola/irexec.service @@ -0,0 +1,11 @@ +[Unit] +Description=LIRC command handler +After=network.target + +[Service] +Type=forking +ExecStart=/usr/bin/irexec --daemon + +[Install] +WantedBy=multi-user.target +Wants=lircd.service diff --git a/libre/lirc-parabola/kmod.install b/libre/lirc-parabola/kmod.install new file mode 100644 index 000000000..d4bd8cb34 --- /dev/null +++ b/libre/lirc-parabola/kmod.install @@ -0,0 +1,14 @@ +post_install() { + _extramodules=THIS_IS_AUTOMATICALLY_SET_BY_PKGBUILD + depmod $(cat /usr/lib/modules/${_extramodules}/version) +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} + +# vim: ts=2 sw=2 et: diff --git a/libre/lirc-parabola/lirc-utils.install b/libre/lirc-parabola/lirc-utils.install new file mode 100644 index 000000000..f7faa07eb --- /dev/null +++ b/libre/lirc-parabola/lirc-utils.install @@ -0,0 +1,13 @@ +post_install() { + systemd-tmpfiles --create lirc.conf +} + +post_upgrade() { + post_install + + if [[ "$(vercmp $2 1:0.9.1-1)" -lt 0 ]]; then + echo ':: lirc.service and lircm.service have been replaced' + echo ' by the upstream unit files lircd.service and' + echo ' lircmd.service.' + fi +} diff --git a/libre/lirc-parabola/lirc.logrotate b/libre/lirc-parabola/lirc.logrotate new file mode 100644 index 000000000..623c4f328 --- /dev/null +++ b/libre/lirc-parabola/lirc.logrotate @@ -0,0 +1,5 @@ +/var/log/lircd { + missingok + notifempty + delaycompress +} diff --git a/libre/lirc-parabola/lirc.tmpfiles b/libre/lirc-parabola/lirc.tmpfiles new file mode 100644 index 000000000..0b80e2e47 --- /dev/null +++ b/libre/lirc-parabola/lirc.tmpfiles @@ -0,0 +1 @@ +d /run/lirc 0755 root root - diff --git a/libre/lirc-parabola/wpc8769l-build-fix.patch b/libre/lirc-parabola/wpc8769l-build-fix.patch new file mode 100644 index 000000000..5e25693ab --- /dev/null +++ b/libre/lirc-parabola/wpc8769l-build-fix.patch @@ -0,0 +1,90 @@ +diff --git a/drivers/lirc_wpc8769l/lirc_wpc8769l.c b/drivers/lirc_wpc8769l/lirc_wpc8769l.c +index 790efa2..4248fe9 100644 +--- a/drivers/lirc_wpc8769l/lirc_wpc8769l.c ++++ b/drivers/lirc_wpc8769l/lirc_wpc8769l.c +@@ -51,17 +51,13 @@ + #include + + #include ++#include + + #include ++#include + +-#include "drivers/kcompat.h" +-#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35) +-#include +-#include +-#else +-#include "drivers/lirc.h" +-#include "drivers/lirc_dev/lirc_dev.h" +-#endif ++#include "media/lirc_dev.h" ++#include "media/lirc.h" + + #include "lirc_wpc8769l.h" + +@@ -105,11 +101,11 @@ static unsigned int baseport2; + static unsigned int irq; + + /* Debugging flag. */ +-static int debug; ++static bool debug; + + /* If true, we skip ACPI autodetection and use the parameter-supplied I/O and + * IRQ. */ +-static int skip_probe; ++static bool skip_probe; + + /* Whether the device is open or not. */ + static int lirc_wpc8769l_is_open; +@@ -360,14 +356,14 @@ static irqreturn_t irq_handler(int irqno, void *blah, struct pt_regs *regs) + size = count << 3; + + ldata = (unsigned long *) data_buf; +- next_one = generic_find_next_le_bit(ldata, size, 0); ++ next_one = find_next_bit(ldata, size, 0); + + if (next_one > 0) + put_pulse_bit(next_one + * WPC8769L_USECS_PER_BIT); + + while (next_one < size) { +- next_zero = generic_find_next_zero_le_bit(ldata, ++ next_zero = find_next_zero_bit(ldata, + size, next_one + 1); + + put_space_bit( +@@ -375,7 +371,7 @@ static irqreturn_t irq_handler(int irqno, void *blah, struct pt_regs *regs) + * WPC8769L_USECS_PER_BIT); + + if (next_zero < size) { +- next_one = generic_find_next_le_bit(ldata, ++ next_one = find_next_bit(ldata, + size, next_zero + 1); + + put_pulse_bit( +@@ -922,12 +918,12 @@ static int wpc8769l_acpi_detect(void) + #ifdef MODULE + static struct platform_device *lirc_wpc8769l_platform_dev; + +-static int __devinit lirc_wpc8769l_probe(struct platform_device *dev) ++static int lirc_wpc8769l_probe(struct platform_device *dev) + { + return 0; + } + +-static int __devexit lirc_wpc8769l_remove(struct platform_device *dev) ++static int lirc_wpc8769l_remove(struct platform_device *dev) + { + return 0; + } +@@ -955,7 +951,7 @@ static int lirc_wpc8769l_resume(struct platform_device *dev) + + static struct platform_driver lirc_wpc8769l_platform_driver = { + .probe = lirc_wpc8769l_probe, +- .remove = __devexit_p(lirc_wpc8769l_remove), ++ .remove = lirc_wpc8769l_remove, + .suspend = lirc_wpc8769l_suspend, + .resume = lirc_wpc8769l_resume, + .driver = { diff --git a/libre/tp_smapi-libre-lts/PKGBUILD b/libre/tp_smapi-libre-lts/PKGBUILD deleted file mode 100644 index 11ac463e1..000000000 --- a/libre/tp_smapi-libre-lts/PKGBUILD +++ /dev/null @@ -1,61 +0,0 @@ -# $Id: PKGBUILD 115344 2014-07-09 08:56:06Z fyan $ -# Maintainer (Arch): Lukas Fleischer -# Contributor (Arch): xduugu -# Contributor (Arch): nh2 -# Contributor (Arch): Steven Davidovitz -# Contributor (Arch): Nick B -# Contributor (Arch): Christof Musik -# Contributor (Arch): Stefan Rupp -# Contributor (Arch): Ignas Anikevicius -# Maintainer: André Silva - -pkgname=tp_smapi-libre-lts -_pkgname=tp_smapi -_extramodules=/usr/lib/modules/extramodules-3.14-libre-lts -pkgver=0.41 -pkgrel=29 -pkgdesc="Modules for ThinkPad's SMAPI functionality (built for the linux-libre-lts kernel package)" -arch=('i686' 'x86_64' 'mips64el') -url='https://github.com/evgeni/tp_smapi' -license=('GPL') -depends=('linux-libre-lts>=3.14.11' 'linux-libre-lts<3.15') -makedepends=('linux-libre-lts-headers>=3.14' 'linux-libre-lts-headers<3.15') -replaces=('tp_smapi-lts') -conflicts=('tp_smapi-lts') -provides=("tp_smapi-lts=${pkgver}") -install='tp_smapi-lts.install' -source=("https://github.com/downloads/evgeni/${_pkgname}/${_pkgname}-${pkgver}.tar.gz") -md5sums=('63c683415c764568f6bf17c7eabe4752') - -build() { - cd "${srcdir}/${_pkgname}-${pkgver}" - - _kernver=$(< "${_extramodules}/version") - - sed -ri -e "s/^(KVER\s*:=).*$/\1 ${_kernver}/" \ - -e "s#^(KBASE\s*:=).*\$#\1 ${_extramodules%/*}/${_kernver}#" Makefile - - make HDAPS=1 -} - -package() { - _kernver=$(< "${_extramodules}/version") - - make -C "${_extramodules%/*}/${_kernver}/build" \ - INSTALL_MOD_PATH="${pkgdir}/${_extramodules%%/lib/*}" \ - M="${srcdir}/${_pkgname}-${pkgver}" modules_install - - cd "${pkgdir}/${_extramodules%/*}" - mv "${_kernver}/extra" "${_extramodules##*/}" - rmdir "${_kernver}" - - # compress kernel modules - find "${pkgdir}" -name "*.ko" -exec gzip -9 {} + - - # load module on startup - echo tp_smapi > "${srcdir}/tp_smapi-lts.conf" - install -Dm644 "${srcdir}/tp_smapi-lts.conf" "${pkgdir}/usr/lib/modules-load.d/tp_smapi-lts.conf" - - # update kernel version in install file - sed -ri "s#^(extramodules=).*\$#\1${_extramodules}#" "${startdir}/tp_smapi-lts.install" -} diff --git a/libre/tp_smapi-libre-lts/tp_smapi-lts.install b/libre/tp_smapi-libre-lts/tp_smapi-lts.install deleted file mode 100644 index 97e1750e0..000000000 --- a/libre/tp_smapi-libre-lts/tp_smapi-lts.install +++ /dev/null @@ -1,13 +0,0 @@ -extramodules=/usr/lib/modules/extramodules-3.14-libre-lts - -post_install() { - depmod -v $(< "$extramodules/version") &>/dev/null -} - -post_upgrade() { - post_install -} - -post_remove() { - post_install -} diff --git a/libre/tp_smapi-libre/PKGBUILD b/libre/tp_smapi-libre/PKGBUILD deleted file mode 100644 index c299d0f29..000000000 --- a/libre/tp_smapi-libre/PKGBUILD +++ /dev/null @@ -1,64 +0,0 @@ -# $Id: PKGBUILD 116831 2014-08-04 07:32:08Z tpowa $ -# Maintainer (Arch): Lukas Fleischer -# Contributor (Arch): xduugu -# Contributor (Arch): nh2 -# Contributor (Arch): Steven Davidovitz -# Contributor (Arch): Nick B -# Contributor (Arch): Christof Musik -# Contributor (Arch): Stefan Rupp -# Contributor (Arch): Ignas Anikevicius -# Maintainer: André Silva - -_pkgname=tp_smapi -pkgname=tp_smapi-libre -pkgver=0.41 -pkgrel=52 -pkgdesc="Modules for ThinkPad's SMAPI functionality (built for the linux-libre kernel package)" -arch=('i686' 'x86_64' 'mips64el') -url='https://github.com/evgeni/tp_smapi' -license=('GPL') -depends=('linux-libre>=3.16' 'linux-libre<3.17') -makedepends=('linux-libre-headers>=3.16' 'linux-libre-headers<3.17') -replaces=("${_pkgname}") -conflicts=("${_pkgname}") -provides=("${_pkgname}=${pkgver}") -install="${_pkgname}.install" -source=("https://github.com/downloads/evgeni/${_pkgname}/${_pkgname}-${pkgver}.tar.gz") -md5sums=('63c683415c764568f6bf17c7eabe4752') - -build() { - cd "${srcdir}/${_pkgname}-${pkgver}" - - _kernver=${_kernver:-$(uname -r)} - _extramodules=$(readlink -f "/usr/lib/modules/${_kernver}/extramodules" || true) - _kernver=$(< "${_extramodules}/version") - - sed -ri -e "s/^(KVER\s*:=).*$/\1 ${_kernver}/" \ - -e "s#^(KBASE\s*:=).*\$#\1 ${_extramodules%/*}/${_kernver}#" Makefile - - make HDAPS=1 -} - -package() { - _kernver=${_kernver:-$(uname -r)} - _extramodules=$(readlink -f "/usr/lib/modules/${_kernver}/extramodules" || true) - _kernver=$(< "${_extramodules}/version") - - make -C "${_extramodules%/*}/${_kernver}/build" \ - INSTALL_MOD_PATH="${pkgdir}/${_extramodules%%/lib/*}" \ - M="${srcdir}/${_pkgname}-${pkgver}" modules_install - - cd "${pkgdir}/${_extramodules%/*}" - mv "${_kernver}/extra" "${_extramodules##*/}" - rmdir "${_kernver}" - - # compress kernel modules - find "${pkgdir}" -name "*.ko" -exec gzip -9 {} + - - # load module on startup - echo tp_smapi > "${srcdir}/${_pkgname}.conf" - install -Dm644 "${srcdir}/${_pkgname}.conf" "${pkgdir}/usr/lib/modules-load.d/${_pkgname}.conf" - - # update kernel version in install file - sed -ri "s#^(extramodules=).*\$#\1${_extramodules}#" "${startdir}/${_pkgname}.install" -} diff --git a/libre/tp_smapi-libre/tp_smapi.install b/libre/tp_smapi-libre/tp_smapi.install deleted file mode 100644 index 152fb77c3..000000000 --- a/libre/tp_smapi-libre/tp_smapi.install +++ /dev/null @@ -1,13 +0,0 @@ -extramodules=/usr/lib/modules/extramodules-3.16-libre - -post_install() { - depmod -v $(< "$extramodules/version") &>/dev/null -} - -post_upgrade() { - post_install -} - -post_remove() { - post_install -} diff --git a/libre/tp_smapi-parabola-grsec/PKGBUILD b/libre/tp_smapi-parabola-grsec/PKGBUILD new file mode 100644 index 000000000..65e23730b --- /dev/null +++ b/libre/tp_smapi-parabola-grsec/PKGBUILD @@ -0,0 +1,80 @@ +# $Id: PKGBUILD 116831 2014-08-04 07:32:08Z tpowa $ +# Maintainer (Arch): Lukas Fleischer +# Contributor (Arch): xduugu +# Contributor (Arch): nh2 +# Contributor (Arch): Steven Davidovitz +# Contributor (Arch): Nick B +# Contributor (Arch): Christof Musik +# Contributor (Arch): Stefan Rupp +# Contributor (Arch): Ignas Anikevicius +# Maintainer: André Silva +# Contributor: Luke Shumaker + +# Kernel info +_basekernel=3.15 +_kernelname=-grsec + +# Source info +_pkgname=tp_smapi +pkgver=0.41 +pkgdesc="Modules for ThinkPad's SMAPI functionality (built for the linux-libre${_kernelname} kernel package)" +url='https://github.com/evgeni/tp_smapi' +license=('GPL') +source=("https://github.com/downloads/evgeni/${_pkgname}/${_pkgname}-${pkgver}.tar.gz") +md5sums=('63c683415c764568f6bf17c7eabe4752') + +# Package info +pkgrel=53.${_basekernel/./} +arch=('i686' 'x86_64') +install='kmod.install' + +# Generic (you shouldn't have to modify any of these variables) +pkgname=${_pkgname}-parabola${_kernelname} +_toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) +_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") +makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") +replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability +conflicts=("${_pkgname}${_kernelname}") # for Arch-compatability +provides=( "${_pkgname}${_kernelname}=${pkgver}") # for Arch-compatability +if [[ -n "${_kernelname}" ]]; then + provides+=("${_pkgname}-parabola=${pkgver}") # pkgname without _kernelname +fi + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + sed -ri -e "s/^(KVER\s*:=).*$/\1 ${_kernver}/" \ + -e "s#^(KBASE\s*:=).*\$#\1 /usr/lib/modules/${_kernver}#" Makefile + + make HDAPS=1 +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + # Set the correct extramodules directory for install + cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" + true && install=${install}.pkg + sed -r "s/(_extramodules=).*/\1${_extramodules}/" -i "${startdir}/${install}" + + # Actually install + make -C "/usr/lib/modules/${_kernver}/build" \ + INSTALL_MOD_PATH="${pkgdir}/usr" \ + M="${srcdir}/${_pkgname}-${pkgver}" modules_install + + cd "${pkgdir}/usr/lib/modules" + mv "${_kernver}/extra" "${_extramodules}" + rmdir "${_kernver}" + + # compress kernel modules + find "${pkgdir}" -name "*.ko" -exec gzip -9 {} + + + # load module on startup + install -dm 755 "${pkgdir}/usr/lib/modules-load.d" + echo ${_pkgname} > "${pkgdir}/usr/lib/modules-load.d/${pkgname}.conf" +} diff --git a/libre/tp_smapi-parabola-grsec/kmod.install b/libre/tp_smapi-parabola-grsec/kmod.install new file mode 100644 index 000000000..d4bd8cb34 --- /dev/null +++ b/libre/tp_smapi-parabola-grsec/kmod.install @@ -0,0 +1,14 @@ +post_install() { + _extramodules=THIS_IS_AUTOMATICALLY_SET_BY_PKGBUILD + depmod $(cat /usr/lib/modules/${_extramodules}/version) +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} + +# vim: ts=2 sw=2 et: diff --git a/libre/tp_smapi-parabola-lts/PKGBUILD b/libre/tp_smapi-parabola-lts/PKGBUILD new file mode 100644 index 000000000..4dffb2e0c --- /dev/null +++ b/libre/tp_smapi-parabola-lts/PKGBUILD @@ -0,0 +1,80 @@ +# $Id: PKGBUILD 116831 2014-08-04 07:32:08Z tpowa $ +# Maintainer (Arch): Lukas Fleischer +# Contributor (Arch): xduugu +# Contributor (Arch): nh2 +# Contributor (Arch): Steven Davidovitz +# Contributor (Arch): Nick B +# Contributor (Arch): Christof Musik +# Contributor (Arch): Stefan Rupp +# Contributor (Arch): Ignas Anikevicius +# Maintainer: André Silva +# Contributor: Luke Shumaker + +# Kernel info +_basekernel=3.14 +_kernelname=-lts + +# Source info +_pkgname=tp_smapi +pkgver=0.41 +pkgdesc="Modules for ThinkPad's SMAPI functionality (built for the linux-libre${_kernelname} kernel package)" +url='https://github.com/evgeni/tp_smapi' +license=('GPL') +source=("https://github.com/downloads/evgeni/${_pkgname}/${_pkgname}-${pkgver}.tar.gz") +md5sums=('63c683415c764568f6bf17c7eabe4752') + +# Package info +pkgrel=53.${_basekernel/./} +arch=('i686' 'x86_64') +install='kmod.install' + +# Generic (you shouldn't have to modify any of these variables) +pkgname=${_pkgname}-parabola${_kernelname} +_toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) +_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") +makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") +replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability +conflicts=("${_pkgname}${_kernelname}") # for Arch-compatability +provides=( "${_pkgname}${_kernelname}=${pkgver}") # for Arch-compatability +if [[ -n "${_kernelname}" ]]; then + provides+=("${_pkgname}-parabola=${pkgver}") # pkgname without _kernelname +fi + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + sed -ri -e "s/^(KVER\s*:=).*$/\1 ${_kernver}/" \ + -e "s#^(KBASE\s*:=).*\$#\1 /usr/lib/modules/${_kernver}#" Makefile + + make HDAPS=1 +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + # Set the correct extramodules directory for install + cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" + true && install=${install}.pkg + sed -r "s/(_extramodules=).*/\1${_extramodules}/" -i "${startdir}/${install}" + + # Actually install + make -C "/usr/lib/modules/${_kernver}/build" \ + INSTALL_MOD_PATH="${pkgdir}/usr" \ + M="${srcdir}/${_pkgname}-${pkgver}" modules_install + + cd "${pkgdir}/usr/lib/modules" + mv "${_kernver}/extra" "${_extramodules}" + rmdir "${_kernver}" + + # compress kernel modules + find "${pkgdir}" -name "*.ko" -exec gzip -9 {} + + + # load module on startup + install -dm 755 "${pkgdir}/usr/lib/modules-load.d" + echo ${_pkgname} > "${pkgdir}/usr/lib/modules-load.d/${pkgname}.conf" +} diff --git a/libre/tp_smapi-parabola-lts/kmod.install b/libre/tp_smapi-parabola-lts/kmod.install new file mode 100644 index 000000000..d4bd8cb34 --- /dev/null +++ b/libre/tp_smapi-parabola-lts/kmod.install @@ -0,0 +1,14 @@ +post_install() { + _extramodules=THIS_IS_AUTOMATICALLY_SET_BY_PKGBUILD + depmod $(cat /usr/lib/modules/${_extramodules}/version) +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} + +# vim: ts=2 sw=2 et: diff --git a/libre/tp_smapi-parabola/PKGBUILD b/libre/tp_smapi-parabola/PKGBUILD new file mode 100644 index 000000000..46bae3029 --- /dev/null +++ b/libre/tp_smapi-parabola/PKGBUILD @@ -0,0 +1,80 @@ +# $Id: PKGBUILD 116831 2014-08-04 07:32:08Z tpowa $ +# Maintainer (Arch): Lukas Fleischer +# Contributor (Arch): xduugu +# Contributor (Arch): nh2 +# Contributor (Arch): Steven Davidovitz +# Contributor (Arch): Nick B +# Contributor (Arch): Christof Musik +# Contributor (Arch): Stefan Rupp +# Contributor (Arch): Ignas Anikevicius +# Maintainer: André Silva +# Contributor: Luke Shumaker + +# Kernel info +_basekernel=3.16 +_kernelname= + +# Source info +_pkgname=tp_smapi +pkgver=0.41 +pkgdesc="Modules for ThinkPad's SMAPI functionality (built for the linux-libre${_kernelname} kernel package)" +url='https://github.com/evgeni/tp_smapi' +license=('GPL') +source=("https://github.com/downloads/evgeni/${_pkgname}/${_pkgname}-${pkgver}.tar.gz") +md5sums=('63c683415c764568f6bf17c7eabe4752') + +# Package info +pkgrel=53.${_basekernel/./} +arch=('i686' 'x86_64') +install='kmod.install' + +# Generic (you shouldn't have to modify any of these variables) +pkgname=${_pkgname}-parabola${_kernelname} +_toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) +_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") +makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") +replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability +conflicts=("${_pkgname}${_kernelname}") # for Arch-compatability +provides=( "${_pkgname}${_kernelname}=${pkgver}") # for Arch-compatability +if [[ -n "${_kernelname}" ]]; then + provides+=("${_pkgname}-parabola=${pkgver}") # pkgname without _kernelname +fi + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + sed -ri -e "s/^(KVER\s*:=).*$/\1 ${_kernver}/" \ + -e "s#^(KBASE\s*:=).*\$#\1 /usr/lib/modules/${_kernver}#" Makefile + + make HDAPS=1 +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + # Set the correct extramodules directory for install + cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" + true && install=${install}.pkg + sed -r "s/(_extramodules=).*/\1${_extramodules}/" -i "${startdir}/${install}" + + # Actually install + make -C "/usr/lib/modules/${_kernver}/build" \ + INSTALL_MOD_PATH="${pkgdir}/usr" \ + M="${srcdir}/${_pkgname}-${pkgver}" modules_install + + cd "${pkgdir}/usr/lib/modules" + mv "${_kernver}/extra" "${_extramodules}" + rmdir "${_kernver}" + + # compress kernel modules + find "${pkgdir}" -name "*.ko" -exec gzip -9 {} + + + # load module on startup + install -dm 755 "${pkgdir}/usr/lib/modules-load.d" + echo ${_pkgname} > "${pkgdir}/usr/lib/modules-load.d/${pkgname}.conf" +} diff --git a/libre/tp_smapi-parabola/kmod.install b/libre/tp_smapi-parabola/kmod.install new file mode 100644 index 000000000..d4bd8cb34 --- /dev/null +++ b/libre/tp_smapi-parabola/kmod.install @@ -0,0 +1,14 @@ +post_install() { + _extramodules=THIS_IS_AUTOMATICALLY_SET_BY_PKGBUILD + depmod $(cat /usr/lib/modules/${_extramodules}/version) +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} + +# vim: ts=2 sw=2 et: diff --git a/libre/update-kernel-modules.sh b/libre/update-kernel-modules.sh new file mode 100755 index 000000000..e4c21c6ee --- /dev/null +++ b/libre/update-kernel-modules.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +usage() { + echo "Usage: ./${0##*/} BASEKERNEL [KERNELNAME]" + echo + echo "Examples:" + echo " ./${0##*/} 3.16 # linux-libre" + echo " ./${0##*/} 3.14 -lts # linux-libre-lts" + echo " ./${0##*/} 3.15 -grsec # linux-libre-grsec" +} + +basekernel=$1 +kernelname=$2 + +if [[ -z $basekernel ]]; then + usage + exit 1 +fi + +for kmod in acpi_call bbswitch lirc tp_smapi vhba-module; do + if [[ -n $kernelname ]]; then + rm -rf $kmod-parabola$kernelname + cp -r $kmod-parabola $kmod-parabola$kernelname + fi + sed -r -e "s/^(_basekernel)=.*/\1=${basekernel}/" \ + -e "s/^(_kernelname)=.*/\1=${kernelname}/" \ + -i $kmod-parabola$kernelname/PKGBUILD +done diff --git a/libre/vhba-module-libre/60-vhba.rules b/libre/vhba-module-libre/60-vhba.rules deleted file mode 100644 index 39ae3a4ec..000000000 --- a/libre/vhba-module-libre/60-vhba.rules +++ /dev/null @@ -1 +0,0 @@ -ACTION=="add", KERNEL=="vhba_ctl", NAME="vhba_ctl", MODE="0660", OWNER="root", GROUP="cdemu", TAG+="uaccess" diff --git a/libre/vhba-module-libre/PKGBUILD b/libre/vhba-module-libre/PKGBUILD deleted file mode 100644 index 495a4ad94..000000000 --- a/libre/vhba-module-libre/PKGBUILD +++ /dev/null @@ -1,45 +0,0 @@ -# $Id: PKGBUILD 116828 2014-08-04 07:19:43Z tpowa $ -# Maintainer (Arch): Ray Rashif -# Contributor (Arch): Mateusz Herych -# Contributor (Arch): Charles Lindsay -# Maintainer: André Silva - -_pkgname=vhba-module -pkgname=vhba-module-libre -pkgver=20140629 -_extramodules=extramodules-3.16-libre -pkgrel=6 -pkgdesc="Kernel module that emulates SCSI devices (built for the linux-libre kernel package)" -arch=('i686' 'x86_64' 'mips64el') -url="http://cdemu.sourceforge.net/" -license=('GPL') -depends=('linux-libre>=3.16' 'linux-libre<3.17') -makedepends=('linux-libre-headers>=3.16' 'linux-libre-headers<3.17') -options=(!makeflags) -install=$_pkgname.install -replaces=('vhba-module') -conflicts=('vhba-module') -provides=("vhba-module=$pkgver") -source=("http://downloads.sourceforge.net/cdemu/$_pkgname-$pkgver.tar.bz2" - '60-vhba.rules') -md5sums=('6b307a80df9c163768cc7ecb3ccebb71' - '4dc37dc348b5a2c83585829bde790dcc') - -build() { - cd $_pkgname-$pkgver - _kernver="$(cat /usr/lib/modules/$_extramodules/version)" - make KDIR=/usr/lib/modules/$_kernver/build -} - -package() { - cd $_pkgname-$pkgver - install -Dm644 vhba.ko "$pkgdir/usr/lib/modules/$_extramodules/vhba.ko" - install -Dm644 ../60-vhba.rules "$pkgdir/usr/lib/udev/rules.d/60-vhba.rules" - - cd $startdir - cp -f $install ${install}.pkg - true && install=${install}.pkg - sed -i "s/EXTRAMODULES=.*/EXTRAMODULES=$_extramodules/" $install -} - -# vim:set ts=2 sw=2 et: diff --git a/libre/vhba-module-libre/vhba-module.install b/libre/vhba-module-libre/vhba-module.install deleted file mode 100644 index 793cffd8d..000000000 --- a/libre/vhba-module-libre/vhba-module.install +++ /dev/null @@ -1,22 +0,0 @@ -EXTRAMODULES= - -_updatemod() { - echo " > Updating module dependencies..." - depmod $(cat /usr/lib/modules/$EXTRAMODULES/version) -} - -post_install() { - post_upgrade -} - -post_upgrade() { - getent group cdemu &>/dev/null || groupadd -r cdemu - _updatemod -} - -post_remove() { - _updatemod - groupdel cdemu -} - -# vim:set ts=2 sw=2 et: diff --git a/libre/vhba-module-parabola-grsec/60-vhba.rules b/libre/vhba-module-parabola-grsec/60-vhba.rules new file mode 100644 index 000000000..39ae3a4ec --- /dev/null +++ b/libre/vhba-module-parabola-grsec/60-vhba.rules @@ -0,0 +1 @@ +ACTION=="add", KERNEL=="vhba_ctl", NAME="vhba_ctl", MODE="0660", OWNER="root", GROUP="cdemu", TAG+="uaccess" diff --git a/libre/vhba-module-parabola-grsec/PKGBUILD b/libre/vhba-module-parabola-grsec/PKGBUILD new file mode 100644 index 000000000..ec010b212 --- /dev/null +++ b/libre/vhba-module-parabola-grsec/PKGBUILD @@ -0,0 +1,61 @@ +# $Id: PKGBUILD 116828 2014-08-04 07:19:43Z tpowa $ +# Maintainer (Arch): Ray Rashif +# Contributor (Arch): Mateusz Herych +# Contributor (Arch): Charles Lindsay +# Maintainer: André Silva +# Contributor: Luke Shumaker + +# Kernel info +_basekernel=3.15 +_kernelname=-grsec + +# Source info +_pkgname=vhba-module +pkgver=20140629 +pkgdesc="Kernel module that emulates SCSI devices (built for the linux-libre${_kernelname} kernel package)" +url="http://cdemu.sourceforge.net/" +license=('GPL') +source=("http://downloads.sourceforge.net/cdemu/$_pkgname-$pkgver.tar.bz2" + '60-vhba.rules') +md5sums=('6b307a80df9c163768cc7ecb3ccebb71' + '4dc37dc348b5a2c83585829bde790dcc') + +# Package info +pkgrel=7.${_basekernel/./} +arch=('i686' 'x86_64') +options=(!makeflags) +install=$_pkgname.install + +# Generic (you shouldn't have to modify any of these variables) +pkgname=${_pkgname}-parabola${_kernelname} +_toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) +_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") +makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") +replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability +conflicts=("${_pkgname}${_kernelname}") # for Arch-compatability +provides=( "${_pkgname}${_kernelname}=${pkgver}") # for Arch-compatability +if [[ -n "${_kernelname}" ]]; then + provides+=("${_pkgname}-parabola=${pkgver}") # pkgname without _kernelname +fi + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + make KDIR=/usr/lib/modules/$_kernver/build +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + # Set the correct extramodules directory for install + cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" + true && install=${install}.pkg + sed -r "s/(_extramodules=).*/\1${_extramodules}/" -i "${startdir}/${install}" + + # Actually install + install -Dm644 vhba.ko "$pkgdir/usr/lib/modules/$_extramodules/vhba.ko" + install -Dm644 ../60-vhba.rules "$pkgdir/usr/lib/udev/rules.d/60-vhba.rules" +} diff --git a/libre/vhba-module-parabola-grsec/vhba-module.install b/libre/vhba-module-parabola-grsec/vhba-module.install new file mode 100644 index 000000000..04d26b27b --- /dev/null +++ b/libre/vhba-module-parabola-grsec/vhba-module.install @@ -0,0 +1,20 @@ +_updatemod() { + _extramodules=THIS_IS_AUTOMATICALLY_SET_BY_PKGBUILD + depmod $(cat /usr/lib/modules/${_extramodules}/version) +} + +post_install() { + getent group cdemu &>/dev/null || groupadd -r cdemu + _updatemod +} + +post_upgrade() { + post_install +} + +post_remove() { + _updatemod + groupdel cdemu +} + +# vim:set ts=2 sw=2 et: diff --git a/libre/vhba-module-parabola-lts/60-vhba.rules b/libre/vhba-module-parabola-lts/60-vhba.rules new file mode 100644 index 000000000..39ae3a4ec --- /dev/null +++ b/libre/vhba-module-parabola-lts/60-vhba.rules @@ -0,0 +1 @@ +ACTION=="add", KERNEL=="vhba_ctl", NAME="vhba_ctl", MODE="0660", OWNER="root", GROUP="cdemu", TAG+="uaccess" diff --git a/libre/vhba-module-parabola-lts/PKGBUILD b/libre/vhba-module-parabola-lts/PKGBUILD new file mode 100644 index 000000000..119c0ae55 --- /dev/null +++ b/libre/vhba-module-parabola-lts/PKGBUILD @@ -0,0 +1,61 @@ +# $Id: PKGBUILD 116828 2014-08-04 07:19:43Z tpowa $ +# Maintainer (Arch): Ray Rashif +# Contributor (Arch): Mateusz Herych +# Contributor (Arch): Charles Lindsay +# Maintainer: André Silva +# Contributor: Luke Shumaker + +# Kernel info +_basekernel=3.14 +_kernelname=-lts + +# Source info +_pkgname=vhba-module +pkgver=20140629 +pkgdesc="Kernel module that emulates SCSI devices (built for the linux-libre${_kernelname} kernel package)" +url="http://cdemu.sourceforge.net/" +license=('GPL') +source=("http://downloads.sourceforge.net/cdemu/$_pkgname-$pkgver.tar.bz2" + '60-vhba.rules') +md5sums=('6b307a80df9c163768cc7ecb3ccebb71' + '4dc37dc348b5a2c83585829bde790dcc') + +# Package info +pkgrel=7.${_basekernel/./} +arch=('i686' 'x86_64') +options=(!makeflags) +install=$_pkgname.install + +# Generic (you shouldn't have to modify any of these variables) +pkgname=${_pkgname}-parabola${_kernelname} +_toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) +_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") +makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") +replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability +conflicts=("${_pkgname}${_kernelname}") # for Arch-compatability +provides=( "${_pkgname}${_kernelname}=${pkgver}") # for Arch-compatability +if [[ -n "${_kernelname}" ]]; then + provides+=("${_pkgname}-parabola=${pkgver}") # pkgname without _kernelname +fi + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + make KDIR=/usr/lib/modules/$_kernver/build +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + # Set the correct extramodules directory for install + cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" + true && install=${install}.pkg + sed -r "s/(_extramodules=).*/\1${_extramodules}/" -i "${startdir}/${install}" + + # Actually install + install -Dm644 vhba.ko "$pkgdir/usr/lib/modules/$_extramodules/vhba.ko" + install -Dm644 ../60-vhba.rules "$pkgdir/usr/lib/udev/rules.d/60-vhba.rules" +} diff --git a/libre/vhba-module-parabola-lts/vhba-module.install b/libre/vhba-module-parabola-lts/vhba-module.install new file mode 100644 index 000000000..04d26b27b --- /dev/null +++ b/libre/vhba-module-parabola-lts/vhba-module.install @@ -0,0 +1,20 @@ +_updatemod() { + _extramodules=THIS_IS_AUTOMATICALLY_SET_BY_PKGBUILD + depmod $(cat /usr/lib/modules/${_extramodules}/version) +} + +post_install() { + getent group cdemu &>/dev/null || groupadd -r cdemu + _updatemod +} + +post_upgrade() { + post_install +} + +post_remove() { + _updatemod + groupdel cdemu +} + +# vim:set ts=2 sw=2 et: diff --git a/libre/vhba-module-parabola/60-vhba.rules b/libre/vhba-module-parabola/60-vhba.rules new file mode 100644 index 000000000..39ae3a4ec --- /dev/null +++ b/libre/vhba-module-parabola/60-vhba.rules @@ -0,0 +1 @@ +ACTION=="add", KERNEL=="vhba_ctl", NAME="vhba_ctl", MODE="0660", OWNER="root", GROUP="cdemu", TAG+="uaccess" diff --git a/libre/vhba-module-parabola/PKGBUILD b/libre/vhba-module-parabola/PKGBUILD new file mode 100644 index 000000000..ae08287c3 --- /dev/null +++ b/libre/vhba-module-parabola/PKGBUILD @@ -0,0 +1,61 @@ +# $Id: PKGBUILD 116828 2014-08-04 07:19:43Z tpowa $ +# Maintainer (Arch): Ray Rashif +# Contributor (Arch): Mateusz Herych +# Contributor (Arch): Charles Lindsay +# Maintainer: André Silva +# Contributor: Luke Shumaker + +# Kernel info +_basekernel=3.16 +_kernelname= + +# Source info +_pkgname=vhba-module +pkgver=20140629 +pkgdesc="Kernel module that emulates SCSI devices (built for the linux-libre${_kernelname} kernel package)" +url="http://cdemu.sourceforge.net/" +license=('GPL') +source=("http://downloads.sourceforge.net/cdemu/$_pkgname-$pkgver.tar.bz2" + '60-vhba.rules') +md5sums=('6b307a80df9c163768cc7ecb3ccebb71' + '4dc37dc348b5a2c83585829bde790dcc') + +# Package info +pkgrel=7.${_basekernel/./} +arch=('i686' 'x86_64') +options=(!makeflags) +install=$_pkgname.install + +# Generic (you shouldn't have to modify any of these variables) +pkgname=${_pkgname}-parabola${_kernelname} +_toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) +_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") +makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") +replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability +conflicts=("${_pkgname}${_kernelname}") # for Arch-compatability +provides=( "${_pkgname}${_kernelname}=${pkgver}") # for Arch-compatability +if [[ -n "${_kernelname}" ]]; then + provides+=("${_pkgname}-parabola=${pkgver}") # pkgname without _kernelname +fi + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" + + make KDIR=/usr/lib/modules/$_kernver/build +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + # Set the correct extramodules directory for install + cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" + true && install=${install}.pkg + sed -r "s/(_extramodules=).*/\1${_extramodules}/" -i "${startdir}/${install}" + + # Actually install + install -Dm644 vhba.ko "$pkgdir/usr/lib/modules/$_extramodules/vhba.ko" + install -Dm644 ../60-vhba.rules "$pkgdir/usr/lib/udev/rules.d/60-vhba.rules" +} diff --git a/libre/vhba-module-parabola/vhba-module.install b/libre/vhba-module-parabola/vhba-module.install new file mode 100644 index 000000000..04d26b27b --- /dev/null +++ b/libre/vhba-module-parabola/vhba-module.install @@ -0,0 +1,20 @@ +_updatemod() { + _extramodules=THIS_IS_AUTOMATICALLY_SET_BY_PKGBUILD + depmod $(cat /usr/lib/modules/${_extramodules}/version) +} + +post_install() { + getent group cdemu &>/dev/null || groupadd -r cdemu + _updatemod +} + +post_upgrade() { + post_install +} + +post_remove() { + _updatemod + groupdel cdemu +} + +# vim:set ts=2 sw=2 et: -- cgit v1.2.3 From 156c9dd23d8ce1cf4aeaec2040b1cf3c47309094 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Thu, 21 Aug 2014 14:47:57 -0400 Subject: oops --- libre/linux-libre-api-headers/PKGBUILD | 2 +- libre/linux-libre-grsec/PKGBUILD | 2 +- libre/linux-libre-tools/PKGBUILD | 4 +--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/libre/linux-libre-api-headers/PKGBUILD b/libre/linux-libre-api-headers/PKGBUILD index 88f017199..58dfa37ad 100644 --- a/libre/linux-libre-api-headers/PKGBUILD +++ b/libre/linux-libre-api-headers/PKGBUILD @@ -19,7 +19,7 @@ license=('GPL2') provides=( "linux-api-headers=${pkgver}") conflicts=('linux-api-headers') replaces=( 'linux-api-headers') -source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/linux-libre-${_pkgver}.tar.xz" +source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/linux-libre-${_pkgbasever}.tar.xz" "http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/patch-${_pkgbasever}-${_pkgver}.xz" linux-3.14-xattr_header.patch) md5sums=('c108ec52eeb2a9b9ddbb8d12496ff25f' diff --git a/libre/linux-libre-grsec/PKGBUILD b/libre/linux-libre-grsec/PKGBUILD index 8e1013c40..2cbbdf0e0 100644 --- a/libre/linux-libre-grsec/PKGBUILD +++ b/libre/linux-libre-grsec/PKGBUILD @@ -134,7 +134,7 @@ _package() { # get kernel version _kernver="$(make LOCALVERSION= kernelrelease)" _basekernel=${_kernver%%-*} - _basekernel=${_basekernel%.*.*} + _basekernel=${_basekernel%.*} mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot} make LOCALVERSION= INSTALL_MOD_PATH="${pkgdir}" modules_install diff --git a/libre/linux-libre-tools/PKGBUILD b/libre/linux-libre-tools/PKGBUILD index bb54168dc..b4b5f90d6 100644 --- a/libre/linux-libre-tools/PKGBUILD +++ b/libre/linux-libre-tools/PKGBUILD @@ -57,7 +57,7 @@ sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218' '7547815bb761d49d198b85f95011535713c2ed4a004f249a9cf6ba985af8c4ed') prepare() { - cd "${srcdir}/${_srcname}" + cd $_srcname # add upstream patch if [ "${_pkgbasever}" != "${_pkgver}" ]; then @@ -70,8 +70,6 @@ prepare() { } build() { - cd "${srcdir}/${_srcname}" - msg2 'libtraceevent' pushd $_srcname/tools/lib/traceevent make -- cgit v1.2.3 From ad28364c1f8cfeb35c88054e74e74c8e047ff94c Mon Sep 17 00:00:00 2001 From: "coadde [Márcio Alexandre Silva Delgado]" Date: Fri, 22 Aug 2014 16:13:28 -0300 Subject: build without LOCALVERSION from main linux-libre kernel (-PARABOLA) --- libre/acpi_call-parabola-grsec/PKGBUILD | 2 +- libre/acpi_call-parabola-lts/PKGBUILD | 2 +- libre/acpi_call-parabola/PKGBUILD | 2 +- libre/bbswitch-parabola-grsec/PKGBUILD | 2 +- libre/bbswitch-parabola-lts/PKGBUILD | 2 +- libre/bbswitch-parabola/PKGBUILD | 2 +- libre/linux-libre-grsec/PKGBUILD | 6 +++--- libre/linux-libre-lts/PKGBUILD | 6 +++--- libre/linux-libre/PKGBUILD | 8 ++++---- libre/linux-libre/config.i686 | 2 +- libre/linux-libre/config.x86_64 | 2 +- libre/lirc-parabola-grsec/PKGBUILD | 2 +- libre/lirc-parabola-lts/PKGBUILD | 2 +- libre/lirc-parabola/PKGBUILD | 2 +- libre/tp_smapi-parabola-grsec/PKGBUILD | 2 +- libre/tp_smapi-parabola-lts/PKGBUILD | 2 +- libre/tp_smapi-parabola/PKGBUILD | 2 +- libre/vhba-module-parabola-grsec/PKGBUILD | 2 +- libre/vhba-module-parabola-lts/PKGBUILD | 2 +- libre/vhba-module-parabola/PKGBUILD | 2 +- 20 files changed, 27 insertions(+), 27 deletions(-) diff --git a/libre/acpi_call-parabola-grsec/PKGBUILD b/libre/acpi_call-parabola-grsec/PKGBUILD index af2e44bf2..06c4e4521 100644 --- a/libre/acpi_call-parabola-grsec/PKGBUILD +++ b/libre/acpi_call-parabola-grsec/PKGBUILD @@ -27,7 +27,7 @@ _replaces=("${_pkgname}" "${_pkgname}-libre") # Generic (you shouldn't have to modify any of these variables) pkgname=${_pkgname}-parabola${_kernelname} _toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) -_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +_extramodules=extramodules-${_basekernel}${_kernelname} depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") replaces=( "${_replaces[@]/%/${_kernelname}}") diff --git a/libre/acpi_call-parabola-lts/PKGBUILD b/libre/acpi_call-parabola-lts/PKGBUILD index 8f03cbfb5..3b7bc0bf4 100644 --- a/libre/acpi_call-parabola-lts/PKGBUILD +++ b/libre/acpi_call-parabola-lts/PKGBUILD @@ -27,7 +27,7 @@ _replaces=("${_pkgname}" "${_pkgname}-libre") # Generic (you shouldn't have to modify any of these variables) pkgname=${_pkgname}-parabola${_kernelname} _toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) -_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +_extramodules=extramodules-${_basekernel}${_kernelname} depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") replaces=( "${_replaces[@]/%/${_kernelname}}") diff --git a/libre/acpi_call-parabola/PKGBUILD b/libre/acpi_call-parabola/PKGBUILD index 480e8d48a..27e0ae3be 100644 --- a/libre/acpi_call-parabola/PKGBUILD +++ b/libre/acpi_call-parabola/PKGBUILD @@ -27,7 +27,7 @@ _replaces=("${_pkgname}" "${_pkgname}-libre") # Generic (you shouldn't have to modify any of these variables) pkgname=${_pkgname}-parabola${_kernelname} _toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) -_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +_extramodules=extramodules-${_basekernel}${_kernelname} depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") replaces=( "${_replaces[@]/%/${_kernelname}}") diff --git a/libre/bbswitch-parabola-grsec/PKGBUILD b/libre/bbswitch-parabola-grsec/PKGBUILD index 7d2ea7c48..927d0e9e9 100644 --- a/libre/bbswitch-parabola-grsec/PKGBUILD +++ b/libre/bbswitch-parabola-grsec/PKGBUILD @@ -26,7 +26,7 @@ install='kmod.install' # Generic (you shouldn't have to modify any of these variables) pkgname=${_pkgname}-parabola${_kernelname} _toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) -_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +_extramodules=extramodules-${_basekernel}${_kernelname} depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability diff --git a/libre/bbswitch-parabola-lts/PKGBUILD b/libre/bbswitch-parabola-lts/PKGBUILD index 59cf046ab..232250942 100644 --- a/libre/bbswitch-parabola-lts/PKGBUILD +++ b/libre/bbswitch-parabola-lts/PKGBUILD @@ -26,7 +26,7 @@ install='kmod.install' # Generic (you shouldn't have to modify any of these variables) pkgname=${_pkgname}-parabola${_kernelname} _toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) -_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +_extramodules=extramodules-${_basekernel}${_kernelname} depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability diff --git a/libre/bbswitch-parabola/PKGBUILD b/libre/bbswitch-parabola/PKGBUILD index 83f37239b..633747617 100644 --- a/libre/bbswitch-parabola/PKGBUILD +++ b/libre/bbswitch-parabola/PKGBUILD @@ -26,7 +26,7 @@ install='kmod.install' # Generic (you shouldn't have to modify any of these variables) pkgname=${_pkgname}-parabola${_kernelname} _toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) -_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +_extramodules=extramodules-${_basekernel}${_kernelname} depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability diff --git a/libre/linux-libre-grsec/PKGBUILD b/libre/linux-libre-grsec/PKGBUILD index fc344bdfe..ffb4ad7fe 100644 --- a/libre/linux-libre-grsec/PKGBUILD +++ b/libre/linux-libre-grsec/PKGBUILD @@ -164,10 +164,10 @@ _package() { # gzip -9 all modules to save 100MB of space find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; # make room for external modules - ln -s "../extramodules-${_basekernel}${_kernelname:--PARABOLA}" "${pkgdir}/lib/modules/${_kernver}/extramodules" + ln -s "../extramodules-${_basekernel}${_kernelname}" "${pkgdir}/lib/modules/${_kernver}/extramodules" # add real version for building modules and running depmod from post_install/upgrade - mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--PARABOLA}" - echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--PARABOLA}/version" + mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname}" + echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname}/version" # Now we call depmod... depmod -b "${pkgdir}" -F System.map "${_kernver}" diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD index 192de5963..c85f4e917 100644 --- a/libre/linux-libre-lts/PKGBUILD +++ b/libre/linux-libre-lts/PKGBUILD @@ -168,10 +168,10 @@ _package() { # gzip -9 all modules to save 100MB of space find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; # make room for external modules - ln -s "../extramodules-${_basekernel}${_kernelname:--PARABOLA}" "${pkgdir}/lib/modules/${_kernver}/extramodules" + ln -s "../extramodules-${_basekernel}${_kernelname}" "${pkgdir}/lib/modules/${_kernver}/extramodules" # add real version for building modules and running depmod from post_install/upgrade - mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--PARABOLA}" - echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--PARABOLA}/version" + mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname}" + echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname}/version" # Now we call depmod... depmod -b "${pkgdir}" -F System.map "${_kernver}" diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD index 367ae5d54..efd308276 100644 --- a/libre/linux-libre/PKGBUILD +++ b/libre/linux-libre/PKGBUILD @@ -8,7 +8,7 @@ # Contributor: Márcio Silva # Contributor: Luke Shumaker -pkgbase=linux-libre # Build stock -PARABOLA kernel +pkgbase=linux-libre # Build stock "" kernel #pkgbase=linux-libre-custom # Build kernel with a different name _pkgbasever=3.16-gnu _pkgver=3.16.1-gnu @@ -155,10 +155,10 @@ _package() { # gzip -9 all modules to save 100MB of space find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; # make room for external modules - ln -s "../extramodules-${_basekernel}${_kernelname:--PARABOLA}" "${pkgdir}/lib/modules/${_kernver}/extramodules" + ln -s "../extramodules-${_basekernel}${_kernelname}" "${pkgdir}/lib/modules/${_kernver}/extramodules" # add real version for building modules and running depmod from post_install/upgrade - mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--PARABOLA}" - echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--PARABOLA}/version" + mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname}" + echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname}/version" # Now we call depmod... depmod -b "${pkgdir}" -F System.map "${_kernver}" diff --git a/libre/linux-libre/config.i686 b/libre/linux-libre/config.i686 index 3a04607aa..4ae45413e 100644 --- a/libre/linux-libre/config.i686 +++ b/libre/linux-libre/config.i686 @@ -49,7 +49,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="-PARABOLA" +CONFIG_LOCALVERSION="" CONFIG_LOCALVERSION_AUTO=y CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/libre/linux-libre/config.x86_64 b/libre/linux-libre/config.x86_64 index f6d137835..839fefb0f 100644 --- a/libre/linux-libre/config.x86_64 +++ b/libre/linux-libre/config.x86_64 @@ -50,7 +50,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="-PARABOLA" +CONFIG_LOCALVERSION="" CONFIG_LOCALVERSION_AUTO=y CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/libre/lirc-parabola-grsec/PKGBUILD b/libre/lirc-parabola-grsec/PKGBUILD index 53e090f93..07f39c6e9 100644 --- a/libre/lirc-parabola-grsec/PKGBUILD +++ b/libre/lirc-parabola-grsec/PKGBUILD @@ -42,7 +42,7 @@ makedepends=('help2man' 'alsa-lib' 'libx11' 'libftdi-compat' 'libirman' 'python2 # Generic (you shouldn't have to modify any of these variables) _toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) -_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +_extramodules=extramodules-${_basekernel}${_kernelname} makedepends+=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}" "linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") diff --git a/libre/lirc-parabola-lts/PKGBUILD b/libre/lirc-parabola-lts/PKGBUILD index beca86a2f..b1d4d8c64 100644 --- a/libre/lirc-parabola-lts/PKGBUILD +++ b/libre/lirc-parabola-lts/PKGBUILD @@ -42,7 +42,7 @@ makedepends=('help2man' 'alsa-lib' 'libx11' 'libftdi-compat' 'libirman' 'python2 # Generic (you shouldn't have to modify any of these variables) _toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) -_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +_extramodules=extramodules-${_basekernel}${_kernelname} makedepends+=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}" "linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") diff --git a/libre/lirc-parabola/PKGBUILD b/libre/lirc-parabola/PKGBUILD index e22d22841..60b1f8674 100644 --- a/libre/lirc-parabola/PKGBUILD +++ b/libre/lirc-parabola/PKGBUILD @@ -44,7 +44,7 @@ makedepends=('help2man' 'alsa-lib' 'libx11' 'libftdi-compat' 'libirman' 'python2 # Generic (you shouldn't have to modify any of these variables) _toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) -_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +_extramodules=extramodules-${_basekernel}${_kernelname} makedepends+=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}" "linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") diff --git a/libre/tp_smapi-parabola-grsec/PKGBUILD b/libre/tp_smapi-parabola-grsec/PKGBUILD index 65e23730b..b6c29a239 100644 --- a/libre/tp_smapi-parabola-grsec/PKGBUILD +++ b/libre/tp_smapi-parabola-grsec/PKGBUILD @@ -31,7 +31,7 @@ install='kmod.install' # Generic (you shouldn't have to modify any of these variables) pkgname=${_pkgname}-parabola${_kernelname} _toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) -_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +_extramodules=extramodules-${_basekernel}${_kernelname} depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability diff --git a/libre/tp_smapi-parabola-lts/PKGBUILD b/libre/tp_smapi-parabola-lts/PKGBUILD index 4dffb2e0c..fd59dd37b 100644 --- a/libre/tp_smapi-parabola-lts/PKGBUILD +++ b/libre/tp_smapi-parabola-lts/PKGBUILD @@ -31,7 +31,7 @@ install='kmod.install' # Generic (you shouldn't have to modify any of these variables) pkgname=${_pkgname}-parabola${_kernelname} _toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) -_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +_extramodules=extramodules-${_basekernel}${_kernelname} depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability diff --git a/libre/tp_smapi-parabola/PKGBUILD b/libre/tp_smapi-parabola/PKGBUILD index 46bae3029..30901436c 100644 --- a/libre/tp_smapi-parabola/PKGBUILD +++ b/libre/tp_smapi-parabola/PKGBUILD @@ -31,7 +31,7 @@ install='kmod.install' # Generic (you shouldn't have to modify any of these variables) pkgname=${_pkgname}-parabola${_kernelname} _toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) -_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +_extramodules=extramodules-${_basekernel}${_kernelname} depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability diff --git a/libre/vhba-module-parabola-grsec/PKGBUILD b/libre/vhba-module-parabola-grsec/PKGBUILD index ec010b212..96aa61aa4 100644 --- a/libre/vhba-module-parabola-grsec/PKGBUILD +++ b/libre/vhba-module-parabola-grsec/PKGBUILD @@ -29,7 +29,7 @@ install=$_pkgname.install # Generic (you shouldn't have to modify any of these variables) pkgname=${_pkgname}-parabola${_kernelname} _toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) -_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +_extramodules=extramodules-${_basekernel}${_kernelname} depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability diff --git a/libre/vhba-module-parabola-lts/PKGBUILD b/libre/vhba-module-parabola-lts/PKGBUILD index 119c0ae55..a56873b2a 100644 --- a/libre/vhba-module-parabola-lts/PKGBUILD +++ b/libre/vhba-module-parabola-lts/PKGBUILD @@ -29,7 +29,7 @@ install=$_pkgname.install # Generic (you shouldn't have to modify any of these variables) pkgname=${_pkgname}-parabola${_kernelname} _toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) -_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +_extramodules=extramodules-${_basekernel}${_kernelname} depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability diff --git a/libre/vhba-module-parabola/PKGBUILD b/libre/vhba-module-parabola/PKGBUILD index ae08287c3..c3af30632 100644 --- a/libre/vhba-module-parabola/PKGBUILD +++ b/libre/vhba-module-parabola/PKGBUILD @@ -29,7 +29,7 @@ install=$_pkgname.install # Generic (you shouldn't have to modify any of these variables) pkgname=${_pkgname}-parabola${_kernelname} _toohigh=$(IFS=. read a b <<<$_basekernel; echo $a.$((b+1))) -_extramodules=extramodules-${_basekernel}${_kernelname:--PARABOLA} +_extramodules=extramodules-${_basekernel}${_kernelname} depends=("linux-libre${_kernelname}>=${_basekernel}" "linux-libre${_kernelname}<${_toohigh}") makedepends=("linux-libre${_kernelname}-headers>=${_basekernel}" "linux-libre${_kernelname}-headers<${_toohigh}") replaces=( "${_pkgname}${_kernelname}") # for Arch-compatability -- cgit v1.2.3 From ea057c80962ccf3eaedfe0df2af1302a97d4e114 Mon Sep 17 00:00:00 2001 From: "coadde [Márcio Alexandre Silva Delgado]" Date: Fri, 22 Aug 2014 16:25:35 -0300 Subject: change Kernel Configuration Description --- kernels/linux-libre-lts-knock/config.i686 | 2 +- kernels/linux-libre-lts-knock/config.mips64el | 2 +- kernels/linux-libre-lts-knock/config.x86_64 | 2 +- kernels/linux-libre-rt/config.i686 | 2 +- kernels/linux-libre-rt/config.mips64el | 2 +- kernels/linux-libre-rt/config.x86_64 | 2 +- libre/linux-libre-grsec/config.i686 | 2 +- libre/linux-libre-grsec/config.mips64el | 2 +- libre/linux-libre-grsec/config.x86_64 | 2 +- libre/linux-libre-lts/config.i686 | 2 +- libre/linux-libre-lts/config.mips64el | 2 +- libre/linux-libre-lts/config.x86_64 | 2 +- libre/linux-libre/config.i686 | 2 +- libre/linux-libre/config.mips64el | 2 +- libre/linux-libre/config.x86_64 | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/kernels/linux-libre-lts-knock/config.i686 b/kernels/linux-libre-lts-knock/config.i686 index 075caa9be..017b2fdce 100644 --- a/kernels/linux-libre-lts-knock/config.i686 +++ b/kernels/linux-libre-lts-knock/config.i686 @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.10.43 Kernel Configuration +# Linux/x86 3.10.43-gnu-1-lts-knock Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y diff --git a/kernels/linux-libre-lts-knock/config.mips64el b/kernels/linux-libre-lts-knock/config.mips64el index fd029fdb6..69f2bc4c9 100644 --- a/kernels/linux-libre-lts-knock/config.mips64el +++ b/kernels/linux-libre-lts-knock/config.mips64el @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/mips 3.10.53-gnu Kernel Configuration +# Linux/mips 3.10.53-gnu-1-lts-knock Kernel Configuration # CONFIG_MIPS=y diff --git a/kernels/linux-libre-lts-knock/config.x86_64 b/kernels/linux-libre-lts-knock/config.x86_64 index 1985392e3..93698f08a 100644 --- a/kernels/linux-libre-lts-knock/config.x86_64 +++ b/kernels/linux-libre-lts-knock/config.x86_64 @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.10.15-1 Kernel Configuration +# Linux/x86 3.10.15-gnu-1-lts-knock Kernel Configuration # CONFIG_64BIT=y CONFIG_X86_64=y diff --git a/kernels/linux-libre-rt/config.i686 b/kernels/linux-libre-rt/config.i686 index d8950ad6f..f34946047 100644 --- a/kernels/linux-libre-rt/config.i686 +++ b/kernels/linux-libre-rt/config.i686 @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.14.10 Kernel Configuration +# Linux/x86 3.14.10-gnu-1-rt Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y diff --git a/kernels/linux-libre-rt/config.mips64el b/kernels/linux-libre-rt/config.mips64el index 4cb63fb4c..f9dd3966c 100644 --- a/kernels/linux-libre-rt/config.mips64el +++ b/kernels/linux-libre-rt/config.mips64el @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/mips 3.14.17-gnu Kernel Configuration +# Linux/mips 3.14.17-gnu-1-rt Kernel Configuration # CONFIG_MIPS=y diff --git a/kernels/linux-libre-rt/config.x86_64 b/kernels/linux-libre-rt/config.x86_64 index 9df9cc9ba..f332f7cbb 100644 --- a/kernels/linux-libre-rt/config.x86_64 +++ b/kernels/linux-libre-rt/config.x86_64 @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.14.10 Kernel Configuration +# Linux/x86 3.14.10-gnu-1-rt Kernel Configuration # CONFIG_64BIT=y CONFIG_X86_64=y diff --git a/libre/linux-libre-grsec/config.i686 b/libre/linux-libre-grsec/config.i686 index 170ee212b..7d18bc40a 100644 --- a/libre/linux-libre-grsec/config.i686 +++ b/libre/linux-libre-grsec/config.i686 @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.15.10.201408140023-1 Kernel Configuration +# Linux/x86 3.15.10-gnu-201408140023-1-grsec Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y diff --git a/libre/linux-libre-grsec/config.mips64el b/libre/linux-libre-grsec/config.mips64el index fcfe3c8df..0072421fc 100644 --- a/libre/linux-libre-grsec/config.mips64el +++ b/libre/linux-libre-grsec/config.mips64el @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/mips 3.15.10-gnu Kernel Configuration +# Linux/mips 3.15.10-gnu-201408140023-1-grsec Kernel Configuration # CONFIG_MIPS=y diff --git a/libre/linux-libre-grsec/config.x86_64 b/libre/linux-libre-grsec/config.x86_64 index 121a42e4d..af4f751af 100644 --- a/libre/linux-libre-grsec/config.x86_64 +++ b/libre/linux-libre-grsec/config.x86_64 @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.15.10.201408140023-1 Kernel Configuration +# Linux/x86 3.15.10-gnu-201408140023-1-grsec Kernel Configuration # CONFIG_64BIT=y CONFIG_X86_64=y diff --git a/libre/linux-libre-lts/config.i686 b/libre/linux-libre-lts/config.i686 index f89ab0152..37b745087 100644 --- a/libre/linux-libre-lts/config.i686 +++ b/libre/linux-libre-lts/config.i686 @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.14.11-1 Kernel Configuration +# Linux/x86 3.14.11-gnu-1-lts Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y diff --git a/libre/linux-libre-lts/config.mips64el b/libre/linux-libre-lts/config.mips64el index 4cb63fb4c..80a89075e 100644 --- a/libre/linux-libre-lts/config.mips64el +++ b/libre/linux-libre-lts/config.mips64el @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/mips 3.14.17-gnu Kernel Configuration +# Linux/mips 3.14.17-gnu-1-lts Kernel Configuration # CONFIG_MIPS=y diff --git a/libre/linux-libre-lts/config.x86_64 b/libre/linux-libre-lts/config.x86_64 index 8f0ecc8e2..ada845fdc 100644 --- a/libre/linux-libre-lts/config.x86_64 +++ b/libre/linux-libre-lts/config.x86_64 @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.14.11-1 Kernel Configuration +# Linux/x86 3.14.11-gnu-1-lts Kernel Configuration # CONFIG_64BIT=y CONFIG_X86_64=y diff --git a/libre/linux-libre/config.i686 b/libre/linux-libre/config.i686 index 4ae45413e..526d232f7 100644 --- a/libre/linux-libre/config.i686 +++ b/libre/linux-libre/config.i686 @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.16.0-2 Kernel Configuration +# Linux/x86 3.16.0-gnu-2 Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y diff --git a/libre/linux-libre/config.mips64el b/libre/linux-libre/config.mips64el index 9a773e104..fbd2fbedb 100644 --- a/libre/linux-libre/config.mips64el +++ b/libre/linux-libre/config.mips64el @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/mips 3.16.1-gnu Kernel Configuration +# Linux/mips 3.16.1-gnu-1 Kernel Configuration # CONFIG_MIPS=y diff --git a/libre/linux-libre/config.x86_64 b/libre/linux-libre/config.x86_64 index 839fefb0f..19b60ec42 100644 --- a/libre/linux-libre/config.x86_64 +++ b/libre/linux-libre/config.x86_64 @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.16.0-2 Kernel Configuration +# Linux/x86 3.16.0-gnu-2 Kernel Configuration # CONFIG_64BIT=y CONFIG_X86_64=y -- cgit v1.2.3 From a7b10d72c95cc34b50a456103f2366d7aa414a17 Mon Sep 17 00:00:00 2001 From: "coadde [Márcio Alexandre Silva Delgado]" Date: Fri, 22 Aug 2014 16:30:45 -0300 Subject: add mips64el support for all packages --- elementary/gtk-engine-equinox/PKGBUILD | 2 +- elementary/postler/PKGBUILD | 2 +- elementary/vala-010/PKGBUILD | 2 +- gis/grass/PKGBUILD | 2 +- gis/libfreexl/PKGBUILD | 2 +- gis/libspatialite/PKGBUILD | 2 +- gis/merkaartor/PKGBUILD | 2 +- gis/qgis/PKGBUILD | 2 +- gis/spatialindex/PKGBUILD | 2 +- java/arduino/PKGBUILD | 2 +- java/byaccj/PKGBUILD | 2 +- java/java-rxtx/PKGBUILD | 2 +- java/jna/PKGBUILD | 2 +- java/not-working/protobuf/PKGBUILD | 2 +- kernels/xen-docs/PKGBUILD | 2 +- libre-multilib/pcsx2-libre/PKGBUILD | 2 +- libre/acpi_call-parabola-grsec/PKGBUILD | 2 +- libre/acpi_call-parabola-lts/PKGBUILD | 2 +- libre/acpi_call-parabola/PKGBUILD | 2 +- libre/antlr2/PKGBUILD | 2 +- libre/audex-libre/PKGBUILD | 2 +- libre/avidemux-libre/PKGBUILD | 2 +- libre/avidemux-libre/PKGBUILD.WIP | 2 +- libre/bbswitch-parabola-grsec/PKGBUILD | 2 +- libre/bbswitch-parabola-lts/PKGBUILD | 2 +- libre/bbswitch-parabola/PKGBUILD | 2 +- libre/blackbox-libre/PKGBUILD | 2 +- libre/bogofilter-libre/PKGBUILD | 2 +- libre/bumblebee-libre/PKGBUILD | 2 +- libre/clementine-libre/PKGBUILD | 2 +- libre/crosstool-ng/PKGBUILD | 2 +- libre/cups-filters-libre/PKGBUILD | 2 +- libre/distcc-nozeroconf/PKGBUILD | 2 +- libre/doublecmd-libre/PKGBUILD | 2 +- libre/dvdrip-libre/PKGBUILD | 2 +- libre/ecasound-libre/PKGBUILD | 2 +- libre/ghostscript-libre/PKGBUILD | 2 +- libre/giflib-lts/PKGBUILD | 2 +- libre/gloobus-preview-libre/PKGBUILD | 2 +- libre/gnome-boxes-libre/PKGBUILD | 2 +- libre/grub-legacy/PKGBUILD | 2 +- libre/handbrake-svn/PKGBUILD | 2 +- libre/hardinfo/PKGBUILD | 2 +- libre/hplip-libre/PKGBUILD | 2 +- libre/libosinfo-libre/PKGBUILD | 2 +- libre/libquicktime-libre/PKGBUILD | 2 +- libre/liferea-libre/PKGBUILD | 2 +- libre/linux-libre-api-headers/PKGBUILD | 2 +- libre/linux-libre-grsec/PKGBUILD | 2 +- libre/linux-libre-lts/PKGBUILD | 2 +- libre/linux-libre-tools/PKGBUILD | 2 +- libre/linux-libre/PKGBUILD | 2 +- libre/mplayer-libre-vaapi/PKGBUILD | 2 +- libre/mplayer-libre/PKGBUILD | 2 +- libre/nant/PKGBUILD | 2 +- libre/ogmrip-libre/PKGBUILD | 2 +- libre/oss-libre/PKGBUILD | 2 +- libre/parabolaweb-utils/PKGBUILD | 2 +- libre/python-reportlab-libre/PKGBUILD | 2 +- libre/rp-pppoe-libre/PKGBUILD | 2 +- libre/ruby-hpricot/PKGBUILD | 2 +- libre/ruby-rdiscount/PKGBUILD | 2 +- libre/sdl-libre/PKGBUILD | 2 +- libre/soundkonverter-libre/PKGBUILD | 2 +- libre/spacefm-libre/PKGBUILD | 2 +- libre/tp_smapi-parabola-grsec/PKGBUILD | 2 +- libre/tp_smapi-parabola-lts/PKGBUILD | 2 +- libre/tp_smapi-parabola/PKGBUILD | 2 +- libre/unzip-libre/PKGBUILD | 2 +- libre/vhba-module-parabola-grsec/PKGBUILD | 2 +- libre/vhba-module-parabola-lts/PKGBUILD | 2 +- libre/vhba-module-parabola/PKGBUILD | 2 +- libre/xbmc-libre-lts/PKGBUILD | 2 +- libre/xbmc-libre/PKGBUILD | 2 +- libre/xbmc-pvr-addons-lts/PKGBUILD | 2 +- libre/xmlstarlet/PKGBUILD | 2 +- libre/xorg-server-libre/PKGBUILD | 2 +- nonprism/banshee-nonprism/PKGBUILD | 2 +- nonprism/centerim-nonprism/PKGBUILD | 2 +- nonprism/duplicity-nonprism/PKGBUILD | 2 +- nonprism/eog-plugins-nonprism/PKGBUILD | 2 +- nonprism/kdepim-nonprism/PKGBUILD | 2 +- nonprism/kdepim-runtime-nonprism/PKGBUILD | 2 +- nonprism/shotwell-nonprism/PKGBUILD | 2 +- nonprism/sylpheed-nonprism/PKGBUILD | 2 +- pcr/9mount/PKGBUILD | 2 +- pcr/amsynth/PKGBUILD | 2 +- pcr/anyremote/PKGBUILD | 2 +- pcr/apparmor/PKGBUILD | 2 +- pcr/asterisk/PKGBUILD | 2 +- pcr/babeld/PKGBUILD | 2 +- pcr/bambus/PKGBUILD | 2 +- pcr/bamf2/PKGBUILD | 2 +- pcr/barnyard2/PKGBUILD | 2 +- pcr/bison++/PKGBUILD | 2 +- pcr/boswars/PKGBUILD | 2 +- pcr/brutalchess/PKGBUILD | 2 +- pcr/bup/PKGBUILD | 2 +- pcr/cegui-0.5/PKGBUILD | 2 +- pcr/cegui-0.6/PKGBUILD | 2 +- pcr/cgdb/PKGBUILD | 2 +- pcr/cherokee/PKGBUILD | 2 +- pcr/cl-ppcre/PKGBUILD | 2 +- pcr/clx-git/PKGBUILD | 2 +- pcr/coin/PKGBUILD | 2 +- pcr/command-not-found/PKGBUILD | 2 +- pcr/conkeror/PKGBUILD | 2 +- pcr/conky-lua/PKGBUILD | 2 +- pcr/cowpatty/PKGBUILD | 2 +- pcr/cppo/PKGBUILD | 2 +- pcr/cpptest/PKGBUILD | 2 +- pcr/cpuminer/PKGBUILD | 2 +- pcr/culmus-latex/PKGBUILD | 2 +- pcr/cw/PKGBUILD | 2 +- pcr/d0_blind_id-git/PKGBUILD | 2 +- pcr/django-tagging/PKGBUILD | 2 +- pcr/dratmenu/PKGBUILD | 2 +- pcr/drumgizmo/PKGBUILD | 2 +- pcr/emacs-bzr/PKGBUILD | 2 +- pcr/emacs-elib/PKGBUILD | 2 +- pcr/emacs-js2-mode/PKGBUILD | 2 +- pcr/emacs-lucid/PKGBUILD | 2 +- pcr/eterm/PKGBUILD | 2 +- pcr/evolution-mapi/PKGBUILD | 2 +- pcr/filemq/PKGBUILD | 2 +- pcr/font-manager/PKGBUILD | 2 +- pcr/fpdns/PKGBUILD | 2 +- pcr/freeipmi/PKGBUILD | 2 +- pcr/freetuxtv/PKGBUILD | 2 +- pcr/galera/PKGBUILD | 2 +- pcr/gcc-gcj/PKGBUILD | 2 +- pcr/geis/PKGBUILD | 2 +- pcr/gens-gs/PKGBUILD | 2 +- pcr/ginn/PKGBUILD | 2 +- pcr/gloobus-preview-bzr/PKGBUILD | 2 +- pcr/gmqcc-git/PKGBUILD | 2 +- pcr/gnomeradio/PKGBUILD | 2 +- pcr/gnucash-docs/PKGBUILD | 2 +- pcr/gnuit/PKGBUILD | 2 +- pcr/godep/PKGBUILD | 2 +- pcr/grail/PKGBUILD | 2 +- pcr/grass/PKGBUILD | 2 +- pcr/gtkmm-utils/PKGBUILD | 2 +- pcr/hiawatha/PKGBUILD | 2 +- pcr/higan-gtk/PKGBUILD | 2 +- pcr/higan-qt/PKGBUILD | 2 +- pcr/htmldoc/PKGBUILD | 2 +- pcr/httrack/PKGBUILD | 2 +- pcr/hwd/PKGBUILD | 2 +- pcr/ibus-bogo/PKGBUILD | 2 +- pcr/idjc/PKGBUILD | 2 +- pcr/initng-git/PKGBUILD | 2 +- pcr/ipmiutil/PKGBUILD | 2 +- pcr/ipycli-git/PKGBUILD | 2 +- pcr/irssi-otr-git/PKGBUILD | 2 +- pcr/irssi-otr/PKGBUILD | 2 +- pcr/jack-rack/PKGBUILD | 2 +- pcr/jdee/PKGBUILD | 2 +- pcr/kamailio/PKGBUILD | 2 +- pcr/knot/PKGBUILD | 2 +- pcr/libast/PKGBUILD | 2 +- pcr/libcgroup/PKGBUILD | 2 +- pcr/libfreexl/PKGBUILD | 2 +- pcr/libibus/PKGBUILD | 2 +- pcr/libpng12/PKGBUILD | 2 +- pcr/libqinfinity/PKGBUILD | 2 +- pcr/libspatialite/PKGBUILD | 2 +- pcr/libsquish-svn/PKGBUILD | 2 +- pcr/liburcu/PKGBUILD | 2 +- pcr/libwww-hg/PKGBUILD | 2 +- pcr/lilo/PKGBUILD | 2 +- pcr/litecoin-qt/PKGBUILD | 2 +- pcr/log4c/PKGBUILD | 2 +- pcr/log4cxx/PKGBUILD | 2 +- pcr/lua51-sql-mysql/PKGBUILD | 2 +- pcr/lv2-ir/PKGBUILD | 2 +- pcr/mariadb-galera/PKGBUILD | 2 +- pcr/md5deep/PKGBUILD | 2 +- pcr/minetest-git/PKGBUILD | 2 +- pcr/mit-scheme/PKGBUILD | 2 +- pcr/moblock/PKGBUILD | 2 +- pcr/msdl/PKGBUILD | 2 +- pcr/multipath-tools/PKGBUILD | 2 +- pcr/multiwatch/PKGBUILD | 2 +- pcr/musescore/PKGBUILD | 2 +- pcr/nagios-nrpe-plugin/PKGBUILD | 2 +- pcr/nagios-plugins/PKGBUILD | 2 +- pcr/nautilus-dropbox/PKGBUILD | 2 +- pcr/nel-hg/PKGBUILD | 2 +- pcr/networkmanager-openswan/PKGBUILD | 2 +- pcr/networkmanager-strongswan/PKGBUILD | 2 +- pcr/nexuiz/PKGBUILD | 2 +- pcr/nfacct/PKGBUILD | 2 +- pcr/nginx-passenger/PKGBUILD | 2 +- pcr/note/PKGBUILD | 2 +- pcr/npapi-vlc-git/PKGBUILD | 2 +- pcr/ocaml-biniou/PKGBUILD | 2 +- pcr/ocaml-camomile/PKGBUILD | 2 +- pcr/ocaml-curl/PKGBUILD | 2 +- pcr/ocaml-easy-format/PKGBUILD | 2 +- pcr/ocaml-extlib/PKGBUILD | 2 +- pcr/ocaml-lwt/PKGBUILD | 2 +- pcr/ocaml-ounit/PKGBUILD | 2 +- pcr/ocaml-pcre/PKGBUILD | 2 +- pcr/ocaml-react/PKGBUILD | 2 +- pcr/ocaml-ssl/PKGBUILD | 2 +- pcr/ocaml-text/PKGBUILD | 2 +- pcr/ocaml-xmlm/PKGBUILD | 2 +- pcr/ocaml-yojson/PKGBUILD | 2 +- pcr/ocrodjvu/PKGBUILD | 2 +- pcr/oggfwd/PKGBUILD | 2 +- pcr/oinkmaster/PKGBUILD | 2 +- pcr/openchange/PKGBUILD | 2 +- pcr/openicc/PKGBUILD | 2 +- pcr/openjdk6/PKGBUILD | 2 +- pcr/openswan/PKGBUILD | 2 +- pcr/pacman-color/PKGBUILD | 2 +- pcr/pactools/PKGBUILD | 2 +- pcr/pandoc/PKGBUILD | 2 +- pcr/pdsh/PKGBUILD | 2 +- pcr/perl-astro-suntime/PKGBUILD | 2 +- pcr/perl-file-find-rule/PKGBUILD | 2 +- pcr/perl-iptables-chainmgr/PKGBUILD | 2 +- pcr/perl-iptables-parse/PKGBUILD | 2 +- pcr/perl-math-bigint-gmp/PKGBUILD | 2 +- pcr/perl-number-compare/PKGBUILD | 2 +- pcr/perl-sys-mmap/PKGBUILD | 2 +- pcr/perl-unicode-map/PKGBUILD | 2 +- pcr/polarssl/PKGBUILD | 2 +- pcr/postsrsd/PKGBUILD | 2 +- pcr/pspp/PKGBUILD | 2 +- pcr/pumpa/PKGBUILD | 2 +- pcr/pycryptopp/PKGBUILD | 2 +- pcr/python-efl/PKGBUILD | 2 +- pcr/python-gensim/PKGBUILD | 2 +- pcr/python-wsgiref/PKGBUILD | 2 +- pcr/python-xattr/PKGBUILD | 2 +- pcr/python2-async/PKGBUILD | 2 +- pcr/python2-djvulibre/PKGBUILD | 2 +- pcr/python2-gitdb/PKGBUILD | 2 +- pcr/python2-mock/PKGBUILD | 2 +- pcr/python2-passlib/PKGBUILD | 2 +- pcr/python2-pyicu/PKGBUILD | 2 +- pcr/python2-sendfile/PKGBUILD | 2 +- pcr/python2-smmap/PKGBUILD | 2 +- pcr/qemu-usbredir/PKGBUILD | 2 +- pcr/qgis/PKGBUILD | 2 +- pcr/qt-at-spi-git/PKGBUILD | 2 +- pcr/qtkeychain/PKGBUILD | 2 +- pcr/qtoctave/PKGBUILD | 2 +- pcr/quackle/PKGBUILD | 2 +- pcr/quvi-current/PKGBUILD | 2 +- pcr/re2-hg/PKGBUILD | 2 +- pcr/rosinstall/PKGBUILD | 2 +- pcr/rstudio-desktop/PKGBUILD | 2 +- pcr/ruby-libnotify/PKGBUILD | 2 +- pcr/ryzom-hg/PKGBUILD | 2 +- pcr/samba4/PKGBUILD | 2 +- pcr/sfml-git/PKGBUILD | 2 +- pcr/shogun/PKGBUILD | 2 +- pcr/sic/PKGBUILD | 2 +- pcr/sigil/PKGBUILD | 2 +- pcr/skanlite/PKGBUILD | 2 +- pcr/snort/PKGBUILD | 2 +- pcr/softhsm/PKGBUILD | 2 +- pcr/spatialindex/PKGBUILD | 2 +- pcr/sqlcipher/PKGBUILD | 2 +- pcr/steadyflow/PKGBUILD | 2 +- pcr/strongswan/PKGBUILD | 2 +- pcr/stumpwm-git/PKGBUILD | 2 +- pcr/supermodel/PKGBUILD | 2 +- pcr/swig1/PKGBUILD | 2 +- pcr/sword-svn/PKGBUILD | 2 +- pcr/syncthing/PKGBUILD | 2 +- pcr/tanglet/PKGBUILD | 2 +- pcr/ted/PKGBUILD | 2 +- pcr/textext/PKGBUILD | 2 +- pcr/theide/PKGBUILD | 2 +- pcr/timekpr/PKGBUILD | 2 +- pcr/toluapp/PKGBUILD | 2 +- pcr/triceratops-lv2/PKGBUILD | 2 +- pcr/tvenlinux-desktop/PKGBUILD | 2 +- pcr/ums/PKGBUILD | 2 +- pcr/unittestpp/PKGBUILD | 2 +- pcr/vuurmuur/PKGBUILD | 2 +- pcr/wallchange/PKGBUILD | 2 +- pcr/wdiff/PKGBUILD | 2 +- pcr/xchat-otr/PKGBUILD | 2 +- pcr/xfce4-whiskermenu-plugin/PKGBUILD | 2 +- pcr/xfwm4-titleless/PKGBUILD | 2 +- pcr/xonotic-git/PKGBUILD | 2 +- pcr/xtables-addons/PKGBUILD | 2 +- pcr/yate/PKGBUILD | 2 +- pcr/yoshimi/PKGBUILD | 2 +- pcr/zbase32/PKGBUILD | 2 +- pcr/zeroinstall-injector/PKGBUILD | 2 +- pcr/zeroinstall-injector/PKGBUILD1 | 2 +- pcr/zfec/PKGBUILD | 2 +- pcr/zsh-yaourt/PKGBUILD | 2 +- radio/idjc/PKGBUILD | 2 +- radio/jack-rack/PKGBUILD | 2 +- social/aiccu/PKGBUILD | 2 +- social/batctl/PKGBUILD | 2 +- social/bip/PKGBUILD | 2 +- social/bitcoin-daemon/PKGBUILD | 2 +- social/bitcoin/PKGBUILD | 2 +- social/diaspora-git/PKGBUILD | 2 +- social/dropbear/PKGBUILD | 2 +- social/ffingerd/PKGBUILD | 2 +- social/haveged/PKGBUILD | 2 +- social/liblockfile/PKGBUILD | 2 +- social/libpurple-minimal/PKGBUILD | 2 +- social/lockfile-progs/PKGBUILD | 2 +- social/netatalk/PKGBUILD | 2 +- social/nitroshare/PKGBUILD | 2 +- social/poco/PKGBUILD | 2 +- social/python-relatorio/PKGBUILD | 2 +- social/qxmlrpc/PKGBUILD | 2 +- social/spectrum/PKGBUILD | 2 +- social/strongswan/PKGBUILD | 2 +- social/tokyotyrant/PKGBUILD | 2 +- social/tomoyo-tools/PKGBUILD | 2 +- ~lukeshu/dasm/PKGBUILD | 2 +- ~lukeshu/dunst-lukeshu-git/PKGBUILD | 2 +- ~lukeshu/libfreenect-git/PKGBUILD | 2 +- ~lukeshu/make-graph/PKGBUILD | 2 +- ~lukeshu/openni-all/openni-git/PKGBUILD | 2 +- ~lukeshu/openni-all/openni-module-sensorkinect-git/PKGBUILD | 2 +- ~lukeshu/openni-all/openni-unstable-git/PKGBUILD | 2 +- ~lukeshu/openni-all/openni-unstable/PKGBUILD | 2 +- ~lukeshu/openni-all/openni/PKGBUILD | 2 +- ~lukeshu/thingutils-git/PKGBUILD | 2 +- ~smv/sword-svn/PKGBUILD | 2 +- ~smv/xiphos-svn/PKGBUILD | 2 +- 334 files changed, 334 insertions(+), 334 deletions(-) diff --git a/elementary/gtk-engine-equinox/PKGBUILD b/elementary/gtk-engine-equinox/PKGBUILD index df6a27ea1..c6742a410 100644 --- a/elementary/gtk-engine-equinox/PKGBUILD +++ b/elementary/gtk-engine-equinox/PKGBUILD @@ -7,7 +7,7 @@ pkgrel=3 pkgdesc="A heavily modified version of the beautiful Aurora engine" url="http://gnome-look.org/content/show.php/Equinox+GTK+Engine?content=121881" license=('GPL') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('gtk2') makedepends=('libtool') options=('!libtool') diff --git a/elementary/postler/PKGBUILD b/elementary/postler/PKGBUILD index 894ccf408..b5d624895 100644 --- a/elementary/postler/PKGBUILD +++ b/elementary/postler/PKGBUILD @@ -4,7 +4,7 @@ pkgname=postler pkgver=0.1.1 pkgrel=2 pkgdesc="Postler is simple desktop mail client built in vala" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://launchpad.net/postler" license=('GPL') depends=('libwebkit' 'libunique' 'libcanberra' 'libnotify') diff --git a/elementary/vala-010/PKGBUILD b/elementary/vala-010/PKGBUILD index 45e6a5bad..af72d0326 100644 --- a/elementary/vala-010/PKGBUILD +++ b/elementary/vala-010/PKGBUILD @@ -5,7 +5,7 @@ _pkgname=vala pkgver=0.10.4 pkgrel=1 pkgdesc="Compiler for the GObject type system (0.10 branch)" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://live.gnome.org/Vala" license=('LGPL2.1') depends=('glib2') diff --git a/gis/grass/PKGBUILD b/gis/grass/PKGBUILD index 3ef489780..21a454577 100644 --- a/gis/grass/PKGBUILD +++ b/gis/grass/PKGBUILD @@ -6,7 +6,7 @@ pkgname=grass pkgver=6.4.2 pkgrel=2 pkgdesc='Geographic Information System (GIS) used for geospatial data management and analysis, image processing, graphics/maps production, spatial modeling, and visualization.' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://grass.fbk.eu/' license=('GPL') depends=('cfitsio' 'fftw' 'gdal' 'libjpeg' 'libpng' 'libtiff' 'libxmu' 'mesa' 'python2' 'postgresql' 'proj' 'tcl' 'tk' 'wxpython' 'xorg-server') diff --git a/gis/libfreexl/PKGBUILD b/gis/libfreexl/PKGBUILD index ff0bfb0fc..8ce082994 100644 --- a/gis/libfreexl/PKGBUILD +++ b/gis/libfreexl/PKGBUILD @@ -3,7 +3,7 @@ pkgname=libfreexl pkgver=1.0.0b pkgrel=1 pkgdesc="Library to extract valid data from within an Excel (.xls) spreadsheet." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://www.gaia-gis.it/fossil/freexl/index" license=('MPL') source=("http://www.gaia-gis.it/gaia-sins/freexl-sources/freexl-1.0.0b.tar.gz") diff --git a/gis/libspatialite/PKGBUILD b/gis/libspatialite/PKGBUILD index 5199e3593..bac777968 100644 --- a/gis/libspatialite/PKGBUILD +++ b/gis/libspatialite/PKGBUILD @@ -4,7 +4,7 @@ pkgname=libspatialite pkgver=3.0.1 pkgrel=2 pkgdesc="SQLite extension to support spatial data types and operations" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://www.gaia-gis.it/fossil/libspatialite/index" license=('MPL') depends=('geos' 'proj' 'sqlite3' 'libfreexl') diff --git a/gis/merkaartor/PKGBUILD b/gis/merkaartor/PKGBUILD index 656cf4148..d52cfe14a 100644 --- a/gis/merkaartor/PKGBUILD +++ b/gis/merkaartor/PKGBUILD @@ -8,7 +8,7 @@ pkgver=0.17.2 pkgrel=3 pkgdesc='OpenStreetMap editor' url='http://merkaartor.be/' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL2') makedepends=('boost') depends=('qtwebkit' 'exiv2') diff --git a/gis/qgis/PKGBUILD b/gis/qgis/PKGBUILD index 9ab10a093..bb448fbe4 100644 --- a/gis/qgis/PKGBUILD +++ b/gis/qgis/PKGBUILD @@ -10,7 +10,7 @@ pkgrel=2 pkgdesc='Quantum GIS is a Geographic Information System (GIS) that supports vector, raster & database formats' url='http://qgis.org/' license=('GPL') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') # update to http://www.qgis.org/wiki/Building_QGIS_from_Source#Overview depends=('libmysqlclient' 'postgresql-libs' 'sqlite3' 'jasper' 'curl' 'qt' 'python2' 'python2-qt' 'giflib' 'cfitsio' 'qwt' 'gdal' 'flex' 'bison' 'libspatialite' 'spatialindex') makedepends=('cmake' 'grass' 'gsl' 'postgis' 'netcdf' 'fcgi' 'python2-sip') diff --git a/gis/spatialindex/PKGBUILD b/gis/spatialindex/PKGBUILD index 51ca4d275..473eebf0c 100644 --- a/gis/spatialindex/PKGBUILD +++ b/gis/spatialindex/PKGBUILD @@ -3,7 +3,7 @@ pkgname=spatialindex pkgver=1.7.1 pkgrel=1 pkgdesc="An extensible framework that supports robust spatial indexing methods and sophisticated spatial queries." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://libspatialindex.github.com/" license=('(L)GPL') depends=(gcc-libs) diff --git a/java/arduino/PKGBUILD b/java/arduino/PKGBUILD index aeb46feee..c726f35c1 100644 --- a/java/arduino/PKGBUILD +++ b/java/arduino/PKGBUILD @@ -5,7 +5,7 @@ pkgname=arduino pkgver=1.0.2 pkgrel=1 pkgdesc="Arduino SDK and IDE" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://arduino.cc/en/Main/Software" options=(!strip) license=('GPL') diff --git a/java/byaccj/PKGBUILD b/java/byaccj/PKGBUILD index 6ae2317fd..10f2bef95 100644 --- a/java/byaccj/PKGBUILD +++ b/java/byaccj/PKGBUILD @@ -8,7 +8,7 @@ url="http://byaccj.sourceforge.net/" license=('custom:Public Domain') pkgrel=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') source=(http://downloads.sourceforge.net/project/byaccj/${pkgname}/${pkgver}/${pkgname}${pkgver}_src.tar.gz http://metadata.ftp-master.debian.org/changelogs/main/b/byacc-j/byacc-j_${pkgver}-1_copyright ldflags.patch) diff --git a/java/java-rxtx/PKGBUILD b/java/java-rxtx/PKGBUILD index ed05e12d1..87c253900 100644 --- a/java/java-rxtx/PKGBUILD +++ b/java/java-rxtx/PKGBUILD @@ -11,7 +11,7 @@ pkgdesc="A native library providing serial and parallel communication for Java" license=(LGPL2.1) pkgrel=4 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('java-runtime') makedepends=('java-environment') diff --git a/java/jna/PKGBUILD b/java/jna/PKGBUILD index f7248a637..b4f37778e 100644 --- a/java/jna/PKGBUILD +++ b/java/jna/PKGBUILD @@ -14,7 +14,7 @@ source=("git://github.com/twall/jna.git#tag=${pkgver}" #### pkgrel=2 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('java-environment' 'libffi') makedepends=('apache-ant' 'zip' 'makepkg-git' 'git') checkdepends=('icedtea-web-java7' 'junit' 'libxtst') diff --git a/java/not-working/protobuf/PKGBUILD b/java/not-working/protobuf/PKGBUILD index 765e7972f..800be49ff 100644 --- a/java/not-working/protobuf/PKGBUILD +++ b/java/not-working/protobuf/PKGBUILD @@ -7,7 +7,7 @@ pkgname=('protobuf' 'python2-protobuf' 'java-protobuf') pkgver=2.4.1 pkgrel=2.1 pkgdesc="A way of encoding structured data in an efficient yet extensible format" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://code.google.com/p/protobuf/" license=('APACHE') depends=('gcc-libs' 'zlib') diff --git a/kernels/xen-docs/PKGBUILD b/kernels/xen-docs/PKGBUILD index 6be95b544..9f3cf7b72 100644 --- a/kernels/xen-docs/PKGBUILD +++ b/kernels/xen-docs/PKGBUILD @@ -5,7 +5,7 @@ pkgname=xen-docs pkgver=4.4.0 pkgrel=1 pkgdesc="Xen 4 (docs)" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.xen.org/" license=('GPL') makedepends=('markdown' 'transfig' 'ghostscript') diff --git a/libre-multilib/pcsx2-libre/PKGBUILD b/libre-multilib/pcsx2-libre/PKGBUILD index 109771926..3fb9571a9 100644 --- a/libre-multilib/pcsx2-libre/PKGBUILD +++ b/libre-multilib/pcsx2-libre/PKGBUILD @@ -8,7 +8,7 @@ pkgname=$_pkgname-libre pkgver=1.2.2 pkgrel=3 pkgdesc='A Sony PlayStation 2 emulator, without nonfree nvidia-cg-toolkit support' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://www.pcsx2.net' license=('GPL2' 'GPL3' 'LGPL2.1' 'LGPL3') makedepends=('cmake' 'sparsehash') diff --git a/libre/acpi_call-parabola-grsec/PKGBUILD b/libre/acpi_call-parabola-grsec/PKGBUILD index 06c4e4521..babf35245 100644 --- a/libre/acpi_call-parabola-grsec/PKGBUILD +++ b/libre/acpi_call-parabola-grsec/PKGBUILD @@ -20,7 +20,7 @@ sha256sums=('d0d14b42944282724fca76f57d598eed794ef97448f387d1c489d85ad813f2f0') # Package info pkgrel=12.${_basekernel/./} -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') install='kmod.install' _replaces=("${_pkgname}" "${_pkgname}-libre") diff --git a/libre/acpi_call-parabola-lts/PKGBUILD b/libre/acpi_call-parabola-lts/PKGBUILD index 3b7bc0bf4..c36e0f821 100644 --- a/libre/acpi_call-parabola-lts/PKGBUILD +++ b/libre/acpi_call-parabola-lts/PKGBUILD @@ -20,7 +20,7 @@ sha256sums=('d0d14b42944282724fca76f57d598eed794ef97448f387d1c489d85ad813f2f0') # Package info pkgrel=12.${_basekernel/./} -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') install='kmod.install' _replaces=("${_pkgname}" "${_pkgname}-libre") diff --git a/libre/acpi_call-parabola/PKGBUILD b/libre/acpi_call-parabola/PKGBUILD index 27e0ae3be..545698479 100644 --- a/libre/acpi_call-parabola/PKGBUILD +++ b/libre/acpi_call-parabola/PKGBUILD @@ -20,7 +20,7 @@ sha256sums=('d0d14b42944282724fca76f57d598eed794ef97448f387d1c489d85ad813f2f0') # Package info pkgrel=12.${_basekernel/./} -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') install='kmod.install' _replaces=("${_pkgname}" "${_pkgname}-libre") diff --git a/libre/antlr2/PKGBUILD b/libre/antlr2/PKGBUILD index 49dbd2226..d7c9a55cb 100644 --- a/libre/antlr2/PKGBUILD +++ b/libre/antlr2/PKGBUILD @@ -11,7 +11,7 @@ url="http://www.antlr2.org/" license=('custom:Public Domain') pkgrel=6.1 # newer than Arch's 2.7.7-6 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') options=('staticlibs') makedepends=('java-environment' 'python2' 'bash' 'nant' 'jh') diff --git a/libre/audex-libre/PKGBUILD b/libre/audex-libre/PKGBUILD index df50539b9..acd5dcf82 100644 --- a/libre/audex-libre/PKGBUILD +++ b/libre/audex-libre/PKGBUILD @@ -10,7 +10,7 @@ pkgname=audex-libre pkgver=0.78 pkgrel=1 pkgdesc="A CDDA extraction tool with a ftp upload function for KDE, without nonfree faac recommendation" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://kde-apps.org/content/show.php?content=77125" license=('GPL') replaces=($_pkgname) diff --git a/libre/avidemux-libre/PKGBUILD b/libre/avidemux-libre/PKGBUILD index f4c612093..21f5dc09b 100644 --- a/libre/avidemux-libre/PKGBUILD +++ b/libre/avidemux-libre/PKGBUILD @@ -7,7 +7,7 @@ pkgbase=avidemux-libre pkgname=('avidemux-libre-cli' 'avidemux-libre-gtk' 'avidemux-libre-qt') pkgver=2.5.6 pkgrel=9 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') url="http://fixounet.free.fr/avidemux/" makedepends=('cmake' 'libxslt' 'gtk2' 'qt4' 'jack' 'libvorbis' 'sdl' 'libxv' diff --git a/libre/avidemux-libre/PKGBUILD.WIP b/libre/avidemux-libre/PKGBUILD.WIP index 2929c4e22..c79fb90e9 100644 --- a/libre/avidemux-libre/PKGBUILD.WIP +++ b/libre/avidemux-libre/PKGBUILD.WIP @@ -7,7 +7,7 @@ pkgbase=avidemux-libre pkgname=('avidemux-libre-cli' 'avidemux-libre-gtk' 'avidemux-libre-qt') pkgver=2.6.8 pkgrel=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL2') url="http://fixounet.free.fr/avidemux/" makedepends=('cmake' 'libxslt' 'gtk3' 'qt4' 'jack' 'libvorbis' 'sdl' 'libxv' \ diff --git a/libre/bbswitch-parabola-grsec/PKGBUILD b/libre/bbswitch-parabola-grsec/PKGBUILD index 927d0e9e9..2d761ab09 100644 --- a/libre/bbswitch-parabola-grsec/PKGBUILD +++ b/libre/bbswitch-parabola-grsec/PKGBUILD @@ -20,7 +20,7 @@ md5sums=('5b116b31ace3604ddf9d1fc1f4bc5807') # Package info pkgrel=16.${_basekernel/./} -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') install='kmod.install' # Generic (you shouldn't have to modify any of these variables) diff --git a/libre/bbswitch-parabola-lts/PKGBUILD b/libre/bbswitch-parabola-lts/PKGBUILD index 232250942..ab03b0753 100644 --- a/libre/bbswitch-parabola-lts/PKGBUILD +++ b/libre/bbswitch-parabola-lts/PKGBUILD @@ -20,7 +20,7 @@ md5sums=('5b116b31ace3604ddf9d1fc1f4bc5807') # Package info pkgrel=16.${_basekernel/./} -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') install='kmod.install' # Generic (you shouldn't have to modify any of these variables) diff --git a/libre/bbswitch-parabola/PKGBUILD b/libre/bbswitch-parabola/PKGBUILD index 633747617..452c3b0a3 100644 --- a/libre/bbswitch-parabola/PKGBUILD +++ b/libre/bbswitch-parabola/PKGBUILD @@ -20,7 +20,7 @@ md5sums=('5b116b31ace3604ddf9d1fc1f4bc5807') # Package info pkgrel=16.${_basekernel/./} -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') install='kmod.install' # Generic (you shouldn't have to modify any of these variables) diff --git a/libre/blackbox-libre/PKGBUILD b/libre/blackbox-libre/PKGBUILD index 2ab972baf..94f07ee2e 100644 --- a/libre/blackbox-libre/PKGBUILD +++ b/libre/blackbox-libre/PKGBUILD @@ -10,7 +10,7 @@ pkgver=0.70.1 pkgrel=11 pkgdesc="A window manager for X11, without nonfree programs on the menu" url="http://blackboxwm.sourceforge.net/" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('gcc-libs' 'libxft' 'libxext' 'libx11' 'libxt') replaces=($_pkgname) conflicts=($_pkgname) diff --git a/libre/bogofilter-libre/PKGBUILD b/libre/bogofilter-libre/PKGBUILD index 086cc1cd7..c9f0c0d6a 100644 --- a/libre/bogofilter-libre/PKGBUILD +++ b/libre/bogofilter-libre/PKGBUILD @@ -8,7 +8,7 @@ pkgname=bogofilter-libre pkgver=1.2.4 pkgrel=1 pkgdesc="A fast Bayesian spam filtering tool, without noncommercial files" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL3') url="http://bogofilter.sourceforge.net" depends=('db' 'perl' 'gsl') diff --git a/libre/bumblebee-libre/PKGBUILD b/libre/bumblebee-libre/PKGBUILD index 70158aac1..82bfbca1d 100644 --- a/libre/bumblebee-libre/PKGBUILD +++ b/libre/bumblebee-libre/PKGBUILD @@ -6,7 +6,7 @@ pkgname=bumblebee-libre pkgver=3.2.1 pkgrel=3 pkgdesc="NVIDIA Optimus support for GNU/Linux through VirtualGL, without nonfree nvidia driver support" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('virtualgl' 'glib2' 'mesa-libgl') makedepends=('help2man') optdepends=('xf86-video-nouveau: nouveau driver' diff --git a/libre/clementine-libre/PKGBUILD b/libre/clementine-libre/PKGBUILD index a54b2b1ad..a8285d743 100644 --- a/libre/clementine-libre/PKGBUILD +++ b/libre/clementine-libre/PKGBUILD @@ -14,7 +14,7 @@ pkgrel=1 pkgdesc='A modern music player and library organizer, without nonfree artwork and Spotify support' url='http://www.clementine-player.org/' license=('GPL') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') replaces=('clementine') conflicts=('clementine') provides=("clementine=$pkgver") diff --git a/libre/crosstool-ng/PKGBUILD b/libre/crosstool-ng/PKGBUILD index 5f4fa3ab7..971bbf669 100644 --- a/libre/crosstool-ng/PKGBUILD +++ b/libre/crosstool-ng/PKGBUILD @@ -6,7 +6,7 @@ pkgname=crosstool-ng pkgver=1.19.0 pkgrel=1 pkgdesc="A versatile cross toolchain generator (eglibc addons patch)" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://crosstool-ng.org/" license=(GPL2) depends=('cvs' 'curl' 'gperf' 'wget') diff --git a/libre/cups-filters-libre/PKGBUILD b/libre/cups-filters-libre/PKGBUILD index 35e7e2695..4976343ce 100644 --- a/libre/cups-filters-libre/PKGBUILD +++ b/libre/cups-filters-libre/PKGBUILD @@ -6,7 +6,7 @@ _pkgname=cups-filters pkgver=1.0.57 pkgrel=1 pkgdesc="OpenPrinting CUPS Filters, without foomatic-db-nonfree recommendation" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.linuxfoundation.org/collaborate/workgroups/openprinting" license=('GPL') depends=('lcms2' 'poppler' 'qpdf') diff --git a/libre/distcc-nozeroconf/PKGBUILD b/libre/distcc-nozeroconf/PKGBUILD index ed30cc230..e76ae7df4 100644 --- a/libre/distcc-nozeroconf/PKGBUILD +++ b/libre/distcc-nozeroconf/PKGBUILD @@ -11,7 +11,7 @@ provides=("$_pkgname=$pkgver") conflicts=("$_pkgname") pkgrel=1 pkgdesc="A distributed C, C++, Obj C compiler (without zeroconf support)" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://code.google.com/p/distcc/" license=('GPL') depends=('gcc' 'popt') diff --git a/libre/doublecmd-libre/PKGBUILD b/libre/doublecmd-libre/PKGBUILD index f5c5a16c5..806913117 100644 --- a/libre/doublecmd-libre/PKGBUILD +++ b/libre/doublecmd-libre/PKGBUILD @@ -10,7 +10,7 @@ pkgver=0.5.10 _helpver=0.5.5 pkgrel=1 url="http://doublecmd.sourceforge.net/" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') install="$_pkgbase.install" provides=("$_pkgbase") diff --git a/libre/dvdrip-libre/PKGBUILD b/libre/dvdrip-libre/PKGBUILD index c06b9c16e..5bb758015 100644 --- a/libre/dvdrip-libre/PKGBUILD +++ b/libre/dvdrip-libre/PKGBUILD @@ -8,7 +8,7 @@ pkgname=dvdrip-libre pkgver=0.98.11 pkgrel=11 pkgdesc="A Gtk frontend for transcode writen in Perl, without opcional hal and nonfree rar vobsub compression support" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('custom') url="http://www.exit1.org/${_pkgname}/" install=${_pkgname}.install diff --git a/libre/ecasound-libre/PKGBUILD b/libre/ecasound-libre/PKGBUILD index 029fc5643..464ce2b64 100644 --- a/libre/ecasound-libre/PKGBUILD +++ b/libre/ecasound-libre/PKGBUILD @@ -9,7 +9,7 @@ pkgname=ecasound-libre pkgver=2.9.1 pkgrel=2 pkgdesc="Command-line multitrack audio processor, without nonfree faac recommendation" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.eca.cx/ecasound/" license=('GPL' 'LGPL') depends=('audiofile' 'liblo>=0.28' 'liboil' 'lilv') diff --git a/libre/ghostscript-libre/PKGBUILD b/libre/ghostscript-libre/PKGBUILD index 61c3e556f..c73b86a58 100644 --- a/libre/ghostscript-libre/PKGBUILD +++ b/libre/ghostscript-libre/PKGBUILD @@ -9,7 +9,7 @@ pkgname=ghostscript-libre pkgver=9.14 pkgrel=1 pkgdesc="An interpreter for the PostScript language, without nonfree JPEG XR support" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('AGPL' 'custom') depends=('libxt' 'libcups' 'fontconfig' 'jasper' 'zlib' 'libpng>=1.5.7' 'libjpeg' 'libtiff>=4.0.0' 'lcms2' 'dbus' 'libpaper') diff --git a/libre/giflib-lts/PKGBUILD b/libre/giflib-lts/PKGBUILD index cdc103fc4..f6848bb86 100644 --- a/libre/giflib-lts/PKGBUILD +++ b/libre/giflib-lts/PKGBUILD @@ -12,7 +12,7 @@ pkgver=5.0.6 pkgrel=1 pkgdesc="A library for reading and writing gif images" url="http://sourceforge.net/projects/giflib/" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('MIT') depends=('glibc') makedepends=('xmlto' 'docbook-xml' 'docbook-xsl') diff --git a/libre/gloobus-preview-libre/PKGBUILD b/libre/gloobus-preview-libre/PKGBUILD index 63fbe916e..1d2e51a15 100644 --- a/libre/gloobus-preview-libre/PKGBUILD +++ b/libre/gloobus-preview-libre/PKGBUILD @@ -7,7 +7,7 @@ pkgver=0.4.5.290 _pkgver=0.4.5-ubuntu11~ppa290 pkgrel=2 pkgdesc="Gnome application designed to enable a full screen preview of any kind of file, with libarchive support" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://gloobus.net/" license=('GPL') depends=('gstreamer0.10-base-plugins' 'gtksourceview3' 'poppler-glib' 'python2-dbus' 'python2-gobject' 'gconf' 'taglib' 'xdg-utils') diff --git a/libre/gnome-boxes-libre/PKGBUILD b/libre/gnome-boxes-libre/PKGBUILD index 32b25603c..1c2bff72c 100644 --- a/libre/gnome-boxes-libre/PKGBUILD +++ b/libre/gnome-boxes-libre/PKGBUILD @@ -9,7 +9,7 @@ pkgname=gnome-boxes-libre pkgver=3.12.3 pkgrel=1 pkgdesc="Simple GNOME 3 application to access remote or virtual systems, without nonfree system logos" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://wiki.gnome.org/Apps/Boxes" license=('LGPL') provides=($_pkgname=$pkgver) diff --git a/libre/grub-legacy/PKGBUILD b/libre/grub-legacy/PKGBUILD index 41c63052a..f1527d61f 100644 --- a/libre/grub-legacy/PKGBUILD +++ b/libre/grub-legacy/PKGBUILD @@ -9,7 +9,7 @@ _srcname=grub pkgver=0.97 pkgrel=25.1 pkgdesc="A GNU multiboot boot loader (Parabola rebranded)" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') url="http://www.gnu.org/software/grub/" depends=('ncurses' 'diffutils' 'sed') diff --git a/libre/handbrake-svn/PKGBUILD b/libre/handbrake-svn/PKGBUILD index 41d5895b6..460683abd 100644 --- a/libre/handbrake-svn/PKGBUILD +++ b/libre/handbrake-svn/PKGBUILD @@ -10,7 +10,7 @@ url="http://handbrake.fr/" license=('GPL') pkgrel=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') makedepends=('intltool' 'python2' 'gcc-libs' 'libnotify' 'gst-plugins-base' 'gtk3' 'dbus-glib') diff --git a/libre/hardinfo/PKGBUILD b/libre/hardinfo/PKGBUILD index c4bf21c3b..1c3e14740 100644 --- a/libre/hardinfo/PKGBUILD +++ b/libre/hardinfo/PKGBUILD @@ -6,7 +6,7 @@ pkgname=hardinfo pkgver=0.5.1 pkgrel=6 pkgdesc="A system information and benchmark tool (Parabola rebranded)" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://sourceforge.net/projects/hardinfo.berlios/" license=('GPL2') depends=('gtk2' 'libsoup') diff --git a/libre/hplip-libre/PKGBUILD b/libre/hplip-libre/PKGBUILD index aa97da2e4..5558c54cc 100644 --- a/libre/hplip-libre/PKGBUILD +++ b/libre/hplip-libre/PKGBUILD @@ -10,7 +10,7 @@ pkgname=hplip-libre pkgver=3.14.6 pkgrel=1 pkgdesc="Drivers for HP DeskJet, OfficeJet, Photosmart, Business Inkjet and some LaserJet, without printers with nonfree drivers support and hplip-plugin binary blobs recommendation (Parabola rebranded)" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://hplipopensource.com" license=('GPL') depends=('python2' 'ghostscript>=8.64-6' 'foomatic-db' 'foomatic-db-engine' diff --git a/libre/libosinfo-libre/PKGBUILD b/libre/libosinfo-libre/PKGBUILD index 5e759d2c2..27c637bb1 100644 --- a/libre/libosinfo-libre/PKGBUILD +++ b/libre/libosinfo-libre/PKGBUILD @@ -9,7 +9,7 @@ pkgname=libosinfo-libre pkgver=0.2.10 pkgrel=2 pkgdesc="GObject based library API for managing information about operating systems, hypervisors and the (virtual) hardware devices they can support, without support for nonfree systems" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://libosinfo.org/" license=('GPL' 'LGPL') depends=('glib2' 'libxslt') diff --git a/libre/libquicktime-libre/PKGBUILD b/libre/libquicktime-libre/PKGBUILD index 95ce92155..2fb92be3b 100644 --- a/libre/libquicktime-libre/PKGBUILD +++ b/libre/libquicktime-libre/PKGBUILD @@ -8,7 +8,7 @@ _pkgname=libquicktime pkgver=1.2.4 pkgrel=10 pkgdesc="A library for reading and writing quicktime files, without nonfree faac support" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') url="http://libquicktime.sourceforge.net/" depends=('gtk2' 'ffmpeg' 'libxv' 'libxaw' 'faad2') diff --git a/libre/liferea-libre/PKGBUILD b/libre/liferea-libre/PKGBUILD index f0c0b685a..3718e0fe4 100644 --- a/libre/liferea-libre/PKGBUILD +++ b/libre/liferea-libre/PKGBUILD @@ -8,7 +8,7 @@ pkgname=liferea-libre pkgver=1.10.9 pkgrel=1 pkgdesc="A desktop news aggregator for online news feeds and weblogs, without nonfree suggestions" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://liferea.sourceforge.net/" provides=("liferea=$pkgver") replaces=('liferea') diff --git a/libre/linux-libre-api-headers/PKGBUILD b/libre/linux-libre-api-headers/PKGBUILD index 58dfa37ad..07a973f1c 100644 --- a/libre/linux-libre-api-headers/PKGBUILD +++ b/libre/linux-libre-api-headers/PKGBUILD @@ -13,7 +13,7 @@ _srcname=linux-${_pkgbasever%-*} pkgver=${_pkgver//-/.} pkgrel=1 pkgdesc="Kernel headers sanitized for use in userspace" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.gnu.org/software/libc" license=('GPL2') provides=( "linux-api-headers=${pkgver}") diff --git a/libre/linux-libre-grsec/PKGBUILD b/libre/linux-libre-grsec/PKGBUILD index ffb4ad7fe..91e6d6e24 100644 --- a/libre/linux-libre-grsec/PKGBUILD +++ b/libre/linux-libre-grsec/PKGBUILD @@ -22,7 +22,7 @@ _replaces=('kernel26%' 'kernel26-libre%' 'linux%' 'linux-libre%-kmod-alx') # '%' _srcname=linux-${_pkgbasever%-*} pkgver=${_pkgver//-/.}.${_timestamp} pkgrel=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://grsecurity.net/" license=('GPL2') makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc') diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD index c85f4e917..c92fc46f1 100644 --- a/libre/linux-libre-lts/PKGBUILD +++ b/libre/linux-libre-lts/PKGBUILD @@ -17,7 +17,7 @@ _replaces=('kernel26%' 'kernel26-libre%' 'linux%' 'linux-libre%-kmod-alx') # '%' _srcname=linux-${_pkgbasever%-*} pkgver=${_pkgver//-/.} pkgrel=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://linux-libre.fsfla.org/" license=('GPL2') makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc') diff --git a/libre/linux-libre-tools/PKGBUILD b/libre/linux-libre-tools/PKGBUILD index b4b5f90d6..79a67a94d 100644 --- a/libre/linux-libre-tools/PKGBUILD +++ b/libre/linux-libre-tools/PKGBUILD @@ -23,7 +23,7 @@ _srcname=linux-${_pkgbasever%-*} pkgver=${_pkgver//-/.} pkgrel=1 license=('GPL2') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://linux-libre.fsfla.org/' options=('!strip') diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD index efd308276..49899ab7d 100644 --- a/libre/linux-libre/PKGBUILD +++ b/libre/linux-libre/PKGBUILD @@ -18,7 +18,7 @@ _replaces=('kernel26%' 'kernel26-libre%' 'linux%' 'linux-libre%-kmod-alx') # '%' _srcname=linux-${_pkgbasever%-*} pkgver=${_pkgver//-/.} pkgrel=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://linux-libre.fsfla.org/" license=('GPL2') makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc') diff --git a/libre/mplayer-libre-vaapi/PKGBUILD b/libre/mplayer-libre-vaapi/PKGBUILD index ff52cad64..f2e092a8d 100644 --- a/libre/mplayer-libre-vaapi/PKGBUILD +++ b/libre/mplayer-libre-vaapi/PKGBUILD @@ -11,7 +11,7 @@ pkgname=mplayer-libre-vaapi pkgver=36265 pkgrel=12 pkgdesc="A movie player, compiled with vaapi support, without nonfree faac support" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://gitorious.org/vaapi/mplayer" license=('GPL') depends=('libxxf86dga' 'libxxf86vm' 'libmad' 'libcdio-paranoia' 'libxinerama' diff --git a/libre/mplayer-libre/PKGBUILD b/libre/mplayer-libre/PKGBUILD index 50fa504c4..9a940284a 100644 --- a/libre/mplayer-libre/PKGBUILD +++ b/libre/mplayer-libre/PKGBUILD @@ -10,7 +10,7 @@ pkgbase=mplayer-libre pkgname=('mplayer-libre' 'mencoder-libre') pkgver=37224 pkgrel=2 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') makedepends=( 'libxxf86dga' 'libxxf86vm' 'libmad' 'libxinerama' 'sdl' 'lame' 'libtheora' 'xvidcore' 'libmng' 'libxss' 'libgl' 'smbclient' 'aalib' 'jack' 'libcaca' diff --git a/libre/nant/PKGBUILD b/libre/nant/PKGBUILD index 9f62c70dd..2faa9e401 100644 --- a/libre/nant/PKGBUILD +++ b/libre/nant/PKGBUILD @@ -5,7 +5,7 @@ pkgname=nant pkgver=0.92 pkgrel=2.1 pkgdesc="A free .NET build tool" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://nant.sourceforge.net" license=("GPL2") depends=('mono-basic') diff --git a/libre/ogmrip-libre/PKGBUILD b/libre/ogmrip-libre/PKGBUILD index 548bf2689..546798246 100644 --- a/libre/ogmrip-libre/PKGBUILD +++ b/libre/ogmrip-libre/PKGBUILD @@ -10,7 +10,7 @@ pkgname=ogmrip-libre pkgver=1.0.1 pkgrel=1 pkgdesc="Libraries and GTK2 interface for DVD ripping using mencoder, without nonfree faac support" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://ogmrip.sourceforge.net/" license=('GPL') depends=('libdvdread>=4.1.3' 'mplayer' 'mencoder' 'enca' 'pkg-config' 'gconf' 'libglade' 'libnotify' 'enchant') diff --git a/libre/oss-libre/PKGBUILD b/libre/oss-libre/PKGBUILD index a2c7b10b5..21fce46de 100644 --- a/libre/oss-libre/PKGBUILD +++ b/libre/oss-libre/PKGBUILD @@ -8,7 +8,7 @@ pkgname=oss-libre pkgver=4.2_2007 pkgrel=4.1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://developer.opensound.com/" license=('GPL2') makedepends=('gtk2') diff --git a/libre/parabolaweb-utils/PKGBUILD b/libre/parabolaweb-utils/PKGBUILD index d65345435..a07bef8e7 100644 --- a/libre/parabolaweb-utils/PKGBUILD +++ b/libre/parabolaweb-utils/PKGBUILD @@ -12,7 +12,7 @@ _parabolaweb_commit=724f8c309c97aa9af7f963687342e8f37e682204 pkgrel=1 epoch=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') source=( "https://projects.parabolagnulinux.org/packages/$pkgname.git/snapshot/$pkgname-$pkgver.tar.bz2" diff --git a/libre/python-reportlab-libre/PKGBUILD b/libre/python-reportlab-libre/PKGBUILD index 5f749edbd..40a2e2ef4 100644 --- a/libre/python-reportlab-libre/PKGBUILD +++ b/libre/python-reportlab-libre/PKGBUILD @@ -12,7 +12,7 @@ _origname=reportlab pkgver=3.1.8 pkgrel=1 pkgdesc="A proven industry-strength PDF generating solution, without nonfree Adobe T1 fonts support" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.reportlab.org/rl_toolkit.html" depends=('freetype2') checkdepends=('python' 'python2' 'python2-pillow' 'python-pillow') diff --git a/libre/rp-pppoe-libre/PKGBUILD b/libre/rp-pppoe-libre/PKGBUILD index 1832d8fae..7c4952e9a 100644 --- a/libre/rp-pppoe-libre/PKGBUILD +++ b/libre/rp-pppoe-libre/PKGBUILD @@ -8,7 +8,7 @@ pkgname=rp-pppoe-libre pkgver=3.11 pkgrel=5 pkgdesc="Roaring Penguin's Point-to-Point Protocol over Ethernet client, without nonfree ServPoET recommendation" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.roaringpenguin.com/pppoe/" license=('GPL') depends=('ppp=2.4.6' 'sh' 'net-tools') diff --git a/libre/ruby-hpricot/PKGBUILD b/libre/ruby-hpricot/PKGBUILD index 6a15b2af7..c76466aaf 100644 --- a/libre/ruby-hpricot/PKGBUILD +++ b/libre/ruby-hpricot/PKGBUILD @@ -8,7 +8,7 @@ url="http://github.com/hpricot/hpricot" license=('custom:MIT') pkgrel=2 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('ruby') makedepends=('rubygems') source=(http://rubygems.org/downloads/${_gemname}-${pkgver}.gem) diff --git a/libre/ruby-rdiscount/PKGBUILD b/libre/ruby-rdiscount/PKGBUILD index 966cf67ce..bb413b4d1 100644 --- a/libre/ruby-rdiscount/PKGBUILD +++ b/libre/ruby-rdiscount/PKGBUILD @@ -11,7 +11,7 @@ url="http://dafoster.net/projects/rdiscount/" license=('BSD3') pkgrel=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('ruby') makedepends=('rubygems') source=(http://gems.rubyforge.org/gems/$_gemname-$pkgver.gem) diff --git a/libre/sdl-libre/PKGBUILD b/libre/sdl-libre/PKGBUILD index f9449455e..ab057d514 100644 --- a/libre/sdl-libre/PKGBUILD +++ b/libre/sdl-libre/PKGBUILD @@ -10,7 +10,7 @@ pkgname=sdl-libre pkgver=1.2.15 pkgrel=6 pkgdesc="A library for portable low-level access to a video framebuffer, audio output, mouse, and keyboard, without nonfree riva_mmio.h file" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.libsdl.org" license=('LGPL') provides=("sdl=${pkgver}") diff --git a/libre/soundkonverter-libre/PKGBUILD b/libre/soundkonverter-libre/PKGBUILD index c0aea726b..748cc6cf3 100644 --- a/libre/soundkonverter-libre/PKGBUILD +++ b/libre/soundkonverter-libre/PKGBUILD @@ -10,7 +10,7 @@ pkgname=soundkonverter-libre pkgver=2.1.1 pkgrel=1 pkgdesc="Front-end to various audio converters, without nonfree faac and mac recommendation" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.kde-apps.org/content/show.php?content=29024" license=('GPL') replaces=($_pkgname) diff --git a/libre/spacefm-libre/PKGBUILD b/libre/spacefm-libre/PKGBUILD index 4f5ab553e..59c79f1c8 100644 --- a/libre/spacefm-libre/PKGBUILD +++ b/libre/spacefm-libre/PKGBUILD @@ -10,7 +10,7 @@ pkgname=spacefm-libre pkgver=0.9.4 pkgrel=2 pkgdesc='Multi-panel tabbed file manager, with unar support' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://ignorantguru.github.com/spacefm/' license=('GPL3') install=$_pkgname.install diff --git a/libre/tp_smapi-parabola-grsec/PKGBUILD b/libre/tp_smapi-parabola-grsec/PKGBUILD index b6c29a239..4f40f11cb 100644 --- a/libre/tp_smapi-parabola-grsec/PKGBUILD +++ b/libre/tp_smapi-parabola-grsec/PKGBUILD @@ -25,7 +25,7 @@ md5sums=('63c683415c764568f6bf17c7eabe4752') # Package info pkgrel=53.${_basekernel/./} -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') install='kmod.install' # Generic (you shouldn't have to modify any of these variables) diff --git a/libre/tp_smapi-parabola-lts/PKGBUILD b/libre/tp_smapi-parabola-lts/PKGBUILD index fd59dd37b..3ce08ee17 100644 --- a/libre/tp_smapi-parabola-lts/PKGBUILD +++ b/libre/tp_smapi-parabola-lts/PKGBUILD @@ -25,7 +25,7 @@ md5sums=('63c683415c764568f6bf17c7eabe4752') # Package info pkgrel=53.${_basekernel/./} -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') install='kmod.install' # Generic (you shouldn't have to modify any of these variables) diff --git a/libre/tp_smapi-parabola/PKGBUILD b/libre/tp_smapi-parabola/PKGBUILD index 30901436c..b3209ea4c 100644 --- a/libre/tp_smapi-parabola/PKGBUILD +++ b/libre/tp_smapi-parabola/PKGBUILD @@ -25,7 +25,7 @@ md5sums=('63c683415c764568f6bf17c7eabe4752') # Package info pkgrel=53.${_basekernel/./} -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') install='kmod.install' # Generic (you shouldn't have to modify any of these variables) diff --git a/libre/unzip-libre/PKGBUILD b/libre/unzip-libre/PKGBUILD index 933fc8a6a..b3ef3d44d 100644 --- a/libre/unzip-libre/PKGBUILD +++ b/libre/unzip-libre/PKGBUILD @@ -10,7 +10,7 @@ _pkgver=${pkgver/./} pkgrel=7 pkgdesc='For extracting and viewing files in .zip archives' url='http://www.info-zip.org/UnZip.html' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('custom') depends=('bzip2' 'bash') provides=("${_pkgname}=${pkgver}") diff --git a/libre/vhba-module-parabola-grsec/PKGBUILD b/libre/vhba-module-parabola-grsec/PKGBUILD index 96aa61aa4..c62d9c44a 100644 --- a/libre/vhba-module-parabola-grsec/PKGBUILD +++ b/libre/vhba-module-parabola-grsec/PKGBUILD @@ -22,7 +22,7 @@ md5sums=('6b307a80df9c163768cc7ecb3ccebb71' # Package info pkgrel=7.${_basekernel/./} -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') options=(!makeflags) install=$_pkgname.install diff --git a/libre/vhba-module-parabola-lts/PKGBUILD b/libre/vhba-module-parabola-lts/PKGBUILD index a56873b2a..9839bb0ce 100644 --- a/libre/vhba-module-parabola-lts/PKGBUILD +++ b/libre/vhba-module-parabola-lts/PKGBUILD @@ -22,7 +22,7 @@ md5sums=('6b307a80df9c163768cc7ecb3ccebb71' # Package info pkgrel=7.${_basekernel/./} -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') options=(!makeflags) install=$_pkgname.install diff --git a/libre/vhba-module-parabola/PKGBUILD b/libre/vhba-module-parabola/PKGBUILD index c3af30632..98c2451d3 100644 --- a/libre/vhba-module-parabola/PKGBUILD +++ b/libre/vhba-module-parabola/PKGBUILD @@ -22,7 +22,7 @@ md5sums=('6b307a80df9c163768cc7ecb3ccebb71' # Package info pkgrel=7.${_basekernel/./} -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') options=(!makeflags) install=$_pkgname.install diff --git a/libre/xbmc-libre-lts/PKGBUILD b/libre/xbmc-libre-lts/PKGBUILD index 4ddb30185..2bd309de4 100644 --- a/libre/xbmc-libre-lts/PKGBUILD +++ b/libre/xbmc-libre-lts/PKGBUILD @@ -14,7 +14,7 @@ pkgver=12.3 _codename=Frodo pkgrel=6 pkgdesc="A software media player and entertainment hub for digital media (Frodo version), without nonfree addons and unrar support" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://xbmc.org" license=('GPL2') conflicts=($_pkgname) diff --git a/libre/xbmc-libre/PKGBUILD b/libre/xbmc-libre/PKGBUILD index 54fc520c4..eca1d2469 100644 --- a/libre/xbmc-libre/PKGBUILD +++ b/libre/xbmc-libre/PKGBUILD @@ -16,7 +16,7 @@ pkgver=13.2 _codename=Gotham pkgrel=1 pkgdesc="A software media player and entertainment hub for digital media (Gotham version), without nonfree addons and unrar support" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://xbmc.org" license=('GPL2') replaces=($_pkgname) diff --git a/libre/xbmc-pvr-addons-lts/PKGBUILD b/libre/xbmc-pvr-addons-lts/PKGBUILD index 7b647d7d9..990d6e049 100644 --- a/libre/xbmc-pvr-addons-lts/PKGBUILD +++ b/libre/xbmc-pvr-addons-lts/PKGBUILD @@ -7,7 +7,7 @@ pkgname=xbmc-pvr-addons-lts pkgver=20131106.Frodo pkgrel=1 pkgdesc="XBMC PVR add-ons for current stable xbmc" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://github.com/opdenkamp/xbmc-pvr-addons" license=('GPL3') depends=('xbmc-libre-lts' 'libmysqlclient') diff --git a/libre/xmlstarlet/PKGBUILD b/libre/xmlstarlet/PKGBUILD index 76595486f..c8c126715 100644 --- a/libre/xmlstarlet/PKGBUILD +++ b/libre/xmlstarlet/PKGBUILD @@ -7,7 +7,7 @@ pkgname=xmlstarlet pkgver=1.3.1 pkgrel=1 pkgdesc="A set of tools to transform, query, validate, and edit XML documents" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://xmlstar.sourceforge.net/" license=('custom:MIT') depends=('libxslt>=1.1.9') diff --git a/libre/xorg-server-libre/PKGBUILD b/libre/xorg-server-libre/PKGBUILD index cd84a2066..c928dec68 100644 --- a/libre/xorg-server-libre/PKGBUILD +++ b/libre/xorg-server-libre/PKGBUILD @@ -7,7 +7,7 @@ pkgbase=xorg-server pkgname=('xorg-server-libre') pkgver=1.16.0 pkgrel=6 # build first with 0.1 and then rebuild it after xf86-input-evdev rebuild -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('custom') url="http://xorg.freedesktop.org" makedepends=('pixman' 'libx11' 'mesa' 'mesa-libgl' 'xf86driproto' 'xcmiscproto' 'xtrans' 'bigreqsproto' 'randrproto' diff --git a/nonprism/banshee-nonprism/PKGBUILD b/nonprism/banshee-nonprism/PKGBUILD index 9a8315a5b..6d1fc3db0 100644 --- a/nonprism/banshee-nonprism/PKGBUILD +++ b/nonprism/banshee-nonprism/PKGBUILD @@ -8,7 +8,7 @@ pkgname=banshee-nonprism pkgver=2.6.2 pkgrel=4 pkgdesc="Music management and playback for GNOME, without gdata-sharp support" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://banshee.fm/" license=('MIT') depends=(libxxf86vm gst-plugins-base-libs mono-addins dbus-sharp-glib webkitgtk2 libsoup-gnome taglib-sharp gudev-sharp gkeyfile-sharp gconf-sharp libmtp libgpod mono-zeroconf desktop-file-utils hicolor-icon-theme media-player-info gst-plugins-bad mono-upnp gst-plugins-good) diff --git a/nonprism/centerim-nonprism/PKGBUILD b/nonprism/centerim-nonprism/PKGBUILD index a8972c970..58f77e1aa 100644 --- a/nonprism/centerim-nonprism/PKGBUILD +++ b/nonprism/centerim-nonprism/PKGBUILD @@ -8,7 +8,7 @@ pkgname=centerim-nonprism pkgver=4.22.10 pkgrel=3 pkgdesc="Fork of CenterICQ - A text mode menu- and window-driven IM interface, without support for unsafe and dangerous for privacy protocols" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.centerim.org" license=('GPL') depends=('python2' 'libjpeg' 'gpgme') diff --git a/nonprism/duplicity-nonprism/PKGBUILD b/nonprism/duplicity-nonprism/PKGBUILD index 1c7612999..a145c4165 100644 --- a/nonprism/duplicity-nonprism/PKGBUILD +++ b/nonprism/duplicity-nonprism/PKGBUILD @@ -9,7 +9,7 @@ pkgname=duplicity-nonprism pkgver=0.6.24 pkgrel=1 pkgdesc='A utility for encrypted, bandwidth-efficient backups using the rsync algorithm, without python2-gdata recommendation' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://www.nongnu.org/duplicity/' license=('GPL') replaces=($_pkgname) diff --git a/nonprism/eog-plugins-nonprism/PKGBUILD b/nonprism/eog-plugins-nonprism/PKGBUILD index 8c69eb66a..513284441 100644 --- a/nonprism/eog-plugins-nonprism/PKGBUILD +++ b/nonprism/eog-plugins-nonprism/PKGBUILD @@ -7,7 +7,7 @@ pkgname=eog-plugins-nonprism pkgver=3.12.1 pkgrel=1 pkgdesc="Plugins for Eye of Gnome, without libgdata support" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://wiki.gnome.org/Apps/EyeOfGnome/Plugins" license=('GPL2') depends=('eog' 'libchamplain') diff --git a/nonprism/kdepim-nonprism/PKGBUILD b/nonprism/kdepim-nonprism/PKGBUILD index 4d135bcc7..ef4380ae8 100644 --- a/nonprism/kdepim-nonprism/PKGBUILD +++ b/nonprism/kdepim-nonprism/PKGBUILD @@ -15,7 +15,7 @@ pkgname=('kdepim-akonadiconsole-nonprism' 'kdepim-libkdepim-nonprism') pkgver=4.13.3 pkgrel=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://pim.kde.org' license=('GPL' 'LGPL' 'FDL') groups=('kde' 'kdepim') diff --git a/nonprism/kdepim-runtime-nonprism/PKGBUILD b/nonprism/kdepim-runtime-nonprism/PKGBUILD index 04997be1b..c4ca84063 100644 --- a/nonprism/kdepim-runtime-nonprism/PKGBUILD +++ b/nonprism/kdepim-runtime-nonprism/PKGBUILD @@ -8,7 +8,7 @@ pkgname=kdepim-runtime-nonprism pkgver=4.13.3 pkgrel=1 pkgdesc='Extends the functionality of kdepim, without libkgapi and libkfbapi support' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='https://projects.kde.org/projects/kde/kdepim-runtime' license=('GPL' 'LGPL' 'FDL') depends=('kdebase-runtime' 'libkolab') diff --git a/nonprism/shotwell-nonprism/PKGBUILD b/nonprism/shotwell-nonprism/PKGBUILD index 27fb37a43..0f7b84603 100644 --- a/nonprism/shotwell-nonprism/PKGBUILD +++ b/nonprism/shotwell-nonprism/PKGBUILD @@ -10,7 +10,7 @@ pkgname=shotwell-nonprism pkgver=0.18.1 pkgrel=1 pkgdesc="A digital photo organizer designed for the GNOME desktop environment, without support for unsafe and dangerous for privacy protocols" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://yorba.org/shotwell/" license=('LGPL2.1') replaces=($_pkgname) diff --git a/nonprism/sylpheed-nonprism/PKGBUILD b/nonprism/sylpheed-nonprism/PKGBUILD index 13d3ce4ea..fae1f4661 100644 --- a/nonprism/sylpheed-nonprism/PKGBUILD +++ b/nonprism/sylpheed-nonprism/PKGBUILD @@ -10,7 +10,7 @@ pkgname=sylpheed-nonprism pkgver=3.4.2 pkgrel=1 pkgdesc="Lightweight and user-friendly e-mail client, without Gmail support" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://sylpheed.sraoss.jp/en/" license=('GPL') replaces=($_pkgname) diff --git a/pcr/9mount/PKGBUILD b/pcr/9mount/PKGBUILD index 3de06c084..9f28f9ac4 100644 --- a/pcr/9mount/PKGBUILD +++ b/pcr/9mount/PKGBUILD @@ -9,7 +9,7 @@ license=('custom:ISC') source=("http://sqweek.net/9p/$pkgname-$pkgver.tar.gz" fix-checks.patch) pkgrel=3 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') build() { cd "$srcdir/$pkgname-$pkgver" diff --git a/pcr/amsynth/PKGBUILD b/pcr/amsynth/PKGBUILD index 7142d6c9f..7af465551 100644 --- a/pcr/amsynth/PKGBUILD +++ b/pcr/amsynth/PKGBUILD @@ -4,7 +4,7 @@ pkgname=amsynth pkgver=1.4.0 pkgrel=1 pkgdesc="Analogue Modeling SYNTHesizer" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://code.google.com/p/$pkgname/" license=('GPL') depends=('gtkmm' 'jack' 'liblo' 'ladspa') diff --git a/pcr/anyremote/PKGBUILD b/pcr/anyremote/PKGBUILD index c1181f5fb..3e2ab05ea 100644 --- a/pcr/anyremote/PKGBUILD +++ b/pcr/anyremote/PKGBUILD @@ -7,7 +7,7 @@ pkgname=anyremote pkgver=6.3.2 pkgrel=1 pkgdesc="Remote control (console-oriented) through bluetooth or IR connection" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://anyremote.sourceforge.net" license=('GPL') depends=('bluez-libs' 'bluez' 'dbus-glib' 'libxtst') diff --git a/pcr/apparmor/PKGBUILD b/pcr/apparmor/PKGBUILD index 6a60e5f0b..9dd9061da 100644 --- a/pcr/apparmor/PKGBUILD +++ b/pcr/apparmor/PKGBUILD @@ -12,7 +12,7 @@ pkgver=2.8.3 _majorver=2.8 pkgrel=1 pkgdesc='Linux application security framework - mandatory access control for programs' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') url='http://wiki.apparmor.net/index.php/Main_Page' makedepends=('bzr' 'flex' 'swig' 'perl' 'python' 'perl-locale-gettext' 'perl-rpc-xml' 'audit') diff --git a/pcr/asterisk/PKGBUILD b/pcr/asterisk/PKGBUILD index e67519bd5..e64d7c5bc 100644 --- a/pcr/asterisk/PKGBUILD +++ b/pcr/asterisk/PKGBUILD @@ -6,7 +6,7 @@ pkgname=asterisk pkgver=11.5.0 pkgrel=2 pkgdesc="A complete PBX solution" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') backup=('etc/asterisk/acl.conf' 'etc/asterisk/adsi.conf' 'etc/asterisk/agents.conf' 'etc/asterisk/alarmreceiver.conf' 'etc/asterisk/alsa.conf' 'etc/asterisk/amd.conf' diff --git a/pcr/babeld/PKGBUILD b/pcr/babeld/PKGBUILD index 08a82fbb3..0465bbca3 100644 --- a/pcr/babeld/PKGBUILD +++ b/pcr/babeld/PKGBUILD @@ -4,7 +4,7 @@ pkgname=babeld pkgver=1.5.0 pkgrel=1 pkgdesc="A loop-avoiding distance-vector routing protocol" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.pps.univ-paris-diderot.fr/~jch/software/babel/" license=('MIT') depends=('glibc') diff --git a/pcr/bambus/PKGBUILD b/pcr/bambus/PKGBUILD index ca0907bf7..66ed6b4d5 100644 --- a/pcr/bambus/PKGBUILD +++ b/pcr/bambus/PKGBUILD @@ -8,7 +8,7 @@ pkgver=2.4 pkgrel=1 pkgdesc="A small and simple GTK Gui to change Wallpapers using feh, Esetroot, hsetroot, habak or any other command tool." url="http://malisch-ts.de" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL3') depends=('gtkmm' 'eterm') # 'eterm' can be changed in any command tool to draw the wallpaper. optdepends=('eterm' 'habak' 'feh' 'hsetroot' 'others') diff --git a/pcr/bamf2/PKGBUILD b/pcr/bamf2/PKGBUILD index dde900e7d..5a82289ff 100644 --- a/pcr/bamf2/PKGBUILD +++ b/pcr/bamf2/PKGBUILD @@ -6,7 +6,7 @@ _dname=bamf pkgver=0.2.126 pkgrel=2 pkgdesc="Removes the headache of applications matching into a simple DBus daemon and c wrapper library, 0.2 branch" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://launchpad.net/bamf" license=('GPL') depends=('dbus-glib' 'libwnck3' 'libgtop') diff --git a/pcr/barnyard2/PKGBUILD b/pcr/barnyard2/PKGBUILD index 15fd5655a..9bc168601 100644 --- a/pcr/barnyard2/PKGBUILD +++ b/pcr/barnyard2/PKGBUILD @@ -5,7 +5,7 @@ pkgname=barnyard2 pkgver=2 pkgrel=1.13 pkgdesc="A dedicated spooler for Snort's unified2 binary output format." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.securixlive.com/barnyard2/index.php" license=('GPL2') depends=('libmariadbclient' 'libpcap') diff --git a/pcr/bison++/PKGBUILD b/pcr/bison++/PKGBUILD index 0aa6157d3..502c3297a 100644 --- a/pcr/bison++/PKGBUILD +++ b/pcr/bison++/PKGBUILD @@ -5,7 +5,7 @@ pkgname=bison++ pkgver=1.21.11 pkgrel=1 pkgdesc="Parser generator in C or C++ from BNF notation" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://packages.debian.org/bison++" license=('GPL') source=('http://ftp.de.debian.org/debian/pool/main/b/bison++/bison++_1.21.11.orig.tar.gz' 'http://ftp.de.debian.org/debian/pool/main/b/bison++/bison++_1.21.11-3.diff.gz') diff --git a/pcr/boswars/PKGBUILD b/pcr/boswars/PKGBUILD index 86d158904..1aa8f40bd 100644 --- a/pcr/boswars/PKGBUILD +++ b/pcr/boswars/PKGBUILD @@ -8,7 +8,7 @@ pkgrel=4 pkgdesc="Futuristic real-time strategy game" url="http://www.boswars.org" license=('GPL') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('sdl' 'libpng' 'lua51' 'libvorbis' 'libtheora' 'libgl' 'python2') makedepends=('glu' 'coreutils') # nproc is in coreutils source=("http://www.boswars.org/dist/releases/$pkgname-$pkgver-src.tar.gz" diff --git a/pcr/brutalchess/PKGBUILD b/pcr/brutalchess/PKGBUILD index eb6d344b9..950448233 100644 --- a/pcr/brutalchess/PKGBUILD +++ b/pcr/brutalchess/PKGBUILD @@ -10,7 +10,7 @@ pkgrel=5 pkgdesc="Chess game inspired by 'Battle Chess'. Features full 3D graphics." url="http://sourceforge.net/projects/$pkgname" license=('GPL2') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('sdl_image' 'freetype2' 'glu') source=("http://downloads.sourceforge.net/$pkgname/$pkgname-alpha-$pkgver-src.tar.gz") md5sums=('370476b63091b8d82a9ea57c604dcbab') diff --git a/pcr/bup/PKGBUILD b/pcr/bup/PKGBUILD index 630a55490..eeea2b521 100644 --- a/pcr/bup/PKGBUILD +++ b/pcr/bup/PKGBUILD @@ -12,7 +12,7 @@ pkgver=0.25rc1 _pkgver=0.25-rc1 pkgrel=2 pkgdesc="Backup tool using git pack files." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://github.com/apenwarr/bup" license=('GPL') depends=('python2-fuse' 'par2cmdline' 'python' 'git') diff --git a/pcr/cegui-0.5/PKGBUILD b/pcr/cegui-0.5/PKGBUILD index 12c8eb0f6..7dacec17e 100644 --- a/pcr/cegui-0.5/PKGBUILD +++ b/pcr/cegui-0.5/PKGBUILD @@ -5,7 +5,7 @@ pkgname=cegui-0.5 pkgver=0.5.0b pkgrel=1 pkgdesc="A free library providing windowing and widgets for graphics APIs/engines" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://crayzedsgui.sourceforge.net" #options=('!libtool') license=("MIT") diff --git a/pcr/cegui-0.6/PKGBUILD b/pcr/cegui-0.6/PKGBUILD index 50cb104fc..cb3387e19 100644 --- a/pcr/cegui-0.6/PKGBUILD +++ b/pcr/cegui-0.6/PKGBUILD @@ -7,7 +7,7 @@ _pkgver=0.6.2b pkgrel=13 pkgdesc="A free library providing windowing and widgets for graphics APIs/engines." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.cegui.org.uk/" license=('MIT') depends=('devil' 'freetype2' 'libxml2' 'lua' 'pcre' 'silly' 'glew' 'tinyxml' 'directfb' 'freeglut') diff --git a/pcr/cgdb/PKGBUILD b/pcr/cgdb/PKGBUILD index 1ecef9faa..40b08abcc 100644 --- a/pcr/cgdb/PKGBUILD +++ b/pcr/cgdb/PKGBUILD @@ -5,7 +5,7 @@ pkgname=cgdb pkgver=0.6.6 pkgrel=1 pkgdesc="Curses-based interface to the GNU Debugger" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://cgdb.sourceforge.net/" license=('GPL') depends=('readline>=5.1' 'ncurses' 'gdb') diff --git a/pcr/cherokee/PKGBUILD b/pcr/cherokee/PKGBUILD index 4ffe40afa..90b9691f3 100644 --- a/pcr/cherokee/PKGBUILD +++ b/pcr/cherokee/PKGBUILD @@ -8,7 +8,7 @@ pkgname=cherokee pkgver=1.2.103 pkgrel=1 pkgdesc="A very fast, flexible and easy to configure Web Server (Parabola rebranded)" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.cherokee-project.com/" license=('GPL2') depends=('openssl' 'pcre') diff --git a/pcr/cl-ppcre/PKGBUILD b/pcr/cl-ppcre/PKGBUILD index 37f88ba7f..aca5816b8 100644 --- a/pcr/cl-ppcre/PKGBUILD +++ b/pcr/cl-ppcre/PKGBUILD @@ -8,7 +8,7 @@ pkgname=cl-ppcre pkgver=2.0.7 pkgrel=2 pkgdesc="Perl-compatible, portable regexp library for Common Lisp" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.weitz.de/cl-ppcre/" license=('BSD') diff --git a/pcr/clx-git/PKGBUILD b/pcr/clx-git/PKGBUILD index 8abc21c0e..17165711c 100644 --- a/pcr/clx-git/PKGBUILD +++ b/pcr/clx-git/PKGBUILD @@ -4,7 +4,7 @@ _clname=clx pkgver=20120421 pkgrel=1 pkgdesc="Xlib for common lisp systems" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.cliki.net/CLX" license=('custom') depends=('x-server' 'sbcl') diff --git a/pcr/coin/PKGBUILD b/pcr/coin/PKGBUILD index 8c1b88fe5..c03c6704d 100644 --- a/pcr/coin/PKGBUILD +++ b/pcr/coin/PKGBUILD @@ -10,7 +10,7 @@ pkgrel=9 pkgdesc='A high-level 3D graphics toolkit on top of OpenGL' url='http://www.coin3d.org/' license=('GPL') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('mesa' 'expat') makedepends=('doxygen') optdepends=('openal: sound/dynamic linking support' diff --git a/pcr/command-not-found/PKGBUILD b/pcr/command-not-found/PKGBUILD index 3cd03daa3..62670e767 100644 --- a/pcr/command-not-found/PKGBUILD +++ b/pcr/command-not-found/PKGBUILD @@ -7,7 +7,7 @@ pkgname=command-not-found pkgver=0.4.5 pkgrel=2 pkgdesc="In case a command could not be found this utility searches for packages containing this or a similar command (bash,zsh)." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://github.com/metti/command-not-found" license=('GPL3') depends=('boost-libs' 'tdb' 'libarchive' 'wget') diff --git a/pcr/conkeror/PKGBUILD b/pcr/conkeror/PKGBUILD index e914cd153..2561d5220 100644 --- a/pcr/conkeror/PKGBUILD +++ b/pcr/conkeror/PKGBUILD @@ -8,7 +8,7 @@ pkgver=1.0pre.git140428.1.git25 _gitver='commit=c5e640d874c65762c082430b42207bcafb58fda6' pkgrel=1 pkgdesc="A highly programmable web browser based on Mozilla XULRunner." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://conkeror.org/" license=('MPL1.1' 'GPL2' 'LGPL2.1') depends=('xulrunner' 'desktop-file-utils') diff --git a/pcr/conky-lua/PKGBUILD b/pcr/conky-lua/PKGBUILD index fced6f7ed..930445cc2 100644 --- a/pcr/conky-lua/PKGBUILD +++ b/pcr/conky-lua/PKGBUILD @@ -12,7 +12,7 @@ pkgrel=1 pkgdesc='Lightweight system monitor for X' url='http://conky.sourceforge.net/' license=('BSD' 'GPL') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') options=('!emptydirs') makedepends=('docbook2x' 'toluapp' 'perl-xml-libxml') depends=('alsa-lib' 'libxml2' 'curl' 'wireless_tools' 'libxft' 'glib2' 'libxdamage' 'imlib2' 'lua' 'cairo') diff --git a/pcr/cowpatty/PKGBUILD b/pcr/cowpatty/PKGBUILD index c29c53ad8..200ace245 100644 --- a/pcr/cowpatty/PKGBUILD +++ b/pcr/cowpatty/PKGBUILD @@ -8,7 +8,7 @@ pkgname=cowpatty pkgver=4.6 pkgrel=5 pkgdesc="Wireless WPA/WPA2 PSK handshake cracking utility" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.wirelessdefence.org/Contents/coWPAttyMain.htm" license=('GPL') depends=('openssl' 'libpcap') diff --git a/pcr/cppo/PKGBUILD b/pcr/cppo/PKGBUILD index 601882a8a..021e9db02 100644 --- a/pcr/cppo/PKGBUILD +++ b/pcr/cppo/PKGBUILD @@ -7,7 +7,7 @@ pkgname=cppo pkgver=0.9.3 pkgrel=2 pkgdesc="The C preprocessor written in OCaml" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('BSD') makedepends=('ocaml') url='http://mjambon.com/cppo.html' diff --git a/pcr/cpptest/PKGBUILD b/pcr/cpptest/PKGBUILD index df08feb00..9b1cc6ead 100644 --- a/pcr/cpptest/PKGBUILD +++ b/pcr/cpptest/PKGBUILD @@ -9,7 +9,7 @@ depends=(gcc-libs) makedepends=(pkgconfig) source=(http://downloads.sourceforge.net/sourceforge/cpptest/$pkgname-$pkgver.tar.gz) md5sums=('79b9bff371d182f11a3235969f84ccb6') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license="LGPL" build() { diff --git a/pcr/cpuminer/PKGBUILD b/pcr/cpuminer/PKGBUILD index ce42aa339..507df9ab2 100644 --- a/pcr/cpuminer/PKGBUILD +++ b/pcr/cpuminer/PKGBUILD @@ -5,7 +5,7 @@ pkgname=$name pkgver=2.3.2 pkgrel=5 pkgdesc="pooler's Litecoin cpuminer." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://github.com/pooler/cpuminer" depends=('curl' 'jansson') license=('GPL2') diff --git a/pcr/culmus-latex/PKGBUILD b/pcr/culmus-latex/PKGBUILD index 5717d9cc7..16dce7c23 100644 --- a/pcr/culmus-latex/PKGBUILD +++ b/pcr/culmus-latex/PKGBUILD @@ -6,7 +6,7 @@ pkgname=culmus-latex pkgver=0.7.1 pkgrel=1 pkgdesc="Culmus Hebrew fonts for LaTeX" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://ivritex.sourceforge.net/" depends=('culmus' 'texlive-core' 'texlive-bin') install=culmus-latex.install diff --git a/pcr/cw/PKGBUILD b/pcr/cw/PKGBUILD index 82573f68d..4aad4555c 100644 --- a/pcr/cw/PKGBUILD +++ b/pcr/cw/PKGBUILD @@ -7,7 +7,7 @@ pkgrel=1 pkgdesc="A non-intrusive ANSI color wrapper for common unix-based commands on GNU/linux." url="http://sourceforge.net/projects/cwrapper/" license=('GPL2') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=() makedepends=('patch') install=cw.install diff --git a/pcr/d0_blind_id-git/PKGBUILD b/pcr/d0_blind_id-git/PKGBUILD index 99a3044e7..ffcc3ee58 100644 --- a/pcr/d0_blind_id-git/PKGBUILD +++ b/pcr/d0_blind_id-git/PKGBUILD @@ -3,7 +3,7 @@ pkgname=d0_blind_id-git pkgver=20120716 pkgrel=1 pkgdesc="Cryptographic library for identification with Schnorr ID scheme and Blind RSA Signatures" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://github.com/divVerent/d0_blind_id" license=('BSD') depends=('gmp') diff --git a/pcr/django-tagging/PKGBUILD b/pcr/django-tagging/PKGBUILD index da23b0495..1ed13533e 100644 --- a/pcr/django-tagging/PKGBUILD +++ b/pcr/django-tagging/PKGBUILD @@ -6,7 +6,7 @@ pkgname=django-tagging pkgver=0.3.1 pkgrel=2 pkgdesc="A generic tagging application for Django projects" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://code.google.com/p/django-tagging/" license=('MIT') depends=('python2') diff --git a/pcr/dratmenu/PKGBUILD b/pcr/dratmenu/PKGBUILD index aef16cdf4..5e1145437 100644 --- a/pcr/dratmenu/PKGBUILD +++ b/pcr/dratmenu/PKGBUILD @@ -7,7 +7,7 @@ pkgver=d299ddf pkgrel=2 epoch= pkgdesc="A trivial python hack to select windows in Ratpoison with dmenu." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://github.com/dimatura/dratmenu" license=('GPL') groups=() diff --git a/pcr/drumgizmo/PKGBUILD b/pcr/drumgizmo/PKGBUILD index d423a6f82..c4a79fb92 100644 --- a/pcr/drumgizmo/PKGBUILD +++ b/pcr/drumgizmo/PKGBUILD @@ -4,7 +4,7 @@ pkgname=drumgizmo pkgver=0.9.3 pkgrel=1 pkgdesc="A drum LV2 plugin and stand-alone application" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.drumgizmo.org/" license=('GPL') groups=('lv2-plugins') diff --git a/pcr/emacs-bzr/PKGBUILD b/pcr/emacs-bzr/PKGBUILD index 0497af51d..2eaac430a 100644 --- a/pcr/emacs-bzr/PKGBUILD +++ b/pcr/emacs-bzr/PKGBUILD @@ -13,7 +13,7 @@ pkgname=emacs-bzr pkgver=110380 pkgrel=1 pkgdesc='The extensible, customizable, self-documenting real-time display editor from its official Bzr repository' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://www.gnu.org/software/emacs/' license=('GPL3') if [[ $_opt_use_gtk2 = "y" ]]; then diff --git a/pcr/emacs-elib/PKGBUILD b/pcr/emacs-elib/PKGBUILD index f424b63a4..7382423f1 100644 --- a/pcr/emacs-elib/PKGBUILD +++ b/pcr/emacs-elib/PKGBUILD @@ -8,7 +8,7 @@ _pkgname=elib pkgver=1.0 pkgrel=3 pkgdesc="The Emacs Lisp library" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://jdee.sourceforge.net/" license="GPL" depends=('emacs') diff --git a/pcr/emacs-js2-mode/PKGBUILD b/pcr/emacs-js2-mode/PKGBUILD index c81db90c7..480c7f47b 100644 --- a/pcr/emacs-js2-mode/PKGBUILD +++ b/pcr/emacs-js2-mode/PKGBUILD @@ -6,7 +6,7 @@ pkgname=emacs-js2-mode pkgver=20120726 pkgrel=1 pkgdesc="An improved JavaScript mode for GNU Emacs" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://code.google.com/p/js2-mode/" license=('GPL2') depends=('emacs') diff --git a/pcr/emacs-lucid/PKGBUILD b/pcr/emacs-lucid/PKGBUILD index e7ff10972..92a8def92 100644 --- a/pcr/emacs-lucid/PKGBUILD +++ b/pcr/emacs-lucid/PKGBUILD @@ -7,7 +7,7 @@ pkgname=emacs-lucid pkgver=24.3 pkgrel=7 pkgdesc="The extensible, customizable, self-documenting real-time display editor" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.gnu.org/software/emacs/emacs.html" license=('GPL3') depends=('librsvg' 'gpm' 'giflib' 'libxpm' 'libotf' 'm17n-lib' 'hicolor-icon-theme' 'gconf' 'desktop-file-utils' 'alsa-lib' 'imagemagick') diff --git a/pcr/eterm/PKGBUILD b/pcr/eterm/PKGBUILD index 3e2a2f5d7..20e44e25b 100644 --- a/pcr/eterm/PKGBUILD +++ b/pcr/eterm/PKGBUILD @@ -8,7 +8,7 @@ pkgname=eterm pkgver=0.9.6 pkgrel=1 pkgdesc="A vt102 terminal emulator intended as a replacement for xterm." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.eterm.org/" license=('custom') depends=('freetype2>=2.3.5' 'libast>=0.7' 'libxmu' 'libxres') diff --git a/pcr/evolution-mapi/PKGBUILD b/pcr/evolution-mapi/PKGBUILD index d63d65348..e79d3ec07 100644 --- a/pcr/evolution-mapi/PKGBUILD +++ b/pcr/evolution-mapi/PKGBUILD @@ -6,7 +6,7 @@ pkgver=3.6.2 _gnomever=3.6 pkgrel=1 pkgdesc="MAPI plugin for evolution." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.gnome.org" license=('GPL3') depends=('evolution>=3.6.2' 'openchange>=1.0-5') diff --git a/pcr/filemq/PKGBUILD b/pcr/filemq/PKGBUILD index 57f5eb69d..df4358a24 100644 --- a/pcr/filemq/PKGBUILD +++ b/pcr/filemq/PKGBUILD @@ -6,7 +6,7 @@ url="https://github.com/zeromq/filemq" license=('GPL3' 'LGPL3') depends=('zeromq' 'czmq') makedepends=('git') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') source=("git+https://github.com/zeromq/filemq#branch=master") sha256sums=('SKIP') diff --git a/pcr/font-manager/PKGBUILD b/pcr/font-manager/PKGBUILD index 76c731ef2..1ba739fc7 100644 --- a/pcr/font-manager/PKGBUILD +++ b/pcr/font-manager/PKGBUILD @@ -9,7 +9,7 @@ pkgver=0.5.7 pkgrel=4 pkgdesc="A font management application for the GNOME desktop" url="http://code.google.com/p/font-manager/" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') depends=('pygtk>=2.0' 'libxml2' 'fontconfig') optdepends=('file-roller: to import/export font collections to archives' diff --git a/pcr/fpdns/PKGBUILD b/pcr/fpdns/PKGBUILD index b5791bbb1..95b85885f 100644 --- a/pcr/fpdns/PKGBUILD +++ b/pcr/fpdns/PKGBUILD @@ -9,7 +9,7 @@ url="http://code.google.com/p/fpdns/" depends=('') license=('BSD') options=('!emptydirs') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') source=('http://fpdns.googlecode.com/files/Net-DNS-Fingerprint-0.9.3.tar.gz') md5sums=('16f1fbc9e5c8b935a0a48a509dc58899') diff --git a/pcr/freeipmi/PKGBUILD b/pcr/freeipmi/PKGBUILD index 5b8fac7ba..fa18ac825 100644 --- a/pcr/freeipmi/PKGBUILD +++ b/pcr/freeipmi/PKGBUILD @@ -7,7 +7,7 @@ pkgname=freeipmi pkgver=1.4.1 pkgrel=1 pkgdesc="sensor monitoring, system event monitoring, power control, and serial-over-LAN (SOL)" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.gnu.org/software/freeipmi/" license=('GPL') depends=('libgcrypt') diff --git a/pcr/freetuxtv/PKGBUILD b/pcr/freetuxtv/PKGBUILD index a3b180ae7..b12e495ca 100644 --- a/pcr/freetuxtv/PKGBUILD +++ b/pcr/freetuxtv/PKGBUILD @@ -3,7 +3,7 @@ pkgname=freetuxtv pkgver=0.6.5 pkgrel=3 pkgdesc="WebTV player to watch ADSL TV on the PC." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://code.google.com/p/freetuxtv/" license=('GPL3') depends=('vlc' 'gtk2' 'sqlite' 'curl' 'libnotify' 'dbus-glib') diff --git a/pcr/galera/PKGBUILD b/pcr/galera/PKGBUILD index 13e5c4937..534e3314c 100644 --- a/pcr/galera/PKGBUILD +++ b/pcr/galera/PKGBUILD @@ -5,7 +5,7 @@ pkgname=galera pkgver=25.3.5 pkgrel=1 pkgdesc='Galera WSREP provider' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') depends=('boost>=1.41' 'openssl') makedepends=('check' 'scons' 'patch') diff --git a/pcr/gcc-gcj/PKGBUILD b/pcr/gcc-gcj/PKGBUILD index 2ae2090ae..aed422a43 100644 --- a/pcr/gcc-gcj/PKGBUILD +++ b/pcr/gcc-gcj/PKGBUILD @@ -8,7 +8,7 @@ pkgname=gcc-gcj pkgver=4.9.0 pkgrel=1 pkgdesc="The GNU Compiler for Java" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL' 'LGPL') url="http://gcc.gnu.org" depends=('gtk2' 'libxtst' 'alsa-lib' 'cloog>=0.16.2-1' 'libmpc>=0.8.2-2' 'classpath') diff --git a/pcr/geis/PKGBUILD b/pcr/geis/PKGBUILD index 655a60338..0af49e59a 100644 --- a/pcr/geis/PKGBUILD +++ b/pcr/geis/PKGBUILD @@ -5,7 +5,7 @@ pkgname=geis pkgver=2.2.15 pkgrel=3 pkgdesc="Implementation of the GEIS (Gesture Engine Interface and Support) interface." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://launchpad.net/geis" license=('GPL' 'LGPL') depends=('grail' 'dbus' 'python-gobject') diff --git a/pcr/gens-gs/PKGBUILD b/pcr/gens-gs/PKGBUILD index 74df2c68c..29b828637 100644 --- a/pcr/gens-gs/PKGBUILD +++ b/pcr/gens-gs/PKGBUILD @@ -5,7 +5,7 @@ pkgver=r7 pkgrel=5 pkgdesc="An emulator of Sega Genesis, Sega CD and 32X, combining features from various forks of Gens" url="http://segaretro.org/Gens/GS" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') if [[ $CARCH == "x86_64" ]]; then depends=('lib32-gtk2' 'lib32-sdl' 'lib32-libgl') diff --git a/pcr/ginn/PKGBUILD b/pcr/ginn/PKGBUILD index 2fcad0d50..bf0e3bb55 100644 --- a/pcr/ginn/PKGBUILD +++ b/pcr/ginn/PKGBUILD @@ -5,7 +5,7 @@ pkgver=0.2.6 pkgrel=2 pkgdesc="A deamon with jinn-like wish-granting capabilities" url="http://launchpad.net/ginn" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') depends=('geis' 'bamf2' 'libxtst' 'libwnck') source=(http://launchpad.net/ginn/0.x/${pkgver}/+download/ginn-${pkgver}.tar.gz) diff --git a/pcr/gloobus-preview-bzr/PKGBUILD b/pcr/gloobus-preview-bzr/PKGBUILD index 42ecbb8f0..8ced34d1d 100644 --- a/pcr/gloobus-preview-bzr/PKGBUILD +++ b/pcr/gloobus-preview-bzr/PKGBUILD @@ -6,7 +6,7 @@ _pkgname=gloobus-preview pkgver=290 pkgrel=1 pkgdesc="A quicklook for GNU/Linux" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://launchpad.net/gloobus-preview" license=('GPL3') depends=('desktop-file-utils' 'djvulibre' 'gstreamer0.10-base' \ diff --git a/pcr/gmqcc-git/PKGBUILD b/pcr/gmqcc-git/PKGBUILD index 2e36a5a1e..d3146ecb8 100644 --- a/pcr/gmqcc-git/PKGBUILD +++ b/pcr/gmqcc-git/PKGBUILD @@ -4,7 +4,7 @@ pkgname=gmqcc-git pkgver=20130214 pkgrel=1 pkgdesc="An Improved Quake C Compiler" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('glibc') conflicts=('gmqcc') provides=('gmqcc=0.2.4') diff --git a/pcr/gnomeradio/PKGBUILD b/pcr/gnomeradio/PKGBUILD index 1325bc4d2..9b2cf63dd 100644 --- a/pcr/gnomeradio/PKGBUILD +++ b/pcr/gnomeradio/PKGBUILD @@ -16,7 +16,7 @@ pkgrel=6.1 pkgdesc="An FM-radio tuner for the GNOME desktop" url="https://projects.gnome.org/gnomeradio/" license=('GPL') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') install=gnomeradio.install depends=(libgnome-media-profiles lirc-utils hicolor-icon-theme) makedepends=(gnome-doc-utils intltool gnome-vfs libgnomeui v4l-utils) diff --git a/pcr/gnucash-docs/PKGBUILD b/pcr/gnucash-docs/PKGBUILD index 35cde0fbb..9028ef5a9 100644 --- a/pcr/gnucash-docs/PKGBUILD +++ b/pcr/gnucash-docs/PKGBUILD @@ -5,7 +5,7 @@ pkgname=gnucash-docs pkgver=2.4.1 pkgrel=1 pkgdesc="User documentation for gnucash" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.gnucash.org" license=('GPL') depends=('gnucash' 'docbook-xml' 'rarian' 'yelp') diff --git a/pcr/gnuit/PKGBUILD b/pcr/gnuit/PKGBUILD index fbbd71330..60ba16b9e 100644 --- a/pcr/gnuit/PKGBUILD +++ b/pcr/gnuit/PKGBUILD @@ -6,7 +6,7 @@ pkgname=gnuit pkgver=4.9.5 pkgrel=1 pkgdesc="A set of interactive text-mode tools." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.gnu.org/software/gnuit/" license=('GPL3') depends=('bash') diff --git a/pcr/godep/PKGBUILD b/pcr/godep/PKGBUILD index eca1aa9f8..b12135c2d 100644 --- a/pcr/godep/PKGBUILD +++ b/pcr/godep/PKGBUILD @@ -4,7 +4,7 @@ pkgname=godep pkgver=r94.983ff92 pkgrel=1 pkgdesc="Dependency tool for go" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://github.com/tools/godep" license=('BSD') makedepends=('git' 'go' 'mercurial') diff --git a/pcr/grail/PKGBUILD b/pcr/grail/PKGBUILD index 665c0f270..79c7a1a73 100644 --- a/pcr/grail/PKGBUILD +++ b/pcr/grail/PKGBUILD @@ -6,7 +6,7 @@ pkgname=grail pkgver=3.1.0 pkgrel=1 pkgdesc="Gesture Recognition And Instantiation Library" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://launchpad.net/grail" license=('GPL') depends=('frame>=2.5.0' 'libxi') diff --git a/pcr/grass/PKGBUILD b/pcr/grass/PKGBUILD index dcbd97b38..125afee5d 100644 --- a/pcr/grass/PKGBUILD +++ b/pcr/grass/PKGBUILD @@ -7,7 +7,7 @@ pkgname=grass pkgver=6.4.3 pkgrel=3 pkgdesc='Geographic Information System (GIS) used for geospatial data management and analysis, image processing, graphics/maps production, spatial modeling, and visualization.' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://grass.osgeo.org/' license=('GPL') depends=('cfitsio' 'fftw' 'gdal' 'glu' 'libjpeg' 'libpng' 'libtiff' 'libxmu' 'ncurses' 'mesa' 'python2' 'postgresql' 'proj' 'tcl' 'tk' 'wxpython2.8' 'xorg-server' 'zlib') diff --git a/pcr/gtkmm-utils/PKGBUILD b/pcr/gtkmm-utils/PKGBUILD index 84ec12708..639baa80c 100644 --- a/pcr/gtkmm-utils/PKGBUILD +++ b/pcr/gtkmm-utils/PKGBUILD @@ -6,7 +6,7 @@ pkgname=gtkmm-utils pkgver=0.4.1 pkgrel=2 pkgdesc="High level utility functions/classes/widgets for gtkmm and glibmm" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://gtkmm-utils.googlecode.com/" license=('GPL') depends=('gtkmm') diff --git a/pcr/hiawatha/PKGBUILD b/pcr/hiawatha/PKGBUILD index 1288e09e2..fc12ef912 100644 --- a/pcr/hiawatha/PKGBUILD +++ b/pcr/hiawatha/PKGBUILD @@ -6,7 +6,7 @@ pkgver=9.2 pkgrel=1 pkgdesc="Secure and advanced webserver" url="https://www.hiawatha-webserver.org/" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') depends=('libxslt' 'polarssl') optdepends=('php-fpm: Provides modern PHP fast cgi support (Recommended) ') diff --git a/pcr/higan-gtk/PKGBUILD b/pcr/higan-gtk/PKGBUILD index a1c37fc37..5573b46e4 100755 --- a/pcr/higan-gtk/PKGBUILD +++ b/pcr/higan-gtk/PKGBUILD @@ -4,7 +4,7 @@ pkgname=higan-gtk pkgver=092 pkgrel=2 pkgdesc="Nintendo multi-system emulator - GTK version" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://code.google.com/p/higan/" license=('GPL3') depends=('xdialog' 'libpulse' 'libao' 'libgl' 'libxv' 'openal' 'sdl') diff --git a/pcr/higan-qt/PKGBUILD b/pcr/higan-qt/PKGBUILD index 5b0bce679..5b467c283 100755 --- a/pcr/higan-qt/PKGBUILD +++ b/pcr/higan-qt/PKGBUILD @@ -4,7 +4,7 @@ pkgname=higan-qt pkgver=092 pkgrel=2 pkgdesc="Nintendo multi-system emulator - QT version" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://code.google.com/p/higan/" license=('GPL3') depends=('qt>=4.7.0' 'xdialog' 'libpulse' 'libao' 'libgl' 'libxv' 'openal' 'sdl') diff --git a/pcr/htmldoc/PKGBUILD b/pcr/htmldoc/PKGBUILD index b99e56f0a..0c84a3f94 100644 --- a/pcr/htmldoc/PKGBUILD +++ b/pcr/htmldoc/PKGBUILD @@ -9,7 +9,7 @@ pkgname=htmldoc pkgver=1.8.27 pkgrel=4 pkgdesc="Produce PDF or Postscript from HTML documents including TOCs and Indices" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.htmldoc.org" license=('GPL2') depends=('libxpm' 'fltk' 'libjpeg' 'openssl' 'shared-mime-info') diff --git a/pcr/httrack/PKGBUILD b/pcr/httrack/PKGBUILD index 6e138c949..771fdfd81 100644 --- a/pcr/httrack/PKGBUILD +++ b/pcr/httrack/PKGBUILD @@ -8,7 +8,7 @@ pkgname=httrack pkgver=3.47.27 pkgrel=1 pkgdesc="An easy-to-use offline browser utility." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.httrack.com/" license=('GPL3') depends=('bash' 'xdg-utils' 'hicolor-icon-theme' 'openssl') diff --git a/pcr/hwd/PKGBUILD b/pcr/hwd/PKGBUILD index f4af6f8f5..0470efa41 100644 --- a/pcr/hwd/PKGBUILD +++ b/pcr/hwd/PKGBUILD @@ -6,7 +6,7 @@ pkgname=hwd pkgver=5.5.2 pkgrel=2 pkgdesc="Hardware detect and xorg.conf generator for Arch Linux" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://user-contributions.org/projects/hwd/hwd.html" license=('GPL') depends=('bash' 'pciutils' 'usbutils' 'ddcxinfo-arch' 'wget') diff --git a/pcr/ibus-bogo/PKGBUILD b/pcr/ibus-bogo/PKGBUILD index acb7c5a5b..10d6848de 100644 --- a/pcr/ibus-bogo/PKGBUILD +++ b/pcr/ibus-bogo/PKGBUILD @@ -9,7 +9,7 @@ pkgrel=0 pkgdesc="Vietnamese input method for IBus. \ Git version's https://aur.archlinux.org/packages/ibus-bogo-git/" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://github.com/BoGoEngine/ibus-bogo-python" license=('GPL v3') depends=('ibus' 'python' 'python-gobject' 'libwnck3' 'python-pyqt4' 'libnotify' 'qt4') diff --git a/pcr/idjc/PKGBUILD b/pcr/idjc/PKGBUILD index cfd0d6e9d..4596ad841 100644 --- a/pcr/idjc/PKGBUILD +++ b/pcr/idjc/PKGBUILD @@ -9,7 +9,7 @@ pkgrel=2 pkgdesc='Powerful yet easy-to-use source-client for individuals interested in streaming live radio shows over the Internet' url='http://idjc.sourceforge.net/' license=('GPL2') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('desktop-file-utils' 'python2' 'dbus-python' 'mutagen' 'jack' 'pygtk' 'vorbis-tools' 'libsndfile' 'libsamplerate' 'glib2' 'lame' 'libmad' 'ffmpeg-compat' 'flac' 'speex' 'libshout-idjc') optdepends=('patchage' 'qjackctl') makedepends=('pkgconfig') diff --git a/pcr/initng-git/PKGBUILD b/pcr/initng-git/PKGBUILD index 38279ad89..baa877648 100644 --- a/pcr/initng-git/PKGBUILD +++ b/pcr/initng-git/PKGBUILD @@ -9,7 +9,7 @@ url="http://initng.org/" license=('GPL3') pkgrel=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') provides=('init') depends=('dbus') makedepends=('git' 'acr' 'ftjam' 'makepkg-git') diff --git a/pcr/ipmiutil/PKGBUILD b/pcr/ipmiutil/PKGBUILD index bff60db1b..3e3f5aac0 100644 --- a/pcr/ipmiutil/PKGBUILD +++ b/pcr/ipmiutil/PKGBUILD @@ -7,7 +7,7 @@ pkgname=ipmiutil pkgver=2.7.5 pkgrel=1 pkgdesc="A simple program that lists results from the hardware detection library." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://sourceforge.net/projects/ipmiutil/" license=('BSD2.0') depends=('') diff --git a/pcr/ipycli-git/PKGBUILD b/pcr/ipycli-git/PKGBUILD index 533d96a78..aba3fe14f 100644 --- a/pcr/ipycli-git/PKGBUILD +++ b/pcr/ipycli-git/PKGBUILD @@ -5,7 +5,7 @@ pkgname=ipycli-git pkgver=r135.baa33ed pkgrel=1 pkgdesc="IPython subapp that supports adding arbitrary notebooks from the command line" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://github.com/dalejung/ipycli/" license=('BSD') depends=('python2' 'ipython2') diff --git a/pcr/irssi-otr-git/PKGBUILD b/pcr/irssi-otr-git/PKGBUILD index b4d19d97a..54c8a2336 100644 --- a/pcr/irssi-otr-git/PKGBUILD +++ b/pcr/irssi-otr-git/PKGBUILD @@ -6,7 +6,7 @@ pkgname=irssi-otr-git pkgver=20090814 pkgrel=1 pkgdesc="Off-the-Record Messaging (OTR) for the Irssi IRC client." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://irssi-otr.tuxfamily.org/" license=('GPL') depends=(irssi libotr git) diff --git a/pcr/irssi-otr/PKGBUILD b/pcr/irssi-otr/PKGBUILD index ae8552c33..fcbdb0498 100644 --- a/pcr/irssi-otr/PKGBUILD +++ b/pcr/irssi-otr/PKGBUILD @@ -4,7 +4,7 @@ pkgname=irssi-otr pkgver=1.0.0 pkgrel=1 pkgdesc="Off-the-Record Messaging (OTR) for the Irssi IRC client" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://github.com/cryptodotis/irssi-otr" provides=('irssi-otr4') license=('GPL2') diff --git a/pcr/jack-rack/PKGBUILD b/pcr/jack-rack/PKGBUILD index 7363705b7..80c931689 100644 --- a/pcr/jack-rack/PKGBUILD +++ b/pcr/jack-rack/PKGBUILD @@ -7,7 +7,7 @@ pkgver=1.4.7 pkgrel=4 pkgdesc="Effects rack for JACK" url="http://jack-rack.sourceforge.net" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') depends=('jack' 'gtk2' 'libxml2' 'ladspa') optdepends=('lash: LASH support' diff --git a/pcr/jdee/PKGBUILD b/pcr/jdee/PKGBUILD index 6d2b3453c..5af1f57ef 100644 --- a/pcr/jdee/PKGBUILD +++ b/pcr/jdee/PKGBUILD @@ -8,7 +8,7 @@ _pkgname=jde pkgver=2.4.0.1 pkgrel=1 pkgdesc="The Java Development Environment for Emacs" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://jdee.sourceforge.net/" license="GPL" depends=('emacs' 'cedet' 'emacs-elib') diff --git a/pcr/kamailio/PKGBUILD b/pcr/kamailio/PKGBUILD index 709d0bf96..741616dc3 100644 --- a/pcr/kamailio/PKGBUILD +++ b/pcr/kamailio/PKGBUILD @@ -6,7 +6,7 @@ pkgrel=1 pkgdesc="Rock solid SIP server" url="http://www.kamailio.org/" license=('GPL2') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') makedepends=('flex' 'bison' 'docbook2x' 'mariadb' 'postgresql' 'libxml2' 'radiusclient-ng' 'lua51' 'mono' 'hiredis' 'libpurple' 'net-snmp' 'libunistring' 'python2') diff --git a/pcr/knot/PKGBUILD b/pcr/knot/PKGBUILD index 831d6c2d3..a59cb4e85 100644 --- a/pcr/knot/PKGBUILD +++ b/pcr/knot/PKGBUILD @@ -7,7 +7,7 @@ pkgver=1.4.6 pkgrel=1 pkgdesc='high-performance authoritative-only DNS server' url='https://www.knot-dns.cz/' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL3') install=install depends=('liburcu>=0.5.4' 'openssl>=1.0.0' 'zlib') diff --git a/pcr/libast/PKGBUILD b/pcr/libast/PKGBUILD index d1e5adfff..c1de7aeda 100644 --- a/pcr/libast/PKGBUILD +++ b/pcr/libast/PKGBUILD @@ -7,7 +7,7 @@ pkgname=libast pkgver=0.7 pkgrel=3 pkgdesc="The Library of Assorted Spiffy Things." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://eterm.sourceforge.net" license=('BSD') depends=('imlib2' 'pcre' 'libsm') diff --git a/pcr/libcgroup/PKGBUILD b/pcr/libcgroup/PKGBUILD index 602045c75..605dcbca3 100644 --- a/pcr/libcgroup/PKGBUILD +++ b/pcr/libcgroup/PKGBUILD @@ -5,7 +5,7 @@ pkgname=libcgroup pkgver=0.40rc1 pkgrel=1 pkgdesc="Library that abstracts the control group file system in Linux" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://libcg.sourceforge.net" license=(LGPL) backup=('etc/cgconfig.conf' diff --git a/pcr/libfreexl/PKGBUILD b/pcr/libfreexl/PKGBUILD index c5361c0e8..9a6cac8d0 100644 --- a/pcr/libfreexl/PKGBUILD +++ b/pcr/libfreexl/PKGBUILD @@ -3,7 +3,7 @@ pkgname=libfreexl pkgver=1.0.0e pkgrel=1 pkgdesc="Library to extract valid data from within an Excel (.xls) spreadsheet." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://www.gaia-gis.it/fossil/freexl/index" license=('MPL') source=("http://www.gaia-gis.it/gaia-sins/freexl-sources/freexl-$pkgver.tar.gz") diff --git a/pcr/libibus/PKGBUILD b/pcr/libibus/PKGBUILD index ff32e8cb0..476dae72a 100644 --- a/pcr/libibus/PKGBUILD +++ b/pcr/libibus/PKGBUILD @@ -11,7 +11,7 @@ pkgname=lib$_pkgbase pkgver=1.4.99.20121109 pkgrel=1 pkgdesc="Library for Next Generation Input Bus for Linux" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://ibus.googlecode.com" license=('LGPL') depends=('glib2') diff --git a/pcr/libpng12/PKGBUILD b/pcr/libpng12/PKGBUILD index 5da1044de..d3ea430c8 100644 --- a/pcr/libpng12/PKGBUILD +++ b/pcr/libpng12/PKGBUILD @@ -9,7 +9,7 @@ _realname=libpng pkgver=1.2.50 pkgrel=1 pkgdesc="A collection of routines used to create PNG format graphics files" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.libpng.org/pub/png/libpng.html" license=('custom') depends=('zlib') diff --git a/pcr/libqinfinity/PKGBUILD b/pcr/libqinfinity/PKGBUILD index 2eaec2973..824713088 100644 --- a/pcr/libqinfinity/PKGBUILD +++ b/pcr/libqinfinity/PKGBUILD @@ -5,7 +5,7 @@ pkgname=libqinfinity pkgver=0.5.1 pkgrel=1 pkgdesc="Qt wrapper around libinfinity, a library for collaborative editing" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='https://projects.kde.org/projects/playground/libs/libqinfinity' license=('LGPL') depends=('libinfinity' 'qt4') diff --git a/pcr/libspatialite/PKGBUILD b/pcr/libspatialite/PKGBUILD index 59d7200e5..3664e45d7 100644 --- a/pcr/libspatialite/PKGBUILD +++ b/pcr/libspatialite/PKGBUILD @@ -4,7 +4,7 @@ pkgname=libspatialite pkgver=4.0.0 pkgrel=1 pkgdesc="SQLite extension to support spatial data types and operations" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://www.gaia-gis.it/fossil/libspatialite/index" license=('MPL') depends=('geos' 'proj' 'sqlite3' 'libfreexl') diff --git a/pcr/libsquish-svn/PKGBUILD b/pcr/libsquish-svn/PKGBUILD index 114f125b1..807100ea1 100644 --- a/pcr/libsquish-svn/PKGBUILD +++ b/pcr/libsquish-svn/PKGBUILD @@ -4,7 +4,7 @@ pkgname=libsquish-svn pkgver=48 pkgrel=5 pkgdesc="DXT compression library - svn build" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://code.google.com/p/libsquish" makedepends=('subversion' ) license=('MIT') diff --git a/pcr/liburcu/PKGBUILD b/pcr/liburcu/PKGBUILD index 040c45500..0ac0b206b 100644 --- a/pcr/liburcu/PKGBUILD +++ b/pcr/liburcu/PKGBUILD @@ -5,7 +5,7 @@ pkgname=liburcu pkgver=0.8.4 pkgrel=1 pkgdesc="LGPLv2.1 userspace RCU (read-copy-update) library" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://lttng.org/urcu" license=('LGPL2.1') source=(http://lttng.org/files/urcu/userspace-rcu-${pkgver}.tar.bz2) diff --git a/pcr/libwww-hg/PKGBUILD b/pcr/libwww-hg/PKGBUILD index 567a3f57d..8cdac2e78 100644 --- a/pcr/libwww-hg/PKGBUILD +++ b/pcr/libwww-hg/PKGBUILD @@ -8,7 +8,7 @@ pkgver=20130730 _changeset=facbea79943a pkgrel=11 pkgdesc="A general-purpose client side WEB API" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://hg.kervala.net/packaging/" license=('W3C') depends=() diff --git a/pcr/lilo/PKGBUILD b/pcr/lilo/PKGBUILD index 4238f4219..c811fa6bb 100644 --- a/pcr/lilo/PKGBUILD +++ b/pcr/lilo/PKGBUILD @@ -7,7 +7,7 @@ pkgname=lilo pkgver=24.0 pkgrel=1 pkgdesc="A bootloader for GNU/Linux (Parabola rebranded)" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://alioth.debian.org/projects/lilo/" license=('BSD') backup=('etc/lilo.conf') diff --git a/pcr/litecoin-qt/PKGBUILD b/pcr/litecoin-qt/PKGBUILD index 96f121070..73d89d909 100644 --- a/pcr/litecoin-qt/PKGBUILD +++ b/pcr/litecoin-qt/PKGBUILD @@ -3,7 +3,7 @@ pkgname='litecoin-qt' pkgver=0.8.6.1 pkgrel=2 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.litecoin.org/" makedepends=('boost' 'automoc4' 'qrencode' 'miniupnpc') license=('MIT') diff --git a/pcr/log4c/PKGBUILD b/pcr/log4c/PKGBUILD index 4bee1d129..3fcd1ee30 100644 --- a/pcr/log4c/PKGBUILD +++ b/pcr/log4c/PKGBUILD @@ -5,7 +5,7 @@ pkgver=1.2.1 pkgrel=1 pkgdesc="Logging FrameWork for C, as Log4j or Log4Cpp" url="http://log4c.sourceforge.net/" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license="LGPL" depends=('gcc-libs') makedepends=( 'bash' 'make' 'gcc' ) diff --git a/pcr/log4cxx/PKGBUILD b/pcr/log4cxx/PKGBUILD index 85cb7f551..fb15e7f9d 100644 --- a/pcr/log4cxx/PKGBUILD +++ b/pcr/log4cxx/PKGBUILD @@ -8,7 +8,7 @@ pkgdesc="A C++ port of Log4j" url="http://logging.apache.org/log4cxx" license="APACHE" depends=('apr-util' 'libxml2') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') makedepends=('autoconf' 'automake' 'libtool' 'patch' 'zip' 'gzip' 'sed') source=(http://archive.apache.org/dist/logging/$pkgname/$pkgver/apache-$pkgname-$pkgver.tar.gz diff --git a/pcr/lua51-sql-mysql/PKGBUILD b/pcr/lua51-sql-mysql/PKGBUILD index 05de8f661..5505140f9 100644 --- a/pcr/lua51-sql-mysql/PKGBUILD +++ b/pcr/lua51-sql-mysql/PKGBUILD @@ -7,7 +7,7 @@ pkgname=lua51-sql-mysql pkgdesc='MySQL module for Lua 5.1' pkgver=2.2.0 pkgrel=3 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://www.keplerproject.org/luasql/' license=('MIT') depends=('lua51' 'libmariadbclient') diff --git a/pcr/lv2-ir/PKGBUILD b/pcr/lv2-ir/PKGBUILD index cdeaf7414..4dcdafd18 100644 --- a/pcr/lv2-ir/PKGBUILD +++ b/pcr/lv2-ir/PKGBUILD @@ -4,7 +4,7 @@ pkgname=lv2-ir pkgver=1.3.2 pkgrel=1 pkgdesc="zero-latency, realtime, high performance signal convolver especially for creating reverb effects." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://factorial.hu/plugins/lv2/ir" license=('GPL') depends=('zita-convolver' 'libsamplerate' 'gtk2') diff --git a/pcr/mariadb-galera/PKGBUILD b/pcr/mariadb-galera/PKGBUILD index 1fc602d3b..cb6216fa6 100644 --- a/pcr/mariadb-galera/PKGBUILD +++ b/pcr/mariadb-galera/PKGBUILD @@ -7,7 +7,7 @@ pkgname='mariadb-galera' pkgver=10.0.12 _pkgver=${pkgver/.a/a} pkgrel=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') url='https://mariadb.com/kb/en/galera/' makedepends=('cmake' 'openssl' 'zlib' 'libaio' 'libxml2' 'openssl' 'pcre' 'galera') diff --git a/pcr/md5deep/PKGBUILD b/pcr/md5deep/PKGBUILD index 0649b1752..7d461e873 100755 --- a/pcr/md5deep/PKGBUILD +++ b/pcr/md5deep/PKGBUILD @@ -5,7 +5,7 @@ pkgname=md5deep pkgver=4.4 pkgrel=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') pkgdesc="Advanced checksum hashing tool" url="https://github.com/jessek/hashdeep" license=('Public Domain') diff --git a/pcr/minetest-git/PKGBUILD b/pcr/minetest-git/PKGBUILD index b9f2e95af..7aae831cb 100644 --- a/pcr/minetest-git/PKGBUILD +++ b/pcr/minetest-git/PKGBUILD @@ -5,7 +5,7 @@ pkgname=minetest-git pkgver=20130501 pkgrel=1 pkgdesc="An Infiniminer/Minecraft inspired game, git version." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://minetest.net/' license=('LGPL2.1') makedepends=('git' 'cmake' 'irrlicht' 'mesa' 'bzip2' 'libjpeg' 'libpng' 'zlib' 'curl') diff --git a/pcr/mit-scheme/PKGBUILD b/pcr/mit-scheme/PKGBUILD index c39cd6353..049399647 100644 --- a/pcr/mit-scheme/PKGBUILD +++ b/pcr/mit-scheme/PKGBUILD @@ -6,7 +6,7 @@ pkgname=mit-scheme pkgver=9.2 pkgrel=1 pkgdesc='MIT/GNU Scheme' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') url='http://www.gnu.org/software/mit-scheme/' depends=('glibc' 'ncurses' 'zlib') diff --git a/pcr/moblock/PKGBUILD b/pcr/moblock/PKGBUILD index 787b1f633..2b1b68010 100644 --- a/pcr/moblock/PKGBUILD +++ b/pcr/moblock/PKGBUILD @@ -6,7 +6,7 @@ pkgname=moblock pkgver=0.9rc2 pkgrel=8 pkgdesc="Console application that blocks connections from/to hosts listed in a file in peerguardian format" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://moblock.berlios.de/" license=('GPL') depends=(libnetfilter_queue iptables) diff --git a/pcr/msdl/PKGBUILD b/pcr/msdl/PKGBUILD index 632056457..2cf2d11a4 100644 --- a/pcr/msdl/PKGBUILD +++ b/pcr/msdl/PKGBUILD @@ -6,7 +6,7 @@ pkgver=1.2.7_r2 _pkgver=${pkgver/_/-} pkgrel=1 pkgdesc="A multi-protocol downloader for various streaming protocols" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://msdl.sourceforge.net/" license=('GPL3') depends=('glibc') diff --git a/pcr/multipath-tools/PKGBUILD b/pcr/multipath-tools/PKGBUILD index 24bb27921..4fc17bd91 100644 --- a/pcr/multipath-tools/PKGBUILD +++ b/pcr/multipath-tools/PKGBUILD @@ -9,7 +9,7 @@ pkgname=multipath-tools pkgver=0.5.0 pkgrel=1 pkgdesc='Multipath tools for Linux (including kpartx)' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://christophe.varoqui.free.fr/" license=('GPL2') depends=('libaio' 'device-mapper') diff --git a/pcr/multiwatch/PKGBUILD b/pcr/multiwatch/PKGBUILD index 0bf698bbc..64e82325e 100644 --- a/pcr/multiwatch/PKGBUILD +++ b/pcr/multiwatch/PKGBUILD @@ -3,7 +3,7 @@ pkgname=multiwatch pkgver='1.0.0' pkgrel=1 pkgdesc='Forks and watches multiple instances of a program in the same context' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://redmine.lighttpd.net/projects/multiwatch/wiki" license=('MIT') depends=('libev') diff --git a/pcr/musescore/PKGBUILD b/pcr/musescore/PKGBUILD index b7abf5877..7fabf0d7b 100644 --- a/pcr/musescore/PKGBUILD +++ b/pcr/musescore/PKGBUILD @@ -6,7 +6,7 @@ pkgname=musescore pkgver=1.3 pkgrel=3 pkgdesc="A music score editor written in Qt" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.musescore.org/en/" license=('GPL') depends=('shared-mime-info' 'qtscriptgenerator' 'portaudio') diff --git a/pcr/nagios-nrpe-plugin/PKGBUILD b/pcr/nagios-nrpe-plugin/PKGBUILD index 0a420b93d..df5563591 100644 --- a/pcr/nagios-nrpe-plugin/PKGBUILD +++ b/pcr/nagios-nrpe-plugin/PKGBUILD @@ -8,7 +8,7 @@ pkgver=2.13 pkgrel=1 pkgdesc="The Nagios NRPE server side plugin." license=('GPL') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.nagios.org" source=("http://downloads.sourceforge.net/nagios/nrpe-$pkgver.tar.gz") diff --git a/pcr/nagios-plugins/PKGBUILD b/pcr/nagios-plugins/PKGBUILD index 1434d2dee..5522e2282 100644 --- a/pcr/nagios-plugins/PKGBUILD +++ b/pcr/nagios-plugins/PKGBUILD @@ -6,7 +6,7 @@ pkgver=1.4.16 pkgrel=1 pkgdesc="Plugins are scripts and programs that perform host and service checks." license=('GPL') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.nagiosplugins.org" source=("http://downloads.sourceforge.net/nagiosplug/$pkgname-$pkgver.tar.gz" "stdio.patch") diff --git a/pcr/nautilus-dropbox/PKGBUILD b/pcr/nautilus-dropbox/PKGBUILD index fc4b0c6c6..de533023d 100644 --- a/pcr/nautilus-dropbox/PKGBUILD +++ b/pcr/nautilus-dropbox/PKGBUILD @@ -9,7 +9,7 @@ pkgname=nautilus-dropbox pkgver=1.4.0 pkgrel=2 pkgdesc="Dropbox for Linux - Nautilus extension" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://www.dropbox.com/" license=('custom:CC-BY-ND-3' 'GPL') depends=('libnotify' 'nautilus' 'dropbox' 'hicolor-icon-theme') diff --git a/pcr/nel-hg/PKGBUILD b/pcr/nel-hg/PKGBUILD index c0ab743f8..a26be232a 100644 --- a/pcr/nel-hg/PKGBUILD +++ b/pcr/nel-hg/PKGBUILD @@ -6,7 +6,7 @@ hgver=923522b pkgver=20131215 pkgrel=1 pkgdesc="a toolkit for the development of massively online universes." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.ryzomcore.org/" license=('AGPL3') depends=('libpng' 'libjpeg' 'libwww-hg' 'boost' 'freetype2' diff --git a/pcr/networkmanager-openswan/PKGBUILD b/pcr/networkmanager-openswan/PKGBUILD index f831e7ad2..a7aab22bf 100644 --- a/pcr/networkmanager-openswan/PKGBUILD +++ b/pcr/networkmanager-openswan/PKGBUILD @@ -6,7 +6,7 @@ _pkgname=NetworkManager-openswan pkgver=0.9.8.4 pkgrel=1 pkgdesc="NetworkManager plugin for IPSec VPN tunnels" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://ftp.acc.umu.se/pub/GNOME/sources/NetworkManager-openswan/" license=('GPL') depends=('openswan' 'gtk3' 'networkmanager' 'libgnome-keyring') diff --git a/pcr/networkmanager-strongswan/PKGBUILD b/pcr/networkmanager-strongswan/PKGBUILD index 7133769f2..5d1a54e81 100644 --- a/pcr/networkmanager-strongswan/PKGBUILD +++ b/pcr/networkmanager-strongswan/PKGBUILD @@ -5,7 +5,7 @@ _pkgname=NetworkManager-strongswan pkgver=1.3.0 pkgrel=2 pkgdesc="strongswan NetworkManager plugin" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://wiki.strongswan.org/projects/strongswan/wiki/NetworkManager" license=('GPL') depends=(networkmanager strongswan libgnomeui) diff --git a/pcr/nexuiz/PKGBUILD b/pcr/nexuiz/PKGBUILD index e2045c159..85a49a893 100644 --- a/pcr/nexuiz/PKGBUILD +++ b/pcr/nexuiz/PKGBUILD @@ -9,7 +9,7 @@ pkgname=nexuiz pkgver=2.5.2 _zipver=252 pkgrel=3 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') pkgdesc="A free software first person shooter" url="http://www.alientrap.org/games/nexuiz" license=("GPL") diff --git a/pcr/nfacct/PKGBUILD b/pcr/nfacct/PKGBUILD index 4558b77b2..bffeab3a6 100644 --- a/pcr/nfacct/PKGBUILD +++ b/pcr/nfacct/PKGBUILD @@ -5,7 +5,7 @@ pkgname=nfacct pkgver=1.0.0 pkgrel=1 pkgdesc="Command line tool to create/retrieve/delete accounting objects." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.netfilter.org/projects/nfacct/index.html" license=('GPL') depends=('libnetfilter_acct') diff --git a/pcr/nginx-passenger/PKGBUILD b/pcr/nginx-passenger/PKGBUILD index f2bfcf0c9..ea297b7da 100644 --- a/pcr/nginx-passenger/PKGBUILD +++ b/pcr/nginx-passenger/PKGBUILD @@ -13,7 +13,7 @@ pkgver=$_nginxver.passenger.$_passengerver pkgrel=1 pkgdesc='Lightweight HTTP server and IMAP/POP3 proxy server' pkgdesc+=" (with Passenger module)" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://nginx.org' license=('custom') depends=('pcre' 'zlib' 'openssl') diff --git a/pcr/note/PKGBUILD b/pcr/note/PKGBUILD index 4066dc911..151e9e796 100644 --- a/pcr/note/PKGBUILD +++ b/pcr/note/PKGBUILD @@ -7,7 +7,7 @@ pkgname=$_perlmod pkgver=1.3.18 pkgrel=1 pkgdesc="A Perl-based note taking application with multiple backends" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.daemon.de/NOTE" license=('GPL') depends=('perl' 'perl-yaml') diff --git a/pcr/npapi-vlc-git/PKGBUILD b/pcr/npapi-vlc-git/PKGBUILD index 6c7f89301..c9fb64249 100644 --- a/pcr/npapi-vlc-git/PKGBUILD +++ b/pcr/npapi-vlc-git/PKGBUILD @@ -6,7 +6,7 @@ pkgname=$_pkgname-git pkgver=0.2.213.gc992dba pkgrel=1 pkgdesc="The modern VLC Mozilla plugin" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://git.videolan.org/?p=$_pkgname.git;a=summary" license=('LGPL-2.1') options=('!libtool') diff --git a/pcr/ocaml-biniou/PKGBUILD b/pcr/ocaml-biniou/PKGBUILD index c5b6b74dc..f401fcb2a 100644 --- a/pcr/ocaml-biniou/PKGBUILD +++ b/pcr/ocaml-biniou/PKGBUILD @@ -9,7 +9,7 @@ _oname=biniou pkgver=1.0.8 pkgrel=3 pkgdesc='A binary data serialization format inspired by JSON' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') options=('!strip' '!makeflags' 'staticlibs') license=('BSD') depends=('glibc') diff --git a/pcr/ocaml-camomile/PKGBUILD b/pcr/ocaml-camomile/PKGBUILD index 213d8b805..555211fbf 100644 --- a/pcr/ocaml-camomile/PKGBUILD +++ b/pcr/ocaml-camomile/PKGBUILD @@ -5,7 +5,7 @@ pkgname=ocaml-camomile pkgver=0.8.4 pkgrel=2 pkgdesc="Comprehensive Unicode library for OCaml" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://github.com/yoriyuki/Camomile" license=('LGPL') depends=('ocaml' 'ocaml-findlib>=1.2.3') diff --git a/pcr/ocaml-curl/PKGBUILD b/pcr/ocaml-curl/PKGBUILD index 0bc9669b4..193218c5a 100644 --- a/pcr/ocaml-curl/PKGBUILD +++ b/pcr/ocaml-curl/PKGBUILD @@ -7,7 +7,7 @@ pkgname=ocaml-curl pkgver=0.5.3 pkgrel=3 pkgdesc="OCaml bindings to libcurl networking library" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('BSD') depends=('ocaml' 'curl>=7.9.8') makedepends=('ocaml-findlib') diff --git a/pcr/ocaml-easy-format/PKGBUILD b/pcr/ocaml-easy-format/PKGBUILD index 00a334d41..9682c343b 100644 --- a/pcr/ocaml-easy-format/PKGBUILD +++ b/pcr/ocaml-easy-format/PKGBUILD @@ -11,7 +11,7 @@ pkgver=1.0.2 pkgrel=1 pkgdesc="Data pretty printing made easy" url="http://mjambon.com/easy-format.html" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') options=('!strip' 'staticlibs') license=('BSD') makedepends=('ocaml-findlib') diff --git a/pcr/ocaml-extlib/PKGBUILD b/pcr/ocaml-extlib/PKGBUILD index 38193a1c7..2480ff623 100644 --- a/pcr/ocaml-extlib/PKGBUILD +++ b/pcr/ocaml-extlib/PKGBUILD @@ -5,7 +5,7 @@ pkgname=ocaml-extlib pkgver=1.5.4 pkgrel=2 pkgdesc="Extends the OCaml standard library" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://code.google.com/p/ocaml-extlib/" license=('LGPL') depends=('ocaml') diff --git a/pcr/ocaml-lwt/PKGBUILD b/pcr/ocaml-lwt/PKGBUILD index d6c5e6ae5..8acf022ed 100644 --- a/pcr/ocaml-lwt/PKGBUILD +++ b/pcr/ocaml-lwt/PKGBUILD @@ -7,7 +7,7 @@ pkgname="ocaml-lwt" pkgver=2.4.4 pkgrel=1 pkgdesc="A library for cooperative threads in OCaml" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://ocsigen.org/lwt/" license=('LGPL') depends=('ocaml>=3.12.0' 'ocaml-compiler-libs' diff --git a/pcr/ocaml-ounit/PKGBUILD b/pcr/ocaml-ounit/PKGBUILD index da4ed250d..c313615ae 100644 --- a/pcr/ocaml-ounit/PKGBUILD +++ b/pcr/ocaml-ounit/PKGBUILD @@ -11,7 +11,7 @@ pkgname=ocaml-ounit _pkgname=ounit pkgver=2.0.0 pkgrel=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('MIT') pkgdesc="Unit testing framework for OCaml" url="http://ounit.forge.ocamlcore.org" diff --git a/pcr/ocaml-pcre/PKGBUILD b/pcr/ocaml-pcre/PKGBUILD index b2945798b..31eca2325 100644 --- a/pcr/ocaml-pcre/PKGBUILD +++ b/pcr/ocaml-pcre/PKGBUILD @@ -7,7 +7,7 @@ pkgname=ocaml-pcre pkgver=7.0.2 pkgrel=2 pkgdesc="Perl compatible regular expressions for OCaml" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.ocaml.info/home/ocaml_sources.html#toc18" license=('LGPL') depends=('ocaml' 'pcre>=4.5') diff --git a/pcr/ocaml-react/PKGBUILD b/pcr/ocaml-react/PKGBUILD index 513ff2acf..42dee85de 100644 --- a/pcr/ocaml-react/PKGBUILD +++ b/pcr/ocaml-react/PKGBUILD @@ -7,7 +7,7 @@ pkgname=ocaml-react pkgver=0.9.4 pkgrel=2 pkgdesc="An OCaml module for functional reactive programming" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://erratique.ch/software/react" license=('BSD') depends=('ocaml') diff --git a/pcr/ocaml-ssl/PKGBUILD b/pcr/ocaml-ssl/PKGBUILD index b8af1a731..8efd5a055 100644 --- a/pcr/ocaml-ssl/PKGBUILD +++ b/pcr/ocaml-ssl/PKGBUILD @@ -5,7 +5,7 @@ pkgname=ocaml-ssl pkgver=0.4.6 pkgrel=3 pkgdesc="OCaml SSL Library" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://savonet.sourceforge.net/" license=('MIT') depends=('ocaml') diff --git a/pcr/ocaml-text/PKGBUILD b/pcr/ocaml-text/PKGBUILD index 436b15727..0ce09eabc 100644 --- a/pcr/ocaml-text/PKGBUILD +++ b/pcr/ocaml-text/PKGBUILD @@ -6,7 +6,7 @@ pkgname="${srcname}" pkgver='0.6' pkgrel=1 pkgdesc='A library for dealing with text in a convenient way' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://forge.ocamlcore.org/projects/ocaml-text/' license=('BSD') depends=('ocaml>=3.11.0') diff --git a/pcr/ocaml-xmlm/PKGBUILD b/pcr/ocaml-xmlm/PKGBUILD index 2476a3e9b..6feeb0a81 100644 --- a/pcr/ocaml-xmlm/PKGBUILD +++ b/pcr/ocaml-xmlm/PKGBUILD @@ -6,7 +6,7 @@ pkgname=ocaml-xmlm pkgver=1.1.1 pkgrel=1 pkgdesc="OCaml xml manipulation module" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://erratique.ch/software/xmlm/" license=('BSD') makedepends=('ocaml ocaml-findlib') diff --git a/pcr/ocaml-yojson/PKGBUILD b/pcr/ocaml-yojson/PKGBUILD index 2e5c9d2bb..afa945947 100644 --- a/pcr/ocaml-yojson/PKGBUILD +++ b/pcr/ocaml-yojson/PKGBUILD @@ -9,7 +9,7 @@ _oname=yojson pkgver=1.1.8 pkgrel=1 pkgdesc='An optimized parsing and printing library for JSON' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') options=('!strip' 'staticlibs') license=('BSD') depends=('ocaml-easy-format') diff --git a/pcr/ocrodjvu/PKGBUILD b/pcr/ocrodjvu/PKGBUILD index a61685702..d89011b57 100644 --- a/pcr/ocrodjvu/PKGBUILD +++ b/pcr/ocrodjvu/PKGBUILD @@ -4,7 +4,7 @@ pkgname=ocrodjvu pkgver=0.7.13 pkgrel=1 pkgdesc="ocrodjvu is a wrapper for OCR systems, that allows you to perform OCR on DjVu files." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://jwilk.net/software/ocrodjvu' license=('GPL2') depends=('python2' 'python2-lxml' 'python2-djvulibre') diff --git a/pcr/oggfwd/PKGBUILD b/pcr/oggfwd/PKGBUILD index 70665128c..0bbba0f91 100644 --- a/pcr/oggfwd/PKGBUILD +++ b/pcr/oggfwd/PKGBUILD @@ -4,7 +4,7 @@ pkgname=oggfwd pkgver=0.2 pkgrel=2 pkgdesc="pipes an ogg stream to an icecast server" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://v2v.cc/~j/oggfwd/" license=('GPL') source=(http://www.v2v.cc/~j/ffmpeg2theora/oggfwd/oggfwd.tar.gz) diff --git a/pcr/oinkmaster/PKGBUILD b/pcr/oinkmaster/PKGBUILD index da20ac3f9..e65cad6aa 100644 --- a/pcr/oinkmaster/PKGBUILD +++ b/pcr/oinkmaster/PKGBUILD @@ -6,7 +6,7 @@ pkgname=oinkmaster pkgver=2.0 pkgrel=7 pkgdesc="A script that will help you update and manage your Snort rules" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('BSD') url="http://oinkmaster.sourceforge.net/" depends=('snort') diff --git a/pcr/openchange/PKGBUILD b/pcr/openchange/PKGBUILD index 6542f140d..9a774867a 100644 --- a/pcr/openchange/PKGBUILD +++ b/pcr/openchange/PKGBUILD @@ -7,7 +7,7 @@ _dlid=180 pkgver=1.0 pkgrel=6 pkgdesc="Library for MAPI connectivity with Microsoft Exchange. This package was SPECIFICALLY created to support evolution-mapi and may not work for any other purpose." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.openchange.org" license=('GPL3') depends=('samba4>=4.0.0B1' 'popt' 'libical' 'sqlite3' 'file' 'boost' 'zlib') diff --git a/pcr/openicc/PKGBUILD b/pcr/openicc/PKGBUILD index 18642a1a5..7d4e74e18 100644 --- a/pcr/openicc/PKGBUILD +++ b/pcr/openicc/PKGBUILD @@ -5,7 +5,7 @@ pkgver=1.3.1 pkgrel=1 pkgdesc="Colour management projects to share ICC related implementation details" url="http://www.freedesktop.org/wiki/OpenIcc" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('xorg-server') source=("http://downloads.sourceforge.net/project/openicc/OpenICC-Profiles/icc-profiles-$pkgname-$pkgver.tar.bz2") license=('GPL') diff --git a/pcr/openjdk6/PKGBUILD b/pcr/openjdk6/PKGBUILD index 33b6c17e9..be2baf521 100644 --- a/pcr/openjdk6/PKGBUILD +++ b/pcr/openjdk6/PKGBUILD @@ -11,7 +11,7 @@ _openjdk_date=26_oct_2012 pkgver=${_javaver}.${_openjdk_version}_${_icedteaver} pkgrel=1.1 url='http://icedtea.classpath.org' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('custom') pkgdesc='Free Java environment based on OpenJDK 6.0 with IcedTea6 replacing binary plugs.' backup=(etc/profile.d/openjdk6.sh) diff --git a/pcr/openswan/PKGBUILD b/pcr/openswan/PKGBUILD index 4a81ca23b..cc06d558a 100644 --- a/pcr/openswan/PKGBUILD +++ b/pcr/openswan/PKGBUILD @@ -5,7 +5,7 @@ pkgrel=1 pkgdesc="Open Source implementation of IPsec for the Linux operating system" url="http://www.openswan.org" license=('GPL' 'custom') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('iproute2>=2.6.8' 'gmp' 'perl') optdepends=('python2') makedepends=('flex' 'bison') diff --git a/pcr/pacman-color/PKGBUILD b/pcr/pacman-color/PKGBUILD index 21944c31e..04e4efa68 100644 --- a/pcr/pacman-color/PKGBUILD +++ b/pcr/pacman-color/PKGBUILD @@ -6,7 +6,7 @@ pkgname=pacman-color pkgver=4.0.3 pkgrel=3 pkgdesc="A color patched command-line frontend for libalpm (Pacman)" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.archlinux.org/pacman/" license=('GPL') depends=('pacman>=4.0' 'pacman<4.1') diff --git a/pcr/pactools/PKGBUILD b/pcr/pactools/PKGBUILD index 859b4db6b..7776e77a5 100644 --- a/pcr/pactools/PKGBUILD +++ b/pcr/pactools/PKGBUILD @@ -5,7 +5,7 @@ pkgname=pactools pkgver=0.8.2 pkgrel=1 pkgdesc="A collection of the best tools for pacman" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://pierloz.com/pactools" license=("GPL") depends=('perl' 'bash' 'python') diff --git a/pcr/pandoc/PKGBUILD b/pcr/pandoc/PKGBUILD index 89e35b17d..94be42fea 100644 --- a/pcr/pandoc/PKGBUILD +++ b/pcr/pandoc/PKGBUILD @@ -14,7 +14,7 @@ _srcrel=2 pkgdesc='Conversion between markup formats (no Haskell libs)' url='http://johnmacfarlane.net/pandoc/' license=('GPL') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') # Needed for pandoc-citeproc depends=('icu>=52' 'icu<=54') makedepends=('ghc' 'sh' 'cabal-install' 'alex' 'happy') diff --git a/pcr/pdsh/PKGBUILD b/pcr/pdsh/PKGBUILD index 2a01c667d..86bf8c987 100644 --- a/pcr/pdsh/PKGBUILD +++ b/pcr/pdsh/PKGBUILD @@ -7,7 +7,7 @@ pkgver=2.29 pkgrel=2 pkgdesc='Parallel Distributed Shell' url='http://code.google.com/p/pdsh/' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') depends=('glibc' 'openssh' 'readline') optdepends=('perl: required by the dshbak utility') diff --git a/pcr/perl-astro-suntime/PKGBUILD b/pcr/perl-astro-suntime/PKGBUILD index 2c81bbd8c..df0ba81ea 100644 --- a/pcr/perl-astro-suntime/PKGBUILD +++ b/pcr/perl-astro-suntime/PKGBUILD @@ -7,7 +7,7 @@ pkgname=perl-astro-suntime pkgver=0.01 pkgrel=2 pkgdesc="Calculate sun rise/set times" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://search.cpan.org/~ROBF/Astro-SunTime" license=('GPL' 'PerlArtistic') depends=('perl-time-modules') diff --git a/pcr/perl-file-find-rule/PKGBUILD b/pcr/perl-file-find-rule/PKGBUILD index 705b6fba6..3c56a610b 100644 --- a/pcr/perl-file-find-rule/PKGBUILD +++ b/pcr/perl-file-find-rule/PKGBUILD @@ -6,7 +6,7 @@ _realname=File-Find-Rule pkgver=0.33 pkgrel=1 pkgdesc="Perl/CPAN Module File::Find::Rule." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') url="http://search.cpan.org/dist/File-Find-Rule/" depends=('perl-text-glob' 'perl-number-compare' 'perl') diff --git a/pcr/perl-iptables-chainmgr/PKGBUILD b/pcr/perl-iptables-chainmgr/PKGBUILD index f3dbcd5fc..1ccfde72f 100644 --- a/pcr/perl-iptables-chainmgr/PKGBUILD +++ b/pcr/perl-iptables-chainmgr/PKGBUILD @@ -5,7 +5,7 @@ pkgname=perl-iptables-chainmgr pkgver=1.2 pkgrel=1 pkgdesc="IPTables::ChainMgr - Perl extension for manipulating iptables and ip6tables policies" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://search.cpan.org/~mrash/IPTables-ChainMgr/" license=('GPL' 'PerlArtistic') depends=('perl' 'iptables' 'perl-iptables-parse>=0.9' 'perl-netaddr-ip>=4.0') diff --git a/pcr/perl-iptables-parse/PKGBUILD b/pcr/perl-iptables-parse/PKGBUILD index 2883b7429..285de133a 100644 --- a/pcr/perl-iptables-parse/PKGBUILD +++ b/pcr/perl-iptables-parse/PKGBUILD @@ -5,7 +5,7 @@ pkgname=perl-iptables-parse pkgver=1.1 pkgrel=1 pkgdesc="IPTables::Parse - Perl extension for parsing iptables and ip6tables firewall rulesets" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://search.cpan.org/~mrash/IPTables-Parse/" license=('GPL' 'PerlArtistic') depends=('perl' 'iptables') diff --git a/pcr/perl-math-bigint-gmp/PKGBUILD b/pcr/perl-math-bigint-gmp/PKGBUILD index 32923d432..0f5546403 100644 --- a/pcr/perl-math-bigint-gmp/PKGBUILD +++ b/pcr/perl-math-bigint-gmp/PKGBUILD @@ -6,7 +6,7 @@ pkgname=perl-math-bigint-gmp pkgver=1.37 pkgrel=2 pkgdesc="Big integer calculations using the GNU Multiple Precision Arithmetic Library." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://search.cpan.org/~$_author/$_perlmod-$pkgver/" license=('GPL' 'PerlArtistic') depends=('perl>=5.16.2' 'gmp') diff --git a/pcr/perl-number-compare/PKGBUILD b/pcr/perl-number-compare/PKGBUILD index 889f40212..2961749e2 100644 --- a/pcr/perl-number-compare/PKGBUILD +++ b/pcr/perl-number-compare/PKGBUILD @@ -6,7 +6,7 @@ _realname=Number-Compare pkgver=0.03 pkgrel=1 pkgdesc="Perl/CPAN Module Number::Compare." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('unknown') url="http://search.cpan.org/dist/Number-Compare/" depends=('perl') diff --git a/pcr/perl-sys-mmap/PKGBUILD b/pcr/perl-sys-mmap/PKGBUILD index 4b7bf1d47..4f910fa0c 100644 --- a/pcr/perl-sys-mmap/PKGBUILD +++ b/pcr/perl-sys-mmap/PKGBUILD @@ -6,7 +6,7 @@ pkgname='perl-sys-mmap' pkgver='0.16' pkgrel='3' pkgdesc="uses mmap to map in a file as a Perl variable" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('PerlArtistic' 'GPL') options=('!emptydirs') depends=('perl') diff --git a/pcr/perl-unicode-map/PKGBUILD b/pcr/perl-unicode-map/PKGBUILD index 92b1ac51c..f8b7b783d 100644 --- a/pcr/perl-unicode-map/PKGBUILD +++ b/pcr/perl-unicode-map/PKGBUILD @@ -7,7 +7,7 @@ pkgname=perl-unicode-map pkgver=0.112 pkgrel=2 pkgdesc="Unicode::Map" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://search.cpan.org/~MSCHWARTZ/Unicode-Map" license=('GPL' 'PerlArtistic') depends=('perl') diff --git a/pcr/polarssl/PKGBUILD b/pcr/polarssl/PKGBUILD index cf24d05ae..4667b004d 100644 --- a/pcr/polarssl/PKGBUILD +++ b/pcr/polarssl/PKGBUILD @@ -4,7 +4,7 @@ pkgname=polarssl pkgver=1.2.8 pkgrel=1 pkgdesc="Portable cryptographic and SSL/TLS library" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.polarssl.org/" license=('GPL2') source=(http://www.polarssl.org/code/releases/polarssl-"$pkgver"-gpl.tgz) diff --git a/pcr/postsrsd/PKGBUILD b/pcr/postsrsd/PKGBUILD index d377f36ad..43581298e 100644 --- a/pcr/postsrsd/PKGBUILD +++ b/pcr/postsrsd/PKGBUILD @@ -5,7 +5,7 @@ pkgname=postsrsd pkgver=1.1 pkgrel=1 pkgdesc="Provides the Sender Rewriting Scheme (SRS) via TCP-based lookup tables for Postfix" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('glibc') makedepends=('cmake' 'help2man') backup=('etc/postsrsd/postsrsd.conf') diff --git a/pcr/pspp/PKGBUILD b/pcr/pspp/PKGBUILD index a0b668b84..8cba34875 100644 --- a/pcr/pspp/PKGBUILD +++ b/pcr/pspp/PKGBUILD @@ -4,7 +4,7 @@ pkgname=pspp pkgver=0.8.2 pkgrel=1 pkgdesc="Statistical analysis program" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.gnu.org/software/pspp/" license=('GPL3') depends=('gsl' 'gtksourceview2' 'postgresql-libs' 'desktop-file-utils') diff --git a/pcr/pumpa/PKGBUILD b/pcr/pumpa/PKGBUILD index a5f6ee21c..7f5234548 100644 --- a/pcr/pumpa/PKGBUILD +++ b/pcr/pumpa/PKGBUILD @@ -9,7 +9,7 @@ url="http://sjoberg.fi/software/pumpa.html" license=('GPL3') pkgrel=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') makedepends=('aspell' 'qjson' 'qt5-base') source=("http://gitorious.org/pumpa/pumpa/archive/v$pkgver.tar.gz") md5sums=('cb1a75b1365063198bd02b76e3fce2c5') diff --git a/pcr/pycryptopp/PKGBUILD b/pcr/pycryptopp/PKGBUILD index 54f8cda8a..7dd659593 100644 --- a/pcr/pycryptopp/PKGBUILD +++ b/pcr/pycryptopp/PKGBUILD @@ -5,7 +5,7 @@ pkgver=0.6.0 _pkgtag=1206569328141510525648634803928199668821045408958 pkgrel=2 pkgdesc="Python wrappers for the Crypto++ library" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://allmydata.org/trac/pycryptopp' license=('GPL2' 'custom') depends=('python2' 'crypto++') diff --git a/pcr/python-efl/PKGBUILD b/pcr/python-efl/PKGBUILD index afca9af03..6387e3d4c 100644 --- a/pcr/python-efl/PKGBUILD +++ b/pcr/python-efl/PKGBUILD @@ -8,7 +8,7 @@ url="http://www.enlightenment.org" license=('LGPL3') # Also contains a copy of GPL3, but grep the source files; it's all LGPL pkgrel=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') makedepends=(elementary python{,2}-dbus) source=("http://download.enlightenment.org/rel/bindings/python/$pkgname-$pkgver.tar.bz2") diff --git a/pcr/python-gensim/PKGBUILD b/pcr/python-gensim/PKGBUILD index e00cab736..d38b80700 100755 --- a/pcr/python-gensim/PKGBUILD +++ b/pcr/python-gensim/PKGBUILD @@ -4,7 +4,7 @@ pkgname=python-gensim pkgver=0.10.0 pkgrel=1 pkgdesc="Python framework for fast Vector Space Modelling" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://nlp.fi.muni.cz/projekty/gensim/" license=('LGPL') depends=('python-scipy') diff --git a/pcr/python-wsgiref/PKGBUILD b/pcr/python-wsgiref/PKGBUILD index 0ce289a14..98585a2ae 100644 --- a/pcr/python-wsgiref/PKGBUILD +++ b/pcr/python-wsgiref/PKGBUILD @@ -5,7 +5,7 @@ pkgname=python-wsgiref pkgver=0.1.2 pkgrel=2 pkgdesc="WSGI (PEP 333) Reference Library" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://cheeseshop.python.org/pypi/wsgiref" license=('PSF or ZPL') depends=('python2') diff --git a/pcr/python-xattr/PKGBUILD b/pcr/python-xattr/PKGBUILD index d6977f435..f9b504284 100644 --- a/pcr/python-xattr/PKGBUILD +++ b/pcr/python-xattr/PKGBUILD @@ -4,7 +4,7 @@ pkgname=python-xattr pkgver=20111028 pkgrel=1 pkgdesc="module for manipulating filesystem extended attributes" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://undefined.org/python/#xattr" license=('MIT') conflicts=('pyattr') diff --git a/pcr/python2-async/PKGBUILD b/pcr/python2-async/PKGBUILD index 1799746f3..25aac88dd 100644 --- a/pcr/python2-async/PKGBUILD +++ b/pcr/python2-async/PKGBUILD @@ -5,7 +5,7 @@ pkgname=python2-async pkgver=0.6.1 pkgrel=1 pkgdesc="Async aims to make writing asyncronous processing easier." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://pypi.python.org/pypi/async" license=('BSD') depends=('python2') diff --git a/pcr/python2-djvulibre/PKGBUILD b/pcr/python2-djvulibre/PKGBUILD index 19509a37c..1f8bbc7ee 100644 --- a/pcr/python2-djvulibre/PKGBUILD +++ b/pcr/python2-djvulibre/PKGBUILD @@ -6,7 +6,7 @@ pkgname=python2-djvulibre pkgver=0.3.9 pkgrel=2 pkgdesc="A set of Python bindings for the DjVuLibre library" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://jwilk.net/software/python-djvulibre" license=('GPL2') depends=('djvulibre' 'python2') diff --git a/pcr/python2-gitdb/PKGBUILD b/pcr/python2-gitdb/PKGBUILD index f0cde5926..8eb3e45f9 100644 --- a/pcr/python2-gitdb/PKGBUILD +++ b/pcr/python2-gitdb/PKGBUILD @@ -5,7 +5,7 @@ pkgname=python2-gitdb pkgver=0.5.4 pkgrel=1 pkgdesc="IO of git-style object databases" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://pypi.python.org/pypi/gitdb" license=('BSD') makedepends=('python2' 'python2-distribute') diff --git a/pcr/python2-mock/PKGBUILD b/pcr/python2-mock/PKGBUILD index 4fc1cd611..8b50301b7 100644 --- a/pcr/python2-mock/PKGBUILD +++ b/pcr/python2-mock/PKGBUILD @@ -7,7 +7,7 @@ pkgdesc="A Python Mocking and Patching Library for Testing" url='http://www.voidspace.org.uk/python/mock/' license=('BSD') depends=('python2') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') source=("http://pypi.python.org/packages/source/m/mock/mock-$pkgver.tar.gz") md5sums=('c3971991738caa55ec7c356bbc154ee2') diff --git a/pcr/python2-passlib/PKGBUILD b/pcr/python2-passlib/PKGBUILD index 0fb516429..4a41f3801 100644 --- a/pcr/python2-passlib/PKGBUILD +++ b/pcr/python2-passlib/PKGBUILD @@ -6,7 +6,7 @@ pkgname=python2-passlib pkgver=1.6.1 pkgrel=1 pkgdesc="A password hashing library for Python." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url=("https://code.google.com/p/passlib/") license=('custom') depends=('python2') diff --git a/pcr/python2-pyicu/PKGBUILD b/pcr/python2-pyicu/PKGBUILD index bb3170db9..ae29030c1 100644 --- a/pcr/python2-pyicu/PKGBUILD +++ b/pcr/python2-pyicu/PKGBUILD @@ -4,7 +4,7 @@ _realpkgname=PyICU pkgver=1.7 pkgrel=1 pkgdesc="Python binding for ICU" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://pyicu.osafoundation.org/" license=('custom') depends=('python2' 'icu') diff --git a/pcr/python2-sendfile/PKGBUILD b/pcr/python2-sendfile/PKGBUILD index 714e8e07e..c30e4d1a1 100644 --- a/pcr/python2-sendfile/PKGBUILD +++ b/pcr/python2-sendfile/PKGBUILD @@ -8,7 +8,7 @@ pkgrel=2 pkgdesc="A Python interface to sendfile(2)" url="http://code.google.com/p/pysendfile/" license=('MIT') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('python2') makedepends=('python2-distribute') source=("https://pypi.python.org/packages/source/p/$_pkgname/$_pkgname-$pkgver.tar.gz") diff --git a/pcr/python2-smmap/PKGBUILD b/pcr/python2-smmap/PKGBUILD index 2eb7a009c..666c82e7a 100644 --- a/pcr/python2-smmap/PKGBUILD +++ b/pcr/python2-smmap/PKGBUILD @@ -5,7 +5,7 @@ pkgname='python2-smmap' pkgver=0.8.2 pkgrel=1 pkgdesc="A pure git implementation of a sliding window memory map manager" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://pypi.python.org/pypi/smmap" license=('BSD') makedepends=('python2' 'python2-distribute') diff --git a/pcr/qemu-usbredir/PKGBUILD b/pcr/qemu-usbredir/PKGBUILD index 35f945d0e..480b19c7c 100644 --- a/pcr/qemu-usbredir/PKGBUILD +++ b/pcr/qemu-usbredir/PKGBUILD @@ -5,7 +5,7 @@ pkgname=qemu-usbredir pkgver=1.7.0 pkgrel=1 pkgdesc="A generic and open source processor emulator which achieves a good emulation speed by using dynamic translation." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL2' 'LGPL2.1') url="http://wiki.qemu.org/Index.html" makedepends=('texi2html' 'perl' 'python2' 'spice-protocol') diff --git a/pcr/qgis/PKGBUILD b/pcr/qgis/PKGBUILD index fc87cbf12..971977b29 100644 --- a/pcr/qgis/PKGBUILD +++ b/pcr/qgis/PKGBUILD @@ -10,7 +10,7 @@ pkgrel=6 pkgdesc='Quantum GIS is a Geographic Information System (GIS) that supports vector, raster & database formats' url='http://qgis.org/' license=('GPL') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') # update to http://www.qgis.org/wiki/Building_QGIS_from_Source#Overview depends=('libmysqlclient' 'postgresql-libs' 'sqlite3' 'jasper' 'curl' 'pyqt' 'python2' 'python2-pyqt' 'giflib' 'cfitsio' 'qwt' 'gdal' 'flex' 'bison' 'libspatialite' 'spatialindex') makedepends=('cmake' 'grass' 'gsl' 'postgis' 'netcdf' 'fcgi' 'python2-sip') diff --git a/pcr/qt-at-spi-git/PKGBUILD b/pcr/qt-at-spi-git/PKGBUILD index fb42af603..d53a10982 100644 --- a/pcr/qt-at-spi-git/PKGBUILD +++ b/pcr/qt-at-spi-git/PKGBUILD @@ -14,7 +14,7 @@ license=('LGPL') provides=("$_pkgname=$_pkgver") pkgrel=2 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('at-spi2-core' 'qt4>=4.8' 'kdelibs>=4.8') makedepends=('cmake' 'automoc4') diff --git a/pcr/qtkeychain/PKGBUILD b/pcr/qtkeychain/PKGBUILD index 8cce24b13..438dd6ea0 100644 --- a/pcr/qtkeychain/PKGBUILD +++ b/pcr/qtkeychain/PKGBUILD @@ -9,7 +9,7 @@ pkgname=qtkeychain pkgver=0.1 pkgrel=3 pkgdesc="Provides support for secure credentials storage." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://github.com/frankosterfeld/qtkeychain" license=('BSD2') depends=('qt4') diff --git a/pcr/qtoctave/PKGBUILD b/pcr/qtoctave/PKGBUILD index ed9b3fa7c..2103020ea 100644 --- a/pcr/qtoctave/PKGBUILD +++ b/pcr/qtoctave/PKGBUILD @@ -5,7 +5,7 @@ pkgname=qtoctave pkgver=0.10.1 pkgrel=2 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') pkgdesc="Qt4 frontend for octave" url="https://forja.rediris.es/projects/csl-qtoctave/" license=('GPL2') diff --git a/pcr/quackle/PKGBUILD b/pcr/quackle/PKGBUILD index 9f6fc79e5..c5ef06b4e 100644 --- a/pcr/quackle/PKGBUILD +++ b/pcr/quackle/PKGBUILD @@ -3,7 +3,7 @@ pkgname=quackle pkgver=0.97 pkgrel=2 pkgdesc='Free crossword game (Scrabble-like) artificial intelligence and analysis tool' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://people.csail.mit.edu/jasonkb/quackle' license=('GPL') depends=('qt4') diff --git a/pcr/quvi-current/PKGBUILD b/pcr/quvi-current/PKGBUILD index c421f9dc0..009646597 100644 --- a/pcr/quvi-current/PKGBUILD +++ b/pcr/quvi-current/PKGBUILD @@ -8,7 +8,7 @@ provides=(quvi) pkgver=0.9.5 pkgrel=1 pkgdesc='Command-line tool for parsing video download links.' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://quvi.sourceforge.net/' license=('AGPL3') depends=('libquvi') diff --git a/pcr/re2-hg/PKGBUILD b/pcr/re2-hg/PKGBUILD index 9af6e6827..8143f9022 100644 --- a/pcr/re2-hg/PKGBUILD +++ b/pcr/re2-hg/PKGBUILD @@ -5,7 +5,7 @@ pkgname=re2-hg pkgver=1 pkgrel=1 pkgdesc='Fast, safe and thread-friendly alternative to backtracking regular expression engines' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://code.google.com/p/re2/' license=('GPL2') provides=('re2') diff --git a/pcr/rosinstall/PKGBUILD b/pcr/rosinstall/PKGBUILD index 71077bc23..e171ad506 100644 --- a/pcr/rosinstall/PKGBUILD +++ b/pcr/rosinstall/PKGBUILD @@ -7,7 +7,7 @@ url='http://www.ros.org/' pkgname='rosinstall' pkgver='0.7.3' pkgrel='1' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('BSD') depends=('python2' 'cmake' 'wget' 'python2-vcstools' 'git' 'python2-distribute' 'python2-yaml' 'python2-wstool') diff --git a/pcr/rstudio-desktop/PKGBUILD b/pcr/rstudio-desktop/PKGBUILD index 4d3d04d77..ffbd08239 100644 --- a/pcr/rstudio-desktop/PKGBUILD +++ b/pcr/rstudio-desktop/PKGBUILD @@ -6,7 +6,7 @@ pkgver=0.97.332 _commit=e65a459 pkgrel=1 pkgdesc="A powerful and productive user interface for R" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.rstudio.org/" license=('AGPL') depends=('r>=2.11.1' 'qtwebkit' 'boost-libs>=1.50' 'shared-mime-info') diff --git a/pcr/ruby-libnotify/PKGBUILD b/pcr/ruby-libnotify/PKGBUILD index 25864f2b2..63b5a48af 100644 --- a/pcr/ruby-libnotify/PKGBUILD +++ b/pcr/ruby-libnotify/PKGBUILD @@ -7,7 +7,7 @@ pkgname=ruby-libnotify pkgver=0.8.0 pkgrel=1 pkgdesc="ruby bindings for libnotify, a library for desktop notifications" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://rubygems.org/downloads" license=('LGPL') depends=('ruby' 'libnotify' 'ruby-gtk2') diff --git a/pcr/ryzom-hg/PKGBUILD b/pcr/ryzom-hg/PKGBUILD index ee50d998a..418f53640 100644 --- a/pcr/ryzom-hg/PKGBUILD +++ b/pcr/ryzom-hg/PKGBUILD @@ -6,7 +6,7 @@ hgver=e7f0b9c pkgver=20140328 pkgrel=1 pkgdesc="An awesome free software 3D MMORPG game" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.ryzom.com/" license=('AGPL3') #depends=('nel-hg' 'ryzom-data' 'lua51') # use these when https://bitbucket.org/ryzom/ryzomcore/issue/149 is solved diff --git a/pcr/samba4/PKGBUILD b/pcr/samba4/PKGBUILD index c2b8c88fa..052772eed 100644 --- a/pcr/samba4/PKGBUILD +++ b/pcr/samba4/PKGBUILD @@ -8,7 +8,7 @@ pkgname=samba4 pkgver=4.0.0rc5 pkgrel=1 pkgdesc="Samba 4.0 Release Candidate" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.samba.org" license=('GPL3') depends=('db>=4.7' 'popt' 'libcups' 'acl' 'libldap' 'libcap>=2.16' 'pam' 'gamin' 'gnutls>=2.4.1' 'talloc' 'tdb') diff --git a/pcr/sfml-git/PKGBUILD b/pcr/sfml-git/PKGBUILD index 95f2b9b51..eb7b7e30f 100644 --- a/pcr/sfml-git/PKGBUILD +++ b/pcr/sfml-git/PKGBUILD @@ -5,7 +5,7 @@ pkgname=sfml-git pkgver=20120805 pkgrel=4 pkgdesc='A simple, fast, cross-platform, and object-oriented multimedia API.' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://www.sfml-dev.org/' license=('zlib') depends=('libsndfile' 'libxrandr' 'libjpeg' 'openal' 'glew' 'freetype2') diff --git a/pcr/shogun/PKGBUILD b/pcr/shogun/PKGBUILD index 9439143e0..a779481b4 100644 --- a/pcr/shogun/PKGBUILD +++ b/pcr/shogun/PKGBUILD @@ -8,7 +8,7 @@ pkgname=shogun pkgver=3.2.0 pkgrel=1 pkgdesc="Shogun - A Large Scale Machine Learning Toolbox" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.shogun-toolbox.org" license=('GPLv3') depends=('python2' 'python2-numpy' 'swig' 'hdf5' 'blas' 'lapack') diff --git a/pcr/sic/PKGBUILD b/pcr/sic/PKGBUILD index 3f5085f31..c5bf7c0e3 100644 --- a/pcr/sic/PKGBUILD +++ b/pcr/sic/PKGBUILD @@ -7,7 +7,7 @@ pkgver=1.2 pkgrel=1 pkgdesc='An extremely simple IRC client.' license=('MIT') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://tools.suckless.org/sic' depends=('glibc') source=("http://dl.suckless.org/tools/$pkgname-$pkgver.tar.gz") diff --git a/pcr/sigil/PKGBUILD b/pcr/sigil/PKGBUILD index c5737e7d3..0dabcef35 100644 --- a/pcr/sigil/PKGBUILD +++ b/pcr/sigil/PKGBUILD @@ -7,7 +7,7 @@ pkgname=sigil pkgver=0.7.2 pkgrel=1 pkgdesc="A WYSIWYG ebook editor" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://code.google.com/p/sigil/" license=('GPL3') depends=('qt5-base' 'qt5-svg' 'qt5-webkit' 'qt5-xmlpatterns' 'qt5-tools') diff --git a/pcr/skanlite/PKGBUILD b/pcr/skanlite/PKGBUILD index 61677d0d5..0f12711f7 100644 --- a/pcr/skanlite/PKGBUILD +++ b/pcr/skanlite/PKGBUILD @@ -6,7 +6,7 @@ pkgname=skanlite pkgver=1.0 pkgrel=1.1 pkgdesc="Image Scanning Application for KDE" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://www.kde.org/applications/graphics/skanlite' license=('GPL') depends=('kdebase-runtime' 'libksane') diff --git a/pcr/snort/PKGBUILD b/pcr/snort/PKGBUILD index 78eaa633e..e5a2107b6 100644 --- a/pcr/snort/PKGBUILD +++ b/pcr/snort/PKGBUILD @@ -10,7 +10,7 @@ pkgname=snort pkgver=2.9.6.1 pkgrel=2 pkgdesc='A lightweight network intrusion detection system.' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://www.snort.org' license=('GPL') depends=('libdaq' 'libdnet' 'libpcap' 'openssl' 'pcre' 'zlib') diff --git a/pcr/softhsm/PKGBUILD b/pcr/softhsm/PKGBUILD index dc88914ec..a85c68fef 100644 --- a/pcr/softhsm/PKGBUILD +++ b/pcr/softhsm/PKGBUILD @@ -4,7 +4,7 @@ pkgname=softhsm pkgver=1.3.4 pkgrel=1 pkgdesc="Software PKCS11 store" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.opendnssec.org/softhsm/" license=('custom' 'BSD') depends=('botan' 'sqlite3') diff --git a/pcr/spatialindex/PKGBUILD b/pcr/spatialindex/PKGBUILD index 866addfdb..a8b2f6fce 100644 --- a/pcr/spatialindex/PKGBUILD +++ b/pcr/spatialindex/PKGBUILD @@ -3,7 +3,7 @@ pkgname=spatialindex pkgver=1.8.0 pkgrel=1 pkgdesc="An extensible framework that supports robust spatial indexing methods and sophisticated spatial queries." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://libspatialindex.github.com/" license=('MIT') depends=(gcc-libs) diff --git a/pcr/sqlcipher/PKGBUILD b/pcr/sqlcipher/PKGBUILD index 45a3efbe9..d0c702e22 100644 --- a/pcr/sqlcipher/PKGBUILD +++ b/pcr/sqlcipher/PKGBUILD @@ -2,7 +2,7 @@ pkgname=sqlcipher pkgver=2.2.1 pkgrel=1 pkgdesc="SQLite extension that provides transparent 256-bit AES encryption of database files" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://sqlcipher.net/" license=('BSD') makedepends=('tcl' 'openssl' 'sqlite3' 'git') diff --git a/pcr/steadyflow/PKGBUILD b/pcr/steadyflow/PKGBUILD index c7eb85b35..3be25b36e 100644 --- a/pcr/steadyflow/PKGBUILD +++ b/pcr/steadyflow/PKGBUILD @@ -7,7 +7,7 @@ pkgver=0.2.0 pkgrel=3 pkgdesc="A download manager that aims for minimalism, ease of use, and a clean, malleable codebase" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url=https://launchpad.net/steadyflow license=('GPL3') install=steadyflow.install diff --git a/pcr/strongswan/PKGBUILD b/pcr/strongswan/PKGBUILD index 0f2d5a204..9d9942fa1 100644 --- a/pcr/strongswan/PKGBUILD +++ b/pcr/strongswan/PKGBUILD @@ -12,7 +12,7 @@ pkgrel=2 pkgdesc="open source IPsec implementation" url='http://www.strongswan.org' license=("GPL") -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('curl' 'gmp' 'iproute2' 'openssl' 'sqlite') conflicts=('openswan') options=(!libtool) diff --git a/pcr/stumpwm-git/PKGBUILD b/pcr/stumpwm-git/PKGBUILD index 3b717a119..f014ae958 100644 --- a/pcr/stumpwm-git/PKGBUILD +++ b/pcr/stumpwm-git/PKGBUILD @@ -9,7 +9,7 @@ pkgname=stumpwm-git pkgver=20110924 pkgrel=1 pkgdesc="A tiling, keyboard-driven window manager written in common lisp" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.nongnu.org/stumpwm/" license=('GPL2') provides=('stumpwm') diff --git a/pcr/supermodel/PKGBUILD b/pcr/supermodel/PKGBUILD index 3e2f10481..7621f5e90 100644 --- a/pcr/supermodel/PKGBUILD +++ b/pcr/supermodel/PKGBUILD @@ -4,7 +4,7 @@ pkgname=supermodel pkgver=0.2a pkgrel=1 pkgdesc='A Sega Model 3 Arcade Emulator' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://www.supermodel3.com/' license=('GPL3') depends=('mesa' 'glu' 'sdl' 'zlib') diff --git a/pcr/swig1/PKGBUILD b/pcr/swig1/PKGBUILD index 4e1b29797..540db98df 100644 --- a/pcr/swig1/PKGBUILD +++ b/pcr/swig1/PKGBUILD @@ -8,7 +8,7 @@ _pkgname=swig pkgver=1.3.40 pkgrel=1 pkgdesc="A compiler that integrates C and C++ code with scripting languages (legacy version)" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.swig.org/" license=('custom') depends=('gcc-libs' 'zlib') diff --git a/pcr/sword-svn/PKGBUILD b/pcr/sword-svn/PKGBUILD index 42d09c3bc..ca0fbfb2c 100644 --- a/pcr/sword-svn/PKGBUILD +++ b/pcr/sword-svn/PKGBUILD @@ -3,7 +3,7 @@ pkgname=sword-svn pkgver=2793 pkgrel=1 pkgdesc="Libraries for Bible programs - svn -version" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.crosswire.org/sword/" license=('GPL') depends=('curl' 'clucene' 'swig') diff --git a/pcr/syncthing/PKGBUILD b/pcr/syncthing/PKGBUILD index 4929f8b6a..1791e31a8 100644 --- a/pcr/syncthing/PKGBUILD +++ b/pcr/syncthing/PKGBUILD @@ -8,7 +8,7 @@ pkgrel=1 pkgdesc="Open Source Continuous Replication / Cluster Synchronization Thing" url="http://syncthing.net/" license=('MIT') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('glibc') makedepends=('git' 'go' 'godep' 'inetutils') source=("${pkgname}::git+https://github.com/calmh/syncthing.git#tag=v${pkgver}" diff --git a/pcr/tanglet/PKGBUILD b/pcr/tanglet/PKGBUILD index a8114ba62..3777b0dde 100644 --- a/pcr/tanglet/PKGBUILD +++ b/pcr/tanglet/PKGBUILD @@ -6,7 +6,7 @@ pkgname=tanglet pkgver=1.2.2 pkgrel=1 pkgdesc="A single player word finding game based on Boggle." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://gottcode.org/${pkgname}/" license=('GPL3') depends=('qt5-base') diff --git a/pcr/ted/PKGBUILD b/pcr/ted/PKGBUILD index f78ce37b5..765fbf576 100644 --- a/pcr/ted/PKGBUILD +++ b/pcr/ted/PKGBUILD @@ -7,7 +7,7 @@ pkgname=ted pkgver=2.23 pkgrel=2 pkgdesc="A lightweight rtf text processor" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.nllgg.nl/Ted/" depends=('zlib' 'pcre' 'libxpm' 'libjpeg' 'libtiff' 'libpng' 'gtk2' 'libpaper' 'desktop-file-utils') license=('GPL') diff --git a/pcr/textext/PKGBUILD b/pcr/textext/PKGBUILD index f83f9ceea..c93a29c60 100644 --- a/pcr/textext/PKGBUILD +++ b/pcr/textext/PKGBUILD @@ -4,7 +4,7 @@ pkgname=textext pkgver=0.4.4 pkgrel=3 pkgdesc="An inkscape extension which lets you add LaTeX equations to your drawings" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('BSD') url="http://pav.iki.fi/software/textext/" depends=('inkscape' 'texlive-core' 'python2-lxml' 'pdf2svg') diff --git a/pcr/theide/PKGBUILD b/pcr/theide/PKGBUILD index 215b4493b..dc44d9fca 100644 --- a/pcr/theide/PKGBUILD +++ b/pcr/theide/PKGBUILD @@ -5,7 +5,7 @@ pkgname=theide pkgver=5485 pkgrel=1 pkgdesc="Modern IDE designed for developping large U++/C++ applications" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.ultimatepp.org" license=('BSD') groups=() diff --git a/pcr/timekpr/PKGBUILD b/pcr/timekpr/PKGBUILD index 79934358c..5a9272a16 100644 --- a/pcr/timekpr/PKGBUILD +++ b/pcr/timekpr/PKGBUILD @@ -4,7 +4,7 @@ pkgname=timekpr pkgver=0.3.2 pkgrel=9 pkgdesc="Control the computer usage of your user accounts. You can limit their daily usage based on a timed access duration and configure periods of day when they can log in." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url=https://launchpad.net/timekpr license=('GPL') depends=('python2') diff --git a/pcr/toluapp/PKGBUILD b/pcr/toluapp/PKGBUILD index faf09878a..0b81a5162 100644 --- a/pcr/toluapp/PKGBUILD +++ b/pcr/toluapp/PKGBUILD @@ -9,7 +9,7 @@ url="http://www.codenix.com/~tolua" depends=('lua') makedepends=('scons') license=('MIT') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') source=(http://www.codenix.com/~tolua/tolua++-${pkgver}.tar.bz2 config_linux.py) md5sums=('100aa6907b8108582080b37d79c0afd7' 'f85232adfa873ea012088dd4d7fb63d7') diff --git a/pcr/triceratops-lv2/PKGBUILD b/pcr/triceratops-lv2/PKGBUILD index db8b7b101..5a8a78ea3 100644 --- a/pcr/triceratops-lv2/PKGBUILD +++ b/pcr/triceratops-lv2/PKGBUILD @@ -4,7 +4,7 @@ pkgname=triceratops-lv2 pkgver=0.1.7 pkgrel=1 pkgdesc="Polyphonic synthesizer LV2 plugin" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://deliriumdecrypted.blogspot.com/" license=('GPL') groups=('lv2-plugins') diff --git a/pcr/tvenlinux-desktop/PKGBUILD b/pcr/tvenlinux-desktop/PKGBUILD index 0af13211d..8f92787aa 100644 --- a/pcr/tvenlinux-desktop/PKGBUILD +++ b/pcr/tvenlinux-desktop/PKGBUILD @@ -7,7 +7,7 @@ pkgver=20140127 pkgrel=2 pkgdesc="Simple bash script to watch and record TV on GNU/Linux/BSD without capture card/tuner. (TV in Spain, Peru, Chile, Cuba, Venezuela, Bolivia and Argentina)" url="http://www.tvenlinux.com/" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL3') depends=('mplayer' 'rtmpdump') optdepends=('zenity: for GTK users' 'kdialog: for QT users' 'curl: for view EPG (Electronic Program Guide)') diff --git a/pcr/ums/PKGBUILD b/pcr/ums/PKGBUILD index 5894c65d1..a43e26b06 100644 --- a/pcr/ums/PKGBUILD +++ b/pcr/ums/PKGBUILD @@ -6,7 +6,7 @@ pkgname=ums pkgver=4.0.0 pkgrel=1 pkgdesc="Universal Media Server: a DLNA-compliant UPnP Media Server." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.universalmediaserver.com/" license=('GPL2') depends=('mplayer' 'ffmpeg' 'mencoder' 'libmediainfo' 'java-runtime') diff --git a/pcr/unittestpp/PKGBUILD b/pcr/unittestpp/PKGBUILD index 5eb15be3e..17757bfc0 100644 --- a/pcr/unittestpp/PKGBUILD +++ b/pcr/unittestpp/PKGBUILD @@ -5,7 +5,7 @@ pkgname=unittestpp pkgver=1.4 pkgrel=3 pkgdesc="A lightweight unit testing framework for C++" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://unittest-cpp.sourceforge.net/" depends=('gcc-libs') source=("http://downloads.sourceforge.net/project/unittest-cpp/UnitTest%2B%2B/$pkgver/unittest-cpp-${pkgver}.zip") diff --git a/pcr/vuurmuur/PKGBUILD b/pcr/vuurmuur/PKGBUILD index b71507abf..025e56eaf 100644 --- a/pcr/vuurmuur/PKGBUILD +++ b/pcr/vuurmuur/PKGBUILD @@ -11,7 +11,7 @@ _pkgname=Vuurmuur pkgver=0.7 pkgrel=1 pkgdesc='powerful front-end for iptables aimed at system-administrators who need a decent firewall, but dont have netfilter specific knowledge' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://www.vuurmuur.org' license=('GPL') install='vuurmuur.install' diff --git a/pcr/wallchange/PKGBUILD b/pcr/wallchange/PKGBUILD index d37bb83db..26453c0f1 100644 --- a/pcr/wallchange/PKGBUILD +++ b/pcr/wallchange/PKGBUILD @@ -8,7 +8,7 @@ pkgver=1.2 pkgrel=1 pkgdesc="A small and simple command tool which is changing the wallpaper on a switch to the next virtual desktop." url="https://sourceforge.net/projects/wallchange-slim/files/" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') install=wallchange.install license=('GPL2') depends=('eterm' 'archlinux-wallpaper') # 'eterm' can be changed in any command tool to draw the wallpaper. diff --git a/pcr/wdiff/PKGBUILD b/pcr/wdiff/PKGBUILD index 41bee9679..86989ac83 100644 --- a/pcr/wdiff/PKGBUILD +++ b/pcr/wdiff/PKGBUILD @@ -4,7 +4,7 @@ pkgname=wdiff pkgver=1.2.1 pkgrel=1 pkgdesc="A front end to diff for comparing files on a word per word basis." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://www.gnu.org/software/$pkgname/" license=('GPL3') depends=('diffutils') diff --git a/pcr/xchat-otr/PKGBUILD b/pcr/xchat-otr/PKGBUILD index 3f7ca74bd..2392e5f82 100644 --- a/pcr/xchat-otr/PKGBUILD +++ b/pcr/xchat-otr/PKGBUILD @@ -5,7 +5,7 @@ pkgname=xchat-otr pkgver=0.3 pkgrel=2 pkgdesc="Off-the-Record Messaging (OTR) plugin for the XChat IRC client" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://irssi-otr.tuxfamily.org/" license=('GPL') depends=('xchat' 'libotr3') diff --git a/pcr/xfce4-whiskermenu-plugin/PKGBUILD b/pcr/xfce4-whiskermenu-plugin/PKGBUILD index 5351360a0..74c80c87c 100644 --- a/pcr/xfce4-whiskermenu-plugin/PKGBUILD +++ b/pcr/xfce4-whiskermenu-plugin/PKGBUILD @@ -5,7 +5,7 @@ pkgname=xfce4-whiskermenu-plugin pkgver=1.4.0 pkgrel=1 pkgdesc="Alternate Xfce menu" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://gottcode.org/${pkgname}/" license=('GPL2') depends=('xfce4-panel') diff --git a/pcr/xfwm4-titleless/PKGBUILD b/pcr/xfwm4-titleless/PKGBUILD index 174f52879..aeb3f820a 100644 --- a/pcr/xfwm4-titleless/PKGBUILD +++ b/pcr/xfwm4-titleless/PKGBUILD @@ -7,7 +7,7 @@ pkgname=xfwm4-titleless pkgver=4.10.1 pkgrel=1 pkgdesc="Xfce window manager - patched with option to hide titlebar when maximized" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://bitbucket.org/thesame/xfwm4-titleless" license=('GPL2') depends=('libxfce4ui' 'libwnck' 'hicolor-icon-theme') diff --git a/pcr/xonotic-git/PKGBUILD b/pcr/xonotic-git/PKGBUILD index 1db3204ff..30b054c11 100644 --- a/pcr/xonotic-git/PKGBUILD +++ b/pcr/xonotic-git/PKGBUILD @@ -6,7 +6,7 @@ pkgname=xonotic-git pkgver=20130214 pkgrel=1 pkgdesc="A free, fast-paced crossplatform first-person shooter" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://xonotic.org" license=('GPL') depends=( diff --git a/pcr/xtables-addons/PKGBUILD b/pcr/xtables-addons/PKGBUILD index c84701e86..61ee87ca7 100644 --- a/pcr/xtables-addons/PKGBUILD +++ b/pcr/xtables-addons/PKGBUILD @@ -5,7 +5,7 @@ pkgname=xtables-addons pkgver=1.46 pkgrel=1 pkgdesc="Successor to patch-o-matic(-ng). Additional extensions for iptables, ip6tables, etc. CHAOS, TARPIT, TEE, DELUDE and other targets; condition, geoip, ipp2p and other matches. Includes ipset package." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL2') url="http://xtables-addons.sourceforge.net/" depends=('iptables>=1.4.3' 'glibc') diff --git a/pcr/yate/PKGBUILD b/pcr/yate/PKGBUILD index bb84d1a67..2be5d9849 100644 --- a/pcr/yate/PKGBUILD +++ b/pcr/yate/PKGBUILD @@ -5,7 +5,7 @@ pkgver=4.2.0 pkgrel=1 pkgdesc="next-generation telephony engine" - arch=('i686' 'x86_64') + arch=('i686' 'x86_64' 'mips64el') url="http://yate.null.ro" license=('GPL') depends=('speex' 'gsm' 'postgresql-libs' 'libmysqlclient' \ diff --git a/pcr/yoshimi/PKGBUILD b/pcr/yoshimi/PKGBUILD index 26b16308e..ddfa20278 100644 --- a/pcr/yoshimi/PKGBUILD +++ b/pcr/yoshimi/PKGBUILD @@ -5,7 +5,7 @@ pkgname=yoshimi pkgver=1.2.1 pkgrel=1 pkgdesc="ZynAddSubFX fork with improved JACK audio & MIDI IO" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://yoshimi.sourceforge.net/" license=('GPL') depends=('jack' 'fltk' 'fftw' 'mxml' 'cairo') diff --git a/pcr/zbase32/PKGBUILD b/pcr/zbase32/PKGBUILD index cbc73632c..da6e45b56 100644 --- a/pcr/zbase32/PKGBUILD +++ b/pcr/zbase32/PKGBUILD @@ -4,7 +4,7 @@ pkgname=zbase32 pkgver=1.1.5 pkgrel=1 pkgdesc="alternate base32 encoder (not RFC 3548 compliant)" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://pypi.python.org/pypi/zbase32' license=('BSD') depends=('python2') diff --git a/pcr/zeroinstall-injector/PKGBUILD b/pcr/zeroinstall-injector/PKGBUILD index ce9e072ee..e07509b45 100644 --- a/pcr/zeroinstall-injector/PKGBUILD +++ b/pcr/zeroinstall-injector/PKGBUILD @@ -8,7 +8,7 @@ _pkgname=0install pkgver=2.6.1 pkgrel=1 pkgdesc="A decentralised loosely-coupled secure installation system" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://0install.net" license=('GPL2' 'LGPL') depends=('ocaml-curl' 'ocaml-extlib' 'ocaml-lwt' diff --git a/pcr/zeroinstall-injector/PKGBUILD1 b/pcr/zeroinstall-injector/PKGBUILD1 index 564c9219f..c3584cbe7 100644 --- a/pcr/zeroinstall-injector/PKGBUILD1 +++ b/pcr/zeroinstall-injector/PKGBUILD1 @@ -9,7 +9,7 @@ _pkgname=0install pkgver=2.7 pkgrel=0 pkgdesc="A decentralised loosely-coupled secure installation system" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://0install.net" license=('GPL2' 'LGPL') depends=('gringo' 'clasp' 'opam' 'aspcud' 'ocaml' 'ocaml-curl' 'ocaml-extlib' 'ocaml-lwt' 'ocaml-biniou' diff --git a/pcr/zfec/PKGBUILD b/pcr/zfec/PKGBUILD index e2a33ae1b..a5d86e443 100644 --- a/pcr/zfec/PKGBUILD +++ b/pcr/zfec/PKGBUILD @@ -4,7 +4,7 @@ pkgname=zfec pkgver=1.4.24 pkgrel=2 pkgdesc="a fast erasure codec which can be used with the command-line, C, Python, or Haskell" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://pypi.python.org/pypi/zfec' license=('GPL' 'custom') depends=('python2' 'pyutil' 'zbase32') diff --git a/pcr/zsh-yaourt/PKGBUILD b/pcr/zsh-yaourt/PKGBUILD index 6a8e62f67..8768f3021 100644 --- a/pcr/zsh-yaourt/PKGBUILD +++ b/pcr/zsh-yaourt/PKGBUILD @@ -10,7 +10,7 @@ pkgdesc="ZSH functions to tab-complete repo package names for yaourt" url="http://bitbucket.org/Phrodo_00/zsh-yaourt" depends=(zsh) source=("https://bitbucket.org/Phrodo_00/${pkgname}/get/${_laststablerev}.tar.gz") -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') md5sums=('ac80ec05fa12e53fc8c58e5178609a6b') diff --git a/radio/idjc/PKGBUILD b/radio/idjc/PKGBUILD index 6ee8e29d7..fdd163b64 100644 --- a/radio/idjc/PKGBUILD +++ b/radio/idjc/PKGBUILD @@ -8,7 +8,7 @@ pkgrel=1 pkgdesc='Powerful yet easy-to-use source-client for individuals interested in streaming live radio shows over the Internet' url='http://idjc.sourceforge.net/' license=('GPL2') -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') #depends=('python2' 'jack' 'pygtk' 'lame' 'mutagen' 'flac' 'faad2' 'libsamplerate' 'vorbis-tools' 'libsndfile' 'ffmpeg' 'libmad' 'speex' 'dbus-python' 'imagemagick' 'twolame' 'libshout-idjc-git' 'mpg123') depends=('desktop-file-utils' 'python2' 'dbus-python' 'mutagen' 'jack' 'pygtk' 'vorbis-tools' 'libsndfile' 'libsamplerate' 'glib2' 'lame' 'libmad' 'ffmpeg' 'flac' 'speex' 'libshout-idjc') optdepends=('patchage' 'qjackctl') diff --git a/radio/jack-rack/PKGBUILD b/radio/jack-rack/PKGBUILD index 7363705b7..80c931689 100644 --- a/radio/jack-rack/PKGBUILD +++ b/radio/jack-rack/PKGBUILD @@ -7,7 +7,7 @@ pkgver=1.4.7 pkgrel=4 pkgdesc="Effects rack for JACK" url="http://jack-rack.sourceforge.net" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') depends=('jack' 'gtk2' 'libxml2' 'ladspa') optdepends=('lash: LASH support' diff --git a/social/aiccu/PKGBUILD b/social/aiccu/PKGBUILD index 5fc4cb086..55ccfb2c0 100644 --- a/social/aiccu/PKGBUILD +++ b/social/aiccu/PKGBUILD @@ -2,7 +2,7 @@ pkgname=aiccu pkgver=20070115 pkgrel=7 pkgdesc="SixXS Automatic IPv6 Connectivity Client Utility - AICCU" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.sixxs.net/tools/aiccu/" license=('BSD') depends=('gnutls' 'iproute2') diff --git a/social/batctl/PKGBUILD b/social/batctl/PKGBUILD index 23a2df1ee..002132fb0 100644 --- a/social/batctl/PKGBUILD +++ b/social/batctl/PKGBUILD @@ -4,7 +4,7 @@ pkgname=batctl pkgver=2012.3.0 pkgrel=1 pkgdesc="B.A.T.M.A.N. advanced control and management tool" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.open-mesh.net/" license=('GPL') depends=('glibc') diff --git a/social/bip/PKGBUILD b/social/bip/PKGBUILD index 6dd7ac8ba..756bd0959 100644 --- a/social/bip/PKGBUILD +++ b/social/bip/PKGBUILD @@ -4,7 +4,7 @@ pkgname=bip pkgver=0.8.8 pkgrel=1 pkgdesc="Multiuser IRC proxy that supports replaying of logged irc conversations" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://bip.milkypond.org/" license=('GPL') depends=('openssl' 'perl') diff --git a/social/bitcoin-daemon/PKGBUILD b/social/bitcoin-daemon/PKGBUILD index b00f974a3..8815eae9f 100644 --- a/social/bitcoin-daemon/PKGBUILD +++ b/social/bitcoin-daemon/PKGBUILD @@ -9,7 +9,7 @@ _pkgname=bitcoin pkgver=0.5.2 pkgrel=1 pkgdesc="Bitcoin is a peer-to-peer network based digital currency (daemon with JSON-RPC interface)." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.bitcoin.org/" depends=('expat' 'boost-libs>=1.46' 'miniupnpc>=1.6' 'openssl') makedepends=('boost' 'gcc' 'make') diff --git a/social/bitcoin/PKGBUILD b/social/bitcoin/PKGBUILD index 7efba1aef..293a7f26b 100644 --- a/social/bitcoin/PKGBUILD +++ b/social/bitcoin/PKGBUILD @@ -10,7 +10,7 @@ pkgname=$name pkgver=0.5.2 pkgrel=1 pkgdesc="Bitcoin is a peer-to-peer network based digital currency." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.bitcoin.org/" depends=('qt>=4.6' 'libpng>=1.4' 'expat' 'gcc-libs' 'boost-libs>=1.46' 'miniupnpc>=1.6' 'openssl') makedepends=('boost' 'gcc' 'make' 'automoc4') diff --git a/social/diaspora-git/PKGBUILD b/social/diaspora-git/PKGBUILD index efe8d04e2..7d48edcb2 100644 --- a/social/diaspora-git/PKGBUILD +++ b/social/diaspora-git/PKGBUILD @@ -11,7 +11,7 @@ pkgname=('diaspora-mysql-git' 'diaspora-postgresql-git') pkgver=20120105 pkgrel=2 pkgdesc="A privacy aware, personally controlled, do-it-all, open source social network" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://diasporafoundation.org/" license=('AGPL3') depends=('ruby' 'redis' 'imagemagick' 'libxslt' 'net-tools') diff --git a/social/dropbear/PKGBUILD b/social/dropbear/PKGBUILD index 8d8d61409..a2b2aad88 100644 --- a/social/dropbear/PKGBUILD +++ b/social/dropbear/PKGBUILD @@ -6,7 +6,7 @@ pkgname=dropbear pkgver=0.53.1 pkgrel=1 pkgdesc="Lightweight replacement for sshd" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://matt.ucc.asn.au/dropbear/dropbear.html" license=('custom:BSD' 'custom:PD') depends=('zlib') diff --git a/social/ffingerd/PKGBUILD b/social/ffingerd/PKGBUILD index 4e312232b..dd87137ab 100644 --- a/social/ffingerd/PKGBUILD +++ b/social/ffingerd/PKGBUILD @@ -2,7 +2,7 @@ pkgname=ffingerd pkgver=1.28 pkgrel=2 pkgdesc="Secure finger daemon" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.fefe.de/ffingerd/" license=('GPL2') depends=('glibc' 'xinetd') diff --git a/social/haveged/PKGBUILD b/social/haveged/PKGBUILD index 56e1db839..257e1f39f 100644 --- a/social/haveged/PKGBUILD +++ b/social/haveged/PKGBUILD @@ -5,7 +5,7 @@ pkgname=haveged pkgver=1.1 pkgrel=1 pkgdesc="A simple entropy daemon." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.issihosts.com/haveged" license="GPL" source=(${url}/${pkgname}-${pkgver}.tar.gz diff --git a/social/liblockfile/PKGBUILD b/social/liblockfile/PKGBUILD index d9f2fe4e6..a20883cfd 100644 --- a/social/liblockfile/PKGBUILD +++ b/social/liblockfile/PKGBUILD @@ -4,7 +4,7 @@ pkgname=liblockfile pkgver=1.08_4 pkgrel=1 pkgdesc="a library with NFS-safe locking functions" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') url="http://packages.debian.org/unstable/libs/liblockfile1" depends=('glibc') diff --git a/social/libpurple-minimal/PKGBUILD b/social/libpurple-minimal/PKGBUILD index f9c4ab63e..ec2ef573a 100644 --- a/social/libpurple-minimal/PKGBUILD +++ b/social/libpurple-minimal/PKGBUILD @@ -4,7 +4,7 @@ pkgname=libpurple-minimal pkgver=2.10.0 pkgrel=2 pkgdesc="minimal build of the pidgin IM library (no gstreamer, perl and X11 dependencies)" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://developer.pidgin.im/wiki/WhatIsLibpurple" license=('GPL') depends=('glib2' 'gnutls' 'libxml2' 'libidn' 'nss' 'avahi') diff --git a/social/lockfile-progs/PKGBUILD b/social/lockfile-progs/PKGBUILD index 9f5dc114f..c04b7eb37 100644 --- a/social/lockfile-progs/PKGBUILD +++ b/social/lockfile-progs/PKGBUILD @@ -4,7 +4,7 @@ pkgname=lockfile-progs pkgver=0.1.15 pkgrel=1 pkgdesc="programs for locking and unlocking files and mailboxes" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') license=('GPL') url="http://packages.debian.org/unstable/misc/lockfile-progs" depends=('glibc') diff --git a/social/netatalk/PKGBUILD b/social/netatalk/PKGBUILD index 99f334f7f..0c04bcbd4 100644 --- a/social/netatalk/PKGBUILD +++ b/social/netatalk/PKGBUILD @@ -9,7 +9,7 @@ pkgname=netatalk pkgver=3.0.1 pkgrel=3 pkgdesc='Open Source AFP fileserver' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://netatalk.sourceforge.net' license=('GPL') depends=('avahi>=0.6' 'libldap' 'libgcrypt>=1.2.3' 'libevent') diff --git a/social/nitroshare/PKGBUILD b/social/nitroshare/PKGBUILD index 19fca2a6c..7f4dfbaa0 100644 --- a/social/nitroshare/PKGBUILD +++ b/social/nitroshare/PKGBUILD @@ -5,7 +5,7 @@ pkgname=nitroshare pkgver=0.2 pkgrel=2 pkgdesc="Makes sending a file to another machine on the local network as easy as dragging-and-dropping" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://launchpad.net/nitroshare" license=('GPL3') depends=('qt' 'qjson' 'qxmlrpc') diff --git a/social/poco/PKGBUILD b/social/poco/PKGBUILD index d8c541d1d..6feb12715 100644 --- a/social/poco/PKGBUILD +++ b/social/poco/PKGBUILD @@ -9,7 +9,7 @@ pkgver=1.4.2p1 pkgrel=1 pkgdesc="C++ class libraries for network-centric, portable applications, complete edition" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.pocoproject.org/" license=('custom:boost') depends=('unixodbc' 'libmysqlclient' 'openssl') diff --git a/social/python-relatorio/PKGBUILD b/social/python-relatorio/PKGBUILD index 8cb09e0a0..9b6d40936 100644 --- a/social/python-relatorio/PKGBUILD +++ b/social/python-relatorio/PKGBUILD @@ -4,7 +4,7 @@ pkgname=python-relatorio pkgver=0.5.6 pkgrel=1 pkgdesc="A templating library able to output odt and pdf files" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://relatorio.openhex.org" license=('GPL') depends=('python-genshi>=0.5' 'python-lxml>=1.3.6') diff --git a/social/qxmlrpc/PKGBUILD b/social/qxmlrpc/PKGBUILD index c9c45ca68..b39b40890 100644 --- a/social/qxmlrpc/PKGBUILD +++ b/social/qxmlrpc/PKGBUILD @@ -3,7 +3,7 @@ pkgname=qxmlrpc pkgver=6 pkgrel=1 pkgdesc="a full Qt4 based implementation of XML-RPC protocol" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://code.google.com/p/qxmlrpc" license=('LGPL') depends=('qt') diff --git a/social/spectrum/PKGBUILD b/social/spectrum/PKGBUILD index d5d8f859f..c377b6e63 100644 --- a/social/spectrum/PKGBUILD +++ b/social/spectrum/PKGBUILD @@ -5,7 +5,7 @@ pkgname=spectrum pkgver=1.4.8 pkgrel=1 pkgdesc="XMPP libpurple transport/gateway." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://spectrum.im" license=('GPL') depends=('gloox' 'libpurple-minimal' 'poco' 'python2' 'libev') diff --git a/social/strongswan/PKGBUILD b/social/strongswan/PKGBUILD index 1c8cba268..2e3f36021 100644 --- a/social/strongswan/PKGBUILD +++ b/social/strongswan/PKGBUILD @@ -9,7 +9,7 @@ pkgrel=1 pkgdesc="open source IPsec implementation" url='http://www.strongswan.org' license=("GPL") -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=('curl' 'gmp' 'iproute2' 'openssl' 'sqlite3' 'networkmanager') conflicts=('openswan') options=(!libtool) diff --git a/social/tokyotyrant/PKGBUILD b/social/tokyotyrant/PKGBUILD index 317a934c8..3ac35e02f 100644 --- a/social/tokyotyrant/PKGBUILD +++ b/social/tokyotyrant/PKGBUILD @@ -5,7 +5,7 @@ pkgname=tokyotyrant pkgver=1.1.41 pkgrel=2 pkgdesc="Network interface to TokyoCabinet" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.fallabs.com" license=('LGPL') makedepends=('gcc>=3.1' 'make' 'pkgconfig') diff --git a/social/tomoyo-tools/PKGBUILD b/social/tomoyo-tools/PKGBUILD index 3ba53522d..9f583166b 100644 --- a/social/tomoyo-tools/PKGBUILD +++ b/social/tomoyo-tools/PKGBUILD @@ -6,7 +6,7 @@ _timestamp=20110211 pkgver=${_basever}.${_timestamp} pkgrel=4 pkgdesc='TOMOYO Linux 2.3.x userspace tools for Linux kernel 2.6.36 and later' -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url='http://tomoyo.sourceforge.jp' license=('GPL') depends=('ncurses') diff --git a/~lukeshu/dasm/PKGBUILD b/~lukeshu/dasm/PKGBUILD index ef8fc3a30..31ef87ad8 100644 --- a/~lukeshu/dasm/PKGBUILD +++ b/~lukeshu/dasm/PKGBUILD @@ -4,7 +4,7 @@ pkgname=dasm pkgver=2.20.11 pkgrel=3 pkgdesc="An assembler for the 6502, 68HC11, 68705, 6803, HD6303, F8 and 6507 microprocessors" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.atari2600.org/DASM" license=('GPL') source=("http://downloads.sourceforge.net/project/$pkgname-dillon/$pkgname-dillon/$pkgver/$pkgname-$pkgver.tar.gz") diff --git a/~lukeshu/dunst-lukeshu-git/PKGBUILD b/~lukeshu/dunst-lukeshu-git/PKGBUILD index c16526df9..6d7b8ac71 100644 --- a/~lukeshu/dunst-lukeshu-git/PKGBUILD +++ b/~lukeshu/dunst-lukeshu-git/PKGBUILD @@ -13,7 +13,7 @@ pkgver=20130918 _gitver='commit=67b259b98ac1895bf47c877f216307a174deeb3d' pkgrel=1 pkgdesc="A dmenu-ish notification system" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.knopwob.org/dunst/" license=(BSD3) depends=(libxinerama libxss libxdg-basedir pango) diff --git a/~lukeshu/libfreenect-git/PKGBUILD b/~lukeshu/libfreenect-git/PKGBUILD index 64d62feac..abd8cf8a9 100644 --- a/~lukeshu/libfreenect-git/PKGBUILD +++ b/~lukeshu/libfreenect-git/PKGBUILD @@ -10,7 +10,7 @@ pkgname=("libfreenect-git" 'kinect-udev-git') pkgver=20111211 pkgrel=1 pkgdesc="OpenKinect drivers and libraries for the Xbox Kinect device" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://openkinect.org" license=('GPL') makedepends=('cmake' 'git' 'python2') diff --git a/~lukeshu/make-graph/PKGBUILD b/~lukeshu/make-graph/PKGBUILD index 48fa1ce81..2024ff216 100644 --- a/~lukeshu/make-graph/PKGBUILD +++ b/~lukeshu/make-graph/PKGBUILD @@ -9,7 +9,7 @@ pkgrel=4.2 provides=("$_pkgname=$pkgver") conflicts=("$_pkgname") pkgdesc="GNU make utility to maintain groups of programs, with patch to dump a Graphviz dependency graph." -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.gnu.org/software/make" license=('GPL3') #groups=('base-devel') diff --git a/~lukeshu/openni-all/openni-git/PKGBUILD b/~lukeshu/openni-all/openni-git/PKGBUILD index 0888c49ce..6e32c4899 100644 --- a/~lukeshu/openni-all/openni-git/PKGBUILD +++ b/~lukeshu/openni-all/openni-git/PKGBUILD @@ -23,7 +23,7 @@ pkgname=( ) pkgver=20111121 pkgrel=4 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.openni.org/" license=('GPL') makedepends=('git' 'doxygen' 'graphviz') diff --git a/~lukeshu/openni-all/openni-module-sensorkinect-git/PKGBUILD b/~lukeshu/openni-all/openni-module-sensorkinect-git/PKGBUILD index 1db0a8cec..d5d2685cf 100644 --- a/~lukeshu/openni-all/openni-module-sensorkinect-git/PKGBUILD +++ b/~lukeshu/openni-all/openni-module-sensorkinect-git/PKGBUILD @@ -5,7 +5,7 @@ pkgname=openni-module-sensorkinect-git pkgver=20111211 pkgrel=2 pkgdesc="OpenNI SensorKinect harware modules for the Xbox Kinect device" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="https://github.com/avin2/SensorKinect" license=('GPL') depends=('openni-unstable' 'kinect-udev') diff --git a/~lukeshu/openni-all/openni-unstable-git/PKGBUILD b/~lukeshu/openni-all/openni-unstable-git/PKGBUILD index 623ad5c14..3bdaa3cdb 100644 --- a/~lukeshu/openni-all/openni-unstable-git/PKGBUILD +++ b/~lukeshu/openni-all/openni-unstable-git/PKGBUILD @@ -23,7 +23,7 @@ pkgname=( ) pkgver=20111121 pkgrel=4 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.openni.org/" license=('GPL') makedepends=('git' 'doxygen' 'graphviz') diff --git a/~lukeshu/openni-all/openni-unstable/PKGBUILD b/~lukeshu/openni-all/openni-unstable/PKGBUILD index ee1b20b97..bbeded512 100644 --- a/~lukeshu/openni-all/openni-unstable/PKGBUILD +++ b/~lukeshu/openni-all/openni-unstable/PKGBUILD @@ -23,7 +23,7 @@ pkgname=( ) pkgver=1.4.0.2 pkgrel=1 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.openni.org/" license=('GPL') makedepends=('git' 'doxygen' 'graphviz') diff --git a/~lukeshu/openni-all/openni/PKGBUILD b/~lukeshu/openni-all/openni/PKGBUILD index 814d65305..1713c885b 100644 --- a/~lukeshu/openni-all/openni/PKGBUILD +++ b/~lukeshu/openni-all/openni/PKGBUILD @@ -23,7 +23,7 @@ pkgname=( ) pkgver=1.3.3.6 pkgrel=4 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.openni.org/" license=('GPL') makedepends=('git' 'doxygen' 'graphviz') diff --git a/~lukeshu/thingutils-git/PKGBUILD b/~lukeshu/thingutils-git/PKGBUILD index 26972139f..44dd3b07a 100644 --- a/~lukeshu/thingutils-git/PKGBUILD +++ b/~lukeshu/thingutils-git/PKGBUILD @@ -12,7 +12,7 @@ license=('MIT') provides=($_pkgname) conflicts=($_pkgname) pkgrel=2 -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') depends=( 'php' # urldecode diff --git a/~smv/sword-svn/PKGBUILD b/~smv/sword-svn/PKGBUILD index 5308a3e3a..4fc7cbe4d 100644 --- a/~smv/sword-svn/PKGBUILD +++ b/~smv/sword-svn/PKGBUILD @@ -4,7 +4,7 @@ pkgname=sword-svn pkgver=2904 pkgrel=1 pkgdesc="Libraries for Bible programs -- svn version" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://www.crosswire.org/sword/" license=('GPL') depends=('curl' 'clucene' 'swig') diff --git a/~smv/xiphos-svn/PKGBUILD b/~smv/xiphos-svn/PKGBUILD index 81b71a3e8..c040021bd 100644 --- a/~smv/xiphos-svn/PKGBUILD +++ b/~smv/xiphos-svn/PKGBUILD @@ -4,7 +4,7 @@ pkgname=xiphos-svn pkgver=4482 pkgrel=1 pkgdesc="A Bible study tool -- svn version" -arch=('i686' 'x86_64') +arch=('i686' 'x86_64' 'mips64el') url="http://xiphos.org" license=('GPL') depends=('webkitgtk' 'libgsf' 'gconf' 'sword-svn' 'gtkhtml4') -- cgit v1.2.3 From 35cf0e4e7fc206c8b382365503b34036a8dbf255 Mon Sep 17 00:00:00 2001 From: "coadde [Márcio Alexandre Silva Delgado]" Date: Fri, 22 Aug 2014 18:01:23 -0300 Subject: kernels/linux-libre-*: Insert the Freedo logos directly instead of using a patch --- kernels/linux-libre-lts-knock/PKGBUILD | 9 +- kernels/linux-libre-lts-knock/boot-logo.patch | 23163 ------------------ .../linux-libre-lts-knock/logo_linux_clut224.ppm | 861 + kernels/linux-libre-lts-knock/logo_linux_mono.pbm | 159 + kernels/linux-libre-lts-knock/logo_linux_vga16.ppm | 18724 +++++++++++++++ kernels/linux-libre-pae/PKGBUILD | 9 +- kernels/linux-libre-pae/boot-logo.patch | 23167 ------------------- kernels/linux-libre-pae/logo_linux_clut224.ppm | 861 + kernels/linux-libre-pae/logo_linux_mono.pbm | 159 + kernels/linux-libre-pae/logo_linux_vga16.ppm | 18724 +++++++++++++++ kernels/linux-libre-rt/PKGBUILD | 9 +- kernels/linux-libre-rt/boot-logo.patch | 23167 ------------------- kernels/linux-libre-rt/logo_linux_clut224.ppm | 861 + kernels/linux-libre-rt/logo_linux_mono.pbm | 159 + kernels/linux-libre-rt/logo_linux_vga16.ppm | 18724 +++++++++++++++ kernels/linux-libre-xen/PKGBUILD | 9 +- kernels/linux-libre-xen/boot-logo.patch | 23167 ------------------- kernels/linux-libre-xen/logo_linux_clut224.ppm | 861 + kernels/linux-libre-xen/logo_linux_mono.pbm | 159 + kernels/linux-libre-xen/logo_linux_vga16.ppm | 18724 +++++++++++++++ 20 files changed, 79000 insertions(+), 92676 deletions(-) delete mode 100644 kernels/linux-libre-lts-knock/boot-logo.patch create mode 100644 kernels/linux-libre-lts-knock/logo_linux_clut224.ppm create mode 100644 kernels/linux-libre-lts-knock/logo_linux_mono.pbm create mode 100644 kernels/linux-libre-lts-knock/logo_linux_vga16.ppm delete mode 100644 kernels/linux-libre-pae/boot-logo.patch create mode 100644 kernels/linux-libre-pae/logo_linux_clut224.ppm create mode 100644 kernels/linux-libre-pae/logo_linux_mono.pbm create mode 100644 kernels/linux-libre-pae/logo_linux_vga16.ppm delete mode 100644 kernels/linux-libre-rt/boot-logo.patch create mode 100644 kernels/linux-libre-rt/logo_linux_clut224.ppm create mode 100644 kernels/linux-libre-rt/logo_linux_mono.pbm create mode 100644 kernels/linux-libre-rt/logo_linux_vga16.ppm delete mode 100644 kernels/linux-libre-xen/boot-logo.patch create mode 100644 kernels/linux-libre-xen/logo_linux_clut224.ppm create mode 100644 kernels/linux-libre-xen/logo_linux_mono.pbm create mode 100644 kernels/linux-libre-xen/logo_linux_vga16.ppm diff --git a/kernels/linux-libre-lts-knock/PKGBUILD b/kernels/linux-libre-lts-knock/PKGBUILD index ed0f4ac77..b0a2669c2 100644 --- a/kernels/linux-libre-lts-knock/PKGBUILD +++ b/kernels/linux-libre-lts-knock/PKGBUILD @@ -29,7 +29,7 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn "${pkgbase}.preset" 'Kbuild' 'Kbuild.platforms' - 'boot-logo.patch' + 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' 'criu-no-expert.patch' "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.xz") @@ -41,7 +41,9 @@ md5sums=('d562fd52580a3b6b18b6eeb5921d1d5c' '02023949955a138c44bb0c46227a6d18' '2967cecc3af9f954ccc822fd63dca6ff' '8267264d9a8966e57fdacd1fa1fc65c4' - '04b21c79df0a952c22d681dd4f4562df' + '071d4939e9ef4256e4c027ef3c864903' + '2ae9ef17f45b39ff9e6e172c0c97d263' + '96c2ae40e3b1cdd90fe7e6dba8078922' 'f3def2cefdcbb954c21d8505d23cc83c' 'd50c1ac47394e9aec637002ef3392bd1' '200668954d1cee93fb649196e3df8bde') @@ -65,7 +67,8 @@ prepare() { patch -p1 -i "${srcdir}/tcp_stealth_${_knockpatchver}.diff" # add freedo as boot logo - patch -Np1 -i "${srcdir}/boot-logo.patch" + install -m644 -t drivers/video/logo \ + "${srcdir}/logo_linux_"{clut224.ppm,vga16.ppm,mono.pbm} # add latest fixes from stable queue, if needed # http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git diff --git a/kernels/linux-libre-lts-knock/boot-logo.patch b/kernels/linux-libre-lts-knock/boot-logo.patch deleted file mode 100644 index c392928a5..000000000 --- a/kernels/linux-libre-lts-knock/boot-logo.patch +++ /dev/null @@ -1,23163 +0,0 @@ -diff -Nur linux-2.6.39.1/drivers/video/logo/logo_linux_clut224.ppm linux-2.6.39-LIBRE/drivers/video/logo/logo_linux_clut224.ppm ---- linux-2.6.39.1/drivers/video/logo/logo_linux_clut224.ppm 2011-06-02 21:34:20.000000000 -0300 -+++ linux-2.6.39-LIBRE/drivers/video/logo/logo_linux_clut224.ppm 2011-06-22 13:42:06.000000000 -0300 -@@ -1,1604 +1,861 @@ - P3 --# Standard 224-color Linux logo --80 80 -+80 78 - 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 6 6 6 10 10 10 10 10 10 -- 10 10 10 6 6 6 6 6 6 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 10 10 10 14 14 14 -- 22 22 22 26 26 26 30 30 30 34 34 34 -- 30 30 30 30 30 30 26 26 26 18 18 18 -- 14 14 14 10 10 10 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 26 26 26 42 42 42 -- 54 54 54 66 66 66 78 78 78 78 78 78 -- 78 78 78 74 74 74 66 66 66 54 54 54 -- 42 42 42 26 26 26 18 18 18 10 10 10 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 22 22 22 42 42 42 66 66 66 86 86 86 -- 66 66 66 38 38 38 38 38 38 22 22 22 -- 26 26 26 34 34 34 54 54 54 66 66 66 -- 86 86 86 70 70 70 46 46 46 26 26 26 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 26 26 26 -- 50 50 50 82 82 82 58 58 58 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 54 54 54 86 86 86 66 66 66 -- 38 38 38 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 22 22 22 50 50 50 -- 78 78 78 34 34 34 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 6 6 6 70 70 70 -- 78 78 78 46 46 46 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 42 42 42 82 82 82 -- 26 26 26 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 14 14 14 -- 46 46 46 34 34 34 6 6 6 2 2 6 -- 42 42 42 78 78 78 42 42 42 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 30 30 30 66 66 66 58 58 58 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 26 26 26 -- 86 86 86 101 101 101 46 46 46 10 10 10 -- 2 2 6 58 58 58 70 70 70 34 34 34 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 42 42 42 86 86 86 10 10 10 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 30 30 30 -- 94 94 94 94 94 94 58 58 58 26 26 26 -- 2 2 6 6 6 6 78 78 78 54 54 54 -- 22 22 22 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 62 62 62 62 62 62 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 26 26 26 -- 54 54 54 38 38 38 18 18 18 10 10 10 -- 2 2 6 2 2 6 34 34 34 82 82 82 -- 38 38 38 14 14 14 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 30 30 30 78 78 78 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 10 10 10 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 78 78 78 -- 50 50 50 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 14 14 14 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 54 54 54 -- 66 66 66 26 26 26 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 82 82 82 2 2 6 2 2 6 -- 2 2 6 6 6 6 10 10 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 14 14 14 10 10 10 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 18 18 18 -- 82 82 82 34 34 34 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 2 2 6 -- 6 6 6 6 6 6 22 22 22 34 34 34 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 34 34 34 -- 10 10 10 50 50 50 22 22 22 2 2 6 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 86 86 86 42 42 42 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 2 2 6 -- 38 38 38 116 116 116 94 94 94 22 22 22 -- 22 22 22 2 2 6 2 2 6 2 2 6 -- 14 14 14 86 86 86 138 138 138 162 162 162 --154 154 154 38 38 38 26 26 26 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 86 86 86 46 46 46 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 14 14 14 --134 134 134 198 198 198 195 195 195 116 116 116 -- 10 10 10 2 2 6 2 2 6 6 6 6 --101 98 89 187 187 187 210 210 210 218 218 218 --214 214 214 134 134 134 14 14 14 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 86 86 86 50 50 50 18 18 18 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 54 54 54 --218 218 218 195 195 195 226 226 226 246 246 246 -- 58 58 58 2 2 6 2 2 6 30 30 30 --210 210 210 253 253 253 174 174 174 123 123 123 --221 221 221 234 234 234 74 74 74 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 82 82 82 2 2 6 106 106 106 --170 170 170 26 26 26 86 86 86 226 226 226 --123 123 123 10 10 10 14 14 14 46 46 46 --231 231 231 190 190 190 6 6 6 70 70 70 -- 90 90 90 238 238 238 158 158 158 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 86 86 86 6 6 6 116 116 116 --106 106 106 6 6 6 70 70 70 149 149 149 --128 128 128 18 18 18 38 38 38 54 54 54 --221 221 221 106 106 106 2 2 6 14 14 14 -- 46 46 46 190 190 190 198 198 198 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 62 62 62 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 94 94 94 14 14 14 101 101 101 --128 128 128 2 2 6 18 18 18 116 116 116 --118 98 46 121 92 8 121 92 8 98 78 10 --162 162 162 106 106 106 2 2 6 2 2 6 -- 2 2 6 195 195 195 195 195 195 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 62 62 62 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 1 -- 0 0 1 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 90 90 90 14 14 14 58 58 58 --210 210 210 26 26 26 54 38 6 154 114 10 --226 170 11 236 186 11 225 175 15 184 144 12 --215 174 15 175 146 61 37 26 9 2 2 6 -- 70 70 70 246 246 246 138 138 138 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 66 66 66 26 26 26 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 14 14 14 10 10 10 --195 195 195 188 164 115 192 133 9 225 175 15 --239 182 13 234 190 10 232 195 16 232 200 30 --245 207 45 241 208 19 232 195 16 184 144 12 --218 194 134 211 206 186 42 42 42 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 50 50 50 74 74 74 30 30 30 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 86 86 86 14 14 14 2 2 6 --121 87 25 192 133 9 219 162 10 239 182 13 --236 186 11 232 195 16 241 208 19 244 214 54 --246 218 60 246 218 38 246 215 20 241 208 19 --241 208 19 226 184 13 121 87 25 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 50 50 50 82 82 82 34 34 34 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 82 82 82 30 30 30 61 42 6 --180 123 7 206 145 10 230 174 11 239 182 13 --234 190 10 238 202 15 241 208 19 246 218 74 --246 218 38 246 215 20 246 215 20 246 215 20 --226 184 13 215 174 15 184 144 12 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 26 26 26 94 94 94 42 42 42 14 14 14 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 50 50 50 104 69 6 --192 133 9 216 158 10 236 178 12 236 186 11 --232 195 16 241 208 19 244 214 54 245 215 43 --246 215 20 246 215 20 241 208 19 198 155 10 --200 144 11 216 158 10 156 118 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 90 90 90 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 46 46 46 22 22 22 --137 92 6 210 162 10 239 182 13 238 190 10 --238 202 15 241 208 19 246 215 20 246 215 20 --241 208 19 203 166 17 185 133 11 210 150 10 --216 158 10 210 150 10 102 78 10 2 2 6 -- 6 6 6 54 54 54 14 14 14 2 2 6 -- 2 2 6 62 62 62 74 74 74 30 30 30 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 78 78 78 50 50 50 6 6 6 -- 94 70 30 139 102 15 190 146 13 226 184 13 --232 200 30 232 195 16 215 174 15 190 146 13 --168 122 10 192 133 9 210 150 10 213 154 11 --202 150 34 182 157 106 101 98 89 2 2 6 -- 2 2 6 78 78 78 116 116 116 58 58 58 -- 2 2 6 22 22 22 90 90 90 46 46 46 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 50 50 50 6 6 6 --128 128 128 174 154 114 156 107 11 168 122 10 --198 155 10 184 144 12 197 138 11 200 144 11 --206 145 10 206 145 10 197 138 11 188 164 115 --195 195 195 198 198 198 174 174 174 14 14 14 -- 2 2 6 22 22 22 116 116 116 116 116 116 -- 22 22 22 2 2 6 74 74 74 70 70 70 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 101 101 101 26 26 26 10 10 10 --138 138 138 190 190 190 174 154 114 156 107 11 --197 138 11 200 144 11 197 138 11 192 133 9 --180 123 7 190 142 34 190 178 144 187 187 187 --202 202 202 221 221 221 214 214 214 66 66 66 -- 2 2 6 2 2 6 50 50 50 62 62 62 -- 6 6 6 2 2 6 10 10 10 90 90 90 -- 50 50 50 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 34 34 34 -- 74 74 74 74 74 74 2 2 6 6 6 6 --144 144 144 198 198 198 190 190 190 178 166 146 --154 121 60 156 107 11 156 107 11 168 124 44 --174 154 114 187 187 187 190 190 190 210 210 210 --246 246 246 253 253 253 253 253 253 182 182 182 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 62 62 62 -- 74 74 74 34 34 34 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 10 10 10 22 22 22 54 54 54 -- 94 94 94 18 18 18 2 2 6 46 46 46 --234 234 234 221 221 221 190 190 190 190 190 190 --190 190 190 187 187 187 187 187 187 190 190 190 --190 190 190 195 195 195 214 214 214 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 -- 82 82 82 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 14 14 14 -- 86 86 86 54 54 54 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 46 46 46 90 90 90 -- 46 46 46 18 18 18 6 6 6 182 182 182 --253 253 253 246 246 246 206 206 206 190 190 190 --190 190 190 190 190 190 190 190 190 190 190 190 --206 206 206 231 231 231 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --202 202 202 14 14 14 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 42 42 42 86 86 86 42 42 42 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 14 14 14 38 38 38 74 74 74 66 66 66 -- 2 2 6 6 6 6 90 90 90 250 250 250 --253 253 253 253 253 253 238 238 238 198 198 198 --190 190 190 190 190 190 195 195 195 221 221 221 --246 246 246 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 82 82 82 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 78 78 78 70 70 70 34 34 34 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 34 34 34 66 66 66 78 78 78 6 6 6 -- 2 2 6 18 18 18 218 218 218 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --226 226 226 231 231 231 246 246 246 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 178 178 178 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 18 18 18 90 90 90 62 62 62 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 26 26 26 -- 58 58 58 90 90 90 18 18 18 2 2 6 -- 2 2 6 110 110 110 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 231 231 231 18 18 18 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 94 94 94 -- 54 54 54 26 26 26 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 22 22 22 50 50 50 -- 90 90 90 26 26 26 2 2 6 2 2 6 -- 14 14 14 195 195 195 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 242 242 242 54 54 54 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 -- 86 86 86 50 50 50 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 38 38 38 82 82 82 -- 34 34 34 2 2 6 2 2 6 2 2 6 -- 42 42 42 195 195 195 246 246 246 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 242 242 242 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 246 246 246 238 238 238 --226 226 226 231 231 231 101 101 101 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 38 38 38 82 82 82 42 42 42 14 14 14 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 26 26 26 62 62 62 66 66 66 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 70 70 70 170 170 170 206 206 206 234 234 234 --246 246 246 250 250 250 250 250 250 238 238 238 --226 226 226 231 231 231 238 238 238 250 250 250 --250 250 250 250 250 250 246 246 246 231 231 231 --214 214 214 206 206 206 202 202 202 202 202 202 --198 198 198 202 202 202 182 182 182 18 18 18 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 62 62 62 66 66 66 30 30 30 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 42 42 42 82 82 82 18 18 18 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 94 94 94 182 182 182 218 218 218 242 242 242 --250 250 250 253 253 253 253 253 253 250 250 250 --234 234 234 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --238 238 238 226 226 226 210 210 210 202 202 202 --195 195 195 195 195 195 210 210 210 158 158 158 -- 6 6 6 14 14 14 50 50 50 14 14 14 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 86 86 86 46 46 46 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 54 54 54 70 70 70 2 2 6 -- 2 2 6 10 10 10 2 2 6 22 22 22 --166 166 166 231 231 231 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --231 231 231 206 206 206 198 198 198 226 226 226 -- 94 94 94 2 2 6 6 6 6 38 38 38 -- 30 30 30 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 62 62 62 66 66 66 -- 26 26 26 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 74 74 74 50 50 50 2 2 6 -- 26 26 26 26 26 26 2 2 6 106 106 106 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 246 246 246 218 218 218 202 202 202 --210 210 210 14 14 14 2 2 6 2 2 6 -- 30 30 30 22 22 22 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 86 86 86 -- 42 42 42 14 14 14 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 90 90 90 22 22 22 2 2 6 -- 42 42 42 2 2 6 18 18 18 218 218 218 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 250 250 250 221 221 221 --218 218 218 101 101 101 2 2 6 14 14 14 -- 18 18 18 38 38 38 10 10 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 78 78 78 -- 58 58 58 22 22 22 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 54 54 54 82 82 82 2 2 6 26 26 26 -- 22 22 22 2 2 6 123 123 123 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --238 238 238 198 198 198 6 6 6 38 38 38 -- 58 58 58 26 26 26 38 38 38 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 78 78 78 30 30 30 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 30 30 30 -- 74 74 74 58 58 58 2 2 6 42 42 42 -- 2 2 6 22 22 22 231 231 231 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 246 246 246 46 46 46 38 38 38 -- 42 42 42 14 14 14 38 38 38 14 14 14 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 86 86 86 46 46 46 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 42 42 42 -- 90 90 90 18 18 18 18 18 18 26 26 26 -- 2 2 6 116 116 116 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 250 250 250 238 238 238 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 94 94 94 6 6 6 -- 2 2 6 2 2 6 10 10 10 34 34 34 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 10 10 10 26 26 26 66 66 66 -- 82 82 82 2 2 6 38 38 38 6 6 6 -- 14 14 14 210 210 210 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 246 246 246 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 144 144 144 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 42 42 42 74 74 74 30 30 30 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 42 42 42 90 90 90 -- 26 26 26 6 6 6 42 42 42 2 2 6 -- 74 74 74 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 242 242 242 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 182 182 182 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 10 10 10 86 86 86 38 38 38 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 26 26 26 66 66 66 82 82 82 -- 2 2 6 22 22 22 18 18 18 2 2 6 --149 149 149 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 206 206 206 2 2 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 86 86 86 46 46 46 14 14 14 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 18 18 18 46 46 46 86 86 86 18 18 18 -- 2 2 6 34 34 34 10 10 10 6 6 6 --210 210 210 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 221 221 221 6 6 6 -- 2 2 6 2 2 6 6 6 6 30 30 30 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 82 82 82 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 26 26 26 66 66 66 62 62 62 2 2 6 -- 2 2 6 38 38 38 10 10 10 26 26 26 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 238 238 238 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 6 6 6 -- 2 2 6 2 2 6 10 10 10 30 30 30 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 58 58 58 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 78 78 78 6 6 6 2 2 6 -- 2 2 6 46 46 46 14 14 14 42 42 42 --246 246 246 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 10 10 10 -- 2 2 6 2 2 6 22 22 22 14 14 14 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 62 62 62 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 74 74 74 2 2 6 2 2 6 -- 14 14 14 70 70 70 34 34 34 62 62 62 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 14 14 14 -- 2 2 6 2 2 6 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 62 62 62 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 54 54 54 62 62 62 2 2 6 2 2 6 -- 2 2 6 30 30 30 46 46 46 70 70 70 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 226 226 226 10 10 10 -- 2 2 6 6 6 6 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 58 58 58 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 58 58 58 62 62 62 2 2 6 2 2 6 -- 2 2 6 2 2 6 30 30 30 78 78 78 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 206 206 206 2 2 6 -- 22 22 22 34 34 34 18 14 6 22 22 22 -- 26 26 26 18 18 18 6 6 6 2 2 6 -- 2 2 6 82 82 82 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 26 26 26 -- 62 62 62 106 106 106 74 54 14 185 133 11 --210 162 10 121 92 8 6 6 6 62 62 62 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 158 158 158 18 18 18 -- 14 14 14 2 2 6 2 2 6 2 2 6 -- 6 6 6 18 18 18 66 66 66 38 38 38 -- 6 6 6 94 94 94 50 50 50 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 10 10 10 10 10 10 18 18 18 38 38 38 -- 78 78 78 142 134 106 216 158 10 242 186 14 --246 190 14 246 190 14 156 118 10 10 10 10 -- 90 90 90 238 238 238 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 230 190 --238 204 91 238 204 91 181 142 44 37 26 9 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 38 38 38 46 46 46 -- 26 26 26 106 106 106 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 22 22 22 -- 30 30 30 38 38 38 50 50 50 70 70 70 --106 106 106 190 142 34 226 170 11 242 186 14 --246 190 14 246 190 14 246 190 14 154 114 10 -- 6 6 6 74 74 74 226 226 226 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 228 184 62 --241 196 14 241 208 19 232 195 16 38 30 10 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 30 30 30 26 26 26 --203 166 17 154 142 90 66 66 66 26 26 26 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 38 38 38 58 58 58 -- 78 78 78 86 86 86 101 101 101 123 123 123 --175 146 61 210 150 10 234 174 13 246 186 14 --246 190 14 246 190 14 246 190 14 238 190 10 --102 78 10 2 2 6 46 46 46 198 198 198 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 224 178 62 --242 186 14 241 196 14 210 166 10 22 18 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 6 6 6 121 92 8 --238 202 15 232 195 16 82 82 82 34 34 34 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 38 38 38 70 70 70 154 122 46 --190 142 34 200 144 11 197 138 11 197 138 11 --213 154 11 226 170 11 242 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --225 175 15 46 32 6 2 2 6 22 22 22 --158 158 158 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 242 242 242 224 178 62 --239 182 13 236 186 11 213 154 11 46 32 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 61 42 6 225 175 15 --238 190 10 236 186 11 112 100 78 42 42 42 -- 14 14 14 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 54 54 54 154 122 46 213 154 11 --226 170 11 230 174 11 226 170 11 226 170 11 --236 178 12 242 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --241 196 14 184 144 12 10 10 10 2 2 6 -- 6 6 6 116 116 116 242 242 242 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 231 231 231 198 198 198 214 170 54 --236 178 12 236 178 12 210 150 10 137 92 6 -- 18 14 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 70 47 6 200 144 11 236 178 12 --239 182 13 239 182 13 124 112 88 58 58 58 -- 22 22 22 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 70 70 70 180 133 36 226 170 11 --239 182 13 242 186 14 242 186 14 246 186 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 232 195 16 98 70 6 2 2 6 -- 2 2 6 2 2 6 66 66 66 221 221 221 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 206 206 206 198 198 198 214 166 58 --230 174 11 230 174 11 216 158 10 192 133 9 --163 110 8 116 81 8 102 78 10 116 81 8 --167 114 7 197 138 11 226 170 11 239 182 13 --242 186 14 242 186 14 162 146 94 78 78 78 -- 34 34 34 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 30 30 30 78 78 78 190 142 34 226 170 11 --239 182 13 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 241 196 14 203 166 17 22 18 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 --218 218 218 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 206 206 206 198 198 198 202 162 69 --226 170 11 236 178 12 224 166 10 210 150 10 --200 144 11 197 138 11 192 133 9 197 138 11 --210 150 10 226 170 11 242 186 14 246 190 14 --246 190 14 246 186 14 225 175 15 124 112 88 -- 62 62 62 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 174 135 50 224 166 10 --239 182 13 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 241 196 14 139 102 15 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 78 78 78 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 214 214 214 198 198 198 190 150 46 --219 162 10 236 178 12 234 174 13 224 166 10 --216 158 10 213 154 11 213 154 11 216 158 10 --226 170 11 239 182 13 246 190 14 246 190 14 --246 190 14 246 190 14 242 186 14 206 162 42 --101 101 101 58 58 58 30 30 30 14 14 14 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 74 74 74 174 135 50 216 158 10 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 241 196 14 226 184 13 -- 61 42 6 2 2 6 2 2 6 2 2 6 -- 22 22 22 238 238 238 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 226 226 226 187 187 187 180 133 36 --216 158 10 236 178 12 239 182 13 236 178 12 --230 174 11 226 170 11 226 170 11 230 174 11 --236 178 12 242 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 186 14 239 182 13 --206 162 42 106 106 106 66 66 66 34 34 34 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 26 26 26 70 70 70 163 133 67 213 154 11 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 241 196 14 --190 146 13 18 14 6 2 2 6 2 2 6 -- 46 46 46 246 246 246 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 221 221 221 86 86 86 156 107 11 --216 158 10 236 178 12 242 186 14 246 186 14 --242 186 14 239 182 13 239 182 13 242 186 14 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --242 186 14 225 175 15 142 122 72 66 66 66 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 26 26 26 70 70 70 163 133 67 210 150 10 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --232 195 16 121 92 8 34 34 34 106 106 106 --221 221 221 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --242 242 242 82 82 82 18 14 6 163 110 8 --216 158 10 236 178 12 242 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 242 186 14 163 133 67 -- 46 46 46 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 163 133 67 210 150 10 --236 178 12 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --241 196 14 215 174 15 190 178 144 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 218 218 218 -- 58 58 58 2 2 6 22 18 6 167 114 7 --216 158 10 236 178 12 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 186 14 242 186 14 190 150 46 -- 54 54 54 22 22 22 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 38 38 38 86 86 86 180 133 36 213 154 11 --236 178 12 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 232 195 16 190 146 13 214 214 214 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 170 170 170 26 26 26 -- 2 2 6 2 2 6 37 26 9 163 110 8 --219 162 10 239 182 13 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 236 178 12 224 166 10 142 122 72 -- 46 46 46 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 109 106 95 192 133 9 224 166 10 --242 186 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --242 186 14 226 184 13 210 162 10 142 110 46 --226 226 226 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --198 198 198 66 66 66 2 2 6 2 2 6 -- 2 2 6 2 2 6 50 34 6 156 107 11 --219 162 10 239 182 13 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 242 186 14 --234 174 13 213 154 11 154 122 46 66 66 66 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 58 58 58 154 121 60 206 145 10 234 174 13 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 236 178 12 210 162 10 163 110 8 -- 61 42 6 138 138 138 218 218 218 250 250 250 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 210 210 210 144 144 144 66 66 66 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 61 42 6 163 110 8 --216 158 10 236 178 12 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 239 182 13 230 174 11 216 158 10 --190 142 34 124 112 88 70 70 70 38 38 38 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 62 62 62 168 124 44 206 145 10 224 166 10 --236 178 12 239 182 13 242 186 14 242 186 14 --246 186 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 236 178 12 216 158 10 175 118 6 -- 80 54 7 2 2 6 6 6 6 30 30 30 -- 54 54 54 62 62 62 50 50 50 38 38 38 -- 14 14 14 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 80 54 7 167 114 7 --213 154 11 236 178 12 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 242 186 14 239 182 13 239 182 13 --230 174 11 210 150 10 174 135 50 124 112 88 -- 82 82 82 54 54 54 34 34 34 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 158 118 36 192 133 9 200 144 11 --216 158 10 219 162 10 224 166 10 226 170 11 --230 174 11 236 178 12 239 182 13 239 182 13 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 230 174 11 210 150 10 163 110 8 --104 69 6 10 10 10 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 91 60 6 167 114 7 --206 145 10 230 174 11 242 186 14 246 190 14 --246 190 14 246 190 14 246 186 14 242 186 14 --239 182 13 230 174 11 224 166 10 213 154 11 --180 133 36 124 112 88 86 86 86 58 58 58 -- 38 38 38 22 22 22 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 34 34 34 70 70 70 138 110 50 158 118 36 --167 114 7 180 123 7 192 133 9 197 138 11 --200 144 11 206 145 10 213 154 11 219 162 10 --224 166 10 230 174 11 239 182 13 242 186 14 --246 186 14 246 186 14 246 186 14 246 186 14 --239 182 13 216 158 10 185 133 11 152 99 6 --104 69 6 18 14 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 80 54 7 152 99 6 --192 133 9 219 162 10 236 178 12 239 182 13 --246 186 14 242 186 14 239 182 13 236 178 12 --224 166 10 206 145 10 192 133 9 154 121 60 -- 94 94 94 62 62 62 42 42 42 22 22 22 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 18 18 18 34 34 34 58 58 58 78 78 78 --101 98 89 124 112 88 142 110 46 156 107 11 --163 110 8 167 114 7 175 118 6 180 123 7 --185 133 11 197 138 11 210 150 10 219 162 10 --226 170 11 236 178 12 236 178 12 234 174 13 --219 162 10 197 138 11 163 110 8 130 83 6 -- 91 60 6 10 10 10 2 2 6 2 2 6 -- 18 18 18 38 38 38 38 38 38 38 38 38 -- 38 38 38 38 38 38 38 38 38 38 38 38 -- 38 38 38 38 38 38 26 26 26 2 2 6 -- 2 2 6 6 6 6 70 47 6 137 92 6 --175 118 6 200 144 11 219 162 10 230 174 11 --234 174 13 230 174 11 219 162 10 210 150 10 --192 133 9 163 110 8 124 112 88 82 82 82 -- 50 50 50 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 22 22 22 34 34 34 -- 42 42 42 58 58 58 74 74 74 86 86 86 --101 98 89 122 102 70 130 98 46 121 87 25 --137 92 6 152 99 6 163 110 8 180 123 7 --185 133 11 197 138 11 206 145 10 200 144 11 --180 123 7 156 107 11 130 83 6 104 69 6 -- 50 34 6 54 54 54 110 110 110 101 98 89 -- 86 86 86 82 82 82 78 78 78 78 78 78 -- 78 78 78 78 78 78 78 78 78 78 78 78 -- 78 78 78 82 82 82 86 86 86 94 94 94 --106 106 106 101 101 101 86 66 34 124 80 6 --156 107 11 180 123 7 192 133 9 200 144 11 --206 145 10 200 144 11 192 133 9 175 118 6 --139 102 15 109 106 95 70 70 70 42 42 42 -- 22 22 22 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 10 10 10 -- 14 14 14 22 22 22 30 30 30 38 38 38 -- 50 50 50 62 62 62 74 74 74 90 90 90 --101 98 89 112 100 78 121 87 25 124 80 6 --137 92 6 152 99 6 152 99 6 152 99 6 --138 86 6 124 80 6 98 70 6 86 66 30 --101 98 89 82 82 82 58 58 58 46 46 46 -- 38 38 38 34 34 34 34 34 34 34 34 34 -- 34 34 34 34 34 34 34 34 34 34 34 34 -- 34 34 34 34 34 34 38 38 38 42 42 42 -- 54 54 54 82 82 82 94 86 76 91 60 6 --134 86 6 156 107 11 167 114 7 175 118 6 --175 118 6 167 114 7 152 99 6 121 87 25 --101 98 89 62 62 62 34 34 34 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 6 6 6 10 10 10 -- 18 18 18 22 22 22 30 30 30 42 42 42 -- 50 50 50 66 66 66 86 86 86 101 98 89 --106 86 58 98 70 6 104 69 6 104 69 6 --104 69 6 91 60 6 82 62 34 90 90 90 -- 62 62 62 38 38 38 22 22 22 14 14 14 -- 10 10 10 10 10 10 10 10 10 10 10 10 -- 10 10 10 10 10 10 6 6 6 10 10 10 -- 10 10 10 10 10 10 10 10 10 14 14 14 -- 22 22 22 42 42 42 70 70 70 89 81 66 -- 80 54 7 104 69 6 124 80 6 137 92 6 --134 86 6 116 81 8 100 82 52 86 86 86 -- 58 58 58 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 10 10 10 14 14 14 -- 18 18 18 26 26 26 38 38 38 54 54 54 -- 70 70 70 86 86 86 94 86 76 89 81 66 -- 89 81 66 86 86 86 74 74 74 50 50 50 -- 30 30 30 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 34 34 34 58 58 58 -- 82 82 82 89 81 66 89 81 66 89 81 66 -- 94 86 66 94 86 76 74 74 74 50 50 50 -- 26 26 26 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 6 6 6 14 14 14 18 18 18 -- 30 30 30 38 38 38 46 46 46 54 54 54 -- 50 50 50 42 42 42 30 30 30 18 18 18 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 26 26 26 -- 38 38 38 50 50 50 58 58 58 58 58 58 -- 54 54 54 42 42 42 30 30 30 18 18 18 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 6 6 6 10 10 10 14 14 14 18 18 18 -- 18 18 18 14 14 14 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 14 14 14 18 18 18 22 22 22 22 22 22 -- 18 18 18 14 14 14 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 23 30 36 44 54 65 57 72 88 44 54 65 6 12 15 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 31 41 52 -+103 134 161 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 -+82 108 129 8 14 16 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 17 24 30 126 162 196 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 161 203 243 92 119 140 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 154 195 235 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 138 174 208 21 27 33 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 70 96 117 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 49 59 70 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 3 6 52 62 74 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 -+82 108 129 149 191 231 170 212 252 170 212 252 170 212 252 129 165 199 82 108 129 149 191 231 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 37 48 59 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 21 13 4 31 23 12 0 2 0 0 2 0 105 75 32 155 111 43 23 15 7 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 6 9 3 10 13 146 188 228 170 212 252 170 212 252 170 212 252 157 198 239 0 6 9 -+0 2 0 52 62 74 170 212 252 170 212 252 154 195 235 0 6 9 0 2 0 55 66 77 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 151 193 233 17 24 30 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+10 12 8 23 15 7 139 99 44 206 148 61 67 49 21 0 2 0 125 92 35 206 148 61 -+15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 96 127 154 170 212 252 170 212 252 170 212 252 170 212 252 92 119 140 21 22 20 -+10 12 8 53 68 84 170 212 252 170 212 252 92 119 140 10 12 8 7 10 5 53 68 84 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 -+0 6 9 0 3 6 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 22 20 -+62 64 61 38 40 37 0 2 0 34 26 8 212 153 66 64 46 18 0 2 0 170 124 49 -+180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 65 87 102 115 117 114 -+43 44 42 88 115 136 170 212 252 170 212 252 68 83 99 108 110 107 60 62 59 88 115 136 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+80 98 121 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 10 12 8 56 58 55 95 96 94 178 180 177 215 217 214 198 200 197 -+158 160 156 138 140 137 82 83 81 0 2 0 64 46 18 228 167 73 23 15 7 41 31 10 -+250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 -+0 2 0 126 162 196 170 212 252 170 212 252 57 72 88 0 2 0 0 2 0 126 162 196 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+157 198 239 8 14 16 0 6 9 0 2 0 45 47 44 195 197 194 192 194 191 38 40 37 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 192 194 191 234 236 233 176 178 175 118 120 117 143 145 142 176 178 175 -+215 217 214 234 236 233 234 236 233 104 106 103 0 2 0 142 101 40 134 100 43 0 2 0 -+164 119 51 170 124 49 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 115 152 185 8 14 16 -+49 59 70 166 207 248 170 212 252 170 212 252 119 150 178 8 14 16 55 66 77 166 207 248 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 92 119 140 0 2 0 0 2 0 200 202 199 254 255 252 254 255 252 244 246 243 -+40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 38 40 37 234 236 233 234 236 233 234 236 233 135 137 134 215 217 214 171 173 170 -+141 142 139 138 140 137 138 140 137 135 137 134 31 32 30 3 6 2 212 153 66 15 9 7 -+78 58 25 248 178 79 41 31 10 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 3 6 21 27 33 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 154 195 235 0 6 9 82 83 81 254 255 252 254 255 252 254 255 252 254 255 252 -+188 190 187 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 62 64 61 234 236 233 234 236 233 234 236 233 198 200 197 131 133 130 198 200 197 -+232 234 231 234 236 233 234 236 233 234 236 233 152 154 151 0 2 0 147 105 44 67 49 21 -+23 15 7 250 179 73 158 114 46 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 61 76 92 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 154 195 235 103 134 161 80 98 121 -+52 62 74 18 22 24 0 2 0 3 10 13 38 45 51 80 98 121 151 193 233 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 109 141 168 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 -+226 228 225 65 66 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 43 44 42 234 236 233 234 236 233 234 236 233 234 236 233 131 133 130 192 194 191 -+152 154 151 141 142 139 141 142 139 141 142 139 158 160 156 3 6 2 82 62 28 129 95 39 -+0 2 0 206 148 61 248 178 79 21 13 4 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 96 115 138 -+170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 18 22 24 0 2 0 0 2 0 -+34 26 8 75 55 22 114 83 33 95 68 30 55 39 17 7 0 0 0 6 9 84 103 125 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 84 103 125 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 171 173 170 -+0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 18 20 17 234 236 233 234 236 233 234 236 233 234 236 233 138 140 137 178 180 177 -+226 228 225 234 236 233 234 236 233 234 236 233 231 233 230 45 47 44 23 15 7 190 136 56 -+0 2 0 147 105 44 250 179 73 64 46 18 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 126 162 196 0 2 0 26 20 13 190 136 56 245 175 76 -+250 179 73 161 117 49 164 119 51 245 175 76 250 179 73 206 148 61 75 55 22 0 2 0 -+126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 68 83 99 0 2 0 252 254 250 254 255 252 254 255 252 254 255 252 71 73 70 -+8 14 16 88 115 136 17 24 30 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 232 234 231 234 236 233 234 236 233 234 236 233 215 217 214 148 150 147 -+183 185 181 141 142 139 135 137 134 135 137 134 141 142 139 87 89 86 0 2 0 202 145 58 -+3 6 2 88 66 26 250 179 73 109 79 35 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 157 198 239 -+170 212 252 170 212 252 166 207 248 26 33 39 26 20 13 224 163 69 250 179 73 250 179 73 -+250 179 73 197 142 62 202 145 58 250 179 73 250 179 73 250 179 73 234 172 70 21 13 4 -+38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 52 62 74 21 22 20 254 255 252 254 255 252 254 255 252 254 255 252 21 22 20 -+49 59 70 170 212 252 166 207 248 91 123 149 8 14 16 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 215 217 214 234 236 233 234 236 233 234 236 233 234 236 233 123 125 122 -+188 190 187 229 231 228 234 236 233 234 236 233 222 224 221 118 120 117 0 2 0 168 123 54 -+34 26 8 67 49 21 250 179 73 134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 34 41 47 170 212 252 -+170 212 252 170 212 252 85 112 133 0 2 0 164 119 51 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 129 95 39 -+0 2 0 138 174 208 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 34 44 55 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 24 22 25 -+52 62 74 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 178 180 177 234 236 233 234 236 233 234 236 233 234 236 233 141 142 139 -+198 200 197 148 150 147 135 137 134 135 137 134 148 150 147 123 125 122 0 2 0 190 136 56 -+21 13 4 78 58 25 250 179 73 129 95 39 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 82 108 129 170 212 252 -+170 212 252 170 212 252 23 30 36 58 42 19 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 147 105 44 -+0 2 0 139 181 221 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 34 41 47 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 -+25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 6 9 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 91 93 90 234 236 233 234 236 233 234 236 233 234 236 233 126 127 125 -+169 171 168 222 224 221 234 236 233 229 231 228 178 180 177 71 73 70 0 2 0 212 153 66 -+0 2 0 95 68 30 250 179 73 119 87 37 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 138 174 208 170 212 252 -+170 212 252 154 195 235 0 2 0 125 92 35 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 119 87 37 -+0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 57 72 88 7 10 5 252 254 250 254 255 252 254 255 252 254 255 252 95 96 94 -+0 6 9 166 207 248 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 8 14 16 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 7 10 5 222 224 221 234 236 233 234 236 233 234 236 233 141 142 139 -+183 185 181 138 140 137 131 133 130 141 142 139 192 194 191 102 104 101 0 2 0 224 163 69 -+0 2 0 105 75 32 250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 27 33 170 212 252 170 212 252 -+170 212 252 115 152 185 0 2 0 180 132 57 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 10 12 8 -+38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 82 108 129 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 158 160 156 -+0 2 0 92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 141 142 139 234 236 233 234 236 233 234 236 233 131 133 130 -+185 187 183 231 233 230 222 224 221 158 160 156 138 140 137 48 50 48 3 6 2 250 179 73 -+134 100 43 206 148 61 218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 75 94 116 170 212 252 170 212 252 -+170 212 252 92 119 140 0 2 0 224 163 69 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 87 61 23 7 0 0 -+134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 109 141 168 0 2 0 178 180 177 254 255 252 254 255 252 254 255 252 252 254 250 -+39 43 45 10 16 18 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+88 115 136 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 45 47 44 234 236 233 234 236 233 234 236 233 131 133 130 -+148 150 147 138 140 137 148 150 147 210 212 209 152 154 151 26 27 25 29 21 8 250 179 73 -+250 179 73 234 172 70 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 170 212 252 -+170 212 252 103 134 161 0 2 0 202 145 58 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 238 175 73 75 55 22 0 2 0 75 102 123 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 140 177 211 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 -+183 185 181 0 2 0 75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 57 72 88 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 162 164 161 234 236 233 234 236 233 135 137 134 -+226 228 225 198 200 197 104 106 103 15 17 14 0 2 0 15 9 7 147 105 44 250 179 73 -+248 178 79 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 21 27 33 170 212 252 170 212 252 170 212 252 -+170 212 252 122 159 192 0 2 0 175 129 54 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 202 145 58 55 39 17 0 2 0 82 108 129 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 12 17 20 60 62 59 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 69 71 68 0 6 9 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 159 201 241 26 33 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 162 164 161 215 217 214 95 96 94 -+56 58 55 0 2 0 0 2 0 0 2 0 61 44 16 238 175 73 250 179 73 250 179 73 -+218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 88 115 136 170 212 252 170 212 252 170 212 252 -+170 212 252 143 185 225 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 212 153 66 95 68 30 0 2 0 8 14 16 103 134 161 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 68 83 99 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 -+254 255 252 210 212 209 0 6 9 53 68 84 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 126 162 196 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 23 15 7 250 179 73 250 179 73 250 179 73 -+250 179 73 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 166 207 248 0 2 0 52 36 13 158 114 46 180 132 57 161 117 49 119 87 37 -+41 31 10 0 2 0 0 2 0 72 87 103 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 115 152 185 0 2 0 152 154 151 254 255 252 238 241 237 85 87 84 -+229 231 228 254 255 252 99 101 98 0 2 0 126 162 196 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 -+250 179 73 105 75 32 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 32 39 45 0 2 0 57 72 88 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 85 112 133 12 17 20 0 2 0 0 2 0 0 2 0 0 2 0 -+34 41 47 92 110 133 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 166 207 248 6 12 15 71 73 70 254 255 252 229 231 228 0 2 0 -+141 142 139 254 255 252 231 233 230 10 12 8 34 44 55 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 154 195 235 6 12 15 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 125 92 35 250 179 73 250 179 73 -+250 179 73 180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 68 83 99 -+129 165 199 85 112 133 0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 126 162 196 119 156 189 134 170 204 149 191 231 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 57 72 88 3 6 2 242 244 240 254 255 252 35 37 34 -+78 80 77 254 255 252 254 255 252 128 130 127 0 2 0 105 137 164 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 91 123 149 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 55 39 17 250 179 73 250 179 73 -+250 179 73 245 175 76 7 10 5 0 2 0 44 54 65 103 134 161 161 203 243 170 212 252 -+170 212 252 21 27 33 25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 61 76 92 0 2 0 242 244 240 254 255 252 102 104 101 -+10 12 8 231 233 230 254 255 252 244 246 243 26 27 25 21 27 33 159 201 241 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 32 39 45 0 6 9 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 218 158 64 250 179 73 -+250 179 73 250 179 73 75 55 22 0 2 0 161 203 243 170 212 252 170 212 252 170 212 252 -+115 147 174 0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 159 201 241 146 188 228 -+140 177 211 134 170 204 146 188 228 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 17 24 30 62 64 61 254 255 252 254 255 252 215 217 214 -+0 2 0 102 104 101 254 255 252 254 255 252 166 168 165 0 2 0 72 87 103 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 75 32 250 179 73 -+250 179 73 250 179 73 150 108 46 0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 -+49 59 70 3 10 13 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 166 207 248 109 141 168 65 87 102 28 35 41 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 28 35 41 70 96 117 138 174 208 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 0 2 0 102 104 101 254 255 252 254 255 252 254 255 252 -+102 104 101 0 2 0 192 194 191 254 255 252 254 255 252 78 80 77 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 34 44 55 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 61 76 92 154 195 235 0 6 9 29 21 8 250 179 73 -+250 179 73 250 179 73 224 163 69 0 2 0 68 83 99 170 212 252 170 212 252 143 179 213 -+0 2 0 72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+161 203 243 96 115 138 17 24 30 0 2 0 0 2 0 45 47 44 102 104 101 123 125 122 -+138 140 137 143 145 142 115 117 114 82 83 81 43 44 42 0 2 0 0 2 0 32 39 45 -+126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 0 2 0 85 87 84 254 255 252 254 255 252 254 255 252 -+242 244 240 27 29 27 35 37 34 254 255 252 254 255 252 231 233 230 10 12 8 21 27 33 -+159 201 241 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 6 9 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 44 54 65 170 212 252 170 212 252 34 44 55 0 2 0 82 62 28 -+109 79 35 224 163 69 250 179 73 52 36 13 15 20 22 170 212 252 170 212 252 75 89 106 -+0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 -+25 32 38 0 2 0 40 41 39 155 157 153 238 241 237 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 115 117 114 18 20 17 -+0 2 0 68 83 99 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 52 62 74 7 10 5 234 236 233 254 255 252 254 255 252 -+254 255 252 195 197 194 102 104 101 254 255 252 254 255 252 254 255 252 162 164 161 0 2 0 -+72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 119 156 189 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 115 147 174 170 212 252 91 123 149 0 2 0 0 2 0 6 12 15 -+0 2 0 15 9 7 197 142 62 125 92 35 0 2 0 115 152 185 113 145 172 3 6 2 -+41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 113 145 172 0 6 9 -+10 12 8 155 157 153 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 232 234 231 -+87 89 86 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 115 152 185 0 2 0 138 140 137 254 255 252 254 255 252 -+254 255 252 254 255 252 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 65 66 64 -+0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 154 195 235 170 212 252 143 179 213 88 115 136 149 191 231 170 212 252 -+126 162 196 3 6 2 64 46 18 202 145 58 0 2 0 0 2 0 0 2 0 0 2 0 -+92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 143 179 213 3 10 13 27 29 27 -+215 217 214 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 155 157 153 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 23 30 36 27 29 27 249 251 248 254 255 252 -+254 255 252 188 190 187 7 10 5 226 228 225 254 255 252 254 255 252 254 255 252 231 233 230 -+7 10 5 21 27 33 159 201 241 170 212 252 103 134 161 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 55 66 77 11 4 3 250 179 73 24 17 10 0 2 0 0 2 0 0 2 0 -+143 185 225 170 212 252 170 212 252 170 212 252 159 201 241 28 35 41 7 10 5 200 202 199 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 155 157 153 0 2 0 55 66 77 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 96 127 154 0 2 0 158 160 156 254 255 252 -+254 255 252 192 194 191 0 2 0 176 178 175 254 255 252 254 255 252 254 255 252 254 255 252 -+141 142 139 0 2 0 72 87 103 129 165 199 0 6 9 0 6 9 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 12 17 20 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 -+138 174 208 17 24 30 29 21 8 250 179 73 101 72 28 0 2 0 0 2 0 32 39 45 -+170 212 252 170 212 252 170 212 252 170 212 252 57 72 88 0 2 0 152 154 151 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 108 110 107 0 2 0 115 152 185 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 18 22 24 40 41 39 254 255 252 -+254 255 252 232 234 231 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 10 12 8 0 2 0 8 14 16 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 41 51 62 61 76 92 34 44 55 3 10 13 -+0 2 0 11 4 3 164 119 51 250 179 73 175 129 54 0 2 0 0 2 0 82 108 129 -+170 212 252 170 212 252 170 212 252 98 129 156 0 2 0 95 96 94 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 238 241 237 18 20 17 25 32 38 166 207 248 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 85 112 133 0 2 0 188 190 187 -+254 255 252 254 255 252 198 200 197 242 244 240 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 120 122 119 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 6 9 7 0 0 -+31 23 12 202 145 58 250 179 73 250 179 73 238 175 73 0 2 0 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 28 35 41 31 32 30 244 246 243 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 85 112 133 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 0 2 0 148 150 147 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 222 224 221 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+7 0 0 234 172 70 250 179 73 250 179 73 250 179 73 34 26 8 0 2 0 149 191 231 -+170 212 252 170 212 252 129 165 199 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 48 50 48 3 10 13 146 188 228 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 0 2 0 118 120 117 -+254 255 252 254 255 252 254 255 252 169 171 168 231 233 230 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 170 124 49 250 179 73 250 179 73 250 179 73 48 33 15 6 12 15 170 212 252 -+170 212 252 170 212 252 65 87 102 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 195 197 194 0 2 0 84 103 125 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 3 10 13 85 87 84 -+254 255 252 254 255 252 234 236 233 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 99 101 98 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 95 68 30 250 179 73 250 179 73 250 179 73 34 26 8 34 44 55 170 212 252 -+170 212 252 163 205 246 8 14 16 62 64 61 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 35 37 34 34 44 55 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 26 33 39 60 62 59 -+254 255 252 254 255 252 238 241 237 0 2 0 108 110 107 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 158 160 156 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 23 15 7 248 178 79 250 179 73 245 175 76 0 2 0 63 78 94 170 212 252 -+170 212 252 109 141 168 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 104 106 103 0 2 0 -+154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 69 71 68 -+254 255 252 254 255 252 244 246 243 0 2 0 91 93 90 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 215 217 214 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 197 142 62 250 179 73 212 153 66 0 2 0 92 110 133 170 212 252 -+170 212 252 80 98 121 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 176 178 175 0 2 0 -+105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 8 14 16 87 89 86 -+254 255 252 254 255 252 254 255 252 40 41 39 21 22 20 252 254 250 254 255 252 254 255 252 -+254 255 252 254 255 252 252 254 250 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 125 92 35 250 179 73 170 124 49 0 2 0 113 145 172 170 212 252 -+170 212 252 53 68 84 15 17 14 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 242 244 240 0 2 0 -+63 78 94 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 0 2 0 104 106 103 -+254 255 252 254 255 252 254 255 252 123 125 122 0 2 0 166 168 165 254 255 252 254 255 252 -+254 255 252 254 255 252 234 236 233 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 7 0 0 52 36 13 250 179 73 129 95 39 0 2 0 143 179 213 170 212 252 -+170 212 252 32 39 45 48 50 48 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 60 62 59 -+18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 2 0 102 104 101 -+254 255 252 254 255 252 254 255 252 226 228 225 15 17 14 10 12 8 215 217 214 254 255 252 -+254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 88 66 26 29 21 8 0 2 0 166 207 248 170 212 252 -+170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 123 125 122 -+0 2 0 149 191 231 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 56 58 55 -+254 255 252 254 255 252 254 255 252 254 255 252 178 180 177 0 2 0 38 40 37 238 241 237 -+254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 7 0 0 0 2 0 161 203 243 170 212 252 -+149 191 231 0 2 0 123 125 122 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 141 142 139 -+0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 -+210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 120 122 119 0 2 0 21 22 20 -+143 145 142 244 246 243 219 221 218 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 149 191 231 170 212 252 -+129 165 199 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 155 157 153 -+0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 0 6 9 -+69 71 68 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 71 73 70 0 2 0 -+0 2 0 0 2 0 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 170 212 252 -+129 165 199 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 169 171 168 -+0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 75 94 116 -+0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 134 170 204 170 212 252 -+134 170 204 0 2 0 152 154 151 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 -+0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 -+44 54 65 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 35 37 34 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 -+138 174 208 0 2 0 143 145 142 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 198 200 197 -+0 2 0 103 134 161 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+157 198 239 28 35 41 0 2 0 188 190 187 254 255 252 252 254 250 3 6 2 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 115 152 185 170 212 252 -+143 179 213 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 -+0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 146 188 228 0 6 9 26 27 25 242 244 240 176 178 175 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 170 212 252 -+143 185 225 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 185 187 183 -+0 2 0 105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 163 205 246 0 2 0 0 2 0 102 104 101 60 62 59 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 80 98 121 170 212 252 -+149 191 231 0 2 0 118 120 117 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 143 145 142 -+0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 143 179 213 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 170 212 252 -+170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 108 110 107 -+0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 115 152 185 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 170 212 252 -+170 212 252 34 44 55 43 44 42 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 -+15 20 22 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 75 94 116 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 -+170 212 252 63 78 94 3 6 2 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 31 32 30 -+41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+161 203 243 6 12 15 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 -+170 212 252 88 115 136 0 2 0 210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 249 251 248 0 2 0 -+68 83 99 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+96 127 154 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 61 76 92 -+170 212 252 119 150 178 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 0 2 0 -+91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+28 35 41 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 -+146 188 228 143 185 225 0 2 0 126 127 125 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 85 87 84 0 6 9 -+154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 98 129 156 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+72 90 112 170 212 252 18 22 24 56 58 55 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 238 241 237 7 10 5 55 66 77 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 0 6 9 -+0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 122 159 192 72 87 103 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 113 145 172 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 139 181 221 8 14 16 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 18 22 24 109 141 168 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 12 17 20 166 207 248 -+170 212 252 170 212 252 170 212 252 170 212 252 146 188 228 23 30 36 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 101 72 28 202 145 58 -+180 132 57 0 2 0 38 45 51 3 10 13 69 71 68 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 200 202 199 0 2 0 75 89 106 170 212 252 -+170 212 252 170 212 252 170 212 252 109 141 168 8 14 16 0 2 0 21 13 4 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 7 0 0 0 2 0 101 72 28 218 158 64 250 179 73 250 179 73 -+250 179 73 139 99 44 0 2 0 8 14 16 0 2 0 238 241 237 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 244 246 243 38 40 37 3 10 13 139 181 221 170 212 252 -+170 212 252 161 203 243 66 80 97 0 2 0 31 23 12 191 142 60 248 183 74 180 132 57 -+44 34 15 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 23 15 7 190 136 56 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 150 108 46 0 2 0 0 2 0 82 83 81 222 224 221 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 102 104 101 0 2 0 98 129 156 170 212 252 163 205 246 -+98 129 156 23 30 36 0 2 0 82 62 28 234 172 70 248 183 74 248 183 74 248 183 74 -+248 183 74 158 114 46 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 64 46 18 109 79 35 150 108 46 224 163 69 250 179 73 -+250 179 73 250 179 73 250 179 73 158 114 46 0 2 0 0 2 0 3 6 2 115 117 114 -+234 236 233 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 176 178 175 0 2 0 57 72 88 146 188 228 80 98 121 8 14 16 -+0 2 0 24 17 10 158 114 46 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 242 178 77 58 42 19 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 0 2 0 67 49 21 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 95 68 30 0 2 0 0 2 0 -+0 2 0 52 54 51 108 110 107 162 164 161 219 221 218 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 -+219 221 218 178 180 177 18 20 17 6 12 15 26 33 39 0 2 0 0 2 0 52 36 13 -+164 119 51 242 178 77 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 242 178 77 -+187 138 56 175 129 54 158 114 46 82 62 28 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 78 58 25 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 234 172 70 142 101 40 -+44 34 15 10 12 8 0 2 0 0 2 0 0 2 0 18 20 17 60 62 59 71 73 70 -+82 83 81 95 96 94 104 106 103 118 120 117 115 117 114 78 80 77 40 41 39 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 44 34 15 105 75 32 191 142 60 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 105 75 32 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 187 138 56 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 142 101 40 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 206 148 61 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 161 117 49 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 228 167 73 250 179 73 -+238 175 73 190 136 56 158 114 46 234 172 70 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 147 105 44 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 67 49 21 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 -+31 23 12 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 21 13 4 -+0 2 0 0 2 0 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 -+134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 155 111 43 248 183 74 248 183 74 -+248 183 74 248 183 74 224 163 69 55 39 17 64 46 18 164 119 51 242 178 77 248 183 74 -+75 55 22 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 228 167 73 88 66 26 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 168 123 54 248 183 74 -+248 183 74 248 183 74 158 114 46 0 2 0 7 0 0 0 2 0 10 12 8 44 34 15 -+15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 29 21 8 250 179 73 250 179 73 158 114 46 15 14 3 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 175 129 54 -+248 183 74 248 183 74 114 83 33 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 29 21 8 147 105 44 58 42 19 0 2 0 7 0 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+105 75 32 218 158 64 23 15 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -diff -Nur linux-2.6.39.1/drivers/video/logo/logo_linux_mono.pbm linux-2.6.39-LIBRE/drivers/video/logo/logo_linux_mono.pbm ---- linux-2.6.39.1/drivers/video/logo/logo_linux_mono.pbm 2011-06-02 21:34:20.000000000 -0300 -+++ linux-2.6.39-LIBRE/drivers/video/logo/logo_linux_mono.pbm 2011-06-22 13:42:06.000000000 -0300 -@@ -1,203 +1,159 @@ --P1 --# Standard black and white Linux logo --80 80 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 --1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 1 1 --1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 --1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 --0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 --1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 --0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 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 1 1 1 1 1 1 1 1 1 1 1 0 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 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 1 1 0 1 1 1 1 1 1 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 --1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 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 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 0 0 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 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 1 1 1 0 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 0 0 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 1 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 --1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 --1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 --1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 --1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 --1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -+P2 -+80 78 -+255 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 255 255 255 255 255 0 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 -+255 0 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 -+255 255 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 -+255 255 0 0 0 0 0 0 0 0 -+0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 -+255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 255 255 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 0 255 255 0 0 255 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 255 255 255 0 0 255 -+255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 255 -+255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 0 -+255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 -+0 255 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 -+0 255 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 -+0 0 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 255 255 255 -+255 0 0 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 255 0 0 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 -+255 0 0 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 0 0 255 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 255 255 255 -+255 255 0 0 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 255 255 255 255 0 255 255 255 -+255 255 255 0 0 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 0 255 255 255 -+255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 0 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 0 -+0 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 255 -+0 0 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -diff -Nur linux-2.6.39.1/drivers/video/logo/logo_linux_vga16.ppm linux-2.6.39-LIBRE/drivers/video/logo/logo_linux_vga16.ppm ---- linux-2.6.39.1/drivers/video/logo/logo_linux_vga16.ppm 2011-06-02 21:34:20.000000000 -0300 -+++ linux-2.6.39-LIBRE/drivers/video/logo/logo_linux_vga16.ppm 2011-06-22 13:42:06.000000000 -0300 -@@ -1,1604 +1,18724 @@ - P3 --# Standard 16-color Linux logo --80 80 -+# CREATOR: GIMP PNM Filter Version 1.1 -+80 78 - 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 170 170 170 85 85 85 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 170 170 170 170 170 --170 170 170 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 170 170 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 170 170 170 255 255 255 255 255 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 255 255 255 170 170 170 170 170 170 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 0 0 0 0 0 0 255 255 255 -- 85 85 85 0 0 0 0 0 0 0 0 0 --255 255 255 170 170 170 0 0 0 85 85 85 --170 170 170 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 170 170 170 -- 85 85 85 0 0 0 0 0 0 0 0 0 --255 255 255 85 85 85 0 0 0 0 0 0 -- 85 85 85 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 0 0 0 0 0 0 170 170 170 -- 85 85 85 85 85 85 85 85 85 85 85 85 --255 255 255 85 85 85 0 0 0 0 0 0 -- 85 85 85 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 170 170 170 170 170 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 170 170 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 170 85 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 85 85 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 85 85 85 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 170 170 170 170 170 170 170 170 0 0 0 -- 0 0 0 0 0 0 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 170 170 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 170 170 170 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 170 170 170 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 170 170 170 --170 170 170 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 170 170 170 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 170 170 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 170 170 170 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 85 85 85 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 0 0 0 85 85 85 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 85 85 85 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 -- 0 0 0 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 85 85 85 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 85 85 85 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 170 170 170 -- 85 85 85 0 0 0 0 0 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 85 85 85 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 170 85 0 170 85 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 85 85 85 85 85 85 170 85 0 --170 85 0 170 85 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 diff --git a/kernels/linux-libre-lts-knock/logo_linux_clut224.ppm b/kernels/linux-libre-lts-knock/logo_linux_clut224.ppm new file mode 100644 index 000000000..c9d837347 --- /dev/null +++ b/kernels/linux-libre-lts-knock/logo_linux_clut224.ppm @@ -0,0 +1,861 @@ +P3 +80 78 +255 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 23 30 36 44 54 65 57 72 88 44 54 65 6 12 15 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 31 41 52 +103 134 161 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 +82 108 129 8 14 16 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 17 24 30 126 162 196 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 161 203 243 92 119 140 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 154 195 235 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 138 174 208 21 27 33 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 70 96 117 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 49 59 70 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 3 6 52 62 74 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 +82 108 129 149 191 231 170 212 252 170 212 252 170 212 252 129 165 199 82 108 129 149 191 231 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 37 48 59 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 21 13 4 31 23 12 0 2 0 0 2 0 105 75 32 155 111 43 23 15 7 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 6 9 3 10 13 146 188 228 170 212 252 170 212 252 170 212 252 157 198 239 0 6 9 +0 2 0 52 62 74 170 212 252 170 212 252 154 195 235 0 6 9 0 2 0 55 66 77 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 151 193 233 17 24 30 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +10 12 8 23 15 7 139 99 44 206 148 61 67 49 21 0 2 0 125 92 35 206 148 61 +15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 96 127 154 170 212 252 170 212 252 170 212 252 170 212 252 92 119 140 21 22 20 +10 12 8 53 68 84 170 212 252 170 212 252 92 119 140 10 12 8 7 10 5 53 68 84 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 +0 6 9 0 3 6 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 22 20 +62 64 61 38 40 37 0 2 0 34 26 8 212 153 66 64 46 18 0 2 0 170 124 49 +180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 65 87 102 115 117 114 +43 44 42 88 115 136 170 212 252 170 212 252 68 83 99 108 110 107 60 62 59 88 115 136 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +80 98 121 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 10 12 8 56 58 55 95 96 94 178 180 177 215 217 214 198 200 197 +158 160 156 138 140 137 82 83 81 0 2 0 64 46 18 228 167 73 23 15 7 41 31 10 +250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 +0 2 0 126 162 196 170 212 252 170 212 252 57 72 88 0 2 0 0 2 0 126 162 196 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +157 198 239 8 14 16 0 6 9 0 2 0 45 47 44 195 197 194 192 194 191 38 40 37 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 192 194 191 234 236 233 176 178 175 118 120 117 143 145 142 176 178 175 +215 217 214 234 236 233 234 236 233 104 106 103 0 2 0 142 101 40 134 100 43 0 2 0 +164 119 51 170 124 49 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 115 152 185 8 14 16 +49 59 70 166 207 248 170 212 252 170 212 252 119 150 178 8 14 16 55 66 77 166 207 248 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 92 119 140 0 2 0 0 2 0 200 202 199 254 255 252 254 255 252 244 246 243 +40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 38 40 37 234 236 233 234 236 233 234 236 233 135 137 134 215 217 214 171 173 170 +141 142 139 138 140 137 138 140 137 135 137 134 31 32 30 3 6 2 212 153 66 15 9 7 +78 58 25 248 178 79 41 31 10 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 3 6 21 27 33 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 154 195 235 0 6 9 82 83 81 254 255 252 254 255 252 254 255 252 254 255 252 +188 190 187 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 62 64 61 234 236 233 234 236 233 234 236 233 198 200 197 131 133 130 198 200 197 +232 234 231 234 236 233 234 236 233 234 236 233 152 154 151 0 2 0 147 105 44 67 49 21 +23 15 7 250 179 73 158 114 46 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 61 76 92 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 154 195 235 103 134 161 80 98 121 +52 62 74 18 22 24 0 2 0 3 10 13 38 45 51 80 98 121 151 193 233 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 109 141 168 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 +226 228 225 65 66 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 43 44 42 234 236 233 234 236 233 234 236 233 234 236 233 131 133 130 192 194 191 +152 154 151 141 142 139 141 142 139 141 142 139 158 160 156 3 6 2 82 62 28 129 95 39 +0 2 0 206 148 61 248 178 79 21 13 4 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 96 115 138 +170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 18 22 24 0 2 0 0 2 0 +34 26 8 75 55 22 114 83 33 95 68 30 55 39 17 7 0 0 0 6 9 84 103 125 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 84 103 125 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 171 173 170 +0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 18 20 17 234 236 233 234 236 233 234 236 233 234 236 233 138 140 137 178 180 177 +226 228 225 234 236 233 234 236 233 234 236 233 231 233 230 45 47 44 23 15 7 190 136 56 +0 2 0 147 105 44 250 179 73 64 46 18 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 126 162 196 0 2 0 26 20 13 190 136 56 245 175 76 +250 179 73 161 117 49 164 119 51 245 175 76 250 179 73 206 148 61 75 55 22 0 2 0 +126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 68 83 99 0 2 0 252 254 250 254 255 252 254 255 252 254 255 252 71 73 70 +8 14 16 88 115 136 17 24 30 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 232 234 231 234 236 233 234 236 233 234 236 233 215 217 214 148 150 147 +183 185 181 141 142 139 135 137 134 135 137 134 141 142 139 87 89 86 0 2 0 202 145 58 +3 6 2 88 66 26 250 179 73 109 79 35 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 157 198 239 +170 212 252 170 212 252 166 207 248 26 33 39 26 20 13 224 163 69 250 179 73 250 179 73 +250 179 73 197 142 62 202 145 58 250 179 73 250 179 73 250 179 73 234 172 70 21 13 4 +38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 52 62 74 21 22 20 254 255 252 254 255 252 254 255 252 254 255 252 21 22 20 +49 59 70 170 212 252 166 207 248 91 123 149 8 14 16 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 215 217 214 234 236 233 234 236 233 234 236 233 234 236 233 123 125 122 +188 190 187 229 231 228 234 236 233 234 236 233 222 224 221 118 120 117 0 2 0 168 123 54 +34 26 8 67 49 21 250 179 73 134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 34 41 47 170 212 252 +170 212 252 170 212 252 85 112 133 0 2 0 164 119 51 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 129 95 39 +0 2 0 138 174 208 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 34 44 55 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 24 22 25 +52 62 74 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 178 180 177 234 236 233 234 236 233 234 236 233 234 236 233 141 142 139 +198 200 197 148 150 147 135 137 134 135 137 134 148 150 147 123 125 122 0 2 0 190 136 56 +21 13 4 78 58 25 250 179 73 129 95 39 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 82 108 129 170 212 252 +170 212 252 170 212 252 23 30 36 58 42 19 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 147 105 44 +0 2 0 139 181 221 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 34 41 47 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 +25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 6 9 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 91 93 90 234 236 233 234 236 233 234 236 233 234 236 233 126 127 125 +169 171 168 222 224 221 234 236 233 229 231 228 178 180 177 71 73 70 0 2 0 212 153 66 +0 2 0 95 68 30 250 179 73 119 87 37 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 138 174 208 170 212 252 +170 212 252 154 195 235 0 2 0 125 92 35 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 119 87 37 +0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 57 72 88 7 10 5 252 254 250 254 255 252 254 255 252 254 255 252 95 96 94 +0 6 9 166 207 248 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 8 14 16 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 7 10 5 222 224 221 234 236 233 234 236 233 234 236 233 141 142 139 +183 185 181 138 140 137 131 133 130 141 142 139 192 194 191 102 104 101 0 2 0 224 163 69 +0 2 0 105 75 32 250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 27 33 170 212 252 170 212 252 +170 212 252 115 152 185 0 2 0 180 132 57 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 10 12 8 +38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 82 108 129 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 158 160 156 +0 2 0 92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 141 142 139 234 236 233 234 236 233 234 236 233 131 133 130 +185 187 183 231 233 230 222 224 221 158 160 156 138 140 137 48 50 48 3 6 2 250 179 73 +134 100 43 206 148 61 218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 75 94 116 170 212 252 170 212 252 +170 212 252 92 119 140 0 2 0 224 163 69 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 87 61 23 7 0 0 +134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 109 141 168 0 2 0 178 180 177 254 255 252 254 255 252 254 255 252 252 254 250 +39 43 45 10 16 18 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +88 115 136 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 45 47 44 234 236 233 234 236 233 234 236 233 131 133 130 +148 150 147 138 140 137 148 150 147 210 212 209 152 154 151 26 27 25 29 21 8 250 179 73 +250 179 73 234 172 70 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 170 212 252 +170 212 252 103 134 161 0 2 0 202 145 58 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 238 175 73 75 55 22 0 2 0 75 102 123 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 140 177 211 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 +183 185 181 0 2 0 75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 57 72 88 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 162 164 161 234 236 233 234 236 233 135 137 134 +226 228 225 198 200 197 104 106 103 15 17 14 0 2 0 15 9 7 147 105 44 250 179 73 +248 178 79 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 21 27 33 170 212 252 170 212 252 170 212 252 +170 212 252 122 159 192 0 2 0 175 129 54 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 202 145 58 55 39 17 0 2 0 82 108 129 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 12 17 20 60 62 59 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 69 71 68 0 6 9 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 159 201 241 26 33 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 162 164 161 215 217 214 95 96 94 +56 58 55 0 2 0 0 2 0 0 2 0 61 44 16 238 175 73 250 179 73 250 179 73 +218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 88 115 136 170 212 252 170 212 252 170 212 252 +170 212 252 143 185 225 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 212 153 66 95 68 30 0 2 0 8 14 16 103 134 161 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 68 83 99 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 +254 255 252 210 212 209 0 6 9 53 68 84 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 126 162 196 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 23 15 7 250 179 73 250 179 73 250 179 73 +250 179 73 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 166 207 248 0 2 0 52 36 13 158 114 46 180 132 57 161 117 49 119 87 37 +41 31 10 0 2 0 0 2 0 72 87 103 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 115 152 185 0 2 0 152 154 151 254 255 252 238 241 237 85 87 84 +229 231 228 254 255 252 99 101 98 0 2 0 126 162 196 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 +250 179 73 105 75 32 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 32 39 45 0 2 0 57 72 88 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 85 112 133 12 17 20 0 2 0 0 2 0 0 2 0 0 2 0 +34 41 47 92 110 133 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 166 207 248 6 12 15 71 73 70 254 255 252 229 231 228 0 2 0 +141 142 139 254 255 252 231 233 230 10 12 8 34 44 55 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 154 195 235 6 12 15 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 125 92 35 250 179 73 250 179 73 +250 179 73 180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 68 83 99 +129 165 199 85 112 133 0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 126 162 196 119 156 189 134 170 204 149 191 231 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 57 72 88 3 6 2 242 244 240 254 255 252 35 37 34 +78 80 77 254 255 252 254 255 252 128 130 127 0 2 0 105 137 164 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 91 123 149 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 55 39 17 250 179 73 250 179 73 +250 179 73 245 175 76 7 10 5 0 2 0 44 54 65 103 134 161 161 203 243 170 212 252 +170 212 252 21 27 33 25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 61 76 92 0 2 0 242 244 240 254 255 252 102 104 101 +10 12 8 231 233 230 254 255 252 244 246 243 26 27 25 21 27 33 159 201 241 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 32 39 45 0 6 9 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 218 158 64 250 179 73 +250 179 73 250 179 73 75 55 22 0 2 0 161 203 243 170 212 252 170 212 252 170 212 252 +115 147 174 0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 159 201 241 146 188 228 +140 177 211 134 170 204 146 188 228 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 17 24 30 62 64 61 254 255 252 254 255 252 215 217 214 +0 2 0 102 104 101 254 255 252 254 255 252 166 168 165 0 2 0 72 87 103 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 75 32 250 179 73 +250 179 73 250 179 73 150 108 46 0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 +49 59 70 3 10 13 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 166 207 248 109 141 168 65 87 102 28 35 41 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 28 35 41 70 96 117 138 174 208 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 0 2 0 102 104 101 254 255 252 254 255 252 254 255 252 +102 104 101 0 2 0 192 194 191 254 255 252 254 255 252 78 80 77 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 34 44 55 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 61 76 92 154 195 235 0 6 9 29 21 8 250 179 73 +250 179 73 250 179 73 224 163 69 0 2 0 68 83 99 170 212 252 170 212 252 143 179 213 +0 2 0 72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +161 203 243 96 115 138 17 24 30 0 2 0 0 2 0 45 47 44 102 104 101 123 125 122 +138 140 137 143 145 142 115 117 114 82 83 81 43 44 42 0 2 0 0 2 0 32 39 45 +126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 0 2 0 85 87 84 254 255 252 254 255 252 254 255 252 +242 244 240 27 29 27 35 37 34 254 255 252 254 255 252 231 233 230 10 12 8 21 27 33 +159 201 241 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 6 9 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 44 54 65 170 212 252 170 212 252 34 44 55 0 2 0 82 62 28 +109 79 35 224 163 69 250 179 73 52 36 13 15 20 22 170 212 252 170 212 252 75 89 106 +0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 +25 32 38 0 2 0 40 41 39 155 157 153 238 241 237 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 115 117 114 18 20 17 +0 2 0 68 83 99 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 52 62 74 7 10 5 234 236 233 254 255 252 254 255 252 +254 255 252 195 197 194 102 104 101 254 255 252 254 255 252 254 255 252 162 164 161 0 2 0 +72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 119 156 189 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 115 147 174 170 212 252 91 123 149 0 2 0 0 2 0 6 12 15 +0 2 0 15 9 7 197 142 62 125 92 35 0 2 0 115 152 185 113 145 172 3 6 2 +41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 113 145 172 0 6 9 +10 12 8 155 157 153 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 232 234 231 +87 89 86 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 115 152 185 0 2 0 138 140 137 254 255 252 254 255 252 +254 255 252 254 255 252 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 65 66 64 +0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 154 195 235 170 212 252 143 179 213 88 115 136 149 191 231 170 212 252 +126 162 196 3 6 2 64 46 18 202 145 58 0 2 0 0 2 0 0 2 0 0 2 0 +92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 143 179 213 3 10 13 27 29 27 +215 217 214 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 155 157 153 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 23 30 36 27 29 27 249 251 248 254 255 252 +254 255 252 188 190 187 7 10 5 226 228 225 254 255 252 254 255 252 254 255 252 231 233 230 +7 10 5 21 27 33 159 201 241 170 212 252 103 134 161 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 55 66 77 11 4 3 250 179 73 24 17 10 0 2 0 0 2 0 0 2 0 +143 185 225 170 212 252 170 212 252 170 212 252 159 201 241 28 35 41 7 10 5 200 202 199 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 155 157 153 0 2 0 55 66 77 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 96 127 154 0 2 0 158 160 156 254 255 252 +254 255 252 192 194 191 0 2 0 176 178 175 254 255 252 254 255 252 254 255 252 254 255 252 +141 142 139 0 2 0 72 87 103 129 165 199 0 6 9 0 6 9 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 12 17 20 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 +138 174 208 17 24 30 29 21 8 250 179 73 101 72 28 0 2 0 0 2 0 32 39 45 +170 212 252 170 212 252 170 212 252 170 212 252 57 72 88 0 2 0 152 154 151 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 108 110 107 0 2 0 115 152 185 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 18 22 24 40 41 39 254 255 252 +254 255 252 232 234 231 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 10 12 8 0 2 0 8 14 16 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 41 51 62 61 76 92 34 44 55 3 10 13 +0 2 0 11 4 3 164 119 51 250 179 73 175 129 54 0 2 0 0 2 0 82 108 129 +170 212 252 170 212 252 170 212 252 98 129 156 0 2 0 95 96 94 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 238 241 237 18 20 17 25 32 38 166 207 248 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 85 112 133 0 2 0 188 190 187 +254 255 252 254 255 252 198 200 197 242 244 240 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 120 122 119 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 6 9 7 0 0 +31 23 12 202 145 58 250 179 73 250 179 73 238 175 73 0 2 0 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 28 35 41 31 32 30 244 246 243 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 85 112 133 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 0 2 0 148 150 147 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 222 224 221 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +7 0 0 234 172 70 250 179 73 250 179 73 250 179 73 34 26 8 0 2 0 149 191 231 +170 212 252 170 212 252 129 165 199 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 48 50 48 3 10 13 146 188 228 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 0 2 0 118 120 117 +254 255 252 254 255 252 254 255 252 169 171 168 231 233 230 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 170 124 49 250 179 73 250 179 73 250 179 73 48 33 15 6 12 15 170 212 252 +170 212 252 170 212 252 65 87 102 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 195 197 194 0 2 0 84 103 125 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 3 10 13 85 87 84 +254 255 252 254 255 252 234 236 233 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 99 101 98 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 95 68 30 250 179 73 250 179 73 250 179 73 34 26 8 34 44 55 170 212 252 +170 212 252 163 205 246 8 14 16 62 64 61 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 35 37 34 34 44 55 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 26 33 39 60 62 59 +254 255 252 254 255 252 238 241 237 0 2 0 108 110 107 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 158 160 156 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 23 15 7 248 178 79 250 179 73 245 175 76 0 2 0 63 78 94 170 212 252 +170 212 252 109 141 168 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 104 106 103 0 2 0 +154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 69 71 68 +254 255 252 254 255 252 244 246 243 0 2 0 91 93 90 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 215 217 214 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 197 142 62 250 179 73 212 153 66 0 2 0 92 110 133 170 212 252 +170 212 252 80 98 121 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 176 178 175 0 2 0 +105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 8 14 16 87 89 86 +254 255 252 254 255 252 254 255 252 40 41 39 21 22 20 252 254 250 254 255 252 254 255 252 +254 255 252 254 255 252 252 254 250 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 125 92 35 250 179 73 170 124 49 0 2 0 113 145 172 170 212 252 +170 212 252 53 68 84 15 17 14 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 242 244 240 0 2 0 +63 78 94 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 0 2 0 104 106 103 +254 255 252 254 255 252 254 255 252 123 125 122 0 2 0 166 168 165 254 255 252 254 255 252 +254 255 252 254 255 252 234 236 233 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 7 0 0 52 36 13 250 179 73 129 95 39 0 2 0 143 179 213 170 212 252 +170 212 252 32 39 45 48 50 48 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 60 62 59 +18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 2 0 102 104 101 +254 255 252 254 255 252 254 255 252 226 228 225 15 17 14 10 12 8 215 217 214 254 255 252 +254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 88 66 26 29 21 8 0 2 0 166 207 248 170 212 252 +170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 123 125 122 +0 2 0 149 191 231 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 56 58 55 +254 255 252 254 255 252 254 255 252 254 255 252 178 180 177 0 2 0 38 40 37 238 241 237 +254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 7 0 0 0 2 0 161 203 243 170 212 252 +149 191 231 0 2 0 123 125 122 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 141 142 139 +0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 +210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 120 122 119 0 2 0 21 22 20 +143 145 142 244 246 243 219 221 218 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 149 191 231 170 212 252 +129 165 199 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 155 157 153 +0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 0 6 9 +69 71 68 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 71 73 70 0 2 0 +0 2 0 0 2 0 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 170 212 252 +129 165 199 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 169 171 168 +0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 75 94 116 +0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 134 170 204 170 212 252 +134 170 204 0 2 0 152 154 151 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 +0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 +44 54 65 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 35 37 34 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 +138 174 208 0 2 0 143 145 142 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 198 200 197 +0 2 0 103 134 161 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +157 198 239 28 35 41 0 2 0 188 190 187 254 255 252 252 254 250 3 6 2 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 115 152 185 170 212 252 +143 179 213 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 +0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 146 188 228 0 6 9 26 27 25 242 244 240 176 178 175 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 170 212 252 +143 185 225 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 185 187 183 +0 2 0 105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 163 205 246 0 2 0 0 2 0 102 104 101 60 62 59 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 80 98 121 170 212 252 +149 191 231 0 2 0 118 120 117 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 143 145 142 +0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 143 179 213 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 170 212 252 +170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 108 110 107 +0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 115 152 185 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 170 212 252 +170 212 252 34 44 55 43 44 42 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 +15 20 22 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 75 94 116 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 +170 212 252 63 78 94 3 6 2 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 31 32 30 +41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +161 203 243 6 12 15 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 +170 212 252 88 115 136 0 2 0 210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 249 251 248 0 2 0 +68 83 99 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +96 127 154 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 61 76 92 +170 212 252 119 150 178 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 0 2 0 +91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +28 35 41 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 +146 188 228 143 185 225 0 2 0 126 127 125 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 85 87 84 0 6 9 +154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 98 129 156 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +72 90 112 170 212 252 18 22 24 56 58 55 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 238 241 237 7 10 5 55 66 77 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 0 6 9 +0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 122 159 192 72 87 103 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 113 145 172 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 139 181 221 8 14 16 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 18 22 24 109 141 168 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 12 17 20 166 207 248 +170 212 252 170 212 252 170 212 252 170 212 252 146 188 228 23 30 36 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 101 72 28 202 145 58 +180 132 57 0 2 0 38 45 51 3 10 13 69 71 68 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 200 202 199 0 2 0 75 89 106 170 212 252 +170 212 252 170 212 252 170 212 252 109 141 168 8 14 16 0 2 0 21 13 4 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 7 0 0 0 2 0 101 72 28 218 158 64 250 179 73 250 179 73 +250 179 73 139 99 44 0 2 0 8 14 16 0 2 0 238 241 237 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 244 246 243 38 40 37 3 10 13 139 181 221 170 212 252 +170 212 252 161 203 243 66 80 97 0 2 0 31 23 12 191 142 60 248 183 74 180 132 57 +44 34 15 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 23 15 7 190 136 56 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 150 108 46 0 2 0 0 2 0 82 83 81 222 224 221 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 102 104 101 0 2 0 98 129 156 170 212 252 163 205 246 +98 129 156 23 30 36 0 2 0 82 62 28 234 172 70 248 183 74 248 183 74 248 183 74 +248 183 74 158 114 46 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 64 46 18 109 79 35 150 108 46 224 163 69 250 179 73 +250 179 73 250 179 73 250 179 73 158 114 46 0 2 0 0 2 0 3 6 2 115 117 114 +234 236 233 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 176 178 175 0 2 0 57 72 88 146 188 228 80 98 121 8 14 16 +0 2 0 24 17 10 158 114 46 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 242 178 77 58 42 19 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 0 2 0 67 49 21 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 95 68 30 0 2 0 0 2 0 +0 2 0 52 54 51 108 110 107 162 164 161 219 221 218 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 +219 221 218 178 180 177 18 20 17 6 12 15 26 33 39 0 2 0 0 2 0 52 36 13 +164 119 51 242 178 77 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 242 178 77 +187 138 56 175 129 54 158 114 46 82 62 28 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 78 58 25 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 234 172 70 142 101 40 +44 34 15 10 12 8 0 2 0 0 2 0 0 2 0 18 20 17 60 62 59 71 73 70 +82 83 81 95 96 94 104 106 103 118 120 117 115 117 114 78 80 77 40 41 39 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 44 34 15 105 75 32 191 142 60 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 105 75 32 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 187 138 56 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 142 101 40 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 206 148 61 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 161 117 49 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 228 167 73 250 179 73 +238 175 73 190 136 56 158 114 46 234 172 70 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 147 105 44 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 67 49 21 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 +31 23 12 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 21 13 4 +0 2 0 0 2 0 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 +134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 155 111 43 248 183 74 248 183 74 +248 183 74 248 183 74 224 163 69 55 39 17 64 46 18 164 119 51 242 178 77 248 183 74 +75 55 22 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 228 167 73 88 66 26 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 168 123 54 248 183 74 +248 183 74 248 183 74 158 114 46 0 2 0 7 0 0 0 2 0 10 12 8 44 34 15 +15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 29 21 8 250 179 73 250 179 73 158 114 46 15 14 3 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 175 129 54 +248 183 74 248 183 74 114 83 33 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 29 21 8 147 105 44 58 42 19 0 2 0 7 0 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +105 75 32 218 158 64 23 15 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + diff --git a/kernels/linux-libre-lts-knock/logo_linux_mono.pbm b/kernels/linux-libre-lts-knock/logo_linux_mono.pbm new file mode 100644 index 000000000..3d3c35807 --- /dev/null +++ b/kernels/linux-libre-lts-knock/logo_linux_mono.pbm @@ -0,0 +1,159 @@ +P2 +80 78 +255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 255 255 255 255 255 0 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 +255 0 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 +255 255 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 +255 255 0 0 0 0 0 0 0 0 +0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 +255 255 255 0 0 0 0 0 0 0 +0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 255 255 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 0 255 255 0 0 255 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 255 255 255 0 0 255 +255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 255 +255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 0 +255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 +0 255 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 +0 255 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 +0 0 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 255 255 255 +255 0 0 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 255 0 0 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 +255 0 0 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 0 0 255 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 255 255 255 +255 255 0 0 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 255 255 255 255 0 255 255 255 +255 255 255 0 0 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 0 255 255 255 +255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 0 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 0 +0 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 255 +0 0 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 diff --git a/kernels/linux-libre-lts-knock/logo_linux_vga16.ppm b/kernels/linux-libre-lts-knock/logo_linux_vga16.ppm new file mode 100644 index 000000000..f279f972c --- /dev/null +++ b/kernels/linux-libre-lts-knock/logo_linux_vga16.ppm @@ -0,0 +1,18724 @@ +P3 +# CREATOR: GIMP PNM Filter Version 1.1 +80 78 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +170 +170 +170 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +170 +170 +170 +85 +85 +85 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +170 +170 +170 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +85 +85 +85 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +170 +170 +170 +170 +170 +170 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/kernels/linux-libre-pae/PKGBUILD b/kernels/linux-libre-pae/PKGBUILD index 2234a4d16..5f72c2465 100644 --- a/kernels/linux-libre-pae/PKGBUILD +++ b/kernels/linux-libre-pae/PKGBUILD @@ -24,14 +24,16 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn 'config' # standard config files for mkinitcpio ramdisk "${pkgbase}.preset" - 'boot-logo.patch' + 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' 'compal-laptop-hwmon-fix.patch') sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218' '3bbc78694d76b12b6229799d7c4daf5215b9dd731908d96b03603aceb54ad5c7' 'd7f16bb97225fc315cbe0bdf5fbc30ee8e387298bd53ba7cc623044b2f48c506' '292d5c553f87246c8dc2d57cadfd2db92a3750173b4588d53c2919743171eca5' - '8303b426b1a6dce456b2350003558ae312d21cab0ae6c1f0d7b9d21395f4e177' + '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' + '2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53' + 'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015' '1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99' 'f36f61a0a72bcb0a9c04264343503bfbf927c9ea0db819e66734a3933b060588') @@ -46,7 +48,8 @@ prepare() { fi # add freedo as boot logo - patch -p1 -i "${srcdir}/boot-logo.patch" + install -m644 -t drivers/video/logo \ + "${srcdir}/logo_linux_"{clut224.ppm,vga16.ppm,mono.pbm} # add latest fixes from stable queue, if needed # http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git diff --git a/kernels/linux-libre-pae/boot-logo.patch b/kernels/linux-libre-pae/boot-logo.patch deleted file mode 100644 index 3f4e0dea4..000000000 --- a/kernels/linux-libre-pae/boot-logo.patch +++ /dev/null @@ -1,23167 +0,0 @@ -diff --git a/drivers/video/logo/logo_linux_clut224.ppm b/drivers/video/logo/logo_linux_clut224.ppm -index 3c14e43..c9d8373 100644 ---- a/drivers/video/logo/logo_linux_clut224.ppm -+++ b/drivers/video/logo/logo_linux_clut224.ppm -@@ -1,1604 +1,861 @@ - P3 --# Standard 224-color Linux logo --80 80 -+80 78 - 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 6 6 6 10 10 10 10 10 10 -- 10 10 10 6 6 6 6 6 6 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 10 10 10 14 14 14 -- 22 22 22 26 26 26 30 30 30 34 34 34 -- 30 30 30 30 30 30 26 26 26 18 18 18 -- 14 14 14 10 10 10 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 26 26 26 42 42 42 -- 54 54 54 66 66 66 78 78 78 78 78 78 -- 78 78 78 74 74 74 66 66 66 54 54 54 -- 42 42 42 26 26 26 18 18 18 10 10 10 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 22 22 22 42 42 42 66 66 66 86 86 86 -- 66 66 66 38 38 38 38 38 38 22 22 22 -- 26 26 26 34 34 34 54 54 54 66 66 66 -- 86 86 86 70 70 70 46 46 46 26 26 26 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 26 26 26 -- 50 50 50 82 82 82 58 58 58 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 54 54 54 86 86 86 66 66 66 -- 38 38 38 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 22 22 22 50 50 50 -- 78 78 78 34 34 34 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 6 6 6 70 70 70 -- 78 78 78 46 46 46 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 42 42 42 82 82 82 -- 26 26 26 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 14 14 14 -- 46 46 46 34 34 34 6 6 6 2 2 6 -- 42 42 42 78 78 78 42 42 42 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 30 30 30 66 66 66 58 58 58 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 26 26 26 -- 86 86 86 101 101 101 46 46 46 10 10 10 -- 2 2 6 58 58 58 70 70 70 34 34 34 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 42 42 42 86 86 86 10 10 10 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 30 30 30 -- 94 94 94 94 94 94 58 58 58 26 26 26 -- 2 2 6 6 6 6 78 78 78 54 54 54 -- 22 22 22 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 62 62 62 62 62 62 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 26 26 26 -- 54 54 54 38 38 38 18 18 18 10 10 10 -- 2 2 6 2 2 6 34 34 34 82 82 82 -- 38 38 38 14 14 14 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 30 30 30 78 78 78 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 10 10 10 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 78 78 78 -- 50 50 50 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 14 14 14 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 54 54 54 -- 66 66 66 26 26 26 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 82 82 82 2 2 6 2 2 6 -- 2 2 6 6 6 6 10 10 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 14 14 14 10 10 10 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 18 18 18 -- 82 82 82 34 34 34 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 2 2 6 -- 6 6 6 6 6 6 22 22 22 34 34 34 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 34 34 34 -- 10 10 10 50 50 50 22 22 22 2 2 6 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 86 86 86 42 42 42 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 2 2 6 -- 38 38 38 116 116 116 94 94 94 22 22 22 -- 22 22 22 2 2 6 2 2 6 2 2 6 -- 14 14 14 86 86 86 138 138 138 162 162 162 --154 154 154 38 38 38 26 26 26 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 86 86 86 46 46 46 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 14 14 14 --134 134 134 198 198 198 195 195 195 116 116 116 -- 10 10 10 2 2 6 2 2 6 6 6 6 --101 98 89 187 187 187 210 210 210 218 218 218 --214 214 214 134 134 134 14 14 14 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 86 86 86 50 50 50 18 18 18 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 54 54 54 --218 218 218 195 195 195 226 226 226 246 246 246 -- 58 58 58 2 2 6 2 2 6 30 30 30 --210 210 210 253 253 253 174 174 174 123 123 123 --221 221 221 234 234 234 74 74 74 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 82 82 82 2 2 6 106 106 106 --170 170 170 26 26 26 86 86 86 226 226 226 --123 123 123 10 10 10 14 14 14 46 46 46 --231 231 231 190 190 190 6 6 6 70 70 70 -- 90 90 90 238 238 238 158 158 158 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 86 86 86 6 6 6 116 116 116 --106 106 106 6 6 6 70 70 70 149 149 149 --128 128 128 18 18 18 38 38 38 54 54 54 --221 221 221 106 106 106 2 2 6 14 14 14 -- 46 46 46 190 190 190 198 198 198 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 62 62 62 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 94 94 94 14 14 14 101 101 101 --128 128 128 2 2 6 18 18 18 116 116 116 --118 98 46 121 92 8 121 92 8 98 78 10 --162 162 162 106 106 106 2 2 6 2 2 6 -- 2 2 6 195 195 195 195 195 195 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 62 62 62 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 1 -- 0 0 1 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 90 90 90 14 14 14 58 58 58 --210 210 210 26 26 26 54 38 6 154 114 10 --226 170 11 236 186 11 225 175 15 184 144 12 --215 174 15 175 146 61 37 26 9 2 2 6 -- 70 70 70 246 246 246 138 138 138 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 66 66 66 26 26 26 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 14 14 14 10 10 10 --195 195 195 188 164 115 192 133 9 225 175 15 --239 182 13 234 190 10 232 195 16 232 200 30 --245 207 45 241 208 19 232 195 16 184 144 12 --218 194 134 211 206 186 42 42 42 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 50 50 50 74 74 74 30 30 30 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 86 86 86 14 14 14 2 2 6 --121 87 25 192 133 9 219 162 10 239 182 13 --236 186 11 232 195 16 241 208 19 244 214 54 --246 218 60 246 218 38 246 215 20 241 208 19 --241 208 19 226 184 13 121 87 25 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 50 50 50 82 82 82 34 34 34 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 82 82 82 30 30 30 61 42 6 --180 123 7 206 145 10 230 174 11 239 182 13 --234 190 10 238 202 15 241 208 19 246 218 74 --246 218 38 246 215 20 246 215 20 246 215 20 --226 184 13 215 174 15 184 144 12 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 26 26 26 94 94 94 42 42 42 14 14 14 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 50 50 50 104 69 6 --192 133 9 216 158 10 236 178 12 236 186 11 --232 195 16 241 208 19 244 214 54 245 215 43 --246 215 20 246 215 20 241 208 19 198 155 10 --200 144 11 216 158 10 156 118 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 90 90 90 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 46 46 46 22 22 22 --137 92 6 210 162 10 239 182 13 238 190 10 --238 202 15 241 208 19 246 215 20 246 215 20 --241 208 19 203 166 17 185 133 11 210 150 10 --216 158 10 210 150 10 102 78 10 2 2 6 -- 6 6 6 54 54 54 14 14 14 2 2 6 -- 2 2 6 62 62 62 74 74 74 30 30 30 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 78 78 78 50 50 50 6 6 6 -- 94 70 30 139 102 15 190 146 13 226 184 13 --232 200 30 232 195 16 215 174 15 190 146 13 --168 122 10 192 133 9 210 150 10 213 154 11 --202 150 34 182 157 106 101 98 89 2 2 6 -- 2 2 6 78 78 78 116 116 116 58 58 58 -- 2 2 6 22 22 22 90 90 90 46 46 46 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 50 50 50 6 6 6 --128 128 128 174 154 114 156 107 11 168 122 10 --198 155 10 184 144 12 197 138 11 200 144 11 --206 145 10 206 145 10 197 138 11 188 164 115 --195 195 195 198 198 198 174 174 174 14 14 14 -- 2 2 6 22 22 22 116 116 116 116 116 116 -- 22 22 22 2 2 6 74 74 74 70 70 70 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 101 101 101 26 26 26 10 10 10 --138 138 138 190 190 190 174 154 114 156 107 11 --197 138 11 200 144 11 197 138 11 192 133 9 --180 123 7 190 142 34 190 178 144 187 187 187 --202 202 202 221 221 221 214 214 214 66 66 66 -- 2 2 6 2 2 6 50 50 50 62 62 62 -- 6 6 6 2 2 6 10 10 10 90 90 90 -- 50 50 50 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 34 34 34 -- 74 74 74 74 74 74 2 2 6 6 6 6 --144 144 144 198 198 198 190 190 190 178 166 146 --154 121 60 156 107 11 156 107 11 168 124 44 --174 154 114 187 187 187 190 190 190 210 210 210 --246 246 246 253 253 253 253 253 253 182 182 182 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 62 62 62 -- 74 74 74 34 34 34 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 10 10 10 22 22 22 54 54 54 -- 94 94 94 18 18 18 2 2 6 46 46 46 --234 234 234 221 221 221 190 190 190 190 190 190 --190 190 190 187 187 187 187 187 187 190 190 190 --190 190 190 195 195 195 214 214 214 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 -- 82 82 82 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 14 14 14 -- 86 86 86 54 54 54 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 46 46 46 90 90 90 -- 46 46 46 18 18 18 6 6 6 182 182 182 --253 253 253 246 246 246 206 206 206 190 190 190 --190 190 190 190 190 190 190 190 190 190 190 190 --206 206 206 231 231 231 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --202 202 202 14 14 14 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 42 42 42 86 86 86 42 42 42 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 14 14 14 38 38 38 74 74 74 66 66 66 -- 2 2 6 6 6 6 90 90 90 250 250 250 --253 253 253 253 253 253 238 238 238 198 198 198 --190 190 190 190 190 190 195 195 195 221 221 221 --246 246 246 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 82 82 82 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 78 78 78 70 70 70 34 34 34 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 34 34 34 66 66 66 78 78 78 6 6 6 -- 2 2 6 18 18 18 218 218 218 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --226 226 226 231 231 231 246 246 246 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 178 178 178 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 18 18 18 90 90 90 62 62 62 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 26 26 26 -- 58 58 58 90 90 90 18 18 18 2 2 6 -- 2 2 6 110 110 110 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 231 231 231 18 18 18 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 94 94 94 -- 54 54 54 26 26 26 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 22 22 22 50 50 50 -- 90 90 90 26 26 26 2 2 6 2 2 6 -- 14 14 14 195 195 195 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 242 242 242 54 54 54 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 -- 86 86 86 50 50 50 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 38 38 38 82 82 82 -- 34 34 34 2 2 6 2 2 6 2 2 6 -- 42 42 42 195 195 195 246 246 246 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 242 242 242 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 246 246 246 238 238 238 --226 226 226 231 231 231 101 101 101 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 38 38 38 82 82 82 42 42 42 14 14 14 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 26 26 26 62 62 62 66 66 66 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 70 70 70 170 170 170 206 206 206 234 234 234 --246 246 246 250 250 250 250 250 250 238 238 238 --226 226 226 231 231 231 238 238 238 250 250 250 --250 250 250 250 250 250 246 246 246 231 231 231 --214 214 214 206 206 206 202 202 202 202 202 202 --198 198 198 202 202 202 182 182 182 18 18 18 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 62 62 62 66 66 66 30 30 30 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 42 42 42 82 82 82 18 18 18 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 94 94 94 182 182 182 218 218 218 242 242 242 --250 250 250 253 253 253 253 253 253 250 250 250 --234 234 234 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --238 238 238 226 226 226 210 210 210 202 202 202 --195 195 195 195 195 195 210 210 210 158 158 158 -- 6 6 6 14 14 14 50 50 50 14 14 14 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 86 86 86 46 46 46 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 54 54 54 70 70 70 2 2 6 -- 2 2 6 10 10 10 2 2 6 22 22 22 --166 166 166 231 231 231 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --231 231 231 206 206 206 198 198 198 226 226 226 -- 94 94 94 2 2 6 6 6 6 38 38 38 -- 30 30 30 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 62 62 62 66 66 66 -- 26 26 26 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 74 74 74 50 50 50 2 2 6 -- 26 26 26 26 26 26 2 2 6 106 106 106 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 246 246 246 218 218 218 202 202 202 --210 210 210 14 14 14 2 2 6 2 2 6 -- 30 30 30 22 22 22 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 86 86 86 -- 42 42 42 14 14 14 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 90 90 90 22 22 22 2 2 6 -- 42 42 42 2 2 6 18 18 18 218 218 218 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 250 250 250 221 221 221 --218 218 218 101 101 101 2 2 6 14 14 14 -- 18 18 18 38 38 38 10 10 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 78 78 78 -- 58 58 58 22 22 22 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 54 54 54 82 82 82 2 2 6 26 26 26 -- 22 22 22 2 2 6 123 123 123 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --238 238 238 198 198 198 6 6 6 38 38 38 -- 58 58 58 26 26 26 38 38 38 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 78 78 78 30 30 30 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 30 30 30 -- 74 74 74 58 58 58 2 2 6 42 42 42 -- 2 2 6 22 22 22 231 231 231 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 246 246 246 46 46 46 38 38 38 -- 42 42 42 14 14 14 38 38 38 14 14 14 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 86 86 86 46 46 46 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 42 42 42 -- 90 90 90 18 18 18 18 18 18 26 26 26 -- 2 2 6 116 116 116 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 250 250 250 238 238 238 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 94 94 94 6 6 6 -- 2 2 6 2 2 6 10 10 10 34 34 34 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 10 10 10 26 26 26 66 66 66 -- 82 82 82 2 2 6 38 38 38 6 6 6 -- 14 14 14 210 210 210 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 246 246 246 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 144 144 144 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 42 42 42 74 74 74 30 30 30 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 42 42 42 90 90 90 -- 26 26 26 6 6 6 42 42 42 2 2 6 -- 74 74 74 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 242 242 242 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 182 182 182 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 10 10 10 86 86 86 38 38 38 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 26 26 26 66 66 66 82 82 82 -- 2 2 6 22 22 22 18 18 18 2 2 6 --149 149 149 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 206 206 206 2 2 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 86 86 86 46 46 46 14 14 14 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 18 18 18 46 46 46 86 86 86 18 18 18 -- 2 2 6 34 34 34 10 10 10 6 6 6 --210 210 210 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 221 221 221 6 6 6 -- 2 2 6 2 2 6 6 6 6 30 30 30 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 82 82 82 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 26 26 26 66 66 66 62 62 62 2 2 6 -- 2 2 6 38 38 38 10 10 10 26 26 26 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 238 238 238 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 6 6 6 -- 2 2 6 2 2 6 10 10 10 30 30 30 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 58 58 58 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 78 78 78 6 6 6 2 2 6 -- 2 2 6 46 46 46 14 14 14 42 42 42 --246 246 246 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 10 10 10 -- 2 2 6 2 2 6 22 22 22 14 14 14 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 62 62 62 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 74 74 74 2 2 6 2 2 6 -- 14 14 14 70 70 70 34 34 34 62 62 62 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 14 14 14 -- 2 2 6 2 2 6 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 62 62 62 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 54 54 54 62 62 62 2 2 6 2 2 6 -- 2 2 6 30 30 30 46 46 46 70 70 70 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 226 226 226 10 10 10 -- 2 2 6 6 6 6 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 58 58 58 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 58 58 58 62 62 62 2 2 6 2 2 6 -- 2 2 6 2 2 6 30 30 30 78 78 78 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 206 206 206 2 2 6 -- 22 22 22 34 34 34 18 14 6 22 22 22 -- 26 26 26 18 18 18 6 6 6 2 2 6 -- 2 2 6 82 82 82 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 26 26 26 -- 62 62 62 106 106 106 74 54 14 185 133 11 --210 162 10 121 92 8 6 6 6 62 62 62 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 158 158 158 18 18 18 -- 14 14 14 2 2 6 2 2 6 2 2 6 -- 6 6 6 18 18 18 66 66 66 38 38 38 -- 6 6 6 94 94 94 50 50 50 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 10 10 10 10 10 10 18 18 18 38 38 38 -- 78 78 78 142 134 106 216 158 10 242 186 14 --246 190 14 246 190 14 156 118 10 10 10 10 -- 90 90 90 238 238 238 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 230 190 --238 204 91 238 204 91 181 142 44 37 26 9 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 38 38 38 46 46 46 -- 26 26 26 106 106 106 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 22 22 22 -- 30 30 30 38 38 38 50 50 50 70 70 70 --106 106 106 190 142 34 226 170 11 242 186 14 --246 190 14 246 190 14 246 190 14 154 114 10 -- 6 6 6 74 74 74 226 226 226 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 228 184 62 --241 196 14 241 208 19 232 195 16 38 30 10 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 30 30 30 26 26 26 --203 166 17 154 142 90 66 66 66 26 26 26 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 38 38 38 58 58 58 -- 78 78 78 86 86 86 101 101 101 123 123 123 --175 146 61 210 150 10 234 174 13 246 186 14 --246 190 14 246 190 14 246 190 14 238 190 10 --102 78 10 2 2 6 46 46 46 198 198 198 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 224 178 62 --242 186 14 241 196 14 210 166 10 22 18 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 6 6 6 121 92 8 --238 202 15 232 195 16 82 82 82 34 34 34 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 38 38 38 70 70 70 154 122 46 --190 142 34 200 144 11 197 138 11 197 138 11 --213 154 11 226 170 11 242 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --225 175 15 46 32 6 2 2 6 22 22 22 --158 158 158 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 242 242 242 224 178 62 --239 182 13 236 186 11 213 154 11 46 32 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 61 42 6 225 175 15 --238 190 10 236 186 11 112 100 78 42 42 42 -- 14 14 14 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 54 54 54 154 122 46 213 154 11 --226 170 11 230 174 11 226 170 11 226 170 11 --236 178 12 242 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --241 196 14 184 144 12 10 10 10 2 2 6 -- 6 6 6 116 116 116 242 242 242 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 231 231 231 198 198 198 214 170 54 --236 178 12 236 178 12 210 150 10 137 92 6 -- 18 14 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 70 47 6 200 144 11 236 178 12 --239 182 13 239 182 13 124 112 88 58 58 58 -- 22 22 22 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 70 70 70 180 133 36 226 170 11 --239 182 13 242 186 14 242 186 14 246 186 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 232 195 16 98 70 6 2 2 6 -- 2 2 6 2 2 6 66 66 66 221 221 221 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 206 206 206 198 198 198 214 166 58 --230 174 11 230 174 11 216 158 10 192 133 9 --163 110 8 116 81 8 102 78 10 116 81 8 --167 114 7 197 138 11 226 170 11 239 182 13 --242 186 14 242 186 14 162 146 94 78 78 78 -- 34 34 34 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 30 30 30 78 78 78 190 142 34 226 170 11 --239 182 13 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 241 196 14 203 166 17 22 18 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 --218 218 218 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 206 206 206 198 198 198 202 162 69 --226 170 11 236 178 12 224 166 10 210 150 10 --200 144 11 197 138 11 192 133 9 197 138 11 --210 150 10 226 170 11 242 186 14 246 190 14 --246 190 14 246 186 14 225 175 15 124 112 88 -- 62 62 62 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 174 135 50 224 166 10 --239 182 13 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 241 196 14 139 102 15 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 78 78 78 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 214 214 214 198 198 198 190 150 46 --219 162 10 236 178 12 234 174 13 224 166 10 --216 158 10 213 154 11 213 154 11 216 158 10 --226 170 11 239 182 13 246 190 14 246 190 14 --246 190 14 246 190 14 242 186 14 206 162 42 --101 101 101 58 58 58 30 30 30 14 14 14 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 74 74 74 174 135 50 216 158 10 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 241 196 14 226 184 13 -- 61 42 6 2 2 6 2 2 6 2 2 6 -- 22 22 22 238 238 238 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 226 226 226 187 187 187 180 133 36 --216 158 10 236 178 12 239 182 13 236 178 12 --230 174 11 226 170 11 226 170 11 230 174 11 --236 178 12 242 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 186 14 239 182 13 --206 162 42 106 106 106 66 66 66 34 34 34 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 26 26 26 70 70 70 163 133 67 213 154 11 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 241 196 14 --190 146 13 18 14 6 2 2 6 2 2 6 -- 46 46 46 246 246 246 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 221 221 221 86 86 86 156 107 11 --216 158 10 236 178 12 242 186 14 246 186 14 --242 186 14 239 182 13 239 182 13 242 186 14 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --242 186 14 225 175 15 142 122 72 66 66 66 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 26 26 26 70 70 70 163 133 67 210 150 10 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --232 195 16 121 92 8 34 34 34 106 106 106 --221 221 221 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --242 242 242 82 82 82 18 14 6 163 110 8 --216 158 10 236 178 12 242 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 242 186 14 163 133 67 -- 46 46 46 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 163 133 67 210 150 10 --236 178 12 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --241 196 14 215 174 15 190 178 144 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 218 218 218 -- 58 58 58 2 2 6 22 18 6 167 114 7 --216 158 10 236 178 12 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 186 14 242 186 14 190 150 46 -- 54 54 54 22 22 22 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 38 38 38 86 86 86 180 133 36 213 154 11 --236 178 12 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 232 195 16 190 146 13 214 214 214 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 170 170 170 26 26 26 -- 2 2 6 2 2 6 37 26 9 163 110 8 --219 162 10 239 182 13 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 236 178 12 224 166 10 142 122 72 -- 46 46 46 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 109 106 95 192 133 9 224 166 10 --242 186 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --242 186 14 226 184 13 210 162 10 142 110 46 --226 226 226 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --198 198 198 66 66 66 2 2 6 2 2 6 -- 2 2 6 2 2 6 50 34 6 156 107 11 --219 162 10 239 182 13 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 242 186 14 --234 174 13 213 154 11 154 122 46 66 66 66 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 58 58 58 154 121 60 206 145 10 234 174 13 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 236 178 12 210 162 10 163 110 8 -- 61 42 6 138 138 138 218 218 218 250 250 250 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 210 210 210 144 144 144 66 66 66 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 61 42 6 163 110 8 --216 158 10 236 178 12 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 239 182 13 230 174 11 216 158 10 --190 142 34 124 112 88 70 70 70 38 38 38 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 62 62 62 168 124 44 206 145 10 224 166 10 --236 178 12 239 182 13 242 186 14 242 186 14 --246 186 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 236 178 12 216 158 10 175 118 6 -- 80 54 7 2 2 6 6 6 6 30 30 30 -- 54 54 54 62 62 62 50 50 50 38 38 38 -- 14 14 14 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 80 54 7 167 114 7 --213 154 11 236 178 12 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 242 186 14 239 182 13 239 182 13 --230 174 11 210 150 10 174 135 50 124 112 88 -- 82 82 82 54 54 54 34 34 34 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 158 118 36 192 133 9 200 144 11 --216 158 10 219 162 10 224 166 10 226 170 11 --230 174 11 236 178 12 239 182 13 239 182 13 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 230 174 11 210 150 10 163 110 8 --104 69 6 10 10 10 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 91 60 6 167 114 7 --206 145 10 230 174 11 242 186 14 246 190 14 --246 190 14 246 190 14 246 186 14 242 186 14 --239 182 13 230 174 11 224 166 10 213 154 11 --180 133 36 124 112 88 86 86 86 58 58 58 -- 38 38 38 22 22 22 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 34 34 34 70 70 70 138 110 50 158 118 36 --167 114 7 180 123 7 192 133 9 197 138 11 --200 144 11 206 145 10 213 154 11 219 162 10 --224 166 10 230 174 11 239 182 13 242 186 14 --246 186 14 246 186 14 246 186 14 246 186 14 --239 182 13 216 158 10 185 133 11 152 99 6 --104 69 6 18 14 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 80 54 7 152 99 6 --192 133 9 219 162 10 236 178 12 239 182 13 --246 186 14 242 186 14 239 182 13 236 178 12 --224 166 10 206 145 10 192 133 9 154 121 60 -- 94 94 94 62 62 62 42 42 42 22 22 22 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 18 18 18 34 34 34 58 58 58 78 78 78 --101 98 89 124 112 88 142 110 46 156 107 11 --163 110 8 167 114 7 175 118 6 180 123 7 --185 133 11 197 138 11 210 150 10 219 162 10 --226 170 11 236 178 12 236 178 12 234 174 13 --219 162 10 197 138 11 163 110 8 130 83 6 -- 91 60 6 10 10 10 2 2 6 2 2 6 -- 18 18 18 38 38 38 38 38 38 38 38 38 -- 38 38 38 38 38 38 38 38 38 38 38 38 -- 38 38 38 38 38 38 26 26 26 2 2 6 -- 2 2 6 6 6 6 70 47 6 137 92 6 --175 118 6 200 144 11 219 162 10 230 174 11 --234 174 13 230 174 11 219 162 10 210 150 10 --192 133 9 163 110 8 124 112 88 82 82 82 -- 50 50 50 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 22 22 22 34 34 34 -- 42 42 42 58 58 58 74 74 74 86 86 86 --101 98 89 122 102 70 130 98 46 121 87 25 --137 92 6 152 99 6 163 110 8 180 123 7 --185 133 11 197 138 11 206 145 10 200 144 11 --180 123 7 156 107 11 130 83 6 104 69 6 -- 50 34 6 54 54 54 110 110 110 101 98 89 -- 86 86 86 82 82 82 78 78 78 78 78 78 -- 78 78 78 78 78 78 78 78 78 78 78 78 -- 78 78 78 82 82 82 86 86 86 94 94 94 --106 106 106 101 101 101 86 66 34 124 80 6 --156 107 11 180 123 7 192 133 9 200 144 11 --206 145 10 200 144 11 192 133 9 175 118 6 --139 102 15 109 106 95 70 70 70 42 42 42 -- 22 22 22 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 10 10 10 -- 14 14 14 22 22 22 30 30 30 38 38 38 -- 50 50 50 62 62 62 74 74 74 90 90 90 --101 98 89 112 100 78 121 87 25 124 80 6 --137 92 6 152 99 6 152 99 6 152 99 6 --138 86 6 124 80 6 98 70 6 86 66 30 --101 98 89 82 82 82 58 58 58 46 46 46 -- 38 38 38 34 34 34 34 34 34 34 34 34 -- 34 34 34 34 34 34 34 34 34 34 34 34 -- 34 34 34 34 34 34 38 38 38 42 42 42 -- 54 54 54 82 82 82 94 86 76 91 60 6 --134 86 6 156 107 11 167 114 7 175 118 6 --175 118 6 167 114 7 152 99 6 121 87 25 --101 98 89 62 62 62 34 34 34 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 6 6 6 10 10 10 -- 18 18 18 22 22 22 30 30 30 42 42 42 -- 50 50 50 66 66 66 86 86 86 101 98 89 --106 86 58 98 70 6 104 69 6 104 69 6 --104 69 6 91 60 6 82 62 34 90 90 90 -- 62 62 62 38 38 38 22 22 22 14 14 14 -- 10 10 10 10 10 10 10 10 10 10 10 10 -- 10 10 10 10 10 10 6 6 6 10 10 10 -- 10 10 10 10 10 10 10 10 10 14 14 14 -- 22 22 22 42 42 42 70 70 70 89 81 66 -- 80 54 7 104 69 6 124 80 6 137 92 6 --134 86 6 116 81 8 100 82 52 86 86 86 -- 58 58 58 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 10 10 10 14 14 14 -- 18 18 18 26 26 26 38 38 38 54 54 54 -- 70 70 70 86 86 86 94 86 76 89 81 66 -- 89 81 66 86 86 86 74 74 74 50 50 50 -- 30 30 30 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 34 34 34 58 58 58 -- 82 82 82 89 81 66 89 81 66 89 81 66 -- 94 86 66 94 86 76 74 74 74 50 50 50 -- 26 26 26 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 6 6 6 14 14 14 18 18 18 -- 30 30 30 38 38 38 46 46 46 54 54 54 -- 50 50 50 42 42 42 30 30 30 18 18 18 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 26 26 26 -- 38 38 38 50 50 50 58 58 58 58 58 58 -- 54 54 54 42 42 42 30 30 30 18 18 18 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 6 6 6 10 10 10 14 14 14 18 18 18 -- 18 18 18 14 14 14 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 14 14 14 18 18 18 22 22 22 22 22 22 -- 18 18 18 14 14 14 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 23 30 36 44 54 65 57 72 88 44 54 65 6 12 15 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 31 41 52 -+103 134 161 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 -+82 108 129 8 14 16 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 17 24 30 126 162 196 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 161 203 243 92 119 140 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 154 195 235 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 138 174 208 21 27 33 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 70 96 117 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 49 59 70 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 3 6 52 62 74 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 -+82 108 129 149 191 231 170 212 252 170 212 252 170 212 252 129 165 199 82 108 129 149 191 231 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 37 48 59 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 21 13 4 31 23 12 0 2 0 0 2 0 105 75 32 155 111 43 23 15 7 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 6 9 3 10 13 146 188 228 170 212 252 170 212 252 170 212 252 157 198 239 0 6 9 -+0 2 0 52 62 74 170 212 252 170 212 252 154 195 235 0 6 9 0 2 0 55 66 77 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 151 193 233 17 24 30 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+10 12 8 23 15 7 139 99 44 206 148 61 67 49 21 0 2 0 125 92 35 206 148 61 -+15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 96 127 154 170 212 252 170 212 252 170 212 252 170 212 252 92 119 140 21 22 20 -+10 12 8 53 68 84 170 212 252 170 212 252 92 119 140 10 12 8 7 10 5 53 68 84 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 -+0 6 9 0 3 6 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 22 20 -+62 64 61 38 40 37 0 2 0 34 26 8 212 153 66 64 46 18 0 2 0 170 124 49 -+180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 65 87 102 115 117 114 -+43 44 42 88 115 136 170 212 252 170 212 252 68 83 99 108 110 107 60 62 59 88 115 136 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+80 98 121 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 10 12 8 56 58 55 95 96 94 178 180 177 215 217 214 198 200 197 -+158 160 156 138 140 137 82 83 81 0 2 0 64 46 18 228 167 73 23 15 7 41 31 10 -+250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 -+0 2 0 126 162 196 170 212 252 170 212 252 57 72 88 0 2 0 0 2 0 126 162 196 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+157 198 239 8 14 16 0 6 9 0 2 0 45 47 44 195 197 194 192 194 191 38 40 37 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 192 194 191 234 236 233 176 178 175 118 120 117 143 145 142 176 178 175 -+215 217 214 234 236 233 234 236 233 104 106 103 0 2 0 142 101 40 134 100 43 0 2 0 -+164 119 51 170 124 49 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 115 152 185 8 14 16 -+49 59 70 166 207 248 170 212 252 170 212 252 119 150 178 8 14 16 55 66 77 166 207 248 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 92 119 140 0 2 0 0 2 0 200 202 199 254 255 252 254 255 252 244 246 243 -+40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 38 40 37 234 236 233 234 236 233 234 236 233 135 137 134 215 217 214 171 173 170 -+141 142 139 138 140 137 138 140 137 135 137 134 31 32 30 3 6 2 212 153 66 15 9 7 -+78 58 25 248 178 79 41 31 10 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 3 6 21 27 33 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 154 195 235 0 6 9 82 83 81 254 255 252 254 255 252 254 255 252 254 255 252 -+188 190 187 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 62 64 61 234 236 233 234 236 233 234 236 233 198 200 197 131 133 130 198 200 197 -+232 234 231 234 236 233 234 236 233 234 236 233 152 154 151 0 2 0 147 105 44 67 49 21 -+23 15 7 250 179 73 158 114 46 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 61 76 92 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 154 195 235 103 134 161 80 98 121 -+52 62 74 18 22 24 0 2 0 3 10 13 38 45 51 80 98 121 151 193 233 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 109 141 168 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 -+226 228 225 65 66 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 43 44 42 234 236 233 234 236 233 234 236 233 234 236 233 131 133 130 192 194 191 -+152 154 151 141 142 139 141 142 139 141 142 139 158 160 156 3 6 2 82 62 28 129 95 39 -+0 2 0 206 148 61 248 178 79 21 13 4 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 96 115 138 -+170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 18 22 24 0 2 0 0 2 0 -+34 26 8 75 55 22 114 83 33 95 68 30 55 39 17 7 0 0 0 6 9 84 103 125 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 84 103 125 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 171 173 170 -+0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 18 20 17 234 236 233 234 236 233 234 236 233 234 236 233 138 140 137 178 180 177 -+226 228 225 234 236 233 234 236 233 234 236 233 231 233 230 45 47 44 23 15 7 190 136 56 -+0 2 0 147 105 44 250 179 73 64 46 18 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 126 162 196 0 2 0 26 20 13 190 136 56 245 175 76 -+250 179 73 161 117 49 164 119 51 245 175 76 250 179 73 206 148 61 75 55 22 0 2 0 -+126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 68 83 99 0 2 0 252 254 250 254 255 252 254 255 252 254 255 252 71 73 70 -+8 14 16 88 115 136 17 24 30 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 232 234 231 234 236 233 234 236 233 234 236 233 215 217 214 148 150 147 -+183 185 181 141 142 139 135 137 134 135 137 134 141 142 139 87 89 86 0 2 0 202 145 58 -+3 6 2 88 66 26 250 179 73 109 79 35 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 157 198 239 -+170 212 252 170 212 252 166 207 248 26 33 39 26 20 13 224 163 69 250 179 73 250 179 73 -+250 179 73 197 142 62 202 145 58 250 179 73 250 179 73 250 179 73 234 172 70 21 13 4 -+38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 52 62 74 21 22 20 254 255 252 254 255 252 254 255 252 254 255 252 21 22 20 -+49 59 70 170 212 252 166 207 248 91 123 149 8 14 16 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 215 217 214 234 236 233 234 236 233 234 236 233 234 236 233 123 125 122 -+188 190 187 229 231 228 234 236 233 234 236 233 222 224 221 118 120 117 0 2 0 168 123 54 -+34 26 8 67 49 21 250 179 73 134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 34 41 47 170 212 252 -+170 212 252 170 212 252 85 112 133 0 2 0 164 119 51 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 129 95 39 -+0 2 0 138 174 208 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 34 44 55 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 24 22 25 -+52 62 74 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 178 180 177 234 236 233 234 236 233 234 236 233 234 236 233 141 142 139 -+198 200 197 148 150 147 135 137 134 135 137 134 148 150 147 123 125 122 0 2 0 190 136 56 -+21 13 4 78 58 25 250 179 73 129 95 39 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 82 108 129 170 212 252 -+170 212 252 170 212 252 23 30 36 58 42 19 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 147 105 44 -+0 2 0 139 181 221 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 34 41 47 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 -+25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 6 9 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 91 93 90 234 236 233 234 236 233 234 236 233 234 236 233 126 127 125 -+169 171 168 222 224 221 234 236 233 229 231 228 178 180 177 71 73 70 0 2 0 212 153 66 -+0 2 0 95 68 30 250 179 73 119 87 37 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 138 174 208 170 212 252 -+170 212 252 154 195 235 0 2 0 125 92 35 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 119 87 37 -+0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 57 72 88 7 10 5 252 254 250 254 255 252 254 255 252 254 255 252 95 96 94 -+0 6 9 166 207 248 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 8 14 16 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 7 10 5 222 224 221 234 236 233 234 236 233 234 236 233 141 142 139 -+183 185 181 138 140 137 131 133 130 141 142 139 192 194 191 102 104 101 0 2 0 224 163 69 -+0 2 0 105 75 32 250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 27 33 170 212 252 170 212 252 -+170 212 252 115 152 185 0 2 0 180 132 57 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 10 12 8 -+38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 82 108 129 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 158 160 156 -+0 2 0 92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 141 142 139 234 236 233 234 236 233 234 236 233 131 133 130 -+185 187 183 231 233 230 222 224 221 158 160 156 138 140 137 48 50 48 3 6 2 250 179 73 -+134 100 43 206 148 61 218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 75 94 116 170 212 252 170 212 252 -+170 212 252 92 119 140 0 2 0 224 163 69 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 87 61 23 7 0 0 -+134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 109 141 168 0 2 0 178 180 177 254 255 252 254 255 252 254 255 252 252 254 250 -+39 43 45 10 16 18 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+88 115 136 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 45 47 44 234 236 233 234 236 233 234 236 233 131 133 130 -+148 150 147 138 140 137 148 150 147 210 212 209 152 154 151 26 27 25 29 21 8 250 179 73 -+250 179 73 234 172 70 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 170 212 252 -+170 212 252 103 134 161 0 2 0 202 145 58 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 238 175 73 75 55 22 0 2 0 75 102 123 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 140 177 211 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 -+183 185 181 0 2 0 75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 57 72 88 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 162 164 161 234 236 233 234 236 233 135 137 134 -+226 228 225 198 200 197 104 106 103 15 17 14 0 2 0 15 9 7 147 105 44 250 179 73 -+248 178 79 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 21 27 33 170 212 252 170 212 252 170 212 252 -+170 212 252 122 159 192 0 2 0 175 129 54 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 202 145 58 55 39 17 0 2 0 82 108 129 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 12 17 20 60 62 59 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 69 71 68 0 6 9 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 159 201 241 26 33 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 162 164 161 215 217 214 95 96 94 -+56 58 55 0 2 0 0 2 0 0 2 0 61 44 16 238 175 73 250 179 73 250 179 73 -+218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 88 115 136 170 212 252 170 212 252 170 212 252 -+170 212 252 143 185 225 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 212 153 66 95 68 30 0 2 0 8 14 16 103 134 161 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 68 83 99 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 -+254 255 252 210 212 209 0 6 9 53 68 84 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 126 162 196 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 23 15 7 250 179 73 250 179 73 250 179 73 -+250 179 73 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 166 207 248 0 2 0 52 36 13 158 114 46 180 132 57 161 117 49 119 87 37 -+41 31 10 0 2 0 0 2 0 72 87 103 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 115 152 185 0 2 0 152 154 151 254 255 252 238 241 237 85 87 84 -+229 231 228 254 255 252 99 101 98 0 2 0 126 162 196 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 -+250 179 73 105 75 32 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 32 39 45 0 2 0 57 72 88 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 85 112 133 12 17 20 0 2 0 0 2 0 0 2 0 0 2 0 -+34 41 47 92 110 133 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 166 207 248 6 12 15 71 73 70 254 255 252 229 231 228 0 2 0 -+141 142 139 254 255 252 231 233 230 10 12 8 34 44 55 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 154 195 235 6 12 15 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 125 92 35 250 179 73 250 179 73 -+250 179 73 180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 68 83 99 -+129 165 199 85 112 133 0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 126 162 196 119 156 189 134 170 204 149 191 231 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 57 72 88 3 6 2 242 244 240 254 255 252 35 37 34 -+78 80 77 254 255 252 254 255 252 128 130 127 0 2 0 105 137 164 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 91 123 149 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 55 39 17 250 179 73 250 179 73 -+250 179 73 245 175 76 7 10 5 0 2 0 44 54 65 103 134 161 161 203 243 170 212 252 -+170 212 252 21 27 33 25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 61 76 92 0 2 0 242 244 240 254 255 252 102 104 101 -+10 12 8 231 233 230 254 255 252 244 246 243 26 27 25 21 27 33 159 201 241 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 32 39 45 0 6 9 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 218 158 64 250 179 73 -+250 179 73 250 179 73 75 55 22 0 2 0 161 203 243 170 212 252 170 212 252 170 212 252 -+115 147 174 0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 159 201 241 146 188 228 -+140 177 211 134 170 204 146 188 228 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 17 24 30 62 64 61 254 255 252 254 255 252 215 217 214 -+0 2 0 102 104 101 254 255 252 254 255 252 166 168 165 0 2 0 72 87 103 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 75 32 250 179 73 -+250 179 73 250 179 73 150 108 46 0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 -+49 59 70 3 10 13 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 166 207 248 109 141 168 65 87 102 28 35 41 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 28 35 41 70 96 117 138 174 208 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 0 2 0 102 104 101 254 255 252 254 255 252 254 255 252 -+102 104 101 0 2 0 192 194 191 254 255 252 254 255 252 78 80 77 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 34 44 55 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 61 76 92 154 195 235 0 6 9 29 21 8 250 179 73 -+250 179 73 250 179 73 224 163 69 0 2 0 68 83 99 170 212 252 170 212 252 143 179 213 -+0 2 0 72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+161 203 243 96 115 138 17 24 30 0 2 0 0 2 0 45 47 44 102 104 101 123 125 122 -+138 140 137 143 145 142 115 117 114 82 83 81 43 44 42 0 2 0 0 2 0 32 39 45 -+126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 0 2 0 85 87 84 254 255 252 254 255 252 254 255 252 -+242 244 240 27 29 27 35 37 34 254 255 252 254 255 252 231 233 230 10 12 8 21 27 33 -+159 201 241 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 6 9 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 44 54 65 170 212 252 170 212 252 34 44 55 0 2 0 82 62 28 -+109 79 35 224 163 69 250 179 73 52 36 13 15 20 22 170 212 252 170 212 252 75 89 106 -+0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 -+25 32 38 0 2 0 40 41 39 155 157 153 238 241 237 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 115 117 114 18 20 17 -+0 2 0 68 83 99 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 52 62 74 7 10 5 234 236 233 254 255 252 254 255 252 -+254 255 252 195 197 194 102 104 101 254 255 252 254 255 252 254 255 252 162 164 161 0 2 0 -+72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 119 156 189 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 115 147 174 170 212 252 91 123 149 0 2 0 0 2 0 6 12 15 -+0 2 0 15 9 7 197 142 62 125 92 35 0 2 0 115 152 185 113 145 172 3 6 2 -+41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 113 145 172 0 6 9 -+10 12 8 155 157 153 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 232 234 231 -+87 89 86 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 115 152 185 0 2 0 138 140 137 254 255 252 254 255 252 -+254 255 252 254 255 252 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 65 66 64 -+0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 154 195 235 170 212 252 143 179 213 88 115 136 149 191 231 170 212 252 -+126 162 196 3 6 2 64 46 18 202 145 58 0 2 0 0 2 0 0 2 0 0 2 0 -+92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 143 179 213 3 10 13 27 29 27 -+215 217 214 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 155 157 153 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 23 30 36 27 29 27 249 251 248 254 255 252 -+254 255 252 188 190 187 7 10 5 226 228 225 254 255 252 254 255 252 254 255 252 231 233 230 -+7 10 5 21 27 33 159 201 241 170 212 252 103 134 161 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 55 66 77 11 4 3 250 179 73 24 17 10 0 2 0 0 2 0 0 2 0 -+143 185 225 170 212 252 170 212 252 170 212 252 159 201 241 28 35 41 7 10 5 200 202 199 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 155 157 153 0 2 0 55 66 77 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 96 127 154 0 2 0 158 160 156 254 255 252 -+254 255 252 192 194 191 0 2 0 176 178 175 254 255 252 254 255 252 254 255 252 254 255 252 -+141 142 139 0 2 0 72 87 103 129 165 199 0 6 9 0 6 9 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 12 17 20 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 -+138 174 208 17 24 30 29 21 8 250 179 73 101 72 28 0 2 0 0 2 0 32 39 45 -+170 212 252 170 212 252 170 212 252 170 212 252 57 72 88 0 2 0 152 154 151 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 108 110 107 0 2 0 115 152 185 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 18 22 24 40 41 39 254 255 252 -+254 255 252 232 234 231 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 10 12 8 0 2 0 8 14 16 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 41 51 62 61 76 92 34 44 55 3 10 13 -+0 2 0 11 4 3 164 119 51 250 179 73 175 129 54 0 2 0 0 2 0 82 108 129 -+170 212 252 170 212 252 170 212 252 98 129 156 0 2 0 95 96 94 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 238 241 237 18 20 17 25 32 38 166 207 248 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 85 112 133 0 2 0 188 190 187 -+254 255 252 254 255 252 198 200 197 242 244 240 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 120 122 119 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 6 9 7 0 0 -+31 23 12 202 145 58 250 179 73 250 179 73 238 175 73 0 2 0 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 28 35 41 31 32 30 244 246 243 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 85 112 133 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 0 2 0 148 150 147 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 222 224 221 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+7 0 0 234 172 70 250 179 73 250 179 73 250 179 73 34 26 8 0 2 0 149 191 231 -+170 212 252 170 212 252 129 165 199 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 48 50 48 3 10 13 146 188 228 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 0 2 0 118 120 117 -+254 255 252 254 255 252 254 255 252 169 171 168 231 233 230 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 170 124 49 250 179 73 250 179 73 250 179 73 48 33 15 6 12 15 170 212 252 -+170 212 252 170 212 252 65 87 102 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 195 197 194 0 2 0 84 103 125 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 3 10 13 85 87 84 -+254 255 252 254 255 252 234 236 233 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 99 101 98 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 95 68 30 250 179 73 250 179 73 250 179 73 34 26 8 34 44 55 170 212 252 -+170 212 252 163 205 246 8 14 16 62 64 61 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 35 37 34 34 44 55 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 26 33 39 60 62 59 -+254 255 252 254 255 252 238 241 237 0 2 0 108 110 107 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 158 160 156 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 23 15 7 248 178 79 250 179 73 245 175 76 0 2 0 63 78 94 170 212 252 -+170 212 252 109 141 168 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 104 106 103 0 2 0 -+154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 69 71 68 -+254 255 252 254 255 252 244 246 243 0 2 0 91 93 90 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 215 217 214 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 197 142 62 250 179 73 212 153 66 0 2 0 92 110 133 170 212 252 -+170 212 252 80 98 121 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 176 178 175 0 2 0 -+105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 8 14 16 87 89 86 -+254 255 252 254 255 252 254 255 252 40 41 39 21 22 20 252 254 250 254 255 252 254 255 252 -+254 255 252 254 255 252 252 254 250 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 125 92 35 250 179 73 170 124 49 0 2 0 113 145 172 170 212 252 -+170 212 252 53 68 84 15 17 14 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 242 244 240 0 2 0 -+63 78 94 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 0 2 0 104 106 103 -+254 255 252 254 255 252 254 255 252 123 125 122 0 2 0 166 168 165 254 255 252 254 255 252 -+254 255 252 254 255 252 234 236 233 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 7 0 0 52 36 13 250 179 73 129 95 39 0 2 0 143 179 213 170 212 252 -+170 212 252 32 39 45 48 50 48 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 60 62 59 -+18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 2 0 102 104 101 -+254 255 252 254 255 252 254 255 252 226 228 225 15 17 14 10 12 8 215 217 214 254 255 252 -+254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 88 66 26 29 21 8 0 2 0 166 207 248 170 212 252 -+170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 123 125 122 -+0 2 0 149 191 231 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 56 58 55 -+254 255 252 254 255 252 254 255 252 254 255 252 178 180 177 0 2 0 38 40 37 238 241 237 -+254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 7 0 0 0 2 0 161 203 243 170 212 252 -+149 191 231 0 2 0 123 125 122 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 141 142 139 -+0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 -+210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 120 122 119 0 2 0 21 22 20 -+143 145 142 244 246 243 219 221 218 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 149 191 231 170 212 252 -+129 165 199 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 155 157 153 -+0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 0 6 9 -+69 71 68 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 71 73 70 0 2 0 -+0 2 0 0 2 0 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 170 212 252 -+129 165 199 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 169 171 168 -+0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 75 94 116 -+0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 134 170 204 170 212 252 -+134 170 204 0 2 0 152 154 151 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 -+0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 -+44 54 65 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 35 37 34 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 -+138 174 208 0 2 0 143 145 142 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 198 200 197 -+0 2 0 103 134 161 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+157 198 239 28 35 41 0 2 0 188 190 187 254 255 252 252 254 250 3 6 2 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 115 152 185 170 212 252 -+143 179 213 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 -+0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 146 188 228 0 6 9 26 27 25 242 244 240 176 178 175 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 170 212 252 -+143 185 225 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 185 187 183 -+0 2 0 105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 163 205 246 0 2 0 0 2 0 102 104 101 60 62 59 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 80 98 121 170 212 252 -+149 191 231 0 2 0 118 120 117 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 143 145 142 -+0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 143 179 213 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 170 212 252 -+170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 108 110 107 -+0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 115 152 185 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 170 212 252 -+170 212 252 34 44 55 43 44 42 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 -+15 20 22 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 75 94 116 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 -+170 212 252 63 78 94 3 6 2 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 31 32 30 -+41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+161 203 243 6 12 15 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 -+170 212 252 88 115 136 0 2 0 210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 249 251 248 0 2 0 -+68 83 99 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+96 127 154 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 61 76 92 -+170 212 252 119 150 178 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 0 2 0 -+91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+28 35 41 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 -+146 188 228 143 185 225 0 2 0 126 127 125 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 85 87 84 0 6 9 -+154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 98 129 156 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+72 90 112 170 212 252 18 22 24 56 58 55 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 238 241 237 7 10 5 55 66 77 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 0 6 9 -+0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 122 159 192 72 87 103 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 113 145 172 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 139 181 221 8 14 16 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 18 22 24 109 141 168 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 12 17 20 166 207 248 -+170 212 252 170 212 252 170 212 252 170 212 252 146 188 228 23 30 36 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 101 72 28 202 145 58 -+180 132 57 0 2 0 38 45 51 3 10 13 69 71 68 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 200 202 199 0 2 0 75 89 106 170 212 252 -+170 212 252 170 212 252 170 212 252 109 141 168 8 14 16 0 2 0 21 13 4 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 7 0 0 0 2 0 101 72 28 218 158 64 250 179 73 250 179 73 -+250 179 73 139 99 44 0 2 0 8 14 16 0 2 0 238 241 237 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 244 246 243 38 40 37 3 10 13 139 181 221 170 212 252 -+170 212 252 161 203 243 66 80 97 0 2 0 31 23 12 191 142 60 248 183 74 180 132 57 -+44 34 15 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 23 15 7 190 136 56 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 150 108 46 0 2 0 0 2 0 82 83 81 222 224 221 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 102 104 101 0 2 0 98 129 156 170 212 252 163 205 246 -+98 129 156 23 30 36 0 2 0 82 62 28 234 172 70 248 183 74 248 183 74 248 183 74 -+248 183 74 158 114 46 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 64 46 18 109 79 35 150 108 46 224 163 69 250 179 73 -+250 179 73 250 179 73 250 179 73 158 114 46 0 2 0 0 2 0 3 6 2 115 117 114 -+234 236 233 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 176 178 175 0 2 0 57 72 88 146 188 228 80 98 121 8 14 16 -+0 2 0 24 17 10 158 114 46 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 242 178 77 58 42 19 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 0 2 0 67 49 21 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 95 68 30 0 2 0 0 2 0 -+0 2 0 52 54 51 108 110 107 162 164 161 219 221 218 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 -+219 221 218 178 180 177 18 20 17 6 12 15 26 33 39 0 2 0 0 2 0 52 36 13 -+164 119 51 242 178 77 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 242 178 77 -+187 138 56 175 129 54 158 114 46 82 62 28 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 78 58 25 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 234 172 70 142 101 40 -+44 34 15 10 12 8 0 2 0 0 2 0 0 2 0 18 20 17 60 62 59 71 73 70 -+82 83 81 95 96 94 104 106 103 118 120 117 115 117 114 78 80 77 40 41 39 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 44 34 15 105 75 32 191 142 60 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 105 75 32 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 187 138 56 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 142 101 40 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 206 148 61 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 161 117 49 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 228 167 73 250 179 73 -+238 175 73 190 136 56 158 114 46 234 172 70 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 147 105 44 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 67 49 21 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 -+31 23 12 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 21 13 4 -+0 2 0 0 2 0 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 -+134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 155 111 43 248 183 74 248 183 74 -+248 183 74 248 183 74 224 163 69 55 39 17 64 46 18 164 119 51 242 178 77 248 183 74 -+75 55 22 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 228 167 73 88 66 26 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 168 123 54 248 183 74 -+248 183 74 248 183 74 158 114 46 0 2 0 7 0 0 0 2 0 10 12 8 44 34 15 -+15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 29 21 8 250 179 73 250 179 73 158 114 46 15 14 3 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 175 129 54 -+248 183 74 248 183 74 114 83 33 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 29 21 8 147 105 44 58 42 19 0 2 0 7 0 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+105 75 32 218 158 64 23 15 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -diff --git a/drivers/video/logo/logo_linux_mono.pbm b/drivers/video/logo/logo_linux_mono.pbm -index 2f14d9f..3d3c358 100644 ---- a/drivers/video/logo/logo_linux_mono.pbm -+++ b/drivers/video/logo/logo_linux_mono.pbm -@@ -1,203 +1,159 @@ --P1 --# Standard black and white Linux logo --80 80 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 --1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 1 1 --1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 --1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 --0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 --1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 --0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 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 1 1 1 1 1 1 1 1 1 1 1 0 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 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 1 1 0 1 1 1 1 1 1 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 --1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 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 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 0 0 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 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 1 1 1 0 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 0 0 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 1 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 --1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 --1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 --1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 --1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 --1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -+P2 -+80 78 -+255 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 255 255 255 255 255 0 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 -+255 0 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 -+255 255 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 -+255 255 0 0 0 0 0 0 0 0 -+0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 -+255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 255 255 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 0 255 255 0 0 255 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 255 255 255 0 0 255 -+255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 255 -+255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 0 -+255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 -+0 255 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 -+0 255 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 -+0 0 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 255 255 255 -+255 0 0 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 255 0 0 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 -+255 0 0 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 0 0 255 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 255 255 255 -+255 255 0 0 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 255 255 255 255 0 255 255 255 -+255 255 255 0 0 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 0 255 255 255 -+255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 0 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 0 -+0 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 255 -+0 0 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -diff --git a/drivers/video/logo/logo_linux_vga16.ppm b/drivers/video/logo/logo_linux_vga16.ppm -index 1850c15..f279f97 100644 ---- a/drivers/video/logo/logo_linux_vga16.ppm -+++ b/drivers/video/logo/logo_linux_vga16.ppm -@@ -1,1604 +1,18724 @@ - P3 --# Standard 16-color Linux logo --80 80 --255 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 170 170 170 85 85 85 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 170 170 170 170 170 --170 170 170 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 170 170 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 170 170 170 255 255 255 255 255 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 255 255 255 170 170 170 170 170 170 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 0 0 0 0 0 0 255 255 255 -- 85 85 85 0 0 0 0 0 0 0 0 0 --255 255 255 170 170 170 0 0 0 85 85 85 --170 170 170 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 170 170 170 -- 85 85 85 0 0 0 0 0 0 0 0 0 --255 255 255 85 85 85 0 0 0 0 0 0 -- 85 85 85 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 0 0 0 0 0 0 170 170 170 -- 85 85 85 85 85 85 85 85 85 85 85 85 --255 255 255 85 85 85 0 0 0 0 0 0 -- 85 85 85 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 170 170 170 170 170 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 170 170 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 170 85 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 85 85 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 85 85 85 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 170 170 170 170 170 170 170 170 0 0 0 -- 0 0 0 0 0 0 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 170 170 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 170 170 170 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 170 170 170 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 170 170 170 --170 170 170 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 170 170 170 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 170 170 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 170 170 170 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 85 85 85 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 0 0 0 85 85 85 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 85 85 85 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 -- 0 0 0 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 85 85 85 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 85 85 85 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 170 170 170 -- 85 85 85 0 0 0 0 0 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 85 85 85 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 170 85 0 170 85 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 85 85 85 85 85 85 170 85 0 --170 85 0 170 85 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -+# CREATOR: GIMP PNM Filter Version 1.1 -+80 78 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 diff --git a/kernels/linux-libre-pae/logo_linux_clut224.ppm b/kernels/linux-libre-pae/logo_linux_clut224.ppm new file mode 100644 index 000000000..c9d837347 --- /dev/null +++ b/kernels/linux-libre-pae/logo_linux_clut224.ppm @@ -0,0 +1,861 @@ +P3 +80 78 +255 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 23 30 36 44 54 65 57 72 88 44 54 65 6 12 15 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 31 41 52 +103 134 161 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 +82 108 129 8 14 16 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 17 24 30 126 162 196 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 161 203 243 92 119 140 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 154 195 235 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 138 174 208 21 27 33 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 70 96 117 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 49 59 70 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 3 6 52 62 74 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 +82 108 129 149 191 231 170 212 252 170 212 252 170 212 252 129 165 199 82 108 129 149 191 231 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 37 48 59 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 21 13 4 31 23 12 0 2 0 0 2 0 105 75 32 155 111 43 23 15 7 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 6 9 3 10 13 146 188 228 170 212 252 170 212 252 170 212 252 157 198 239 0 6 9 +0 2 0 52 62 74 170 212 252 170 212 252 154 195 235 0 6 9 0 2 0 55 66 77 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 151 193 233 17 24 30 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +10 12 8 23 15 7 139 99 44 206 148 61 67 49 21 0 2 0 125 92 35 206 148 61 +15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 96 127 154 170 212 252 170 212 252 170 212 252 170 212 252 92 119 140 21 22 20 +10 12 8 53 68 84 170 212 252 170 212 252 92 119 140 10 12 8 7 10 5 53 68 84 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 +0 6 9 0 3 6 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 22 20 +62 64 61 38 40 37 0 2 0 34 26 8 212 153 66 64 46 18 0 2 0 170 124 49 +180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 65 87 102 115 117 114 +43 44 42 88 115 136 170 212 252 170 212 252 68 83 99 108 110 107 60 62 59 88 115 136 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +80 98 121 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 10 12 8 56 58 55 95 96 94 178 180 177 215 217 214 198 200 197 +158 160 156 138 140 137 82 83 81 0 2 0 64 46 18 228 167 73 23 15 7 41 31 10 +250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 +0 2 0 126 162 196 170 212 252 170 212 252 57 72 88 0 2 0 0 2 0 126 162 196 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +157 198 239 8 14 16 0 6 9 0 2 0 45 47 44 195 197 194 192 194 191 38 40 37 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 192 194 191 234 236 233 176 178 175 118 120 117 143 145 142 176 178 175 +215 217 214 234 236 233 234 236 233 104 106 103 0 2 0 142 101 40 134 100 43 0 2 0 +164 119 51 170 124 49 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 115 152 185 8 14 16 +49 59 70 166 207 248 170 212 252 170 212 252 119 150 178 8 14 16 55 66 77 166 207 248 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 92 119 140 0 2 0 0 2 0 200 202 199 254 255 252 254 255 252 244 246 243 +40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 38 40 37 234 236 233 234 236 233 234 236 233 135 137 134 215 217 214 171 173 170 +141 142 139 138 140 137 138 140 137 135 137 134 31 32 30 3 6 2 212 153 66 15 9 7 +78 58 25 248 178 79 41 31 10 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 3 6 21 27 33 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 154 195 235 0 6 9 82 83 81 254 255 252 254 255 252 254 255 252 254 255 252 +188 190 187 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 62 64 61 234 236 233 234 236 233 234 236 233 198 200 197 131 133 130 198 200 197 +232 234 231 234 236 233 234 236 233 234 236 233 152 154 151 0 2 0 147 105 44 67 49 21 +23 15 7 250 179 73 158 114 46 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 61 76 92 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 154 195 235 103 134 161 80 98 121 +52 62 74 18 22 24 0 2 0 3 10 13 38 45 51 80 98 121 151 193 233 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 109 141 168 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 +226 228 225 65 66 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 43 44 42 234 236 233 234 236 233 234 236 233 234 236 233 131 133 130 192 194 191 +152 154 151 141 142 139 141 142 139 141 142 139 158 160 156 3 6 2 82 62 28 129 95 39 +0 2 0 206 148 61 248 178 79 21 13 4 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 96 115 138 +170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 18 22 24 0 2 0 0 2 0 +34 26 8 75 55 22 114 83 33 95 68 30 55 39 17 7 0 0 0 6 9 84 103 125 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 84 103 125 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 171 173 170 +0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 18 20 17 234 236 233 234 236 233 234 236 233 234 236 233 138 140 137 178 180 177 +226 228 225 234 236 233 234 236 233 234 236 233 231 233 230 45 47 44 23 15 7 190 136 56 +0 2 0 147 105 44 250 179 73 64 46 18 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 126 162 196 0 2 0 26 20 13 190 136 56 245 175 76 +250 179 73 161 117 49 164 119 51 245 175 76 250 179 73 206 148 61 75 55 22 0 2 0 +126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 68 83 99 0 2 0 252 254 250 254 255 252 254 255 252 254 255 252 71 73 70 +8 14 16 88 115 136 17 24 30 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 232 234 231 234 236 233 234 236 233 234 236 233 215 217 214 148 150 147 +183 185 181 141 142 139 135 137 134 135 137 134 141 142 139 87 89 86 0 2 0 202 145 58 +3 6 2 88 66 26 250 179 73 109 79 35 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 157 198 239 +170 212 252 170 212 252 166 207 248 26 33 39 26 20 13 224 163 69 250 179 73 250 179 73 +250 179 73 197 142 62 202 145 58 250 179 73 250 179 73 250 179 73 234 172 70 21 13 4 +38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 52 62 74 21 22 20 254 255 252 254 255 252 254 255 252 254 255 252 21 22 20 +49 59 70 170 212 252 166 207 248 91 123 149 8 14 16 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 215 217 214 234 236 233 234 236 233 234 236 233 234 236 233 123 125 122 +188 190 187 229 231 228 234 236 233 234 236 233 222 224 221 118 120 117 0 2 0 168 123 54 +34 26 8 67 49 21 250 179 73 134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 34 41 47 170 212 252 +170 212 252 170 212 252 85 112 133 0 2 0 164 119 51 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 129 95 39 +0 2 0 138 174 208 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 34 44 55 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 24 22 25 +52 62 74 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 178 180 177 234 236 233 234 236 233 234 236 233 234 236 233 141 142 139 +198 200 197 148 150 147 135 137 134 135 137 134 148 150 147 123 125 122 0 2 0 190 136 56 +21 13 4 78 58 25 250 179 73 129 95 39 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 82 108 129 170 212 252 +170 212 252 170 212 252 23 30 36 58 42 19 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 147 105 44 +0 2 0 139 181 221 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 34 41 47 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 +25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 6 9 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 91 93 90 234 236 233 234 236 233 234 236 233 234 236 233 126 127 125 +169 171 168 222 224 221 234 236 233 229 231 228 178 180 177 71 73 70 0 2 0 212 153 66 +0 2 0 95 68 30 250 179 73 119 87 37 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 138 174 208 170 212 252 +170 212 252 154 195 235 0 2 0 125 92 35 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 119 87 37 +0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 57 72 88 7 10 5 252 254 250 254 255 252 254 255 252 254 255 252 95 96 94 +0 6 9 166 207 248 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 8 14 16 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 7 10 5 222 224 221 234 236 233 234 236 233 234 236 233 141 142 139 +183 185 181 138 140 137 131 133 130 141 142 139 192 194 191 102 104 101 0 2 0 224 163 69 +0 2 0 105 75 32 250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 27 33 170 212 252 170 212 252 +170 212 252 115 152 185 0 2 0 180 132 57 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 10 12 8 +38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 82 108 129 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 158 160 156 +0 2 0 92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 141 142 139 234 236 233 234 236 233 234 236 233 131 133 130 +185 187 183 231 233 230 222 224 221 158 160 156 138 140 137 48 50 48 3 6 2 250 179 73 +134 100 43 206 148 61 218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 75 94 116 170 212 252 170 212 252 +170 212 252 92 119 140 0 2 0 224 163 69 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 87 61 23 7 0 0 +134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 109 141 168 0 2 0 178 180 177 254 255 252 254 255 252 254 255 252 252 254 250 +39 43 45 10 16 18 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +88 115 136 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 45 47 44 234 236 233 234 236 233 234 236 233 131 133 130 +148 150 147 138 140 137 148 150 147 210 212 209 152 154 151 26 27 25 29 21 8 250 179 73 +250 179 73 234 172 70 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 170 212 252 +170 212 252 103 134 161 0 2 0 202 145 58 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 238 175 73 75 55 22 0 2 0 75 102 123 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 140 177 211 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 +183 185 181 0 2 0 75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 57 72 88 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 162 164 161 234 236 233 234 236 233 135 137 134 +226 228 225 198 200 197 104 106 103 15 17 14 0 2 0 15 9 7 147 105 44 250 179 73 +248 178 79 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 21 27 33 170 212 252 170 212 252 170 212 252 +170 212 252 122 159 192 0 2 0 175 129 54 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 202 145 58 55 39 17 0 2 0 82 108 129 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 12 17 20 60 62 59 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 69 71 68 0 6 9 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 159 201 241 26 33 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 162 164 161 215 217 214 95 96 94 +56 58 55 0 2 0 0 2 0 0 2 0 61 44 16 238 175 73 250 179 73 250 179 73 +218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 88 115 136 170 212 252 170 212 252 170 212 252 +170 212 252 143 185 225 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 212 153 66 95 68 30 0 2 0 8 14 16 103 134 161 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 68 83 99 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 +254 255 252 210 212 209 0 6 9 53 68 84 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 126 162 196 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 23 15 7 250 179 73 250 179 73 250 179 73 +250 179 73 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 166 207 248 0 2 0 52 36 13 158 114 46 180 132 57 161 117 49 119 87 37 +41 31 10 0 2 0 0 2 0 72 87 103 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 115 152 185 0 2 0 152 154 151 254 255 252 238 241 237 85 87 84 +229 231 228 254 255 252 99 101 98 0 2 0 126 162 196 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 +250 179 73 105 75 32 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 32 39 45 0 2 0 57 72 88 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 85 112 133 12 17 20 0 2 0 0 2 0 0 2 0 0 2 0 +34 41 47 92 110 133 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 166 207 248 6 12 15 71 73 70 254 255 252 229 231 228 0 2 0 +141 142 139 254 255 252 231 233 230 10 12 8 34 44 55 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 154 195 235 6 12 15 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 125 92 35 250 179 73 250 179 73 +250 179 73 180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 68 83 99 +129 165 199 85 112 133 0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 126 162 196 119 156 189 134 170 204 149 191 231 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 57 72 88 3 6 2 242 244 240 254 255 252 35 37 34 +78 80 77 254 255 252 254 255 252 128 130 127 0 2 0 105 137 164 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 91 123 149 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 55 39 17 250 179 73 250 179 73 +250 179 73 245 175 76 7 10 5 0 2 0 44 54 65 103 134 161 161 203 243 170 212 252 +170 212 252 21 27 33 25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 61 76 92 0 2 0 242 244 240 254 255 252 102 104 101 +10 12 8 231 233 230 254 255 252 244 246 243 26 27 25 21 27 33 159 201 241 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 32 39 45 0 6 9 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 218 158 64 250 179 73 +250 179 73 250 179 73 75 55 22 0 2 0 161 203 243 170 212 252 170 212 252 170 212 252 +115 147 174 0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 159 201 241 146 188 228 +140 177 211 134 170 204 146 188 228 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 17 24 30 62 64 61 254 255 252 254 255 252 215 217 214 +0 2 0 102 104 101 254 255 252 254 255 252 166 168 165 0 2 0 72 87 103 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 75 32 250 179 73 +250 179 73 250 179 73 150 108 46 0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 +49 59 70 3 10 13 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 166 207 248 109 141 168 65 87 102 28 35 41 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 28 35 41 70 96 117 138 174 208 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 0 2 0 102 104 101 254 255 252 254 255 252 254 255 252 +102 104 101 0 2 0 192 194 191 254 255 252 254 255 252 78 80 77 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 34 44 55 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 61 76 92 154 195 235 0 6 9 29 21 8 250 179 73 +250 179 73 250 179 73 224 163 69 0 2 0 68 83 99 170 212 252 170 212 252 143 179 213 +0 2 0 72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +161 203 243 96 115 138 17 24 30 0 2 0 0 2 0 45 47 44 102 104 101 123 125 122 +138 140 137 143 145 142 115 117 114 82 83 81 43 44 42 0 2 0 0 2 0 32 39 45 +126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 0 2 0 85 87 84 254 255 252 254 255 252 254 255 252 +242 244 240 27 29 27 35 37 34 254 255 252 254 255 252 231 233 230 10 12 8 21 27 33 +159 201 241 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 6 9 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 44 54 65 170 212 252 170 212 252 34 44 55 0 2 0 82 62 28 +109 79 35 224 163 69 250 179 73 52 36 13 15 20 22 170 212 252 170 212 252 75 89 106 +0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 +25 32 38 0 2 0 40 41 39 155 157 153 238 241 237 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 115 117 114 18 20 17 +0 2 0 68 83 99 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 52 62 74 7 10 5 234 236 233 254 255 252 254 255 252 +254 255 252 195 197 194 102 104 101 254 255 252 254 255 252 254 255 252 162 164 161 0 2 0 +72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 119 156 189 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 115 147 174 170 212 252 91 123 149 0 2 0 0 2 0 6 12 15 +0 2 0 15 9 7 197 142 62 125 92 35 0 2 0 115 152 185 113 145 172 3 6 2 +41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 113 145 172 0 6 9 +10 12 8 155 157 153 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 232 234 231 +87 89 86 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 115 152 185 0 2 0 138 140 137 254 255 252 254 255 252 +254 255 252 254 255 252 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 65 66 64 +0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 154 195 235 170 212 252 143 179 213 88 115 136 149 191 231 170 212 252 +126 162 196 3 6 2 64 46 18 202 145 58 0 2 0 0 2 0 0 2 0 0 2 0 +92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 143 179 213 3 10 13 27 29 27 +215 217 214 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 155 157 153 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 23 30 36 27 29 27 249 251 248 254 255 252 +254 255 252 188 190 187 7 10 5 226 228 225 254 255 252 254 255 252 254 255 252 231 233 230 +7 10 5 21 27 33 159 201 241 170 212 252 103 134 161 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 55 66 77 11 4 3 250 179 73 24 17 10 0 2 0 0 2 0 0 2 0 +143 185 225 170 212 252 170 212 252 170 212 252 159 201 241 28 35 41 7 10 5 200 202 199 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 155 157 153 0 2 0 55 66 77 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 96 127 154 0 2 0 158 160 156 254 255 252 +254 255 252 192 194 191 0 2 0 176 178 175 254 255 252 254 255 252 254 255 252 254 255 252 +141 142 139 0 2 0 72 87 103 129 165 199 0 6 9 0 6 9 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 12 17 20 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 +138 174 208 17 24 30 29 21 8 250 179 73 101 72 28 0 2 0 0 2 0 32 39 45 +170 212 252 170 212 252 170 212 252 170 212 252 57 72 88 0 2 0 152 154 151 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 108 110 107 0 2 0 115 152 185 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 18 22 24 40 41 39 254 255 252 +254 255 252 232 234 231 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 10 12 8 0 2 0 8 14 16 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 41 51 62 61 76 92 34 44 55 3 10 13 +0 2 0 11 4 3 164 119 51 250 179 73 175 129 54 0 2 0 0 2 0 82 108 129 +170 212 252 170 212 252 170 212 252 98 129 156 0 2 0 95 96 94 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 238 241 237 18 20 17 25 32 38 166 207 248 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 85 112 133 0 2 0 188 190 187 +254 255 252 254 255 252 198 200 197 242 244 240 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 120 122 119 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 6 9 7 0 0 +31 23 12 202 145 58 250 179 73 250 179 73 238 175 73 0 2 0 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 28 35 41 31 32 30 244 246 243 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 85 112 133 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 0 2 0 148 150 147 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 222 224 221 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +7 0 0 234 172 70 250 179 73 250 179 73 250 179 73 34 26 8 0 2 0 149 191 231 +170 212 252 170 212 252 129 165 199 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 48 50 48 3 10 13 146 188 228 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 0 2 0 118 120 117 +254 255 252 254 255 252 254 255 252 169 171 168 231 233 230 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 170 124 49 250 179 73 250 179 73 250 179 73 48 33 15 6 12 15 170 212 252 +170 212 252 170 212 252 65 87 102 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 195 197 194 0 2 0 84 103 125 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 3 10 13 85 87 84 +254 255 252 254 255 252 234 236 233 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 99 101 98 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 95 68 30 250 179 73 250 179 73 250 179 73 34 26 8 34 44 55 170 212 252 +170 212 252 163 205 246 8 14 16 62 64 61 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 35 37 34 34 44 55 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 26 33 39 60 62 59 +254 255 252 254 255 252 238 241 237 0 2 0 108 110 107 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 158 160 156 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 23 15 7 248 178 79 250 179 73 245 175 76 0 2 0 63 78 94 170 212 252 +170 212 252 109 141 168 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 104 106 103 0 2 0 +154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 69 71 68 +254 255 252 254 255 252 244 246 243 0 2 0 91 93 90 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 215 217 214 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 197 142 62 250 179 73 212 153 66 0 2 0 92 110 133 170 212 252 +170 212 252 80 98 121 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 176 178 175 0 2 0 +105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 8 14 16 87 89 86 +254 255 252 254 255 252 254 255 252 40 41 39 21 22 20 252 254 250 254 255 252 254 255 252 +254 255 252 254 255 252 252 254 250 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 125 92 35 250 179 73 170 124 49 0 2 0 113 145 172 170 212 252 +170 212 252 53 68 84 15 17 14 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 242 244 240 0 2 0 +63 78 94 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 0 2 0 104 106 103 +254 255 252 254 255 252 254 255 252 123 125 122 0 2 0 166 168 165 254 255 252 254 255 252 +254 255 252 254 255 252 234 236 233 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 7 0 0 52 36 13 250 179 73 129 95 39 0 2 0 143 179 213 170 212 252 +170 212 252 32 39 45 48 50 48 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 60 62 59 +18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 2 0 102 104 101 +254 255 252 254 255 252 254 255 252 226 228 225 15 17 14 10 12 8 215 217 214 254 255 252 +254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 88 66 26 29 21 8 0 2 0 166 207 248 170 212 252 +170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 123 125 122 +0 2 0 149 191 231 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 56 58 55 +254 255 252 254 255 252 254 255 252 254 255 252 178 180 177 0 2 0 38 40 37 238 241 237 +254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 7 0 0 0 2 0 161 203 243 170 212 252 +149 191 231 0 2 0 123 125 122 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 141 142 139 +0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 +210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 120 122 119 0 2 0 21 22 20 +143 145 142 244 246 243 219 221 218 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 149 191 231 170 212 252 +129 165 199 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 155 157 153 +0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 0 6 9 +69 71 68 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 71 73 70 0 2 0 +0 2 0 0 2 0 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 170 212 252 +129 165 199 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 169 171 168 +0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 75 94 116 +0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 134 170 204 170 212 252 +134 170 204 0 2 0 152 154 151 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 +0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 +44 54 65 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 35 37 34 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 +138 174 208 0 2 0 143 145 142 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 198 200 197 +0 2 0 103 134 161 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +157 198 239 28 35 41 0 2 0 188 190 187 254 255 252 252 254 250 3 6 2 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 115 152 185 170 212 252 +143 179 213 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 +0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 146 188 228 0 6 9 26 27 25 242 244 240 176 178 175 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 170 212 252 +143 185 225 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 185 187 183 +0 2 0 105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 163 205 246 0 2 0 0 2 0 102 104 101 60 62 59 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 80 98 121 170 212 252 +149 191 231 0 2 0 118 120 117 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 143 145 142 +0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 143 179 213 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 170 212 252 +170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 108 110 107 +0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 115 152 185 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 170 212 252 +170 212 252 34 44 55 43 44 42 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 +15 20 22 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 75 94 116 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 +170 212 252 63 78 94 3 6 2 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 31 32 30 +41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +161 203 243 6 12 15 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 +170 212 252 88 115 136 0 2 0 210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 249 251 248 0 2 0 +68 83 99 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +96 127 154 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 61 76 92 +170 212 252 119 150 178 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 0 2 0 +91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +28 35 41 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 +146 188 228 143 185 225 0 2 0 126 127 125 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 85 87 84 0 6 9 +154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 98 129 156 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +72 90 112 170 212 252 18 22 24 56 58 55 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 238 241 237 7 10 5 55 66 77 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 0 6 9 +0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 122 159 192 72 87 103 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 113 145 172 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 139 181 221 8 14 16 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 18 22 24 109 141 168 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 12 17 20 166 207 248 +170 212 252 170 212 252 170 212 252 170 212 252 146 188 228 23 30 36 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 101 72 28 202 145 58 +180 132 57 0 2 0 38 45 51 3 10 13 69 71 68 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 200 202 199 0 2 0 75 89 106 170 212 252 +170 212 252 170 212 252 170 212 252 109 141 168 8 14 16 0 2 0 21 13 4 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 7 0 0 0 2 0 101 72 28 218 158 64 250 179 73 250 179 73 +250 179 73 139 99 44 0 2 0 8 14 16 0 2 0 238 241 237 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 244 246 243 38 40 37 3 10 13 139 181 221 170 212 252 +170 212 252 161 203 243 66 80 97 0 2 0 31 23 12 191 142 60 248 183 74 180 132 57 +44 34 15 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 23 15 7 190 136 56 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 150 108 46 0 2 0 0 2 0 82 83 81 222 224 221 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 102 104 101 0 2 0 98 129 156 170 212 252 163 205 246 +98 129 156 23 30 36 0 2 0 82 62 28 234 172 70 248 183 74 248 183 74 248 183 74 +248 183 74 158 114 46 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 64 46 18 109 79 35 150 108 46 224 163 69 250 179 73 +250 179 73 250 179 73 250 179 73 158 114 46 0 2 0 0 2 0 3 6 2 115 117 114 +234 236 233 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 176 178 175 0 2 0 57 72 88 146 188 228 80 98 121 8 14 16 +0 2 0 24 17 10 158 114 46 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 242 178 77 58 42 19 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 0 2 0 67 49 21 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 95 68 30 0 2 0 0 2 0 +0 2 0 52 54 51 108 110 107 162 164 161 219 221 218 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 +219 221 218 178 180 177 18 20 17 6 12 15 26 33 39 0 2 0 0 2 0 52 36 13 +164 119 51 242 178 77 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 242 178 77 +187 138 56 175 129 54 158 114 46 82 62 28 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 78 58 25 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 234 172 70 142 101 40 +44 34 15 10 12 8 0 2 0 0 2 0 0 2 0 18 20 17 60 62 59 71 73 70 +82 83 81 95 96 94 104 106 103 118 120 117 115 117 114 78 80 77 40 41 39 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 44 34 15 105 75 32 191 142 60 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 105 75 32 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 187 138 56 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 142 101 40 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 206 148 61 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 161 117 49 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 228 167 73 250 179 73 +238 175 73 190 136 56 158 114 46 234 172 70 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 147 105 44 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 67 49 21 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 +31 23 12 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 21 13 4 +0 2 0 0 2 0 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 +134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 155 111 43 248 183 74 248 183 74 +248 183 74 248 183 74 224 163 69 55 39 17 64 46 18 164 119 51 242 178 77 248 183 74 +75 55 22 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 228 167 73 88 66 26 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 168 123 54 248 183 74 +248 183 74 248 183 74 158 114 46 0 2 0 7 0 0 0 2 0 10 12 8 44 34 15 +15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 29 21 8 250 179 73 250 179 73 158 114 46 15 14 3 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 175 129 54 +248 183 74 248 183 74 114 83 33 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 29 21 8 147 105 44 58 42 19 0 2 0 7 0 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +105 75 32 218 158 64 23 15 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + diff --git a/kernels/linux-libre-pae/logo_linux_mono.pbm b/kernels/linux-libre-pae/logo_linux_mono.pbm new file mode 100644 index 000000000..3d3c35807 --- /dev/null +++ b/kernels/linux-libre-pae/logo_linux_mono.pbm @@ -0,0 +1,159 @@ +P2 +80 78 +255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 255 255 255 255 255 0 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 +255 0 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 +255 255 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 +255 255 0 0 0 0 0 0 0 0 +0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 +255 255 255 0 0 0 0 0 0 0 +0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 255 255 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 0 255 255 0 0 255 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 255 255 255 0 0 255 +255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 255 +255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 0 +255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 +0 255 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 +0 255 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 +0 0 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 255 255 255 +255 0 0 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 255 0 0 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 +255 0 0 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 0 0 255 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 255 255 255 +255 255 0 0 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 255 255 255 255 0 255 255 255 +255 255 255 0 0 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 0 255 255 255 +255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 0 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 0 +0 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 255 +0 0 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 diff --git a/kernels/linux-libre-pae/logo_linux_vga16.ppm b/kernels/linux-libre-pae/logo_linux_vga16.ppm new file mode 100644 index 000000000..f279f972c --- /dev/null +++ b/kernels/linux-libre-pae/logo_linux_vga16.ppm @@ -0,0 +1,18724 @@ +P3 +# CREATOR: GIMP PNM Filter Version 1.1 +80 78 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +170 +170 +170 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +170 +170 +170 +85 +85 +85 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +170 +170 +170 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +85 +85 +85 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +170 +170 +170 +170 +170 +170 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/kernels/linux-libre-rt/PKGBUILD b/kernels/linux-libre-rt/PKGBUILD index 45efb7357..ed2a930b5 100644 --- a/kernels/linux-libre-rt/PKGBUILD +++ b/kernels/linux-libre-rt/PKGBUILD @@ -33,7 +33,7 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn "${pkgbase}.preset" 'Kbuild' 'Kbuild.platforms' - 'boot-logo.patch' + 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' '0001-Bluetooth-allocate-static-minor-for-vhci.patch' '0002-module-allow-multiple-calls-to-MODULE_DEVICE_TABLE-p.patch' @@ -49,7 +49,9 @@ sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b' 'afb12acaae2b2fc03d0d1367066657aacd60eb242162d90eef7b3f5fbe40f554' 'c5451d5e1eafc4f8d28b1a2958ec3102c124433a414a86450fc32058e004156b' '55bf07738a3286168a7929ae16dbca29defd14e77b9d24c487ae4c3d12bb9eb9' - '8303b426b1a6dce456b2350003558ae312d21cab0ae6c1f0d7b9d21395f4e177' + '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' + '2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53' + 'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015' 'faced4eb4c47c4eb1a9ee8a5bf8a7c4b49d6b4d78efbe426e410730e6267d182' '6d72e14552df59e6310f16c176806c408355951724cd5b48a47bf01591b8be02' '52dec83a8805a8642d74d764494acda863e0aa23e3d249e80d4b457e20a3fd29' @@ -80,7 +82,8 @@ prepare() { patch -p1 -i "${srcdir}/revert_timers-dont_raise_softirq_unconditionally_and_fixes.patch" # add freedo as boot logo - patch -p1 -i "${srcdir}/boot-logo.patch" + install -m644 -t drivers/video/logo \ + "${srcdir}/logo_linux_"{clut224.ppm,vga16.ppm,mono.pbm} # add latest fixes from stable queue, if needed # http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git diff --git a/kernels/linux-libre-rt/boot-logo.patch b/kernels/linux-libre-rt/boot-logo.patch deleted file mode 100644 index 3f4e0dea4..000000000 --- a/kernels/linux-libre-rt/boot-logo.patch +++ /dev/null @@ -1,23167 +0,0 @@ -diff --git a/drivers/video/logo/logo_linux_clut224.ppm b/drivers/video/logo/logo_linux_clut224.ppm -index 3c14e43..c9d8373 100644 ---- a/drivers/video/logo/logo_linux_clut224.ppm -+++ b/drivers/video/logo/logo_linux_clut224.ppm -@@ -1,1604 +1,861 @@ - P3 --# Standard 224-color Linux logo --80 80 -+80 78 - 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 6 6 6 10 10 10 10 10 10 -- 10 10 10 6 6 6 6 6 6 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 10 10 10 14 14 14 -- 22 22 22 26 26 26 30 30 30 34 34 34 -- 30 30 30 30 30 30 26 26 26 18 18 18 -- 14 14 14 10 10 10 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 26 26 26 42 42 42 -- 54 54 54 66 66 66 78 78 78 78 78 78 -- 78 78 78 74 74 74 66 66 66 54 54 54 -- 42 42 42 26 26 26 18 18 18 10 10 10 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 22 22 22 42 42 42 66 66 66 86 86 86 -- 66 66 66 38 38 38 38 38 38 22 22 22 -- 26 26 26 34 34 34 54 54 54 66 66 66 -- 86 86 86 70 70 70 46 46 46 26 26 26 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 26 26 26 -- 50 50 50 82 82 82 58 58 58 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 54 54 54 86 86 86 66 66 66 -- 38 38 38 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 22 22 22 50 50 50 -- 78 78 78 34 34 34 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 6 6 6 70 70 70 -- 78 78 78 46 46 46 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 42 42 42 82 82 82 -- 26 26 26 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 14 14 14 -- 46 46 46 34 34 34 6 6 6 2 2 6 -- 42 42 42 78 78 78 42 42 42 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 30 30 30 66 66 66 58 58 58 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 26 26 26 -- 86 86 86 101 101 101 46 46 46 10 10 10 -- 2 2 6 58 58 58 70 70 70 34 34 34 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 42 42 42 86 86 86 10 10 10 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 30 30 30 -- 94 94 94 94 94 94 58 58 58 26 26 26 -- 2 2 6 6 6 6 78 78 78 54 54 54 -- 22 22 22 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 62 62 62 62 62 62 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 26 26 26 -- 54 54 54 38 38 38 18 18 18 10 10 10 -- 2 2 6 2 2 6 34 34 34 82 82 82 -- 38 38 38 14 14 14 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 30 30 30 78 78 78 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 10 10 10 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 78 78 78 -- 50 50 50 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 14 14 14 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 54 54 54 -- 66 66 66 26 26 26 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 82 82 82 2 2 6 2 2 6 -- 2 2 6 6 6 6 10 10 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 14 14 14 10 10 10 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 18 18 18 -- 82 82 82 34 34 34 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 2 2 6 -- 6 6 6 6 6 6 22 22 22 34 34 34 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 34 34 34 -- 10 10 10 50 50 50 22 22 22 2 2 6 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 86 86 86 42 42 42 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 2 2 6 -- 38 38 38 116 116 116 94 94 94 22 22 22 -- 22 22 22 2 2 6 2 2 6 2 2 6 -- 14 14 14 86 86 86 138 138 138 162 162 162 --154 154 154 38 38 38 26 26 26 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 86 86 86 46 46 46 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 14 14 14 --134 134 134 198 198 198 195 195 195 116 116 116 -- 10 10 10 2 2 6 2 2 6 6 6 6 --101 98 89 187 187 187 210 210 210 218 218 218 --214 214 214 134 134 134 14 14 14 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 86 86 86 50 50 50 18 18 18 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 54 54 54 --218 218 218 195 195 195 226 226 226 246 246 246 -- 58 58 58 2 2 6 2 2 6 30 30 30 --210 210 210 253 253 253 174 174 174 123 123 123 --221 221 221 234 234 234 74 74 74 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 82 82 82 2 2 6 106 106 106 --170 170 170 26 26 26 86 86 86 226 226 226 --123 123 123 10 10 10 14 14 14 46 46 46 --231 231 231 190 190 190 6 6 6 70 70 70 -- 90 90 90 238 238 238 158 158 158 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 86 86 86 6 6 6 116 116 116 --106 106 106 6 6 6 70 70 70 149 149 149 --128 128 128 18 18 18 38 38 38 54 54 54 --221 221 221 106 106 106 2 2 6 14 14 14 -- 46 46 46 190 190 190 198 198 198 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 62 62 62 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 94 94 94 14 14 14 101 101 101 --128 128 128 2 2 6 18 18 18 116 116 116 --118 98 46 121 92 8 121 92 8 98 78 10 --162 162 162 106 106 106 2 2 6 2 2 6 -- 2 2 6 195 195 195 195 195 195 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 62 62 62 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 1 -- 0 0 1 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 90 90 90 14 14 14 58 58 58 --210 210 210 26 26 26 54 38 6 154 114 10 --226 170 11 236 186 11 225 175 15 184 144 12 --215 174 15 175 146 61 37 26 9 2 2 6 -- 70 70 70 246 246 246 138 138 138 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 66 66 66 26 26 26 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 14 14 14 10 10 10 --195 195 195 188 164 115 192 133 9 225 175 15 --239 182 13 234 190 10 232 195 16 232 200 30 --245 207 45 241 208 19 232 195 16 184 144 12 --218 194 134 211 206 186 42 42 42 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 50 50 50 74 74 74 30 30 30 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 86 86 86 14 14 14 2 2 6 --121 87 25 192 133 9 219 162 10 239 182 13 --236 186 11 232 195 16 241 208 19 244 214 54 --246 218 60 246 218 38 246 215 20 241 208 19 --241 208 19 226 184 13 121 87 25 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 50 50 50 82 82 82 34 34 34 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 82 82 82 30 30 30 61 42 6 --180 123 7 206 145 10 230 174 11 239 182 13 --234 190 10 238 202 15 241 208 19 246 218 74 --246 218 38 246 215 20 246 215 20 246 215 20 --226 184 13 215 174 15 184 144 12 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 26 26 26 94 94 94 42 42 42 14 14 14 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 50 50 50 104 69 6 --192 133 9 216 158 10 236 178 12 236 186 11 --232 195 16 241 208 19 244 214 54 245 215 43 --246 215 20 246 215 20 241 208 19 198 155 10 --200 144 11 216 158 10 156 118 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 90 90 90 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 46 46 46 22 22 22 --137 92 6 210 162 10 239 182 13 238 190 10 --238 202 15 241 208 19 246 215 20 246 215 20 --241 208 19 203 166 17 185 133 11 210 150 10 --216 158 10 210 150 10 102 78 10 2 2 6 -- 6 6 6 54 54 54 14 14 14 2 2 6 -- 2 2 6 62 62 62 74 74 74 30 30 30 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 78 78 78 50 50 50 6 6 6 -- 94 70 30 139 102 15 190 146 13 226 184 13 --232 200 30 232 195 16 215 174 15 190 146 13 --168 122 10 192 133 9 210 150 10 213 154 11 --202 150 34 182 157 106 101 98 89 2 2 6 -- 2 2 6 78 78 78 116 116 116 58 58 58 -- 2 2 6 22 22 22 90 90 90 46 46 46 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 50 50 50 6 6 6 --128 128 128 174 154 114 156 107 11 168 122 10 --198 155 10 184 144 12 197 138 11 200 144 11 --206 145 10 206 145 10 197 138 11 188 164 115 --195 195 195 198 198 198 174 174 174 14 14 14 -- 2 2 6 22 22 22 116 116 116 116 116 116 -- 22 22 22 2 2 6 74 74 74 70 70 70 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 101 101 101 26 26 26 10 10 10 --138 138 138 190 190 190 174 154 114 156 107 11 --197 138 11 200 144 11 197 138 11 192 133 9 --180 123 7 190 142 34 190 178 144 187 187 187 --202 202 202 221 221 221 214 214 214 66 66 66 -- 2 2 6 2 2 6 50 50 50 62 62 62 -- 6 6 6 2 2 6 10 10 10 90 90 90 -- 50 50 50 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 34 34 34 -- 74 74 74 74 74 74 2 2 6 6 6 6 --144 144 144 198 198 198 190 190 190 178 166 146 --154 121 60 156 107 11 156 107 11 168 124 44 --174 154 114 187 187 187 190 190 190 210 210 210 --246 246 246 253 253 253 253 253 253 182 182 182 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 62 62 62 -- 74 74 74 34 34 34 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 10 10 10 22 22 22 54 54 54 -- 94 94 94 18 18 18 2 2 6 46 46 46 --234 234 234 221 221 221 190 190 190 190 190 190 --190 190 190 187 187 187 187 187 187 190 190 190 --190 190 190 195 195 195 214 214 214 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 -- 82 82 82 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 14 14 14 -- 86 86 86 54 54 54 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 46 46 46 90 90 90 -- 46 46 46 18 18 18 6 6 6 182 182 182 --253 253 253 246 246 246 206 206 206 190 190 190 --190 190 190 190 190 190 190 190 190 190 190 190 --206 206 206 231 231 231 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --202 202 202 14 14 14 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 42 42 42 86 86 86 42 42 42 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 14 14 14 38 38 38 74 74 74 66 66 66 -- 2 2 6 6 6 6 90 90 90 250 250 250 --253 253 253 253 253 253 238 238 238 198 198 198 --190 190 190 190 190 190 195 195 195 221 221 221 --246 246 246 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 82 82 82 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 78 78 78 70 70 70 34 34 34 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 34 34 34 66 66 66 78 78 78 6 6 6 -- 2 2 6 18 18 18 218 218 218 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --226 226 226 231 231 231 246 246 246 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 178 178 178 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 18 18 18 90 90 90 62 62 62 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 26 26 26 -- 58 58 58 90 90 90 18 18 18 2 2 6 -- 2 2 6 110 110 110 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 231 231 231 18 18 18 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 94 94 94 -- 54 54 54 26 26 26 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 22 22 22 50 50 50 -- 90 90 90 26 26 26 2 2 6 2 2 6 -- 14 14 14 195 195 195 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 242 242 242 54 54 54 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 -- 86 86 86 50 50 50 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 38 38 38 82 82 82 -- 34 34 34 2 2 6 2 2 6 2 2 6 -- 42 42 42 195 195 195 246 246 246 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 242 242 242 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 246 246 246 238 238 238 --226 226 226 231 231 231 101 101 101 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 38 38 38 82 82 82 42 42 42 14 14 14 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 26 26 26 62 62 62 66 66 66 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 70 70 70 170 170 170 206 206 206 234 234 234 --246 246 246 250 250 250 250 250 250 238 238 238 --226 226 226 231 231 231 238 238 238 250 250 250 --250 250 250 250 250 250 246 246 246 231 231 231 --214 214 214 206 206 206 202 202 202 202 202 202 --198 198 198 202 202 202 182 182 182 18 18 18 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 62 62 62 66 66 66 30 30 30 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 42 42 42 82 82 82 18 18 18 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 94 94 94 182 182 182 218 218 218 242 242 242 --250 250 250 253 253 253 253 253 253 250 250 250 --234 234 234 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --238 238 238 226 226 226 210 210 210 202 202 202 --195 195 195 195 195 195 210 210 210 158 158 158 -- 6 6 6 14 14 14 50 50 50 14 14 14 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 86 86 86 46 46 46 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 54 54 54 70 70 70 2 2 6 -- 2 2 6 10 10 10 2 2 6 22 22 22 --166 166 166 231 231 231 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --231 231 231 206 206 206 198 198 198 226 226 226 -- 94 94 94 2 2 6 6 6 6 38 38 38 -- 30 30 30 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 62 62 62 66 66 66 -- 26 26 26 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 74 74 74 50 50 50 2 2 6 -- 26 26 26 26 26 26 2 2 6 106 106 106 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 246 246 246 218 218 218 202 202 202 --210 210 210 14 14 14 2 2 6 2 2 6 -- 30 30 30 22 22 22 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 86 86 86 -- 42 42 42 14 14 14 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 90 90 90 22 22 22 2 2 6 -- 42 42 42 2 2 6 18 18 18 218 218 218 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 250 250 250 221 221 221 --218 218 218 101 101 101 2 2 6 14 14 14 -- 18 18 18 38 38 38 10 10 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 78 78 78 -- 58 58 58 22 22 22 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 54 54 54 82 82 82 2 2 6 26 26 26 -- 22 22 22 2 2 6 123 123 123 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --238 238 238 198 198 198 6 6 6 38 38 38 -- 58 58 58 26 26 26 38 38 38 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 78 78 78 30 30 30 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 30 30 30 -- 74 74 74 58 58 58 2 2 6 42 42 42 -- 2 2 6 22 22 22 231 231 231 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 246 246 246 46 46 46 38 38 38 -- 42 42 42 14 14 14 38 38 38 14 14 14 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 86 86 86 46 46 46 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 42 42 42 -- 90 90 90 18 18 18 18 18 18 26 26 26 -- 2 2 6 116 116 116 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 250 250 250 238 238 238 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 94 94 94 6 6 6 -- 2 2 6 2 2 6 10 10 10 34 34 34 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 10 10 10 26 26 26 66 66 66 -- 82 82 82 2 2 6 38 38 38 6 6 6 -- 14 14 14 210 210 210 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 246 246 246 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 144 144 144 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 42 42 42 74 74 74 30 30 30 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 42 42 42 90 90 90 -- 26 26 26 6 6 6 42 42 42 2 2 6 -- 74 74 74 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 242 242 242 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 182 182 182 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 10 10 10 86 86 86 38 38 38 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 26 26 26 66 66 66 82 82 82 -- 2 2 6 22 22 22 18 18 18 2 2 6 --149 149 149 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 206 206 206 2 2 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 86 86 86 46 46 46 14 14 14 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 18 18 18 46 46 46 86 86 86 18 18 18 -- 2 2 6 34 34 34 10 10 10 6 6 6 --210 210 210 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 221 221 221 6 6 6 -- 2 2 6 2 2 6 6 6 6 30 30 30 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 82 82 82 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 26 26 26 66 66 66 62 62 62 2 2 6 -- 2 2 6 38 38 38 10 10 10 26 26 26 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 238 238 238 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 6 6 6 -- 2 2 6 2 2 6 10 10 10 30 30 30 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 58 58 58 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 78 78 78 6 6 6 2 2 6 -- 2 2 6 46 46 46 14 14 14 42 42 42 --246 246 246 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 10 10 10 -- 2 2 6 2 2 6 22 22 22 14 14 14 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 62 62 62 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 74 74 74 2 2 6 2 2 6 -- 14 14 14 70 70 70 34 34 34 62 62 62 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 14 14 14 -- 2 2 6 2 2 6 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 62 62 62 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 54 54 54 62 62 62 2 2 6 2 2 6 -- 2 2 6 30 30 30 46 46 46 70 70 70 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 226 226 226 10 10 10 -- 2 2 6 6 6 6 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 58 58 58 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 58 58 58 62 62 62 2 2 6 2 2 6 -- 2 2 6 2 2 6 30 30 30 78 78 78 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 206 206 206 2 2 6 -- 22 22 22 34 34 34 18 14 6 22 22 22 -- 26 26 26 18 18 18 6 6 6 2 2 6 -- 2 2 6 82 82 82 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 26 26 26 -- 62 62 62 106 106 106 74 54 14 185 133 11 --210 162 10 121 92 8 6 6 6 62 62 62 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 158 158 158 18 18 18 -- 14 14 14 2 2 6 2 2 6 2 2 6 -- 6 6 6 18 18 18 66 66 66 38 38 38 -- 6 6 6 94 94 94 50 50 50 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 10 10 10 10 10 10 18 18 18 38 38 38 -- 78 78 78 142 134 106 216 158 10 242 186 14 --246 190 14 246 190 14 156 118 10 10 10 10 -- 90 90 90 238 238 238 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 230 190 --238 204 91 238 204 91 181 142 44 37 26 9 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 38 38 38 46 46 46 -- 26 26 26 106 106 106 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 22 22 22 -- 30 30 30 38 38 38 50 50 50 70 70 70 --106 106 106 190 142 34 226 170 11 242 186 14 --246 190 14 246 190 14 246 190 14 154 114 10 -- 6 6 6 74 74 74 226 226 226 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 228 184 62 --241 196 14 241 208 19 232 195 16 38 30 10 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 30 30 30 26 26 26 --203 166 17 154 142 90 66 66 66 26 26 26 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 38 38 38 58 58 58 -- 78 78 78 86 86 86 101 101 101 123 123 123 --175 146 61 210 150 10 234 174 13 246 186 14 --246 190 14 246 190 14 246 190 14 238 190 10 --102 78 10 2 2 6 46 46 46 198 198 198 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 224 178 62 --242 186 14 241 196 14 210 166 10 22 18 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 6 6 6 121 92 8 --238 202 15 232 195 16 82 82 82 34 34 34 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 38 38 38 70 70 70 154 122 46 --190 142 34 200 144 11 197 138 11 197 138 11 --213 154 11 226 170 11 242 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --225 175 15 46 32 6 2 2 6 22 22 22 --158 158 158 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 242 242 242 224 178 62 --239 182 13 236 186 11 213 154 11 46 32 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 61 42 6 225 175 15 --238 190 10 236 186 11 112 100 78 42 42 42 -- 14 14 14 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 54 54 54 154 122 46 213 154 11 --226 170 11 230 174 11 226 170 11 226 170 11 --236 178 12 242 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --241 196 14 184 144 12 10 10 10 2 2 6 -- 6 6 6 116 116 116 242 242 242 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 231 231 231 198 198 198 214 170 54 --236 178 12 236 178 12 210 150 10 137 92 6 -- 18 14 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 70 47 6 200 144 11 236 178 12 --239 182 13 239 182 13 124 112 88 58 58 58 -- 22 22 22 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 70 70 70 180 133 36 226 170 11 --239 182 13 242 186 14 242 186 14 246 186 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 232 195 16 98 70 6 2 2 6 -- 2 2 6 2 2 6 66 66 66 221 221 221 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 206 206 206 198 198 198 214 166 58 --230 174 11 230 174 11 216 158 10 192 133 9 --163 110 8 116 81 8 102 78 10 116 81 8 --167 114 7 197 138 11 226 170 11 239 182 13 --242 186 14 242 186 14 162 146 94 78 78 78 -- 34 34 34 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 30 30 30 78 78 78 190 142 34 226 170 11 --239 182 13 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 241 196 14 203 166 17 22 18 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 --218 218 218 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 206 206 206 198 198 198 202 162 69 --226 170 11 236 178 12 224 166 10 210 150 10 --200 144 11 197 138 11 192 133 9 197 138 11 --210 150 10 226 170 11 242 186 14 246 190 14 --246 190 14 246 186 14 225 175 15 124 112 88 -- 62 62 62 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 174 135 50 224 166 10 --239 182 13 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 241 196 14 139 102 15 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 78 78 78 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 214 214 214 198 198 198 190 150 46 --219 162 10 236 178 12 234 174 13 224 166 10 --216 158 10 213 154 11 213 154 11 216 158 10 --226 170 11 239 182 13 246 190 14 246 190 14 --246 190 14 246 190 14 242 186 14 206 162 42 --101 101 101 58 58 58 30 30 30 14 14 14 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 74 74 74 174 135 50 216 158 10 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 241 196 14 226 184 13 -- 61 42 6 2 2 6 2 2 6 2 2 6 -- 22 22 22 238 238 238 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 226 226 226 187 187 187 180 133 36 --216 158 10 236 178 12 239 182 13 236 178 12 --230 174 11 226 170 11 226 170 11 230 174 11 --236 178 12 242 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 186 14 239 182 13 --206 162 42 106 106 106 66 66 66 34 34 34 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 26 26 26 70 70 70 163 133 67 213 154 11 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 241 196 14 --190 146 13 18 14 6 2 2 6 2 2 6 -- 46 46 46 246 246 246 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 221 221 221 86 86 86 156 107 11 --216 158 10 236 178 12 242 186 14 246 186 14 --242 186 14 239 182 13 239 182 13 242 186 14 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --242 186 14 225 175 15 142 122 72 66 66 66 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 26 26 26 70 70 70 163 133 67 210 150 10 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --232 195 16 121 92 8 34 34 34 106 106 106 --221 221 221 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --242 242 242 82 82 82 18 14 6 163 110 8 --216 158 10 236 178 12 242 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 242 186 14 163 133 67 -- 46 46 46 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 163 133 67 210 150 10 --236 178 12 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --241 196 14 215 174 15 190 178 144 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 218 218 218 -- 58 58 58 2 2 6 22 18 6 167 114 7 --216 158 10 236 178 12 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 186 14 242 186 14 190 150 46 -- 54 54 54 22 22 22 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 38 38 38 86 86 86 180 133 36 213 154 11 --236 178 12 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 232 195 16 190 146 13 214 214 214 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 170 170 170 26 26 26 -- 2 2 6 2 2 6 37 26 9 163 110 8 --219 162 10 239 182 13 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 236 178 12 224 166 10 142 122 72 -- 46 46 46 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 109 106 95 192 133 9 224 166 10 --242 186 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --242 186 14 226 184 13 210 162 10 142 110 46 --226 226 226 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --198 198 198 66 66 66 2 2 6 2 2 6 -- 2 2 6 2 2 6 50 34 6 156 107 11 --219 162 10 239 182 13 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 242 186 14 --234 174 13 213 154 11 154 122 46 66 66 66 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 58 58 58 154 121 60 206 145 10 234 174 13 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 236 178 12 210 162 10 163 110 8 -- 61 42 6 138 138 138 218 218 218 250 250 250 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 210 210 210 144 144 144 66 66 66 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 61 42 6 163 110 8 --216 158 10 236 178 12 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 239 182 13 230 174 11 216 158 10 --190 142 34 124 112 88 70 70 70 38 38 38 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 62 62 62 168 124 44 206 145 10 224 166 10 --236 178 12 239 182 13 242 186 14 242 186 14 --246 186 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 236 178 12 216 158 10 175 118 6 -- 80 54 7 2 2 6 6 6 6 30 30 30 -- 54 54 54 62 62 62 50 50 50 38 38 38 -- 14 14 14 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 80 54 7 167 114 7 --213 154 11 236 178 12 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 242 186 14 239 182 13 239 182 13 --230 174 11 210 150 10 174 135 50 124 112 88 -- 82 82 82 54 54 54 34 34 34 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 158 118 36 192 133 9 200 144 11 --216 158 10 219 162 10 224 166 10 226 170 11 --230 174 11 236 178 12 239 182 13 239 182 13 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 230 174 11 210 150 10 163 110 8 --104 69 6 10 10 10 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 91 60 6 167 114 7 --206 145 10 230 174 11 242 186 14 246 190 14 --246 190 14 246 190 14 246 186 14 242 186 14 --239 182 13 230 174 11 224 166 10 213 154 11 --180 133 36 124 112 88 86 86 86 58 58 58 -- 38 38 38 22 22 22 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 34 34 34 70 70 70 138 110 50 158 118 36 --167 114 7 180 123 7 192 133 9 197 138 11 --200 144 11 206 145 10 213 154 11 219 162 10 --224 166 10 230 174 11 239 182 13 242 186 14 --246 186 14 246 186 14 246 186 14 246 186 14 --239 182 13 216 158 10 185 133 11 152 99 6 --104 69 6 18 14 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 80 54 7 152 99 6 --192 133 9 219 162 10 236 178 12 239 182 13 --246 186 14 242 186 14 239 182 13 236 178 12 --224 166 10 206 145 10 192 133 9 154 121 60 -- 94 94 94 62 62 62 42 42 42 22 22 22 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 18 18 18 34 34 34 58 58 58 78 78 78 --101 98 89 124 112 88 142 110 46 156 107 11 --163 110 8 167 114 7 175 118 6 180 123 7 --185 133 11 197 138 11 210 150 10 219 162 10 --226 170 11 236 178 12 236 178 12 234 174 13 --219 162 10 197 138 11 163 110 8 130 83 6 -- 91 60 6 10 10 10 2 2 6 2 2 6 -- 18 18 18 38 38 38 38 38 38 38 38 38 -- 38 38 38 38 38 38 38 38 38 38 38 38 -- 38 38 38 38 38 38 26 26 26 2 2 6 -- 2 2 6 6 6 6 70 47 6 137 92 6 --175 118 6 200 144 11 219 162 10 230 174 11 --234 174 13 230 174 11 219 162 10 210 150 10 --192 133 9 163 110 8 124 112 88 82 82 82 -- 50 50 50 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 22 22 22 34 34 34 -- 42 42 42 58 58 58 74 74 74 86 86 86 --101 98 89 122 102 70 130 98 46 121 87 25 --137 92 6 152 99 6 163 110 8 180 123 7 --185 133 11 197 138 11 206 145 10 200 144 11 --180 123 7 156 107 11 130 83 6 104 69 6 -- 50 34 6 54 54 54 110 110 110 101 98 89 -- 86 86 86 82 82 82 78 78 78 78 78 78 -- 78 78 78 78 78 78 78 78 78 78 78 78 -- 78 78 78 82 82 82 86 86 86 94 94 94 --106 106 106 101 101 101 86 66 34 124 80 6 --156 107 11 180 123 7 192 133 9 200 144 11 --206 145 10 200 144 11 192 133 9 175 118 6 --139 102 15 109 106 95 70 70 70 42 42 42 -- 22 22 22 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 10 10 10 -- 14 14 14 22 22 22 30 30 30 38 38 38 -- 50 50 50 62 62 62 74 74 74 90 90 90 --101 98 89 112 100 78 121 87 25 124 80 6 --137 92 6 152 99 6 152 99 6 152 99 6 --138 86 6 124 80 6 98 70 6 86 66 30 --101 98 89 82 82 82 58 58 58 46 46 46 -- 38 38 38 34 34 34 34 34 34 34 34 34 -- 34 34 34 34 34 34 34 34 34 34 34 34 -- 34 34 34 34 34 34 38 38 38 42 42 42 -- 54 54 54 82 82 82 94 86 76 91 60 6 --134 86 6 156 107 11 167 114 7 175 118 6 --175 118 6 167 114 7 152 99 6 121 87 25 --101 98 89 62 62 62 34 34 34 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 6 6 6 10 10 10 -- 18 18 18 22 22 22 30 30 30 42 42 42 -- 50 50 50 66 66 66 86 86 86 101 98 89 --106 86 58 98 70 6 104 69 6 104 69 6 --104 69 6 91 60 6 82 62 34 90 90 90 -- 62 62 62 38 38 38 22 22 22 14 14 14 -- 10 10 10 10 10 10 10 10 10 10 10 10 -- 10 10 10 10 10 10 6 6 6 10 10 10 -- 10 10 10 10 10 10 10 10 10 14 14 14 -- 22 22 22 42 42 42 70 70 70 89 81 66 -- 80 54 7 104 69 6 124 80 6 137 92 6 --134 86 6 116 81 8 100 82 52 86 86 86 -- 58 58 58 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 10 10 10 14 14 14 -- 18 18 18 26 26 26 38 38 38 54 54 54 -- 70 70 70 86 86 86 94 86 76 89 81 66 -- 89 81 66 86 86 86 74 74 74 50 50 50 -- 30 30 30 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 34 34 34 58 58 58 -- 82 82 82 89 81 66 89 81 66 89 81 66 -- 94 86 66 94 86 76 74 74 74 50 50 50 -- 26 26 26 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 6 6 6 14 14 14 18 18 18 -- 30 30 30 38 38 38 46 46 46 54 54 54 -- 50 50 50 42 42 42 30 30 30 18 18 18 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 26 26 26 -- 38 38 38 50 50 50 58 58 58 58 58 58 -- 54 54 54 42 42 42 30 30 30 18 18 18 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 6 6 6 10 10 10 14 14 14 18 18 18 -- 18 18 18 14 14 14 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 14 14 14 18 18 18 22 22 22 22 22 22 -- 18 18 18 14 14 14 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 23 30 36 44 54 65 57 72 88 44 54 65 6 12 15 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 31 41 52 -+103 134 161 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 -+82 108 129 8 14 16 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 17 24 30 126 162 196 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 161 203 243 92 119 140 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 154 195 235 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 138 174 208 21 27 33 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 70 96 117 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 49 59 70 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 3 6 52 62 74 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 -+82 108 129 149 191 231 170 212 252 170 212 252 170 212 252 129 165 199 82 108 129 149 191 231 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 37 48 59 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 21 13 4 31 23 12 0 2 0 0 2 0 105 75 32 155 111 43 23 15 7 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 6 9 3 10 13 146 188 228 170 212 252 170 212 252 170 212 252 157 198 239 0 6 9 -+0 2 0 52 62 74 170 212 252 170 212 252 154 195 235 0 6 9 0 2 0 55 66 77 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 151 193 233 17 24 30 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+10 12 8 23 15 7 139 99 44 206 148 61 67 49 21 0 2 0 125 92 35 206 148 61 -+15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 96 127 154 170 212 252 170 212 252 170 212 252 170 212 252 92 119 140 21 22 20 -+10 12 8 53 68 84 170 212 252 170 212 252 92 119 140 10 12 8 7 10 5 53 68 84 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 -+0 6 9 0 3 6 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 22 20 -+62 64 61 38 40 37 0 2 0 34 26 8 212 153 66 64 46 18 0 2 0 170 124 49 -+180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 65 87 102 115 117 114 -+43 44 42 88 115 136 170 212 252 170 212 252 68 83 99 108 110 107 60 62 59 88 115 136 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+80 98 121 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 10 12 8 56 58 55 95 96 94 178 180 177 215 217 214 198 200 197 -+158 160 156 138 140 137 82 83 81 0 2 0 64 46 18 228 167 73 23 15 7 41 31 10 -+250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 -+0 2 0 126 162 196 170 212 252 170 212 252 57 72 88 0 2 0 0 2 0 126 162 196 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+157 198 239 8 14 16 0 6 9 0 2 0 45 47 44 195 197 194 192 194 191 38 40 37 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 192 194 191 234 236 233 176 178 175 118 120 117 143 145 142 176 178 175 -+215 217 214 234 236 233 234 236 233 104 106 103 0 2 0 142 101 40 134 100 43 0 2 0 -+164 119 51 170 124 49 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 115 152 185 8 14 16 -+49 59 70 166 207 248 170 212 252 170 212 252 119 150 178 8 14 16 55 66 77 166 207 248 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 92 119 140 0 2 0 0 2 0 200 202 199 254 255 252 254 255 252 244 246 243 -+40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 38 40 37 234 236 233 234 236 233 234 236 233 135 137 134 215 217 214 171 173 170 -+141 142 139 138 140 137 138 140 137 135 137 134 31 32 30 3 6 2 212 153 66 15 9 7 -+78 58 25 248 178 79 41 31 10 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 3 6 21 27 33 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 154 195 235 0 6 9 82 83 81 254 255 252 254 255 252 254 255 252 254 255 252 -+188 190 187 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 62 64 61 234 236 233 234 236 233 234 236 233 198 200 197 131 133 130 198 200 197 -+232 234 231 234 236 233 234 236 233 234 236 233 152 154 151 0 2 0 147 105 44 67 49 21 -+23 15 7 250 179 73 158 114 46 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 61 76 92 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 154 195 235 103 134 161 80 98 121 -+52 62 74 18 22 24 0 2 0 3 10 13 38 45 51 80 98 121 151 193 233 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 109 141 168 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 -+226 228 225 65 66 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 43 44 42 234 236 233 234 236 233 234 236 233 234 236 233 131 133 130 192 194 191 -+152 154 151 141 142 139 141 142 139 141 142 139 158 160 156 3 6 2 82 62 28 129 95 39 -+0 2 0 206 148 61 248 178 79 21 13 4 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 96 115 138 -+170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 18 22 24 0 2 0 0 2 0 -+34 26 8 75 55 22 114 83 33 95 68 30 55 39 17 7 0 0 0 6 9 84 103 125 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 84 103 125 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 171 173 170 -+0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 18 20 17 234 236 233 234 236 233 234 236 233 234 236 233 138 140 137 178 180 177 -+226 228 225 234 236 233 234 236 233 234 236 233 231 233 230 45 47 44 23 15 7 190 136 56 -+0 2 0 147 105 44 250 179 73 64 46 18 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 126 162 196 0 2 0 26 20 13 190 136 56 245 175 76 -+250 179 73 161 117 49 164 119 51 245 175 76 250 179 73 206 148 61 75 55 22 0 2 0 -+126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 68 83 99 0 2 0 252 254 250 254 255 252 254 255 252 254 255 252 71 73 70 -+8 14 16 88 115 136 17 24 30 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 232 234 231 234 236 233 234 236 233 234 236 233 215 217 214 148 150 147 -+183 185 181 141 142 139 135 137 134 135 137 134 141 142 139 87 89 86 0 2 0 202 145 58 -+3 6 2 88 66 26 250 179 73 109 79 35 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 157 198 239 -+170 212 252 170 212 252 166 207 248 26 33 39 26 20 13 224 163 69 250 179 73 250 179 73 -+250 179 73 197 142 62 202 145 58 250 179 73 250 179 73 250 179 73 234 172 70 21 13 4 -+38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 52 62 74 21 22 20 254 255 252 254 255 252 254 255 252 254 255 252 21 22 20 -+49 59 70 170 212 252 166 207 248 91 123 149 8 14 16 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 215 217 214 234 236 233 234 236 233 234 236 233 234 236 233 123 125 122 -+188 190 187 229 231 228 234 236 233 234 236 233 222 224 221 118 120 117 0 2 0 168 123 54 -+34 26 8 67 49 21 250 179 73 134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 34 41 47 170 212 252 -+170 212 252 170 212 252 85 112 133 0 2 0 164 119 51 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 129 95 39 -+0 2 0 138 174 208 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 34 44 55 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 24 22 25 -+52 62 74 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 178 180 177 234 236 233 234 236 233 234 236 233 234 236 233 141 142 139 -+198 200 197 148 150 147 135 137 134 135 137 134 148 150 147 123 125 122 0 2 0 190 136 56 -+21 13 4 78 58 25 250 179 73 129 95 39 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 82 108 129 170 212 252 -+170 212 252 170 212 252 23 30 36 58 42 19 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 147 105 44 -+0 2 0 139 181 221 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 34 41 47 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 -+25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 6 9 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 91 93 90 234 236 233 234 236 233 234 236 233 234 236 233 126 127 125 -+169 171 168 222 224 221 234 236 233 229 231 228 178 180 177 71 73 70 0 2 0 212 153 66 -+0 2 0 95 68 30 250 179 73 119 87 37 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 138 174 208 170 212 252 -+170 212 252 154 195 235 0 2 0 125 92 35 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 119 87 37 -+0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 57 72 88 7 10 5 252 254 250 254 255 252 254 255 252 254 255 252 95 96 94 -+0 6 9 166 207 248 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 8 14 16 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 7 10 5 222 224 221 234 236 233 234 236 233 234 236 233 141 142 139 -+183 185 181 138 140 137 131 133 130 141 142 139 192 194 191 102 104 101 0 2 0 224 163 69 -+0 2 0 105 75 32 250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 27 33 170 212 252 170 212 252 -+170 212 252 115 152 185 0 2 0 180 132 57 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 10 12 8 -+38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 82 108 129 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 158 160 156 -+0 2 0 92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 141 142 139 234 236 233 234 236 233 234 236 233 131 133 130 -+185 187 183 231 233 230 222 224 221 158 160 156 138 140 137 48 50 48 3 6 2 250 179 73 -+134 100 43 206 148 61 218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 75 94 116 170 212 252 170 212 252 -+170 212 252 92 119 140 0 2 0 224 163 69 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 87 61 23 7 0 0 -+134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 109 141 168 0 2 0 178 180 177 254 255 252 254 255 252 254 255 252 252 254 250 -+39 43 45 10 16 18 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+88 115 136 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 45 47 44 234 236 233 234 236 233 234 236 233 131 133 130 -+148 150 147 138 140 137 148 150 147 210 212 209 152 154 151 26 27 25 29 21 8 250 179 73 -+250 179 73 234 172 70 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 170 212 252 -+170 212 252 103 134 161 0 2 0 202 145 58 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 238 175 73 75 55 22 0 2 0 75 102 123 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 140 177 211 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 -+183 185 181 0 2 0 75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 57 72 88 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 162 164 161 234 236 233 234 236 233 135 137 134 -+226 228 225 198 200 197 104 106 103 15 17 14 0 2 0 15 9 7 147 105 44 250 179 73 -+248 178 79 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 21 27 33 170 212 252 170 212 252 170 212 252 -+170 212 252 122 159 192 0 2 0 175 129 54 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 202 145 58 55 39 17 0 2 0 82 108 129 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 12 17 20 60 62 59 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 69 71 68 0 6 9 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 159 201 241 26 33 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 162 164 161 215 217 214 95 96 94 -+56 58 55 0 2 0 0 2 0 0 2 0 61 44 16 238 175 73 250 179 73 250 179 73 -+218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 88 115 136 170 212 252 170 212 252 170 212 252 -+170 212 252 143 185 225 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 212 153 66 95 68 30 0 2 0 8 14 16 103 134 161 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 68 83 99 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 -+254 255 252 210 212 209 0 6 9 53 68 84 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 126 162 196 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 23 15 7 250 179 73 250 179 73 250 179 73 -+250 179 73 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 166 207 248 0 2 0 52 36 13 158 114 46 180 132 57 161 117 49 119 87 37 -+41 31 10 0 2 0 0 2 0 72 87 103 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 115 152 185 0 2 0 152 154 151 254 255 252 238 241 237 85 87 84 -+229 231 228 254 255 252 99 101 98 0 2 0 126 162 196 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 -+250 179 73 105 75 32 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 32 39 45 0 2 0 57 72 88 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 85 112 133 12 17 20 0 2 0 0 2 0 0 2 0 0 2 0 -+34 41 47 92 110 133 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 166 207 248 6 12 15 71 73 70 254 255 252 229 231 228 0 2 0 -+141 142 139 254 255 252 231 233 230 10 12 8 34 44 55 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 154 195 235 6 12 15 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 125 92 35 250 179 73 250 179 73 -+250 179 73 180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 68 83 99 -+129 165 199 85 112 133 0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 126 162 196 119 156 189 134 170 204 149 191 231 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 57 72 88 3 6 2 242 244 240 254 255 252 35 37 34 -+78 80 77 254 255 252 254 255 252 128 130 127 0 2 0 105 137 164 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 91 123 149 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 55 39 17 250 179 73 250 179 73 -+250 179 73 245 175 76 7 10 5 0 2 0 44 54 65 103 134 161 161 203 243 170 212 252 -+170 212 252 21 27 33 25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 61 76 92 0 2 0 242 244 240 254 255 252 102 104 101 -+10 12 8 231 233 230 254 255 252 244 246 243 26 27 25 21 27 33 159 201 241 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 32 39 45 0 6 9 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 218 158 64 250 179 73 -+250 179 73 250 179 73 75 55 22 0 2 0 161 203 243 170 212 252 170 212 252 170 212 252 -+115 147 174 0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 159 201 241 146 188 228 -+140 177 211 134 170 204 146 188 228 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 17 24 30 62 64 61 254 255 252 254 255 252 215 217 214 -+0 2 0 102 104 101 254 255 252 254 255 252 166 168 165 0 2 0 72 87 103 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 75 32 250 179 73 -+250 179 73 250 179 73 150 108 46 0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 -+49 59 70 3 10 13 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 166 207 248 109 141 168 65 87 102 28 35 41 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 28 35 41 70 96 117 138 174 208 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 0 2 0 102 104 101 254 255 252 254 255 252 254 255 252 -+102 104 101 0 2 0 192 194 191 254 255 252 254 255 252 78 80 77 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 34 44 55 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 61 76 92 154 195 235 0 6 9 29 21 8 250 179 73 -+250 179 73 250 179 73 224 163 69 0 2 0 68 83 99 170 212 252 170 212 252 143 179 213 -+0 2 0 72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+161 203 243 96 115 138 17 24 30 0 2 0 0 2 0 45 47 44 102 104 101 123 125 122 -+138 140 137 143 145 142 115 117 114 82 83 81 43 44 42 0 2 0 0 2 0 32 39 45 -+126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 0 2 0 85 87 84 254 255 252 254 255 252 254 255 252 -+242 244 240 27 29 27 35 37 34 254 255 252 254 255 252 231 233 230 10 12 8 21 27 33 -+159 201 241 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 6 9 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 44 54 65 170 212 252 170 212 252 34 44 55 0 2 0 82 62 28 -+109 79 35 224 163 69 250 179 73 52 36 13 15 20 22 170 212 252 170 212 252 75 89 106 -+0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 -+25 32 38 0 2 0 40 41 39 155 157 153 238 241 237 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 115 117 114 18 20 17 -+0 2 0 68 83 99 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 52 62 74 7 10 5 234 236 233 254 255 252 254 255 252 -+254 255 252 195 197 194 102 104 101 254 255 252 254 255 252 254 255 252 162 164 161 0 2 0 -+72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 119 156 189 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 115 147 174 170 212 252 91 123 149 0 2 0 0 2 0 6 12 15 -+0 2 0 15 9 7 197 142 62 125 92 35 0 2 0 115 152 185 113 145 172 3 6 2 -+41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 113 145 172 0 6 9 -+10 12 8 155 157 153 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 232 234 231 -+87 89 86 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 115 152 185 0 2 0 138 140 137 254 255 252 254 255 252 -+254 255 252 254 255 252 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 65 66 64 -+0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 154 195 235 170 212 252 143 179 213 88 115 136 149 191 231 170 212 252 -+126 162 196 3 6 2 64 46 18 202 145 58 0 2 0 0 2 0 0 2 0 0 2 0 -+92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 143 179 213 3 10 13 27 29 27 -+215 217 214 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 155 157 153 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 23 30 36 27 29 27 249 251 248 254 255 252 -+254 255 252 188 190 187 7 10 5 226 228 225 254 255 252 254 255 252 254 255 252 231 233 230 -+7 10 5 21 27 33 159 201 241 170 212 252 103 134 161 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 55 66 77 11 4 3 250 179 73 24 17 10 0 2 0 0 2 0 0 2 0 -+143 185 225 170 212 252 170 212 252 170 212 252 159 201 241 28 35 41 7 10 5 200 202 199 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 155 157 153 0 2 0 55 66 77 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 96 127 154 0 2 0 158 160 156 254 255 252 -+254 255 252 192 194 191 0 2 0 176 178 175 254 255 252 254 255 252 254 255 252 254 255 252 -+141 142 139 0 2 0 72 87 103 129 165 199 0 6 9 0 6 9 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 12 17 20 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 -+138 174 208 17 24 30 29 21 8 250 179 73 101 72 28 0 2 0 0 2 0 32 39 45 -+170 212 252 170 212 252 170 212 252 170 212 252 57 72 88 0 2 0 152 154 151 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 108 110 107 0 2 0 115 152 185 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 18 22 24 40 41 39 254 255 252 -+254 255 252 232 234 231 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 10 12 8 0 2 0 8 14 16 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 41 51 62 61 76 92 34 44 55 3 10 13 -+0 2 0 11 4 3 164 119 51 250 179 73 175 129 54 0 2 0 0 2 0 82 108 129 -+170 212 252 170 212 252 170 212 252 98 129 156 0 2 0 95 96 94 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 238 241 237 18 20 17 25 32 38 166 207 248 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 85 112 133 0 2 0 188 190 187 -+254 255 252 254 255 252 198 200 197 242 244 240 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 120 122 119 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 6 9 7 0 0 -+31 23 12 202 145 58 250 179 73 250 179 73 238 175 73 0 2 0 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 28 35 41 31 32 30 244 246 243 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 85 112 133 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 0 2 0 148 150 147 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 222 224 221 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+7 0 0 234 172 70 250 179 73 250 179 73 250 179 73 34 26 8 0 2 0 149 191 231 -+170 212 252 170 212 252 129 165 199 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 48 50 48 3 10 13 146 188 228 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 0 2 0 118 120 117 -+254 255 252 254 255 252 254 255 252 169 171 168 231 233 230 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 170 124 49 250 179 73 250 179 73 250 179 73 48 33 15 6 12 15 170 212 252 -+170 212 252 170 212 252 65 87 102 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 195 197 194 0 2 0 84 103 125 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 3 10 13 85 87 84 -+254 255 252 254 255 252 234 236 233 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 99 101 98 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 95 68 30 250 179 73 250 179 73 250 179 73 34 26 8 34 44 55 170 212 252 -+170 212 252 163 205 246 8 14 16 62 64 61 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 35 37 34 34 44 55 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 26 33 39 60 62 59 -+254 255 252 254 255 252 238 241 237 0 2 0 108 110 107 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 158 160 156 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 23 15 7 248 178 79 250 179 73 245 175 76 0 2 0 63 78 94 170 212 252 -+170 212 252 109 141 168 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 104 106 103 0 2 0 -+154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 69 71 68 -+254 255 252 254 255 252 244 246 243 0 2 0 91 93 90 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 215 217 214 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 197 142 62 250 179 73 212 153 66 0 2 0 92 110 133 170 212 252 -+170 212 252 80 98 121 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 176 178 175 0 2 0 -+105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 8 14 16 87 89 86 -+254 255 252 254 255 252 254 255 252 40 41 39 21 22 20 252 254 250 254 255 252 254 255 252 -+254 255 252 254 255 252 252 254 250 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 125 92 35 250 179 73 170 124 49 0 2 0 113 145 172 170 212 252 -+170 212 252 53 68 84 15 17 14 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 242 244 240 0 2 0 -+63 78 94 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 0 2 0 104 106 103 -+254 255 252 254 255 252 254 255 252 123 125 122 0 2 0 166 168 165 254 255 252 254 255 252 -+254 255 252 254 255 252 234 236 233 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 7 0 0 52 36 13 250 179 73 129 95 39 0 2 0 143 179 213 170 212 252 -+170 212 252 32 39 45 48 50 48 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 60 62 59 -+18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 2 0 102 104 101 -+254 255 252 254 255 252 254 255 252 226 228 225 15 17 14 10 12 8 215 217 214 254 255 252 -+254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 88 66 26 29 21 8 0 2 0 166 207 248 170 212 252 -+170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 123 125 122 -+0 2 0 149 191 231 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 56 58 55 -+254 255 252 254 255 252 254 255 252 254 255 252 178 180 177 0 2 0 38 40 37 238 241 237 -+254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 7 0 0 0 2 0 161 203 243 170 212 252 -+149 191 231 0 2 0 123 125 122 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 141 142 139 -+0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 -+210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 120 122 119 0 2 0 21 22 20 -+143 145 142 244 246 243 219 221 218 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 149 191 231 170 212 252 -+129 165 199 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 155 157 153 -+0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 0 6 9 -+69 71 68 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 71 73 70 0 2 0 -+0 2 0 0 2 0 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 170 212 252 -+129 165 199 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 169 171 168 -+0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 75 94 116 -+0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 134 170 204 170 212 252 -+134 170 204 0 2 0 152 154 151 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 -+0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 -+44 54 65 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 35 37 34 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 -+138 174 208 0 2 0 143 145 142 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 198 200 197 -+0 2 0 103 134 161 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+157 198 239 28 35 41 0 2 0 188 190 187 254 255 252 252 254 250 3 6 2 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 115 152 185 170 212 252 -+143 179 213 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 -+0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 146 188 228 0 6 9 26 27 25 242 244 240 176 178 175 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 170 212 252 -+143 185 225 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 185 187 183 -+0 2 0 105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 163 205 246 0 2 0 0 2 0 102 104 101 60 62 59 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 80 98 121 170 212 252 -+149 191 231 0 2 0 118 120 117 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 143 145 142 -+0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 143 179 213 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 170 212 252 -+170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 108 110 107 -+0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 115 152 185 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 170 212 252 -+170 212 252 34 44 55 43 44 42 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 -+15 20 22 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 75 94 116 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 -+170 212 252 63 78 94 3 6 2 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 31 32 30 -+41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+161 203 243 6 12 15 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 -+170 212 252 88 115 136 0 2 0 210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 249 251 248 0 2 0 -+68 83 99 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+96 127 154 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 61 76 92 -+170 212 252 119 150 178 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 0 2 0 -+91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+28 35 41 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 -+146 188 228 143 185 225 0 2 0 126 127 125 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 85 87 84 0 6 9 -+154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 98 129 156 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+72 90 112 170 212 252 18 22 24 56 58 55 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 238 241 237 7 10 5 55 66 77 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 0 6 9 -+0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 122 159 192 72 87 103 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 113 145 172 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 139 181 221 8 14 16 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 18 22 24 109 141 168 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 12 17 20 166 207 248 -+170 212 252 170 212 252 170 212 252 170 212 252 146 188 228 23 30 36 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 101 72 28 202 145 58 -+180 132 57 0 2 0 38 45 51 3 10 13 69 71 68 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 200 202 199 0 2 0 75 89 106 170 212 252 -+170 212 252 170 212 252 170 212 252 109 141 168 8 14 16 0 2 0 21 13 4 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 7 0 0 0 2 0 101 72 28 218 158 64 250 179 73 250 179 73 -+250 179 73 139 99 44 0 2 0 8 14 16 0 2 0 238 241 237 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 244 246 243 38 40 37 3 10 13 139 181 221 170 212 252 -+170 212 252 161 203 243 66 80 97 0 2 0 31 23 12 191 142 60 248 183 74 180 132 57 -+44 34 15 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 23 15 7 190 136 56 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 150 108 46 0 2 0 0 2 0 82 83 81 222 224 221 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 102 104 101 0 2 0 98 129 156 170 212 252 163 205 246 -+98 129 156 23 30 36 0 2 0 82 62 28 234 172 70 248 183 74 248 183 74 248 183 74 -+248 183 74 158 114 46 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 64 46 18 109 79 35 150 108 46 224 163 69 250 179 73 -+250 179 73 250 179 73 250 179 73 158 114 46 0 2 0 0 2 0 3 6 2 115 117 114 -+234 236 233 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 176 178 175 0 2 0 57 72 88 146 188 228 80 98 121 8 14 16 -+0 2 0 24 17 10 158 114 46 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 242 178 77 58 42 19 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 0 2 0 67 49 21 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 95 68 30 0 2 0 0 2 0 -+0 2 0 52 54 51 108 110 107 162 164 161 219 221 218 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 -+219 221 218 178 180 177 18 20 17 6 12 15 26 33 39 0 2 0 0 2 0 52 36 13 -+164 119 51 242 178 77 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 242 178 77 -+187 138 56 175 129 54 158 114 46 82 62 28 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 78 58 25 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 234 172 70 142 101 40 -+44 34 15 10 12 8 0 2 0 0 2 0 0 2 0 18 20 17 60 62 59 71 73 70 -+82 83 81 95 96 94 104 106 103 118 120 117 115 117 114 78 80 77 40 41 39 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 44 34 15 105 75 32 191 142 60 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 105 75 32 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 187 138 56 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 142 101 40 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 206 148 61 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 161 117 49 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 228 167 73 250 179 73 -+238 175 73 190 136 56 158 114 46 234 172 70 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 147 105 44 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 67 49 21 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 -+31 23 12 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 21 13 4 -+0 2 0 0 2 0 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 -+134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 155 111 43 248 183 74 248 183 74 -+248 183 74 248 183 74 224 163 69 55 39 17 64 46 18 164 119 51 242 178 77 248 183 74 -+75 55 22 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 228 167 73 88 66 26 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 168 123 54 248 183 74 -+248 183 74 248 183 74 158 114 46 0 2 0 7 0 0 0 2 0 10 12 8 44 34 15 -+15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 29 21 8 250 179 73 250 179 73 158 114 46 15 14 3 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 175 129 54 -+248 183 74 248 183 74 114 83 33 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 29 21 8 147 105 44 58 42 19 0 2 0 7 0 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+105 75 32 218 158 64 23 15 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -diff --git a/drivers/video/logo/logo_linux_mono.pbm b/drivers/video/logo/logo_linux_mono.pbm -index 2f14d9f..3d3c358 100644 ---- a/drivers/video/logo/logo_linux_mono.pbm -+++ b/drivers/video/logo/logo_linux_mono.pbm -@@ -1,203 +1,159 @@ --P1 --# Standard black and white Linux logo --80 80 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 --1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 1 1 --1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 --1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 --0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 --1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 --0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 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 1 1 1 1 1 1 1 1 1 1 1 0 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 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 1 1 0 1 1 1 1 1 1 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 --1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 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 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 0 0 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 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 1 1 1 0 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 0 0 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 1 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 --1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 --1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 --1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 --1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 --1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -+P2 -+80 78 -+255 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 255 255 255 255 255 0 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 -+255 0 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 -+255 255 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 -+255 255 0 0 0 0 0 0 0 0 -+0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 -+255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 255 255 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 0 255 255 0 0 255 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 255 255 255 0 0 255 -+255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 255 -+255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 0 -+255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 -+0 255 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 -+0 255 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 -+0 0 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 255 255 255 -+255 0 0 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 255 0 0 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 -+255 0 0 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 0 0 255 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 255 255 255 -+255 255 0 0 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 255 255 255 255 0 255 255 255 -+255 255 255 0 0 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 0 255 255 255 -+255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 0 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 0 -+0 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 255 -+0 0 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -diff --git a/drivers/video/logo/logo_linux_vga16.ppm b/drivers/video/logo/logo_linux_vga16.ppm -index 1850c15..f279f97 100644 ---- a/drivers/video/logo/logo_linux_vga16.ppm -+++ b/drivers/video/logo/logo_linux_vga16.ppm -@@ -1,1604 +1,18724 @@ - P3 --# Standard 16-color Linux logo --80 80 --255 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 170 170 170 85 85 85 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 170 170 170 170 170 --170 170 170 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 170 170 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 170 170 170 255 255 255 255 255 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 255 255 255 170 170 170 170 170 170 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 0 0 0 0 0 0 255 255 255 -- 85 85 85 0 0 0 0 0 0 0 0 0 --255 255 255 170 170 170 0 0 0 85 85 85 --170 170 170 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 170 170 170 -- 85 85 85 0 0 0 0 0 0 0 0 0 --255 255 255 85 85 85 0 0 0 0 0 0 -- 85 85 85 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 0 0 0 0 0 0 170 170 170 -- 85 85 85 85 85 85 85 85 85 85 85 85 --255 255 255 85 85 85 0 0 0 0 0 0 -- 85 85 85 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 170 170 170 170 170 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 170 170 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 170 85 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 85 85 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 85 85 85 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 170 170 170 170 170 170 170 170 0 0 0 -- 0 0 0 0 0 0 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 170 170 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 170 170 170 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 170 170 170 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 170 170 170 --170 170 170 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 170 170 170 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 170 170 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 170 170 170 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 85 85 85 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 0 0 0 85 85 85 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 85 85 85 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 -- 0 0 0 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 85 85 85 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 85 85 85 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 170 170 170 -- 85 85 85 0 0 0 0 0 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 85 85 85 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 170 85 0 170 85 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 85 85 85 85 85 85 170 85 0 --170 85 0 170 85 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -+# CREATOR: GIMP PNM Filter Version 1.1 -+80 78 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 diff --git a/kernels/linux-libre-rt/logo_linux_clut224.ppm b/kernels/linux-libre-rt/logo_linux_clut224.ppm new file mode 100644 index 000000000..c9d837347 --- /dev/null +++ b/kernels/linux-libre-rt/logo_linux_clut224.ppm @@ -0,0 +1,861 @@ +P3 +80 78 +255 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 23 30 36 44 54 65 57 72 88 44 54 65 6 12 15 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 31 41 52 +103 134 161 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 +82 108 129 8 14 16 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 17 24 30 126 162 196 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 161 203 243 92 119 140 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 154 195 235 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 138 174 208 21 27 33 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 70 96 117 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 49 59 70 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 3 6 52 62 74 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 +82 108 129 149 191 231 170 212 252 170 212 252 170 212 252 129 165 199 82 108 129 149 191 231 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 37 48 59 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 21 13 4 31 23 12 0 2 0 0 2 0 105 75 32 155 111 43 23 15 7 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 6 9 3 10 13 146 188 228 170 212 252 170 212 252 170 212 252 157 198 239 0 6 9 +0 2 0 52 62 74 170 212 252 170 212 252 154 195 235 0 6 9 0 2 0 55 66 77 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 151 193 233 17 24 30 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +10 12 8 23 15 7 139 99 44 206 148 61 67 49 21 0 2 0 125 92 35 206 148 61 +15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 96 127 154 170 212 252 170 212 252 170 212 252 170 212 252 92 119 140 21 22 20 +10 12 8 53 68 84 170 212 252 170 212 252 92 119 140 10 12 8 7 10 5 53 68 84 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 +0 6 9 0 3 6 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 22 20 +62 64 61 38 40 37 0 2 0 34 26 8 212 153 66 64 46 18 0 2 0 170 124 49 +180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 65 87 102 115 117 114 +43 44 42 88 115 136 170 212 252 170 212 252 68 83 99 108 110 107 60 62 59 88 115 136 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +80 98 121 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 10 12 8 56 58 55 95 96 94 178 180 177 215 217 214 198 200 197 +158 160 156 138 140 137 82 83 81 0 2 0 64 46 18 228 167 73 23 15 7 41 31 10 +250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 +0 2 0 126 162 196 170 212 252 170 212 252 57 72 88 0 2 0 0 2 0 126 162 196 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +157 198 239 8 14 16 0 6 9 0 2 0 45 47 44 195 197 194 192 194 191 38 40 37 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 192 194 191 234 236 233 176 178 175 118 120 117 143 145 142 176 178 175 +215 217 214 234 236 233 234 236 233 104 106 103 0 2 0 142 101 40 134 100 43 0 2 0 +164 119 51 170 124 49 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 115 152 185 8 14 16 +49 59 70 166 207 248 170 212 252 170 212 252 119 150 178 8 14 16 55 66 77 166 207 248 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 92 119 140 0 2 0 0 2 0 200 202 199 254 255 252 254 255 252 244 246 243 +40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 38 40 37 234 236 233 234 236 233 234 236 233 135 137 134 215 217 214 171 173 170 +141 142 139 138 140 137 138 140 137 135 137 134 31 32 30 3 6 2 212 153 66 15 9 7 +78 58 25 248 178 79 41 31 10 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 3 6 21 27 33 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 154 195 235 0 6 9 82 83 81 254 255 252 254 255 252 254 255 252 254 255 252 +188 190 187 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 62 64 61 234 236 233 234 236 233 234 236 233 198 200 197 131 133 130 198 200 197 +232 234 231 234 236 233 234 236 233 234 236 233 152 154 151 0 2 0 147 105 44 67 49 21 +23 15 7 250 179 73 158 114 46 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 61 76 92 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 154 195 235 103 134 161 80 98 121 +52 62 74 18 22 24 0 2 0 3 10 13 38 45 51 80 98 121 151 193 233 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 109 141 168 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 +226 228 225 65 66 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 43 44 42 234 236 233 234 236 233 234 236 233 234 236 233 131 133 130 192 194 191 +152 154 151 141 142 139 141 142 139 141 142 139 158 160 156 3 6 2 82 62 28 129 95 39 +0 2 0 206 148 61 248 178 79 21 13 4 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 96 115 138 +170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 18 22 24 0 2 0 0 2 0 +34 26 8 75 55 22 114 83 33 95 68 30 55 39 17 7 0 0 0 6 9 84 103 125 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 84 103 125 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 171 173 170 +0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 18 20 17 234 236 233 234 236 233 234 236 233 234 236 233 138 140 137 178 180 177 +226 228 225 234 236 233 234 236 233 234 236 233 231 233 230 45 47 44 23 15 7 190 136 56 +0 2 0 147 105 44 250 179 73 64 46 18 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 126 162 196 0 2 0 26 20 13 190 136 56 245 175 76 +250 179 73 161 117 49 164 119 51 245 175 76 250 179 73 206 148 61 75 55 22 0 2 0 +126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 68 83 99 0 2 0 252 254 250 254 255 252 254 255 252 254 255 252 71 73 70 +8 14 16 88 115 136 17 24 30 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 232 234 231 234 236 233 234 236 233 234 236 233 215 217 214 148 150 147 +183 185 181 141 142 139 135 137 134 135 137 134 141 142 139 87 89 86 0 2 0 202 145 58 +3 6 2 88 66 26 250 179 73 109 79 35 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 157 198 239 +170 212 252 170 212 252 166 207 248 26 33 39 26 20 13 224 163 69 250 179 73 250 179 73 +250 179 73 197 142 62 202 145 58 250 179 73 250 179 73 250 179 73 234 172 70 21 13 4 +38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 52 62 74 21 22 20 254 255 252 254 255 252 254 255 252 254 255 252 21 22 20 +49 59 70 170 212 252 166 207 248 91 123 149 8 14 16 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 215 217 214 234 236 233 234 236 233 234 236 233 234 236 233 123 125 122 +188 190 187 229 231 228 234 236 233 234 236 233 222 224 221 118 120 117 0 2 0 168 123 54 +34 26 8 67 49 21 250 179 73 134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 34 41 47 170 212 252 +170 212 252 170 212 252 85 112 133 0 2 0 164 119 51 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 129 95 39 +0 2 0 138 174 208 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 34 44 55 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 24 22 25 +52 62 74 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 178 180 177 234 236 233 234 236 233 234 236 233 234 236 233 141 142 139 +198 200 197 148 150 147 135 137 134 135 137 134 148 150 147 123 125 122 0 2 0 190 136 56 +21 13 4 78 58 25 250 179 73 129 95 39 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 82 108 129 170 212 252 +170 212 252 170 212 252 23 30 36 58 42 19 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 147 105 44 +0 2 0 139 181 221 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 34 41 47 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 +25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 6 9 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 91 93 90 234 236 233 234 236 233 234 236 233 234 236 233 126 127 125 +169 171 168 222 224 221 234 236 233 229 231 228 178 180 177 71 73 70 0 2 0 212 153 66 +0 2 0 95 68 30 250 179 73 119 87 37 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 138 174 208 170 212 252 +170 212 252 154 195 235 0 2 0 125 92 35 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 119 87 37 +0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 57 72 88 7 10 5 252 254 250 254 255 252 254 255 252 254 255 252 95 96 94 +0 6 9 166 207 248 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 8 14 16 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 7 10 5 222 224 221 234 236 233 234 236 233 234 236 233 141 142 139 +183 185 181 138 140 137 131 133 130 141 142 139 192 194 191 102 104 101 0 2 0 224 163 69 +0 2 0 105 75 32 250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 27 33 170 212 252 170 212 252 +170 212 252 115 152 185 0 2 0 180 132 57 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 10 12 8 +38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 82 108 129 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 158 160 156 +0 2 0 92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 141 142 139 234 236 233 234 236 233 234 236 233 131 133 130 +185 187 183 231 233 230 222 224 221 158 160 156 138 140 137 48 50 48 3 6 2 250 179 73 +134 100 43 206 148 61 218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 75 94 116 170 212 252 170 212 252 +170 212 252 92 119 140 0 2 0 224 163 69 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 87 61 23 7 0 0 +134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 109 141 168 0 2 0 178 180 177 254 255 252 254 255 252 254 255 252 252 254 250 +39 43 45 10 16 18 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +88 115 136 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 45 47 44 234 236 233 234 236 233 234 236 233 131 133 130 +148 150 147 138 140 137 148 150 147 210 212 209 152 154 151 26 27 25 29 21 8 250 179 73 +250 179 73 234 172 70 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 170 212 252 +170 212 252 103 134 161 0 2 0 202 145 58 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 238 175 73 75 55 22 0 2 0 75 102 123 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 140 177 211 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 +183 185 181 0 2 0 75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 57 72 88 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 162 164 161 234 236 233 234 236 233 135 137 134 +226 228 225 198 200 197 104 106 103 15 17 14 0 2 0 15 9 7 147 105 44 250 179 73 +248 178 79 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 21 27 33 170 212 252 170 212 252 170 212 252 +170 212 252 122 159 192 0 2 0 175 129 54 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 202 145 58 55 39 17 0 2 0 82 108 129 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 12 17 20 60 62 59 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 69 71 68 0 6 9 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 159 201 241 26 33 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 162 164 161 215 217 214 95 96 94 +56 58 55 0 2 0 0 2 0 0 2 0 61 44 16 238 175 73 250 179 73 250 179 73 +218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 88 115 136 170 212 252 170 212 252 170 212 252 +170 212 252 143 185 225 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 212 153 66 95 68 30 0 2 0 8 14 16 103 134 161 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 68 83 99 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 +254 255 252 210 212 209 0 6 9 53 68 84 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 126 162 196 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 23 15 7 250 179 73 250 179 73 250 179 73 +250 179 73 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 166 207 248 0 2 0 52 36 13 158 114 46 180 132 57 161 117 49 119 87 37 +41 31 10 0 2 0 0 2 0 72 87 103 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 115 152 185 0 2 0 152 154 151 254 255 252 238 241 237 85 87 84 +229 231 228 254 255 252 99 101 98 0 2 0 126 162 196 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 +250 179 73 105 75 32 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 32 39 45 0 2 0 57 72 88 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 85 112 133 12 17 20 0 2 0 0 2 0 0 2 0 0 2 0 +34 41 47 92 110 133 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 166 207 248 6 12 15 71 73 70 254 255 252 229 231 228 0 2 0 +141 142 139 254 255 252 231 233 230 10 12 8 34 44 55 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 154 195 235 6 12 15 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 125 92 35 250 179 73 250 179 73 +250 179 73 180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 68 83 99 +129 165 199 85 112 133 0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 126 162 196 119 156 189 134 170 204 149 191 231 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 57 72 88 3 6 2 242 244 240 254 255 252 35 37 34 +78 80 77 254 255 252 254 255 252 128 130 127 0 2 0 105 137 164 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 91 123 149 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 55 39 17 250 179 73 250 179 73 +250 179 73 245 175 76 7 10 5 0 2 0 44 54 65 103 134 161 161 203 243 170 212 252 +170 212 252 21 27 33 25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 61 76 92 0 2 0 242 244 240 254 255 252 102 104 101 +10 12 8 231 233 230 254 255 252 244 246 243 26 27 25 21 27 33 159 201 241 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 32 39 45 0 6 9 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 218 158 64 250 179 73 +250 179 73 250 179 73 75 55 22 0 2 0 161 203 243 170 212 252 170 212 252 170 212 252 +115 147 174 0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 159 201 241 146 188 228 +140 177 211 134 170 204 146 188 228 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 17 24 30 62 64 61 254 255 252 254 255 252 215 217 214 +0 2 0 102 104 101 254 255 252 254 255 252 166 168 165 0 2 0 72 87 103 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 75 32 250 179 73 +250 179 73 250 179 73 150 108 46 0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 +49 59 70 3 10 13 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 166 207 248 109 141 168 65 87 102 28 35 41 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 28 35 41 70 96 117 138 174 208 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 0 2 0 102 104 101 254 255 252 254 255 252 254 255 252 +102 104 101 0 2 0 192 194 191 254 255 252 254 255 252 78 80 77 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 34 44 55 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 61 76 92 154 195 235 0 6 9 29 21 8 250 179 73 +250 179 73 250 179 73 224 163 69 0 2 0 68 83 99 170 212 252 170 212 252 143 179 213 +0 2 0 72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +161 203 243 96 115 138 17 24 30 0 2 0 0 2 0 45 47 44 102 104 101 123 125 122 +138 140 137 143 145 142 115 117 114 82 83 81 43 44 42 0 2 0 0 2 0 32 39 45 +126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 0 2 0 85 87 84 254 255 252 254 255 252 254 255 252 +242 244 240 27 29 27 35 37 34 254 255 252 254 255 252 231 233 230 10 12 8 21 27 33 +159 201 241 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 6 9 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 44 54 65 170 212 252 170 212 252 34 44 55 0 2 0 82 62 28 +109 79 35 224 163 69 250 179 73 52 36 13 15 20 22 170 212 252 170 212 252 75 89 106 +0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 +25 32 38 0 2 0 40 41 39 155 157 153 238 241 237 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 115 117 114 18 20 17 +0 2 0 68 83 99 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 52 62 74 7 10 5 234 236 233 254 255 252 254 255 252 +254 255 252 195 197 194 102 104 101 254 255 252 254 255 252 254 255 252 162 164 161 0 2 0 +72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 119 156 189 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 115 147 174 170 212 252 91 123 149 0 2 0 0 2 0 6 12 15 +0 2 0 15 9 7 197 142 62 125 92 35 0 2 0 115 152 185 113 145 172 3 6 2 +41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 113 145 172 0 6 9 +10 12 8 155 157 153 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 232 234 231 +87 89 86 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 115 152 185 0 2 0 138 140 137 254 255 252 254 255 252 +254 255 252 254 255 252 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 65 66 64 +0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 154 195 235 170 212 252 143 179 213 88 115 136 149 191 231 170 212 252 +126 162 196 3 6 2 64 46 18 202 145 58 0 2 0 0 2 0 0 2 0 0 2 0 +92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 143 179 213 3 10 13 27 29 27 +215 217 214 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 155 157 153 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 23 30 36 27 29 27 249 251 248 254 255 252 +254 255 252 188 190 187 7 10 5 226 228 225 254 255 252 254 255 252 254 255 252 231 233 230 +7 10 5 21 27 33 159 201 241 170 212 252 103 134 161 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 55 66 77 11 4 3 250 179 73 24 17 10 0 2 0 0 2 0 0 2 0 +143 185 225 170 212 252 170 212 252 170 212 252 159 201 241 28 35 41 7 10 5 200 202 199 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 155 157 153 0 2 0 55 66 77 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 96 127 154 0 2 0 158 160 156 254 255 252 +254 255 252 192 194 191 0 2 0 176 178 175 254 255 252 254 255 252 254 255 252 254 255 252 +141 142 139 0 2 0 72 87 103 129 165 199 0 6 9 0 6 9 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 12 17 20 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 +138 174 208 17 24 30 29 21 8 250 179 73 101 72 28 0 2 0 0 2 0 32 39 45 +170 212 252 170 212 252 170 212 252 170 212 252 57 72 88 0 2 0 152 154 151 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 108 110 107 0 2 0 115 152 185 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 18 22 24 40 41 39 254 255 252 +254 255 252 232 234 231 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 10 12 8 0 2 0 8 14 16 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 41 51 62 61 76 92 34 44 55 3 10 13 +0 2 0 11 4 3 164 119 51 250 179 73 175 129 54 0 2 0 0 2 0 82 108 129 +170 212 252 170 212 252 170 212 252 98 129 156 0 2 0 95 96 94 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 238 241 237 18 20 17 25 32 38 166 207 248 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 85 112 133 0 2 0 188 190 187 +254 255 252 254 255 252 198 200 197 242 244 240 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 120 122 119 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 6 9 7 0 0 +31 23 12 202 145 58 250 179 73 250 179 73 238 175 73 0 2 0 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 28 35 41 31 32 30 244 246 243 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 85 112 133 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 0 2 0 148 150 147 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 222 224 221 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +7 0 0 234 172 70 250 179 73 250 179 73 250 179 73 34 26 8 0 2 0 149 191 231 +170 212 252 170 212 252 129 165 199 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 48 50 48 3 10 13 146 188 228 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 0 2 0 118 120 117 +254 255 252 254 255 252 254 255 252 169 171 168 231 233 230 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 170 124 49 250 179 73 250 179 73 250 179 73 48 33 15 6 12 15 170 212 252 +170 212 252 170 212 252 65 87 102 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 195 197 194 0 2 0 84 103 125 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 3 10 13 85 87 84 +254 255 252 254 255 252 234 236 233 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 99 101 98 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 95 68 30 250 179 73 250 179 73 250 179 73 34 26 8 34 44 55 170 212 252 +170 212 252 163 205 246 8 14 16 62 64 61 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 35 37 34 34 44 55 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 26 33 39 60 62 59 +254 255 252 254 255 252 238 241 237 0 2 0 108 110 107 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 158 160 156 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 23 15 7 248 178 79 250 179 73 245 175 76 0 2 0 63 78 94 170 212 252 +170 212 252 109 141 168 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 104 106 103 0 2 0 +154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 69 71 68 +254 255 252 254 255 252 244 246 243 0 2 0 91 93 90 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 215 217 214 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 197 142 62 250 179 73 212 153 66 0 2 0 92 110 133 170 212 252 +170 212 252 80 98 121 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 176 178 175 0 2 0 +105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 8 14 16 87 89 86 +254 255 252 254 255 252 254 255 252 40 41 39 21 22 20 252 254 250 254 255 252 254 255 252 +254 255 252 254 255 252 252 254 250 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 125 92 35 250 179 73 170 124 49 0 2 0 113 145 172 170 212 252 +170 212 252 53 68 84 15 17 14 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 242 244 240 0 2 0 +63 78 94 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 0 2 0 104 106 103 +254 255 252 254 255 252 254 255 252 123 125 122 0 2 0 166 168 165 254 255 252 254 255 252 +254 255 252 254 255 252 234 236 233 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 7 0 0 52 36 13 250 179 73 129 95 39 0 2 0 143 179 213 170 212 252 +170 212 252 32 39 45 48 50 48 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 60 62 59 +18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 2 0 102 104 101 +254 255 252 254 255 252 254 255 252 226 228 225 15 17 14 10 12 8 215 217 214 254 255 252 +254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 88 66 26 29 21 8 0 2 0 166 207 248 170 212 252 +170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 123 125 122 +0 2 0 149 191 231 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 56 58 55 +254 255 252 254 255 252 254 255 252 254 255 252 178 180 177 0 2 0 38 40 37 238 241 237 +254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 7 0 0 0 2 0 161 203 243 170 212 252 +149 191 231 0 2 0 123 125 122 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 141 142 139 +0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 +210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 120 122 119 0 2 0 21 22 20 +143 145 142 244 246 243 219 221 218 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 149 191 231 170 212 252 +129 165 199 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 155 157 153 +0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 0 6 9 +69 71 68 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 71 73 70 0 2 0 +0 2 0 0 2 0 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 170 212 252 +129 165 199 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 169 171 168 +0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 75 94 116 +0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 134 170 204 170 212 252 +134 170 204 0 2 0 152 154 151 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 +0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 +44 54 65 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 35 37 34 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 +138 174 208 0 2 0 143 145 142 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 198 200 197 +0 2 0 103 134 161 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +157 198 239 28 35 41 0 2 0 188 190 187 254 255 252 252 254 250 3 6 2 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 115 152 185 170 212 252 +143 179 213 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 +0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 146 188 228 0 6 9 26 27 25 242 244 240 176 178 175 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 170 212 252 +143 185 225 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 185 187 183 +0 2 0 105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 163 205 246 0 2 0 0 2 0 102 104 101 60 62 59 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 80 98 121 170 212 252 +149 191 231 0 2 0 118 120 117 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 143 145 142 +0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 143 179 213 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 170 212 252 +170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 108 110 107 +0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 115 152 185 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 170 212 252 +170 212 252 34 44 55 43 44 42 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 +15 20 22 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 75 94 116 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 +170 212 252 63 78 94 3 6 2 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 31 32 30 +41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +161 203 243 6 12 15 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 +170 212 252 88 115 136 0 2 0 210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 249 251 248 0 2 0 +68 83 99 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +96 127 154 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 61 76 92 +170 212 252 119 150 178 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 0 2 0 +91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +28 35 41 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 +146 188 228 143 185 225 0 2 0 126 127 125 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 85 87 84 0 6 9 +154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 98 129 156 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +72 90 112 170 212 252 18 22 24 56 58 55 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 238 241 237 7 10 5 55 66 77 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 0 6 9 +0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 122 159 192 72 87 103 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 113 145 172 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 139 181 221 8 14 16 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 18 22 24 109 141 168 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 12 17 20 166 207 248 +170 212 252 170 212 252 170 212 252 170 212 252 146 188 228 23 30 36 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 101 72 28 202 145 58 +180 132 57 0 2 0 38 45 51 3 10 13 69 71 68 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 200 202 199 0 2 0 75 89 106 170 212 252 +170 212 252 170 212 252 170 212 252 109 141 168 8 14 16 0 2 0 21 13 4 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 7 0 0 0 2 0 101 72 28 218 158 64 250 179 73 250 179 73 +250 179 73 139 99 44 0 2 0 8 14 16 0 2 0 238 241 237 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 244 246 243 38 40 37 3 10 13 139 181 221 170 212 252 +170 212 252 161 203 243 66 80 97 0 2 0 31 23 12 191 142 60 248 183 74 180 132 57 +44 34 15 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 23 15 7 190 136 56 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 150 108 46 0 2 0 0 2 0 82 83 81 222 224 221 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 102 104 101 0 2 0 98 129 156 170 212 252 163 205 246 +98 129 156 23 30 36 0 2 0 82 62 28 234 172 70 248 183 74 248 183 74 248 183 74 +248 183 74 158 114 46 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 64 46 18 109 79 35 150 108 46 224 163 69 250 179 73 +250 179 73 250 179 73 250 179 73 158 114 46 0 2 0 0 2 0 3 6 2 115 117 114 +234 236 233 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 176 178 175 0 2 0 57 72 88 146 188 228 80 98 121 8 14 16 +0 2 0 24 17 10 158 114 46 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 242 178 77 58 42 19 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 0 2 0 67 49 21 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 95 68 30 0 2 0 0 2 0 +0 2 0 52 54 51 108 110 107 162 164 161 219 221 218 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 +219 221 218 178 180 177 18 20 17 6 12 15 26 33 39 0 2 0 0 2 0 52 36 13 +164 119 51 242 178 77 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 242 178 77 +187 138 56 175 129 54 158 114 46 82 62 28 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 78 58 25 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 234 172 70 142 101 40 +44 34 15 10 12 8 0 2 0 0 2 0 0 2 0 18 20 17 60 62 59 71 73 70 +82 83 81 95 96 94 104 106 103 118 120 117 115 117 114 78 80 77 40 41 39 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 44 34 15 105 75 32 191 142 60 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 105 75 32 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 187 138 56 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 142 101 40 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 206 148 61 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 161 117 49 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 228 167 73 250 179 73 +238 175 73 190 136 56 158 114 46 234 172 70 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 147 105 44 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 67 49 21 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 +31 23 12 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 21 13 4 +0 2 0 0 2 0 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 +134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 155 111 43 248 183 74 248 183 74 +248 183 74 248 183 74 224 163 69 55 39 17 64 46 18 164 119 51 242 178 77 248 183 74 +75 55 22 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 228 167 73 88 66 26 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 168 123 54 248 183 74 +248 183 74 248 183 74 158 114 46 0 2 0 7 0 0 0 2 0 10 12 8 44 34 15 +15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 29 21 8 250 179 73 250 179 73 158 114 46 15 14 3 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 175 129 54 +248 183 74 248 183 74 114 83 33 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 29 21 8 147 105 44 58 42 19 0 2 0 7 0 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +105 75 32 218 158 64 23 15 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + diff --git a/kernels/linux-libre-rt/logo_linux_mono.pbm b/kernels/linux-libre-rt/logo_linux_mono.pbm new file mode 100644 index 000000000..3d3c35807 --- /dev/null +++ b/kernels/linux-libre-rt/logo_linux_mono.pbm @@ -0,0 +1,159 @@ +P2 +80 78 +255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 255 255 255 255 255 0 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 +255 0 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 +255 255 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 +255 255 0 0 0 0 0 0 0 0 +0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 +255 255 255 0 0 0 0 0 0 0 +0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 255 255 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 0 255 255 0 0 255 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 255 255 255 0 0 255 +255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 255 +255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 0 +255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 +0 255 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 +0 255 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 +0 0 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 255 255 255 +255 0 0 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 255 0 0 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 +255 0 0 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 0 0 255 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 255 255 255 +255 255 0 0 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 255 255 255 255 0 255 255 255 +255 255 255 0 0 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 0 255 255 255 +255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 0 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 0 +0 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 255 +0 0 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 diff --git a/kernels/linux-libre-rt/logo_linux_vga16.ppm b/kernels/linux-libre-rt/logo_linux_vga16.ppm new file mode 100644 index 000000000..f279f972c --- /dev/null +++ b/kernels/linux-libre-rt/logo_linux_vga16.ppm @@ -0,0 +1,18724 @@ +P3 +# CREATOR: GIMP PNM Filter Version 1.1 +80 78 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +170 +170 +170 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +170 +170 +170 +85 +85 +85 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +170 +170 +170 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +85 +85 +85 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +170 +170 +170 +170 +170 +170 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/kernels/linux-libre-xen/PKGBUILD b/kernels/linux-libre-xen/PKGBUILD index ba9a9be5d..e4b0e6716 100644 --- a/kernels/linux-libre-xen/PKGBUILD +++ b/kernels/linux-libre-xen/PKGBUILD @@ -24,14 +24,16 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn 'config' # standard config files for mkinitcpio ramdisk "${pkgbase}.preset" - 'boot-logo.patch' + 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' 'compal-laptop-hwmon-fix.patch') sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218' '3bbc78694d76b12b6229799d7c4daf5215b9dd731908d96b03603aceb54ad5c7' '285ba206830c2ab24336133de87351d4ecf5483563d4bb2493eb7ea0cb74e43d' '7a475ada892857397cf80d2de777825ae94758dc2d9dfa3754ae3d670f4a2f02' - '8303b426b1a6dce456b2350003558ae312d21cab0ae6c1f0d7b9d21395f4e177' + '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' + '2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53' + 'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015' '1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99' 'f36f61a0a72bcb0a9c04264343503bfbf927c9ea0db819e66734a3933b060588') @@ -46,7 +48,8 @@ prepare() { fi # add freedo as boot logo - patch -p1 -i "${srcdir}/boot-logo.patch" + install -m644 -t drivers/video/logo \ + "${srcdir}/logo_linux_"{clut224.ppm,vga16.ppm,mono.pbm} # add latest fixes from stable queue, if needed # http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git diff --git a/kernels/linux-libre-xen/boot-logo.patch b/kernels/linux-libre-xen/boot-logo.patch deleted file mode 100644 index 3f4e0dea4..000000000 --- a/kernels/linux-libre-xen/boot-logo.patch +++ /dev/null @@ -1,23167 +0,0 @@ -diff --git a/drivers/video/logo/logo_linux_clut224.ppm b/drivers/video/logo/logo_linux_clut224.ppm -index 3c14e43..c9d8373 100644 ---- a/drivers/video/logo/logo_linux_clut224.ppm -+++ b/drivers/video/logo/logo_linux_clut224.ppm -@@ -1,1604 +1,861 @@ - P3 --# Standard 224-color Linux logo --80 80 -+80 78 - 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 6 6 6 10 10 10 10 10 10 -- 10 10 10 6 6 6 6 6 6 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 10 10 10 14 14 14 -- 22 22 22 26 26 26 30 30 30 34 34 34 -- 30 30 30 30 30 30 26 26 26 18 18 18 -- 14 14 14 10 10 10 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 26 26 26 42 42 42 -- 54 54 54 66 66 66 78 78 78 78 78 78 -- 78 78 78 74 74 74 66 66 66 54 54 54 -- 42 42 42 26 26 26 18 18 18 10 10 10 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 22 22 22 42 42 42 66 66 66 86 86 86 -- 66 66 66 38 38 38 38 38 38 22 22 22 -- 26 26 26 34 34 34 54 54 54 66 66 66 -- 86 86 86 70 70 70 46 46 46 26 26 26 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 26 26 26 -- 50 50 50 82 82 82 58 58 58 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 54 54 54 86 86 86 66 66 66 -- 38 38 38 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 22 22 22 50 50 50 -- 78 78 78 34 34 34 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 6 6 6 70 70 70 -- 78 78 78 46 46 46 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 42 42 42 82 82 82 -- 26 26 26 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 14 14 14 -- 46 46 46 34 34 34 6 6 6 2 2 6 -- 42 42 42 78 78 78 42 42 42 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 30 30 30 66 66 66 58 58 58 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 26 26 26 -- 86 86 86 101 101 101 46 46 46 10 10 10 -- 2 2 6 58 58 58 70 70 70 34 34 34 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 42 42 42 86 86 86 10 10 10 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 30 30 30 -- 94 94 94 94 94 94 58 58 58 26 26 26 -- 2 2 6 6 6 6 78 78 78 54 54 54 -- 22 22 22 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 62 62 62 62 62 62 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 26 26 26 -- 54 54 54 38 38 38 18 18 18 10 10 10 -- 2 2 6 2 2 6 34 34 34 82 82 82 -- 38 38 38 14 14 14 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 30 30 30 78 78 78 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 10 10 10 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 78 78 78 -- 50 50 50 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 14 14 14 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 54 54 54 -- 66 66 66 26 26 26 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 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 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 82 82 82 2 2 6 2 2 6 -- 2 2 6 6 6 6 10 10 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 14 14 14 10 10 10 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 18 18 18 -- 82 82 82 34 34 34 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 2 2 6 -- 6 6 6 6 6 6 22 22 22 34 34 34 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 34 34 34 -- 10 10 10 50 50 50 22 22 22 2 2 6 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 86 86 86 42 42 42 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 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 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 2 2 6 -- 38 38 38 116 116 116 94 94 94 22 22 22 -- 22 22 22 2 2 6 2 2 6 2 2 6 -- 14 14 14 86 86 86 138 138 138 162 162 162 --154 154 154 38 38 38 26 26 26 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 86 86 86 46 46 46 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 14 14 14 --134 134 134 198 198 198 195 195 195 116 116 116 -- 10 10 10 2 2 6 2 2 6 6 6 6 --101 98 89 187 187 187 210 210 210 218 218 218 --214 214 214 134 134 134 14 14 14 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 86 86 86 50 50 50 18 18 18 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 54 54 54 --218 218 218 195 195 195 226 226 226 246 246 246 -- 58 58 58 2 2 6 2 2 6 30 30 30 --210 210 210 253 253 253 174 174 174 123 123 123 --221 221 221 234 234 234 74 74 74 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 82 82 82 2 2 6 106 106 106 --170 170 170 26 26 26 86 86 86 226 226 226 --123 123 123 10 10 10 14 14 14 46 46 46 --231 231 231 190 190 190 6 6 6 70 70 70 -- 90 90 90 238 238 238 158 158 158 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 86 86 86 6 6 6 116 116 116 --106 106 106 6 6 6 70 70 70 149 149 149 --128 128 128 18 18 18 38 38 38 54 54 54 --221 221 221 106 106 106 2 2 6 14 14 14 -- 46 46 46 190 190 190 198 198 198 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 62 62 62 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 0 -- 0 0 1 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 94 94 94 14 14 14 101 101 101 --128 128 128 2 2 6 18 18 18 116 116 116 --118 98 46 121 92 8 121 92 8 98 78 10 --162 162 162 106 106 106 2 2 6 2 2 6 -- 2 2 6 195 195 195 195 195 195 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 62 62 62 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 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 0 0 1 -- 0 0 1 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 90 90 90 14 14 14 58 58 58 --210 210 210 26 26 26 54 38 6 154 114 10 --226 170 11 236 186 11 225 175 15 184 144 12 --215 174 15 175 146 61 37 26 9 2 2 6 -- 70 70 70 246 246 246 138 138 138 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 66 66 66 26 26 26 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 14 14 14 10 10 10 --195 195 195 188 164 115 192 133 9 225 175 15 --239 182 13 234 190 10 232 195 16 232 200 30 --245 207 45 241 208 19 232 195 16 184 144 12 --218 194 134 211 206 186 42 42 42 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 50 50 50 74 74 74 30 30 30 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 86 86 86 14 14 14 2 2 6 --121 87 25 192 133 9 219 162 10 239 182 13 --236 186 11 232 195 16 241 208 19 244 214 54 --246 218 60 246 218 38 246 215 20 241 208 19 --241 208 19 226 184 13 121 87 25 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 50 50 50 82 82 82 34 34 34 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 82 82 82 30 30 30 61 42 6 --180 123 7 206 145 10 230 174 11 239 182 13 --234 190 10 238 202 15 241 208 19 246 218 74 --246 218 38 246 215 20 246 215 20 246 215 20 --226 184 13 215 174 15 184 144 12 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 26 26 26 94 94 94 42 42 42 14 14 14 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 50 50 50 104 69 6 --192 133 9 216 158 10 236 178 12 236 186 11 --232 195 16 241 208 19 244 214 54 245 215 43 --246 215 20 246 215 20 241 208 19 198 155 10 --200 144 11 216 158 10 156 118 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 90 90 90 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 46 46 46 22 22 22 --137 92 6 210 162 10 239 182 13 238 190 10 --238 202 15 241 208 19 246 215 20 246 215 20 --241 208 19 203 166 17 185 133 11 210 150 10 --216 158 10 210 150 10 102 78 10 2 2 6 -- 6 6 6 54 54 54 14 14 14 2 2 6 -- 2 2 6 62 62 62 74 74 74 30 30 30 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 78 78 78 50 50 50 6 6 6 -- 94 70 30 139 102 15 190 146 13 226 184 13 --232 200 30 232 195 16 215 174 15 190 146 13 --168 122 10 192 133 9 210 150 10 213 154 11 --202 150 34 182 157 106 101 98 89 2 2 6 -- 2 2 6 78 78 78 116 116 116 58 58 58 -- 2 2 6 22 22 22 90 90 90 46 46 46 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 50 50 50 6 6 6 --128 128 128 174 154 114 156 107 11 168 122 10 --198 155 10 184 144 12 197 138 11 200 144 11 --206 145 10 206 145 10 197 138 11 188 164 115 --195 195 195 198 198 198 174 174 174 14 14 14 -- 2 2 6 22 22 22 116 116 116 116 116 116 -- 22 22 22 2 2 6 74 74 74 70 70 70 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 101 101 101 26 26 26 10 10 10 --138 138 138 190 190 190 174 154 114 156 107 11 --197 138 11 200 144 11 197 138 11 192 133 9 --180 123 7 190 142 34 190 178 144 187 187 187 --202 202 202 221 221 221 214 214 214 66 66 66 -- 2 2 6 2 2 6 50 50 50 62 62 62 -- 6 6 6 2 2 6 10 10 10 90 90 90 -- 50 50 50 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 34 34 34 -- 74 74 74 74 74 74 2 2 6 6 6 6 --144 144 144 198 198 198 190 190 190 178 166 146 --154 121 60 156 107 11 156 107 11 168 124 44 --174 154 114 187 187 187 190 190 190 210 210 210 --246 246 246 253 253 253 253 253 253 182 182 182 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 62 62 62 -- 74 74 74 34 34 34 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 10 10 10 22 22 22 54 54 54 -- 94 94 94 18 18 18 2 2 6 46 46 46 --234 234 234 221 221 221 190 190 190 190 190 190 --190 190 190 187 187 187 187 187 187 190 190 190 --190 190 190 195 195 195 214 214 214 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 -- 82 82 82 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 14 14 14 -- 86 86 86 54 54 54 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 46 46 46 90 90 90 -- 46 46 46 18 18 18 6 6 6 182 182 182 --253 253 253 246 246 246 206 206 206 190 190 190 --190 190 190 190 190 190 190 190 190 190 190 190 --206 206 206 231 231 231 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --202 202 202 14 14 14 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 42 42 42 86 86 86 42 42 42 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 14 14 14 38 38 38 74 74 74 66 66 66 -- 2 2 6 6 6 6 90 90 90 250 250 250 --253 253 253 253 253 253 238 238 238 198 198 198 --190 190 190 190 190 190 195 195 195 221 221 221 --246 246 246 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 82 82 82 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 78 78 78 70 70 70 34 34 34 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 34 34 34 66 66 66 78 78 78 6 6 6 -- 2 2 6 18 18 18 218 218 218 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --226 226 226 231 231 231 246 246 246 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 178 178 178 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 18 18 18 90 90 90 62 62 62 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 26 26 26 -- 58 58 58 90 90 90 18 18 18 2 2 6 -- 2 2 6 110 110 110 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 231 231 231 18 18 18 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 94 94 94 -- 54 54 54 26 26 26 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 22 22 22 50 50 50 -- 90 90 90 26 26 26 2 2 6 2 2 6 -- 14 14 14 195 195 195 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 242 242 242 54 54 54 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 -- 86 86 86 50 50 50 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 38 38 38 82 82 82 -- 34 34 34 2 2 6 2 2 6 2 2 6 -- 42 42 42 195 195 195 246 246 246 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 242 242 242 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 246 246 246 238 238 238 --226 226 226 231 231 231 101 101 101 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 38 38 38 82 82 82 42 42 42 14 14 14 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 26 26 26 62 62 62 66 66 66 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 70 70 70 170 170 170 206 206 206 234 234 234 --246 246 246 250 250 250 250 250 250 238 238 238 --226 226 226 231 231 231 238 238 238 250 250 250 --250 250 250 250 250 250 246 246 246 231 231 231 --214 214 214 206 206 206 202 202 202 202 202 202 --198 198 198 202 202 202 182 182 182 18 18 18 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 62 62 62 66 66 66 30 30 30 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 42 42 42 82 82 82 18 18 18 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 94 94 94 182 182 182 218 218 218 242 242 242 --250 250 250 253 253 253 253 253 253 250 250 250 --234 234 234 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --238 238 238 226 226 226 210 210 210 202 202 202 --195 195 195 195 195 195 210 210 210 158 158 158 -- 6 6 6 14 14 14 50 50 50 14 14 14 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 86 86 86 46 46 46 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 54 54 54 70 70 70 2 2 6 -- 2 2 6 10 10 10 2 2 6 22 22 22 --166 166 166 231 231 231 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --231 231 231 206 206 206 198 198 198 226 226 226 -- 94 94 94 2 2 6 6 6 6 38 38 38 -- 30 30 30 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 62 62 62 66 66 66 -- 26 26 26 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 74 74 74 50 50 50 2 2 6 -- 26 26 26 26 26 26 2 2 6 106 106 106 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 246 246 246 218 218 218 202 202 202 --210 210 210 14 14 14 2 2 6 2 2 6 -- 30 30 30 22 22 22 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 86 86 86 -- 42 42 42 14 14 14 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 90 90 90 22 22 22 2 2 6 -- 42 42 42 2 2 6 18 18 18 218 218 218 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 250 250 250 221 221 221 --218 218 218 101 101 101 2 2 6 14 14 14 -- 18 18 18 38 38 38 10 10 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 78 78 78 -- 58 58 58 22 22 22 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 54 54 54 82 82 82 2 2 6 26 26 26 -- 22 22 22 2 2 6 123 123 123 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --238 238 238 198 198 198 6 6 6 38 38 38 -- 58 58 58 26 26 26 38 38 38 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 78 78 78 30 30 30 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 30 30 30 -- 74 74 74 58 58 58 2 2 6 42 42 42 -- 2 2 6 22 22 22 231 231 231 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 246 246 246 46 46 46 38 38 38 -- 42 42 42 14 14 14 38 38 38 14 14 14 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 86 86 86 46 46 46 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 42 42 42 -- 90 90 90 18 18 18 18 18 18 26 26 26 -- 2 2 6 116 116 116 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 250 250 250 238 238 238 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 94 94 94 6 6 6 -- 2 2 6 2 2 6 10 10 10 34 34 34 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 10 10 10 26 26 26 66 66 66 -- 82 82 82 2 2 6 38 38 38 6 6 6 -- 14 14 14 210 210 210 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 246 246 246 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 144 144 144 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 42 42 42 74 74 74 30 30 30 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 42 42 42 90 90 90 -- 26 26 26 6 6 6 42 42 42 2 2 6 -- 74 74 74 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 242 242 242 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 182 182 182 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 10 10 10 86 86 86 38 38 38 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 26 26 26 66 66 66 82 82 82 -- 2 2 6 22 22 22 18 18 18 2 2 6 --149 149 149 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 206 206 206 2 2 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 86 86 86 46 46 46 14 14 14 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 18 18 18 46 46 46 86 86 86 18 18 18 -- 2 2 6 34 34 34 10 10 10 6 6 6 --210 210 210 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 221 221 221 6 6 6 -- 2 2 6 2 2 6 6 6 6 30 30 30 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 82 82 82 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 26 26 26 66 66 66 62 62 62 2 2 6 -- 2 2 6 38 38 38 10 10 10 26 26 26 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 238 238 238 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 6 6 6 -- 2 2 6 2 2 6 10 10 10 30 30 30 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 58 58 58 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 78 78 78 6 6 6 2 2 6 -- 2 2 6 46 46 46 14 14 14 42 42 42 --246 246 246 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 10 10 10 -- 2 2 6 2 2 6 22 22 22 14 14 14 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 62 62 62 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 74 74 74 2 2 6 2 2 6 -- 14 14 14 70 70 70 34 34 34 62 62 62 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 14 14 14 -- 2 2 6 2 2 6 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 62 62 62 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 54 54 54 62 62 62 2 2 6 2 2 6 -- 2 2 6 30 30 30 46 46 46 70 70 70 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 226 226 226 10 10 10 -- 2 2 6 6 6 6 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 58 58 58 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 58 58 58 62 62 62 2 2 6 2 2 6 -- 2 2 6 2 2 6 30 30 30 78 78 78 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 206 206 206 2 2 6 -- 22 22 22 34 34 34 18 14 6 22 22 22 -- 26 26 26 18 18 18 6 6 6 2 2 6 -- 2 2 6 82 82 82 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 26 26 26 -- 62 62 62 106 106 106 74 54 14 185 133 11 --210 162 10 121 92 8 6 6 6 62 62 62 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 158 158 158 18 18 18 -- 14 14 14 2 2 6 2 2 6 2 2 6 -- 6 6 6 18 18 18 66 66 66 38 38 38 -- 6 6 6 94 94 94 50 50 50 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 10 10 10 10 10 10 18 18 18 38 38 38 -- 78 78 78 142 134 106 216 158 10 242 186 14 --246 190 14 246 190 14 156 118 10 10 10 10 -- 90 90 90 238 238 238 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 230 190 --238 204 91 238 204 91 181 142 44 37 26 9 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 38 38 38 46 46 46 -- 26 26 26 106 106 106 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 22 22 22 -- 30 30 30 38 38 38 50 50 50 70 70 70 --106 106 106 190 142 34 226 170 11 242 186 14 --246 190 14 246 190 14 246 190 14 154 114 10 -- 6 6 6 74 74 74 226 226 226 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 228 184 62 --241 196 14 241 208 19 232 195 16 38 30 10 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 30 30 30 26 26 26 --203 166 17 154 142 90 66 66 66 26 26 26 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 38 38 38 58 58 58 -- 78 78 78 86 86 86 101 101 101 123 123 123 --175 146 61 210 150 10 234 174 13 246 186 14 --246 190 14 246 190 14 246 190 14 238 190 10 --102 78 10 2 2 6 46 46 46 198 198 198 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 224 178 62 --242 186 14 241 196 14 210 166 10 22 18 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 6 6 6 121 92 8 --238 202 15 232 195 16 82 82 82 34 34 34 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 38 38 38 70 70 70 154 122 46 --190 142 34 200 144 11 197 138 11 197 138 11 --213 154 11 226 170 11 242 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --225 175 15 46 32 6 2 2 6 22 22 22 --158 158 158 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 242 242 242 224 178 62 --239 182 13 236 186 11 213 154 11 46 32 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 61 42 6 225 175 15 --238 190 10 236 186 11 112 100 78 42 42 42 -- 14 14 14 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 54 54 54 154 122 46 213 154 11 --226 170 11 230 174 11 226 170 11 226 170 11 --236 178 12 242 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --241 196 14 184 144 12 10 10 10 2 2 6 -- 6 6 6 116 116 116 242 242 242 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 231 231 231 198 198 198 214 170 54 --236 178 12 236 178 12 210 150 10 137 92 6 -- 18 14 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 70 47 6 200 144 11 236 178 12 --239 182 13 239 182 13 124 112 88 58 58 58 -- 22 22 22 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 70 70 70 180 133 36 226 170 11 --239 182 13 242 186 14 242 186 14 246 186 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 232 195 16 98 70 6 2 2 6 -- 2 2 6 2 2 6 66 66 66 221 221 221 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 206 206 206 198 198 198 214 166 58 --230 174 11 230 174 11 216 158 10 192 133 9 --163 110 8 116 81 8 102 78 10 116 81 8 --167 114 7 197 138 11 226 170 11 239 182 13 --242 186 14 242 186 14 162 146 94 78 78 78 -- 34 34 34 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 30 30 30 78 78 78 190 142 34 226 170 11 --239 182 13 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 241 196 14 203 166 17 22 18 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 --218 218 218 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 206 206 206 198 198 198 202 162 69 --226 170 11 236 178 12 224 166 10 210 150 10 --200 144 11 197 138 11 192 133 9 197 138 11 --210 150 10 226 170 11 242 186 14 246 190 14 --246 190 14 246 186 14 225 175 15 124 112 88 -- 62 62 62 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 174 135 50 224 166 10 --239 182 13 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 241 196 14 139 102 15 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 78 78 78 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 214 214 214 198 198 198 190 150 46 --219 162 10 236 178 12 234 174 13 224 166 10 --216 158 10 213 154 11 213 154 11 216 158 10 --226 170 11 239 182 13 246 190 14 246 190 14 --246 190 14 246 190 14 242 186 14 206 162 42 --101 101 101 58 58 58 30 30 30 14 14 14 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 74 74 74 174 135 50 216 158 10 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 241 196 14 226 184 13 -- 61 42 6 2 2 6 2 2 6 2 2 6 -- 22 22 22 238 238 238 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 226 226 226 187 187 187 180 133 36 --216 158 10 236 178 12 239 182 13 236 178 12 --230 174 11 226 170 11 226 170 11 230 174 11 --236 178 12 242 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 186 14 239 182 13 --206 162 42 106 106 106 66 66 66 34 34 34 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 26 26 26 70 70 70 163 133 67 213 154 11 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 241 196 14 --190 146 13 18 14 6 2 2 6 2 2 6 -- 46 46 46 246 246 246 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 221 221 221 86 86 86 156 107 11 --216 158 10 236 178 12 242 186 14 246 186 14 --242 186 14 239 182 13 239 182 13 242 186 14 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --242 186 14 225 175 15 142 122 72 66 66 66 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 26 26 26 70 70 70 163 133 67 210 150 10 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --232 195 16 121 92 8 34 34 34 106 106 106 --221 221 221 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --242 242 242 82 82 82 18 14 6 163 110 8 --216 158 10 236 178 12 242 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 242 186 14 163 133 67 -- 46 46 46 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 163 133 67 210 150 10 --236 178 12 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --241 196 14 215 174 15 190 178 144 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 218 218 218 -- 58 58 58 2 2 6 22 18 6 167 114 7 --216 158 10 236 178 12 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 186 14 242 186 14 190 150 46 -- 54 54 54 22 22 22 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 38 38 38 86 86 86 180 133 36 213 154 11 --236 178 12 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 232 195 16 190 146 13 214 214 214 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 170 170 170 26 26 26 -- 2 2 6 2 2 6 37 26 9 163 110 8 --219 162 10 239 182 13 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 236 178 12 224 166 10 142 122 72 -- 46 46 46 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 109 106 95 192 133 9 224 166 10 --242 186 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --242 186 14 226 184 13 210 162 10 142 110 46 --226 226 226 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --198 198 198 66 66 66 2 2 6 2 2 6 -- 2 2 6 2 2 6 50 34 6 156 107 11 --219 162 10 239 182 13 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 242 186 14 --234 174 13 213 154 11 154 122 46 66 66 66 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 58 58 58 154 121 60 206 145 10 234 174 13 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 236 178 12 210 162 10 163 110 8 -- 61 42 6 138 138 138 218 218 218 250 250 250 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 210 210 210 144 144 144 66 66 66 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 61 42 6 163 110 8 --216 158 10 236 178 12 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 239 182 13 230 174 11 216 158 10 --190 142 34 124 112 88 70 70 70 38 38 38 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 62 62 62 168 124 44 206 145 10 224 166 10 --236 178 12 239 182 13 242 186 14 242 186 14 --246 186 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 236 178 12 216 158 10 175 118 6 -- 80 54 7 2 2 6 6 6 6 30 30 30 -- 54 54 54 62 62 62 50 50 50 38 38 38 -- 14 14 14 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 80 54 7 167 114 7 --213 154 11 236 178 12 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 242 186 14 239 182 13 239 182 13 --230 174 11 210 150 10 174 135 50 124 112 88 -- 82 82 82 54 54 54 34 34 34 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 158 118 36 192 133 9 200 144 11 --216 158 10 219 162 10 224 166 10 226 170 11 --230 174 11 236 178 12 239 182 13 239 182 13 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 230 174 11 210 150 10 163 110 8 --104 69 6 10 10 10 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 91 60 6 167 114 7 --206 145 10 230 174 11 242 186 14 246 190 14 --246 190 14 246 190 14 246 186 14 242 186 14 --239 182 13 230 174 11 224 166 10 213 154 11 --180 133 36 124 112 88 86 86 86 58 58 58 -- 38 38 38 22 22 22 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 34 34 34 70 70 70 138 110 50 158 118 36 --167 114 7 180 123 7 192 133 9 197 138 11 --200 144 11 206 145 10 213 154 11 219 162 10 --224 166 10 230 174 11 239 182 13 242 186 14 --246 186 14 246 186 14 246 186 14 246 186 14 --239 182 13 216 158 10 185 133 11 152 99 6 --104 69 6 18 14 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 80 54 7 152 99 6 --192 133 9 219 162 10 236 178 12 239 182 13 --246 186 14 242 186 14 239 182 13 236 178 12 --224 166 10 206 145 10 192 133 9 154 121 60 -- 94 94 94 62 62 62 42 42 42 22 22 22 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 18 18 18 34 34 34 58 58 58 78 78 78 --101 98 89 124 112 88 142 110 46 156 107 11 --163 110 8 167 114 7 175 118 6 180 123 7 --185 133 11 197 138 11 210 150 10 219 162 10 --226 170 11 236 178 12 236 178 12 234 174 13 --219 162 10 197 138 11 163 110 8 130 83 6 -- 91 60 6 10 10 10 2 2 6 2 2 6 -- 18 18 18 38 38 38 38 38 38 38 38 38 -- 38 38 38 38 38 38 38 38 38 38 38 38 -- 38 38 38 38 38 38 26 26 26 2 2 6 -- 2 2 6 6 6 6 70 47 6 137 92 6 --175 118 6 200 144 11 219 162 10 230 174 11 --234 174 13 230 174 11 219 162 10 210 150 10 --192 133 9 163 110 8 124 112 88 82 82 82 -- 50 50 50 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 22 22 22 34 34 34 -- 42 42 42 58 58 58 74 74 74 86 86 86 --101 98 89 122 102 70 130 98 46 121 87 25 --137 92 6 152 99 6 163 110 8 180 123 7 --185 133 11 197 138 11 206 145 10 200 144 11 --180 123 7 156 107 11 130 83 6 104 69 6 -- 50 34 6 54 54 54 110 110 110 101 98 89 -- 86 86 86 82 82 82 78 78 78 78 78 78 -- 78 78 78 78 78 78 78 78 78 78 78 78 -- 78 78 78 82 82 82 86 86 86 94 94 94 --106 106 106 101 101 101 86 66 34 124 80 6 --156 107 11 180 123 7 192 133 9 200 144 11 --206 145 10 200 144 11 192 133 9 175 118 6 --139 102 15 109 106 95 70 70 70 42 42 42 -- 22 22 22 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 10 10 10 -- 14 14 14 22 22 22 30 30 30 38 38 38 -- 50 50 50 62 62 62 74 74 74 90 90 90 --101 98 89 112 100 78 121 87 25 124 80 6 --137 92 6 152 99 6 152 99 6 152 99 6 --138 86 6 124 80 6 98 70 6 86 66 30 --101 98 89 82 82 82 58 58 58 46 46 46 -- 38 38 38 34 34 34 34 34 34 34 34 34 -- 34 34 34 34 34 34 34 34 34 34 34 34 -- 34 34 34 34 34 34 38 38 38 42 42 42 -- 54 54 54 82 82 82 94 86 76 91 60 6 --134 86 6 156 107 11 167 114 7 175 118 6 --175 118 6 167 114 7 152 99 6 121 87 25 --101 98 89 62 62 62 34 34 34 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 6 6 6 10 10 10 -- 18 18 18 22 22 22 30 30 30 42 42 42 -- 50 50 50 66 66 66 86 86 86 101 98 89 --106 86 58 98 70 6 104 69 6 104 69 6 --104 69 6 91 60 6 82 62 34 90 90 90 -- 62 62 62 38 38 38 22 22 22 14 14 14 -- 10 10 10 10 10 10 10 10 10 10 10 10 -- 10 10 10 10 10 10 6 6 6 10 10 10 -- 10 10 10 10 10 10 10 10 10 14 14 14 -- 22 22 22 42 42 42 70 70 70 89 81 66 -- 80 54 7 104 69 6 124 80 6 137 92 6 --134 86 6 116 81 8 100 82 52 86 86 86 -- 58 58 58 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 10 10 10 14 14 14 -- 18 18 18 26 26 26 38 38 38 54 54 54 -- 70 70 70 86 86 86 94 86 76 89 81 66 -- 89 81 66 86 86 86 74 74 74 50 50 50 -- 30 30 30 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 34 34 34 58 58 58 -- 82 82 82 89 81 66 89 81 66 89 81 66 -- 94 86 66 94 86 76 74 74 74 50 50 50 -- 26 26 26 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 6 6 6 14 14 14 18 18 18 -- 30 30 30 38 38 38 46 46 46 54 54 54 -- 50 50 50 42 42 42 30 30 30 18 18 18 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 26 26 26 -- 38 38 38 50 50 50 58 58 58 58 58 58 -- 54 54 54 42 42 42 30 30 30 18 18 18 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 6 6 6 10 10 10 14 14 14 18 18 18 -- 18 18 18 14 14 14 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 14 14 14 18 18 18 22 22 22 22 22 22 -- 18 18 18 14 14 14 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 23 30 36 44 54 65 57 72 88 44 54 65 6 12 15 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 31 41 52 -+103 134 161 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 -+82 108 129 8 14 16 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 17 24 30 126 162 196 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 161 203 243 92 119 140 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 154 195 235 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 138 174 208 21 27 33 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 70 96 117 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 49 59 70 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 3 6 52 62 74 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 -+82 108 129 149 191 231 170 212 252 170 212 252 170 212 252 129 165 199 82 108 129 149 191 231 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 37 48 59 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 21 13 4 31 23 12 0 2 0 0 2 0 105 75 32 155 111 43 23 15 7 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 6 9 3 10 13 146 188 228 170 212 252 170 212 252 170 212 252 157 198 239 0 6 9 -+0 2 0 52 62 74 170 212 252 170 212 252 154 195 235 0 6 9 0 2 0 55 66 77 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 151 193 233 17 24 30 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+10 12 8 23 15 7 139 99 44 206 148 61 67 49 21 0 2 0 125 92 35 206 148 61 -+15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 96 127 154 170 212 252 170 212 252 170 212 252 170 212 252 92 119 140 21 22 20 -+10 12 8 53 68 84 170 212 252 170 212 252 92 119 140 10 12 8 7 10 5 53 68 84 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 -+0 6 9 0 3 6 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 22 20 -+62 64 61 38 40 37 0 2 0 34 26 8 212 153 66 64 46 18 0 2 0 170 124 49 -+180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 65 87 102 115 117 114 -+43 44 42 88 115 136 170 212 252 170 212 252 68 83 99 108 110 107 60 62 59 88 115 136 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+80 98 121 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 10 12 8 56 58 55 95 96 94 178 180 177 215 217 214 198 200 197 -+158 160 156 138 140 137 82 83 81 0 2 0 64 46 18 228 167 73 23 15 7 41 31 10 -+250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 -+0 2 0 126 162 196 170 212 252 170 212 252 57 72 88 0 2 0 0 2 0 126 162 196 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+157 198 239 8 14 16 0 6 9 0 2 0 45 47 44 195 197 194 192 194 191 38 40 37 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 192 194 191 234 236 233 176 178 175 118 120 117 143 145 142 176 178 175 -+215 217 214 234 236 233 234 236 233 104 106 103 0 2 0 142 101 40 134 100 43 0 2 0 -+164 119 51 170 124 49 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 115 152 185 8 14 16 -+49 59 70 166 207 248 170 212 252 170 212 252 119 150 178 8 14 16 55 66 77 166 207 248 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 92 119 140 0 2 0 0 2 0 200 202 199 254 255 252 254 255 252 244 246 243 -+40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 38 40 37 234 236 233 234 236 233 234 236 233 135 137 134 215 217 214 171 173 170 -+141 142 139 138 140 137 138 140 137 135 137 134 31 32 30 3 6 2 212 153 66 15 9 7 -+78 58 25 248 178 79 41 31 10 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 3 6 21 27 33 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 154 195 235 0 6 9 82 83 81 254 255 252 254 255 252 254 255 252 254 255 252 -+188 190 187 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 62 64 61 234 236 233 234 236 233 234 236 233 198 200 197 131 133 130 198 200 197 -+232 234 231 234 236 233 234 236 233 234 236 233 152 154 151 0 2 0 147 105 44 67 49 21 -+23 15 7 250 179 73 158 114 46 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 61 76 92 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 154 195 235 103 134 161 80 98 121 -+52 62 74 18 22 24 0 2 0 3 10 13 38 45 51 80 98 121 151 193 233 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 109 141 168 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 -+226 228 225 65 66 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 43 44 42 234 236 233 234 236 233 234 236 233 234 236 233 131 133 130 192 194 191 -+152 154 151 141 142 139 141 142 139 141 142 139 158 160 156 3 6 2 82 62 28 129 95 39 -+0 2 0 206 148 61 248 178 79 21 13 4 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 96 115 138 -+170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 18 22 24 0 2 0 0 2 0 -+34 26 8 75 55 22 114 83 33 95 68 30 55 39 17 7 0 0 0 6 9 84 103 125 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 84 103 125 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 171 173 170 -+0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 18 20 17 234 236 233 234 236 233 234 236 233 234 236 233 138 140 137 178 180 177 -+226 228 225 234 236 233 234 236 233 234 236 233 231 233 230 45 47 44 23 15 7 190 136 56 -+0 2 0 147 105 44 250 179 73 64 46 18 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 126 162 196 0 2 0 26 20 13 190 136 56 245 175 76 -+250 179 73 161 117 49 164 119 51 245 175 76 250 179 73 206 148 61 75 55 22 0 2 0 -+126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 68 83 99 0 2 0 252 254 250 254 255 252 254 255 252 254 255 252 71 73 70 -+8 14 16 88 115 136 17 24 30 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 232 234 231 234 236 233 234 236 233 234 236 233 215 217 214 148 150 147 -+183 185 181 141 142 139 135 137 134 135 137 134 141 142 139 87 89 86 0 2 0 202 145 58 -+3 6 2 88 66 26 250 179 73 109 79 35 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 157 198 239 -+170 212 252 170 212 252 166 207 248 26 33 39 26 20 13 224 163 69 250 179 73 250 179 73 -+250 179 73 197 142 62 202 145 58 250 179 73 250 179 73 250 179 73 234 172 70 21 13 4 -+38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 52 62 74 21 22 20 254 255 252 254 255 252 254 255 252 254 255 252 21 22 20 -+49 59 70 170 212 252 166 207 248 91 123 149 8 14 16 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 215 217 214 234 236 233 234 236 233 234 236 233 234 236 233 123 125 122 -+188 190 187 229 231 228 234 236 233 234 236 233 222 224 221 118 120 117 0 2 0 168 123 54 -+34 26 8 67 49 21 250 179 73 134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 34 41 47 170 212 252 -+170 212 252 170 212 252 85 112 133 0 2 0 164 119 51 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 129 95 39 -+0 2 0 138 174 208 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 34 44 55 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 24 22 25 -+52 62 74 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 178 180 177 234 236 233 234 236 233 234 236 233 234 236 233 141 142 139 -+198 200 197 148 150 147 135 137 134 135 137 134 148 150 147 123 125 122 0 2 0 190 136 56 -+21 13 4 78 58 25 250 179 73 129 95 39 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 82 108 129 170 212 252 -+170 212 252 170 212 252 23 30 36 58 42 19 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 147 105 44 -+0 2 0 139 181 221 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 34 41 47 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 -+25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 6 9 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 91 93 90 234 236 233 234 236 233 234 236 233 234 236 233 126 127 125 -+169 171 168 222 224 221 234 236 233 229 231 228 178 180 177 71 73 70 0 2 0 212 153 66 -+0 2 0 95 68 30 250 179 73 119 87 37 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 138 174 208 170 212 252 -+170 212 252 154 195 235 0 2 0 125 92 35 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 119 87 37 -+0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 57 72 88 7 10 5 252 254 250 254 255 252 254 255 252 254 255 252 95 96 94 -+0 6 9 166 207 248 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 8 14 16 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 7 10 5 222 224 221 234 236 233 234 236 233 234 236 233 141 142 139 -+183 185 181 138 140 137 131 133 130 141 142 139 192 194 191 102 104 101 0 2 0 224 163 69 -+0 2 0 105 75 32 250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 27 33 170 212 252 170 212 252 -+170 212 252 115 152 185 0 2 0 180 132 57 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 10 12 8 -+38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 82 108 129 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 158 160 156 -+0 2 0 92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 141 142 139 234 236 233 234 236 233 234 236 233 131 133 130 -+185 187 183 231 233 230 222 224 221 158 160 156 138 140 137 48 50 48 3 6 2 250 179 73 -+134 100 43 206 148 61 218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 75 94 116 170 212 252 170 212 252 -+170 212 252 92 119 140 0 2 0 224 163 69 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 87 61 23 7 0 0 -+134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 109 141 168 0 2 0 178 180 177 254 255 252 254 255 252 254 255 252 252 254 250 -+39 43 45 10 16 18 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+88 115 136 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 45 47 44 234 236 233 234 236 233 234 236 233 131 133 130 -+148 150 147 138 140 137 148 150 147 210 212 209 152 154 151 26 27 25 29 21 8 250 179 73 -+250 179 73 234 172 70 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 170 212 252 -+170 212 252 103 134 161 0 2 0 202 145 58 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 238 175 73 75 55 22 0 2 0 75 102 123 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 140 177 211 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 -+183 185 181 0 2 0 75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 57 72 88 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 162 164 161 234 236 233 234 236 233 135 137 134 -+226 228 225 198 200 197 104 106 103 15 17 14 0 2 0 15 9 7 147 105 44 250 179 73 -+248 178 79 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 21 27 33 170 212 252 170 212 252 170 212 252 -+170 212 252 122 159 192 0 2 0 175 129 54 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 250 179 73 202 145 58 55 39 17 0 2 0 82 108 129 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 12 17 20 60 62 59 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 69 71 68 0 6 9 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 159 201 241 26 33 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 162 164 161 215 217 214 95 96 94 -+56 58 55 0 2 0 0 2 0 0 2 0 61 44 16 238 175 73 250 179 73 250 179 73 -+218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 88 115 136 170 212 252 170 212 252 170 212 252 -+170 212 252 143 185 225 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 212 153 66 95 68 30 0 2 0 8 14 16 103 134 161 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 68 83 99 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 -+254 255 252 210 212 209 0 6 9 53 68 84 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 126 162 196 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 23 15 7 250 179 73 250 179 73 250 179 73 -+250 179 73 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 166 207 248 0 2 0 52 36 13 158 114 46 180 132 57 161 117 49 119 87 37 -+41 31 10 0 2 0 0 2 0 72 87 103 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 115 152 185 0 2 0 152 154 151 254 255 252 238 241 237 85 87 84 -+229 231 228 254 255 252 99 101 98 0 2 0 126 162 196 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 -+250 179 73 105 75 32 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 32 39 45 0 2 0 57 72 88 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 85 112 133 12 17 20 0 2 0 0 2 0 0 2 0 0 2 0 -+34 41 47 92 110 133 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 166 207 248 6 12 15 71 73 70 254 255 252 229 231 228 0 2 0 -+141 142 139 254 255 252 231 233 230 10 12 8 34 44 55 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 154 195 235 6 12 15 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 125 92 35 250 179 73 250 179 73 -+250 179 73 180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 68 83 99 -+129 165 199 85 112 133 0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 126 162 196 119 156 189 134 170 204 149 191 231 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 57 72 88 3 6 2 242 244 240 254 255 252 35 37 34 -+78 80 77 254 255 252 254 255 252 128 130 127 0 2 0 105 137 164 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 91 123 149 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 55 39 17 250 179 73 250 179 73 -+250 179 73 245 175 76 7 10 5 0 2 0 44 54 65 103 134 161 161 203 243 170 212 252 -+170 212 252 21 27 33 25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 61 76 92 0 2 0 242 244 240 254 255 252 102 104 101 -+10 12 8 231 233 230 254 255 252 244 246 243 26 27 25 21 27 33 159 201 241 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 32 39 45 0 6 9 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 218 158 64 250 179 73 -+250 179 73 250 179 73 75 55 22 0 2 0 161 203 243 170 212 252 170 212 252 170 212 252 -+115 147 174 0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 159 201 241 146 188 228 -+140 177 211 134 170 204 146 188 228 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 17 24 30 62 64 61 254 255 252 254 255 252 215 217 214 -+0 2 0 102 104 101 254 255 252 254 255 252 166 168 165 0 2 0 72 87 103 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 75 32 250 179 73 -+250 179 73 250 179 73 150 108 46 0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 -+49 59 70 3 10 13 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 166 207 248 109 141 168 65 87 102 28 35 41 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 28 35 41 70 96 117 138 174 208 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 0 2 0 102 104 101 254 255 252 254 255 252 254 255 252 -+102 104 101 0 2 0 192 194 191 254 255 252 254 255 252 78 80 77 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 34 44 55 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 61 76 92 154 195 235 0 6 9 29 21 8 250 179 73 -+250 179 73 250 179 73 224 163 69 0 2 0 68 83 99 170 212 252 170 212 252 143 179 213 -+0 2 0 72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+161 203 243 96 115 138 17 24 30 0 2 0 0 2 0 45 47 44 102 104 101 123 125 122 -+138 140 137 143 145 142 115 117 114 82 83 81 43 44 42 0 2 0 0 2 0 32 39 45 -+126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 0 2 0 85 87 84 254 255 252 254 255 252 254 255 252 -+242 244 240 27 29 27 35 37 34 254 255 252 254 255 252 231 233 230 10 12 8 21 27 33 -+159 201 241 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 6 9 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 44 54 65 170 212 252 170 212 252 34 44 55 0 2 0 82 62 28 -+109 79 35 224 163 69 250 179 73 52 36 13 15 20 22 170 212 252 170 212 252 75 89 106 -+0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 -+25 32 38 0 2 0 40 41 39 155 157 153 238 241 237 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 115 117 114 18 20 17 -+0 2 0 68 83 99 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 52 62 74 7 10 5 234 236 233 254 255 252 254 255 252 -+254 255 252 195 197 194 102 104 101 254 255 252 254 255 252 254 255 252 162 164 161 0 2 0 -+72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 119 156 189 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 115 147 174 170 212 252 91 123 149 0 2 0 0 2 0 6 12 15 -+0 2 0 15 9 7 197 142 62 125 92 35 0 2 0 115 152 185 113 145 172 3 6 2 -+41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 113 145 172 0 6 9 -+10 12 8 155 157 153 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 232 234 231 -+87 89 86 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 115 152 185 0 2 0 138 140 137 254 255 252 254 255 252 -+254 255 252 254 255 252 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 65 66 64 -+0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 154 195 235 170 212 252 143 179 213 88 115 136 149 191 231 170 212 252 -+126 162 196 3 6 2 64 46 18 202 145 58 0 2 0 0 2 0 0 2 0 0 2 0 -+92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 143 179 213 3 10 13 27 29 27 -+215 217 214 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 155 157 153 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 23 30 36 27 29 27 249 251 248 254 255 252 -+254 255 252 188 190 187 7 10 5 226 228 225 254 255 252 254 255 252 254 255 252 231 233 230 -+7 10 5 21 27 33 159 201 241 170 212 252 103 134 161 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 55 66 77 11 4 3 250 179 73 24 17 10 0 2 0 0 2 0 0 2 0 -+143 185 225 170 212 252 170 212 252 170 212 252 159 201 241 28 35 41 7 10 5 200 202 199 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 155 157 153 0 2 0 55 66 77 170 212 252 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 96 127 154 0 2 0 158 160 156 254 255 252 -+254 255 252 192 194 191 0 2 0 176 178 175 254 255 252 254 255 252 254 255 252 254 255 252 -+141 142 139 0 2 0 72 87 103 129 165 199 0 6 9 0 6 9 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 6 9 12 17 20 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 -+138 174 208 17 24 30 29 21 8 250 179 73 101 72 28 0 2 0 0 2 0 32 39 45 -+170 212 252 170 212 252 170 212 252 170 212 252 57 72 88 0 2 0 152 154 151 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 108 110 107 0 2 0 115 152 185 170 212 252 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 18 22 24 40 41 39 254 255 252 -+254 255 252 232 234 231 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 10 12 8 0 2 0 8 14 16 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 6 9 41 51 62 61 76 92 34 44 55 3 10 13 -+0 2 0 11 4 3 164 119 51 250 179 73 175 129 54 0 2 0 0 2 0 82 108 129 -+170 212 252 170 212 252 170 212 252 98 129 156 0 2 0 95 96 94 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 238 241 237 18 20 17 25 32 38 166 207 248 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 85 112 133 0 2 0 188 190 187 -+254 255 252 254 255 252 198 200 197 242 244 240 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 120 122 119 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 6 9 7 0 0 -+31 23 12 202 145 58 250 179 73 250 179 73 238 175 73 0 2 0 0 2 0 122 159 192 -+170 212 252 170 212 252 170 212 252 28 35 41 31 32 30 244 246 243 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 85 112 133 170 212 252 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 0 2 0 148 150 147 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 222 224 221 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+7 0 0 234 172 70 250 179 73 250 179 73 250 179 73 34 26 8 0 2 0 149 191 231 -+170 212 252 170 212 252 129 165 199 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 48 50 48 3 10 13 146 188 228 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 0 2 0 118 120 117 -+254 255 252 254 255 252 254 255 252 169 171 168 231 233 230 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 170 124 49 250 179 73 250 179 73 250 179 73 48 33 15 6 12 15 170 212 252 -+170 212 252 170 212 252 65 87 102 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 195 197 194 0 2 0 84 103 125 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 3 10 13 85 87 84 -+254 255 252 254 255 252 234 236 233 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 99 101 98 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 95 68 30 250 179 73 250 179 73 250 179 73 34 26 8 34 44 55 170 212 252 -+170 212 252 163 205 246 8 14 16 62 64 61 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 35 37 34 34 44 55 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 26 33 39 60 62 59 -+254 255 252 254 255 252 238 241 237 0 2 0 108 110 107 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 158 160 156 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 23 15 7 248 178 79 250 179 73 245 175 76 0 2 0 63 78 94 170 212 252 -+170 212 252 109 141 168 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 104 106 103 0 2 0 -+154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 69 71 68 -+254 255 252 254 255 252 244 246 243 0 2 0 91 93 90 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 215 217 214 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 197 142 62 250 179 73 212 153 66 0 2 0 92 110 133 170 212 252 -+170 212 252 80 98 121 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 176 178 175 0 2 0 -+105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 8 14 16 87 89 86 -+254 255 252 254 255 252 254 255 252 40 41 39 21 22 20 252 254 250 254 255 252 254 255 252 -+254 255 252 254 255 252 252 254 250 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 125 92 35 250 179 73 170 124 49 0 2 0 113 145 172 170 212 252 -+170 212 252 53 68 84 15 17 14 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 242 244 240 0 2 0 -+63 78 94 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 0 2 0 104 106 103 -+254 255 252 254 255 252 254 255 252 123 125 122 0 2 0 166 168 165 254 255 252 254 255 252 -+254 255 252 254 255 252 234 236 233 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 7 0 0 52 36 13 250 179 73 129 95 39 0 2 0 143 179 213 170 212 252 -+170 212 252 32 39 45 48 50 48 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 60 62 59 -+18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 2 0 102 104 101 -+254 255 252 254 255 252 254 255 252 226 228 225 15 17 14 10 12 8 215 217 214 254 255 252 -+254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 88 66 26 29 21 8 0 2 0 166 207 248 170 212 252 -+170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 123 125 122 -+0 2 0 149 191 231 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 56 58 55 -+254 255 252 254 255 252 254 255 252 254 255 252 178 180 177 0 2 0 38 40 37 238 241 237 -+254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 7 0 0 0 2 0 161 203 243 170 212 252 -+149 191 231 0 2 0 123 125 122 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 141 142 139 -+0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 -+210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 120 122 119 0 2 0 21 22 20 -+143 145 142 244 246 243 219 221 218 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 149 191 231 170 212 252 -+129 165 199 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 155 157 153 -+0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 0 6 9 -+69 71 68 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 71 73 70 0 2 0 -+0 2 0 0 2 0 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 170 212 252 -+129 165 199 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 169 171 168 -+0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 75 94 116 -+0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 134 170 204 170 212 252 -+134 170 204 0 2 0 152 154 151 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 -+0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 -+44 54 65 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 35 37 34 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 -+138 174 208 0 2 0 143 145 142 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 198 200 197 -+0 2 0 103 134 161 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+157 198 239 28 35 41 0 2 0 188 190 187 254 255 252 252 254 250 3 6 2 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 115 152 185 170 212 252 -+143 179 213 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 -+0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 146 188 228 0 6 9 26 27 25 242 244 240 176 178 175 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 170 212 252 -+143 185 225 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 185 187 183 -+0 2 0 105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 163 205 246 0 2 0 0 2 0 102 104 101 60 62 59 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 80 98 121 170 212 252 -+149 191 231 0 2 0 118 120 117 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 143 145 142 -+0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 143 179 213 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 170 212 252 -+170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 108 110 107 -+0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 115 152 185 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 170 212 252 -+170 212 252 34 44 55 43 44 42 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 -+15 20 22 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+170 212 252 75 94 116 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 -+170 212 252 63 78 94 3 6 2 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 31 32 30 -+41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+161 203 243 6 12 15 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 -+170 212 252 88 115 136 0 2 0 210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 249 251 248 0 2 0 -+68 83 99 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+96 127 154 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 61 76 92 -+170 212 252 119 150 178 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 0 2 0 -+91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 -+28 35 41 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 -+146 188 228 143 185 225 0 2 0 126 127 125 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 85 87 84 0 6 9 -+154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 98 129 156 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+72 90 112 170 212 252 18 22 24 56 58 55 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 238 241 237 7 10 5 55 66 77 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 0 6 9 -+0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 122 159 192 72 87 103 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 113 145 172 -+170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 139 181 221 8 14 16 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 18 22 24 109 141 168 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 12 17 20 166 207 248 -+170 212 252 170 212 252 170 212 252 170 212 252 146 188 228 23 30 36 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 101 72 28 202 145 58 -+180 132 57 0 2 0 38 45 51 3 10 13 69 71 68 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 200 202 199 0 2 0 75 89 106 170 212 252 -+170 212 252 170 212 252 170 212 252 109 141 168 8 14 16 0 2 0 21 13 4 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 7 0 0 0 2 0 101 72 28 218 158 64 250 179 73 250 179 73 -+250 179 73 139 99 44 0 2 0 8 14 16 0 2 0 238 241 237 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 244 246 243 38 40 37 3 10 13 139 181 221 170 212 252 -+170 212 252 161 203 243 66 80 97 0 2 0 31 23 12 191 142 60 248 183 74 180 132 57 -+44 34 15 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 23 15 7 190 136 56 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 150 108 46 0 2 0 0 2 0 82 83 81 222 224 221 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 102 104 101 0 2 0 98 129 156 170 212 252 163 205 246 -+98 129 156 23 30 36 0 2 0 82 62 28 234 172 70 248 183 74 248 183 74 248 183 74 -+248 183 74 158 114 46 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 64 46 18 109 79 35 150 108 46 224 163 69 250 179 73 -+250 179 73 250 179 73 250 179 73 158 114 46 0 2 0 0 2 0 3 6 2 115 117 114 -+234 236 233 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 176 178 175 0 2 0 57 72 88 146 188 228 80 98 121 8 14 16 -+0 2 0 24 17 10 158 114 46 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 242 178 77 58 42 19 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 0 2 0 67 49 21 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 95 68 30 0 2 0 0 2 0 -+0 2 0 52 54 51 108 110 107 162 164 161 219 221 218 254 255 252 254 255 252 254 255 252 -+254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 -+219 221 218 178 180 177 18 20 17 6 12 15 26 33 39 0 2 0 0 2 0 52 36 13 -+164 119 51 242 178 77 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 242 178 77 -+187 138 56 175 129 54 158 114 46 82 62 28 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 78 58 25 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 234 172 70 142 101 40 -+44 34 15 10 12 8 0 2 0 0 2 0 0 2 0 18 20 17 60 62 59 71 73 70 -+82 83 81 95 96 94 104 106 103 118 120 117 115 117 114 78 80 77 40 41 39 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 44 34 15 105 75 32 191 142 60 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 105 75 32 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 187 138 56 250 179 73 -+250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 250 179 73 142 101 40 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 206 148 61 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 161 117 49 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 228 167 73 250 179 73 -+238 175 73 190 136 56 158 114 46 234 172 70 250 179 73 250 179 73 250 179 73 250 179 73 -+250 179 73 147 105 44 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 67 49 21 248 183 74 248 183 74 248 183 74 -+248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 -+31 23 12 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 21 13 4 -+0 2 0 0 2 0 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 -+134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 155 111 43 248 183 74 248 183 74 -+248 183 74 248 183 74 224 163 69 55 39 17 64 46 18 164 119 51 242 178 77 248 183 74 -+75 55 22 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 228 167 73 88 66 26 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 168 123 54 248 183 74 -+248 183 74 248 183 74 158 114 46 0 2 0 7 0 0 0 2 0 10 12 8 44 34 15 -+15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 29 21 8 250 179 73 250 179 73 158 114 46 15 14 3 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 175 129 54 -+248 183 74 248 183 74 114 83 33 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 29 21 8 147 105 44 58 42 19 0 2 0 7 0 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+105 75 32 218 158 64 23 15 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 -+ -diff --git a/drivers/video/logo/logo_linux_mono.pbm b/drivers/video/logo/logo_linux_mono.pbm -index 2f14d9f..3d3c358 100644 ---- a/drivers/video/logo/logo_linux_mono.pbm -+++ b/drivers/video/logo/logo_linux_mono.pbm -@@ -1,203 +1,159 @@ --P1 --# Standard black and white Linux logo --80 80 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 --1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 --1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 --1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 1 1 --1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 --1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 --0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 --1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 --0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 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 1 1 1 1 1 1 1 1 1 1 1 0 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 0 1 1 1 1 1 1 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 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 1 1 0 1 1 1 1 1 1 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 1 1 1 1 1 1 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 --1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 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 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 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 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 0 0 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 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 1 1 1 0 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 0 0 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 1 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 --1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 --1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 --1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 --0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 --0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 --1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 --1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -+P2 -+80 78 -+255 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 255 255 255 255 255 0 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 -+255 0 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 -+255 255 0 0 0 0 0 0 0 0 -+0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 -+255 255 0 0 0 0 0 0 0 0 -+0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 -+255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 255 255 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 0 255 255 0 0 255 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 255 255 255 0 0 255 -+255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 255 -+255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 0 -+255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 -+0 255 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 -+0 255 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 -+0 0 255 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 255 255 255 -+255 0 0 255 255 255 255 255 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 255 0 0 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 -+255 0 0 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 0 0 255 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 255 255 255 -+255 255 0 0 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 255 255 255 255 0 255 255 255 -+255 255 255 0 0 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 0 255 255 255 -+255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 255 255 -+255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 255 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 0 -+255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 0 -+0 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 255 -+0 0 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 255 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 255 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 255 255 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 255 255 255 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 -diff --git a/drivers/video/logo/logo_linux_vga16.ppm b/drivers/video/logo/logo_linux_vga16.ppm -index 1850c15..f279f97 100644 ---- a/drivers/video/logo/logo_linux_vga16.ppm -+++ b/drivers/video/logo/logo_linux_vga16.ppm -@@ -1,1604 +1,18724 @@ - P3 --# Standard 16-color Linux logo --80 80 --255 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 170 170 170 85 85 85 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 170 170 170 170 170 --170 170 170 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 170 170 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 170 170 170 255 255 255 255 255 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 255 255 255 170 170 170 170 170 170 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 0 0 0 0 0 0 255 255 255 -- 85 85 85 0 0 0 0 0 0 0 0 0 --255 255 255 170 170 170 0 0 0 85 85 85 --170 170 170 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 170 170 170 -- 85 85 85 0 0 0 0 0 0 0 0 0 --255 255 255 85 85 85 0 0 0 0 0 0 -- 85 85 85 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --170 170 170 0 0 0 0 0 0 170 170 170 -- 85 85 85 85 85 85 85 85 85 85 85 85 --255 255 255 85 85 85 0 0 0 0 0 0 -- 85 85 85 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 170 170 170 170 170 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 170 170 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 170 85 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 85 85 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 85 85 85 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 170 170 170 170 170 170 170 170 0 0 0 -- 0 0 0 0 0 0 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 170 170 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 170 170 170 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 170 170 170 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 170 170 170 --170 170 170 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 170 170 170 170 170 170 170 170 170 --255 255 255 255 255 255 255 255 255 170 170 170 --170 170 170 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 170 170 170 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 170 170 170 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 170 170 --170 170 170 170 170 170 170 170 170 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 170 170 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 170 170 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 170 170 170 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 85 85 85 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 -- 0 0 0 85 85 85 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 0 0 0 85 85 85 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 85 85 85 -- 0 0 0 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 85 85 85 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 85 85 85 0 0 0 0 0 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 0 0 0 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 85 85 85 85 85 85 0 0 0 -- 0 0 0 85 85 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 85 85 85 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 85 85 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 170 170 170 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 85 85 85 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 170 170 170 85 85 85 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 85 85 85 85 85 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 170 170 170 -- 85 85 85 0 0 0 0 0 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 85 85 85 -- 0 0 0 0 0 0 0 0 0 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 170 170 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --170 170 170 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 170 170 170 255 255 255 255 255 255 --255 255 255 255 255 255 255 255 255 255 255 255 --255 255 255 255 255 255 170 170 170 85 85 85 -- 85 85 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 85 85 85 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 85 85 85 85 85 85 85 85 85 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 255 255 85 170 85 0 --170 85 0 170 85 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 255 255 85 170 85 0 --255 255 85 170 85 0 170 85 0 170 85 0 -- 85 85 85 85 85 85 85 85 85 85 85 85 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 85 85 85 -- 85 85 85 85 85 85 85 85 85 170 85 0 --170 85 0 170 85 0 170 85 0 255 255 85 --170 85 0 255 255 85 170 85 0 170 85 0 --170 85 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 170 85 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 --170 85 0 170 85 0 170 85 0 170 85 0 --170 85 0 170 85 0 170 85 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -+# CREATOR: GIMP PNM Filter Version 1.1 -+80 78 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+170 -+170 -+170 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+85 -+85 -+255 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+170 -+170 -+170 -+0 -+0 -+0 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+255 -+255 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+170 -+170 -+170 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+255 -+170 -+170 -+170 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+85 -+85 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+85 -+85 -+85 -+255 -+255 -+85 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 -+0 diff --git a/kernels/linux-libre-xen/logo_linux_clut224.ppm b/kernels/linux-libre-xen/logo_linux_clut224.ppm new file mode 100644 index 000000000..c9d837347 --- /dev/null +++ b/kernels/linux-libre-xen/logo_linux_clut224.ppm @@ -0,0 +1,861 @@ +P3 +80 78 +255 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 23 30 36 44 54 65 57 72 88 44 54 65 6 12 15 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 31 41 52 +103 134 161 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 +82 108 129 8 14 16 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 17 24 30 126 162 196 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 161 203 243 92 119 140 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 154 195 235 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 138 174 208 21 27 33 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 70 96 117 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 49 59 70 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 3 6 52 62 74 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 +82 108 129 149 191 231 170 212 252 170 212 252 170 212 252 129 165 199 82 108 129 149 191 231 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 37 48 59 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 21 13 4 31 23 12 0 2 0 0 2 0 105 75 32 155 111 43 23 15 7 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 6 9 3 10 13 146 188 228 170 212 252 170 212 252 170 212 252 157 198 239 0 6 9 +0 2 0 52 62 74 170 212 252 170 212 252 154 195 235 0 6 9 0 2 0 55 66 77 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 151 193 233 17 24 30 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +10 12 8 23 15 7 139 99 44 206 148 61 67 49 21 0 2 0 125 92 35 206 148 61 +15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 96 127 154 170 212 252 170 212 252 170 212 252 170 212 252 92 119 140 21 22 20 +10 12 8 53 68 84 170 212 252 170 212 252 92 119 140 10 12 8 7 10 5 53 68 84 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 +0 6 9 0 3 6 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 22 20 +62 64 61 38 40 37 0 2 0 34 26 8 212 153 66 64 46 18 0 2 0 170 124 49 +180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 65 87 102 115 117 114 +43 44 42 88 115 136 170 212 252 170 212 252 68 83 99 108 110 107 60 62 59 88 115 136 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +80 98 121 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 10 12 8 56 58 55 95 96 94 178 180 177 215 217 214 198 200 197 +158 160 156 138 140 137 82 83 81 0 2 0 64 46 18 228 167 73 23 15 7 41 31 10 +250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 +0 2 0 126 162 196 170 212 252 170 212 252 57 72 88 0 2 0 0 2 0 126 162 196 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +157 198 239 8 14 16 0 6 9 0 2 0 45 47 44 195 197 194 192 194 191 38 40 37 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 192 194 191 234 236 233 176 178 175 118 120 117 143 145 142 176 178 175 +215 217 214 234 236 233 234 236 233 104 106 103 0 2 0 142 101 40 134 100 43 0 2 0 +164 119 51 170 124 49 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 115 152 185 8 14 16 +49 59 70 166 207 248 170 212 252 170 212 252 119 150 178 8 14 16 55 66 77 166 207 248 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 92 119 140 0 2 0 0 2 0 200 202 199 254 255 252 254 255 252 244 246 243 +40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 38 40 37 234 236 233 234 236 233 234 236 233 135 137 134 215 217 214 171 173 170 +141 142 139 138 140 137 138 140 137 135 137 134 31 32 30 3 6 2 212 153 66 15 9 7 +78 58 25 248 178 79 41 31 10 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 3 6 21 27 33 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 163 205 246 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 154 195 235 0 6 9 82 83 81 254 255 252 254 255 252 254 255 252 254 255 252 +188 190 187 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 62 64 61 234 236 233 234 236 233 234 236 233 198 200 197 131 133 130 198 200 197 +232 234 231 234 236 233 234 236 233 234 236 233 152 154 151 0 2 0 147 105 44 67 49 21 +23 15 7 250 179 73 158 114 46 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 61 76 92 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 154 195 235 103 134 161 80 98 121 +52 62 74 18 22 24 0 2 0 3 10 13 38 45 51 80 98 121 151 193 233 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 109 141 168 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 +226 228 225 65 66 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 43 44 42 234 236 233 234 236 233 234 236 233 234 236 233 131 133 130 192 194 191 +152 154 151 141 142 139 141 142 139 141 142 139 158 160 156 3 6 2 82 62 28 129 95 39 +0 2 0 206 148 61 248 178 79 21 13 4 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 96 115 138 +170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 18 22 24 0 2 0 0 2 0 +34 26 8 75 55 22 114 83 33 95 68 30 55 39 17 7 0 0 0 6 9 84 103 125 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 84 103 125 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 171 173 170 +0 2 0 0 2 0 0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 18 20 17 234 236 233 234 236 233 234 236 233 234 236 233 138 140 137 178 180 177 +226 228 225 234 236 233 234 236 233 234 236 233 231 233 230 45 47 44 23 15 7 190 136 56 +0 2 0 147 105 44 250 179 73 64 46 18 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 126 162 196 0 2 0 26 20 13 190 136 56 245 175 76 +250 179 73 161 117 49 164 119 51 245 175 76 250 179 73 206 148 61 75 55 22 0 2 0 +126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 68 83 99 0 2 0 252 254 250 254 255 252 254 255 252 254 255 252 71 73 70 +8 14 16 88 115 136 17 24 30 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 232 234 231 234 236 233 234 236 233 234 236 233 215 217 214 148 150 147 +183 185 181 141 142 139 135 137 134 135 137 134 141 142 139 87 89 86 0 2 0 202 145 58 +3 6 2 88 66 26 250 179 73 109 79 35 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 157 198 239 +170 212 252 170 212 252 166 207 248 26 33 39 26 20 13 224 163 69 250 179 73 250 179 73 +250 179 73 197 142 62 202 145 58 250 179 73 250 179 73 250 179 73 234 172 70 21 13 4 +38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 52 62 74 21 22 20 254 255 252 254 255 252 254 255 252 254 255 252 21 22 20 +49 59 70 170 212 252 166 207 248 91 123 149 8 14 16 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 215 217 214 234 236 233 234 236 233 234 236 233 234 236 233 123 125 122 +188 190 187 229 231 228 234 236 233 234 236 233 222 224 221 118 120 117 0 2 0 168 123 54 +34 26 8 67 49 21 250 179 73 134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 34 41 47 170 212 252 +170 212 252 170 212 252 85 112 133 0 2 0 164 119 51 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 129 95 39 +0 2 0 138 174 208 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 34 44 55 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 24 22 25 +52 62 74 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 178 180 177 234 236 233 234 236 233 234 236 233 234 236 233 141 142 139 +198 200 197 148 150 147 135 137 134 135 137 134 148 150 147 123 125 122 0 2 0 190 136 56 +21 13 4 78 58 25 250 179 73 129 95 39 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 82 108 129 170 212 252 +170 212 252 170 212 252 23 30 36 58 42 19 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 147 105 44 +0 2 0 139 181 221 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 34 41 47 45 47 44 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 +25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 10 16 18 0 6 9 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 91 93 90 234 236 233 234 236 233 234 236 233 234 236 233 126 127 125 +169 171 168 222 224 221 234 236 233 229 231 228 178 180 177 71 73 70 0 2 0 212 153 66 +0 2 0 95 68 30 250 179 73 119 87 37 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 138 174 208 170 212 252 +170 212 252 154 195 235 0 2 0 125 92 35 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 119 87 37 +0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 57 72 88 7 10 5 252 254 250 254 255 252 254 255 252 254 255 252 95 96 94 +0 6 9 166 207 248 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 8 14 16 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 7 10 5 222 224 221 234 236 233 234 236 233 234 236 233 141 142 139 +183 185 181 138 140 137 131 133 130 141 142 139 192 194 191 102 104 101 0 2 0 224 163 69 +0 2 0 105 75 32 250 179 73 55 39 17 7 0 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 21 27 33 170 212 252 170 212 252 +170 212 252 115 152 185 0 2 0 180 132 57 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 10 12 8 +38 45 51 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 82 108 129 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 158 160 156 +0 2 0 92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 141 142 139 234 236 233 234 236 233 234 236 233 131 133 130 +185 187 183 231 233 230 222 224 221 158 160 156 138 140 137 48 50 48 3 6 2 250 179 73 +134 100 43 206 148 61 218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 75 94 116 170 212 252 170 212 252 +170 212 252 92 119 140 0 2 0 224 163 69 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 87 61 23 7 0 0 +134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 109 141 168 0 2 0 178 180 177 254 255 252 254 255 252 254 255 252 252 254 250 +39 43 45 10 16 18 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +88 115 136 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 45 47 44 234 236 233 234 236 233 234 236 233 131 133 130 +148 150 147 138 140 137 148 150 147 210 212 209 152 154 151 26 27 25 29 21 8 250 179 73 +250 179 73 234 172 70 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 170 212 252 +170 212 252 103 134 161 0 2 0 202 145 58 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 238 175 73 75 55 22 0 2 0 75 102 123 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 140 177 211 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 +183 185 181 0 2 0 75 94 116 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 57 72 88 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 162 164 161 234 236 233 234 236 233 135 137 134 +226 228 225 198 200 197 104 106 103 15 17 14 0 2 0 15 9 7 147 105 44 250 179 73 +248 178 79 55 39 17 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 21 27 33 170 212 252 170 212 252 170 212 252 +170 212 252 122 159 192 0 2 0 175 129 54 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 250 179 73 202 145 58 55 39 17 0 2 0 82 108 129 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 12 17 20 60 62 59 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 69 71 68 0 6 9 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 159 201 241 26 33 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 162 164 161 215 217 214 95 96 94 +56 58 55 0 2 0 0 2 0 0 2 0 61 44 16 238 175 73 250 179 73 250 179 73 +218 158 64 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 88 115 136 170 212 252 170 212 252 170 212 252 +170 212 252 143 185 225 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 212 153 66 95 68 30 0 2 0 8 14 16 103 134 161 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 68 83 99 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 +254 255 252 210 212 209 0 6 9 53 68 84 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 126 162 196 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 23 15 7 250 179 73 250 179 73 250 179 73 +250 179 73 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 166 207 248 0 2 0 52 36 13 158 114 46 180 132 57 161 117 49 119 87 37 +41 31 10 0 2 0 0 2 0 72 87 103 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 115 152 185 0 2 0 152 154 151 254 255 252 238 241 237 85 87 84 +229 231 228 254 255 252 99 101 98 0 2 0 126 162 196 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 63 78 94 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 +250 179 73 105 75 32 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 32 39 45 0 2 0 57 72 88 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 85 112 133 12 17 20 0 2 0 0 2 0 0 2 0 0 2 0 +34 41 47 92 110 133 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 166 207 248 6 12 15 71 73 70 254 255 252 229 231 228 0 2 0 +141 142 139 254 255 252 231 233 230 10 12 8 34 44 55 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 154 195 235 6 12 15 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 125 92 35 250 179 73 250 179 73 +250 179 73 180 132 57 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 68 83 99 +129 165 199 85 112 133 0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 126 162 196 119 156 189 134 170 204 149 191 231 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 57 72 88 3 6 2 242 244 240 254 255 252 35 37 34 +78 80 77 254 255 252 254 255 252 128 130 127 0 2 0 105 137 164 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 91 123 149 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 55 39 17 250 179 73 250 179 73 +250 179 73 245 175 76 7 10 5 0 2 0 44 54 65 103 134 161 161 203 243 170 212 252 +170 212 252 21 27 33 25 32 38 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 61 76 92 0 2 0 242 244 240 254 255 252 102 104 101 +10 12 8 231 233 230 254 255 252 244 246 243 26 27 25 21 27 33 159 201 241 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 32 39 45 0 6 9 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 218 158 64 250 179 73 +250 179 73 250 179 73 75 55 22 0 2 0 161 203 243 170 212 252 170 212 252 170 212 252 +115 147 174 0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 159 201 241 146 188 228 +140 177 211 134 170 204 146 188 228 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 17 24 30 62 64 61 254 255 252 254 255 252 215 217 214 +0 2 0 102 104 101 254 255 252 254 255 252 166 168 165 0 2 0 72 87 103 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 129 165 199 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 75 32 250 179 73 +250 179 73 250 179 73 150 108 46 0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 +49 59 70 3 10 13 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 166 207 248 109 141 168 65 87 102 28 35 41 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 28 35 41 70 96 117 138 174 208 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 0 2 0 102 104 101 254 255 252 254 255 252 254 255 252 +102 104 101 0 2 0 192 194 191 254 255 252 254 255 252 78 80 77 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 34 44 55 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 61 76 92 154 195 235 0 6 9 29 21 8 250 179 73 +250 179 73 250 179 73 224 163 69 0 2 0 68 83 99 170 212 252 170 212 252 143 179 213 +0 2 0 72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +161 203 243 96 115 138 17 24 30 0 2 0 0 2 0 45 47 44 102 104 101 123 125 122 +138 140 137 143 145 142 115 117 114 82 83 81 43 44 42 0 2 0 0 2 0 32 39 45 +126 162 196 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 0 2 0 85 87 84 254 255 252 254 255 252 254 255 252 +242 244 240 27 29 27 35 37 34 254 255 252 254 255 252 231 233 230 10 12 8 21 27 33 +159 201 241 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 6 9 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 44 54 65 170 212 252 170 212 252 34 44 55 0 2 0 82 62 28 +109 79 35 224 163 69 250 179 73 52 36 13 15 20 22 170 212 252 170 212 252 75 89 106 +0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 134 170 204 +25 32 38 0 2 0 40 41 39 155 157 153 238 241 237 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 115 117 114 18 20 17 +0 2 0 68 83 99 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 52 62 74 7 10 5 234 236 233 254 255 252 254 255 252 +254 255 252 195 197 194 102 104 101 254 255 252 254 255 252 254 255 252 162 164 161 0 2 0 +72 87 103 170 212 252 170 212 252 170 212 252 170 212 252 119 156 189 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 115 147 174 170 212 252 91 123 149 0 2 0 0 2 0 6 12 15 +0 2 0 15 9 7 197 142 62 125 92 35 0 2 0 115 152 185 113 145 172 3 6 2 +41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 113 145 172 0 6 9 +10 12 8 155 157 153 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 232 234 231 +87 89 86 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 115 152 185 0 2 0 138 140 137 254 255 252 254 255 252 +254 255 252 254 255 252 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 65 66 64 +0 2 0 122 159 192 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 154 195 235 170 212 252 143 179 213 88 115 136 149 191 231 170 212 252 +126 162 196 3 6 2 64 46 18 202 145 58 0 2 0 0 2 0 0 2 0 0 2 0 +92 119 140 170 212 252 170 212 252 170 212 252 170 212 252 143 179 213 3 10 13 27 29 27 +215 217 214 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 155 157 153 0 2 0 32 39 45 154 195 235 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 23 30 36 27 29 27 249 251 248 254 255 252 +254 255 252 188 190 187 7 10 5 226 228 225 254 255 252 254 255 252 254 255 252 231 233 230 +7 10 5 21 27 33 159 201 241 170 212 252 103 134 161 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 55 66 77 11 4 3 250 179 73 24 17 10 0 2 0 0 2 0 0 2 0 +143 185 225 170 212 252 170 212 252 170 212 252 159 201 241 28 35 41 7 10 5 200 202 199 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 155 157 153 0 2 0 55 66 77 170 212 252 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 96 127 154 0 2 0 158 160 156 254 255 252 +254 255 252 192 194 191 0 2 0 176 178 175 254 255 252 254 255 252 254 255 252 254 255 252 +141 142 139 0 2 0 72 87 103 129 165 199 0 6 9 0 6 9 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 6 9 12 17 20 143 185 225 170 212 252 170 212 252 170 212 252 170 212 252 +138 174 208 17 24 30 29 21 8 250 179 73 101 72 28 0 2 0 0 2 0 32 39 45 +170 212 252 170 212 252 170 212 252 170 212 252 57 72 88 0 2 0 152 154 151 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 108 110 107 0 2 0 115 152 185 170 212 252 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 18 22 24 40 41 39 254 255 252 +254 255 252 232 234 231 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 10 12 8 0 2 0 8 14 16 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 6 9 41 51 62 61 76 92 34 44 55 3 10 13 +0 2 0 11 4 3 164 119 51 250 179 73 175 129 54 0 2 0 0 2 0 82 108 129 +170 212 252 170 212 252 170 212 252 98 129 156 0 2 0 95 96 94 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 238 241 237 18 20 17 25 32 38 166 207 248 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 85 112 133 0 2 0 188 190 187 +254 255 252 254 255 252 198 200 197 242 244 240 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 120 122 119 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 0 2 0 0 6 9 7 0 0 +31 23 12 202 145 58 250 179 73 250 179 73 238 175 73 0 2 0 0 2 0 122 159 192 +170 212 252 170 212 252 170 212 252 28 35 41 31 32 30 244 246 243 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 85 112 133 170 212 252 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 138 174 208 0 2 0 148 150 147 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 222 224 221 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +7 0 0 234 172 70 250 179 73 250 179 73 250 179 73 34 26 8 0 2 0 149 191 231 +170 212 252 170 212 252 129 165 199 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 48 50 48 3 10 13 146 188 228 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 157 198 239 0 2 0 118 120 117 +254 255 252 254 255 252 254 255 252 169 171 168 231 233 230 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 170 124 49 250 179 73 250 179 73 250 179 73 48 33 15 6 12 15 170 212 252 +170 212 252 170 212 252 65 87 102 0 2 0 222 224 221 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 195 197 194 0 2 0 84 103 125 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 3 10 13 85 87 84 +254 255 252 254 255 252 234 236 233 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 99 101 98 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 95 68 30 250 179 73 250 179 73 250 179 73 34 26 8 34 44 55 170 212 252 +170 212 252 163 205 246 8 14 16 62 64 61 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 35 37 34 34 44 55 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 26 33 39 60 62 59 +254 255 252 254 255 252 238 241 237 0 2 0 108 110 107 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 158 160 156 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 23 15 7 248 178 79 250 179 73 245 175 76 0 2 0 63 78 94 170 212 252 +170 212 252 109 141 168 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 104 106 103 0 2 0 +154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 69 71 68 +254 255 252 254 255 252 244 246 243 0 2 0 91 93 90 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 215 217 214 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 197 142 62 250 179 73 212 153 66 0 2 0 92 110 133 170 212 252 +170 212 252 80 98 121 0 2 0 231 233 230 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 176 178 175 0 2 0 +105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 8 14 16 87 89 86 +254 255 252 254 255 252 254 255 252 40 41 39 21 22 20 252 254 250 254 255 252 254 255 252 +254 255 252 254 255 252 252 254 250 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 125 92 35 250 179 73 170 124 49 0 2 0 113 145 172 170 212 252 +170 212 252 53 68 84 15 17 14 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 242 244 240 0 2 0 +63 78 94 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 0 2 0 104 106 103 +254 255 252 254 255 252 254 255 252 123 125 122 0 2 0 166 168 165 254 255 252 254 255 252 +254 255 252 254 255 252 234 236 233 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 7 0 0 52 36 13 250 179 73 129 95 39 0 2 0 143 179 213 170 212 252 +170 212 252 32 39 45 48 50 48 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 60 62 59 +18 22 24 170 212 252 170 212 252 170 212 252 170 212 252 163 205 246 0 2 0 102 104 101 +254 255 252 254 255 252 254 255 252 226 228 225 15 17 14 10 12 8 215 217 214 254 255 252 +254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 88 66 26 29 21 8 0 2 0 166 207 248 170 212 252 +170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 123 125 122 +0 2 0 149 191 231 170 212 252 170 212 252 170 212 252 170 212 252 21 27 33 56 58 55 +254 255 252 254 255 252 254 255 252 254 255 252 178 180 177 0 2 0 38 40 37 238 241 237 +254 255 252 254 255 252 210 212 209 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 7 0 0 0 2 0 161 203 243 170 212 252 +149 191 231 0 2 0 123 125 122 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 141 142 139 +0 2 0 143 179 213 170 212 252 170 212 252 170 212 252 170 212 252 66 80 97 0 2 0 +210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 120 122 119 0 2 0 21 22 20 +143 145 142 244 246 243 219 221 218 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 149 191 231 170 212 252 +129 165 199 0 2 0 158 160 156 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 155 157 153 +0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 143 185 225 0 6 9 +69 71 68 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 71 73 70 0 2 0 +0 2 0 0 2 0 40 41 39 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 170 212 252 +129 165 199 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 169 171 168 +0 2 0 119 156 189 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 75 94 116 +0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 134 170 204 170 212 252 +134 170 204 0 2 0 152 154 151 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 +0 2 0 113 145 172 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 166 207 248 +44 54 65 0 2 0 162 164 161 254 255 252 254 255 252 254 255 252 35 37 34 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 126 162 196 170 212 252 +138 174 208 0 2 0 143 145 142 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 198 200 197 +0 2 0 103 134 161 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +157 198 239 28 35 41 0 2 0 188 190 187 254 255 252 252 254 250 3 6 2 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 115 152 185 170 212 252 +143 179 213 0 2 0 135 137 134 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 210 212 209 +0 2 0 91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 146 188 228 0 6 9 26 27 25 242 244 240 176 178 175 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 170 212 252 +143 185 225 0 2 0 128 130 127 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 185 187 183 +0 2 0 105 137 164 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 163 205 246 0 2 0 0 2 0 102 104 101 60 62 59 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 80 98 121 170 212 252 +149 191 231 0 2 0 118 120 117 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 143 145 142 +0 2 0 134 170 204 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 143 179 213 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 44 54 65 170 212 252 +170 212 252 3 10 13 85 87 84 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 108 110 107 +0 2 0 157 198 239 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 115 152 185 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 3 10 13 170 212 252 +170 212 252 34 44 55 43 44 42 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 69 71 68 +15 20 22 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +170 212 252 75 94 116 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 139 181 221 +170 212 252 63 78 94 3 6 2 249 251 248 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 31 32 30 +41 51 62 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +161 203 243 6 12 15 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 105 137 164 +170 212 252 88 115 136 0 2 0 210 212 209 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 249 251 248 0 2 0 +68 83 99 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +96 127 154 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 61 76 92 +170 212 252 119 150 178 0 2 0 169 171 168 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 183 185 181 0 2 0 +91 123 149 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 +28 35 41 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 6 9 +146 188 228 143 185 225 0 2 0 126 127 125 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 85 87 84 0 6 9 +154 195 235 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 98 129 156 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +72 90 112 170 212 252 18 22 24 56 58 55 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 238 241 237 7 10 5 55 66 77 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 122 159 192 0 6 9 +0 6 9 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 122 159 192 72 87 103 0 2 0 229 231 228 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 152 154 151 0 2 0 113 145 172 +170 212 252 170 212 252 170 212 252 170 212 252 170 212 252 139 181 221 8 14 16 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 18 22 24 109 141 168 0 2 0 148 150 147 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 56 58 55 12 17 20 166 207 248 +170 212 252 170 212 252 170 212 252 170 212 252 146 188 228 23 30 36 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 101 72 28 202 145 58 +180 132 57 0 2 0 38 45 51 3 10 13 69 71 68 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 200 202 199 0 2 0 75 89 106 170 212 252 +170 212 252 170 212 252 170 212 252 109 141 168 8 14 16 0 2 0 21 13 4 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 7 0 0 0 2 0 101 72 28 218 158 64 250 179 73 250 179 73 +250 179 73 139 99 44 0 2 0 8 14 16 0 2 0 238 241 237 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 244 246 243 38 40 37 3 10 13 139 181 221 170 212 252 +170 212 252 161 203 243 66 80 97 0 2 0 31 23 12 191 142 60 248 183 74 180 132 57 +44 34 15 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 23 15 7 190 136 56 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 150 108 46 0 2 0 0 2 0 82 83 81 222 224 221 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 102 104 101 0 2 0 98 129 156 170 212 252 163 205 246 +98 129 156 23 30 36 0 2 0 82 62 28 234 172 70 248 183 74 248 183 74 248 183 74 +248 183 74 158 114 46 29 21 8 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 64 46 18 109 79 35 150 108 46 224 163 69 250 179 73 +250 179 73 250 179 73 250 179 73 158 114 46 0 2 0 0 2 0 3 6 2 115 117 114 +234 236 233 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 176 178 175 0 2 0 57 72 88 146 188 228 80 98 121 8 14 16 +0 2 0 24 17 10 158 114 46 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 242 178 77 58 42 19 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 0 2 0 67 49 21 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 228 167 73 95 68 30 0 2 0 0 2 0 +0 2 0 52 54 51 108 110 107 162 164 161 219 221 218 254 255 252 254 255 252 254 255 252 +254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 254 255 252 252 254 250 +219 221 218 178 180 177 18 20 17 6 12 15 26 33 39 0 2 0 0 2 0 52 36 13 +164 119 51 242 178 77 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 242 178 77 +187 138 56 175 129 54 158 114 46 82 62 28 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 78 58 25 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 234 172 70 142 101 40 +44 34 15 10 12 8 0 2 0 0 2 0 0 2 0 18 20 17 60 62 59 71 73 70 +82 83 81 95 96 94 104 106 103 118 120 117 115 117 114 78 80 77 40 41 39 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 44 34 15 105 75 32 191 142 60 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 105 75 32 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 187 138 56 250 179 73 +250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 250 179 73 142 101 40 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 206 148 61 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 161 117 49 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 228 167 73 250 179 73 +238 175 73 190 136 56 158 114 46 234 172 70 250 179 73 250 179 73 250 179 73 250 179 73 +250 179 73 147 105 44 0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 67 49 21 248 183 74 248 183 74 248 183 74 +248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 248 183 74 +31 23 12 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 10 5 21 13 4 +0 2 0 0 2 0 0 2 0 147 105 44 250 179 73 250 179 73 250 179 73 250 179 73 +134 100 43 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 155 111 43 248 183 74 248 183 74 +248 183 74 248 183 74 224 163 69 55 39 17 64 46 18 164 119 51 242 178 77 248 183 74 +75 55 22 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 202 145 58 250 179 73 250 179 73 228 167 73 88 66 26 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 168 123 54 248 183 74 +248 183 74 248 183 74 158 114 46 0 2 0 7 0 0 0 2 0 10 12 8 44 34 15 +15 9 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 29 21 8 250 179 73 250 179 73 158 114 46 15 14 3 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 7 0 0 0 2 0 175 129 54 +248 183 74 248 183 74 114 83 33 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 29 21 8 147 105 44 58 42 19 0 2 0 7 0 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +105 75 32 218 158 64 23 15 7 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 7 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 +0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 + diff --git a/kernels/linux-libre-xen/logo_linux_mono.pbm b/kernels/linux-libre-xen/logo_linux_mono.pbm new file mode 100644 index 000000000..3d3c35807 --- /dev/null +++ b/kernels/linux-libre-xen/logo_linux_mono.pbm @@ -0,0 +1,159 @@ +P2 +80 78 +255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 255 255 255 255 255 0 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 0 +0 0 0 0 0 0 0 0 0 0 +0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 +255 0 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 +255 255 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 0 0 255 0 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 +255 255 0 0 0 0 0 0 0 0 +0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 +255 255 255 0 0 0 0 0 0 0 +0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 255 255 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 0 255 255 0 0 255 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 255 255 255 0 0 255 +255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 255 +255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 0 0 +255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 +0 255 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 0 0 255 255 255 0 +0 255 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 +0 0 255 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 255 255 255 +255 0 0 255 255 255 255 255 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 255 0 0 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 +255 0 0 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 0 0 255 0 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 255 255 255 +255 255 0 0 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 255 255 255 255 0 255 255 255 +255 255 255 0 0 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 255 255 255 0 255 255 255 +255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 255 255 +255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 0 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 255 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 255 255 255 255 0 0 +255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 0 +0 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 0 0 255 255 255 255 255 255 +0 0 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 255 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 255 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 255 255 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 255 255 0 0 0 255 255 255 255 255 255 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 255 255 255 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 diff --git a/kernels/linux-libre-xen/logo_linux_vga16.ppm b/kernels/linux-libre-xen/logo_linux_vga16.ppm new file mode 100644 index 000000000..f279f972c --- /dev/null +++ b/kernels/linux-libre-xen/logo_linux_vga16.ppm @@ -0,0 +1,18724 @@ +P3 +# CREATOR: GIMP PNM Filter Version 1.1 +80 78 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +170 +170 +170 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +170 +170 +170 +85 +85 +85 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +85 +85 +85 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +170 +170 +170 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +85 +85 +85 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +170 +170 +170 +170 +170 +170 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +85 +85 +255 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +255 +255 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +85 +85 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +170 +170 +170 +0 +0 +0 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +85 +85 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +85 +85 +85 +0 +0 +0 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +85 +85 +85 +85 +255 +255 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +170 +170 +170 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +170 +170 +170 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +85 +85 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +85 +85 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +255 +255 +85 +255 +255 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +85 +85 +85 +255 +255 +85 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 -- cgit v1.2.3 From 55234351119f417fb601a250b9f9425288961fd5 Mon Sep 17 00:00:00 2001 From: "coadde [Márcio Alexandre Silva Delgado]" Date: Fri, 22 Aug 2014 18:03:05 -0300 Subject: add mips64el patches for linux-libre* kernels --- .../3.10.50-33c9ab76eb-loongson-community.patch | 14572 +++++++++++++++++++ .../gnewsense-binutils-flag.patch | 28 + .../3.14.14-a410a5e2b7-loongson-community.patch | 10869 ++++++++++++++ .../linux-libre-rt/gnewsense-binutils-flag.patch | 28 + .../3.15.7-2704e67ebc-loongson-community.patch | 11744 +++++++++++++++ .../gnewsense-binutils-flag.patch | 28 + .../3.14.14-a410a5e2b7-loongson-community.patch | 10869 ++++++++++++++ .../linux-libre-lts/gnewsense-binutils-flag.patch | 28 + .../3.16-7981337ad0-loongson-community.patch | 11731 +++++++++++++++ libre/linux-libre/gnewsense-binutils-flag.patch | 28 + 10 files changed, 59925 insertions(+) create mode 100644 kernels/linux-libre-lts-knock/3.10.50-33c9ab76eb-loongson-community.patch create mode 100644 kernels/linux-libre-lts-knock/gnewsense-binutils-flag.patch create mode 100644 kernels/linux-libre-rt/3.14.14-a410a5e2b7-loongson-community.patch create mode 100644 kernels/linux-libre-rt/gnewsense-binutils-flag.patch create mode 100644 libre/linux-libre-grsec/3.15.7-2704e67ebc-loongson-community.patch create mode 100644 libre/linux-libre-grsec/gnewsense-binutils-flag.patch create mode 100644 libre/linux-libre-lts/3.14.14-a410a5e2b7-loongson-community.patch create mode 100644 libre/linux-libre-lts/gnewsense-binutils-flag.patch create mode 100644 libre/linux-libre/3.16-7981337ad0-loongson-community.patch create mode 100644 libre/linux-libre/gnewsense-binutils-flag.patch diff --git a/kernels/linux-libre-lts-knock/3.10.50-33c9ab76eb-loongson-community.patch b/kernels/linux-libre-lts-knock/3.10.50-33c9ab76eb-loongson-community.patch new file mode 100644 index 000000000..5ef0ad621 --- /dev/null +++ b/kernels/linux-libre-lts-knock/3.10.50-33c9ab76eb-loongson-community.patch @@ -0,0 +1,14572 @@ +diff --git a/Makefile b/Makefile +index 8d891c6..c5f4411a 100644 +--- a/Makefile ++++ b/Makefile +@@ -241,8 +241,8 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ + + HOSTCC = gcc + HOSTCXX = g++ +-HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer +-HOSTCXXFLAGS = -O2 ++HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O3 -fomit-frame-pointer ++HOSTCXXFLAGS = -O3 + + # Decide whether to build built-in, modular, or both. + # Normally, just do built-in. +@@ -573,7 +573,7 @@ all: vmlinux + ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE + KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,) + else +-KBUILD_CFLAGS += -O2 ++KBUILD_CFLAGS += -O3 + endif + + include $(srctree)/arch/$(SRCARCH)/Makefile +diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig +index e53e2b4..86c2834 100644 +--- a/arch/mips/Kconfig ++++ b/arch/mips/Kconfig +@@ -270,7 +270,7 @@ config LASAT + + config MACH_LOONGSON + bool "Loongson family of machines" +- select SYS_SUPPORTS_ZBOOT ++ select SYS_SUPPORTS_ZBOOT_UART16550 + help + This enables the support of Loongson family of machines. + +@@ -932,6 +932,60 @@ config CSRC_POWERTV + config CSRC_R4K + bool + ++config MIPS_USER_RDTSC ++ bool "Emulate rdtsc instruction for MIPS" ++ depends on CSRC_R4K && MIPS32_O32 ++ default n ++ help ++ This optoin enables the Emulated rdtsc support for MIPS, which allows ++ the user-space applications read the R4k count directly. Currently, ++ this only support the CONFIG_MIPS32_O32 and R4K, but future, we may ++ add support for scall64-{n32,64}.S and scall32-32.S and for the count ++ registers provided by the other MIPS variants. ++ ++ This emulation based on the syscall instruction, by default, the ++ syscall is encoded as 0x0000000c, except the 0xc, the other parts can ++ be encoded as specific meaning. when a syscall instruction is issued, ++ through checking the encoding of the instruction, when the encoding ++ is the generic 0x000000c, we do the generic syscall work, if ++ something other is encoded in, we can do relevant things, except for ++ the light-weight things, such as read a register. herein, we read the ++ count register whenever there is something encoded in the syscall ++ instruction. In the future, we may be possible to abstract more ++ light-weight & frequently-used operations and add a ++ sys_call_table-like table to store the entries of some light-weight ++ operations and encode 1,2,3... into the syscall instruction and jump ++ to respective entry for diffrent numbers, as a result, we get ++ fast-syscall and which may speed up the user-space applications and ++ even be possibly improve the determinism. ++ ++ *Example* ++ ++ #include ++ #include ++ ++ /* ++ * Currently, our return value is only 32bit, In the long run, ++ * this should be uint64_t, just like clock_gettime(), but it ++ * should has high precision/low overhead than clock_gettime() ++ */ ++ uint32_t rdtsc(void) ++ { ++ /* ++ * Linux will store the value of the count register into ++ * the v0 register, which is just the return value of this ++ * function, so, please ignore the compiling warning. ++ */ ++ __asm__ __volatile__ ( ++ "syscall 1\n" ++ :::"$2"); ++ } ++ ++ int main(int argc, char *argv[]) ++ { ++ return printf("cycles: %u\n", rdtsc()); ++ } ++ + config CSRC_GIC + bool + +@@ -1537,6 +1591,15 @@ config CPU_LOONGSON2 + bool + select CPU_SUPPORTS_32BIT_KERNEL + select CPU_SUPPORTS_64BIT_KERNEL ++ select CPU_SUPPORTS_HIGHMEM if ! EMBEDDED ++ select ARCH_WANT_OPTIONAL_GPIOLIB ++ ++config CPU_LOONGSON1 ++ bool ++ select CPU_MIPS32 ++ select CPU_MIPSR2 ++ select CPU_HAS_PREFETCH ++ select CPU_SUPPORTS_32BIT_KERNEL + select CPU_SUPPORTS_HIGHMEM + select CPU_SUPPORTS_HUGEPAGES + +@@ -2131,7 +2194,7 @@ config SYS_SUPPORTS_MICROMIPS + + config ARCH_FLATMEM_ENABLE + def_bool y +- depends on !NUMA && !CPU_LOONGSON2 ++ depends on !NUMA && !(CPU_LOONGSON2 && HIBERNATION) + + config ARCH_DISCONTIGMEM_ENABLE + bool +diff --git a/arch/mips/Kconfig.debug b/arch/mips/Kconfig.debug +index 5a43aa0..96f8852 100644 +--- a/arch/mips/Kconfig.debug ++++ b/arch/mips/Kconfig.debug +@@ -7,9 +7,9 @@ config TRACE_IRQFLAGS_SUPPORT + source "lib/Kconfig.debug" + + config EARLY_PRINTK +- bool "Early printk" if EXPERT ++ bool "Early printk" + depends on SYS_HAS_EARLY_PRINTK +- default y ++ default n + help + This option enables special console drivers which allow the kernel + to print messages very early in the bootup process. +diff --git a/arch/mips/Makefile b/arch/mips/Makefile +index dd58a04..a24c24b 100644 +--- a/arch/mips/Makefile ++++ b/arch/mips/Makefile +@@ -260,18 +260,19 @@ endif + # Other need ECOFF, so we build a 32-bit ELF binary for them which we then + # convert to ECOFF using elf2ecoff. + # ++quiet_cmd_32 = OBJCOPY $@ ++ cmd_32 = $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@ + vmlinux.32: vmlinux +- $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@ +- +- +-#obj-$(CONFIG_KPROBES) += kprobes.o ++ $(call cmd,32) + + # + # The 64-bit ELF tools are pretty broken so at this time we generate 64-bit + # ELF files from 32-bit files by conversion. + # ++quiet_cmd_64 = OBJCOPY $@ ++ cmd_64 = $(OBJCOPY) -O $(64bit-bfd) $(OBJCOPYFLAGS) $< $@ + vmlinux.64: vmlinux +- $(OBJCOPY) -O $(64bit-bfd) $(OBJCOPYFLAGS) $< $@ ++ $(call cmd,64) + + all: $(all-y) + +diff --git a/arch/mips/bcm63xx/cpu.c b/arch/mips/bcm63xx/cpu.c +index 79fe32d..5eb36f3 100644 +--- a/arch/mips/bcm63xx/cpu.c ++++ b/arch/mips/bcm63xx/cpu.c +@@ -293,7 +293,7 @@ void __init bcm63xx_cpu_init(void) + /* soc registers location depends on cpu type */ + chipid_reg = 0; + +- switch (c->cputype) { ++ switch (current_cpu_type()) { + case CPU_BMIPS3300: + if ((read_c0_prid() & 0xff00) != PRID_IMP_BMIPS3300_ALT) + __cpu_name[cpu] = "Broadcom BCM6338"; +diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile +index bbaa1d4b..87af880 100644 +--- a/arch/mips/boot/compressed/Makefile ++++ b/arch/mips/boot/compressed/Makefile +@@ -28,9 +28,10 @@ KBUILD_AFLAGS := $(LINUXINCLUDE) $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ + targets := head.o decompress.o dbg.o uart-16550.o uart-alchemy.o + + # decompressor objects (linked with vmlinuz) +-vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/dbg.o ++vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o + + ifdef CONFIG_DEBUG_ZBOOT ++vmlinuzobjs-y += $(obj)/dbg.o + vmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o + vmlinuzobjs-$(CONFIG_MIPS_ALCHEMY) += $(obj)/uart-alchemy.o + endif +@@ -71,9 +72,18 @@ quiet_cmd_zld = LD $@ + cmd_zld = $(LD) $(LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T $< $(vmlinuzobjs-y) -o $@ + quiet_cmd_strip = STRIP $@ + cmd_strip = $(STRIP) -s $@ ++ifdef CONFIG_EMBEDDED ++quiet_cmd_sstrip = SSTRIP $@ ++ cmd_sstrip = $(srctree)/scripts/sstrip.sh $@ ++endif + vmlinuz: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr + $(call cmd,zld) + $(call cmd,strip) ++ $(call cmd,sstrip) ++ ++vmlinuz.unsstrip: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr ++ $(call cmd,zld) ++ $(call cmd,strip) + + # + # Some DECstations need all possible sections of an ECOFF executable +@@ -86,14 +96,14 @@ endif + hostprogs-y += ../elf2ecoff + + ifdef CONFIG_32BIT +- VMLINUZ = vmlinuz ++ VMLINUZ = vmlinuz.unsstrip + else + VMLINUZ = vmlinuz.32 + endif + + quiet_cmd_32 = OBJCOPY $@ + cmd_32 = $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@ +-vmlinuz.32: vmlinuz ++vmlinuz.32: vmlinuz.unsstrip + $(call cmd,32) + + quiet_cmd_ecoff = ECOFF $@ +@@ -102,11 +112,11 @@ vmlinuz.ecoff: $(obj)/../elf2ecoff $(VMLINUZ) + $(call cmd,ecoff) + + OBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary +-vmlinuz.bin: vmlinuz ++vmlinuz.bin: vmlinuz.unsstrip + $(call cmd,objcopy) + + OBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec +-vmlinuz.srec: vmlinuz ++vmlinuz.srec: vmlinuz.unsstrip + $(call cmd,objcopy) + +-clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec} ++clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec,unsstrip} +diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c +index 2c95730..3f65441 100644 +--- a/arch/mips/boot/compressed/decompress.c ++++ b/arch/mips/boot/compressed/decompress.c +@@ -27,8 +27,13 @@ unsigned long free_mem_end_ptr; + extern unsigned char __image_begin, __image_end; + + /* debug interfaces */ ++#ifdef CONFIG_DEBUG_ZBOOT + extern void puts(const char *s); + extern void puthex(unsigned long long val); ++#else ++#define puts(s) ++#define puthex(val) ++#endif + + void error(char *x) + { +diff --git a/arch/mips/boot/compressed/ld.script b/arch/mips/boot/compressed/ld.script +index 8e6b07c..99ca111 100644 +--- a/arch/mips/boot/compressed/ld.script ++++ b/arch/mips/boot/compressed/ld.script +@@ -46,5 +46,6 @@ SECTIONS + *(.reginfo) + *(.comment) + *(.note) ++ *(.gnu.attributes) + } + } +diff --git a/arch/mips/configs/fuloong2e_defconfig b/arch/mips/configs/fuloong2e_defconfig +index e5b73de..1e02d0b 100644 +--- a/arch/mips/configs/fuloong2e_defconfig ++++ b/arch/mips/configs/fuloong2e_defconfig +@@ -12,7 +12,6 @@ CONFIG_BSD_PROCESS_ACCT=y + CONFIG_IKCONFIG=y + CONFIG_IKCONFIG_PROC=y + CONFIG_LOG_BUF_SHIFT=14 +-CONFIG_SYSFS_DEPRECATED_V2=y + CONFIG_NAMESPACES=y + CONFIG_USER_NS=y + CONFIG_PID_NS=y +@@ -222,7 +221,8 @@ CONFIG_EXT4_FS_SECURITY=y + CONFIG_REISERFS_FS=m + CONFIG_AUTOFS_FS=y + CONFIG_AUTOFS4_FS=y +-CONFIG_FUSE_FS=y ++CONFIG_FUSE_FS=m ++CONFIG_CUSE=m + CONFIG_ISO9660_FS=m + CONFIG_JOLIET=y + CONFIG_ZISOFS=y +@@ -260,9 +260,9 @@ CONFIG_NLS_CODEPAGE_936=y + CONFIG_NLS_ISO8859_1=y + CONFIG_NLS_UTF8=y + # CONFIG_ENABLE_MUST_CHECK is not set +-CONFIG_DEBUG_FS=y + # CONFIG_RCU_CPU_STALL_DETECTOR is not set + CONFIG_SYSCTL_SYSCALL_CHECK=y ++# CONFIG_EARLY_PRINTK is not set + CONFIG_CRYPTO_FIPS=y + CONFIG_CRYPTO_AUTHENC=m + CONFIG_CRYPTO_CCM=m +diff --git a/arch/mips/configs/gdium_minimal_defconfig b/arch/mips/configs/gdium_minimal_defconfig +new file mode 100644 +index 0000000..595b414 +--- /dev/null ++++ b/arch/mips/configs/gdium_minimal_defconfig +@@ -0,0 +1,125 @@ ++CONFIG_MACH_LOONGSON=y ++CONFIG_DEXXON_GDIUM=y ++CONFIG_64BIT=y ++CONFIG_NO_HZ=y ++CONFIG_HIGH_RES_TIMERS=y ++CONFIG_PREEMPT=y ++CONFIG_EXPERIMENTAL=y ++# CONFIG_LOCALVERSION_AUTO is not set ++CONFIG_KERNEL_LZMA=y ++CONFIG_SYSVIPC=y ++CONFIG_POSIX_MQUEUE=y ++CONFIG_BSD_PROCESS_ACCT=y ++CONFIG_BSD_PROCESS_ACCT_V3=y ++CONFIG_IKCONFIG=y ++CONFIG_IKCONFIG_PROC=y ++CONFIG_LOG_BUF_SHIFT=15 ++CONFIG_BLK_DEV_INITRD=y ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set ++CONFIG_EMBEDDED=y ++# CONFIG_BLK_DEV_BSG is not set ++# CONFIG_IOSCHED_DEADLINE is not set ++# CONFIG_IOSCHED_CFQ is not set ++CONFIG_PCI=y ++CONFIG_MIPS32_COMPAT=y ++CONFIG_MIPS32_O32=y ++CONFIG_MIPS32_N32=y ++CONFIG_NET=y ++CONFIG_PACKET=y ++CONFIG_UNIX=y ++CONFIG_INET=y ++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set ++# CONFIG_INET_XFRM_MODE_TUNNEL is not set ++# CONFIG_INET_XFRM_MODE_BEET is not set ++# CONFIG_INET_LRO is not set ++# CONFIG_INET_DIAG is not set ++# CONFIG_IPV6 is not set ++# CONFIG_WIRELESS is not set ++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" ++CONFIG_DEVTMPFS=y ++CONFIG_DEVTMPFS_MOUNT=y ++CONFIG_SCSI=y ++CONFIG_BLK_DEV_SD=y ++CONFIG_NETDEVICES=y ++CONFIG_NET_ETHERNET=y ++CONFIG_NET_PCI=y ++CONFIG_8139TOO=y ++CONFIG_R8169=y ++# CONFIG_NETDEV_10000 is not set ++# CONFIG_WLAN is not set ++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set ++CONFIG_INPUT_EVDEV=y ++# CONFIG_MOUSE_PS2_ALPS is not set ++# CONFIG_MOUSE_PS2_LOGIPS2PP is not set ++# CONFIG_MOUSE_PS2_TRACKPOINT is not set ++# CONFIG_SERIO_SERPORT is not set ++# CONFIG_DEVKMEM is not set ++CONFIG_SERIAL_8250=y ++CONFIG_SERIAL_8250_CONSOLE=y ++CONFIG_LEGACY_PTY_COUNT=16 ++# CONFIG_HW_RANDOM is not set ++CONFIG_I2C=y ++CONFIG_I2C_CHARDEV=y ++CONFIG_I2C_GPIO=y ++CONFIG_SENSORS_LM75=y ++CONFIG_MFD_SM501=y ++CONFIG_MFD_SM501_GPIO=y ++CONFIG_FB=y ++CONFIG_FB_SIS=y ++CONFIG_FB_SIS_300=y ++CONFIG_FB_SIS_315=y ++CONFIG_FB_SM501=y ++# CONFIG_VGA_CONSOLE is not set ++CONFIG_FRAMEBUFFER_CONSOLE=y ++CONFIG_HIDRAW=y ++CONFIG_USB_HIDDEV=y ++CONFIG_HID_DRAGONRISE=y ++CONFIG_DRAGONRISE_FF=y ++CONFIG_HID_GYRATION=y ++CONFIG_HID_TWINHAN=y ++CONFIG_HID_NTRIG=y ++CONFIG_HID_PANTHERLORD=y ++CONFIG_PANTHERLORD_FF=y ++CONFIG_HID_PETALYNX=y ++CONFIG_HID_SAMSUNG=y ++CONFIG_HID_SONY=y ++CONFIG_HID_SUNPLUS=y ++CONFIG_HID_GREENASIA=y ++CONFIG_GREENASIA_FF=y ++CONFIG_HID_SMARTJOYPLUS=y ++CONFIG_SMARTJOYPLUS_FF=y ++CONFIG_HID_TOPSEED=y ++CONFIG_HID_THRUSTMASTER=y ++CONFIG_THRUSTMASTER_FF=y ++CONFIG_HID_ZEROPLUS=y ++CONFIG_ZEROPLUS_FF=y ++CONFIG_USB=y ++# CONFIG_USB_DEVICE_CLASS is not set ++CONFIG_USB_DYNAMIC_MINORS=y ++CONFIG_USB_MON=y ++CONFIG_USB_EHCI_HCD=y ++CONFIG_USB_EHCI_ROOT_HUB_TT=y ++# CONFIG_USB_EHCI_TT_NEWSCHED is not set ++CONFIG_USB_OHCI_HCD=y ++CONFIG_USB_STORAGE=y ++CONFIG_USB_LIBUSUAL=y ++CONFIG_RTC_CLASS=y ++CONFIG_RTC_DRV_M41T80=y ++CONFIG_STAGING=y ++# CONFIG_STAGING_EXCLUDE_BUILD is not set ++CONFIG_FB_SM7XX=y ++# CONFIG_MIPS_PLATFORM_DEVICES is not set ++CONFIG_EXT2_FS=y ++CONFIG_EXT2_FS_XATTR=y ++CONFIG_EXT3_FS=y ++# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set ++CONFIG_EXT4_FS=y ++CONFIG_TMPFS=y ++# CONFIG_MISC_FILESYSTEMS is not set ++# CONFIG_NETWORK_FILESYSTEMS is not set ++CONFIG_NLS_DEFAULT="utf8" ++CONFIG_NLS_ASCII=y ++CONFIG_NLS_UTF8=y ++CONFIG_FRAME_WARN=1024 ++CONFIG_STRIP_ASM_SYMS=y ++# CONFIG_RCU_CPU_STALL_DETECTOR is not set +diff --git a/arch/mips/configs/gdium_small_defconfig b/arch/mips/configs/gdium_small_defconfig +new file mode 100644 +index 0000000..8027d5d +--- /dev/null ++++ b/arch/mips/configs/gdium_small_defconfig +@@ -0,0 +1,149 @@ ++CONFIG_MACH_LOONGSON=y ++CONFIG_DEXXON_GDIUM=y ++CONFIG_64BIT=y ++CONFIG_NO_HZ=y ++CONFIG_HIGH_RES_TIMERS=y ++CONFIG_PREEMPT=y ++CONFIG_EXPERIMENTAL=y ++# CONFIG_LOCALVERSION_AUTO is not set ++CONFIG_KERNEL_LZMA=y ++CONFIG_SYSVIPC=y ++CONFIG_POSIX_MQUEUE=y ++CONFIG_BSD_PROCESS_ACCT=y ++CONFIG_BSD_PROCESS_ACCT_V3=y ++CONFIG_IKCONFIG=y ++CONFIG_IKCONFIG_PROC=y ++CONFIG_LOG_BUF_SHIFT=15 ++CONFIG_NAMESPACES=y ++# CONFIG_UTS_NS is not set ++# CONFIG_IPC_NS is not set ++# CONFIG_USER_NS is not set ++# CONFIG_PID_NS is not set ++# CONFIG_NET_NS is not set ++CONFIG_BLK_DEV_INITRD=y ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set ++CONFIG_EMBEDDED=y ++CONFIG_MODULES=y ++CONFIG_MODULE_UNLOAD=y ++# CONFIG_BLK_DEV_BSG is not set ++# CONFIG_IOSCHED_DEADLINE is not set ++# CONFIG_IOSCHED_CFQ is not set ++CONFIG_PCI=y ++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set ++CONFIG_MIPS32_COMPAT=y ++CONFIG_MIPS32_O32=y ++CONFIG_MIPS32_N32=y ++CONFIG_PM=y ++CONFIG_HIBERNATION=y ++CONFIG_PM_STD_PARTITION="/dev/sda4" ++CONFIG_CPU_FREQ=y ++CONFIG_CPU_FREQ_STAT_DETAILS=y ++CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE=y ++CONFIG_CPU_FREQ_GOV_POWERSAVE=y ++CONFIG_CPU_FREQ_GOV_USERSPACE=y ++CONFIG_CPU_FREQ_GOV_ONDEMAND=y ++CONFIG_LOONGSON2_CPUFREQ=m ++CONFIG_NET=y ++CONFIG_PACKET=y ++CONFIG_UNIX=y ++CONFIG_INET=y ++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set ++# CONFIG_INET_XFRM_MODE_TUNNEL is not set ++# CONFIG_INET_XFRM_MODE_BEET is not set ++# CONFIG_INET_LRO is not set ++# CONFIG_INET_DIAG is not set ++# CONFIG_IPV6 is not set ++CONFIG_CFG80211=y ++# CONFIG_CFG80211_DEFAULT_PS is not set ++# CONFIG_CFG80211_WEXT is not set ++CONFIG_LIB80211=y ++CONFIG_MAC80211=y ++CONFIG_RFKILL=y ++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" ++CONFIG_DEVTMPFS=y ++CONFIG_DEVTMPFS_MOUNT=y ++CONFIG_BLK_DEV_LOOP=y ++CONFIG_BLK_DEV_RAM=y ++CONFIG_BLK_DEV_RAM_SIZE=8192 ++CONFIG_MISC_DEVICES=y ++# CONFIG_SCSI_PROC_FS is not set ++CONFIG_BLK_DEV_SD=y ++# CONFIG_SCSI_LOWLEVEL is not set ++CONFIG_ATA=y ++# CONFIG_SATA_PMP is not set ++CONFIG_PATA_AMD=y ++CONFIG_NETDEVICES=y ++CONFIG_NET_ETHERNET=y ++CONFIG_NET_PCI=y ++CONFIG_8139TOO=y ++CONFIG_R8169=y ++# CONFIG_NETDEV_10000 is not set ++CONFIG_RT2X00=m ++CONFIG_RT61PCI=m ++CONFIG_INPUT_FF_MEMLESS=y ++CONFIG_INPUT_EVDEV=y ++CONFIG_MOUSE_PS2=m ++# CONFIG_MOUSE_PS2_ALPS is not set ++# CONFIG_MOUSE_PS2_LOGIPS2PP is not set ++# CONFIG_MOUSE_PS2_TRACKPOINT is not set ++# CONFIG_SERIO_SERPORT is not set ++# CONFIG_DEVKMEM is not set ++CONFIG_SERIAL_8250=y ++CONFIG_SERIAL_8250_CONSOLE=y ++CONFIG_LEGACY_PTY_COUNT=16 ++# CONFIG_HW_RANDOM is not set ++CONFIG_I2C=y ++CONFIG_I2C_CHARDEV=y ++CONFIG_I2C_GPIO=y ++CONFIG_HWMON=m ++CONFIG_SENSORS_LM75=m ++CONFIG_MFD_SM501=y ++CONFIG_MFD_SM501_GPIO=y ++CONFIG_FB=y ++CONFIG_FB_SIS=y ++CONFIG_FB_SIS_300=y ++CONFIG_FB_SIS_315=y ++CONFIG_FB_SM501=y ++CONFIG_BACKLIGHT_LCD_SUPPORT=y ++# CONFIG_BACKLIGHT_GENERIC is not set ++CONFIG_BACKLIGHT_PWM=m ++# CONFIG_VGA_CONSOLE is not set ++CONFIG_FRAMEBUFFER_CONSOLE=y ++CONFIG_SOUND=y ++CONFIG_SND=y ++CONFIG_SND_CS5535AUDIO=m ++CONFIG_HIDRAW=y ++CONFIG_USB_HIDDEV=y ++CONFIG_HID_GDIUM=y ++CONFIG_USB=y ++# CONFIG_USB_DEVICE_CLASS is not set ++CONFIG_USB_DYNAMIC_MINORS=y ++CONFIG_USB_MON=y ++CONFIG_USB_EHCI_HCD=y ++CONFIG_USB_EHCI_ROOT_HUB_TT=y ++# CONFIG_USB_EHCI_TT_NEWSCHED is not set ++CONFIG_USB_OHCI_HCD=y ++CONFIG_USB_STORAGE=y ++CONFIG_USB_LIBUSUAL=y ++CONFIG_RTC_CLASS=y ++CONFIG_RTC_DRV_M41T80=y ++CONFIG_RTC_DRV_M41T80_WDT=y ++CONFIG_STAGING=y ++# CONFIG_STAGING_EXCLUDE_BUILD is not set ++CONFIG_FB_SM7XX=y ++CONFIG_EXT2_FS=y ++CONFIG_EXT2_FS_XATTR=y ++CONFIG_EXT3_FS=y ++# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set ++CONFIG_EXT4_FS=y ++CONFIG_FANOTIFY=y ++CONFIG_TMPFS=y ++# CONFIG_MISC_FILESYSTEMS is not set ++# CONFIG_NETWORK_FILESYSTEMS is not set ++CONFIG_NLS_DEFAULT="utf8" ++CONFIG_NLS_ASCII=y ++CONFIG_NLS_UTF8=y ++CONFIG_FRAME_WARN=1024 ++CONFIG_STRIP_ASM_SYMS=y ++# CONFIG_RCU_CPU_STALL_DETECTOR is not set ++# CONFIG_EARLY_PRINTK is not set +diff --git a/arch/mips/configs/lemote2f_defconfig b/arch/mips/configs/lemote2f_defconfig +index 343bebc..ef8b4d13 100644 +--- a/arch/mips/configs/lemote2f_defconfig ++++ b/arch/mips/configs/lemote2f_defconfig +@@ -1,27 +1,27 @@ + CONFIG_MACH_LOONGSON=y + CONFIG_LEMOTE_MACH2F=y +-CONFIG_CS5536_MFGPT=y + CONFIG_64BIT=y ++CONFIG_KSM=y + CONFIG_NO_HZ=y + CONFIG_HIGH_RES_TIMERS=y + CONFIG_PREEMPT=y +-CONFIG_KEXEC=y +-# CONFIG_SECCOMP is not set + CONFIG_EXPERIMENTAL=y + # CONFIG_LOCALVERSION_AUTO is not set ++CONFIG_KERNEL_LZMA=y + CONFIG_SYSVIPC=y + CONFIG_BSD_PROCESS_ACCT=y + CONFIG_BSD_PROCESS_ACCT_V3=y ++CONFIG_TASKSTATS=y ++CONFIG_TASK_DELAY_ACCT=y ++CONFIG_TASK_XACCT=y ++CONFIG_TASK_IO_ACCOUNTING=y + CONFIG_AUDIT=y + CONFIG_IKCONFIG=y + CONFIG_IKCONFIG_PROC=y + CONFIG_LOG_BUF_SHIFT=15 +-CONFIG_SYSFS_DEPRECATED_V2=y ++CONFIG_SCHED_AUTOGROUP=y + CONFIG_BLK_DEV_INITRD=y +-CONFIG_RD_BZIP2=y +-CONFIG_RD_LZMA=y + # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +-CONFIG_EXPERT=y + CONFIG_PROFILING=y + CONFIG_OPROFILE=m + CONFIG_MODULES=y +@@ -34,20 +34,17 @@ CONFIG_BINFMT_MISC=m + CONFIG_MIPS32_COMPAT=y + CONFIG_MIPS32_O32=y + CONFIG_MIPS32_N32=y +-CONFIG_PM=y + CONFIG_HIBERNATION=y +-CONFIG_PM_STD_PARTITION="/dev/hda3" ++CONFIG_PM_STD_PARTITION="/dev/sda3" + CONFIG_PM_RUNTIME=y + CONFIG_CPU_FREQ=y + CONFIG_CPU_FREQ_DEBUG=y +-CONFIG_CPU_FREQ_STAT=m + CONFIG_CPU_FREQ_STAT_DETAILS=y +-CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +-CONFIG_CPU_FREQ_GOV_POWERSAVE=m +-CONFIG_CPU_FREQ_GOV_USERSPACE=m +-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m ++CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE=y ++CONFIG_CPU_FREQ_GOV_POWERSAVE=y ++CONFIG_CPU_FREQ_GOV_USERSPACE=y ++CONFIG_CPU_FREQ_GOV_ONDEMAND=y + CONFIG_LOONGSON2_CPUFREQ=m +-CONFIG_NET=y + CONFIG_PACKET=y + CONFIG_UNIX=y + CONFIG_XFRM_USER=m +@@ -59,7 +56,6 @@ CONFIG_IP_MULTIPLE_TABLES=y + CONFIG_IP_ROUTE_MULTIPATH=y + CONFIG_IP_ROUTE_VERBOSE=y + CONFIG_NET_IPIP=m +-CONFIG_NET_IPGRE=m + CONFIG_IP_MROUTE=y + CONFIG_IP_PIMSM_V1=y + CONFIG_IP_PIMSM_V2=y +@@ -79,12 +75,249 @@ CONFIG_IPV6_MULTIPLE_TABLES=y + CONFIG_IPV6_SUBTREES=y + CONFIG_NETWORK_SECMARK=y + CONFIG_NETFILTER=y ++CONFIG_NF_CONNTRACK=m ++CONFIG_NF_CT_PROTO_UDPLITE=m ++CONFIG_NF_CONNTRACK_AMANDA=m ++CONFIG_NF_CONNTRACK_FTP=m ++CONFIG_NF_CONNTRACK_H323=m ++CONFIG_NF_CONNTRACK_IRC=m ++CONFIG_NF_CONNTRACK_NETBIOS_NS=m ++CONFIG_NF_CONNTRACK_PPTP=m ++CONFIG_NF_CONNTRACK_SANE=m ++CONFIG_NF_CONNTRACK_SIP=m ++CONFIG_NF_CONNTRACK_TFTP=m ++CONFIG_NF_CT_NETLINK=m ++CONFIG_NETFILTER_TPROXY=m ++CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m ++CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m ++CONFIG_NETFILTER_XT_TARGET_CONNMARK=m ++CONFIG_NETFILTER_XT_TARGET_CT=m ++CONFIG_NETFILTER_XT_TARGET_DSCP=m ++CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m ++CONFIG_NETFILTER_XT_TARGET_MARK=m ++CONFIG_NETFILTER_XT_TARGET_NFLOG=m ++CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m ++CONFIG_NETFILTER_XT_TARGET_NOTRACK=m ++CONFIG_NETFILTER_XT_TARGET_TEE=m ++CONFIG_NETFILTER_XT_TARGET_TPROXY=m ++CONFIG_NETFILTER_XT_TARGET_TRACE=m ++CONFIG_NETFILTER_XT_TARGET_SECMARK=m ++CONFIG_NETFILTER_XT_TARGET_TCPMSS=m ++CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m ++CONFIG_NETFILTER_XT_MATCH_CLUSTER=m ++CONFIG_NETFILTER_XT_MATCH_COMMENT=m ++CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m ++CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m ++CONFIG_NETFILTER_XT_MATCH_CONNMARK=m ++CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m ++CONFIG_NETFILTER_XT_MATCH_CPU=m ++CONFIG_NETFILTER_XT_MATCH_DSCP=m ++CONFIG_NETFILTER_XT_MATCH_ESP=m ++CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m ++CONFIG_NETFILTER_XT_MATCH_HELPER=m ++CONFIG_NETFILTER_XT_MATCH_IPRANGE=m ++CONFIG_NETFILTER_XT_MATCH_IPVS=m ++CONFIG_NETFILTER_XT_MATCH_LENGTH=m ++CONFIG_NETFILTER_XT_MATCH_LIMIT=m ++CONFIG_NETFILTER_XT_MATCH_MAC=m ++CONFIG_NETFILTER_XT_MATCH_MARK=m ++CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m ++CONFIG_NETFILTER_XT_MATCH_OSF=m ++CONFIG_NETFILTER_XT_MATCH_OWNER=m ++CONFIG_NETFILTER_XT_MATCH_POLICY=m ++CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m ++CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m ++CONFIG_NETFILTER_XT_MATCH_QUOTA=m ++CONFIG_NETFILTER_XT_MATCH_RATEEST=m ++CONFIG_NETFILTER_XT_MATCH_REALM=m ++CONFIG_NETFILTER_XT_MATCH_RECENT=m ++CONFIG_NETFILTER_XT_MATCH_SOCKET=m ++CONFIG_NETFILTER_XT_MATCH_STATE=m ++CONFIG_NETFILTER_XT_MATCH_STATISTIC=m ++CONFIG_NETFILTER_XT_MATCH_STRING=m ++CONFIG_NETFILTER_XT_MATCH_TCPMSS=m ++CONFIG_NETFILTER_XT_MATCH_TIME=m ++CONFIG_NETFILTER_XT_MATCH_U32=m ++CONFIG_IP_VS=m ++CONFIG_IP_VS_IPV6=y ++CONFIG_IP_VS_PROTO_TCP=y ++CONFIG_IP_VS_PROTO_UDP=y ++CONFIG_IP_VS_PROTO_ESP=y ++CONFIG_IP_VS_PROTO_AH=y ++CONFIG_IP_VS_PROTO_SCTP=y ++CONFIG_IP_VS_RR=m ++CONFIG_IP_VS_WRR=m ++CONFIG_IP_VS_LC=m ++CONFIG_IP_VS_WLC=m ++CONFIG_IP_VS_LBLC=m ++CONFIG_IP_VS_LBLCR=m ++CONFIG_IP_VS_DH=m ++CONFIG_IP_VS_SH=m ++CONFIG_IP_VS_SED=m ++CONFIG_IP_VS_NQ=m ++CONFIG_IP_VS_FTP=m ++CONFIG_NF_CONNTRACK_IPV4=m ++CONFIG_IP_NF_QUEUE=m ++CONFIG_IP_NF_IPTABLES=m ++CONFIG_IP_NF_MATCH_AH=m ++CONFIG_IP_NF_MATCH_ECN=m ++CONFIG_IP_NF_MATCH_TTL=m ++CONFIG_IP_NF_FILTER=m ++CONFIG_IP_NF_TARGET_REJECT=m ++CONFIG_IP_NF_TARGET_LOG=m ++CONFIG_IP_NF_TARGET_ULOG=m ++CONFIG_NF_NAT=m ++CONFIG_IP_NF_TARGET_MASQUERADE=m ++CONFIG_IP_NF_TARGET_NETMAP=m ++CONFIG_IP_NF_TARGET_REDIRECT=m ++CONFIG_IP_NF_MANGLE=m ++CONFIG_IP_NF_TARGET_CLUSTERIP=m ++CONFIG_IP_NF_TARGET_ECN=m ++CONFIG_IP_NF_TARGET_TTL=m ++CONFIG_IP_NF_RAW=m ++CONFIG_IP_NF_ARPTABLES=m ++CONFIG_IP_NF_ARPFILTER=m ++CONFIG_IP_NF_ARP_MANGLE=m ++CONFIG_NF_CONNTRACK_IPV6=m ++CONFIG_IP6_NF_QUEUE=m ++CONFIG_IP6_NF_IPTABLES=m ++CONFIG_IP6_NF_MATCH_AH=m ++CONFIG_IP6_NF_MATCH_EUI64=m ++CONFIG_IP6_NF_MATCH_FRAG=m ++CONFIG_IP6_NF_MATCH_OPTS=m ++CONFIG_IP6_NF_MATCH_HL=m ++CONFIG_IP6_NF_MATCH_IPV6HEADER=m ++CONFIG_IP6_NF_MATCH_MH=m ++CONFIG_IP6_NF_MATCH_RT=m ++CONFIG_IP6_NF_TARGET_HL=m ++CONFIG_IP6_NF_TARGET_LOG=m ++CONFIG_IP6_NF_FILTER=m ++CONFIG_IP6_NF_TARGET_REJECT=m ++CONFIG_IP6_NF_MANGLE=m ++CONFIG_IP6_NF_RAW=m ++CONFIG_BRIDGE_NF_EBTABLES=m ++CONFIG_BRIDGE_EBT_BROUTE=m ++CONFIG_BRIDGE_EBT_T_FILTER=m ++CONFIG_BRIDGE_EBT_T_NAT=m ++CONFIG_BRIDGE_EBT_802_3=m ++CONFIG_BRIDGE_EBT_AMONG=m ++CONFIG_BRIDGE_EBT_ARP=m ++CONFIG_BRIDGE_EBT_IP=m ++CONFIG_BRIDGE_EBT_IP6=m ++CONFIG_BRIDGE_EBT_LIMIT=m ++CONFIG_BRIDGE_EBT_MARK=m ++CONFIG_BRIDGE_EBT_PKTTYPE=m ++CONFIG_BRIDGE_EBT_STP=m ++CONFIG_BRIDGE_EBT_VLAN=m ++CONFIG_BRIDGE_EBT_ARPREPLY=m ++CONFIG_BRIDGE_EBT_DNAT=m ++CONFIG_BRIDGE_EBT_MARK_T=m ++CONFIG_BRIDGE_EBT_REDIRECT=m ++CONFIG_BRIDGE_EBT_SNAT=m ++CONFIG_BRIDGE_EBT_LOG=m ++CONFIG_BRIDGE_EBT_ULOG=m ++CONFIG_BRIDGE_EBT_NFLOG=m ++CONFIG_IP_DCCP=m ++CONFIG_IP_SCTP=m ++CONFIG_RDS=m ++CONFIG_RDS_TCP=m ++CONFIG_TIPC=m ++CONFIG_TIPC_ADVANCED=y ++CONFIG_ATM=m ++CONFIG_ATM_CLIP=m ++CONFIG_ATM_CLIP_NO_ICMP=y ++CONFIG_ATM_LANE=m ++CONFIG_ATM_MPOA=m ++CONFIG_ATM_BR2684=m ++CONFIG_ATM_BR2684_IPFILTER=y ++CONFIG_L2TP=m ++CONFIG_L2TP_DEBUGFS=m ++CONFIG_L2TP_V3=y ++CONFIG_L2TP_IP=m ++CONFIG_L2TP_ETH=m + CONFIG_BRIDGE=m + CONFIG_VLAN_8021Q=m +-CONFIG_IPX=m ++CONFIG_ATALK=m + CONFIG_NET_SCHED=y ++CONFIG_NET_SCH_CBQ=m ++CONFIG_NET_SCH_HTB=m ++CONFIG_NET_SCH_HFSC=m ++CONFIG_NET_SCH_ATM=m ++CONFIG_NET_SCH_PRIO=m ++CONFIG_NET_SCH_MULTIQ=m ++CONFIG_NET_SCH_RED=m ++CONFIG_NET_SCH_SFQ=m ++CONFIG_NET_SCH_TEQL=m ++CONFIG_NET_SCH_TBF=m ++CONFIG_NET_SCH_GRED=m ++CONFIG_NET_SCH_DSMARK=m ++CONFIG_NET_SCH_NETEM=m ++CONFIG_NET_SCH_DRR=m ++CONFIG_NET_SCH_INGRESS=m ++CONFIG_NET_CLS_BASIC=m ++CONFIG_NET_CLS_TCINDEX=m ++CONFIG_NET_CLS_ROUTE4=m ++CONFIG_NET_CLS_FW=m ++CONFIG_NET_CLS_U32=m ++CONFIG_CLS_U32_PERF=y ++CONFIG_CLS_U32_MARK=y ++CONFIG_NET_CLS_RSVP=m ++CONFIG_NET_CLS_RSVP6=m ++CONFIG_NET_CLS_FLOW=m + CONFIG_NET_EMATCH=y ++CONFIG_NET_EMATCH_CMP=m ++CONFIG_NET_EMATCH_NBYTE=m ++CONFIG_NET_EMATCH_U32=m ++CONFIG_NET_EMATCH_META=m ++CONFIG_NET_EMATCH_TEXT=m + CONFIG_NET_CLS_ACT=y ++CONFIG_NET_ACT_POLICE=m ++CONFIG_NET_ACT_GACT=m ++CONFIG_GACT_PROB=y ++CONFIG_NET_ACT_MIRRED=m ++CONFIG_NET_ACT_IPT=m ++CONFIG_NET_ACT_NAT=m ++CONFIG_NET_ACT_PEDIT=m ++CONFIG_NET_ACT_SIMP=m ++CONFIG_NET_ACT_SKBEDIT=m ++CONFIG_NET_CLS_IND=y ++CONFIG_NET_PKTGEN=m ++CONFIG_CAN=m ++CONFIG_CAN_RAW=m ++CONFIG_CAN_BCM=m ++CONFIG_CAN_VCAN=m ++CONFIG_CAN_DEV=m ++CONFIG_CAN_CALC_BITTIMING=y ++CONFIG_CAN_SJA1000=m ++CONFIG_CAN_SJA1000_ISA=m ++CONFIG_CAN_SJA1000_PLATFORM=m ++CONFIG_CAN_EMS_PCI=m ++CONFIG_CAN_KVASER_PCI=m ++CONFIG_CAN_PLX_PCI=m ++CONFIG_CAN_EMS_USB=m ++CONFIG_CAN_ESD_USB2=m ++CONFIG_IRDA=m ++CONFIG_IRLAN=m ++CONFIG_IRCOMM=m ++CONFIG_IRTTY_SIR=m ++CONFIG_DONGLE=y ++CONFIG_ESI_DONGLE=m ++CONFIG_ACTISYS_DONGLE=m ++CONFIG_TEKRAM_DONGLE=m ++CONFIG_TOIM3232_DONGLE=m ++CONFIG_LITELINK_DONGLE=m ++CONFIG_MA600_DONGLE=m ++CONFIG_GIRBIL_DONGLE=m ++CONFIG_MCP2120_DONGLE=m ++CONFIG_OLD_BELKIN_DONGLE=m ++CONFIG_ACT200L_DONGLE=m ++CONFIG_KINGSUN_DONGLE=m ++CONFIG_KSDAZZLE_DONGLE=m ++CONFIG_KS959_DONGLE=m ++CONFIG_USB_IRDA=m ++CONFIG_SIGMATEL_FIR=m ++CONFIG_VLSI_FIR=m ++CONFIG_MCS_FIR=m + CONFIG_BT=m + CONFIG_BT_L2CAP=y + CONFIG_BT_SCO=y +@@ -95,30 +328,114 @@ CONFIG_BT_BNEP_MC_FILTER=y + CONFIG_BT_BNEP_PROTO_FILTER=y + CONFIG_BT_HIDP=m + CONFIG_BT_HCIBTUSB=m ++CONFIG_BT_HCIBTSDIO=m ++CONFIG_BT_HCIUART=m ++CONFIG_BT_HCIUART_ATH3K=y ++CONFIG_BT_HCIBCM203X=m ++CONFIG_BT_HCIBPA10X=m + CONFIG_BT_HCIBFUSB=m + CONFIG_BT_HCIVHCI=m ++CONFIG_BT_MRVL=m ++CONFIG_BT_MRVL_SDIO=m ++CONFIG_BT_ATH3K=m + CONFIG_CFG80211=m + CONFIG_LIB80211=m + CONFIG_LIB80211_DEBUG=y + CONFIG_MAC80211=m +-CONFIG_MAC80211_LEDS=y ++CONFIG_WIMAX=m + CONFIG_RFKILL=m +-CONFIG_RFKILL_INPUT=y ++CONFIG_CAIF=m + CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" ++CONFIG_DEVTMPFS=y ++CONFIG_DEVTMPFS_MOUNT=y + CONFIG_BLK_DEV_LOOP=y + CONFIG_BLK_DEV_CRYPTOLOOP=m + CONFIG_BLK_DEV_RAM=y + CONFIG_BLK_DEV_RAM_SIZE=8192 +-# CONFIG_MISC_DEVICES is not set +-CONFIG_IDE=y +-CONFIG_IDE_TASK_IOCTL=y +-# CONFIG_IDEPCI_PCIBUS_ORDER is not set +-CONFIG_BLK_DEV_AMD74XX=y +-CONFIG_SCSI=m +-CONFIG_BLK_DEV_SD=m ++CONFIG_MISC_DEVICES=y ++CONFIG_EEPROM_AT24=m ++CONFIG_EEPROM_LEGACY=m ++CONFIG_BLK_DEV_SD=y ++CONFIG_CHR_DEV_ST=m ++CONFIG_CHR_DEV_OSST=m ++CONFIG_BLK_DEV_SR=m ++CONFIG_BLK_DEV_SR_VENDOR=y + CONFIG_CHR_DEV_SG=m ++CONFIG_CHR_DEV_SCH=m + CONFIG_SCSI_MULTI_LUN=y +-# CONFIG_SCSI_LOWLEVEL is not set ++CONFIG_SCSI_CONSTANTS=y ++CONFIG_SCSI_LOGGING=y ++CONFIG_SCSI_SCAN_ASYNC=y ++CONFIG_SCSI_FC_TGT_ATTRS=y ++CONFIG_SCSI_SAS_ATA=y ++CONFIG_SCSI_SRP_ATTRS=m ++CONFIG_SCSI_SRP_TGT_ATTRS=y ++CONFIG_ISCSI_TCP=m ++CONFIG_SCSI_CXGB3_ISCSI=m ++CONFIG_SCSI_BNX2_ISCSI=m ++CONFIG_BE2ISCSI=m ++CONFIG_BLK_DEV_3W_XXXX_RAID=m ++CONFIG_SCSI_HPSA=m ++CONFIG_SCSI_3W_9XXX=m ++CONFIG_SCSI_3W_SAS=m ++CONFIG_SCSI_ACARD=m ++CONFIG_SCSI_AACRAID=m ++CONFIG_SCSI_AIC7XXX=m ++CONFIG_AIC7XXX_RESET_DELAY_MS=15000 ++CONFIG_SCSI_AIC7XXX_OLD=m ++CONFIG_SCSI_AIC79XX=m ++CONFIG_AIC79XX_RESET_DELAY_MS=15000 ++CONFIG_SCSI_AIC94XX=m ++# CONFIG_AIC94XX_DEBUG is not set ++CONFIG_SCSI_MVSAS=m ++# CONFIG_SCSI_MVSAS_DEBUG is not set ++CONFIG_MEGARAID_SAS=m ++CONFIG_SCSI_MPT2SAS=m ++CONFIG_SCSI_HPTIOP=m ++CONFIG_FCOE=m ++CONFIG_SCSI_STEX=m ++CONFIG_SCSI_QLA_FC=m ++CONFIG_SCSI_QLA_ISCSI=m ++CONFIG_SCSI_LPFC=m ++CONFIG_SCSI_PMCRAID=m ++CONFIG_SCSI_PM8001=m ++CONFIG_SCSI_SRP=m ++CONFIG_SCSI_BFA_FC=m ++CONFIG_SCSI_DH=m ++CONFIG_SCSI_DH_RDAC=m ++CONFIG_SCSI_DH_HP_SW=m ++CONFIG_SCSI_DH_EMC=m ++CONFIG_SCSI_DH_ALUA=m ++CONFIG_SCSI_OSD_INITIATOR=m ++CONFIG_SCSI_OSD_ULD=m ++CONFIG_ATA=y ++CONFIG_SATA_AHCI=m ++CONFIG_SATA_INIC162X=m ++CONFIG_SATA_SIL24=m ++CONFIG_PDC_ADMA=m ++CONFIG_SATA_QSTOR=m ++CONFIG_SATA_SX4=m ++CONFIG_ATA_PIIX=m ++CONFIG_SATA_MV=m ++CONFIG_SATA_NV=m ++CONFIG_SATA_PROMISE=m ++CONFIG_SATA_SIL=y ++CONFIG_SATA_SIS=m ++CONFIG_SATA_SVW=m ++CONFIG_SATA_ULI=m ++CONFIG_SATA_VIA=m ++CONFIG_SATA_VITESSE=m ++CONFIG_PATA_ARTOP=m ++CONFIG_PATA_ATP867X=m ++CONFIG_PATA_CMD64X=m ++CONFIG_PATA_CS5536=y ++CONFIG_PATA_IT821X=m ++CONFIG_PATA_JMICRON=m ++CONFIG_PATA_MARVELL=m ++CONFIG_PATA_RDC=m ++CONFIG_PATA_SCH=m ++CONFIG_PATA_TOSHIBA=m ++CONFIG_ATA_GENERIC=m + CONFIG_MD=y + CONFIG_BLK_DEV_MD=m + CONFIG_MD_LINEAR=m +@@ -129,7 +446,6 @@ CONFIG_MD_RAID456=m + CONFIG_MD_MULTIPATH=m + CONFIG_MD_FAULTY=m + CONFIG_BLK_DEV_DM=m +-CONFIG_DM_DEBUG=y + CONFIG_DM_CRYPT=m + CONFIG_DM_SNAPSHOT=m + CONFIG_DM_MIRROR=m +@@ -140,55 +456,192 @@ CONFIG_DM_MULTIPATH_QL=m + CONFIG_DM_MULTIPATH_ST=m + CONFIG_DM_DELAY=m + CONFIG_DM_UEVENT=y +-CONFIG_NETDEVICES=y ++CONFIG_FUSION=y ++CONFIG_FUSION_SPI=m ++CONFIG_FUSION_FC=m ++CONFIG_FUSION_SAS=m ++CONFIG_FUSION_MAX_SGE=40 ++CONFIG_FUSION_CTL=m + CONFIG_DUMMY=m ++CONFIG_BONDING=m ++CONFIG_MACVLAN=m + CONFIG_TUN=m + CONFIG_VETH=m ++CONFIG_MII=y + CONFIG_NET_ETHERNET=y + CONFIG_NET_PCI=y +-CONFIG_8139TOO=y +-# CONFIG_8139TOO_PIO is not set +-CONFIG_R8169=y +-CONFIG_R8169_VLAN=y +-# CONFIG_NETDEV_10000 is not set +-CONFIG_USB_USBNET=m ++CONFIG_8139TOO=m ++CONFIG_R8169=m ++CONFIG_AT76C50X_USB=m ++CONFIG_USB_ZD1201=m ++CONFIG_USB_NET_RNDIS_WLAN=m ++CONFIG_RTL8187B=m ++CONFIG_ATH_COMMON=m ++CONFIG_AR9170_USB=m ++CONFIG_RT2X00=m ++CONFIG_RT2500USB=m ++CONFIG_RT73USB=m ++CONFIG_RT2800USB=m ++CONFIG_RT2800USB_RT35XX=y ++CONFIG_RT2800USB_UNKNOWN=y ++CONFIG_ZD1211RW=m ++CONFIG_USB_CATC=m ++CONFIG_USB_KAWETH=m ++CONFIG_USB_PEGASUS=m ++CONFIG_USB_RTL8150=m + CONFIG_USB_NET_CDC_EEM=m ++CONFIG_USB_NET_DM9601=m ++CONFIG_USB_NET_SMSC75XX=m ++CONFIG_USB_NET_SMSC95XX=m ++CONFIG_USB_NET_GL620A=m ++CONFIG_USB_NET_PLUSB=m ++CONFIG_USB_NET_MCS7830=m ++CONFIG_USB_ALI_M5632=y ++CONFIG_USB_AN2720=y ++CONFIG_USB_EPSON2888=y ++CONFIG_USB_KC2190=y ++CONFIG_USB_HSO=m ++CONFIG_USB_NET_INT51X1=m ++CONFIG_USB_IPHETH=m ++CONFIG_USB_SIERRA_NET=m ++CONFIG_WAN=y ++CONFIG_LANMEDIA=m ++CONFIG_HDLC=m ++CONFIG_HDLC_RAW=m ++CONFIG_HDLC_RAW_ETH=m ++CONFIG_HDLC_CISCO=m ++CONFIG_HDLC_FR=m ++CONFIG_HDLC_PPP=m ++CONFIG_PCI200SYN=m ++CONFIG_WANXL=m ++CONFIG_PC300TOO=m ++CONFIG_N2=m ++CONFIG_C101=m ++CONFIG_FARSYNC=m ++CONFIG_DSCC4=m ++CONFIG_DLCI=m ++CONFIG_SDLA=m ++CONFIG_ATM_DUMMY=m ++CONFIG_ATM_TCP=m ++CONFIG_ATM_LANAI=m ++CONFIG_ATM_ENI=m ++CONFIG_ATM_ENI_DEBUG=y ++CONFIG_CAIF_TTY=m ++CONFIG_CAIF_SPI_SLAVE=m ++CONFIG_PPP=m ++CONFIG_PPP_ASYNC=m ++CONFIG_PPP_SYNC_TTY=m ++CONFIG_PPP_DEFLATE=m ++CONFIG_PPP_BSDCOMP=m ++CONFIG_PPP_MPPE=m ++CONFIG_PPPOE=m ++CONFIG_PPPOATM=m ++CONFIG_PPPOL2TP=m ++CONFIG_SLIP=m ++CONFIG_SLIP_SMART=y ++CONFIG_SLIP_MODE_SLIP6=y ++CONFIG_NET_FC=y + CONFIG_NETCONSOLE=m +-CONFIG_NETCONSOLE_DYNAMIC=y +-CONFIG_INPUT_POLLDEV=m ++CONFIG_NETPOLL_TRAP=y ++CONFIG_VMXNET3=m ++CONFIG_PHONE=m ++CONFIG_PHONE_IXJ=m + CONFIG_INPUT_EVDEV=y +-# CONFIG_MOUSE_PS2_ALPS is not set +-# CONFIG_MOUSE_PS2_LOGIPS2PP is not set +-# CONFIG_MOUSE_PS2_TRACKPOINT is not set ++CONFIG_KEYBOARD_LKKBD=m ++CONFIG_KEYBOARD_NEWTON=m ++CONFIG_KEYBOARD_OPENCORES=m ++CONFIG_KEYBOARD_STOWAWAY=m ++CONFIG_KEYBOARD_SUNKBD=m ++CONFIG_KEYBOARD_XTKBD=m + CONFIG_MOUSE_APPLETOUCH=m +-# CONFIG_SERIO_SERPORT is not set +-CONFIG_SERIAL_NONSTANDARD=y ++CONFIG_MOUSE_BCM5974=m ++CONFIG_INPUT_TABLET=y ++CONFIG_TABLET_USB_ACECAD=m ++CONFIG_TABLET_USB_AIPTEK=m ++CONFIG_TABLET_USB_GTCO=m ++CONFIG_TABLET_USB_KBTAB=m ++CONFIG_TABLET_USB_WACOM=m ++CONFIG_INPUT_TOUCHSCREEN=y ++CONFIG_TOUCHSCREEN_AD7879=m ++CONFIG_TOUCHSCREEN_DYNAPRO=m ++CONFIG_TOUCHSCREEN_HAMPSHIRE=m ++CONFIG_TOUCHSCREEN_FUJITSU=m ++CONFIG_TOUCHSCREEN_GUNZE=m ++CONFIG_TOUCHSCREEN_ELO=m ++CONFIG_TOUCHSCREEN_WACOM_W8001=m ++CONFIG_TOUCHSCREEN_MTOUCH=m ++CONFIG_TOUCHSCREEN_INEXIO=m ++CONFIG_TOUCHSCREEN_MK712=m ++CONFIG_TOUCHSCREEN_HTCPEN=m ++CONFIG_TOUCHSCREEN_PENMOUNT=m ++CONFIG_TOUCHSCREEN_TOUCHRIGHT=m ++CONFIG_TOUCHSCREEN_TOUCHWIN=m ++CONFIG_TOUCHSCREEN_WM97XX=m ++CONFIG_TOUCHSCREEN_USB_COMPOSITE=m ++CONFIG_TOUCHSCREEN_TOUCHIT213=m ++CONFIG_INPUT_MISC=y ++CONFIG_INPUT_AD714X=m ++CONFIG_INPUT_ATI_REMOTE=m ++CONFIG_INPUT_ATI_REMOTE2=m ++CONFIG_INPUT_KEYSPAN_REMOTE=m ++CONFIG_INPUT_YEALINK=m ++CONFIG_INPUT_CM109=m ++CONFIG_INPUT_ADXL34X=m ++CONFIG_LEGACY_PTY_COUNT=16 ++CONFIG_NOZOMI=m ++CONFIG_N_GSM=m + CONFIG_SERIAL_8250=m +-# CONFIG_SERIAL_8250_PCI is not set + CONFIG_SERIAL_8250_NR_UARTS=16 + CONFIG_SERIAL_8250_EXTENDED=y + CONFIG_SERIAL_8250_MANY_PORTS=y + CONFIG_SERIAL_8250_FOURPORT=y +-CONFIG_LEGACY_PTY_COUNT=16 + CONFIG_HW_RANDOM=y + CONFIG_RTC=y ++CONFIG_I2C=m ++CONFIG_I2C_CHARDEV=m ++CONFIG_I2C_MUX=m ++CONFIG_I2C_MUX_PCA954x=m ++CONFIG_I2C_OCORES=m ++CONFIG_I2C_PARPORT_LIGHT=m ++CONFIG_I2C_TINY_USB=m ++CONFIG_SCx200_ACB=m ++CONFIG_SPI=y ++CONFIG_W1=m ++CONFIG_W1_MASTER_DS2490=m ++CONFIG_W1_SLAVE_THERM=m ++CONFIG_W1_SLAVE_SMEM=m ++CONFIG_W1_SLAVE_DS2431=m ++CONFIG_W1_SLAVE_DS2433=m ++CONFIG_W1_SLAVE_DS2433_CRC=y ++CONFIG_W1_SLAVE_DS2760=m ++CONFIG_W1_SLAVE_BQ27000=m + CONFIG_THERMAL=y ++CONFIG_WATCHDOG=y ++CONFIG_SOFT_WATCHDOG=m ++CONFIG_USBPCWATCHDOG=m + CONFIG_MEDIA_SUPPORT=m + CONFIG_VIDEO_DEV=m +-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y ++CONFIG_DVB_CORE=m + CONFIG_VIDEO_VIVI=m + CONFIG_USB_VIDEO_CLASS=m + CONFIG_USB_M5602=m + CONFIG_USB_STV06XX=m ++CONFIG_USB_GL860=m ++CONFIG_USB_GSPCA_BENQ=m + CONFIG_USB_GSPCA_CONEX=m ++CONFIG_USB_GSPCA_CPIA1=m + CONFIG_USB_GSPCA_ETOMS=m + CONFIG_USB_GSPCA_FINEPIX=m ++CONFIG_USB_GSPCA_JEILINJ=m + CONFIG_USB_GSPCA_MARS=m + CONFIG_USB_GSPCA_MR97310A=m + CONFIG_USB_GSPCA_OV519=m + CONFIG_USB_GSPCA_OV534=m ++CONFIG_USB_GSPCA_OV534_9=m + CONFIG_USB_GSPCA_PAC207=m ++CONFIG_USB_GSPCA_PAC7302=m + CONFIG_USB_GSPCA_PAC7311=m ++CONFIG_USB_GSPCA_SN9C2028=m + CONFIG_USB_GSPCA_SN9C20X=m + CONFIG_USB_GSPCA_SONIXB=m + CONFIG_USB_GSPCA_SONIXJ=m +@@ -198,30 +651,72 @@ CONFIG_USB_GSPCA_SPCA505=m + CONFIG_USB_GSPCA_SPCA506=m + CONFIG_USB_GSPCA_SPCA508=m + CONFIG_USB_GSPCA_SPCA561=m ++CONFIG_USB_GSPCA_SPCA1528=m + CONFIG_USB_GSPCA_SQ905=m + CONFIG_USB_GSPCA_SQ905C=m ++CONFIG_USB_GSPCA_SQ930X=m + CONFIG_USB_GSPCA_STK014=m ++CONFIG_USB_GSPCA_STV0680=m + CONFIG_USB_GSPCA_SUNPLUS=m + CONFIG_USB_GSPCA_T613=m + CONFIG_USB_GSPCA_TV8532=m + CONFIG_USB_GSPCA_VC032X=m + CONFIG_USB_GSPCA_ZC3XX=m ++CONFIG_VIDEO_PVRUSB2=m ++CONFIG_VIDEO_PVRUSB2_DEBUGIFC=y ++CONFIG_VIDEO_HDPVR=m ++CONFIG_VIDEO_EM28XX=m ++CONFIG_VIDEO_EM28XX_ALSA=m ++CONFIG_VIDEO_CX231XX=m ++CONFIG_VIDEO_CX231XX_ALSA=m ++CONFIG_VIDEO_USBVISION=m + CONFIG_USB_ET61X251=m + CONFIG_USB_SN9C102=m ++CONFIG_USB_PWC=m + CONFIG_USB_ZR364XX=m + CONFIG_USB_STKWEBCAM=m + CONFIG_USB_S2255=m +-# CONFIG_RADIO_ADAPTERS is not set ++CONFIG_USB_DSBR=m ++CONFIG_USB_MR800=m ++CONFIG_DVB_USB=m ++CONFIG_DVB_USB_A800=m ++CONFIG_DVB_USB_DIBUSB_MB=m ++CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y ++CONFIG_DVB_USB_DIBUSB_MC=m ++CONFIG_DVB_USB_DIB0700=m ++CONFIG_DVB_USB_UMT_010=m ++CONFIG_DVB_USB_CXUSB=m ++CONFIG_DVB_USB_M920X=m ++CONFIG_DVB_USB_GL861=m ++CONFIG_DVB_USB_AU6610=m ++CONFIG_DVB_USB_DIGITV=m ++CONFIG_DVB_USB_VP7045=m ++CONFIG_DVB_USB_VP702X=m ++CONFIG_DVB_USB_GP8PSK=m ++CONFIG_DVB_USB_NOVA_T_USB2=m ++CONFIG_DVB_USB_TTUSB2=m ++CONFIG_DVB_USB_DTT200U=m ++CONFIG_DVB_USB_OPERA1=m ++CONFIG_DVB_USB_AF9005=m ++CONFIG_DVB_USB_DW2102=m ++CONFIG_DVB_USB_CINERGY_T2=m ++CONFIG_DVB_USB_ANYSEE=m ++CONFIG_DVB_USB_DTV5100=m ++CONFIG_DVB_USB_AF9015=m ++CONFIG_DVB_USB_CE6230=m ++CONFIG_DVB_USB_FRIIO=m ++CONFIG_DVB_USB_EC168=m ++CONFIG_DVB_USB_AZ6027=m ++CONFIG_DVB_TTUSB_BUDGET=m ++CONFIG_DVB_TTUSB_DEC=m + CONFIG_VIDEO_OUTPUT_CONTROL=y + CONFIG_FB=y + CONFIG_FIRMWARE_EDID=y +-CONFIG_FB_MODE_HELPERS=y + CONFIG_FB_TILEBLITTING=y + CONFIG_FB_SIS=y + CONFIG_FB_SIS_300=y + CONFIG_FB_SIS_315=y +-CONFIG_BACKLIGHT_LCD_SUPPORT=y +-# CONFIG_LCD_CLASS_DEVICE is not set ++CONFIG_FB_UDL=m + CONFIG_BACKLIGHT_CLASS_DEVICE=y + CONFIG_BACKLIGHT_GENERIC=m + # CONFIG_VGA_CONSOLE is not set +@@ -238,8 +733,6 @@ CONFIG_FONT_SUN8x16=y + CONFIG_FONT_SUN12x22=y + CONFIG_FONT_10x18=y + CONFIG_LOGO=y +-# CONFIG_LOGO_LINUX_MONO is not set +-# CONFIG_LOGO_LINUX_VGA16 is not set + CONFIG_SOUND=m + CONFIG_SND=m + CONFIG_SND_SEQUENCER=m +@@ -255,30 +748,18 @@ CONFIG_SND_MPU401=m + CONFIG_SND_AC97_POWER_SAVE=y + CONFIG_SND_AC97_POWER_SAVE_DEFAULT=10 + CONFIG_SND_CS5535AUDIO=m +-# CONFIG_SND_MIPS is not set + CONFIG_SND_USB_AUDIO=m + CONFIG_SND_USB_CAIAQ=m + CONFIG_SND_USB_CAIAQ_INPUT=y + CONFIG_HIDRAW=y ++CONFIG_USB_HID=m + CONFIG_USB_HIDDEV=y +-CONFIG_HID_A4TECH=m +-CONFIG_HID_APPLE=m +-CONFIG_HID_BELKIN=m +-CONFIG_HID_CHERRY=m +-CONFIG_HID_CHICONY=m +-CONFIG_HID_CYPRESS=m + CONFIG_HID_DRAGONRISE=m + CONFIG_DRAGONRISE_FF=y +-CONFIG_HID_EZKEY=m +-CONFIG_HID_KYE=m + CONFIG_HID_GYRATION=m + CONFIG_HID_TWINHAN=m +-CONFIG_HID_KENSINGTON=m +-CONFIG_HID_LOGITECH=m + CONFIG_LOGITECH_FF=y + CONFIG_LOGIRUMBLEPAD2_FF=y +-CONFIG_HID_MICROSOFT=m +-CONFIG_HID_MONTEREY=m + CONFIG_HID_NTRIG=m + CONFIG_HID_PANTHERLORD=m + CONFIG_PANTHERLORD_FF=y +@@ -293,18 +774,14 @@ CONFIG_SMARTJOYPLUS_FF=y + CONFIG_HID_TOPSEED=m + CONFIG_HID_THRUSTMASTER=m + CONFIG_THRUSTMASTER_FF=y +-CONFIG_HID_WACOM=m + CONFIG_HID_ZEROPLUS=m + CONFIG_ZEROPLUS_FF=y + CONFIG_USB=y +-CONFIG_USB_DEVICEFS=y +-# CONFIG_USB_DEVICE_CLASS is not set + CONFIG_USB_DYNAMIC_MINORS=y + CONFIG_USB_OTG_WHITELIST=y + CONFIG_USB_MON=y + CONFIG_USB_EHCI_HCD=y + CONFIG_USB_EHCI_ROOT_HUB_TT=y +-# CONFIG_USB_EHCI_TT_NEWSCHED is not set + CONFIG_USB_OHCI_HCD=y + CONFIG_USB_UHCI_HCD=m + CONFIG_USB_WHCI_HCD=m +@@ -312,7 +789,7 @@ CONFIG_USB_HWA_HCD=m + CONFIG_USB_ACM=m + CONFIG_USB_PRINTER=m + CONFIG_USB_WDM=m +-CONFIG_USB_STORAGE=m ++CONFIG_USB_STORAGE=y + CONFIG_USB_STORAGE_DATAFAB=m + CONFIG_USB_STORAGE_FREECOM=m + CONFIG_USB_STORAGE_ISD200=m +@@ -321,22 +798,123 @@ CONFIG_USB_STORAGE_SDDR09=m + CONFIG_USB_STORAGE_SDDR55=m + CONFIG_USB_STORAGE_JUMPSHOT=m + CONFIG_USB_STORAGE_ALAUDA=m ++CONFIG_USB_STORAGE_ONETOUCH=m ++CONFIG_USB_STORAGE_KARMA=m ++CONFIG_USB_STORAGE_CYPRESS_ATACB=m + CONFIG_USB_LIBUSUAL=y ++CONFIG_USB_MDC800=m ++CONFIG_USB_MICROTEK=m + CONFIG_USB_SERIAL=m + CONFIG_USB_SERIAL_GENERIC=y ++CONFIG_USB_SERIAL_AIRCABLE=m ++CONFIG_USB_SERIAL_ARK3116=m ++CONFIG_USB_SERIAL_BELKIN=m ++CONFIG_USB_SERIAL_CH341=m ++CONFIG_USB_SERIAL_WHITEHEAT=m ++CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m ++CONFIG_USB_SERIAL_CP210X=m ++CONFIG_USB_SERIAL_CYPRESS_M8=m ++CONFIG_USB_SERIAL_EMPEG=m ++CONFIG_USB_SERIAL_FTDI_SIO=m ++CONFIG_USB_SERIAL_FUNSOFT=m ++CONFIG_USB_SERIAL_VISOR=m ++CONFIG_USB_SERIAL_IPAQ=m ++CONFIG_USB_SERIAL_IR=m ++CONFIG_USB_SERIAL_EDGEPORT=m ++CONFIG_USB_SERIAL_EDGEPORT_TI=m ++CONFIG_USB_SERIAL_GARMIN=m ++CONFIG_USB_SERIAL_IPW=m ++CONFIG_USB_SERIAL_IUU=m ++CONFIG_USB_SERIAL_KEYSPAN_PDA=m ++CONFIG_USB_SERIAL_KEYSPAN=m ++CONFIG_USB_SERIAL_KEYSPAN_MPR=y ++CONFIG_USB_SERIAL_KEYSPAN_USA28=y ++CONFIG_USB_SERIAL_KEYSPAN_USA28X=y ++CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y ++CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y ++CONFIG_USB_SERIAL_KEYSPAN_USA19=y ++CONFIG_USB_SERIAL_KEYSPAN_USA18X=y ++CONFIG_USB_SERIAL_KEYSPAN_USA19W=y ++CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y ++CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y ++CONFIG_USB_SERIAL_KEYSPAN_USA49W=y ++CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y ++CONFIG_USB_SERIAL_KLSI=m ++CONFIG_USB_SERIAL_KOBIL_SCT=m ++CONFIG_USB_SERIAL_MCT_U232=m ++CONFIG_USB_SERIAL_MOS7720=m ++CONFIG_USB_SERIAL_MOS7840=m ++CONFIG_USB_SERIAL_MOTOROLA=m ++CONFIG_USB_SERIAL_NAVMAN=m ++CONFIG_USB_SERIAL_PL2303=m ++CONFIG_USB_SERIAL_OTI6858=m ++CONFIG_USB_SERIAL_QCAUX=m ++CONFIG_USB_SERIAL_QUALCOMM=m ++CONFIG_USB_SERIAL_SPCP8X5=m ++CONFIG_USB_SERIAL_HP4X=m ++CONFIG_USB_SERIAL_SAFE=m ++CONFIG_USB_SERIAL_SAFE_PADDED=y ++CONFIG_USB_SERIAL_SIEMENS_MPI=m ++CONFIG_USB_SERIAL_SIERRAWIRELESS=m ++CONFIG_USB_SERIAL_SYMBOL=m ++CONFIG_USB_SERIAL_TI=m ++CONFIG_USB_SERIAL_CYBERJACK=m ++CONFIG_USB_SERIAL_XIRCOM=m ++CONFIG_USB_SERIAL_OPTION=m ++CONFIG_USB_SERIAL_OMNINET=m ++CONFIG_USB_SERIAL_OPTICON=m ++CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m ++CONFIG_USB_SERIAL_ZIO=m ++CONFIG_USB_SERIAL_SSU100=m ++CONFIG_USB_EMI62=m ++CONFIG_USB_EMI26=m ++CONFIG_USB_ADUTUX=m ++CONFIG_USB_SEVSEG=m ++CONFIG_USB_RIO500=m ++CONFIG_USB_LEGOTOWER=m ++CONFIG_USB_LCD=m + CONFIG_USB_LED=m ++CONFIG_USB_CYPRESS_CY7C63=m ++CONFIG_USB_CYTHERM=m ++CONFIG_USB_IDMOUSE=m ++CONFIG_USB_FTDI_ELAN=m ++CONFIG_USB_APPLEDISPLAY=m ++CONFIG_USB_SISUSBVGA=m ++CONFIG_USB_LD=m ++CONFIG_USB_TRANCEVIBRATOR=m ++CONFIG_USB_IOWARRIOR=m ++CONFIG_USB_ISIGHTFW=m ++CONFIG_USB_ATM=m ++CONFIG_USB_SPEEDTOUCH=m ++CONFIG_USB_CXACRU=m ++CONFIG_USB_UEAGLEATM=m ++CONFIG_USB_XUSBATM=m + CONFIG_USB_GADGET=m + CONFIG_USB_GADGET_M66592=y ++CONFIG_USB_ZERO=m ++CONFIG_USB_AUDIO=m ++CONFIG_USB_ETH=m ++CONFIG_USB_GADGETFS=m ++CONFIG_USB_FUNCTIONFS=m ++CONFIG_USB_MASS_STORAGE=m ++CONFIG_USB_G_SERIAL=m ++CONFIG_USB_MIDI_GADGET=m ++CONFIG_USB_G_PRINTER=m ++CONFIG_USB_CDC_COMPOSITE=m ++CONFIG_USB_G_MULTI=m ++CONFIG_USB_G_WEBCAM=m ++CONFIG_NOP_USB_XCEIV=m + CONFIG_MMC=m + CONFIG_LEDS_CLASS=y + CONFIG_STAGING=y + # CONFIG_STAGING_EXCLUDE_BUILD is not set ++CONFIG_PRISM2_USB=m ++CONFIG_R8187SE=m ++CONFIG_RTL8192E=m ++CONFIG_USB_SERIAL_QUATECH2=m ++CONFIG_USB_SERIAL_QUATECH_USB2=m + CONFIG_FB_SM7XX=y +-CONFIG_EXT2_FS=m +-CONFIG_EXT3_FS=y +-# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set +-CONFIG_EXT3_FS_POSIX_ACL=y +-CONFIG_EXT3_FS_SECURITY=y ++CONFIG_EASYCAP=m + CONFIG_EXT4_FS=y + CONFIG_REISERFS_FS=m + CONFIG_REISERFS_PROC_INFO=y +@@ -346,16 +924,17 @@ CONFIG_JFS_POSIX_ACL=y + CONFIG_XFS_FS=m + CONFIG_XFS_QUOTA=y + CONFIG_XFS_POSIX_ACL=y +-CONFIG_BTRFS_FS=m +-CONFIG_QUOTA=y +-CONFIG_QFMT_V2=m +-CONFIG_AUTOFS_FS=m ++CONFIG_GFS2_FS=m ++CONFIG_BTRFS_FS=y + CONFIG_AUTOFS4_FS=m ++CONFIG_FUSE_FS=m ++CONFIG_CUSE=m + CONFIG_FSCACHE=m + CONFIG_CACHEFILES=m + CONFIG_ISO9660_FS=m + CONFIG_JOLIET=y + CONFIG_ZISOFS=y ++CONFIG_UDF_FS=m + CONFIG_MSDOS_FS=m + CONFIG_VFAT_FS=m + CONFIG_NTFS_FS=m +@@ -366,6 +945,7 @@ CONFIG_CRAMFS=m + CONFIG_SQUASHFS=m + CONFIG_SQUASHFS_EMBEDDED=y + CONFIG_ROMFS_FS=m ++CONFIG_UFS_FS=m + CONFIG_NFS_FS=m + CONFIG_NFS_V3=y + CONFIG_NFS_V3_ACL=y +@@ -411,15 +991,15 @@ CONFIG_NLS_ISO8859_15=m + CONFIG_NLS_KOI8_R=m + CONFIG_NLS_KOI8_U=m + CONFIG_NLS_UTF8=y +-CONFIG_PRINTK_TIME=y + CONFIG_FRAME_WARN=1024 ++CONFIG_MAGIC_SYSRQ=y + CONFIG_STRIP_ASM_SYMS=y + CONFIG_DEBUG_FS=y +-# CONFIG_RCU_CPU_STALL_DETECTOR is not set ++CONFIG_DEBUG_KERNEL=y ++CONFIG_TIMER_STATS=y + CONFIG_SYSCTL_SYSCALL_CHECK=y + CONFIG_KEYS=y + CONFIG_KEYS_DEBUG_PROC_KEYS=y +-CONFIG_CRYPTO_FIPS=y + CONFIG_CRYPTO_NULL=m + CONFIG_CRYPTO_CRYPTD=m + CONFIG_CRYPTO_AUTHENC=m +@@ -429,15 +1009,12 @@ CONFIG_CRYPTO_GCM=m + CONFIG_CRYPTO_LRW=m + CONFIG_CRYPTO_PCBC=m + CONFIG_CRYPTO_XTS=m +-CONFIG_CRYPTO_HMAC=m + CONFIG_CRYPTO_XCBC=m +-CONFIG_CRYPTO_MD4=m + CONFIG_CRYPTO_MICHAEL_MIC=m + CONFIG_CRYPTO_RMD128=m + CONFIG_CRYPTO_RMD160=m + CONFIG_CRYPTO_RMD256=m + CONFIG_CRYPTO_RMD320=m +-CONFIG_CRYPTO_SHA1=m + CONFIG_CRYPTO_SHA256=m + CONFIG_CRYPTO_SHA512=m + CONFIG_CRYPTO_TGR192=m +@@ -457,4 +1034,3 @@ CONFIG_CRYPTO_TWOFISH=m + CONFIG_CRYPTO_DEFLATE=m + CONFIG_CRYPTO_ZLIB=m + CONFIG_CRYPTO_LZO=m +-CONFIG_CRC_T10DIF=y +diff --git a/arch/mips/configs/lemote2f_minimal_defconfig b/arch/mips/configs/lemote2f_minimal_defconfig +new file mode 100644 +index 0000000..82ad0bd4 +--- /dev/null ++++ b/arch/mips/configs/lemote2f_minimal_defconfig +@@ -0,0 +1,122 @@ ++CONFIG_MACH_LOONGSON=y ++CONFIG_LEMOTE_MACH2F=y ++CONFIG_64BIT=y ++CONFIG_NO_HZ=y ++CONFIG_HIGH_RES_TIMERS=y ++CONFIG_PREEMPT=y ++CONFIG_EXPERIMENTAL=y ++# CONFIG_LOCALVERSION_AUTO is not set ++CONFIG_KERNEL_LZMA=y ++CONFIG_SYSVIPC=y ++CONFIG_POSIX_MQUEUE=y ++CONFIG_BSD_PROCESS_ACCT=y ++CONFIG_BSD_PROCESS_ACCT_V3=y ++CONFIG_IKCONFIG=y ++CONFIG_IKCONFIG_PROC=y ++CONFIG_LOG_BUF_SHIFT=15 ++CONFIG_BLK_DEV_INITRD=y ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set ++# CONFIG_BLK_DEV_BSG is not set ++# CONFIG_IOSCHED_DEADLINE is not set ++# CONFIG_IOSCHED_CFQ is not set ++CONFIG_PCI=y ++CONFIG_MIPS32_COMPAT=y ++CONFIG_MIPS32_O32=y ++CONFIG_MIPS32_N32=y ++CONFIG_NET=y ++CONFIG_PACKET=y ++CONFIG_UNIX=y ++CONFIG_INET=y ++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set ++# CONFIG_INET_XFRM_MODE_TUNNEL is not set ++# CONFIG_INET_XFRM_MODE_BEET is not set ++# CONFIG_INET_LRO is not set ++# CONFIG_INET_DIAG is not set ++# CONFIG_IPV6 is not set ++# CONFIG_WIRELESS is not set ++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" ++CONFIG_DEVTMPFS=y ++CONFIG_DEVTMPFS_MOUNT=y ++CONFIG_BLK_DEV_LOOP=y ++CONFIG_BLK_DEV_RAM=y ++CONFIG_BLK_DEV_RAM_SIZE=8192 ++# CONFIG_MISC_DEVICES is not set ++# CONFIG_SCSI_PROC_FS is not set ++CONFIG_BLK_DEV_SD=y ++# CONFIG_SCSI_LOWLEVEL is not set ++CONFIG_ATA=y ++# CONFIG_SATA_PMP is not set ++CONFIG_PATA_AMD=y ++CONFIG_NETDEVICES=y ++CONFIG_NET_ETHERNET=y ++CONFIG_NET_PCI=y ++CONFIG_8139TOO=y ++CONFIG_R8169=y ++# CONFIG_NETDEV_10000 is not set ++# CONFIG_WLAN is not set ++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set ++CONFIG_INPUT_EVDEV=y ++# CONFIG_SERIO_SERPORT is not set ++# CONFIG_DEVKMEM is not set ++CONFIG_SERIAL_8250=y ++CONFIG_SERIAL_8250_CONSOLE=y ++CONFIG_LEGACY_PTY_COUNT=16 ++# CONFIG_HW_RANDOM is not set ++# CONFIG_HWMON is not set ++# CONFIG_MFD_SUPPORT is not set ++CONFIG_FB=y ++CONFIG_FB_SIS=y ++CONFIG_FB_SIS_300=y ++CONFIG_FB_SIS_315=y ++# CONFIG_VGA_CONSOLE is not set ++CONFIG_FRAMEBUFFER_CONSOLE=y ++CONFIG_HIDRAW=y ++CONFIG_USB_HIDDEV=y ++CONFIG_HID_DRAGONRISE=y ++CONFIG_DRAGONRISE_FF=y ++CONFIG_HID_GYRATION=y ++CONFIG_HID_TWINHAN=y ++CONFIG_LOGITECH_FF=y ++CONFIG_LOGIRUMBLEPAD2_FF=y ++CONFIG_HID_NTRIG=y ++CONFIG_HID_PANTHERLORD=y ++CONFIG_PANTHERLORD_FF=y ++CONFIG_HID_PETALYNX=y ++CONFIG_HID_SAMSUNG=y ++CONFIG_HID_SONY=y ++CONFIG_HID_SUNPLUS=y ++CONFIG_HID_GREENASIA=y ++CONFIG_GREENASIA_FF=y ++CONFIG_HID_SMARTJOYPLUS=y ++CONFIG_SMARTJOYPLUS_FF=y ++CONFIG_HID_TOPSEED=y ++CONFIG_HID_THRUSTMASTER=y ++CONFIG_THRUSTMASTER_FF=y ++CONFIG_HID_ZEROPLUS=y ++CONFIG_ZEROPLUS_FF=y ++CONFIG_USB=y ++# CONFIG_USB_DEVICE_CLASS is not set ++CONFIG_USB_DYNAMIC_MINORS=y ++CONFIG_USB_MON=y ++CONFIG_USB_EHCI_HCD=y ++CONFIG_USB_EHCI_ROOT_HUB_TT=y ++# CONFIG_USB_EHCI_TT_NEWSCHED is not set ++CONFIG_USB_OHCI_HCD=y ++CONFIG_USB_STORAGE=y ++CONFIG_USB_LIBUSUAL=y ++CONFIG_RTC_CLASS=y ++CONFIG_RTC_DRV_CMOS=y ++CONFIG_STAGING=y ++# CONFIG_STAGING_EXCLUDE_BUILD is not set ++CONFIG_FB_SM7XX=y ++# CONFIG_MIPS_PLATFORM_DEVICES is not set ++CONFIG_EXT4_FS=y ++CONFIG_TMPFS=y ++# CONFIG_MISC_FILESYSTEMS is not set ++# CONFIG_NETWORK_FILESYSTEMS is not set ++CONFIG_NLS_DEFAULT="utf8" ++CONFIG_NLS_ASCII=y ++CONFIG_NLS_UTF8=y ++CONFIG_FRAME_WARN=1024 ++CONFIG_STRIP_ASM_SYMS=y ++# CONFIG_RCU_CPU_STALL_DETECTOR is not set +diff --git a/arch/mips/configs/lemote2f_small_defconfig b/arch/mips/configs/lemote2f_small_defconfig +new file mode 100644 +index 0000000..45a833e +--- /dev/null ++++ b/arch/mips/configs/lemote2f_small_defconfig +@@ -0,0 +1,151 @@ ++CONFIG_MACH_LOONGSON=y ++CONFIG_LEMOTE_MACH2F=y ++CONFIG_64BIT=y ++CONFIG_NO_HZ=y ++CONFIG_HIGH_RES_TIMERS=y ++CONFIG_PREEMPT=y ++CONFIG_EXPERIMENTAL=y ++# CONFIG_LOCALVERSION_AUTO is not set ++CONFIG_KERNEL_LZMA=y ++CONFIG_SYSVIPC=y ++CONFIG_POSIX_MQUEUE=y ++CONFIG_BSD_PROCESS_ACCT=y ++CONFIG_BSD_PROCESS_ACCT_V3=y ++CONFIG_IKCONFIG=y ++CONFIG_IKCONFIG_PROC=y ++CONFIG_LOG_BUF_SHIFT=15 ++# CONFIG_UTS_NS is not set ++# CONFIG_IPC_NS is not set ++# CONFIG_USER_NS is not set ++# CONFIG_PID_NS is not set ++# CONFIG_NET_NS is not set ++CONFIG_BLK_DEV_INITRD=y ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set ++CONFIG_MODULES=y ++CONFIG_MODULE_UNLOAD=y ++# CONFIG_BLK_DEV_BSG is not set ++# CONFIG_IOSCHED_DEADLINE is not set ++# CONFIG_IOSCHED_CFQ is not set ++CONFIG_PCI=y ++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set ++CONFIG_MIPS32_COMPAT=y ++CONFIG_MIPS32_O32=y ++CONFIG_MIPS32_N32=y ++CONFIG_PM=y ++CONFIG_HIBERNATION=y ++CONFIG_PM_STD_PARTITION="/dev/sda3" ++CONFIG_PM_RUNTIME=y ++CONFIG_CPU_FREQ=y ++CONFIG_CPU_FREQ_STAT_DETAILS=y ++CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE=y ++CONFIG_CPU_FREQ_GOV_POWERSAVE=y ++CONFIG_CPU_FREQ_GOV_USERSPACE=y ++CONFIG_CPU_FREQ_GOV_ONDEMAND=y ++CONFIG_LOONGSON2_CPUFREQ=m ++CONFIG_NET=y ++CONFIG_PACKET=y ++CONFIG_UNIX=y ++CONFIG_INET=y ++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set ++# CONFIG_INET_XFRM_MODE_TUNNEL is not set ++# CONFIG_INET_XFRM_MODE_BEET is not set ++# CONFIG_INET_LRO is not set ++# CONFIG_INET_DIAG is not set ++# CONFIG_IPV6 is not set ++CONFIG_CFG80211=y ++# CONFIG_CFG80211_DEFAULT_PS is not set ++# CONFIG_CFG80211_WEXT is not set ++CONFIG_LIB80211=y ++CONFIG_MAC80211=y ++CONFIG_RFKILL=y ++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" ++CONFIG_DEVTMPFS=y ++CONFIG_DEVTMPFS_MOUNT=y ++CONFIG_BLK_DEV_LOOP=y ++CONFIG_BLK_DEV_RAM=y ++CONFIG_BLK_DEV_RAM_SIZE=8192 ++# CONFIG_SCSI_PROC_FS is not set ++CONFIG_BLK_DEV_SD=y ++# CONFIG_SCSI_LOWLEVEL is not set ++CONFIG_ATA=y ++# CONFIG_SATA_PMP is not set ++CONFIG_PATA_AMD=y ++CONFIG_NETDEVICES=y ++CONFIG_NET_ETHERNET=y ++CONFIG_NET_PCI=y ++CONFIG_8139TOO=y ++CONFIG_R8169=y ++# CONFIG_NETDEV_10000 is not set ++CONFIG_RTL8187B=m ++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set ++CONFIG_INPUT_EVDEV=y ++# CONFIG_SERIO_SERPORT is not set ++# CONFIG_DEVKMEM is not set ++CONFIG_SERIAL_8250=y ++CONFIG_SERIAL_8250_CONSOLE=y ++CONFIG_LEGACY_PTY_COUNT=16 ++# CONFIG_HW_RANDOM is not set ++CONFIG_HWMON=m ++# CONFIG_MFD_SUPPORT is not set ++CONFIG_FB=y ++CONFIG_FB_SIS=y ++CONFIG_FB_SIS_300=y ++CONFIG_FB_SIS_315=y ++CONFIG_LCD_CLASS_DEVICE=y ++CONFIG_LCD_PLATFORM=y ++CONFIG_BACKLIGHT_CLASS_DEVICE=y ++# CONFIG_BACKLIGHT_GENERIC is not set ++# CONFIG_VGA_CONSOLE is not set ++CONFIG_FRAMEBUFFER_CONSOLE=y ++CONFIG_SOUND=y ++CONFIG_SND=y ++CONFIG_SND_CS5535AUDIO=m ++CONFIG_HIDRAW=y ++CONFIG_USB_HIDDEV=y ++CONFIG_HID_DRAGONRISE=y ++CONFIG_DRAGONRISE_FF=y ++CONFIG_HID_GYRATION=y ++CONFIG_HID_TWINHAN=y ++CONFIG_LOGITECH_FF=y ++CONFIG_LOGIRUMBLEPAD2_FF=y ++CONFIG_HID_NTRIG=y ++CONFIG_HID_PANTHERLORD=y ++CONFIG_PANTHERLORD_FF=y ++CONFIG_HID_PETALYNX=y ++CONFIG_HID_SAMSUNG=y ++CONFIG_HID_SONY=y ++CONFIG_HID_SUNPLUS=y ++CONFIG_HID_GREENASIA=y ++CONFIG_GREENASIA_FF=y ++CONFIG_HID_SMARTJOYPLUS=y ++CONFIG_SMARTJOYPLUS_FF=y ++CONFIG_HID_TOPSEED=y ++CONFIG_HID_THRUSTMASTER=y ++CONFIG_THRUSTMASTER_FF=y ++CONFIG_HID_ZEROPLUS=y ++CONFIG_ZEROPLUS_FF=y ++CONFIG_USB=y ++# CONFIG_USB_DEVICE_CLASS is not set ++CONFIG_USB_DYNAMIC_MINORS=y ++CONFIG_USB_MON=y ++CONFIG_USB_EHCI_HCD=y ++CONFIG_USB_EHCI_ROOT_HUB_TT=y ++# CONFIG_USB_EHCI_TT_NEWSCHED is not set ++CONFIG_USB_OHCI_HCD=y ++CONFIG_USB_STORAGE=y ++CONFIG_USB_LIBUSUAL=y ++CONFIG_RTC_CLASS=y ++CONFIG_RTC_DRV_CMOS=y ++CONFIG_STAGING=y ++# CONFIG_STAGING_EXCLUDE_BUILD is not set ++CONFIG_FB_SM7XX=y ++CONFIG_EXT4_FS=y ++CONFIG_TMPFS=y ++# CONFIG_MISC_FILESYSTEMS is not set ++# CONFIG_NETWORK_FILESYSTEMS is not set ++CONFIG_NLS_DEFAULT="utf8" ++CONFIG_NLS_ASCII=y ++CONFIG_NLS_UTF8=y ++CONFIG_FRAME_WARN=1024 ++CONFIG_STRIP_ASM_SYMS=y ++# CONFIG_RCU_CPU_STALL_DETECTOR is not set +diff --git a/arch/mips/configs/yeeloong_tiny_defconfig b/arch/mips/configs/yeeloong_tiny_defconfig +new file mode 100644 +index 0000000..93e3e7b +--- /dev/null ++++ b/arch/mips/configs/yeeloong_tiny_defconfig +@@ -0,0 +1,74 @@ ++CONFIG_MACH_LOONGSON=y ++CONFIG_LEMOTE_MACH2F=y ++CONFIG_HZ_1000=y ++CONFIG_PREEMPT=y ++# CONFIG_LOCALVERSION_AUTO is not set ++CONFIG_KERNEL_LZMA=y ++# CONFIG_SWAP is not set ++CONFIG_TINY_RCU=y ++CONFIG_LOG_BUF_SHIFT=15 ++CONFIG_EMBEDDED=y ++# CONFIG_KALLSYMS is not set ++# CONFIG_HOTPLUG is not set ++# CONFIG_PRINTK is not set ++# CONFIG_BUG is not set ++# CONFIG_ELF_CORE is not set ++# CONFIG_PCSPKR_PLATFORM is not set ++# CONFIG_BASE_FULL is not set ++# CONFIG_FUTEX is not set ++# CONFIG_EPOLL is not set ++# CONFIG_SIGNALFD is not set ++# CONFIG_TIMERFD is not set ++# CONFIG_EVENTFD is not set ++# CONFIG_SHMEM is not set ++# CONFIG_AIO is not set ++# CONFIG_VM_EVENT_COUNTERS is not set ++# CONFIG_PCI_QUIRKS is not set ++CONFIG_SLOB=y ++# CONFIG_LBDAF is not set ++# CONFIG_BLK_DEV_BSG is not set ++# CONFIG_IOSCHED_DEADLINE is not set ++# CONFIG_IOSCHED_CFQ is not set ++CONFIG_PCI=y ++# CONFIG_FW_LOADER is not set ++# CONFIG_BLK_DEV is not set ++CONFIG_BLK_DEV_SD=y ++# CONFIG_SCSI_LOWLEVEL is not set ++CONFIG_ATA=y ++# CONFIG_ATA_VERBOSE_ERROR is not set ++# CONFIG_SATA_PMP is not set ++CONFIG_PATA_AMD=y ++# CONFIG_INPUT_MOUSEDEV is not set ++# CONFIG_INPUT_MOUSE is not set ++# CONFIG_SERIO_SERPORT is not set ++# CONFIG_CONSOLE_TRANSLATIONS is not set ++# CONFIG_DEVKMEM is not set ++# CONFIG_UNIX98_PTYS is not set ++# CONFIG_LEGACY_PTYS is not set ++# CONFIG_HW_RANDOM is not set ++# CONFIG_HWMON is not set ++# CONFIG_MFD_SUPPORT is not set ++# CONFIG_VGA_ARB is not set ++CONFIG_FB=y ++# CONFIG_VGA_CONSOLE is not set ++CONFIG_FRAMEBUFFER_CONSOLE=y ++# CONFIG_HID_SUPPORT is not set ++# CONFIG_USB_SUPPORT is not set ++CONFIG_RTC_CLASS=y ++CONFIG_RTC_DRV_CMOS=y ++CONFIG_STAGING=y ++# CONFIG_STAGING_EXCLUDE_BUILD is not set ++CONFIG_FB_SM7XX=y ++# CONFIG_MIPS_PLATFORM_DEVICES is not set ++CONFIG_EXT2_FS=y ++# CONFIG_FILE_LOCKING is not set ++# CONFIG_DNOTIFY is not set ++# CONFIG_INOTIFY_USER is not set ++# CONFIG_PROC_FS is not set ++# CONFIG_SYSFS is not set ++# CONFIG_MISC_FILESYSTEMS is not set ++# CONFIG_ENABLE_WARN_DEPRECATED is not set ++# CONFIG_ENABLE_MUST_CHECK is not set ++CONFIG_STRIP_ASM_SYMS=y ++# CONFIG_BKL is not set ++CONFIG_CRC16=y +diff --git a/arch/mips/include/asm/cpu-features.h b/arch/mips/include/asm/cpu-features.h +index e5ec8fc..bcce9b0 100644 +--- a/arch/mips/include/asm/cpu-features.h ++++ b/arch/mips/include/asm/cpu-features.h +@@ -13,6 +13,10 @@ + #include + #include + ++#ifndef current_cpu_prid ++#define current_cpu_prid() current_cpu_data.processor_id ++#endif ++ + #ifndef current_cpu_type + #define current_cpu_type() current_cpu_data.cputype + #endif +diff --git a/arch/mips/include/asm/cpu.h b/arch/mips/include/asm/cpu.h +index dd86ab2..5eb6c38 100644 +--- a/arch/mips/include/asm/cpu.h ++++ b/arch/mips/include/asm/cpu.h +@@ -37,6 +37,8 @@ + #define PRID_COMP_CAVIUM 0x0d0000 + #define PRID_COMP_INGENIC 0xd00000 + ++#define PRID_COMP_MASK 0xff0000 ++ + /* + * Assigned values for the product ID register. In order to detect a + * certain CPU type exactly eventually additional registers may need to +@@ -74,6 +76,7 @@ + #define PRID_IMP_LOONGSON2 0x6300 + + #define PRID_IMP_UNKNOWN 0xff00 ++#define PRID_IMP_MASK 0xff00 + + /* + * These are the PRID's for when 23:16 == PRID_COMP_MIPS +@@ -202,6 +205,13 @@ + #define PRID_REV_LOONGSON1B 0x0020 + #define PRID_REV_LOONGSON2E 0x0002 + #define PRID_REV_LOONGSON2F 0x0003 ++#define PRID_REV_LOONGSON1B 0x0020 ++ ++#define cpu_prid_comp() (current_cpu_prid() & PRID_COMP_MASK) ++#define cpu_prid_imp() (current_cpu_prid() & PRID_IMP_MASK) ++#define cpu_prid_rev() (current_cpu_prid() & PRID_REV_MASK) ++ ++#define cpu_prid_encode(comp, imp, rev) ((comp) | (imp) | (rev)) + + /* + * Older processors used to encode processor version and revision in two +diff --git a/arch/mips/include/asm/dma-mapping.h b/arch/mips/include/asm/dma-mapping.h +index 84238c5..28e0b03 100644 +--- a/arch/mips/include/asm/dma-mapping.h ++++ b/arch/mips/include/asm/dma-mapping.h +@@ -6,9 +6,7 @@ + #include + #include + +-#ifndef CONFIG_SGI_IP27 /* Kludge to fix 2.6.39 build for IP27 */ + #include +-#endif + + extern struct dma_map_ops *mips_dma_map_ops; + +diff --git a/arch/mips/include/asm/ftrace.h b/arch/mips/include/asm/ftrace.h +index ce35c9a..4c02d4c 100644 +--- a/arch/mips/include/asm/ftrace.h ++++ b/arch/mips/include/asm/ftrace.h +@@ -3,7 +3,7 @@ + * License. See the file "COPYING" in the main directory of this archive for + * more details. + * +- * Copyright (C) 2009 DSLab, Lanzhou University, China ++ * Copyright (C) 2009, 2010 DSLab, Lanzhou University, China + * Author: Wu Zhangjin + */ + +@@ -83,8 +83,8 @@ static inline unsigned long ftrace_call_adjust(unsigned long addr) + + struct dyn_arch_ftrace { + }; +- + #endif /* CONFIG_DYNAMIC_FTRACE */ ++ + #endif /* __ASSEMBLY__ */ + #endif /* CONFIG_FUNCTION_TRACER */ + #endif /* _ASM_MIPS_FTRACE_H */ +diff --git a/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h b/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h +index c0f3ef4..223de04 100644 +--- a/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h ++++ b/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h +@@ -16,6 +16,20 @@ + #ifndef __ASM_MACH_LOONGSON_CPU_FEATURE_OVERRIDES_H + #define __ASM_MACH_LOONGSON_CPU_FEATURE_OVERRIDES_H + ++#ifdef CONFIG_CPU_LOONGSON2 ++#define cpu_prid_loongson2() \ ++ cpu_prid_encode(PRID_COMP_LEGACY, PRID_IMP_LOONGSON2, 0) ++ ++#ifdef CONFIG_CPU_LOONGSON2F ++#define current_cpu_prid() (cpu_prid_loongson2() | PRID_REV_LOONGSON2F) ++#else /* CONFIG_CPU_LOONGSON2E */ ++#define current_cpu_prid() (cpu_prid_loongson2() | PRID_REV_LOONGSON2E) ++#endif ++ ++#endif /* CONFIG_CPU_LOONGSON2 */ ++ ++#define current_cpu_type() CPU_LOONGSON2 ++ + #define cpu_dcache_line_size() 32 + #define cpu_icache_line_size() 32 + #define cpu_scache_line_size() 32 +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h +index a0ee0cb..c6df1c4 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h +@@ -299,7 +299,42 @@ extern void _wrmsr(u32 msr, u32 hi, u32 lo); + + /****************** NATIVE ***************************/ + /* GPIO : I/O SPACE; REG : 32BITS */ +-#define GPIOL_OUT_VAL 0x00 +-#define GPIOL_OUT_EN 0x04 ++#define GPIOL_OUT_VAL 0x00 ++#define GPIOL_OUT_EN 0x04 ++#define GPIOL_OUT_AUX1_SEL 0x10 ++/* SMB : I/O SPACE, REG : 8BITS WIDTH */ ++#define SMB_SDA 0x00 ++#define SMB_STS 0x01 ++#define SMB_STS_SLVSTP (1 << 7) ++#define SMB_STS_SDAST (1 << 6) ++#define SMB_STS_BER (1 << 5) ++#define SMB_STS_NEGACK (1 << 4) ++#define SMB_STS_STASTR (1 << 3) ++#define SMB_STS_NMATCH (1 << 2) ++#define SMB_STS_MASTER (1 << 1) ++#define SMB_STS_XMIT (1 << 0) ++#define SMB_CTRL_STS 0x02 ++#define SMB_CSTS_TGSTL (1 << 5) ++#define SMB_CSTS_TSDA (1 << 4) ++#define SMB_CSTS_GCMTCH (1 << 3) ++#define SMB_CSTS_MATCH (1 << 2) ++#define SMB_CSTS_BB (1 << 1) ++#define SMB_CSTS_BUSY (1 << 0) ++#define SMB_CTRL1 0x03 ++#define SMB_CTRL1_STASTRE (1 << 7) ++#define SMB_CTRL1_NMINTE (1 << 6) ++#define SMB_CTRL1_GCMEN (1 << 5) ++#define SMB_CTRL1_ACK (1 << 4) ++#define SMB_CTRL1_RSVD (1 << 3) ++#define SMB_CTRL1_INTEN (1 << 2) ++#define SMB_CTRL1_STOP (1 << 1) ++#define SMB_CTRL1_START (1 << 0) ++#define SMB_ADDR 0x04 ++#define SMB_ADDR_SAEN (1 << 7) ++#define SMB_CONTROLLER_ADDR (0xef << 0) ++#define SMB_CTRL2 0x05 ++#define SMB_FREQ (0x20 << 1) ++#define SMB_ENABLE (0x01 << 0) ++#define SMB_CTRL3 0x06 + + #endif /* _CS5536_H */ +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h +index 021d017..d058e46 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h +@@ -10,26 +10,45 @@ + + #ifdef CONFIG_CS5536_MFGPT + extern void setup_mfgpt0_timer(void); +-extern void disable_mfgpt0_counter(void); +-extern void enable_mfgpt0_counter(void); ++extern void disable_mfgpt_counter(void); ++extern void enable_mfgpt_counter(void); + #else + static inline void __maybe_unused setup_mfgpt0_timer(void) + { + } +-static inline void __maybe_unused disable_mfgpt0_counter(void) ++static inline void __maybe_unused disable_mfgpt_counter(void) + { + } +-static inline void __maybe_unused enable_mfgpt0_counter(void) ++static inline void __maybe_unused enable_mfgpt_counter(void) + { + } + #endif + +-#define MFGPT_TICK_RATE 14318000 +-#define COMPARE ((MFGPT_TICK_RATE + HZ/2) / HZ) ++#define MFGPT_CLK_RATE(c) ((14318000UL-32768)*c + 32768) ++#define MFGPT_TICK_RATE(c, scale) (MFGPT_CLK_RATE(c) / (1 << scale)) ++#define MFGPT_COMPARE(c, scale) ((MFGPT_TICK_RATE(c, scale)+HZ/2)/HZ) + +-#define MFGPT_BASE mfgpt_base +-#define MFGPT0_CMP2 (MFGPT_BASE + 2) +-#define MFGPT0_CNT (MFGPT_BASE + 4) +-#define MFGPT0_SETUP (MFGPT_BASE + 6) ++#define MFGPT_SETUP_ENABLE (1 << 15) ++#define MFGPT_SETUP_ACK (3 << 13) ++#define MFGPT_SETUP_SETUP (1 << 12) ++#define MFGPT_SETUP_CMP2EVT (3 << 8) ++#define MFGPT_SETUP_CMP1EVT (3 << 6) ++#define MFGPT_SETUP_CLOCK(c) (c << 4) ++#define MFGPT_SETUP_SCALE(scale) scale ++ ++#define MFGPT0_CMP1 mfgpt_base ++#define MFGPT0_CMP2 (mfgpt_base + 0x02) ++#define MFGPT0_CNT (mfgpt_base + 0x04) ++#define MFGPT0_SETUP (mfgpt_base + 0x06) ++ ++#define MFGPT1_CMP1 (mfgpt_base + 0x08) ++#define MFGPT1_CMP2 (mfgpt_base + 0x0A) ++#define MFGPT1_CNT (mfgpt_base + 0x0C) ++#define MFGPT1_SETUP (mfgpt_base + 0x0E) ++ ++#define MFGPT2_CMP1 (mfgpt_base + 0x10) ++#define MFGPT2_CMP2 (mfgpt_base + 0x12) ++#define MFGPT2_CNT (mfgpt_base + 0x14) ++#define MFGPT2_SETUP (mfgpt_base + 0x16) + + #endif /*!_CS5536_MFGPT_H */ +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h +index 8a7ecb4..ac01334 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h +@@ -13,6 +13,7 @@ + + #include + #include ++#include + + extern void cs5536_pci_conf_write4(int function, int reg, u32 value); + extern u32 cs5536_pci_conf_read4(int function, int reg); +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h +index 1f17c18..9bc368f0d 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h +@@ -17,15 +17,43 @@ typedef u32 (*cs5536_pci_vsm_read)(int reg); + extern void pci_##name##_write_reg(int reg, u32 value); \ + extern u32 pci_##name##_read_reg(int reg); + ++#define DEFINE_CS5536_MODULE(name) \ ++static void pci_##name##_write_reg(int reg, u32 value) {} \ ++static u32 pci_##name##_read_reg(int reg) { return 0; } ++ ++/* isa module */ ++#ifdef CONFIG_CS5536_ISA ++DECLARE_CS5536_MODULE(isa) ++#else ++DEFINE_CS5536_MODULE(isa) ++#endif ++ + /* ide module */ ++#ifdef CONFIG_CS5536_IDE + DECLARE_CS5536_MODULE(ide) ++#else ++DEFINE_CS5536_MODULE(ide) ++#endif ++ + /* acc module */ ++#ifdef CONFIG_CS5536_AUDIO + DECLARE_CS5536_MODULE(acc) ++#else ++DEFINE_CS5536_MODULE(acc) ++#endif ++ + /* ohci module */ ++#ifdef CONFIG_CS5536_OHCI + DECLARE_CS5536_MODULE(ohci) +-/* isa module */ +-DECLARE_CS5536_MODULE(isa) ++#else ++DEFINE_CS5536_MODULE(ohci) ++#endif ++ + /* ehci module */ ++#ifdef CONFIG_CS5536_EHCI + DECLARE_CS5536_MODULE(ehci) ++#else ++DEFINE_CS5536_MODULE(ehci) ++#endif + + #endif /* _CS5536_VSM_H */ +diff --git a/arch/mips/include/asm/mach-loongson/ec_kb3310b.h b/arch/mips/include/asm/mach-loongson/ec_kb3310b.h +new file mode 100644 +index 0000000..600ac10 +--- /dev/null ++++ b/arch/mips/include/asm/mach-loongson/ec_kb3310b.h +@@ -0,0 +1,194 @@ ++/* ++ * KB3310B Embedded Controller ++ * ++ * Copyright (C) 2008 Lemote Inc. ++ * Author: liujl , 2008-03-14 ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin ++ * ++ * 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. ++ */ ++ ++#ifndef _EC_KB3310B_H ++#define _EC_KB3310B_H ++ ++extern unsigned char ec_read(unsigned short addr); ++extern void ec_write(unsigned short addr, unsigned char val); ++extern int ec_query_seq(unsigned char cmd); ++extern int ec_query_event_num(void); ++extern int ec_get_event_num(void); ++ ++typedef int (*sci_handler) (int status); ++extern sci_handler yeeloong_report_lid_status; ++ ++#define ON 1 ++#define OFF 0 ++ ++#define SCI_IRQ_NUM 0x0A ++ ++/* ++ * The following registers are determined by the EC index configuration. ++ * 1, fill the PORT_HIGH as EC register high part. ++ * 2, fill the PORT_LOW as EC register low part. ++ * 3, fill the PORT_DATA as EC register write data or get the data from it. ++ */ ++#define EC_IO_PORT_HIGH 0x0381 ++#define EC_IO_PORT_LOW 0x0382 ++#define EC_IO_PORT_DATA 0x0383 ++ ++/* ++ * EC delay time is 500us for register and status access ++ */ ++#define EC_REG_DELAY 500 /* unit : us */ ++#define EC_CMD_TIMEOUT 0x1000 ++ ++/* ++ * EC access port for SCI communication ++ */ ++#define EC_CMD_PORT 0x66 ++#define EC_STS_PORT 0x66 ++#define EC_DAT_PORT 0x62 ++#define CMD_INIT_IDLE_MODE 0xdd ++#define CMD_EXIT_IDLE_MODE 0xdf ++#define CMD_INIT_RESET_MODE 0xd8 ++#define CMD_REBOOT_SYSTEM 0x8c ++#define CMD_GET_EVENT_NUM 0x84 ++#define CMD_PROGRAM_PIECE 0xda ++ ++/* temperature & fan registers */ ++#define REG_TEMPERATURE_VALUE 0xF458 ++#define REG_FAN_AUTO_MAN_SWITCH 0xF459 ++#define BIT_FAN_AUTO 0 ++#define BIT_FAN_MANUAL 1 ++#define REG_FAN_CONTROL 0xF4D2 ++#define BIT_FAN_CONTROL_ON (1 << 0) ++#define BIT_FAN_CONTROL_OFF (0 << 0) ++#define REG_FAN_STATUS 0xF4DA ++#define BIT_FAN_STATUS_ON (1 << 0) ++#define BIT_FAN_STATUS_OFF (0 << 0) ++#define REG_FAN_SPEED_HIGH 0xFE22 ++#define REG_FAN_SPEED_LOW 0xFE23 ++#define REG_FAN_SPEED_LEVEL 0xF4CC ++/* fan speed divider */ ++#define FAN_SPEED_DIVIDER 480000 /* (60*1000*1000/62.5/2)*/ ++ ++/* battery registers */ ++#define REG_BAT_DESIGN_CAP_HIGH 0xF77D ++#define REG_BAT_DESIGN_CAP_LOW 0xF77E ++#define REG_BAT_FULLCHG_CAP_HIGH 0xF780 ++#define REG_BAT_FULLCHG_CAP_LOW 0xF781 ++#define REG_BAT_DESIGN_VOL_HIGH 0xF782 ++#define REG_BAT_DESIGN_VOL_LOW 0xF783 ++#define REG_BAT_CURRENT_HIGH 0xF784 ++#define REG_BAT_CURRENT_LOW 0xF785 ++#define REG_BAT_VOLTAGE_HIGH 0xF786 ++#define REG_BAT_VOLTAGE_LOW 0xF787 ++#define REG_BAT_TEMPERATURE_HIGH 0xF788 ++#define REG_BAT_TEMPERATURE_LOW 0xF789 ++#define REG_BAT_RELATIVE_CAP_HIGH 0xF492 ++#define REG_BAT_RELATIVE_CAP_LOW 0xF493 ++#define REG_BAT_VENDOR 0xF4C4 ++#define FLAG_BAT_VENDOR_SANYO 0x01 ++#define FLAG_BAT_VENDOR_SIMPLO 0x02 ++#define REG_BAT_CELL_COUNT 0xF4C6 ++#define FLAG_BAT_CELL_3S1P 0x03 ++#define FLAG_BAT_CELL_3S2P 0x06 ++#define REG_BAT_CHARGE 0xF4A2 ++#define FLAG_BAT_CHARGE_DISCHARGE 0x01 ++#define FLAG_BAT_CHARGE_CHARGE 0x02 ++#define FLAG_BAT_CHARGE_ACPOWER 0x00 ++#define REG_BAT_STATUS 0xF4B0 ++#define BIT_BAT_STATUS_LOW (1 << 5) ++#define BIT_BAT_STATUS_DESTROY (1 << 2) ++#define BIT_BAT_STATUS_FULL (1 << 1) ++#define BIT_BAT_STATUS_IN (1 << 0) ++#define REG_BAT_CHARGE_STATUS 0xF4B1 ++#define BIT_BAT_CHARGE_STATUS_OVERTEMP (1 << 2) ++#define BIT_BAT_CHARGE_STATUS_PRECHG (1 << 1) ++#define REG_BAT_STATE 0xF482 ++#define BIT_BAT_STATE_CHARGING (1 << 1) ++#define BIT_BAT_STATE_DISCHARGING (1 << 0) ++#define REG_BAT_POWER 0xF440 ++#define BIT_BAT_POWER_S3 (1 << 2) ++#define BIT_BAT_POWER_ON (1 << 1) ++#define BIT_BAT_POWER_ACIN (1 << 0) ++ ++/* Audio: rd/wr */ ++#define REG_AUDIO_VOLUME 0xF46C ++#define REG_AUDIO_MUTE 0xF4E7 ++#define REG_AUDIO_BEEP 0xF4D0 ++/* USB port power or not: rd/wr */ ++#define REG_USB0_FLAG 0xF461 ++#define REG_USB1_FLAG 0xF462 ++#define REG_USB2_FLAG 0xF463 ++#define BIT_USB_FLAG_ON 1 ++#define BIT_USB_FLAG_OFF 0 ++/* LID */ ++#define REG_LID_DETECT 0xF4BD ++#define BIT_LID_DETECT_ON 1 ++#define BIT_LID_DETECT_OFF 0 ++/* CRT */ ++#define REG_CRT_DETECT 0xF4AD ++#define BIT_CRT_DETECT_PLUG 1 ++#define BIT_CRT_DETECT_UNPLUG 0 ++/* LCD backlight brightness adjust: 9 levels */ ++#define REG_DISPLAY_BRIGHTNESS 0xF4F5 ++/* Black screen Status */ ++#define BIT_DISPLAY_LCD_ON 1 ++#define BIT_DISPLAY_LCD_OFF 0 ++/* LCD backlight control: off/restore */ ++#define REG_BACKLIGHT_CTRL 0xF7BD ++#define BIT_BACKLIGHT_ON 1 ++#define BIT_BACKLIGHT_OFF 0 ++/* Reset the machine auto-clear: rd/wr */ ++#define REG_RESET 0xF4EC ++#define BIT_RESET_ON 1 ++/* Light the led: rd/wr */ ++#define REG_LED 0xF4C8 ++#define BIT_LED_RED_POWER (1 << 0) ++#define BIT_LED_ORANGE_POWER (1 << 1) ++#define BIT_LED_GREEN_CHARGE (1 << 2) ++#define BIT_LED_RED_CHARGE (1 << 3) ++#define BIT_LED_NUMLOCK (1 << 4) ++/* Test led mode, all led on/off */ ++#define REG_LED_TEST 0xF4C2 ++#define BIT_LED_TEST_IN 1 ++#define BIT_LED_TEST_OUT 0 ++/* Camera on/off */ ++#define REG_CAMERA_STATUS 0xF46A ++#define BIT_CAMERA_STATUS_ON 1 ++#define BIT_CAMERA_STATUS_OFF 0 ++#define REG_CAMERA_CONTROL 0xF7B7 ++#define BIT_CAMERA_CONTROL_OFF 0 ++#define BIT_CAMERA_CONTROL_ON 1 ++/* Wlan Status */ ++#define REG_WLAN 0xF4FA ++#define BIT_WLAN_ON 1 ++#define BIT_WLAN_OFF 0 ++#define REG_DISPLAY_LCD 0xF79F ++ ++/* SCI Event Number from EC */ ++enum { ++ EVENT_LID = 0x23, /* Turn on/off LID */ ++ EVENT_SWITCHVIDEOMODE, /* Fn+F3 for display switch */ ++ EVENT_SLEEP, /* Fn+F1 for entering sleep mode */ ++ EVENT_OVERTEMP, /* Over-temperature happened */ ++ EVENT_CRT_DETECT, /* CRT is connected */ ++ EVENT_CAMERA, /* Camera on/off */ ++ EVENT_USB_OC2, /* USB2 Over Current occurred */ ++ EVENT_USB_OC0, /* USB0 Over Current occurred */ ++ EVENT_DISPLAYTOGGLE, /* Fn+F2, Turn on/off backlight */ ++ EVENT_AUDIO_MUTE, /* Fn+F4, Mute on/off */ ++ EVENT_DISPLAY_BRIGHTNESS,/* Fn+^/V, LCD backlight brightness adjust */ ++ EVENT_AC_BAT, /* AC & Battery relative issue */ ++ EVENT_AUDIO_VOLUME, /* Fn+<|>, Volume adjust */ ++ EVENT_WLAN, /* Wlan on/off */ ++}; ++ ++#define EVENT_START EVENT_LID ++#define EVENT_END EVENT_WLAN ++ ++#endif /* !_EC_KB3310B_H */ +diff --git a/arch/mips/include/asm/mach-loongson/gpio.h b/arch/mips/include/asm/mach-loongson/gpio.h +index 211a7b7..f15db3c 100644 +--- a/arch/mips/include/asm/mach-loongson/gpio.h ++++ b/arch/mips/include/asm/mach-loongson/gpio.h +@@ -13,12 +13,16 @@ + #ifndef __STLS2F_GPIO_H + #define __STLS2F_GPIO_H + ++#ifdef CONFIG_GPIOLIB ++#define ARCH_NR_GPIOS 4 + #include + + extern void gpio_set_value(unsigned gpio, int value); + extern int gpio_get_value(unsigned gpio); + extern int gpio_cansleep(unsigned gpio); + ++#endif ++ + /* The chip can do interrupt + * but it has not been tested and doc not clear + */ +diff --git a/arch/mips/include/asm/mach-loongson/loongson.h b/arch/mips/include/asm/mach-loongson/loongson.h +index b286534..222d179 100644 +--- a/arch/mips/include/asm/mach-loongson/loongson.h ++++ b/arch/mips/include/asm/mach-loongson/loongson.h +@@ -32,17 +32,13 @@ extern void __init prom_init_memory(void); + extern void __init prom_init_cmdline(void); + extern void __init prom_init_machtype(void); + extern void __init prom_init_env(void); +-#ifdef CONFIG_LOONGSON_UART_BASE +-extern unsigned long _loongson_uart_base, loongson_uart_base; +-extern void prom_init_loongson_uart_base(void); +-#endif ++extern void __init prom_init_uart_base(void); + +-static inline void prom_init_uart_base(void) +-{ +-#ifdef CONFIG_LOONGSON_UART_BASE +- prom_init_loongson_uart_base(); +-#endif +-} ++/* ++ * Copy kernel command line from arcs_cmdline ++ */ ++#include ++extern char loongson_cmdline[COMMAND_LINE_SIZE]; + + /* irq operation functions */ + extern void bonito_irqdispatch(void); +@@ -249,6 +245,12 @@ extern struct cpufreq_frequency_table loongson2_clockmod_table[]; + + /* Chip Config */ + #define LOONGSON_CHIPCFG0 LOONGSON_REG(LOONGSON_REGBASE + 0x80) ++#define LOONGSON_GET_CPUFREQ() (LOONGSON_CHIPCFG0 & 7) ++ ++#define LOONGSON_SET_CPUFREQ(level) do { \ ++ LOONGSON_CHIPCFG0 = (LOONGSON_CHIPCFG0 & (~7)) | (level); \ ++} while (0) ++ + #endif + + /* +diff --git a/arch/mips/include/asm/mach-loongson/machine.h b/arch/mips/include/asm/mach-loongson/machine.h +index 3810d5c..a596622 100644 +--- a/arch/mips/include/asm/mach-loongson/machine.h ++++ b/arch/mips/include/asm/mach-loongson/machine.h +@@ -12,16 +12,16 @@ + #define __ASM_MACH_LOONGSON_MACHINE_H + + #ifdef CONFIG_LEMOTE_FULOONG2E +- +-#define LOONGSON_MACHTYPE MACH_LEMOTE_FL2E +- ++ #define LOONGSON_MACHTYPE MACH_LEMOTE_FL2E + #endif + + /* use fuloong2f as the default machine of LEMOTE_MACH2F */ + #ifdef CONFIG_LEMOTE_MACH2F ++ #define LOONGSON_MACHTYPE MACH_LEMOTE_FL2F ++#endif + +-#define LOONGSON_MACHTYPE MACH_LEMOTE_FL2F +- ++#ifdef CONFIG_DEXXON_GDIUM ++ #define LOONGSON_MACHTYPE MACH_DEXXON_GDIUM2F10 + #endif + + #endif /* __ASM_MACH_LOONGSON_MACHINE_H */ +diff --git a/arch/mips/include/asm/mach-loongson1/clock.h b/arch/mips/include/asm/mach-loongson1/clock.h +new file mode 100644 +index 0000000..dd1afdb +--- /dev/null ++++ b/arch/mips/include/asm/mach-loongson1/clock.h +@@ -0,0 +1,53 @@ ++#ifndef __ASM_MACH_LOONGSON1_CLOCK_H ++#define __ASM_MACH_LOONGSON1_CLOCK_H ++ ++#include ++#include ++#include ++#include ++ ++extern void (*cpu_wait) (void); ++ ++struct clk; ++ ++struct clk_ops { ++ void (*init) (struct clk *clk); ++ void (*enable) (struct clk *clk); ++ void (*disable) (struct clk *clk); ++ void (*recalc) (struct clk *clk); ++ int (*set_rate) (struct clk *clk, unsigned long rate, int algo_id); ++ long (*round_rate) (struct clk *clk, unsigned long rate); ++}; ++ ++struct clk { ++ struct list_head node; ++ const char *name; ++ int id; ++ struct module *owner; ++ ++ struct clk *parent; ++ struct clk_ops *ops; ++ ++ struct kref kref; ++ ++ unsigned long rate; ++ unsigned long flags; ++}; ++ ++#define CLK_ALWAYS_ENABLED (1 << 0) ++#define CLK_RATE_PROPAGATES (1 << 1) ++ ++/* Should be defined by processor-specific code */ ++void arch_init_clk_ops(struct clk_ops **, int type); ++ ++int clk_init(void); ++ ++int __clk_enable(struct clk *); ++void __clk_disable(struct clk *); ++ ++void clk_recalc_rate(struct clk *); ++ ++int clk_register(struct clk *); ++void clk_unregister(struct clk *); ++ ++#endif /* __ASM_MIPS_CLOCK_H */ +diff --git a/arch/mips/include/asm/mach-loongson1/regs-intc.h b/arch/mips/include/asm/mach-loongson1/regs-intc.h +new file mode 100644 +index 0000000..6d5db23 +--- /dev/null ++++ b/arch/mips/include/asm/mach-loongson1/regs-intc.h +@@ -0,0 +1,25 @@ ++/* ++ * Copyright (c) 2011 Zhang, Keguang ++ * ++ * Loongson1 Interrupt register definitions. ++ * ++ * 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. ++ */ ++ ++#ifndef __ASM_MACH_LOONGSON1_REGS_INTC_H ++#define __ASM_MACH_LOONGSON1_REGS_INTC_H ++ ++#define LS1X_INTC_REG(n, x) \ ++ (ioremap(LS1X_INTC_BASE + (n * 0x18) + (x), 4)) ++ ++#define LS1X_INTC_INTISR(n) LS1X_INTC_REG(n, 0x0) ++#define LS1X_INTC_INTIEN(n) LS1X_INTC_REG(n, 0x4) ++#define LS1X_INTC_INTSET(n) LS1X_INTC_REG(n, 0x8) ++#define LS1X_INTC_INTCLR(n) LS1X_INTC_REG(n, 0xc) ++#define LS1X_INTC_INTPOL(n) LS1X_INTC_REG(n, 0x10) ++#define LS1X_INTC_INTEDGE(n) LS1X_INTC_REG(n, 0x14) ++ ++#endif /* __ASM_MACH_LOONGSON1_REGS_INTC_H */ +diff --git a/arch/mips/include/asm/module.h b/arch/mips/include/asm/module.h +index 44b705d..c28a782 100644 +--- a/arch/mips/include/asm/module.h ++++ b/arch/mips/include/asm/module.h +@@ -126,6 +126,8 @@ search_module_dbetables(unsigned long addr) + #define MODULE_PROC_FAMILY "LOONGSON1 " + #elif defined CONFIG_CPU_LOONGSON2 + #define MODULE_PROC_FAMILY "LOONGSON2 " ++#elif defined CONFIG_CPU_LOONGSON1 ++#define MODULE_PROC_FAMILY "LOONGSON1 " + #elif defined CONFIG_CPU_CAVIUM_OCTEON + #define MODULE_PROC_FAMILY "OCTEON " + #elif defined CONFIG_CPU_XLR +diff --git a/arch/mips/include/asm/timex.h b/arch/mips/include/asm/timex.h +index 6529704..bf6a701 100644 +--- a/arch/mips/include/asm/timex.h ++++ b/arch/mips/include/asm/timex.h +@@ -10,6 +10,10 @@ + + #ifdef __KERNEL__ + ++#ifdef CONFIG_CSRC_R4K ++#define ARCH_HAS_PREPARED_LPJ ++#endif ++ + #include + + /* +diff --git a/arch/mips/include/uapi/asm/inst.h b/arch/mips/include/uapi/asm/inst.h +index 0f4aec2..7c79b47 100644 +--- a/arch/mips/include/uapi/asm/inst.h ++++ b/arch/mips/include/uapi/asm/inst.h +@@ -62,6 +62,8 @@ enum spec_op { + enum spec2_op { + madd_op, maddu_op, mul_op, spec2_3_unused_op, + msub_op, msubu_op, /* more unused ops */ ++ loongson_madd_op = 0x18, loongson_msub_op, ++ loongson_nmadd_op, loongson_nmsub_op, + clz_op = 0x20, clo_op, + dclz_op = 0x24, dclo_op, + sdbpp_op = 0x3f +@@ -134,7 +136,7 @@ enum cop0_com_func { + */ + enum cop1_fmt { + s_fmt, d_fmt, e_fmt, q_fmt, +- w_fmt, l_fmt ++ w_fmt, l_fmt, ps_fmt + }; + + /* +@@ -162,8 +164,8 @@ enum cop1_sdw_func { + */ + enum cop1x_func { + lwxc1_op = 0x00, ldxc1_op = 0x01, +- pfetch_op = 0x07, swxc1_op = 0x08, +- sdxc1_op = 0x09, madd_s_op = 0x20, ++ swxc1_op = 0x08, sdxc1_op = 0x09, ++ prefx_op = 0x17, madd_s_op = 0x20, + madd_d_op = 0x21, madd_e_op = 0x22, + msub_s_op = 0x28, msub_d_op = 0x29, + msub_e_op = 0x2a, nmadd_s_op = 0x30, +diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c +index c6568bf4..ff54da8 100644 +--- a/arch/mips/kernel/cpu-probe.c ++++ b/arch/mips/kernel/cpu-probe.c +@@ -53,16 +53,14 @@ __setup("nodsp", dsp_disable); + + static inline void check_errata(void) + { +- struct cpuinfo_mips *c = ¤t_cpu_data; +- +- switch (c->cputype) { ++ switch (current_cpu_type()) { + case CPU_34K: + /* + * Erratum "RPS May Cause Incorrect Instruction Execution" + * This code only handles VPE0, any SMP/SMTC/RTOS code + * making use of VPE1 will be responsable for that VPE. + */ +- if ((c->processor_id & PRID_REV_MASK) <= PRID_REV_34K_V1_0_2) ++ if (cpu_prid_rev() <= PRID_REV_34K_V1_0_2) + write_c0_config7(read_c0_config7() | MIPS_CONF7_RPS); + break; + default: +@@ -328,7 +326,7 @@ static void __cpuinit decode_configs(struct cpuinfo_mips *c) + + static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu) + { +- switch (c->processor_id & 0xff00) { ++ switch (cpu_prid_imp()) { + case PRID_IMP_R2000: + c->cputype = CPU_R2000; + __cpu_name[cpu] = "R2000"; +@@ -340,7 +338,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu) + c->tlbsize = 64; + break; + case PRID_IMP_R3000: +- if ((c->processor_id & 0xff) == PRID_REV_R3000A) { ++ if (cpu_prid_rev() == PRID_REV_R3000A) { + if (cpu_has_confreg()) { + c->cputype = CPU_R3081E; + __cpu_name[cpu] = "R3081"; +@@ -361,7 +359,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu) + break; + case PRID_IMP_R4000: + if (read_c0_config() & CONF_SC) { +- if ((c->processor_id & 0xff) >= PRID_REV_R4400) { ++ if (cpu_prid_rev() >= PRID_REV_R4400) { + c->cputype = CPU_R4400PC; + __cpu_name[cpu] = "R4400PC"; + } else { +@@ -369,7 +367,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu) + __cpu_name[cpu] = "R4000PC"; + } + } else { +- if ((c->processor_id & 0xff) >= PRID_REV_R4400) { ++ if (cpu_prid_rev() >= PRID_REV_R4400) { + c->cputype = CPU_R4400SC; + __cpu_name[cpu] = "R4400SC"; + } else { +@@ -398,7 +396,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu) + __cpu_name[cpu] = "NEC VR4121"; + break; + case PRID_REV_VR4122: +- if ((c->processor_id & 0xf) < 0x3) { ++ if ((current_cpu_prid() & 0xf) < 0x3) { + c->cputype = CPU_VR4122; + __cpu_name[cpu] = "NEC VR4122"; + } else { +@@ -407,7 +405,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu) + } + break; + case PRID_REV_VR4130: +- if ((c->processor_id & 0xf) < 0x4) { ++ if ((current_cpu_prid() & 0xf) < 0x4) { + c->cputype = CPU_VR4131; + __cpu_name[cpu] = "NEC VR4131"; + } else { +@@ -458,12 +456,12 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu) + set_isa(c, MIPS_CPU_ISA_I); + c->options = MIPS_CPU_TLB | MIPS_CPU_TX39_CACHE; + +- if ((c->processor_id & 0xf0) == (PRID_REV_TX3927 & 0xf0)) { ++ if ((current_cpu_prid() & 0xf0) == (PRID_REV_TX3927 & 0xf0)) { + c->cputype = CPU_TX3927; + __cpu_name[cpu] = "TX3927"; + c->tlbsize = 64; + } else { +- switch (c->processor_id & 0xff) { ++ switch (cpu_prid_rev()) { + case PRID_REV_TX3912: + c->cputype = CPU_TX3912; + __cpu_name[cpu] = "TX3912"; +@@ -490,7 +488,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu) + __cpu_name[cpu] = "R49XX"; + set_isa(c, MIPS_CPU_ISA_III); + c->options = R4K_OPTS | MIPS_CPU_LLSC; +- if (!(c->processor_id & 0x08)) ++ if (!(current_cpu_prid() & 0x08)) + c->options |= MIPS_CPU_FPU | MIPS_CPU_32FPR; + c->tlbsize = 48; + break; +@@ -649,7 +647,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu) + static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu) + { + decode_configs(c); +- switch (c->processor_id & 0xff00) { ++ switch (cpu_prid_imp()) { + case PRID_IMP_4KC: + c->cputype = CPU_4KC; + __cpu_name[cpu] = "MIPS 4Kc"; +@@ -720,11 +718,11 @@ static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu) + static inline void cpu_probe_alchemy(struct cpuinfo_mips *c, unsigned int cpu) + { + decode_configs(c); +- switch (c->processor_id & 0xff00) { ++ switch (cpu_prid_imp()) { + case PRID_IMP_AU1_REV1: + case PRID_IMP_AU1_REV2: + c->cputype = CPU_ALCHEMY; +- switch ((c->processor_id >> 24) & 0xff) { ++ switch ((current_cpu_prid() >> 24) & 0xff) { + case 0: + __cpu_name[cpu] = "Au1000"; + break; +@@ -739,7 +737,7 @@ static inline void cpu_probe_alchemy(struct cpuinfo_mips *c, unsigned int cpu) + break; + case 4: + __cpu_name[cpu] = "Au1200"; +- if ((c->processor_id & 0xff) == 2) ++ if (cpu_prid_rev() == 2) + __cpu_name[cpu] = "Au1250"; + break; + case 5: +@@ -757,12 +755,12 @@ static inline void cpu_probe_sibyte(struct cpuinfo_mips *c, unsigned int cpu) + { + decode_configs(c); + +- switch (c->processor_id & 0xff00) { ++ switch (cpu_prid_imp()) { + case PRID_IMP_SB1: + c->cputype = CPU_SB1; + __cpu_name[cpu] = "SiByte SB1"; + /* FPU in pass1 is known to have issues. */ +- if ((c->processor_id & 0xff) < 0x02) ++ if (cpu_prid_rev() < 0x02) + c->options &= ~(MIPS_CPU_FPU | MIPS_CPU_32FPR); + break; + case PRID_IMP_SB1A: +@@ -775,7 +773,7 @@ static inline void cpu_probe_sibyte(struct cpuinfo_mips *c, unsigned int cpu) + static inline void cpu_probe_sandcraft(struct cpuinfo_mips *c, unsigned int cpu) + { + decode_configs(c); +- switch (c->processor_id & 0xff00) { ++ switch (cpu_prid_imp()) { + case PRID_IMP_SR71000: + c->cputype = CPU_SR71000; + __cpu_name[cpu] = "Sandcraft SR71000"; +@@ -788,7 +786,7 @@ static inline void cpu_probe_sandcraft(struct cpuinfo_mips *c, unsigned int cpu) + static inline void cpu_probe_nxp(struct cpuinfo_mips *c, unsigned int cpu) + { + decode_configs(c); +- switch (c->processor_id & 0xff00) { ++ switch (cpu_prid_imp()) { + case PRID_IMP_PR4450: + c->cputype = CPU_PR4450; + __cpu_name[cpu] = "Philips PR4450"; +@@ -800,7 +798,7 @@ static inline void cpu_probe_nxp(struct cpuinfo_mips *c, unsigned int cpu) + static inline void cpu_probe_broadcom(struct cpuinfo_mips *c, unsigned int cpu) + { + decode_configs(c); +- switch (c->processor_id & 0xff00) { ++ switch (cpu_prid_imp()) { + case PRID_IMP_BMIPS32_REV4: + case PRID_IMP_BMIPS32_REV8: + c->cputype = CPU_BMIPS32; +@@ -815,7 +813,7 @@ static inline void cpu_probe_broadcom(struct cpuinfo_mips *c, unsigned int cpu) + set_elf_platform(cpu, "bmips3300"); + break; + case PRID_IMP_BMIPS43XX: { +- int rev = c->processor_id & 0xff; ++ int rev = cpu_prid_rev(); + + if (rev >= PRID_REV_BMIPS4380_LO && + rev <= PRID_REV_BMIPS4380_HI) { +@@ -841,7 +839,7 @@ static inline void cpu_probe_broadcom(struct cpuinfo_mips *c, unsigned int cpu) + static inline void cpu_probe_cavium(struct cpuinfo_mips *c, unsigned int cpu) + { + decode_configs(c); +- switch (c->processor_id & 0xff00) { ++ switch (cpu_prid_imp()) { + case PRID_IMP_CAVIUM_CN38XX: + case PRID_IMP_CAVIUM_CN31XX: + case PRID_IMP_CAVIUM_CN30XX: +@@ -877,7 +875,7 @@ static inline void cpu_probe_ingenic(struct cpuinfo_mips *c, unsigned int cpu) + decode_configs(c); + /* JZRISC does not implement the CP0 counter. */ + c->options &= ~MIPS_CPU_COUNTER; +- switch (c->processor_id & 0xff00) { ++ switch (cpu_prid_imp()) { + case PRID_IMP_JZRISC: + c->cputype = CPU_JZRISC; + __cpu_name[cpu] = "Ingenic JZRISC"; +@@ -980,7 +978,7 @@ __cpuinit void cpu_probe(void) + c->cputype = CPU_UNKNOWN; + + c->processor_id = read_c0_prid(); +- switch (c->processor_id & 0xff0000) { ++ switch (cpu_prid_comp()) { + case PRID_COMP_LEGACY: + cpu_probe_legacy(c, cpu); + break; +@@ -1060,7 +1058,7 @@ __cpuinit void cpu_report(void) + struct cpuinfo_mips *c = ¤t_cpu_data; + + printk(KERN_INFO "CPU revision is: %08x (%s)\n", +- c->processor_id, cpu_name_string()); ++ current_cpu_prid(), cpu_name_string()); + if (c->options & MIPS_CPU_FPU) + printk(KERN_INFO "FPU revision is: %08x\n", c->fpu_id); + } +diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S +index 74f485d..91688d1 100644 +--- a/arch/mips/kernel/scall64-o32.S ++++ b/arch/mips/kernel/scall64-o32.S +@@ -26,6 +26,18 @@ + + .align 5 + NESTED(handle_sys, PT_SIZE, sp) ++#ifdef CONFIG_MIPS_USER_RDTSC ++ MFC0 k0, CP0_EPC ++ lw k1, 0(k0) ++ sltiu k1, k1, 0x1c ++ bne k1, zero, 1f # Normal syscall code: 0x0c < 0x1c ++ nop ++ mfc0 v0, CP0_COUNT # Get TSC ++ PTR_ADDIU k0, 4 # ret from syscall ++ MTC0 k0, CP0_EPC ++ eret ++1: ++#endif /* CONFIG_MIPS_USER_RDTSC */ + .set noat + SAVE_SOME + TRACE_IRQS_ON_RELOAD +diff --git a/arch/mips/kernel/spram.c b/arch/mips/kernel/spram.c +index 6af08d8..4be9669 100644 +--- a/arch/mips/kernel/spram.c ++++ b/arch/mips/kernel/spram.c +@@ -198,10 +198,9 @@ static __cpuinit void probe_spram(char *type, + } + void __cpuinit spram_config(void) + { +- struct cpuinfo_mips *c = ¤t_cpu_data; + unsigned int config0; + +- switch (c->cputype) { ++ switch (current_cpu_type()) { + case CPU_24K: + case CPU_34K: + case CPU_74K: +diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c +index 9d686bf..a90822f 100644 +--- a/arch/mips/kernel/time.c ++++ b/arch/mips/kernel/time.c +@@ -105,7 +105,7 @@ static __init int cpu_has_mfc0_count_bug(void) + * The published errata for the R4400 up to 3.0 say the CPU + * has the mfc0 from count bug. + */ +- if ((current_cpu_data.processor_id & 0xff) <= 0x30) ++ if (cpu_prid_rev() <= 0x30) + return 1; + + /* +@@ -119,6 +119,11 @@ static __init int cpu_has_mfc0_count_bug(void) + + void __init time_init(void) + { ++#ifdef CONFIG_HR_SCHED_CLOCK ++ if (!mips_clockevent_init() || !cpu_has_mfc0_count_bug()) ++ write_c0_count(0); ++#endif ++ + plat_time_init(); + + if (!mips_clockevent_init() || !cpu_has_mfc0_count_bug()) +diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile +index eeddc58..d7bec00 100644 +--- a/arch/mips/lib/Makefile ++++ b/arch/mips/lib/Makefile +@@ -2,10 +2,14 @@ + # Makefile for MIPS-specific library files.. + # + +-lib-y += bitops.o csum_partial.o delay.o memcpy.o memset.o \ ++lib-y += bitops.o csum_partial.o memcpy.o memset.o \ + mips-atomic.o strlen_user.o strncpy_user.o \ + strnlen_user.o uncached.o + ++ifndef CONFIG_CSRC_R4K ++lib-y += delay.o ++endif ++ + obj-y += iomap.o + obj-$(CONFIG_PCI) += iomap-pci.o + +diff --git a/arch/mips/loongson/Kconfig b/arch/mips/loongson/Kconfig +index 263beb9..d56d594 100644 +--- a/arch/mips/loongson/Kconfig ++++ b/arch/mips/loongson/Kconfig +@@ -32,12 +32,12 @@ config LEMOTE_FULOONG2E + + config LEMOTE_MACH2F + bool "Lemote Loongson 2F family machines" +- select ARCH_SPARSEMEM_ENABLE ++ select ARCH_SPARSEMEM_ENABLE if HIBERNATION + select BOARD_SCACHE + select BOOT_ELF32 + select CEVT_R4K if ! MIPS_EXTERNAL_TIMER + select CPU_HAS_WB +- select CS5536 ++ select CS5536 if PCI + select CSRC_R4K if ! MIPS_EXTERNAL_TIMER + select DMA_NONCOHERENT + select GENERIC_ISA_DMA_SUPPORT_BROKEN +@@ -45,23 +45,68 @@ config LEMOTE_MACH2F + select HW_HAS_PCI + select I8259 + select IRQ_CPU +- select ISA + select SYS_HAS_CPU_LOONGSON2F + select SYS_HAS_EARLY_PRINTK + select SYS_SUPPORTS_32BIT_KERNEL + select SYS_SUPPORTS_64BIT_KERNEL +- select SYS_SUPPORTS_HIGHMEM ++ select SYS_SUPPORTS_HIGHMEM if ! EMBEDDED + select SYS_SUPPORTS_LITTLE_ENDIAN +- select LOONGSON_MC146818 ++ select LOONGSON_MC146818 if RTC_DRV_CMOS + help + Lemote Loongson 2F family machines utilize the 2F revision of + Loongson processor and the AMD CS5536 south bridge. + + These family machines include fuloong2f mini PC, yeeloong2f notebook, + LingLoong allinone PC and so forth. ++ ++config DEXXON_GDIUM ++ bool "Dexxon Gdium Netbook" ++ select ARCH_SPARSEMEM_ENABLE ++ select BOARD_SCACHE ++ select BOOT_ELF32 ++ select CEVT_R4K if ! MIPS_EXTERNAL_TIMER ++ select CPU_HAS_WB ++ select CSRC_R4K if ! MIPS_EXTERNAL_TIMER ++ select DMA_NONCOHERENT ++ select GENERIC_ISA_DMA_SUPPORT_BROKEN ++ select HW_HAS_PCI ++ select I8259 ++ select IRQ_CPU ++ select ISA ++ select SYS_HAS_CPU_LOONGSON2F ++ select SYS_HAS_EARLY_PRINTK ++ select SYS_SUPPORTS_32BIT_KERNEL ++ select SYS_SUPPORTS_64BIT_KERNEL ++ select SYS_SUPPORTS_HIGHMEM ++ select SYS_SUPPORTS_LITTLE_ENDIAN ++ select ARCH_REQUIRE_GPIOLIB ++ select HAVE_PWM if MFD_SM501 ++ help ++ Dexxon gdium netbook based on Loongson 2F and SM502. + endchoice + + config CS5536 ++ select CS5536_IDE if (PATA_AMD || BLK_DEV_AMD74XX || PATA_CS5536) ++ select CS5536_OHCI if USB_OHCI_HCD ++ select CS5536_EHCI if USB_EHCI_HCD ++ select CS5536_AUDIO if SND_CS5535AUDIO ++ select CS5536_ISA ++ bool ++ ++config CS5536_ISA ++ select ISA ++ bool ++ ++config CS5536_IDE ++ bool ++ ++config CS5536_OHCI ++ bool ++ ++config CS5536_EHCI ++ bool ++ ++config CS5536_AUDIO + bool + + config CS5536_MFGPT +@@ -81,13 +126,25 @@ config LOONGSON_SUSPEND + default y + depends on CPU_SUPPORTS_CPUFREQ && SUSPEND + +-config LOONGSON_UART_BASE +- bool +- default y +- depends on EARLY_PRINTK || SERIAL_8250 +- + config LOONGSON_MC146818 + bool + default n + ++config GDIUM_PWM_CLOCK ++ tristate "Gdium PWM Timer" ++ default n ++ depends on HAVE_PWM && EXPERIMENTAL && BROKEN ++ select MIPS_EXTERNAL_TIMER ++ help ++ This options enables the experimental sm501-pwm based clock. With it, ++ you may be possible to use the loongson2f cpufreq driver. ++ ++config GDIUM_VERSION ++ int "Configure Gdium Version" ++ depends on DEXXON_GDIUM ++ default "3" ++ help ++ I have no information about how to determine which version your board ++ is, If the default config doesn't work for it, please change it to ++ smaller ones. + endif # MACH_LOONGSON +diff --git a/arch/mips/loongson/Makefile b/arch/mips/loongson/Makefile +index 0dc0055..4b69866 100644 +--- a/arch/mips/loongson/Makefile ++++ b/arch/mips/loongson/Makefile +@@ -15,3 +15,9 @@ obj-$(CONFIG_LEMOTE_FULOONG2E) += fuloong-2e/ + # + + obj-$(CONFIG_LEMOTE_MACH2F) += lemote-2f/ ++ ++# ++# Dexxon gdium netbook, based on loongson 2F and SM502 ++# ++ ++obj-$(CONFIG_DEXXON_GDIUM) += gdium/ +diff --git a/arch/mips/loongson/Platform b/arch/mips/loongson/Platform +index 29692e5..6be5dff 100644 +--- a/arch/mips/loongson/Platform ++++ b/arch/mips/loongson/Platform +@@ -30,3 +30,4 @@ platform-$(CONFIG_MACH_LOONGSON) += loongson/ + cflags-$(CONFIG_MACH_LOONGSON) += -I$(srctree)/arch/mips/include/asm/mach-loongson -mno-branch-likely + load-$(CONFIG_LEMOTE_FULOONG2E) += 0xffffffff80100000 + load-$(CONFIG_LEMOTE_MACH2F) += 0xffffffff80200000 ++load-$(CONFIG_DEXXON_GDIUM) += 0xffffffff80200000 +diff --git a/arch/mips/loongson/common/Makefile b/arch/mips/loongson/common/Makefile +index 4c57b3e..703b058 100644 +--- a/arch/mips/loongson/common/Makefile ++++ b/arch/mips/loongson/common/Makefile +@@ -4,6 +4,7 @@ + + obj-y += setup.o init.o cmdline.o env.o time.o reset.o irq.o \ + pci.o bonito-irq.o mem.o machtype.o platform.o ++ + obj-$(CONFIG_GPIOLIB) += gpio.o + + # +@@ -11,7 +12,6 @@ obj-$(CONFIG_GPIOLIB) += gpio.o + # + obj-$(CONFIG_EARLY_PRINTK) += early_printk.o + obj-$(CONFIG_SERIAL_8250) += serial.o +-obj-$(CONFIG_LOONGSON_UART_BASE) += uart_base.o + obj-$(CONFIG_LOONGSON_MC146818) += rtc.o + + # +diff --git a/arch/mips/loongson/common/cmdline.c b/arch/mips/loongson/common/cmdline.c +index 72fed00..96d5919 100644 +--- a/arch/mips/loongson/common/cmdline.c ++++ b/arch/mips/loongson/common/cmdline.c +@@ -17,10 +17,15 @@ + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ ++#include + #include + + #include + ++/* the kernel command line copied from arcs_cmdline */ ++char loongson_cmdline[COMMAND_LINE_SIZE]; ++EXPORT_SYMBOL(loongson_cmdline); ++ + void __init prom_init_cmdline(void) + { + int prom_argc; +@@ -45,4 +50,31 @@ void __init prom_init_cmdline(void) + } + + prom_init_machtype(); ++ ++ /* append machine specific command line */ ++ switch (mips_machtype) { ++ case MACH_LEMOTE_LL2F: ++ if ((strstr(arcs_cmdline, "video=")) == NULL) ++ strcat(arcs_cmdline, " video=sisfb:1360x768-16@60"); ++ break; ++ case MACH_LEMOTE_FL2F: ++ if ((strstr(arcs_cmdline, "ide_core.ignore_cable=")) == NULL) ++ strcat(arcs_cmdline, " ide_core.ignore_cable=0"); ++ break; ++ case MACH_LEMOTE_ML2F7: ++ /* Mengloong-2F has a 800x480 screen */ ++ if ((strstr(arcs_cmdline, "vga=")) == NULL) ++ strcat(arcs_cmdline, " vga=0x313"); ++ break; ++ case MACH_DEXXON_GDIUM2F10: ++ /* gdium has a 1024x600 screen */ ++ if ((strstr(arcs_cmdline, "video=")) == NULL) ++ strcat(arcs_cmdline, " video=sm501fb:1024x600@60"); ++ break; ++ default: ++ break; ++ } ++ ++ /* copy arcs_cmdline into loongson_cmdline */ ++ strncpy(loongson_cmdline, arcs_cmdline, COMMAND_LINE_SIZE); + } +diff --git a/arch/mips/loongson/common/cs5536/Makefile b/arch/mips/loongson/common/cs5536/Makefile +index f12e640..70f6057 100644 +--- a/arch/mips/loongson/common/cs5536/Makefile ++++ b/arch/mips/loongson/common/cs5536/Makefile +@@ -2,8 +2,13 @@ + # Makefile for CS5536 support. + # + +-obj-$(CONFIG_CS5536) += cs5536_pci.o cs5536_ide.o cs5536_acc.o cs5536_ohci.o \ +- cs5536_isa.o cs5536_ehci.o ++obj-$(CONFIG_CS5536) += cs5536_pci.o ++ ++obj-$(CONFIG_ISA) += cs5536_isa.o ++obj-$(CONFIG_CS5536_IDE) += cs5536_ide.o ++obj-$(CONFIG_CS5536_AUDIO) += cs5536_acc.o ++obj-$(CONFIG_CS5536_OHCI) += cs5536_ohci.o ++obj-$(CONFIG_CS5536_EHCI) += cs5536_ehci.o + + # + # Enable cs5536 mfgpt Timer +diff --git a/arch/mips/loongson/common/cs5536/cs5536_acc.c b/arch/mips/loongson/common/cs5536/cs5536_acc.c +index ab4d6cc..2b0d31e 100644 +--- a/arch/mips/loongson/common/cs5536/cs5536_acc.c ++++ b/arch/mips/loongson/common/cs5536/cs5536_acc.c +@@ -18,7 +18,7 @@ + + void pci_acc_write_reg(int reg, u32 value) + { +- u32 hi = 0, lo = value; ++ u32 hi, lo; + + switch (reg) { + case PCI_COMMAND: +@@ -66,75 +66,73 @@ void pci_acc_write_reg(int reg, u32 value) + u32 pci_acc_read_reg(int reg) + { + u32 hi, lo; +- u32 conf_data = 0; ++ u32 cfg = 0; + + switch (reg) { + case PCI_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_ACC_DEVICE_ID, CS5536_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(PCI_DEVICE_ID_AMD_CS5536_AUDIO, ++ PCI_VENDOR_ID_AMD); + break; + case PCI_COMMAND: + _rdmsr(GLIU_MSR_REG(GLIU_IOD_BM1), &hi, &lo); + if (((lo & 0xfff00000) || (hi & 0x000000ff)) + && ((hi & 0xf0000000) == 0xa0000000)) +- conf_data |= PCI_COMMAND_IO; ++ cfg |= PCI_COMMAND_IO; + _rdmsr(GLIU_MSR_REG(GLIU_PAE), &hi, &lo); + if ((lo & 0x300) == 0x300) +- conf_data |= PCI_COMMAND_MASTER; ++ cfg |= PCI_COMMAND_MASTER; + break; + case PCI_STATUS: +- conf_data |= PCI_STATUS_66MHZ; +- conf_data |= PCI_STATUS_FAST_BACK; ++ cfg |= PCI_STATUS_66MHZ; ++ cfg |= PCI_STATUS_FAST_BACK; + _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo); + if (lo & SB_PARE_ERR_FLAG) +- conf_data |= PCI_STATUS_PARITY; +- conf_data |= PCI_STATUS_DEVSEL_MEDIUM; ++ cfg |= PCI_STATUS_PARITY; ++ cfg |= PCI_STATUS_DEVSEL_MEDIUM; + break; + case PCI_CLASS_REVISION: + _rdmsr(ACC_MSR_REG(ACC_CAP), &hi, &lo); +- conf_data = lo & 0x000000ff; +- conf_data |= (CS5536_ACC_CLASS_CODE << 8); ++ cfg = lo & 0x000000ff; ++ cfg |= (CS5536_ACC_CLASS_CODE << 8); + break; + case PCI_CACHE_LINE_SIZE: +- conf_data = +- CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, +- PCI_NORMAL_LATENCY_TIMER); ++ cfg = CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, ++ PCI_NORMAL_LATENCY_TIMER); + break; + case PCI_BAR0_REG: + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); + if (lo & SOFT_BAR_ACC_FLAG) { +- conf_data = CS5536_ACC_RANGE | ++ cfg = CS5536_ACC_RANGE | + PCI_BASE_ADDRESS_SPACE_IO; + lo &= ~SOFT_BAR_ACC_FLAG; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else { + _rdmsr(GLIU_MSR_REG(GLIU_IOD_BM1), &hi, &lo); +- conf_data = (hi & 0x000000ff) << 12; +- conf_data |= (lo & 0xfff00000) >> 20; +- conf_data |= 0x01; +- conf_data &= ~0x02; ++ cfg = (hi & 0x000000ff) << 12; ++ cfg |= (lo & 0xfff00000) >> 20; ++ cfg |= 0x01; ++ cfg &= ~0x02; + } + break; + case PCI_CARDBUS_CIS: +- conf_data = PCI_CARDBUS_CIS_POINTER; ++ cfg = PCI_CARDBUS_CIS_POINTER; + break; + case PCI_SUBSYSTEM_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_ACC_SUB_ID, CS5536_SUB_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(PCI_DEVICE_ID_AMD_CS5536_AUDIO, ++ PCI_VENDOR_ID_AMD); + break; + case PCI_ROM_ADDRESS: +- conf_data = PCI_EXPANSION_ROM_BAR; ++ cfg = PCI_EXPANSION_ROM_BAR; + break; + case PCI_CAPABILITY_LIST: +- conf_data = PCI_CAPLIST_USB_POINTER; ++ cfg = PCI_CAPLIST_USB_POINTER; + break; + case PCI_INTERRUPT_LINE: +- conf_data = +- CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_ACC_INTR); ++ cfg = CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_ACC_INTR); + break; + default: + break; + } + +- return conf_data; ++ return cfg; + } +diff --git a/arch/mips/loongson/common/cs5536/cs5536_ehci.c b/arch/mips/loongson/common/cs5536/cs5536_ehci.c +index ec2e360..3c2163a 100644 +--- a/arch/mips/loongson/common/cs5536/cs5536_ehci.c ++++ b/arch/mips/loongson/common/cs5536/cs5536_ehci.c +@@ -18,7 +18,7 @@ + + void pci_ehci_write_reg(int reg, u32 value) + { +- u32 hi = 0, lo = value; ++ u32 hi, lo; + + switch (reg) { + case PCI_COMMAND: +@@ -78,83 +78,78 @@ void pci_ehci_write_reg(int reg, u32 value) + + u32 pci_ehci_read_reg(int reg) + { +- u32 conf_data = 0; ++ u32 cfg = 0; + u32 hi, lo; + + switch (reg) { + case PCI_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_EHCI_DEVICE_ID, CS5536_VENDOR_ID); ++ case PCI_SUBSYSTEM_VENDOR_ID: ++ cfg = CFG_PCI_VENDOR_ID(PCI_DEVICE_ID_AMD_CS5536_EHC, ++ PCI_VENDOR_ID_AMD); + break; + case PCI_COMMAND: + _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); + if (hi & PCI_COMMAND_MASTER) +- conf_data |= PCI_COMMAND_MASTER; ++ cfg |= PCI_COMMAND_MASTER; + if (hi & PCI_COMMAND_MEMORY) +- conf_data |= PCI_COMMAND_MEMORY; ++ cfg |= PCI_COMMAND_MEMORY; + break; + case PCI_STATUS: +- conf_data |= PCI_STATUS_66MHZ; +- conf_data |= PCI_STATUS_FAST_BACK; ++ cfg |= PCI_STATUS_66MHZ; ++ cfg |= PCI_STATUS_FAST_BACK; + _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo); + if (lo & SB_PARE_ERR_FLAG) +- conf_data |= PCI_STATUS_PARITY; +- conf_data |= PCI_STATUS_DEVSEL_MEDIUM; ++ cfg |= PCI_STATUS_PARITY; ++ cfg |= PCI_STATUS_DEVSEL_MEDIUM; + break; + case PCI_CLASS_REVISION: + _rdmsr(USB_MSR_REG(USB_CAP), &hi, &lo); +- conf_data = lo & 0x000000ff; +- conf_data |= (CS5536_EHCI_CLASS_CODE << 8); ++ cfg = lo & 0x000000ff; ++ cfg |= (CS5536_EHCI_CLASS_CODE << 8); + break; + case PCI_CACHE_LINE_SIZE: +- conf_data = +- CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, +- PCI_NORMAL_LATENCY_TIMER); ++ cfg = CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, ++ PCI_NORMAL_LATENCY_TIMER); + break; + case PCI_BAR0_REG: + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); + if (lo & SOFT_BAR_EHCI_FLAG) { +- conf_data = CS5536_EHCI_RANGE | ++ cfg = CS5536_EHCI_RANGE | + PCI_BASE_ADDRESS_SPACE_MEMORY; + lo &= ~SOFT_BAR_EHCI_FLAG; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else { + _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); +- conf_data = lo & 0xfffff000; ++ cfg = lo & 0xfffff000; + } + break; + case PCI_CARDBUS_CIS: +- conf_data = PCI_CARDBUS_CIS_POINTER; +- break; +- case PCI_SUBSYSTEM_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_EHCI_SUB_ID, CS5536_SUB_VENDOR_ID); ++ cfg = PCI_CARDBUS_CIS_POINTER; + break; + case PCI_ROM_ADDRESS: +- conf_data = PCI_EXPANSION_ROM_BAR; ++ cfg = PCI_EXPANSION_ROM_BAR; + break; + case PCI_CAPABILITY_LIST: +- conf_data = PCI_CAPLIST_USB_POINTER; ++ cfg = PCI_CAPLIST_USB_POINTER; + break; + case PCI_INTERRUPT_LINE: +- conf_data = +- CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_USB_INTR); ++ cfg = CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_USB_INTR); + break; + case PCI_EHCI_LEGSMIEN_REG: + _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); +- conf_data = (hi & 0x003f0000) >> 16; ++ cfg = (hi & 0x003f0000) >> 16; + break; + case PCI_EHCI_LEGSMISTS_REG: + _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); +- conf_data = (hi & 0x3f000000) >> 24; ++ cfg = (hi & 0x3f000000) >> 24; + break; + case PCI_EHCI_FLADJ_REG: + _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); +- conf_data = hi & 0x00003f00; ++ cfg = hi & 0x00003f00; + break; + default: + break; + } + +- return conf_data; ++ return cfg; + } +diff --git a/arch/mips/loongson/common/cs5536/cs5536_ide.c b/arch/mips/loongson/common/cs5536/cs5536_ide.c +index a73414d..4699e15 100644 +--- a/arch/mips/loongson/common/cs5536/cs5536_ide.c ++++ b/arch/mips/loongson/common/cs5536/cs5536_ide.c +@@ -18,7 +18,7 @@ + + void pci_ide_write_reg(int reg, u32 value) + { +- u32 hi = 0, lo = value; ++ u32 hi, lo; + + switch (reg) { + case PCI_COMMAND: +@@ -72,26 +72,16 @@ void pci_ide_write_reg(int reg, u32 value) + _wrmsr(IDE_MSR_REG(IDE_CFG), hi, lo); + } + break; +- case PCI_IDE_DTC_REG: +- _rdmsr(IDE_MSR_REG(IDE_DTC), &hi, &lo); +- lo = value; +- _wrmsr(IDE_MSR_REG(IDE_DTC), hi, lo); +- break; +- case PCI_IDE_CAST_REG: +- _rdmsr(IDE_MSR_REG(IDE_CAST), &hi, &lo); +- lo = value; +- _wrmsr(IDE_MSR_REG(IDE_CAST), hi, lo); +- break; +- case PCI_IDE_ETC_REG: +- _rdmsr(IDE_MSR_REG(IDE_ETC), &hi, &lo); +- lo = value; +- _wrmsr(IDE_MSR_REG(IDE_ETC), hi, lo); +- break; +- case PCI_IDE_PM_REG: +- _rdmsr(IDE_MSR_REG(IDE_INTERNAL_PM), &hi, &lo); +- lo = value; +- _wrmsr(IDE_MSR_REG(IDE_INTERNAL_PM), hi, lo); ++#define SET_PCI_IDE_REG(r) \ ++ case PCI_IDE_##r##_REG: \ ++ _rdmsr(IDE_MSR_REG(IDE_##r), &hi, &lo); \ ++ lo = value; \ ++ _wrmsr(IDE_MSR_REG(IDE_##r), hi, lo); \ + break; ++ SET_PCI_IDE_REG(DTC) ++ SET_PCI_IDE_REG(CAST) ++ SET_PCI_IDE_REG(ETC) ++ SET_PCI_IDE_REG(PM) + default: + break; + } +@@ -99,94 +89,79 @@ void pci_ide_write_reg(int reg, u32 value) + + u32 pci_ide_read_reg(int reg) + { +- u32 conf_data = 0; ++ u32 cfg = 0; + u32 hi, lo; + + switch (reg) { + case PCI_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_IDE_DEVICE_ID, CS5536_VENDOR_ID); ++ case PCI_SUBSYSTEM_VENDOR_ID: ++ cfg = CFG_PCI_VENDOR_ID(PCI_DEVICE_ID_AMD_CS5536_IDE, ++ PCI_VENDOR_ID_AMD); + break; + case PCI_COMMAND: + _rdmsr(IDE_MSR_REG(IDE_IO_BAR), &hi, &lo); + if (lo & 0xfffffff0) +- conf_data |= PCI_COMMAND_IO; ++ cfg |= PCI_COMMAND_IO; + _rdmsr(GLIU_MSR_REG(GLIU_PAE), &hi, &lo); + if ((lo & 0x30) == 0x30) +- conf_data |= PCI_COMMAND_MASTER; ++ cfg |= PCI_COMMAND_MASTER; + break; + case PCI_STATUS: +- conf_data |= PCI_STATUS_66MHZ; +- conf_data |= PCI_STATUS_FAST_BACK; ++ cfg |= PCI_STATUS_66MHZ; ++ cfg |= PCI_STATUS_FAST_BACK; + _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo); + if (lo & SB_PARE_ERR_FLAG) +- conf_data |= PCI_STATUS_PARITY; +- conf_data |= PCI_STATUS_DEVSEL_MEDIUM; ++ cfg |= PCI_STATUS_PARITY; ++ cfg |= PCI_STATUS_DEVSEL_MEDIUM; + break; + case PCI_CLASS_REVISION: + _rdmsr(IDE_MSR_REG(IDE_CAP), &hi, &lo); +- conf_data = lo & 0x000000ff; +- conf_data |= (CS5536_IDE_CLASS_CODE << 8); ++ cfg = lo & 0x000000ff; ++ cfg |= (CS5536_IDE_CLASS_CODE << 8); + break; + case PCI_CACHE_LINE_SIZE: + _rdmsr(SB_MSR_REG(SB_CTRL), &hi, &lo); + hi &= 0x000000f8; +- conf_data = CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, hi); ++ cfg = CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, hi); + break; + case PCI_BAR4_REG: + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); + if (lo & SOFT_BAR_IDE_FLAG) { +- conf_data = CS5536_IDE_RANGE | ++ cfg = CS5536_IDE_RANGE | + PCI_BASE_ADDRESS_SPACE_IO; + lo &= ~SOFT_BAR_IDE_FLAG; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else { + _rdmsr(IDE_MSR_REG(IDE_IO_BAR), &hi, &lo); +- conf_data = lo & 0xfffffff0; +- conf_data |= 0x01; +- conf_data &= ~0x02; ++ cfg = lo & 0xfffffff0; ++ cfg |= 0x01; ++ cfg &= ~0x02; + } + break; + case PCI_CARDBUS_CIS: +- conf_data = PCI_CARDBUS_CIS_POINTER; +- break; +- case PCI_SUBSYSTEM_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_IDE_SUB_ID, CS5536_SUB_VENDOR_ID); ++ cfg = PCI_CARDBUS_CIS_POINTER; + break; + case PCI_ROM_ADDRESS: +- conf_data = PCI_EXPANSION_ROM_BAR; ++ cfg = PCI_EXPANSION_ROM_BAR; + break; + case PCI_CAPABILITY_LIST: +- conf_data = PCI_CAPLIST_POINTER; ++ cfg = PCI_CAPLIST_POINTER; + break; + case PCI_INTERRUPT_LINE: +- conf_data = +- CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_IDE_INTR); +- break; +- case PCI_IDE_CFG_REG: +- _rdmsr(IDE_MSR_REG(IDE_CFG), &hi, &lo); +- conf_data = lo; +- break; +- case PCI_IDE_DTC_REG: +- _rdmsr(IDE_MSR_REG(IDE_DTC), &hi, &lo); +- conf_data = lo; +- break; +- case PCI_IDE_CAST_REG: +- _rdmsr(IDE_MSR_REG(IDE_CAST), &hi, &lo); +- conf_data = lo; +- break; +- case PCI_IDE_ETC_REG: +- _rdmsr(IDE_MSR_REG(IDE_ETC), &hi, &lo); +- conf_data = lo; ++ cfg = CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_IDE_INTR); + break; +- case PCI_IDE_PM_REG: +- _rdmsr(IDE_MSR_REG(IDE_INTERNAL_PM), &hi, &lo); +- conf_data = lo; ++#define GET_PCI_IDE_REG(r) \ ++ case PCI_IDE_##r##_REG: \ ++ _rdmsr(IDE_MSR_REG(IDE_##r), &hi, &cfg); \ + break; ++ GET_PCI_IDE_REG(CFG) ++ GET_PCI_IDE_REG(DTC) ++ GET_PCI_IDE_REG(CAST) ++ GET_PCI_IDE_REG(ETC) ++ GET_PCI_IDE_REG(PM) + default: + break; + } + +- return conf_data; ++ return cfg; + } +diff --git a/arch/mips/loongson/common/cs5536/cs5536_isa.c b/arch/mips/loongson/common/cs5536/cs5536_isa.c +index a6eb2e8..f74aeb3 100644 +--- a/arch/mips/loongson/common/cs5536/cs5536_isa.c ++++ b/arch/mips/loongson/common/cs5536/cs5536_isa.c +@@ -86,7 +86,7 @@ static void divil_lbar_disable(void) + + void pci_isa_write_bar(int n, u32 value) + { +- u32 hi = 0, lo = value; ++ u32 hi, lo; + + if (value == PCI_BAR_RANGE_MASK) { + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); +@@ -95,7 +95,7 @@ void pci_isa_write_bar(int n, u32 value) + } else if (value & 0x01) { + /* NATIVE reg */ + hi = 0x0000f001; +- lo &= bar_space_range[n]; ++ lo = value & bar_space_range[n]; + _wrmsr(divil_msr_reg[n], hi, lo); + + /* RCONFx is 4bytes in units for I/O space */ +@@ -112,21 +112,21 @@ void pci_isa_write_bar(int n, u32 value) + + u32 pci_isa_read_bar(int n) + { +- u32 conf_data = 0; ++ u32 cfg = 0; + u32 hi, lo; + + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); + if (lo & soft_bar_flag[n]) { +- conf_data = bar_space_range[n] | PCI_BASE_ADDRESS_SPACE_IO; ++ cfg = bar_space_range[n] | PCI_BASE_ADDRESS_SPACE_IO; + lo &= ~soft_bar_flag[n]; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else { + _rdmsr(divil_msr_reg[n], &hi, &lo); +- conf_data = lo & bar_space_range[n]; +- conf_data |= 0x01; +- conf_data &= ~0x02; ++ cfg = lo & bar_space_range[n]; ++ cfg |= 0x01; ++ cfg &= ~0x02; + } +- return conf_data; ++ return cfg; + } + + /* +@@ -136,7 +136,7 @@ u32 pci_isa_read_bar(int n) + */ + void pci_isa_write_reg(int reg, u32 value) + { +- u32 hi = 0, lo = value; ++ u32 hi, lo; + u32 temp; + + switch (reg) { +@@ -230,45 +230,46 @@ void pci_isa_write_reg(int reg, u32 value) + */ + u32 pci_isa_read_reg(int reg) + { +- u32 conf_data = 0; ++ u32 cfg = 0; + u32 hi, lo; + + switch (reg) { + case PCI_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_ISA_DEVICE_ID, CS5536_VENDOR_ID); ++ case PCI_SUBSYSTEM_VENDOR_ID: ++ cfg = CFG_PCI_VENDOR_ID(PCI_DEVICE_ID_AMD_CS5536_ISA, ++ PCI_VENDOR_ID_AMD); + break; + case PCI_COMMAND: + /* we just check the first LBAR for the IO enable bit, */ + /* maybe we should changed later. */ + _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_SMB), &hi, &lo); + if (hi & 0x01) +- conf_data |= PCI_COMMAND_IO; ++ cfg |= PCI_COMMAND_IO; + break; + case PCI_STATUS: +- conf_data |= PCI_STATUS_66MHZ; +- conf_data |= PCI_STATUS_DEVSEL_MEDIUM; +- conf_data |= PCI_STATUS_FAST_BACK; ++ cfg |= PCI_STATUS_66MHZ; ++ cfg |= PCI_STATUS_DEVSEL_MEDIUM; ++ cfg |= PCI_STATUS_FAST_BACK; + + _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo); + if (lo & SB_TAS_ERR_FLAG) +- conf_data |= PCI_STATUS_SIG_TARGET_ABORT; ++ cfg |= PCI_STATUS_SIG_TARGET_ABORT; + if (lo & SB_TAR_ERR_FLAG) +- conf_data |= PCI_STATUS_REC_TARGET_ABORT; ++ cfg |= PCI_STATUS_REC_TARGET_ABORT; + if (lo & SB_MAR_ERR_FLAG) +- conf_data |= PCI_STATUS_REC_MASTER_ABORT; ++ cfg |= PCI_STATUS_REC_MASTER_ABORT; + if (lo & SB_PARE_ERR_FLAG) +- conf_data |= PCI_STATUS_DETECTED_PARITY; ++ cfg |= PCI_STATUS_DETECTED_PARITY; + break; + case PCI_CLASS_REVISION: + _rdmsr(GLCP_MSR_REG(GLCP_CHIP_REV_ID), &hi, &lo); +- conf_data = lo & 0x000000ff; +- conf_data |= (CS5536_ISA_CLASS_CODE << 8); ++ cfg = lo & 0x000000ff; ++ cfg |= (CS5536_ISA_CLASS_CODE << 8); + break; + case PCI_CACHE_LINE_SIZE: + _rdmsr(SB_MSR_REG(SB_CTRL), &hi, &lo); + hi &= 0x000000f8; +- conf_data = CFG_PCI_CACHE_LINE_SIZE(PCI_BRIDGE_HEADER_TYPE, hi); ++ cfg = CFG_PCI_CACHE_LINE_SIZE(PCI_BRIDGE_HEADER_TYPE, hi); + break; + /* + * we only use the LBAR of DIVIL, no RCONF used. +@@ -292,25 +293,21 @@ u32 pci_isa_read_reg(int reg) + return pci_isa_read_bar(5); + break; + case PCI_CARDBUS_CIS: +- conf_data = PCI_CARDBUS_CIS_POINTER; +- break; +- case PCI_SUBSYSTEM_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_ISA_SUB_ID, CS5536_SUB_VENDOR_ID); ++ cfg = PCI_CARDBUS_CIS_POINTER; + break; + case PCI_ROM_ADDRESS: +- conf_data = PCI_EXPANSION_ROM_BAR; ++ cfg = PCI_EXPANSION_ROM_BAR; + break; + case PCI_CAPABILITY_LIST: +- conf_data = PCI_CAPLIST_POINTER; ++ cfg = PCI_CAPLIST_POINTER; + break; + case PCI_INTERRUPT_LINE: + /* no interrupt used here */ +- conf_data = CFG_PCI_INTERRUPT_LINE(0x00, 0x00); ++ cfg = CFG_PCI_INTERRUPT_LINE(0x00, 0x00); + break; + default: + break; + } + +- return conf_data; ++ return cfg; + } +diff --git a/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c b/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c +index c639b9d..a7078ae 100644 +--- a/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c ++++ b/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c +@@ -7,6 +7,9 @@ + * Copyright (C) 2009 Lemote Inc. + * Author: Wu zhangjin, wuzhangjin@gmail.com + * ++ * Copyright (C) 2010 Lemote Inc. ++ * Author: Gang Liang, randomizedthinking@gmail.com ++ * + * Reference: AMD Geode(TM) CS5536 Companion Device Data Book + * + * This program is free software; you can redistribute it and/or modify it +@@ -15,11 +18,24 @@ + * option) any later version. + */ + ++/* ++ * The MFGPT base address is variable, i.e., it could change over time. In ++ * reality, it only changes once when setting up the PCI memory mapping (occurs ++ * about 0.2 second from boot). But because of this, we have to read in the ++ * mfgpt base address repeatly in the beginning of various routines, most ++ * noticeably, mfgpt1_read_cycle (for sched_clock), and mfgpt1_interrupt. ++ * ++ * The source of problem is that PMON and the current cs5536 set up pci ++ * register window differently (to be further confirmed). Can we set ++ * them the same so as to save the trouble here? ++ * ++ * Now an ugly hack is used to save a few CPU cycles... likely an ++ * over-optimization. Feel free to remove it. ++ */ ++ + #include + #include + #include +-#include +-#include + #include + #include + +@@ -27,108 +43,143 @@ + + #include + +-DEFINE_SPINLOCK(mfgpt_lock); +-EXPORT_SYMBOL(mfgpt_lock); ++static void mfgpt0_set_mode(enum clock_event_mode, struct clock_event_device*); ++static int mfgpt0_next_event(unsigned long, struct clock_event_device*); ++static irqreturn_t mfgpt0_interrupt(int irq, void *dev_id); ++static void mfgpt0_start_timer(u16 delta); + ++static cycle_t mfgpt1_read_cycle(struct clocksource *cs); ++ ++static enum clock_event_mode mfgpt0_mode = CLOCK_EVT_MODE_SHUTDOWN; + static u32 mfgpt_base; + +-/* +- * Initialize the MFGPT timer. +- * +- * This is also called after resume to bring the MFGPT into operation again. +- */ ++static struct clock_event_device mfgpt0_clockevent = { ++ .name = "mfgpt0", ++ .features = CLOCK_EVT_MODE_ONESHOT | CLOCK_EVT_FEAT_PERIODIC, ++ .set_mode = mfgpt0_set_mode, ++ .set_next_event = mfgpt0_next_event, ++ .rating = 220, ++ .irq = CS5536_MFGPT_INTR, ++}; ++ ++static struct irqaction irq5 = { ++ .handler = mfgpt0_interrupt, ++ .flags = IRQF_DISABLED | IRQF_NOBALANCING | IRQF_TIMER, ++ .name = "mfgpt0-timer" ++}; ++ ++static struct clocksource mfgpt1_clocksource = { ++ .name = "mfgpt1", ++ .rating = 210, ++ .read = mfgpt1_read_cycle, ++ .mask = CLOCKSOURCE_MASK(16), ++ .flags = CLOCK_SOURCE_IS_CONTINUOUS ++}; + +-/* disable counter */ +-void disable_mfgpt0_counter(void) ++static inline void enable_mfgpt0_counter(void) + { +- outw(inw(MFGPT0_SETUP) & 0x7fff, MFGPT0_SETUP); ++ u32 basehi; ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &basehi, &mfgpt_base); ++ ++ /* clockevent: 14M, divisor = 8 (scale=3), CMP2 event mode */ ++ outw(MFGPT_SETUP_ACK | MFGPT_SETUP_CMP2EVT | ++ MFGPT_SETUP_CLOCK(1) | MFGPT_SETUP_SCALE(3), MFGPT0_SETUP); ++ outw(0, MFGPT0_CNT); ++ outw(MFGPT_COMPARE(1, 3), MFGPT0_CMP2); ++ outw(0xFFFF, MFGPT0_SETUP); + } +-EXPORT_SYMBOL(disable_mfgpt0_counter); + +-/* enable counter, comparator2 to event mode, 14.318MHz clock */ +-void enable_mfgpt0_counter(void) ++static inline void enable_mfgpt1_counter(void) + { +- outw(0xe310, MFGPT0_SETUP); ++ u32 basehi; ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &basehi, &mfgpt_base); ++ ++ /* clocksource: 32K w/ divisor = 2 (scale=1) */ ++ outw(MFGPT_SETUP_ACK | MFGPT_SETUP_CLOCK(0) | ++ MFGPT_SETUP_SCALE(1), MFGPT1_SETUP); ++ ++ outw(0, MFGPT1_CNT); ++ outw(0xFFFF, MFGPT1_CMP2); /* CNT won't tick with no CMP set */ ++ outw(0xFFFF, MFGPT1_SETUP); + } +-EXPORT_SYMBOL(enable_mfgpt0_counter); + +-static void init_mfgpt_timer(enum clock_event_mode mode, +- struct clock_event_device *evt) ++void enable_mfgpt_counter(void) + { +- spin_lock(&mfgpt_lock); +- +- switch (mode) { +- case CLOCK_EVT_MODE_PERIODIC: +- outw(COMPARE, MFGPT0_CMP2); /* set comparator2 */ +- outw(0, MFGPT0_CNT); /* set counter to 0 */ +- enable_mfgpt0_counter(); +- break; +- +- case CLOCK_EVT_MODE_SHUTDOWN: +- case CLOCK_EVT_MODE_UNUSED: +- if (evt->mode == CLOCK_EVT_MODE_PERIODIC || +- evt->mode == CLOCK_EVT_MODE_ONESHOT) +- disable_mfgpt0_counter(); +- break; +- +- case CLOCK_EVT_MODE_ONESHOT: +- /* The oneshot mode have very high deviation, Not use it! */ +- break; +- +- case CLOCK_EVT_MODE_RESUME: +- /* Nothing to do here */ +- break; +- } +- spin_unlock(&mfgpt_lock); ++ /* TODO: add a mfgpt system hard reset here ++ * timers might not reset correctly when OS crashes ++ */ ++ ++ enable_mfgpt0_counter(); ++ enable_mfgpt1_counter(); + } ++EXPORT_SYMBOL(enable_mfgpt_counter); + +-static struct clock_event_device mfgpt_clockevent = { +- .name = "mfgpt", +- .features = CLOCK_EVT_FEAT_PERIODIC, +- .set_mode = init_mfgpt_timer, +- .irq = CS5536_MFGPT_INTR, +-}; ++void disable_mfgpt_counter(void) ++{ ++ outw(0x7FFF, MFGPT0_SETUP); ++ outw(0x7FFF, MFGPT1_SETUP); ++} ++EXPORT_SYMBOL(disable_mfgpt_counter); + +-static irqreturn_t timer_interrupt(int irq, void *dev_id) ++static void mfgpt0_start_timer(u16 delta) + { +- u32 basehi; ++ outw(0x7FFF, MFGPT0_SETUP); ++ outw(0, MFGPT0_CNT); ++ outw(delta, MFGPT0_CMP2); ++ outw(0xFFFF, MFGPT0_SETUP); ++} + +- /* +- * get MFGPT base address +- * +- * NOTE: do not remove me, it's need for the value of mfgpt_base is +- * variable +- */ ++static void mfgpt0_set_mode(enum clock_event_mode mode, ++ struct clock_event_device *evt) ++{ ++ outw(0x7FFF, MFGPT0_SETUP); ++ if (mode == CLOCK_EVT_MODE_PERIODIC) ++ mfgpt0_start_timer(MFGPT_COMPARE(1, 3)); ++ ++ mfgpt0_mode = mode; ++} ++ ++static int mfgpt0_next_event(unsigned long delta, ++ struct clock_event_device *evt) ++{ ++ mfgpt0_start_timer(delta); ++ return 0; ++} ++ ++static irqreturn_t mfgpt0_interrupt(int irq, void *dev_id) ++{ ++ u32 basehi; + _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &basehi, &mfgpt_base); + +- /* ack */ +- outw(inw(MFGPT0_SETUP) | 0x4000, MFGPT0_SETUP); ++ /* stop the timer and ack the interrupt */ ++ outw(0x7FFF, MFGPT0_SETUP); + +- mfgpt_clockevent.event_handler(&mfgpt_clockevent); ++ if (mfgpt0_mode == CLOCK_EVT_MODE_SHUTDOWN) ++ return IRQ_HANDLED; + ++ /* restart timer for periodic mode */ ++ if (mfgpt0_mode == CLOCK_EVT_MODE_PERIODIC) ++ outw(0xFFFF, MFGPT0_SETUP); ++ ++ mfgpt0_clockevent.event_handler(&mfgpt0_clockevent); + return IRQ_HANDLED; + } + +-static struct irqaction irq5 = { +- .handler = timer_interrupt, +- .flags = IRQF_NOBALANCING | IRQF_TIMER, +- .name = "timer" +-}; +- + /* + * Initialize the conversion factor and the min/max deltas of the clock event + * structure and register the clock event source with the framework. + */ + void __init setup_mfgpt0_timer(void) + { +- u32 basehi; +- struct clock_event_device *cd = &mfgpt_clockevent; ++ struct clock_event_device *cd = &mfgpt0_clockevent; + unsigned int cpu = smp_processor_id(); +- + cd->cpumask = cpumask_of(cpu); +- clockevent_set_clock(cd, MFGPT_TICK_RATE); +- cd->max_delta_ns = clockevent_delta2ns(0xffff, cd); +- cd->min_delta_ns = clockevent_delta2ns(0xf, cd); ++ ++ cd->shift = 22; ++ cd->mult = div_sc(MFGPT_TICK_RATE(1, 3), NSEC_PER_SEC, cd->shift); ++ ++ cd->min_delta_ns = clockevent_delta2ns(0xF, cd); ++ cd->max_delta_ns = clockevent_delta2ns(0xFFFF, cd); + + /* Enable MFGPT0 Comparator 2 Output to the Interrupt Mapper */ + _wrmsr(DIVIL_MSR_REG(MFGPT_IRQ), 0, 0x100); +@@ -136,79 +187,24 @@ void __init setup_mfgpt0_timer(void) + /* Enable Interrupt Gate 5 */ + _wrmsr(DIVIL_MSR_REG(PIC_ZSEL_LOW), 0, 0x50000); + +- /* get MFGPT base address */ +- _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &basehi, &mfgpt_base); +- ++ enable_mfgpt0_counter(); + clockevents_register_device(cd); +- + setup_irq(CS5536_MFGPT_INTR, &irq5); + } + +-/* +- * Since the MFGPT overflows every tick, its not very useful +- * to just read by itself. So use jiffies to emulate a free +- * running counter: +- */ +-static cycle_t mfgpt_read(struct clocksource *cs) ++static cycle_t mfgpt1_read_cycle(struct clocksource *cs) + { +- unsigned long flags; +- int count; +- u32 jifs; +- static int old_count; +- static u32 old_jifs; +- +- spin_lock_irqsave(&mfgpt_lock, flags); +- /* +- * Although our caller may have the read side of xtime_lock, +- * this is now a seqlock, and we are cheating in this routine +- * by having side effects on state that we cannot undo if +- * there is a collision on the seqlock and our caller has to +- * retry. (Namely, old_jifs and old_count.) So we must treat +- * jiffies as volatile despite the lock. We read jiffies +- * before latching the timer count to guarantee that although +- * the jiffies value might be older than the count (that is, +- * the counter may underflow between the last point where +- * jiffies was incremented and the point where we latch the +- * count), it cannot be newer. +- */ +- jifs = jiffies; +- /* read the count */ +- count = inw(MFGPT0_CNT); +- +- /* +- * It's possible for count to appear to go the wrong way for this +- * reason: +- * +- * The timer counter underflows, but we haven't handled the resulting +- * interrupt and incremented jiffies yet. +- * +- * Previous attempts to handle these cases intelligently were buggy, so +- * we just do the simple thing now. +- */ +- if (count < old_count && jifs == old_jifs) +- count = old_count; +- +- old_count = count; +- old_jifs = jifs; +- +- spin_unlock_irqrestore(&mfgpt_lock, flags); +- +- return (cycle_t) (jifs * COMPARE) + count; ++ return inw(MFGPT1_CNT); + } + +-static struct clocksource clocksource_mfgpt = { +- .name = "mfgpt", +- .rating = 120, /* Functional for real use, but not desired */ +- .read = mfgpt_read, +- .mask = CLOCKSOURCE_MASK(32), +-}; +- +-int __init init_mfgpt_clocksource(void) ++int __init init_mfgpt1_clocksource(void) + { + if (num_possible_cpus() > 1) /* MFGPT does not scale! */ + return 0; + +- return clocksource_register_hz(&clocksource_mfgpt, MFGPT_TICK_RATE); ++ enable_mfgpt1_counter(); ++ ++ return clocksource_register_hz(&mfgpt1_clocksource, MFGPT_TICK_RATE(0, 1)); + } + +-arch_initcall(init_mfgpt_clocksource); ++arch_initcall(init_mfgpt1_clocksource); +diff --git a/arch/mips/loongson/common/cs5536/cs5536_ohci.c b/arch/mips/loongson/common/cs5536/cs5536_ohci.c +index f7c905e..a181193 100644 +--- a/arch/mips/loongson/common/cs5536/cs5536_ohci.c ++++ b/arch/mips/loongson/common/cs5536/cs5536_ohci.c +@@ -18,7 +18,7 @@ + + void pci_ohci_write_reg(int reg, u32 value) + { +- u32 hi = 0, lo = value; ++ u32 hi, lo; + + switch (reg) { + case PCI_COMMAND: +@@ -73,77 +73,72 @@ void pci_ohci_write_reg(int reg, u32 value) + + u32 pci_ohci_read_reg(int reg) + { +- u32 conf_data = 0; ++ u32 cfg = 0; + u32 hi, lo; + + switch (reg) { + case PCI_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_OHCI_DEVICE_ID, CS5536_VENDOR_ID); ++ case PCI_SUBSYSTEM_VENDOR_ID: ++ cfg = CFG_PCI_VENDOR_ID(PCI_DEVICE_ID_AMD_CS5536_OHC, ++ PCI_VENDOR_ID_AMD); + break; + case PCI_COMMAND: + _rdmsr(USB_MSR_REG(USB_OHCI), &hi, &lo); + if (hi & PCI_COMMAND_MASTER) +- conf_data |= PCI_COMMAND_MASTER; ++ cfg |= PCI_COMMAND_MASTER; + if (hi & PCI_COMMAND_MEMORY) +- conf_data |= PCI_COMMAND_MEMORY; ++ cfg |= PCI_COMMAND_MEMORY; + break; + case PCI_STATUS: +- conf_data |= PCI_STATUS_66MHZ; +- conf_data |= PCI_STATUS_FAST_BACK; ++ cfg |= PCI_STATUS_66MHZ; ++ cfg |= PCI_STATUS_FAST_BACK; + _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo); + if (lo & SB_PARE_ERR_FLAG) +- conf_data |= PCI_STATUS_PARITY; +- conf_data |= PCI_STATUS_DEVSEL_MEDIUM; ++ cfg |= PCI_STATUS_PARITY; ++ cfg |= PCI_STATUS_DEVSEL_MEDIUM; + break; + case PCI_CLASS_REVISION: + _rdmsr(USB_MSR_REG(USB_CAP), &hi, &lo); +- conf_data = lo & 0x000000ff; +- conf_data |= (CS5536_OHCI_CLASS_CODE << 8); ++ cfg = lo & 0x000000ff; ++ cfg |= (CS5536_OHCI_CLASS_CODE << 8); + break; + case PCI_CACHE_LINE_SIZE: +- conf_data = +- CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, +- PCI_NORMAL_LATENCY_TIMER); ++ cfg = CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, ++ PCI_NORMAL_LATENCY_TIMER); + break; + case PCI_BAR0_REG: + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); + if (lo & SOFT_BAR_OHCI_FLAG) { +- conf_data = CS5536_OHCI_RANGE | ++ cfg = CS5536_OHCI_RANGE | + PCI_BASE_ADDRESS_SPACE_MEMORY; + lo &= ~SOFT_BAR_OHCI_FLAG; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else { + _rdmsr(USB_MSR_REG(USB_OHCI), &hi, &lo); +- conf_data = lo & 0xffffff00; +- conf_data &= ~0x0000000f; /* 32bit mem */ ++ cfg = lo & 0xffffff00; ++ cfg &= ~0x0000000f; /* 32bit mem */ + } + break; + case PCI_CARDBUS_CIS: +- conf_data = PCI_CARDBUS_CIS_POINTER; +- break; +- case PCI_SUBSYSTEM_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_OHCI_SUB_ID, CS5536_SUB_VENDOR_ID); ++ cfg = PCI_CARDBUS_CIS_POINTER; + break; + case PCI_ROM_ADDRESS: +- conf_data = PCI_EXPANSION_ROM_BAR; ++ cfg = PCI_EXPANSION_ROM_BAR; + break; + case PCI_CAPABILITY_LIST: +- conf_data = PCI_CAPLIST_USB_POINTER; ++ cfg = PCI_CAPLIST_USB_POINTER; + break; + case PCI_INTERRUPT_LINE: +- conf_data = +- CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_USB_INTR); ++ cfg = CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_USB_INTR); + break; + case PCI_OHCI_INT_REG: + _rdmsr(DIVIL_MSR_REG(PIC_YSEL_LOW), &hi, &lo); + if ((lo & 0x00000f00) == CS5536_USB_INTR) +- conf_data = 1; ++ cfg = 1; + break; + default: + break; + } + +- return conf_data; ++ return cfg; + } +diff --git a/arch/mips/loongson/common/early_printk.c b/arch/mips/loongson/common/early_printk.c +index ced461b..89aecbf 100644 +--- a/arch/mips/loongson/common/early_printk.c ++++ b/arch/mips/loongson/common/early_printk.c +@@ -10,9 +10,13 @@ + * option) any later version. + */ + #include ++#include ++#include + + #include + ++unsigned long _loongson_uart_base; ++ + #define PORT(base, offset) (u8 *)(base + offset) + + static inline unsigned int serial_in(unsigned char *base, int offset) +@@ -39,3 +43,29 @@ void prom_putchar(char c) + + serial_out(uart_base, UART_TX, c); + } ++ ++void __init prom_init_uart_base(void) ++{ ++ unsigned long loongson_uart_base; ++ ++ switch (mips_machtype) { ++ case MACH_LEMOTE_FL2E: ++ loongson_uart_base = LOONGSON_PCIIO_BASE + 0x3f8; ++ break; ++ case MACH_LEMOTE_FL2F: ++ case MACH_LEMOTE_LL2F: ++ loongson_uart_base = LOONGSON_PCIIO_BASE + 0x2f8; ++ break; ++ case MACH_LEMOTE_ML2F7: ++ case MACH_LEMOTE_YL2F89: ++ case MACH_DEXXON_GDIUM2F10: ++ case MACH_LEMOTE_NAS: ++ default: ++ /* The CPU provided serial port */ ++ loongson_uart_base = LOONGSON_LIO1_BASE + 0x3f8; ++ break; ++ } ++ ++ _loongson_uart_base = ++ (unsigned long)ioremap_nocache(loongson_uart_base, 8); ++} +diff --git a/arch/mips/loongson/common/env.c b/arch/mips/loongson/common/env.c +index 0a18fcf..0e69c16 100644 +--- a/arch/mips/loongson/common/env.c ++++ b/arch/mips/loongson/common/env.c +@@ -40,7 +40,6 @@ void __init prom_init_env(void) + /* pmon passes arguments in 32bit pointers */ + int *_prom_envp; + unsigned long bus_clock; +- unsigned int processor_id; + long l; + + /* firmware arguments are initialized in head.S */ +@@ -60,8 +59,7 @@ void __init prom_init_env(void) + if (bus_clock == 0) + bus_clock = 66000000; + if (cpu_clock_freq == 0) { +- processor_id = (¤t_cpu_data)->processor_id; +- switch (processor_id & PRID_REV_MASK) { ++ switch (cpu_prid_rev()) { + case PRID_REV_LOONGSON2E: + cpu_clock_freq = 533080000; + break; +diff --git a/arch/mips/loongson/common/gpio.c b/arch/mips/loongson/common/gpio.c +index 2186990..8a1f77c 100644 +--- a/arch/mips/loongson/common/gpio.c ++++ b/arch/mips/loongson/common/gpio.c +@@ -19,7 +19,6 @@ + #include + #include + +-#define STLS2F_N_GPIO 4 + #define STLS2F_GPIO_IN_OFFSET 16 + + static DEFINE_SPINLOCK(gpio_lock); +@@ -29,7 +28,7 @@ int gpio_get_value(unsigned gpio) + u32 val; + u32 mask; + +- if (gpio >= STLS2F_N_GPIO) ++ if (gpio >= ARCH_NR_GPIOS) + return __gpio_get_value(gpio); + + mask = 1 << (gpio + STLS2F_GPIO_IN_OFFSET); +@@ -46,7 +45,7 @@ void gpio_set_value(unsigned gpio, int state) + u32 val; + u32 mask; + +- if (gpio >= STLS2F_N_GPIO) { ++ if (gpio >= ARCH_NR_GPIOS) { + __gpio_set_value(gpio, state); + return ; + } +@@ -66,7 +65,7 @@ EXPORT_SYMBOL(gpio_set_value); + + int gpio_cansleep(unsigned gpio) + { +- if (gpio < STLS2F_N_GPIO) ++ if (gpio < ARCH_NR_GPIOS) + return 0; + else + return __gpio_cansleep(gpio); +@@ -78,7 +77,7 @@ static int ls2f_gpio_direction_input(struct gpio_chip *chip, unsigned gpio) + u32 temp; + u32 mask; + +- if (gpio >= STLS2F_N_GPIO) ++ if (gpio >= ARCH_NR_GPIOS) + return -EINVAL; + + spin_lock(&gpio_lock); +@@ -97,7 +96,7 @@ static int ls2f_gpio_direction_output(struct gpio_chip *chip, + u32 temp; + u32 mask; + +- if (gpio >= STLS2F_N_GPIO) ++ if (gpio >= ARCH_NR_GPIOS) + return -EINVAL; + + gpio_set_value(gpio, level); +@@ -129,7 +128,7 @@ static struct gpio_chip ls2f_chip = { + .direction_output = ls2f_gpio_direction_output, + .set = ls2f_gpio_set_value, + .base = 0, +- .ngpio = STLS2F_N_GPIO, ++ .ngpio = ARCH_NR_GPIOS, + }; + + static int __init ls2f_gpio_setup(void) +diff --git a/arch/mips/loongson/common/init.c b/arch/mips/loongson/common/init.c +index ae7af1f..3083978 100644 +--- a/arch/mips/loongson/common/init.c ++++ b/arch/mips/loongson/common/init.c +@@ -30,8 +30,10 @@ void __init prom_init(void) + prom_init_env(); + prom_init_memory(); + ++#ifdef CONFIG_EARLY_PRINTK + /*init the uart base address */ + prom_init_uart_base(); ++#endif + } + + void __init prom_free_prom_memory(void) +diff --git a/arch/mips/loongson/common/irq.c b/arch/mips/loongson/common/irq.c +index 687003b..d62fa77 100644 +--- a/arch/mips/loongson/common/irq.c ++++ b/arch/mips/loongson/common/irq.c +@@ -10,6 +10,10 @@ + #include + #include + ++#include ++#include ++#include ++ + #include + /* + * the first level int-handler will jump here if it is a bonito irq +@@ -48,20 +52,32 @@ asmlinkage void plat_irq_dispatch(void) + void __init arch_init_irq(void) + { + /* +- * Clear all of the interrupts while we change the able around a bit. +- * int-handler is not on bootstrap ++ * The vector addresses of the generic exceptions are in the cached ++ * address space. + */ +- clear_c0_status(ST0_IM | ST0_BEV); ++ clear_c0_status(ST0_BEV); + +- /* no steer */ ++ /* No steer */ + LOONGSON_INTSTEER = 0; + + /* +- * Mask out all interrupt by writing "1" to all bit position in +- * the interrupt reset reg. ++ * Clear all interrupts + */ + LOONGSON_INTENCLR = ~0; + ++ /* ++ * Sets the first-level interrupt dispatcher: ++ * ++ * 0-15: i8259 interrupt (If CONFIG_I8259 selected) ++ * 16-23: mips cpu interrupt ++ * 32-63: bonito irq ++ */ ++ mips_cpu_irq_init(); ++ bonito_irq_init(); ++#ifdef CONFIG_I8259 ++ init_i8259_irqs(); ++#endif ++ + /* machine specific irq init */ + mach_init_irq(); + } +diff --git a/arch/mips/loongson/common/mem.c b/arch/mips/loongson/common/mem.c +index 8626a42..7aea259 100644 +--- a/arch/mips/loongson/common/mem.c ++++ b/arch/mips/loongson/common/mem.c +@@ -14,39 +14,24 @@ + #include + #include + ++#define MB(x) ((x) << 20) ++ + void __init prom_init_memory(void) + { +- add_memory_region(0x0, (memsize << 20), BOOT_MEM_RAM); +- +- add_memory_region(memsize << 20, LOONGSON_PCI_MEM_START - (memsize << +- 20), BOOT_MEM_RESERVED); +- ++ add_memory_region(0x0, MB(memsize), BOOT_MEM_RAM); ++ add_memory_region(MB(memsize), LOONGSON_PCI_MEM_START - MB(memsize), BOOT_MEM_RESERVED); + #ifdef CONFIG_CPU_SUPPORTS_ADDRWINCFG +- { +- int bit; +- +- bit = fls(memsize + highmemsize); +- if (bit != ffs(memsize + highmemsize)) +- bit += 20; +- else +- bit = bit + 20 - 1; +- +- /* set cpu window3 to map CPU to DDR: 2G -> 2G */ +- LOONGSON_ADDRWIN_CPUTODDR(ADDRWIN_WIN3, 0x80000000ul, +- 0x80000000ul, (1 << bit)); +- mmiowb(); +- } +-#endif /* !CONFIG_CPU_SUPPORTS_ADDRWINCFG */ ++ /* set cpu window3 to map CPU to DDR: 2G -> 0G */ ++ LOONGSON_ADDRWIN_CPUTODDR(ADDRWIN_WIN3, 0x80000000ul, 0, MB(memsize + highmemsize)); ++ mmiowb(); ++#endif + + #ifdef CONFIG_64BIT + if (highmemsize > 0) +- add_memory_region(LOONGSON_HIGHMEM_START, +- highmemsize << 20, BOOT_MEM_RAM); +- ++ add_memory_region(LOONGSON_HIGHMEM_START, MB(highmemsize), BOOT_MEM_RAM); + add_memory_region(LOONGSON_PCI_MEM_END + 1, LOONGSON_HIGHMEM_START - +- LOONGSON_PCI_MEM_END - 1, BOOT_MEM_RESERVED); +- +-#endif /* !CONFIG_64BIT */ ++ LOONGSON_PCI_MEM_END - 1, BOOT_MEM_RESERVED); ++#endif + } + + /* override of arch/mips/mm/cache.c: __uncached_access */ +diff --git a/arch/mips/loongson/common/mtd.c b/arch/mips/loongson/common/mtd.c +new file mode 100644 +index 0000000..49a57a7 +--- /dev/null ++++ b/arch/mips/loongson/common/mtd.c +@@ -0,0 +1,91 @@ ++/* ++ * Driver for flushing/dumping ROM of PMON on loongson family machines ++ * ++ * Copyright (C) 2008-2009 Lemote Inc. ++ * Author: Yan Hua ++ * ++ * 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++ ++#define FLASH_PHYS_ADDR LOONGSON_BOOT_BASE ++#define FLASH_SIZE 0x080000 ++ ++#define FLASH_PARTITION0_ADDR 0x00000000 ++#define FLASH_PARTITION0_SIZE 0x00080000 ++ ++struct map_info flash_map = { ++ .name = "flash device", ++ .size = FLASH_SIZE, ++ .bankwidth = 1, ++}; ++ ++struct mtd_partition flash_parts[] = { ++ { ++ .name = "Bootloader", ++ .offset = FLASH_PARTITION0_ADDR, ++ .size = FLASH_PARTITION0_SIZE}, ++}; ++ ++#define PARTITION_COUNT ARRAY_SIZE(flash_parts) ++ ++static struct mtd_info *mymtd; ++ ++int __init init_flash(void) ++{ ++ printk(KERN_NOTICE "flash device: %x at %x\n", ++ FLASH_SIZE, FLASH_PHYS_ADDR); ++ ++ flash_map.phys = FLASH_PHYS_ADDR; ++ flash_map.virt = ioremap(FLASH_PHYS_ADDR, FLASH_SIZE); ++ ++ if (!flash_map.virt) { ++ printk(KERN_NOTICE "Failed to ioremap\n"); ++ return -EIO; ++ } ++ ++ simple_map_init(&flash_map); ++ ++ mymtd = do_map_probe("cfi_probe", &flash_map); ++ if (mymtd) { ++ add_mtd_partitions(mymtd, flash_parts, PARTITION_COUNT); ++ printk(KERN_NOTICE "pmon flash device initialized\n"); ++ return 0; ++ } ++ ++ iounmap((void *)flash_map.virt); ++ return -ENXIO; ++} ++ ++static void __exit cleanup_flash(void) ++{ ++ if (mymtd) { ++ del_mtd_partitions(mymtd); ++ map_destroy(mymtd); ++ } ++ if (flash_map.virt) { ++ iounmap((void *)flash_map.virt); ++ flash_map.virt = 0; ++ } ++} ++ ++module_init(init_flash); ++module_exit(cleanup_flash); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Yanhua "); ++MODULE_DESCRIPTION("MTD driver for pmon flushing/dumping"); +diff --git a/arch/mips/loongson/common/pci.c b/arch/mips/loongson/common/pci.c +index fa77844..a992931 100644 +--- a/arch/mips/loongson/common/pci.c ++++ b/arch/mips/loongson/common/pci.c +@@ -50,11 +50,11 @@ static void __init setup_pcimap(void) + LOONGSON_PCIMAP_WIN(0, 0); + + /* +- * PCI-DMA to local mapping: [2G,2G+256M] -> [0M,256M] ++ * PCI-DMA to local mapping: [2G,4G] -> [0M,2G] + */ + LOONGSON_PCIBASE0 = 0x80000000ul; /* base: 2G -> mmap: 0M */ +- /* size: 256M, burst transmission, pre-fetch enable, 64bit */ +- LOONGSON_PCI_HIT0_SEL_L = 0xc000000cul; ++ /* size: 2G, burst transmission, pre-fetch enable, 64bit */ ++ LOONGSON_PCI_HIT0_SEL_L = 0x8000000cul; + LOONGSON_PCI_HIT0_SEL_H = 0xfffffffful; + LOONGSON_PCI_HIT1_SEL_L = 0x00000006ul; /* set this BAR as invalid */ + LOONGSON_PCI_HIT1_SEL_H = 0x00000000ul; +diff --git a/arch/mips/loongson/common/platform.c b/arch/mips/loongson/common/platform.c +index 0ed3832..4fed18c 100644 +--- a/arch/mips/loongson/common/platform.c ++++ b/arch/mips/loongson/common/platform.c +@@ -13,16 +13,14 @@ + #include + + static struct platform_device loongson2_cpufreq_device = { +- .name = "loongson2_cpufreq", ++ .name = "l2_cpufreq", + .id = -1, + }; + + static int __init loongson2_cpufreq_init(void) + { +- struct cpuinfo_mips *c = ¤t_cpu_data; +- + /* Only 2F revision and it's successors support CPUFreq */ +- if ((c->processor_id & PRID_REV_MASK) >= PRID_REV_LOONGSON2F) ++ if (cpu_prid_rev() >= PRID_REV_LOONGSON2F) + return platform_device_register(&loongson2_cpufreq_device); + + return -ENODEV; +diff --git a/arch/mips/loongson/common/serial.c b/arch/mips/loongson/common/serial.c +index 5f2b78a..c828600 100644 +--- a/arch/mips/loongson/common/serial.c ++++ b/arch/mips/loongson/common/serial.c +@@ -10,6 +10,7 @@ + * Author: Wu Zhangjin (wuzhangjin@gmail.com) + */ + ++#include + #include + #include + #include +@@ -19,58 +20,44 @@ + #include + #include + +-#define PORT(int) \ ++#define PORT(int, base_baud, io_type, port) \ + { \ + .irq = int, \ +- .uartclk = 1843200, \ +- .iotype = UPIO_PORT, \ ++ .uartclk = base_baud, \ ++ .iotype = io_type, \ + .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, \ + .regshift = 0, \ ++ .iobase = port, \ + } + +-#define PORT_M(int) \ +-{ \ +- .irq = MIPS_CPU_IRQ_BASE + (int), \ +- .uartclk = 3686400, \ +- .iotype = UPIO_MEM, \ +- .membase = (void __iomem *)NULL, \ +- .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, \ +- .regshift = 0, \ +-} +- +-static struct plat_serial8250_port uart8250_data[][2] = { +- [MACH_LOONGSON_UNKNOWN] {}, +- [MACH_LEMOTE_FL2E] {PORT(4), {} }, +- [MACH_LEMOTE_FL2F] {PORT(3), {} }, +- [MACH_LEMOTE_ML2F7] {PORT_M(3), {} }, +- [MACH_LEMOTE_YL2F89] {PORT_M(3), {} }, +- [MACH_DEXXON_GDIUM2F10] {PORT_M(3), {} }, +- [MACH_LEMOTE_NAS] {PORT_M(3), {} }, +- [MACH_LEMOTE_LL2F] {PORT(3), {} }, +- [MACH_LOONGSON_END] {}, ++static struct plat_serial8250_port uart8250_data[] = { ++ /* ttyS0: cpu_uart0 Yeeloong, Gdium, UNAS, ... */ ++ PORT((MIPS_CPU_IRQ_BASE + 3), 3686400, UPIO_MEM, 0x3f8), ++ /* ttyS1: sb_uart1 2E */ ++ PORT(4, 1843200, UPIO_PORT, 0x3f8), ++ /* ttyS2: sb_uart2 fuloong2f */ ++ PORT(3, 1843200, UPIO_PORT, 0x2f8), ++ {}, + }; + + static struct platform_device uart8250_device = { + .name = "serial8250", + .id = PLAT8250_DEV_PLATFORM, ++ .dev = { ++ .platform_data = uart8250_data, ++ }, + }; + + static int __init serial_init(void) + { +- unsigned char iotype; +- +- iotype = uart8250_data[mips_machtype][0].iotype; +- +- if (UPIO_MEM == iotype) +- uart8250_data[mips_machtype][0].membase = +- (void __iomem *)_loongson_uart_base; +- else if (UPIO_PORT == iotype) +- uart8250_data[mips_machtype][0].iobase = +- loongson_uart_base - LOONGSON_PCIIO_BASE; +- +- uart8250_device.dev.platform_data = uart8250_data[mips_machtype]; ++ uart8250_data[0].membase = (void __iomem *)ioremap_nocache( ++ LOONGSON_LIO1_BASE + uart8250_data[0].iobase, 8); + +- return platform_device_register(&uart8250_device); ++ platform_device_register(&uart8250_device); ++ return 0; + } + + device_initcall(serial_init); ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("liu shiwei "); ++MODULE_DESCRIPTION("loongson serial"); +diff --git a/arch/mips/loongson/common/time.c b/arch/mips/loongson/common/time.c +index 262a1f6..eebbeef 100644 +--- a/arch/mips/loongson/common/time.c ++++ b/arch/mips/loongson/common/time.c +@@ -10,6 +10,8 @@ + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ ++#include ++ + #include + #include + +@@ -24,8 +26,81 @@ void __init plat_time_init(void) + setup_mfgpt0_timer(); + } + ++#ifdef CONFIG_LOONGSON_MC146818 + void read_persistent_clock(struct timespec *ts) + { + ts->tv_sec = mc146818_get_cmos_time(); + ts->tv_nsec = 0; + } ++#else ++ ++/* If no CMOS RTC, use the one below */ ++ ++/* ++ * Cloned from drivers/rtc/hctosys.c ++ * ++ * If CONFIG_RTC_HCTOSYS=y is enabled, the system time can be set from the ++ * hardware clock(when boot and resuming from suspend), this may be also done ++ * (duplicately) by the timekeeper, which may need to be avoided(TODO). ++ * ++ * read_persistent_clock() may be useful in some places, e.g. there is not ++ * peristent clock in the system, we can use this to recover the system time. ++ * ++ * Note: The device indicated by CONFIG_RTC_HCTOSYS_DEVICE must be the one ++ * created by the RTC driver. Use Gdium as an example, We must disable the ++ * rt_cmos driver If we want to use the rtc_m41t80 driver for ++ * CONFIG_RTC_HCTOSYS_DEVICE is configured as /dev/rtc0, if rtc_cmos is ++ * enabled, rtc_cmos driver will be used, but it is not supported by Gdium. ++ * So, for Gdium, please ensure "# CONFIG_RTC_DRV_CMOS is not set" ++ */ ++ ++#ifdef CONFIG_RTC_HCTOSYS ++void read_persistent_clock(struct timespec *ts) ++{ ++ int err = -ENODEV; ++ struct rtc_time tm; ++ struct rtc_device *rtc; ++ ++ /* We can not access the RTC device before it is initialized ... */ ++ if (rtc_hctosys_ret != 0) { ++ ts->tv_sec = 0; ++ ts->tv_nsec = 0; ++ return; ++ } ++ ++ rtc = rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE); ++ ++ if (rtc == NULL) { ++ pr_err("%s: unable to open rtc device (%s)\n", ++ __FILE__, CONFIG_RTC_HCTOSYS_DEVICE); ++ goto err_open; ++ } ++ ++ err = rtc_read_time(rtc, &tm); ++ if (err) { ++ dev_err(rtc->dev.parent, ++ "hctosys: unable to read the hardware clock\n"); ++ goto err_read; ++ ++ } ++ ++ err = rtc_valid_tm(&tm); ++ if (err) { ++ dev_err(rtc->dev.parent, ++ "hctosys: invalid date/time\n"); ++ goto err_invalid; ++ } ++ ++ ts->tv_nsec = NSEC_PER_SEC >> 1, ++ rtc_tm_to_time(&tm, &ts->tv_sec); ++ ++err_invalid: ++err_read: ++ rtc_class_close(rtc); ++ ++err_open: ++ rtc_hctosys_ret = err; ++} ++#endif /* CONFIG_RTC_HCTOSYS */ ++ ++#endif /* !CONFIG_LOONGSON_MC146818 */ +diff --git a/arch/mips/loongson/common/uart_base.c b/arch/mips/loongson/common/uart_base.c +deleted file mode 100644 +index e192ad0..0000000 +--- a/arch/mips/loongson/common/uart_base.c ++++ /dev/null +@@ -1,45 +0,0 @@ +-/* +- * Copyright (C) 2009 Lemote Inc. +- * Author: Wu Zhangjin, wuzhangjin@gmail.com +- * +- * 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. +- */ +- +-#include +-#include +- +-#include +- +-/* ioremapped */ +-unsigned long _loongson_uart_base; +-EXPORT_SYMBOL(_loongson_uart_base); +-/* raw */ +-unsigned long loongson_uart_base; +-EXPORT_SYMBOL(loongson_uart_base); +- +-void prom_init_loongson_uart_base(void) +-{ +- switch (mips_machtype) { +- case MACH_LEMOTE_FL2E: +- loongson_uart_base = LOONGSON_PCIIO_BASE + 0x3f8; +- break; +- case MACH_LEMOTE_FL2F: +- case MACH_LEMOTE_LL2F: +- loongson_uart_base = LOONGSON_PCIIO_BASE + 0x2f8; +- break; +- case MACH_LEMOTE_ML2F7: +- case MACH_LEMOTE_YL2F89: +- case MACH_DEXXON_GDIUM2F10: +- case MACH_LEMOTE_NAS: +- default: +- /* The CPU provided serial port */ +- loongson_uart_base = LOONGSON_LIO1_BASE + 0x3f8; +- break; +- } +- +- _loongson_uart_base = +- (unsigned long)ioremap_nocache(loongson_uart_base, 8); +-} +diff --git a/arch/mips/loongson/fuloong-2e/irq.c b/arch/mips/loongson/fuloong-2e/irq.c +index ef5ec8f..232930e 100644 +--- a/arch/mips/loongson/fuloong-2e/irq.c ++++ b/arch/mips/loongson/fuloong-2e/irq.c +@@ -9,7 +9,6 @@ + */ + #include + +-#include + #include + + #include +@@ -57,11 +56,6 @@ void __init mach_init_irq(void) + LOONGSON_INTEDGE = LOONGSON_ICU_SYSTEMERR | LOONGSON_ICU_MASTERERR | + LOONGSON_ICU_RETRYERR | LOONGSON_ICU_MBOXES; + +- /* Sets the first-level interrupt dispatcher. */ +- mips_cpu_irq_init(); +- init_i8259_irqs(); +- bonito_irq_init(); +- + /* bonito irq at IP2 */ + setup_irq(MIPS_CPU_IRQ_BASE + 2, &cascade_irqaction); + /* 8259 irq at IP5 */ +diff --git a/arch/mips/loongson/gdium/Makefile b/arch/mips/loongson/gdium/Makefile +new file mode 100644 +index 0000000..f3f4f51 +--- /dev/null ++++ b/arch/mips/loongson/gdium/Makefile +@@ -0,0 +1,6 @@ ++# Makefile for gdium ++ ++obj-y += irq.o reset.o platform.o ++ ++obj-$(CONFIG_MFD_SM501) += sm501-pwm.o ++obj-$(CONFIG_GDIUM_PWM_CLOCK) += gdium-clock.o +diff --git a/arch/mips/loongson/gdium/gdium-clock.c b/arch/mips/loongson/gdium/gdium-clock.c +new file mode 100644 +index 0000000..fdbf42a +--- /dev/null ++++ b/arch/mips/loongson/gdium/gdium-clock.c +@@ -0,0 +1,234 @@ ++/* ++ * Doesn't work really well. When used, the clocksource is producing ++ * bad timings and the clockevent can't be used (don't have one shot feature ++ * thus can't switch on the fly and the pwm is initialised too late to be able ++ * to use it at boot time). ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define CLOCK_PWM 1 ++#define CLOCK_PWM_FREQ 1500000 /* Freq in Hz */ ++#define CLOCK_LATCH ((CLOCK_PWM_FREQ + HZ/2) / HZ) ++#define CLOCK_PWM_PERIOD (1000000000/CLOCK_PWM_FREQ) /* period ns */ ++#define CLOCK_PWM_DUTY 50 ++#define CLOCK_PWM_IRQ (MIPS_CPU_IRQ_BASE + 4) ++ ++static const char drv_name[] = "gdium-clock"; ++ ++static struct pwm_device *clock_pwm; ++ ++static DEFINE_SPINLOCK(clock_pwm_lock); ++static uint64_t clock_tick; ++ ++static irqreturn_t gdium_pwm_clock_interrupt(int irq, void *dev_id) ++{ ++ struct clock_event_device *cd = dev_id; ++ unsigned long flag; ++ ++ spin_lock_irqsave(&clock_pwm_lock, flag); ++ clock_tick++; ++ /* wait intn2 to finish */ ++ do { ++ LOONGSON_INTENCLR = (1 << 13); ++ } while (LOONGSON_INTISR & (1 << 13)); ++ spin_unlock_irqrestore(&clock_pwm_lock, flag); ++ ++ if (cd && cd->event_handler) ++ cd->event_handler(cd); ++ ++ return IRQ_HANDLED; ++} ++ ++static cycle_t gdium_pwm_clock_read(struct clocksource *cs) ++{ ++ unsigned long flag; ++ uint32_t jifs; ++ uint64_t ticks; ++ ++ spin_lock_irqsave(&clock_pwm_lock, flag); ++ jifs = jiffies; ++ ticks = clock_tick; ++ spin_unlock_irqrestore(&clock_pwm_lock, flag); ++ /* return (cycle_t)ticks; */ ++ return (cycle_t)(CLOCK_LATCH * jifs); ++} ++ ++static struct clocksource gdium_pwm_clock_clocksource = { ++ .name = "gdium_csrc", ++ .read = gdium_pwm_clock_read, ++ .mask = CLOCKSOURCE_MASK(64), ++ .flags = CLOCK_SOURCE_IS_CONTINUOUS | CLOCK_SOURCE_MUST_VERIFY, ++ .shift = 20, ++}; ++ ++/* Debug fs */ ++static int gdium_pwm_clock_show(struct seq_file *s, void *p) ++{ ++ unsigned long flag; ++ uint64_t ticks; ++ ++ spin_lock_irqsave(&clock_pwm_lock, flag); ++ ticks = clock_tick; ++ spin_unlock_irqrestore(&clock_pwm_lock, flag); ++ seq_printf(s, "%lld\n", ticks); ++ return 0; ++} ++ ++static int gdium_pwm_clock_open(struct inode *inode, struct file *file) ++{ ++ return single_open(file, gdium_pwm_clock_show, inode->i_private); ++} ++ ++static const struct file_operations gdium_pwm_clock_fops = { ++ .open = gdium_pwm_clock_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .owner = THIS_MODULE, ++}; ++static struct dentry *debugfs_file; ++ ++static void gdium_pwm_clock_set_mode(enum clock_event_mode mode, ++ struct clock_event_device *evt) ++{ ++ /* Nothing to do ... */ ++} ++ ++static struct clock_event_device gdium_pwm_clock_cevt = { ++ .name = "gdium_cevt", ++ .features = CLOCK_EVT_FEAT_PERIODIC, ++ /* .mult, .shift, .max_delta_ns and .min_delta_ns left uninitialized */ ++ .rating = 299, ++ .irq = CLOCK_PWM_IRQ, ++ .set_mode = gdium_pwm_clock_set_mode, ++}; ++ ++static struct platform_device_id platform_device_ids[] = { ++ { ++ .name = "gdium-pwmclk", ++ }, ++ {} ++}; ++MODULE_DEVICE_TABLE(platform, platform_device_ids); ++ ++static struct platform_driver gdium_pwm_clock_driver = { ++ .driver = { ++ .name = drv_name, ++ .owner = THIS_MODULE, ++ }, ++ .id_table = platform_device_ids, ++}; ++ ++static int gdium_pwm_clock_drvinit(void) ++{ ++ int ret; ++ struct clocksource *cs = &gdium_pwm_clock_clocksource; ++ struct clock_event_device *cd = &gdium_pwm_clock_cevt; ++ unsigned int cpu = smp_processor_id(); ++ ++ clock_tick = 0; ++ ++ clock_pwm = pwm_request(CLOCK_PWM, drv_name); ++ if (clock_pwm == NULL) { ++ pr_err("unable to request PWM for Gdium clock\n"); ++ return -EBUSY; ++ } ++ ret = pwm_config(clock_pwm, CLOCK_PWM_DUTY, CLOCK_PWM_PERIOD); ++ if (ret) { ++ pr_err("unable to configure PWM for Gdium clock\n"); ++ goto err_pwm_request; ++ } ++ ret = pwm_enable(clock_pwm); ++ if (ret) { ++ pr_err("unable to enable PWM for Gdium clock\n"); ++ goto err_pwm_request; ++ } ++ ++ cd->cpumask = cpumask_of(cpu); ++ ++ cd->shift = 22; ++ cd->mult = div_sc(CLOCK_PWM_FREQ, NSEC_PER_SEC, cd->shift); ++ cd->max_delta_ns = clockevent_delta2ns(0x7FFF, cd); ++ cd->min_delta_ns = clockevent_delta2ns(0xF, cd); ++ clockevents_register_device(&gdium_pwm_clock_cevt); ++ ++ /* SM501 PWM1 connected to intn2 <->ip4 */ ++ LOONGSON_INTPOL = (1 << 13); ++ LOONGSON_INTEDGE &= ~(1 << 13); ++ ret = request_irq(CLOCK_PWM_IRQ, gdium_pwm_clock_interrupt, IRQF_DISABLED, drv_name, &gdium_pwm_clock_cevt); ++ if (ret) { ++ pr_err("Can't claim irq\n"); ++ goto err_pwm_disable; ++ } ++ ++ cs->rating = 200; ++ cs->mult = clocksource_hz2mult(CLOCK_PWM_FREQ, cs->shift); ++ ret = clocksource_register(&gdium_pwm_clock_clocksource); ++ if (ret) { ++ pr_err("Can't register clocksource\n"); ++ goto err_irq; ++ } ++ pr_info("Clocksource registered with shift %d and mult %d\n", ++ cs->shift, cs->mult); ++ ++ debugfs_file = debugfs_create_file(drv_name, S_IFREG | S_IRUGO, ++ NULL, NULL, &gdium_pwm_clock_fops); ++ ++ return 0; ++ ++err_irq: ++ free_irq(CLOCK_PWM_IRQ, &gdium_pwm_clock_cevt); ++err_pwm_disable: ++ pwm_disable(clock_pwm); ++err_pwm_request: ++ pwm_free(clock_pwm); ++ return ret; ++} ++ ++static void gdium_pwm_clock_drvexit(void) ++{ ++ free_irq(CLOCK_PWM_IRQ, &gdium_pwm_clock_cevt); ++ pwm_disable(clock_pwm); ++ pwm_free(clock_pwm); ++} ++ ++ ++static int __devinit gdium_pwm_clock_init(void) ++{ ++ int ret = gdium_pwm_clock_drvinit(); ++ ++ if (ret) { ++ pr_err("Fail to register gdium clock driver\n"); ++ return ret; ++ } ++ ++ return platform_driver_register(&gdium_pwm_clock_driver); ++} ++ ++static void __exit gdium_pwm_clock_cleanup(void) ++{ ++ gdium_pwm_clock_drvexit(); ++ platform_driver_unregister(&gdium_pwm_clock_driver); ++} ++ ++module_init(gdium_pwm_clock_init); ++module_exit(gdium_pwm_clock_cleanup); ++ ++MODULE_AUTHOR("Arnaud Patard "); ++MODULE_DESCRIPTION("Gdium PWM clock driver"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("platform:gdium-pwmclk"); +diff --git a/arch/mips/loongson/gdium/irq.c b/arch/mips/loongson/gdium/irq.c +new file mode 100644 +index 0000000..2415d20 +--- /dev/null ++++ b/arch/mips/loongson/gdium/irq.c +@@ -0,0 +1,55 @@ ++/* ++ * Copyright (C) 2007 Lemote Inc. ++ * Author: Fuxin Zhang, zhangfx@lemote.com ++ * ++ * Copyright (c) 2010 yajin ++ * ++ * 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. ++ */ ++ ++#include ++#include ++ ++#include ++#include ++ ++#define LOONGSON_TIMER_IRQ (MIPS_CPU_IRQ_BASE + 7) /* cpu timer */ ++#define LOONGSON_NORTH_BRIDGE_IRQ (MIPS_CPU_IRQ_BASE + 6) /* bonito */ ++#define LOONGSON_UART_IRQ (MIPS_CPU_IRQ_BASE + 3) /* cpu serial port */ ++ ++void mach_irq_dispatch(unsigned int pending) ++{ ++ if (pending & CAUSEF_IP7) ++ do_IRQ(LOONGSON_TIMER_IRQ); ++ else if (pending & CAUSEF_IP6) { /* North Bridge, Perf counter */ ++ do_perfcnt_IRQ(); ++ bonito_irqdispatch(); ++ } else if (pending & CAUSEF_IP3) /* CPU UART */ ++ do_IRQ(LOONGSON_UART_IRQ); ++#if defined(CONFIG_GDIUM_PWM_CLOCK) || defined(CONFIG_GDIUM_PWM_CLOCK_MODULE) ++ else if (pending & CAUSEF_IP4) /* SM501 PWM clock */ ++ do_IRQ(MIPS_CPU_IRQ_BASE + 4); ++#endif ++ else ++ spurious_interrupt(); ++} ++ ++static irqreturn_t ip6_action(int cpl, void *dev_id) ++{ ++ return IRQ_HANDLED; ++} ++ ++struct irqaction ip6_irqaction = { ++ .handler = ip6_action, ++ .name = "cascade", ++ .flags = IRQF_SHARED, ++}; ++ ++void __init mach_init_irq(void) ++{ ++ /* setup north bridge irq (bonito) */ ++ setup_irq(LOONGSON_NORTH_BRIDGE_IRQ, &ip6_irqaction); ++} +diff --git a/arch/mips/loongson/gdium/platform.c b/arch/mips/loongson/gdium/platform.c +new file mode 100644 +index 0000000..ffafba4 +--- /dev/null ++++ b/arch/mips/loongson/gdium/platform.c +@@ -0,0 +1,135 @@ ++/* ++ * Copyright (c) 2009 Philippe Vachon ++ * ++ * 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define GDIUM_GPIO_BASE 224 ++ ++static struct i2c_board_info __initdata sm502dev_i2c_devices[] = { ++ { ++ I2C_BOARD_INFO("lm75", 0x48), ++ }, ++ { ++ I2C_BOARD_INFO("m41t83", 0x68), ++ }, ++ { ++ I2C_BOARD_INFO("gdium-laptop", 0x40), ++ }, ++}; ++ ++static int sm502dev_backlight_init(struct device *dev) ++{ ++ /* Add gpio request stuff here */ ++ return 0; ++} ++ ++static void sm502dev_backlight_exit(struct device *dev) ++{ ++ /* Add gpio free stuff here */ ++} ++ ++static struct platform_pwm_backlight_data backlight_data = { ++ .pwm_id = 0, ++ .max_brightness = 15, ++ .dft_brightness = 8, ++ .pwm_period_ns = 50000, /* 20 kHz */ ++ .init = sm502dev_backlight_init, ++ .exit = sm502dev_backlight_exit, ++}; ++ ++static struct platform_device backlight = { ++ .name = "pwm-backlight", ++ .dev = { ++ .platform_data = &backlight_data, ++ }, ++ .id = -1, ++}; ++ ++/* ++ * Warning this stunt is very dangerous ++ * as the sm501 gpio have dynamic numbers... ++ */ ++/* bus 0 is the one for the ST7, DS75 etc... */ ++static struct i2c_gpio_platform_data i2c_gpio0_data = { ++#if CONFIG_GDIUM_VERSION > 2 ++ .sda_pin = GDIUM_GPIO_BASE + 13, ++ .scl_pin = GDIUM_GPIO_BASE + 6, ++#else ++ .sda_pin = 192+15, ++ .scl_pin = 192+14, ++#endif ++ .udelay = 5, ++ .timeout = HZ / 10, ++ .sda_is_open_drain = 0, ++ .scl_is_open_drain = 0, ++}; ++ ++static struct platform_device i2c_gpio0_device = { ++ .name = "i2c-gpio", ++ .id = 0, ++ .dev = { .platform_data = &i2c_gpio0_data, }, ++}; ++ ++/* bus 1 is for the CRT/VGA external screen */ ++static struct i2c_gpio_platform_data i2c_gpio1_data = { ++ .sda_pin = GDIUM_GPIO_BASE + 10, ++ .scl_pin = GDIUM_GPIO_BASE + 9, ++ .udelay = 5, ++ .timeout = HZ / 10, ++ .sda_is_open_drain = 0, ++ .scl_is_open_drain = 0, ++}; ++ ++static struct platform_device i2c_gpio1_device = { ++ .name = "i2c-gpio", ++ .id = 1, ++ .dev = { .platform_data = &i2c_gpio1_data, }, ++}; ++ ++static struct platform_device gdium_clock = { ++ .name = "gdium-pwmclk", ++ .id = -1, ++}; ++ ++static struct platform_device *devices[] __initdata = { ++ &i2c_gpio0_device, ++ &i2c_gpio1_device, ++ &backlight, ++ &gdium_clock, ++}; ++ ++static int __init gdium_platform_devices_setup(void) ++{ ++ int ret; ++ ++ pr_info("Registering gdium platform devices\n"); ++ ++ ret = i2c_register_board_info(0, sm502dev_i2c_devices, ++ ARRAY_SIZE(sm502dev_i2c_devices)); ++ ++ if (ret != 0) { ++ pr_info("Error while registering platform devices: %d\n", ret); ++ return ret; ++ } ++ ++ platform_add_devices(devices, ARRAY_SIZE(devices)); ++ ++ return 0; ++} ++ ++/* ++ * some devices are on the pwm stuff which is behind the mfd which is ++ * behind the pci bus so arch_initcall can't work because too early ++ */ ++late_initcall(gdium_platform_devices_setup); +diff --git a/arch/mips/loongson/gdium/reset.c b/arch/mips/loongson/gdium/reset.c +new file mode 100644 +index 0000000..8289f95 +--- /dev/null ++++ b/arch/mips/loongson/gdium/reset.c +@@ -0,0 +1,22 @@ ++/* Board-specific reboot/shutdown routines ++ * ++ * Copyright (C) 2010 yajin ++ * ++ * 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. ++ */ ++#include ++ ++void mach_prepare_shutdown(void) ++{ ++ LOONGSON_GPIOIE &= ~(1<<1); ++ LOONGSON_GPIODATA |= (1<<1); ++} ++ ++void mach_prepare_reboot(void) ++{ ++ LOONGSON_GPIOIE &= ~(1<<2); ++ LOONGSON_GPIODATA &= ~(1<<2); ++} +diff --git a/arch/mips/loongson/gdium/sm501-pwm.c b/arch/mips/loongson/gdium/sm501-pwm.c +new file mode 100644 +index 0000000..5af3b23 +--- /dev/null ++++ b/arch/mips/loongson/gdium/sm501-pwm.c +@@ -0,0 +1,465 @@ ++/* ++ * SM501 PWM clock ++ * Copyright (C) 2009-2010 Arnaud Patard ++ * ++ * 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static const char drv_name[] = "sm501-pwm"; ++ ++#define INPUT_CLOCK 96 /* MHz */ ++#define PWM_COUNT 3 ++ ++#define SM501PWM_HIGH_COUNTER (1<<20) ++#define SM501PWM_LOW_COUNTER (1<<8) ++#define SM501PWM_CLOCK_DIVIDE (1>>4) ++#define SM501PWM_IP (1<<3) ++#define SM501PWM_I (1<<2) ++#define SM501PWM_E (1<<0) ++ ++struct pwm_device { ++ struct list_head node; ++ struct device *dev; ++ void __iomem *regs; ++ int duty_ns; ++ int period_ns; ++ char enabled; ++ void (*handler)(struct pwm_device *pwm); ++ ++ const char *label; ++ unsigned int use_count; ++ unsigned int pwm_id; ++}; ++ ++struct sm501pwm_info { ++ void __iomem *regs; ++ int irq; ++ struct resource *res; ++ struct device *dev; ++ struct dentry *debugfs; ++ ++ struct pwm_device pwm[3]; ++}; ++ ++int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) ++{ ++ unsigned int high, low, divider; ++ int divider1, divider2; ++ unsigned long long delay; ++ ++ if (!pwm || !pwm->regs || period_ns == 0 || duty_ns > period_ns) ++ return -EINVAL; ++ ++ /* Get delay ++ * We're loosing some precision but multiplying then dividing ++ * will overflow ++ */ ++ if (period_ns > 1000) { ++ delay = period_ns / 1000; ++ delay *= INPUT_CLOCK; ++ } else { ++ delay = period_ns * 96; ++ delay /= 1000; ++ } ++ ++ /* Get the number of clock low and high */ ++ high = delay * duty_ns / period_ns; ++ low = delay - high; ++ ++ /* Get divider to make 'low' and 'high' fit into 12 bits */ ++ /* No need to say that the divider must be >= 0 */ ++ divider1 = fls(low)-12; ++ divider2 = fls(high)-12; ++ ++ if (divider1 < 0) ++ divider1 = 0; ++ if (divider2 < 0) ++ divider2 = 0; ++ ++ divider = max(divider1, divider2); ++ ++ low >>= divider; ++ high >>= divider; ++ ++ pwm->duty_ns = duty_ns; ++ pwm->period_ns = period_ns; ++ ++ writel((high<<20)|(low<<8)|(divider<<4), pwm->regs); ++ return 0; ++} ++EXPORT_SYMBOL(pwm_config); ++ ++int pwm_enable(struct pwm_device *pwm) ++{ ++ u32 reg; ++ ++ if (!pwm) ++ return -EINVAL; ++ ++ switch (pwm->pwm_id) { ++ case 0: ++ sm501_configure_gpio(pwm->dev->parent, 29, 1); ++ break; ++ case 1: ++ sm501_configure_gpio(pwm->dev->parent, 30, 1); ++ break; ++ case 2: ++ sm501_configure_gpio(pwm->dev->parent, 31, 1); ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ reg = readl(pwm->regs); ++ reg |= (SM501PWM_IP | SM501PWM_E); ++ writel(reg, pwm->regs); ++ pwm->enabled = 1; ++ ++ return 0; ++} ++EXPORT_SYMBOL(pwm_enable); ++ ++void pwm_disable(struct pwm_device *pwm) ++{ ++ u32 reg; ++ ++ if (!pwm) ++ return; ++ ++ reg = readl(pwm->regs); ++ reg &= ~(SM501PWM_IP | SM501PWM_E); ++ writel(reg, pwm->regs); ++ ++ switch (pwm->pwm_id) { ++ case 0: ++ sm501_configure_gpio(pwm->dev->parent, 29, 0); ++ break; ++ case 1: ++ sm501_configure_gpio(pwm->dev->parent, 30, 0); ++ break; ++ case 2: ++ sm501_configure_gpio(pwm->dev->parent, 31, 0); ++ break; ++ default: ++ break; ++ } ++ pwm->enabled = 0; ++} ++EXPORT_SYMBOL(pwm_disable); ++ ++static DEFINE_MUTEX(pwm_lock); ++static LIST_HEAD(pwm_list); ++ ++struct pwm_device *pwm_request(int pwm_id, const char *label) ++{ ++ struct pwm_device *pwm; ++ int found = 0; ++ ++ mutex_lock(&pwm_lock); ++ ++ list_for_each_entry(pwm, &pwm_list, node) { ++ if (pwm->pwm_id == pwm_id && pwm->use_count == 0) { ++ pwm->use_count++; ++ pwm->label = label; ++ found = 1; ++ break; ++ } ++ } ++ ++ mutex_unlock(&pwm_lock); ++ ++ return (found) ? pwm : NULL; ++} ++EXPORT_SYMBOL(pwm_request); ++ ++void pwm_free(struct pwm_device *pwm) ++{ ++ mutex_lock(&pwm_lock); ++ ++ if (pwm->use_count) { ++ pwm->use_count--; ++ pwm->label = NULL; ++ } else ++ dev_warn(pwm->dev, "PWM device already freed\n"); ++ ++ mutex_unlock(&pwm_lock); ++} ++EXPORT_SYMBOL(pwm_free); ++ ++int pwm_int_enable(struct pwm_device *pwm) ++{ ++ unsigned long conf; ++ ++ if (!pwm || !pwm->regs || !pwm->handler) ++ return -EINVAL; ++ ++ conf = readl(pwm->regs); ++ conf |= SM501PWM_I; ++ writel(conf, pwm->regs); ++ return 0; ++} ++EXPORT_SYMBOL(pwm_int_enable); ++ ++int pwm_int_disable(struct pwm_device *pwm) ++{ ++ unsigned long conf; ++ ++ if (!pwm || !pwm->regs || !pwm->handler) ++ return -EINVAL; ++ ++ conf = readl(pwm->regs); ++ conf &= ~SM501PWM_I; ++ writel(conf, pwm->regs); ++ return 0; ++} ++EXPORT_SYMBOL(pwm_int_disable); ++ ++int pwm_set_handler(struct pwm_device *pwm, ++ void (*handler)(struct pwm_device *pwm)) ++{ ++ if (!pwm || !handler) ++ return -EINVAL; ++ pwm->handler = handler; ++ return 0; ++} ++EXPORT_SYMBOL(pwm_set_handler); ++ ++static irqreturn_t sm501pwm_irq(int irq, void *dev_id) ++{ ++ unsigned long value; ++ struct sm501pwm_info *info = (struct sm501pwm_info *)dev_id; ++ struct pwm_device *pwm; ++ int i; ++ ++ value = sm501_modify_reg(info->dev->parent, SM501_IRQ_STATUS, 0, 0); ++ ++ /* Check is the interrupt is for us */ ++ if (value & (1<<22)) { ++ for (i = 0 ; i < PWM_COUNT ; i++) { ++ /* ++ * Find which pwm triggered the interrupt ++ * and ack ++ */ ++ value = readl(info->regs + i*4); ++ if (value & SM501PWM_IP) ++ writel(value | SM501PWM_IP, info->regs + i*4); ++ ++ pwm = &info->pwm[i]; ++ if (pwm->handler) ++ pwm->handler(pwm); ++ } ++ return IRQ_HANDLED; ++ } ++ ++ return IRQ_NONE; ++} ++ ++static void add_pwm(int id, struct sm501pwm_info *info) ++{ ++ struct pwm_device *pwm = &info->pwm[id]; ++ ++ pwm->use_count = 0; ++ pwm->pwm_id = id; ++ pwm->dev = info->dev; ++ pwm->regs = info->regs + id * 4; ++ ++ mutex_lock(&pwm_lock); ++ list_add_tail(&pwm->node, &pwm_list); ++ mutex_unlock(&pwm_lock); ++} ++ ++static void del_pwm(int id, struct sm501pwm_info *info) ++{ ++ struct pwm_device *pwm = &info->pwm[id]; ++ ++ pwm->use_count = 0; ++ pwm->pwm_id = -1; ++ mutex_lock(&pwm_lock); ++ list_del(&pwm->node); ++ mutex_unlock(&pwm_lock); ++} ++ ++/* Debug fs */ ++static int sm501pwm_show(struct seq_file *s, void *p) ++{ ++ struct pwm_device *pwm; ++ ++ mutex_lock(&pwm_lock); ++ list_for_each_entry(pwm, &pwm_list, node) { ++ if (pwm->use_count) { ++ seq_printf(s, "pwm-%d (%12s) %d %d %s\n", ++ pwm->pwm_id, pwm->label, ++ pwm->duty_ns, pwm->period_ns, ++ pwm->enabled ? "on" : "off"); ++ seq_printf(s, " %08x\n", readl(pwm->regs)); ++ } ++ } ++ mutex_unlock(&pwm_lock); ++ ++ return 0; ++} ++ ++static int sm501pwm_open(struct inode *inode, struct file *file) ++{ ++ return single_open(file, sm501pwm_show, inode->i_private); ++} ++ ++static const struct file_operations sm501pwm_fops = { ++ .open = sm501pwm_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .owner = THIS_MODULE, ++}; ++ ++static int __init sm501pwm_probe(struct platform_device *pdev) ++{ ++ struct sm501pwm_info *info; ++ struct device *dev = &pdev->dev; ++ struct resource *res; ++ int ret = 0; ++ int res_len; ++ int i; ++ ++ info = kzalloc(sizeof(struct sm501pwm_info), GFP_KERNEL); ++ if (!info) { ++ dev_err(dev, "Allocation failure\n"); ++ ret = -ENOMEM; ++ goto err; ++ } ++ info->dev = dev; ++ platform_set_drvdata(pdev, info); ++ ++ /* Get irq number */ ++ info->irq = platform_get_irq(pdev, 0); ++ if (!info->irq) { ++ dev_err(dev, "no irq found\n"); ++ ret = -ENODEV; ++ goto err_alloc; ++ } ++ ++ /* Get regs address */ ++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (res == NULL) { ++ dev_err(dev, "No memory resource found\n"); ++ ret = -ENODEV; ++ goto err_alloc; ++ } ++ info->res = res; ++ res_len = (res->end - res->start)+1; ++ ++ if (!request_mem_region(res->start, res_len, drv_name)) { ++ dev_err(dev, "Can't request iomem resource\n"); ++ ret = -EBUSY; ++ goto err_alloc; ++ } ++ ++ info->regs = ioremap(res->start, res_len); ++ if (!info->regs) { ++ dev_err(dev, "ioremap failed\n"); ++ ret = -ENOMEM; ++ goto err_mem; ++ } ++ ++ ret = request_irq(info->irq, sm501pwm_irq, IRQF_SHARED, drv_name, info); ++ if (ret != 0) { ++ dev_err(dev, "can't get irq\n"); ++ goto err_map; ++ } ++ ++ ++ sm501_unit_power(info->dev->parent, SM501_GATE_GPIO, 1); ++ ++ for (i = 0; i < 3; i++) ++ add_pwm(i, info); ++ ++ dev_info(dev, "SM501 PWM Found at %lx irq %d\n", ++ (unsigned long)info->res->start, info->irq); ++ ++ info->debugfs = debugfs_create_file("pwm", S_IFREG | S_IRUGO, ++ NULL, info, &sm501pwm_fops); ++ ++ ++ return 0; ++ ++err_map: ++ iounmap(info->regs); ++ ++err_mem: ++ release_mem_region(res->start, res_len); ++ ++err_alloc: ++ kfree(info); ++ platform_set_drvdata(pdev, NULL); ++err: ++ return ret; ++} ++ ++static int sm501pwm_remove(struct platform_device *pdev) ++{ ++ struct sm501pwm_info *info = platform_get_drvdata(pdev); ++ int i; ++ ++ if (info->debugfs) ++ debugfs_remove(info->debugfs); ++ ++ for (i = 0; i < 3; i++) { ++ pwm_disable(&info->pwm[i]); ++ del_pwm(i, info); ++ } ++ ++ sm501_unit_power(info->dev->parent, SM501_GATE_GPIO, 0); ++ sm501_modify_reg(info->dev->parent, SM501_IRQ_STATUS, 0, 1<<22); ++ ++ free_irq(info->irq, info); ++ iounmap(info->regs); ++ release_mem_region(info->res->start, ++ (info->res->end - info->res->start)+1); ++ kfree(info); ++ platform_set_drvdata(pdev, NULL); ++ ++ return 0; ++} ++ ++static struct platform_driver sm501pwm_driver = { ++ .probe = sm501pwm_probe, ++ .remove = sm501pwm_remove, ++ .driver = { ++ .name = drv_name, ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++static int __devinit sm501pwm_init(void) ++{ ++ return platform_driver_register(&sm501pwm_driver); ++} ++ ++static void __exit sm501pwm_cleanup(void) ++{ ++ platform_driver_unregister(&sm501pwm_driver); ++} ++ ++module_init(sm501pwm_init); ++module_exit(sm501pwm_cleanup); ++ ++MODULE_AUTHOR("Arnaud Patard "); ++MODULE_DESCRIPTION("SM501 PWM driver"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("platform:sm501-pwm"); +diff --git a/arch/mips/loongson/lemote-2f/Makefile b/arch/mips/loongson/lemote-2f/Makefile +index 4f9eaa3..f945bd7a 100644 +--- a/arch/mips/loongson/lemote-2f/Makefile ++++ b/arch/mips/loongson/lemote-2f/Makefile +@@ -2,7 +2,7 @@ + # Makefile for lemote loongson2f family machines + # + +-obj-y += clock.o machtype.o irq.o reset.o ec_kb3310b.o ++obj-y += clock.o machtype.o irq.o reset.o ec_kb3310b.o platform.o + + # + # Suspend Support +diff --git a/arch/mips/loongson/lemote-2f/ec_kb3310b.c b/arch/mips/loongson/lemote-2f/ec_kb3310b.c +index 2b666d3..88ef558 100644 +--- a/arch/mips/loongson/lemote-2f/ec_kb3310b.c ++++ b/arch/mips/loongson/lemote-2f/ec_kb3310b.c +@@ -14,7 +14,7 @@ + #include + #include + +-#include "ec_kb3310b.h" ++#include + + static DEFINE_SPINLOCK(index_access_lock); + static DEFINE_SPINLOCK(port_access_lock); +@@ -76,12 +76,9 @@ int ec_query_seq(unsigned char cmd) + spin_unlock_irqrestore(&port_access_lock, flags); + + if (timeout <= 0) { +- printk(KERN_ERR "%s: deadable error : timeout...\n", __func__); ++ pr_err("%s: deadable error : timeout...\n", __func__); + ret = -EINVAL; +- } else +- printk(KERN_INFO +- "(%x/%d)ec issued command %d status : 0x%x\n", +- timeout, EC_CMD_TIMEOUT - timeout, cmd, status); ++ } + + return ret; + } +@@ -116,8 +113,7 @@ int ec_get_event_num(void) + udelay(EC_REG_DELAY); + } + if (timeout <= 0) { +- pr_info("%s: get event number timeout.\n", __func__); +- ++ pr_err("%s: get event number timeout.\n", __func__); + return -EINVAL; + } + value = inb(EC_DAT_PORT); +diff --git a/arch/mips/loongson/lemote-2f/ec_kb3310b.h b/arch/mips/loongson/lemote-2f/ec_kb3310b.h +deleted file mode 100644 +index 5a3f186..0000000 +--- a/arch/mips/loongson/lemote-2f/ec_kb3310b.h ++++ /dev/null +@@ -1,188 +0,0 @@ +-/* +- * KB3310B Embedded Controller +- * +- * Copyright (C) 2008 Lemote Inc. +- * Author: liujl , 2008-03-14 +- * +- * 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. +- */ +- +-#ifndef _EC_KB3310B_H +-#define _EC_KB3310B_H +- +-extern unsigned char ec_read(unsigned short addr); +-extern void ec_write(unsigned short addr, unsigned char val); +-extern int ec_query_seq(unsigned char cmd); +-extern int ec_query_event_num(void); +-extern int ec_get_event_num(void); +- +-typedef int (*sci_handler) (int status); +-extern sci_handler yeeloong_report_lid_status; +- +-#define SCI_IRQ_NUM 0x0A +- +-/* +- * The following registers are determined by the EC index configuration. +- * 1, fill the PORT_HIGH as EC register high part. +- * 2, fill the PORT_LOW as EC register low part. +- * 3, fill the PORT_DATA as EC register write data or get the data from it. +- */ +-#define EC_IO_PORT_HIGH 0x0381 +-#define EC_IO_PORT_LOW 0x0382 +-#define EC_IO_PORT_DATA 0x0383 +- +-/* +- * EC delay time is 500us for register and status access +- */ +-#define EC_REG_DELAY 500 /* unit : us */ +-#define EC_CMD_TIMEOUT 0x1000 +- +-/* +- * EC access port for SCI communication +- */ +-#define EC_CMD_PORT 0x66 +-#define EC_STS_PORT 0x66 +-#define EC_DAT_PORT 0x62 +-#define CMD_INIT_IDLE_MODE 0xdd +-#define CMD_EXIT_IDLE_MODE 0xdf +-#define CMD_INIT_RESET_MODE 0xd8 +-#define CMD_REBOOT_SYSTEM 0x8c +-#define CMD_GET_EVENT_NUM 0x84 +-#define CMD_PROGRAM_PIECE 0xda +- +-/* temperature & fan registers */ +-#define REG_TEMPERATURE_VALUE 0xF458 +-#define REG_FAN_AUTO_MAN_SWITCH 0xF459 +-#define BIT_FAN_AUTO 0 +-#define BIT_FAN_MANUAL 1 +-#define REG_FAN_CONTROL 0xF4D2 +-#define BIT_FAN_CONTROL_ON (1 << 0) +-#define BIT_FAN_CONTROL_OFF (0 << 0) +-#define REG_FAN_STATUS 0xF4DA +-#define BIT_FAN_STATUS_ON (1 << 0) +-#define BIT_FAN_STATUS_OFF (0 << 0) +-#define REG_FAN_SPEED_HIGH 0xFE22 +-#define REG_FAN_SPEED_LOW 0xFE23 +-#define REG_FAN_SPEED_LEVEL 0xF4CC +-/* fan speed divider */ +-#define FAN_SPEED_DIVIDER 480000 /* (60*1000*1000/62.5/2)*/ +- +-/* battery registers */ +-#define REG_BAT_DESIGN_CAP_HIGH 0xF77D +-#define REG_BAT_DESIGN_CAP_LOW 0xF77E +-#define REG_BAT_FULLCHG_CAP_HIGH 0xF780 +-#define REG_BAT_FULLCHG_CAP_LOW 0xF781 +-#define REG_BAT_DESIGN_VOL_HIGH 0xF782 +-#define REG_BAT_DESIGN_VOL_LOW 0xF783 +-#define REG_BAT_CURRENT_HIGH 0xF784 +-#define REG_BAT_CURRENT_LOW 0xF785 +-#define REG_BAT_VOLTAGE_HIGH 0xF786 +-#define REG_BAT_VOLTAGE_LOW 0xF787 +-#define REG_BAT_TEMPERATURE_HIGH 0xF788 +-#define REG_BAT_TEMPERATURE_LOW 0xF789 +-#define REG_BAT_RELATIVE_CAP_HIGH 0xF492 +-#define REG_BAT_RELATIVE_CAP_LOW 0xF493 +-#define REG_BAT_VENDOR 0xF4C4 +-#define FLAG_BAT_VENDOR_SANYO 0x01 +-#define FLAG_BAT_VENDOR_SIMPLO 0x02 +-#define REG_BAT_CELL_COUNT 0xF4C6 +-#define FLAG_BAT_CELL_3S1P 0x03 +-#define FLAG_BAT_CELL_3S2P 0x06 +-#define REG_BAT_CHARGE 0xF4A2 +-#define FLAG_BAT_CHARGE_DISCHARGE 0x01 +-#define FLAG_BAT_CHARGE_CHARGE 0x02 +-#define FLAG_BAT_CHARGE_ACPOWER 0x00 +-#define REG_BAT_STATUS 0xF4B0 +-#define BIT_BAT_STATUS_LOW (1 << 5) +-#define BIT_BAT_STATUS_DESTROY (1 << 2) +-#define BIT_BAT_STATUS_FULL (1 << 1) +-#define BIT_BAT_STATUS_IN (1 << 0) +-#define REG_BAT_CHARGE_STATUS 0xF4B1 +-#define BIT_BAT_CHARGE_STATUS_OVERTEMP (1 << 2) +-#define BIT_BAT_CHARGE_STATUS_PRECHG (1 << 1) +-#define REG_BAT_STATE 0xF482 +-#define BIT_BAT_STATE_CHARGING (1 << 1) +-#define BIT_BAT_STATE_DISCHARGING (1 << 0) +-#define REG_BAT_POWER 0xF440 +-#define BIT_BAT_POWER_S3 (1 << 2) +-#define BIT_BAT_POWER_ON (1 << 1) +-#define BIT_BAT_POWER_ACIN (1 << 0) +- +-/* other registers */ +-/* Audio: rd/wr */ +-#define REG_AUDIO_VOLUME 0xF46C +-#define REG_AUDIO_MUTE 0xF4E7 +-#define REG_AUDIO_BEEP 0xF4D0 +-/* USB port power or not: rd/wr */ +-#define REG_USB0_FLAG 0xF461 +-#define REG_USB1_FLAG 0xF462 +-#define REG_USB2_FLAG 0xF463 +-#define BIT_USB_FLAG_ON 1 +-#define BIT_USB_FLAG_OFF 0 +-/* LID */ +-#define REG_LID_DETECT 0xF4BD +-#define BIT_LID_DETECT_ON 1 +-#define BIT_LID_DETECT_OFF 0 +-/* CRT */ +-#define REG_CRT_DETECT 0xF4AD +-#define BIT_CRT_DETECT_PLUG 1 +-#define BIT_CRT_DETECT_UNPLUG 0 +-/* LCD backlight brightness adjust: 9 levels */ +-#define REG_DISPLAY_BRIGHTNESS 0xF4F5 +-/* Black screen Status */ +-#define BIT_DISPLAY_LCD_ON 1 +-#define BIT_DISPLAY_LCD_OFF 0 +-/* LCD backlight control: off/restore */ +-#define REG_BACKLIGHT_CTRL 0xF7BD +-#define BIT_BACKLIGHT_ON 1 +-#define BIT_BACKLIGHT_OFF 0 +-/* Reset the machine auto-clear: rd/wr */ +-#define REG_RESET 0xF4EC +-#define BIT_RESET_ON 1 +-/* Light the led: rd/wr */ +-#define REG_LED 0xF4C8 +-#define BIT_LED_RED_POWER (1 << 0) +-#define BIT_LED_ORANGE_POWER (1 << 1) +-#define BIT_LED_GREEN_CHARGE (1 << 2) +-#define BIT_LED_RED_CHARGE (1 << 3) +-#define BIT_LED_NUMLOCK (1 << 4) +-/* Test led mode, all led on/off */ +-#define REG_LED_TEST 0xF4C2 +-#define BIT_LED_TEST_IN 1 +-#define BIT_LED_TEST_OUT 0 +-/* Camera on/off */ +-#define REG_CAMERA_STATUS 0xF46A +-#define BIT_CAMERA_STATUS_ON 1 +-#define BIT_CAMERA_STATUS_OFF 0 +-#define REG_CAMERA_CONTROL 0xF7B7 +-#define BIT_CAMERA_CONTROL_OFF 0 +-#define BIT_CAMERA_CONTROL_ON 1 +-/* Wlan Status */ +-#define REG_WLAN 0xF4FA +-#define BIT_WLAN_ON 1 +-#define BIT_WLAN_OFF 0 +-#define REG_DISPLAY_LCD 0xF79F +- +-/* SCI Event Number from EC */ +-enum { +- EVENT_LID = 0x23, /* LID open/close */ +- EVENT_DISPLAY_TOGGLE, /* Fn+F3 for display switch */ +- EVENT_SLEEP, /* Fn+F1 for entering sleep mode */ +- EVENT_OVERTEMP, /* Over-temperature happened */ +- EVENT_CRT_DETECT, /* CRT is connected */ +- EVENT_CAMERA, /* Camera on/off */ +- EVENT_USB_OC2, /* USB2 Over Current occurred */ +- EVENT_USB_OC0, /* USB0 Over Current occurred */ +- EVENT_BLACK_SCREEN, /* Turn on/off backlight */ +- EVENT_AUDIO_MUTE, /* Mute on/off */ +- EVENT_DISPLAY_BRIGHTNESS,/* LCD backlight brightness adjust */ +- EVENT_AC_BAT, /* AC & Battery relative issue */ +- EVENT_AUDIO_VOLUME, /* Volume adjust */ +- EVENT_WLAN, /* Wlan on/off */ +- EVENT_END +-}; +- +-#endif /* !_EC_KB3310B_H */ +diff --git a/arch/mips/loongson/lemote-2f/irq.c b/arch/mips/loongson/lemote-2f/irq.c +index 6f8682e..2d54037 100644 +--- a/arch/mips/loongson/lemote-2f/irq.c ++++ b/arch/mips/loongson/lemote-2f/irq.c +@@ -11,9 +11,7 @@ + #include + #include + +-#include + #include +-#include + + #include + #include +@@ -117,11 +115,6 @@ void __init mach_init_irq(void) + LOONGSON_INTPOL = LOONGSON_INT_BIT_INT0 | LOONGSON_INT_BIT_INT1; + LOONGSON_INTEDGE &= ~(LOONGSON_INT_BIT_INT0 | LOONGSON_INT_BIT_INT1); + +- /* Sets the first-level interrupt dispatcher. */ +- mips_cpu_irq_init(); +- init_i8259_irqs(); +- bonito_irq_init(); +- + /* setup north bridge irq (bonito) */ + setup_irq(LOONGSON_NORTH_BRIDGE_IRQ, &ip6_irqaction); + /* setup source bridge irq (i8259) */ +diff --git a/arch/mips/loongson/lemote-2f/platform.c b/arch/mips/loongson/lemote-2f/platform.c +new file mode 100644 +index 0000000..5316360 +--- /dev/null ++++ b/arch/mips/loongson/lemote-2f/platform.c +@@ -0,0 +1,48 @@ ++/* ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin, wuzhangjin@gmail.com ++ * ++ * 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. ++ */ ++ ++#include ++#include ++ ++#include ++ ++static struct platform_device yeeloong_pdev = { ++ .name = "yeeloong_laptop", ++ .id = -1, ++}; ++ ++static struct platform_device lynloong_pdev = { ++ .name = "lynloong_pc", ++ .id = -1, ++}; ++ ++static int __init lemote2f_platform_init(void) ++{ ++ struct platform_device *pdev = NULL; ++ ++ switch (mips_machtype) { ++ case MACH_LEMOTE_YL2F89: ++ pdev = &yeeloong_pdev; ++ break; ++ case MACH_LEMOTE_LL2F: ++ pdev = &lynloong_pdev; ++ break; ++ default: ++ break; ++ ++ } ++ ++ if (pdev != NULL) ++ return platform_device_register(pdev); ++ ++ return -ENODEV; ++} ++ ++arch_initcall(lemote2f_platform_init); +diff --git a/arch/mips/loongson/lemote-2f/pm.c b/arch/mips/loongson/lemote-2f/pm.c +index cac4d38..b82ab17 100644 +--- a/arch/mips/loongson/lemote-2f/pm.c ++++ b/arch/mips/loongson/lemote-2f/pm.c +@@ -23,7 +23,7 @@ + #include + + #include +-#include "ec_kb3310b.h" ++#include + + #define I8042_KBD_IRQ 1 + #define I8042_CTR_KBDINT 0x01 +@@ -88,7 +88,7 @@ EXPORT_SYMBOL(yeeloong_report_lid_status); + static void yeeloong_lid_update_task(struct work_struct *work) + { + if (yeeloong_report_lid_status) +- yeeloong_report_lid_status(BIT_LID_DETECT_ON); ++ yeeloong_report_lid_status(ON); + } + + int wakeup_loongson(void) +@@ -100,7 +100,7 @@ int wakeup_loongson(void) + if (irq < 0) + return 0; + +- printk(KERN_INFO "%s: irq = %d\n", __func__, irq); ++ pr_debug("%s: irq = %d\n", __func__, irq); + + if (irq == I8042_KBD_IRQ) + return 1; +@@ -118,7 +118,7 @@ int wakeup_loongson(void) + /* check the LID status */ + lid_status = ec_read(REG_LID_DETECT); + /* wakeup cpu when people open the LID */ +- if (lid_status == BIT_LID_DETECT_ON) { ++ if (lid_status == ON) { + /* If we call it directly here, the WARNING + * will be sent out by getnstimeofday + * via "WARN_ON(timekeeping_suspended);" +@@ -140,10 +140,10 @@ int wakeup_loongson(void) + + void __weak mach_suspend(void) + { +- disable_mfgpt0_counter(); ++ disable_mfgpt_counter(); + } + + void __weak mach_resume(void) + { +- enable_mfgpt0_counter(); ++ enable_mfgpt_counter(); + } +diff --git a/arch/mips/loongson/lemote-2f/reset.c b/arch/mips/loongson/lemote-2f/reset.c +index 90962a3..5d3d95b 100644 +--- a/arch/mips/loongson/lemote-2f/reset.c ++++ b/arch/mips/loongson/lemote-2f/reset.c +@@ -20,15 +20,14 @@ + #include + + #include +-#include "ec_kb3310b.h" ++#include + + static void reset_cpu(void) + { + /* +- * reset cpu to full speed, this is needed when enabling cpu frequency +- * scalling ++ * reset cpu to full speed + */ +- LOONGSON_CHIPCFG0 |= 0x7; ++ LOONGSON_CHIPCFG0 |= 7; + } + + /* reset support for fuloong2f */ +@@ -81,7 +80,7 @@ void ml2f_reboot(void) + reset_cpu(); + + /* sending an reset signal to EC(embedded controller) */ +- ec_write(REG_RESET, BIT_RESET_ON); ++ ec_write(REG_RESET, ON); + } + + #define yl2f89_reboot ml2f_reboot +diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c +index f03771900..85c2a15 100644 +--- a/arch/mips/math-emu/cp1emu.c ++++ b/arch/mips/math-emu/cp1emu.c +@@ -7,6 +7,9 @@ + * Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com + * Copyright (C) 2000 MIPS Technologies, Inc. + * ++ * Loongson instruction support ++ * Copyright (C) 2011 Mark H Weaver ++ * + * This program is free software; you can distribute it and/or modify it + * under the terms of the GNU General Public License (Version 2) as + * published by the Free Software Foundation. +@@ -58,6 +61,14 @@ + #endif + #define __mips 4 + ++#ifdef __loongson_fp ++#undef __loongson_fp ++#endif ++#if __mips >= 4 && __mips != 32 ++/* Include support for Loongson floating point instructions */ ++#define __loongson_fp 1 ++#endif ++ + /* Function which emulates a floating point instruction. */ + + static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *, +@@ -67,6 +78,10 @@ static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *, + static int fpux_emu(struct pt_regs *, + struct mips_fpu_struct *, mips_instruction, void *__user *); + #endif ++#ifdef __loongson_fp ++static int loongson_spec2_emu(struct pt_regs *, ++ struct mips_fpu_struct *, mips_instruction, void *__user *); ++#endif + + /* Further private data for which no space exists in mips_fpu_struct */ + +@@ -884,6 +899,14 @@ static inline int cop1_64bit(struct pt_regs *xcp) + #define DPFROMREG(dp, x) DIFROMREG((dp).bits, x) + #define DPTOREG(dp, x) DITOREG((dp).bits, x) + ++/* Support for Loongson paired single floating-point format */ ++#define PSIFROMREG(si1, si2, x) ({ u64 di; DIFROMREG(di, x); \ ++ (si1) = (u32)di; (si2) = (u32)(di >> 32); }) ++#define PSITOREG(si1, si2, x) DITOREG((si1) | ((u64)(si2) << 32), x) ++ ++#define PSPFROMREG(sp1, sp2, x) PSIFROMREG((sp1).bits, (sp2).bits, x) ++#define PSPTOREG(sp1, sp2, x) PSITOREG((sp1).bits, (sp2).bits, x) ++ + /* + * Emulate the single floating point instruction pointed at by EPC. + * Two instructions if the instruction is in a branch delay slot. +@@ -1260,6 +1283,15 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + #endif + ++#ifdef __loongson_fp ++ case spec2_op:{ ++ int sig = loongson_spec2_emu(xcp, ctx, ir, fault_addr); ++ if (sig) ++ return sig; ++ break; ++ } ++#endif ++ + default: + return SIGILL; + } +@@ -1338,6 +1370,172 @@ DEF3OP(msub, dp, ieee754dp_mul, ieee754dp_sub, ); + DEF3OP(nmadd, dp, ieee754dp_mul, ieee754dp_add, ieee754dp_neg); + DEF3OP(nmsub, dp, ieee754dp_mul, ieee754dp_sub, ieee754dp_neg); + ++#ifdef __loongson_fp ++static int loongson_spec2_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, ++ mips_instruction ir, void *__user *fault_addr) ++{ ++ int rfmt; /* resulting format */ ++ unsigned rcsr = 0; /* resulting csr */ ++ union { ++ ieee754dp d; ++ struct { ++ ieee754sp s; ++ ieee754sp s2; ++ }; ++ } rv; /* resulting value */ ++ ++ /* XXX maybe add a counter for loongson spec2 fp instructions? */ ++ /* MIPS_FPU_EMU_INC_STATS(cp1xops); */ ++ ++ switch (rfmt = (MIPSInst_FFMT(ir) & 0xf)) { ++ case s_fmt:{ ++ ieee754sp(*handler) (ieee754sp, ieee754sp, ieee754sp); ++ ieee754sp fd, fs, ft; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ case loongson_madd_op: ++ handler = fpemu_sp_madd; ++ goto scoptop; ++ case loongson_msub_op: ++ handler = fpemu_sp_msub; ++ goto scoptop; ++ case loongson_nmadd_op: ++ handler = fpemu_sp_nmadd; ++ goto scoptop; ++ case loongson_nmsub_op: ++ handler = fpemu_sp_nmsub; ++ goto scoptop; ++ ++ scoptop: ++ SPFROMREG(fd, MIPSInst_FD(ir)); ++ SPFROMREG(fs, MIPSInst_FS(ir)); ++ SPFROMREG(ft, MIPSInst_FT(ir)); ++ rv.s = (*handler) (fd, fs, ft); ++ ++ copcsr: ++ if (ieee754_cxtest(IEEE754_INEXACT)) ++ rcsr |= FPU_CSR_INE_X | FPU_CSR_INE_S; ++ if (ieee754_cxtest(IEEE754_UNDERFLOW)) ++ rcsr |= FPU_CSR_UDF_X | FPU_CSR_UDF_S; ++ if (ieee754_cxtest(IEEE754_OVERFLOW)) ++ rcsr |= FPU_CSR_OVF_X | FPU_CSR_OVF_S; ++ if (ieee754_cxtest(IEEE754_INVALID_OPERATION)) ++ rcsr |= FPU_CSR_INV_X | FPU_CSR_INV_S; ++ ++ break; ++ ++ default: ++ return SIGILL; ++ } ++ break; ++ } ++ ++ case d_fmt:{ ++ ieee754dp(*handler) (ieee754dp, ieee754dp, ieee754dp); ++ ieee754dp fd, fs, ft; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ case loongson_madd_op: ++ handler = fpemu_dp_madd; ++ goto dcoptop; ++ case loongson_msub_op: ++ handler = fpemu_dp_msub; ++ goto dcoptop; ++ case loongson_nmadd_op: ++ handler = fpemu_dp_nmadd; ++ goto dcoptop; ++ case loongson_nmsub_op: ++ handler = fpemu_dp_nmsub; ++ goto dcoptop; ++ ++ dcoptop: ++ DPFROMREG(fd, MIPSInst_FD(ir)); ++ DPFROMREG(fs, MIPSInst_FS(ir)); ++ DPFROMREG(ft, MIPSInst_FT(ir)); ++ rv.d = (*handler) (fd, fs, ft); ++ goto copcsr; ++ ++ default: ++ return SIGILL; ++ } ++ break; ++ } ++ ++ case ps_fmt:{ ++ ieee754sp(*handler) (ieee754sp, ieee754sp, ieee754sp); ++ struct _ieee754_csr ieee754_csr_save; ++ ieee754sp fd1, fs1, ft1; ++ ieee754sp fd2, fs2, ft2; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ case loongson_madd_op: ++ handler = fpemu_sp_madd; ++ goto pscoptop; ++ case loongson_msub_op: ++ handler = fpemu_sp_msub; ++ goto pscoptop; ++ case loongson_nmadd_op: ++ handler = fpemu_sp_nmadd; ++ goto pscoptop; ++ case loongson_nmsub_op: ++ handler = fpemu_sp_nmsub; ++ goto pscoptop; ++ ++ pscoptop: ++ PSPFROMREG(fd1, fd2, MIPSInst_FD(ir)); ++ PSPFROMREG(fs1, fs2, MIPSInst_FS(ir)); ++ PSPFROMREG(ft1, ft2, MIPSInst_FT(ir)); ++ rv.s = (*handler) (fd1, fs1, ft1); ++ ieee754_csr_save = ieee754_csr; ++ rv.s2 = (*handler) (fd2, fs2, ft2); ++ ieee754_csr.cx |= ieee754_csr_save.cx; ++ ieee754_csr.sx |= ieee754_csr_save.sx; ++ goto copcsr; ++ ++ default: ++ return SIGILL; ++ } ++ break; ++ } ++ ++ default: ++ return SIGILL; ++ } ++ ++ /* ++ * Update the fpu CSR register for this operation. ++ * If an exception is required, generate a tidy SIGFPE exception, ++ * without updating the result register. ++ * Note: cause exception bits do not accumulate, they are rewritten ++ * for each op; only the flag/sticky bits accumulate. ++ */ ++ ctx->fcr31 = (ctx->fcr31 & ~FPU_CSR_ALL_X) | rcsr; ++ if ((ctx->fcr31 >> 5) & ctx->fcr31 & FPU_CSR_ALL_E) { ++ /*printk ("SIGFPE: fpu csr = %08x\n",ctx->fcr31); */ ++ return SIGFPE; ++ } ++ ++ /* ++ * Now we can safely write the result back to the register file. ++ */ ++ switch (rfmt) { ++ case d_fmt: ++ DPTOREG(rv.d, MIPSInst_FD(ir)); ++ break; ++ case s_fmt: ++ SPTOREG(rv.s, MIPSInst_FD(ir)); ++ break; ++ case ps_fmt: ++ PSPTOREG(rv.s, rv.s2, MIPSInst_FD(ir)); ++ break; ++ default: ++ return SIGILL; ++ } ++ ++ return 0; ++} ++#endif ++ + static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + mips_instruction ir, void *__user *fault_addr) + { +@@ -1431,7 +1629,7 @@ static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + + default: +- return SIGILL; ++ goto SIGILL_unless_prefx_op; + } + break; + } +@@ -1501,19 +1699,17 @@ static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + goto copcsr; + + default: +- return SIGILL; ++ goto SIGILL_unless_prefx_op; + } + break; + } + +- case 0x7: /* 7 */ +- if (MIPSInst_FUNC(ir) != pfetch_op) { +- return SIGILL; +- } +- /* ignore prefx operation */ +- break; +- + default: ++ SIGILL_unless_prefx_op: ++ if (MIPSInst_FUNC(ir) == prefx_op) { ++ /* ignore prefx operation */ ++ break; ++ } + return SIGILL; + } + +@@ -1534,7 +1730,12 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + unsigned cond; + union { + ieee754dp d; +- ieee754sp s; ++ struct { ++ ieee754sp s; ++#ifdef __loongson_fp ++ ieee754sp s2; /* for Loongson paired singles */ ++#endif ++ }; + int w; + #ifdef __mips64 + s64 l; +@@ -1606,7 +1807,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + case fmov_op: + /* an easy one */ + SPFROMREG(rv.s, MIPSInst_FS(ir)); +- goto copcsr; ++ break; + + /* binary op on handler */ + scopbop: +@@ -1793,7 +1994,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + case fmov_op: + /* an easy one */ + DPFROMREG(rv.d, MIPSInst_FS(ir)); +- goto copcsr; ++ break; + + /* binary op on handler */ + dcopbop:{ +@@ -1904,6 +2105,83 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + } + ++#ifdef __loongson_fp ++ case ps_fmt:{ /* 6 */ ++ /* Support for Loongson paired single fp instructions */ ++ union { ++ ieee754sp(*b) (ieee754sp, ieee754sp); ++ ieee754sp(*u) (ieee754sp); ++ } handler; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ /* binary ops */ ++ case fadd_op: ++ handler.b = ieee754sp_add; ++ goto pscopbop; ++ case fsub_op: ++ handler.b = ieee754sp_sub; ++ goto pscopbop; ++ case fmul_op: ++ handler.b = ieee754sp_mul; ++ goto pscopbop; ++ ++ /* unary ops */ ++ case fabs_op: ++ handler.u = ieee754sp_abs; ++ goto pscopuop; ++ case fneg_op: ++ handler.u = ieee754sp_neg; ++ goto pscopuop; ++ case fmov_op: ++ /* an easy one */ ++ PSPFROMREG(rv.s, rv.s2, MIPSInst_FS(ir)); ++ break; ++ ++ pscopbop: /* paired binary op handler */ ++ { ++ struct _ieee754_csr ieee754_csr_save; ++ ieee754sp fs1, ft1; ++ ieee754sp fs2, ft2; ++ ++ PSPFROMREG(fs1, fs2, MIPSInst_FS(ir)); ++ PSPFROMREG(ft1, ft2, MIPSInst_FT(ir)); ++ rv.s = (*handler.b) (fs1, ft1); ++ ieee754_csr_save = ieee754_csr; ++ rv.s2 = (*handler.b) (fs2, ft2); ++ ieee754_csr.cx |= ieee754_csr_save.cx; ++ ieee754_csr.sx |= ieee754_csr_save.sx; ++ goto copcsr; ++ } ++ pscopuop: /* paired unary op handler */ ++ { ++ struct _ieee754_csr ieee754_csr_save; ++ ieee754sp fs1; ++ ieee754sp fs2; ++ ++ PSPFROMREG(fs1, fs2, MIPSInst_FS(ir)); ++ rv.s = (*handler.u) (fs1); ++ ieee754_csr_save = ieee754_csr; ++ rv.s2 = (*handler.u) (fs2); ++ ieee754_csr.cx |= ieee754_csr_save.cx; ++ ieee754_csr.sx |= ieee754_csr_save.sx; ++ goto copcsr; ++ } ++ break; ++ ++ default: ++ if (MIPSInst_FUNC(ir) >= fcmp_op) { ++ /* Loongson fp hardware handles all ++ cases of fp compare insns, so we ++ shouldn't have to */ ++ printk ("Loongson paired-single fp compare" ++ " unimplemented in cp1emu.c\n"); ++ } ++ return SIGILL; ++ } ++ break; ++ } ++#endif ++ + case w_fmt:{ + ieee754sp fs; + +@@ -1993,6 +2271,11 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + DITOREG(rv.l, MIPSInst_FD(ir)); + break; + #endif ++#ifdef __loongson_fp ++ case ps_fmt: ++ PSPTOREG(rv.s, rv.s2, MIPSInst_FD(ir)); ++ break; ++#endif + default: + return SIGILL; + } +diff --git a/arch/mips/mm/c-octeon.c b/arch/mips/mm/c-octeon.c +index 8557fb5..8b568ef 100644 +--- a/arch/mips/mm/c-octeon.c ++++ b/arch/mips/mm/c-octeon.c +@@ -188,7 +188,7 @@ static void __cpuinit probe_octeon(void) + struct cpuinfo_mips *c = ¤t_cpu_data; + + config1 = read_c0_config1(); +- switch (c->cputype) { ++ switch (current_cpu_type()) { + case CPU_CAVIUM_OCTEON: + case CPU_CAVIUM_OCTEON_PLUS: + c->icache.linesz = 2 << ((config1 >> 19) & 7); +diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c +index 21813be..d8ecfa6 100644 +--- a/arch/mips/mm/c-r4k.c ++++ b/arch/mips/mm/c-r4k.c +@@ -809,7 +809,7 @@ static void __cpuinit probe_pcache(void) + unsigned long config1; + unsigned int lsize; + +- switch (c->cputype) { ++ switch (current_cpu_type()) { + case CPU_R4600: /* QED style two way caches? */ + case CPU_R4700: + case CPU_R5000: +@@ -897,10 +897,10 @@ static void __cpuinit probe_pcache(void) + write_c0_config(config & ~VR41_CONF_P4K); + case CPU_VR4131: + /* Workaround for cache instruction bug of VR4131 */ +- if (c->processor_id == 0x0c80U || c->processor_id == 0x0c81U || +- c->processor_id == 0x0c82U) { ++ if (current_cpu_prid() == 0x0c80U || current_cpu_prid() == 0x0c81U || ++ current_cpu_prid() == 0x0c82U) { + config |= 0x00400000U; +- if (c->processor_id == 0x0c80U) ++ if (current_cpu_prid() == 0x0c80U) + config |= VR41_CONF_BP; + write_c0_config(config); + } else +@@ -1045,7 +1045,7 @@ static void __cpuinit probe_pcache(void) + * normally they'd suffer from aliases but magic in the hardware deals + * with that for us so we don't need to take care ourselves. + */ +- switch (c->cputype) { ++ switch (current_cpu_type()) { + case CPU_20KC: + case CPU_25KF: + case CPU_SB1: +@@ -1078,7 +1078,7 @@ static void __cpuinit probe_pcache(void) + c->dcache.flags |= MIPS_CACHE_ALIASES; + } + +- switch (c->cputype) { ++ switch (current_cpu_type()) { + case CPU_20KC: + /* + * Some older 20Kc chips doesn't have the 'VI' bit in +@@ -1207,7 +1207,7 @@ static void __cpuinit setup_scache(void) + * processors don't have a S-cache that would be relevant to the + * Linux memory management. + */ +- switch (c->cputype) { ++ switch (current_cpu_type()) { + case CPU_R4000SC: + case CPU_R4000MC: + case CPU_R4400SC: +@@ -1384,9 +1384,8 @@ static void __cpuinit r4k_cache_error_setup(void) + { + extern char __weak except_vec2_generic; + extern char __weak except_vec2_sb1; +- struct cpuinfo_mips *c = ¤t_cpu_data; + +- switch (c->cputype) { ++ switch (current_cpu_type()) { + case CPU_SB1: + case CPU_SB1A: + set_uncached_handler(0x100, &except_vec2_sb1, 0x80); +diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c +index 23129d10..27e33a4 100644 +--- a/arch/mips/mm/dma-default.c ++++ b/arch/mips/mm/dma-default.c +@@ -335,7 +335,7 @@ int mips_dma_supported(struct device *dev, u64 mask) + return plat_dma_supported(dev, mask); + } + +-void dma_cache_sync(struct device *dev, void *vaddr, size_t size, ++void mips_dma_cache_sync(struct device *dev, void *vaddr, size_t size, + enum dma_data_direction direction) + { + BUG_ON(direction == DMA_NONE); +@@ -345,8 +345,6 @@ void dma_cache_sync(struct device *dev, void *vaddr, size_t size, + __dma_sync_virtual(vaddr, size, direction); + } + +-EXPORT_SYMBOL(dma_cache_sync); +- + static struct dma_map_ops mips_default_dma_map_ops = { + .alloc = mips_dma_alloc_coherent, + .free = mips_dma_free_coherent, +diff --git a/arch/mips/mm/page.c b/arch/mips/mm/page.c +index 4eb8dcf..72207dc 100644 +--- a/arch/mips/mm/page.c ++++ b/arch/mips/mm/page.c +@@ -164,7 +164,7 @@ static void __cpuinit set_prefetch_parameters(void) + * hints are broken. + */ + if (current_cpu_type() == CPU_SB1 && +- (current_cpu_data.processor_id & 0xff) < 0x02) { ++ cpu_prid_rev() < 0x02) { + pref_src_mode = Pref_Load; + pref_dst_mode = Pref_Store; + } else { +diff --git a/arch/mips/mm/sc-mips.c b/arch/mips/mm/sc-mips.c +index df96da7..cceaaaf 100644 +--- a/arch/mips/mm/sc-mips.c ++++ b/arch/mips/mm/sc-mips.c +@@ -71,7 +71,7 @@ static inline int mips_sc_is_activated(struct cpuinfo_mips *c) + unsigned int tmp; + + /* Check the bypass bit (L2B) */ +- switch (c->cputype) { ++ switch (current_cpu_type()) { + case CPU_34K: + case CPU_74K: + case CPU_1004K: +diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c +index afeef93..b81da41 100644 +--- a/arch/mips/mm/tlbex.c ++++ b/arch/mips/mm/tlbex.c +@@ -138,7 +138,7 @@ static int scratchpad_offset(int i) + */ + static int __cpuinit m4kc_tlbp_war(void) + { +- return (current_cpu_data.processor_id & 0xffff00) == ++ return (current_cpu_prid() & 0xffff00) == + (PRID_COMP_MIPS | PRID_IMP_4KC); + } + +@@ -631,7 +631,7 @@ static void __cpuinit build_tlb_write_entry(u32 **p, struct uasm_label **l, + + default: + panic("No TLB refill handler yet (CPU type: %d)", +- current_cpu_data.cputype); ++ current_cpu_type()); + break; + } + } +diff --git a/arch/mips/oprofile/op_model_mipsxx.c b/arch/mips/oprofile/op_model_mipsxx.c +index e4b1140..6ffce07 100644 +--- a/arch/mips/oprofile/op_model_mipsxx.c ++++ b/arch/mips/oprofile/op_model_mipsxx.c +@@ -381,7 +381,7 @@ static int __init mipsxx_init(void) + break; + + case CPU_R10000: +- if ((current_cpu_data.processor_id & 0xff) == 0x20) ++ if (current_cpu_prid() == 0x20) + op_model_mipsxx_ops.cpu_type = "mips/r10000-v2.x"; + else + op_model_mipsxx_ops.cpu_type = "mips/r10000"; +diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile +index 2cb1d31..9491e3a 100644 +--- a/arch/mips/pci/Makefile ++++ b/arch/mips/pci/Makefile +@@ -29,6 +29,7 @@ obj-$(CONFIG_LASAT) += pci-lasat.o + obj-$(CONFIG_MIPS_COBALT) += fixup-cobalt.o + obj-$(CONFIG_LEMOTE_FULOONG2E) += fixup-fuloong2e.o ops-loongson2.o + obj-$(CONFIG_LEMOTE_MACH2F) += fixup-lemote2f.o ops-loongson2.o ++obj-$(CONFIG_DEXXON_GDIUM) += fixup-gdium.o ops-loongson2.o + obj-$(CONFIG_MIPS_MALTA) += fixup-malta.o + obj-$(CONFIG_PMC_MSP7120_GW) += fixup-pmcmsp.o ops-pmcmsp.o + obj-$(CONFIG_PMC_MSP7120_EVAL) += fixup-pmcmsp.o ops-pmcmsp.o +diff --git a/arch/mips/pci/fixup-gdium.c b/arch/mips/pci/fixup-gdium.c +new file mode 100644 +index 0000000..b296220 +--- /dev/null ++++ b/arch/mips/pci/fixup-gdium.c +@@ -0,0 +1,90 @@ ++/* ++ * Copyright (C) 2010 yajin ++ * ++ * 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. ++ */ ++ ++#include ++#include ++ ++#include ++/* ++ * http://www.pcidatabase.com ++ * GDIUM has different PCI mapping ++ * slot 13 (0x1814/0x0301) -> RaLink rt2561 Wireless-G PCI ++ * slog 14 (0x126f/0x0501) -> sm501 ++ * slot 15 (0x1033/0x0035) -> NEC Dual OHCI controllers ++ * plus Single EHCI controller ++ * slot 16 (0x10ec/0x8139) -> Realtek 8139c ++ * slot 17 (0x1033/0x00e0) -> NEC USB 2.0 Host Controller ++ */ ++ ++#undef INT_IRQA ++#undef INT_IRQB ++#undef INT_IRQC ++#undef INT_IRQD ++#define INT_IRQA 36 ++#define INT_IRQB 37 ++#define INT_IRQC 38 ++#define INT_IRQD 39 ++ ++int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) ++{ ++ int irq = 0; ++ ++ switch (slot) { ++ case 13: ++ irq = INT_IRQC + ((pin - 1) & 3); ++ break; ++ case 14: ++ irq = INT_IRQA; ++ break; ++ case 15: ++#if CONFIG_GDIUM_VERSION > 2 ++ irq = INT_IRQB; ++#else ++ irq = INT_IRQA + ((pin - 1) & 3); ++#endif ++ break; ++ case 16: ++ irq = INT_IRQD; ++ break; ++#if CONFIG_GDIUM_VERSION > 2 ++ case 17: ++ irq = INT_IRQC; ++ break; ++#endif ++ default: ++ pr_info(" strange pci slot number %d on gdium.\n", slot); ++ break; ++ } ++ return irq; ++} ++ ++/* Do platform specific device initialization at pci_enable_device() time */ ++int pcibios_plat_dev_init(struct pci_dev *dev) ++{ ++ return 0; ++} ++ ++/* Fixups for the USB host controllers */ ++static void __init gdium_usb_host_fixup(struct pci_dev *dev) ++{ ++ unsigned int val; ++ pci_read_config_dword(dev, 0xe0, &val); ++#if CONFIG_GDIUM_VERSION > 2 ++ pci_write_config_dword(dev, 0xe0, (val & ~3) | 0x3); ++#else ++ pci_write_config_dword(dev, 0xe0, (val & ~7) | 0x5); ++ pci_write_config_dword(dev, 0xe4, 1<<5); ++#endif ++} ++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_USB, ++ gdium_usb_host_fixup); ++#if CONFIG_GDIUM_VERSION > 2 ++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_CT_65550, ++ gdium_usb_host_fixup); ++#endif +diff --git a/arch/mips/pci/ops-loongson2.c b/arch/mips/pci/ops-loongson2.c +index 98254af..6b0f694 100644 +--- a/arch/mips/pci/ops-loongson2.c ++++ b/arch/mips/pci/ops-loongson2.c +@@ -22,6 +22,7 @@ + #ifdef CONFIG_CS5536 + #include + #include ++#include + #endif + + #define PCI_ACCESS_READ 0 +diff --git a/arch/mips/vr41xx/common/init.c b/arch/mips/vr41xx/common/init.c +index 23916321..aca5c76 100644 +--- a/arch/mips/vr41xx/common/init.c ++++ b/arch/mips/vr41xx/common/init.c +@@ -43,8 +43,8 @@ void __init plat_time_init(void) + vr41xx_calculate_clock_frequency(); + + tclock = vr41xx_get_tclock_frequency(); +- if (current_cpu_data.processor_id == PRID_VR4131_REV2_0 || +- current_cpu_data.processor_id == PRID_VR4131_REV2_1) ++ if (current_cpu_prid() == PRID_VR4131_REV2_0 || ++ current_cpu_prid() == PRID_VR4131_REV2_1) + mips_hpt_frequency = tclock / 2; + else + mips_hpt_frequency = tclock / 4; +diff --git a/drivers/ata/pata_cs5536.c b/drivers/ata/pata_cs5536.c +index 0448860..fa7cfab 100644 +--- a/drivers/ata/pata_cs5536.c ++++ b/drivers/ata/pata_cs5536.c +@@ -46,8 +46,6 @@ static int use_msr; + module_param_named(msr, use_msr, int, 0644); + MODULE_PARM_DESC(msr, "Force using MSR to configure IDE function (Default: 0)"); + #else +-#undef rdmsr /* avoid accidental MSR usage on, e.g. x86-64 */ +-#undef wrmsr + #define rdmsr(x, y, z) do { } while (0) + #define wrmsr(x, y, z) do { } while (0) + #define use_msr 0 +diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig +index bee88ee..fc9062f 100644 +--- a/drivers/hid/Kconfig ++++ b/drivers/hid/Kconfig +@@ -748,6 +748,13 @@ config HID_ZYDACRON + ---help--- + Support for Zydacron remote control. + ++config HID_GDIUM ++ bool "Gdium Fn keys support" if EMBEDDED ++ depends on USB_HID && DEXXON_GDIUM ++ default !EMBEDDED ++ ---help--- ++ Support for Functions keys available on Gdiums. ++ + config HID_SENSOR_HUB + tristate "HID Sensors framework support" + depends on HID && GENERIC_HARDIRQS +diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile +index 2065694..10b48f0 100644 +--- a/drivers/hid/Makefile ++++ b/drivers/hid/Makefile +@@ -115,6 +115,7 @@ obj-$(CONFIG_HID_ZEROPLUS) += hid-zpff.o + obj-$(CONFIG_HID_ZYDACRON) += hid-zydacron.o + obj-$(CONFIG_HID_WACOM) += hid-wacom.o + obj-$(CONFIG_HID_WALTOP) += hid-waltop.o ++obj-$(CONFIG_HID_GDIUM) += hid-gdium.o + obj-$(CONFIG_HID_WIIMOTE) += hid-wiimote.o + obj-$(CONFIG_HID_SENSOR_HUB) += hid-sensor-hub.o + +diff --git a/drivers/hid/hid-gdium.c b/drivers/hid/hid-gdium.c +new file mode 100644 +index 0000000..67cc095 +--- /dev/null ++++ b/drivers/hid/hid-gdium.c +@@ -0,0 +1,210 @@ ++/* ++ * hid-gdium -- Gdium laptop function keys ++ * ++ * Arnaud Patard ++ * ++ * Based on hid-apple.c ++ * ++ * 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. ++ */ ++ ++ ++#include ++#include ++#include ++#include ++ ++#include "hid-ids.h" ++ ++#define GDIUM_FN_ON 1 ++ ++static int fnmode = GDIUM_FN_ON; ++module_param(fnmode, int, 0644); ++MODULE_PARM_DESC(fnmode, "Mode of fn key on Gdium (0 = disabled, 1 = Enabled)"); ++ ++struct gdium_data { ++ unsigned int fn_on; ++}; ++ ++ ++struct gdium_key_translation { ++ u16 from; ++ u16 to; ++}; ++ ++static struct gdium_key_translation gdium_fn_keys[] = { ++ { KEY_F1, KEY_CAMERA }, ++ { KEY_F2, KEY_CONNECT }, ++ { KEY_F3, KEY_MUTE }, ++ { KEY_F4, KEY_VOLUMEUP}, ++ { KEY_F5, KEY_VOLUMEDOWN }, ++ { KEY_F6, KEY_SWITCHVIDEOMODE }, ++ { KEY_F7, KEY_F19 }, /* F7+12. Have to use existant keycodes */ ++ { KEY_F8, KEY_BRIGHTNESSUP }, ++ { KEY_F9, KEY_BRIGHTNESSDOWN }, ++ { KEY_F10, KEY_SLEEP }, ++ { KEY_F11, KEY_PROG1 }, ++ { KEY_F12, KEY_PROG2 }, ++ { KEY_UP, KEY_PAGEUP }, ++ { KEY_DOWN, KEY_PAGEDOWN }, ++ { KEY_INSERT, KEY_NUMLOCK }, ++ { KEY_DELETE, KEY_SCROLLLOCK }, ++ { KEY_T, KEY_STOPCD }, ++ { KEY_F, KEY_PREVIOUSSONG }, ++ { KEY_H, KEY_NEXTSONG }, ++ { KEY_G, KEY_PLAYPAUSE }, ++ { } ++}; ++ ++static struct gdium_key_translation *gdium_find_translation( ++ struct gdium_key_translation *table, u16 from) ++{ ++ struct gdium_key_translation *trans; ++ ++ /* Look for the translation */ ++ for (trans = table; trans->from; trans++) ++ if (trans->from == from) ++ return trans; ++ return NULL; ++} ++ ++static int hidinput_gdium_event(struct hid_device *hid, struct input_dev *input, ++ struct hid_usage *usage, __s32 value) ++{ ++ struct gdium_data *data = hid_get_drvdata(hid); ++ struct gdium_key_translation *trans; ++ int do_translate; ++ ++ if (usage->type != EV_KEY) ++ return 0; ++ ++ if ((usage->code == KEY_FN)) { ++ data->fn_on = !!value; ++ input_event(input, usage->type, usage->code, value); ++ return 1; ++ } ++ ++ if (fnmode) { ++ trans = gdium_find_translation(gdium_fn_keys, usage->code); ++ if (trans) { ++ do_translate = data->fn_on; ++ if (do_translate) { ++ input_event(input, usage->type, trans->to, value); ++ return 1; ++ } ++ } ++ } ++ ++ return 0; ++} ++ ++static int gdium_input_event(struct hid_device *hdev, struct hid_field *field, ++ struct hid_usage *usage, __s32 value) ++{ ++ if (!(hdev->claimed & HID_CLAIMED_INPUT) || !field->hidinput || !usage->type) ++ return 0; ++ ++ if (hidinput_gdium_event(hdev, field->hidinput->input, usage, value)) ++ return 1; ++ ++ return 0; ++} ++ ++ ++static void gdium_input_setup(struct input_dev *input) ++{ ++ struct gdium_key_translation *trans; ++ ++ set_bit(KEY_NUMLOCK, input->keybit); ++ ++ /* Enable all needed keys */ ++ for (trans = gdium_fn_keys; trans->from; trans++) ++ set_bit(trans->to, input->keybit); ++} ++ ++static int gdium_input_mapping(struct hid_device *hdev, struct hid_input *hi, ++ struct hid_field *field, struct hid_usage *usage, ++ unsigned long **bit, int *max) ++{ ++ if (((usage->hid & HID_USAGE_PAGE) == HID_UP_KEYBOARD) ++ && ((usage->hid & HID_USAGE) == 0x82)) { ++ hid_map_usage_clear(hi, usage, bit, max, EV_KEY, KEY_FN); ++ gdium_input_setup(hi->input); ++ return 1; ++ } ++ return 0; ++} ++ ++static int gdium_input_probe(struct hid_device *hdev, const struct hid_device_id *id) ++{ ++ struct gdium_data *data; ++ int ret; ++ ++ data = kzalloc(sizeof(*data), GFP_KERNEL); ++ if (!data) { ++ dev_err(&hdev->dev, "can't alloc gdium keyboard data\n"); ++ return -ENOMEM; ++ } ++ ++ hid_set_drvdata(hdev, data); ++ ++ ret = hid_parse(hdev); ++ if (ret) { ++ dev_err(&hdev->dev, "parse failed\n"); ++ goto err_free; ++ } ++ ++ ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); ++ if (ret) { ++ dev_err(&hdev->dev, "hw start failed\n"); ++ goto err_free; ++ } ++ ++ return 0; ++err_free: ++ kfree(data); ++ return ret; ++} ++static void gdium_input_remove(struct hid_device *hdev) ++{ ++ hid_hw_stop(hdev); ++ kfree(hid_get_drvdata(hdev)); ++} ++ ++static const struct hid_device_id gdium_input_devices[] = { ++ { HID_USB_DEVICE(USB_VENDOR_ID_GDIUM, USB_DEVICE_ID_GDIUM) }, ++ {} ++}; ++MODULE_DEVICE_TABLE(hid, gdium_input_devices); ++ ++static struct hid_driver gdium_input_driver = { ++ .name = "gdium-fnkeys", ++ .id_table = gdium_input_devices, ++ .probe = gdium_input_probe, ++ .remove = gdium_input_remove, ++ .event = gdium_input_event, ++ .input_mapping = gdium_input_mapping, ++}; ++ ++static int gdium_input_init(void) ++{ ++ int ret; ++ ++ ret = hid_register_driver(&gdium_input_driver); ++ if (ret) ++ pr_err("can't register gdium keyboard driver\n"); ++ ++ return ret; ++} ++static void gdium_input_exit(void) ++{ ++ hid_unregister_driver(&gdium_input_driver); ++} ++ ++module_init(gdium_input_init); ++module_exit(gdium_input_exit); ++MODULE_LICENSE("GPL"); ++ +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h +index a1e431f..84d07bc 100644 +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -912,6 +912,9 @@ + #define USB_VENDOR_ID_ZYTRONIC 0x14c8 + #define USB_DEVICE_ID_ZYTRONIC_ZXY100 0x0005 + ++#define USB_VENDOR_ID_GDIUM 0x04B4 ++#define USB_DEVICE_ID_GDIUM 0xe001 ++ + #define USB_VENDOR_ID_PRIMAX 0x0461 + #define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05 + +diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig +index d4fe13e..8c1daa0 100644 +--- a/drivers/i2c/busses/Kconfig ++++ b/drivers/i2c/busses/Kconfig +@@ -946,7 +946,7 @@ config SCx200_I2C_SDA + + config SCx200_ACB + tristate "Geode ACCESS.bus support" +- depends on X86_32 && PCI ++ depends on PCI + help + Enable the use of the ACCESS.bus controllers on the Geode SCx200 and + SC1100 processors and the CS5535 and CS5536 Geode companion devices. +diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c +index 376f2dc..b576801 100644 +--- a/drivers/ide/ide-iops.c ++++ b/drivers/ide/ide-iops.c +@@ -27,6 +27,10 @@ + #include + #include + ++#ifdef CONFIG_LEMOTE_MACH2F ++#include ++#endif ++ + void SELECT_MASK(ide_drive_t *drive, int mask) + { + const struct ide_port_ops *port_ops = drive->hwif->port_ops; +@@ -300,6 +304,11 @@ void ide_check_nien_quirk_list(ide_drive_t *drive) + { + const char **list, *m = (char *)&drive->id[ATA_ID_PROD]; + ++#ifdef CONFIG_LEMOTE_MACH2F ++ if (mips_machtype != MACH_LEMOTE_YL2F89) ++ return; ++#endif ++ + for (list = nien_quirk_list; *list != NULL; list++) + if (strstr(m, *list) != NULL) { + drive->dev_flags |= IDE_DFLAG_NIEN_QUIRK; +diff --git a/drivers/mfd/sm501.c b/drivers/mfd/sm501.c +index 9816c23..f83fd8a2 100644 +--- a/drivers/mfd/sm501.c ++++ b/drivers/mfd/sm501.c +@@ -58,7 +58,7 @@ struct sm501_gpio { + struct sm501_gpio { + /* no gpio support, empty definition for sm501_devdata. */ + }; +-#endif ++#endif /* CONFIG_MFD_SM501_GPIO */ + + struct sm501_devdata { + spinlock_t reg_lock; +@@ -1135,6 +1135,22 @@ static inline int sm501_gpio_isregistered(struct sm501_devdata *sm) + { + return sm->gpio.registered; + } ++ ++void sm501_configure_gpio(struct device *dev, unsigned int gpio, unsigned ++ char mode) ++{ ++ unsigned long set, reg, offset = gpio; ++ ++ if (offset >= 32) { ++ reg = SM501_GPIO63_32_CONTROL; ++ offset = gpio - 32; ++ } else ++ reg = SM501_GPIO31_0_CONTROL; ++ ++ set = mode ? 1 << offset : 0; ++ ++ sm501_modify_reg(dev, reg, set, 0); ++} + #else + static inline int sm501_register_gpio(struct sm501_devdata *sm) + { +@@ -1154,7 +1170,13 @@ static inline int sm501_gpio_isregistered(struct sm501_devdata *sm) + { + return 0; + } +-#endif ++ ++void sm501_configure_gpio(struct device *dev, unsigned int gpio, ++ unsigned char mode) ++{ ++} ++#endif /* CONFIG_MFD_SM501_GPIO */ ++EXPORT_SYMBOL_GPL(sm501_configure_gpio); + + static int sm501_register_gpio_i2c_instance(struct sm501_devdata *sm, + struct sm501_platdata_gpio_i2c *iic) +@@ -1209,6 +1231,20 @@ static int sm501_register_gpio_i2c(struct sm501_devdata *sm, + return 0; + } + ++/* register sm501 PWM device */ ++static int sm501_register_pwm(struct sm501_devdata *sm) ++{ ++ struct platform_device *pdev; ++ ++ pdev = sm501_create_subdev(sm, "sm501-pwm", 2, 0); ++ if (!pdev) ++ return -ENOMEM; ++ sm501_create_subio(sm, &pdev->resource[0], 0x10020, 0xC); ++ sm501_create_irq(sm, &pdev->resource[1]); ++ ++ return sm501_register_device(sm, pdev); ++} ++ + /* sm501_dbg_regs + * + * Debug attribute to attach to parent device to show core registers +@@ -1367,6 +1403,8 @@ static int sm501_init_dev(struct sm501_devdata *sm) + sm501_register_uart(sm, idata->devices); + if (idata->devices & SM501_USE_GPIO) + sm501_register_gpio(sm); ++ if (idata->devices & SM501_USE_PWM) ++ sm501_register_pwm(sm); + } + + if (pdata && pdata->gpio_i2c != NULL && pdata->gpio_i2c_nr > 0) { +@@ -1553,10 +1591,15 @@ static struct sm501_initdata sm501_pci_initdata = { + .devices = SM501_USE_ALL, + + /* Errata AB-3 says that 72MHz is the fastest available +- * for 33MHZ PCI with proper bus-mastering operation */ +- ++ * for 33MHZ PCI with proper bus-mastering operation ++ * For gdium, it works under 84&112M clock freq.*/ ++#ifdef CONFIG_DEXXON_GDIUM ++ .mclk = 84 * MHZ, ++ .m1xclk = 112 * MHZ, ++#else + .mclk = 72 * MHZ, + .m1xclk = 144 * MHZ, ++#endif + }; + + static struct sm501_platdata_fbsub sm501_pdata_fbsub = { +diff --git a/drivers/net/titan_ge.c b/drivers/net/titan_ge.c +new file mode 100644 +index 0000000..dc137bf8 +--- /dev/null ++++ b/drivers/net/titan_ge.c +@@ -0,0 +1,2069 @@ ++/* ++ * drivers/net/titan_ge.c - Driver for Titan ethernet ports ++ * ++ * Copyright (C) 2003 PMC-Sierra Inc. ++ * Author : Manish Lachwani (lachwani@pmc-sierra.com) ++ * ++ * 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. ++ */ ++ ++/* ++ * The MAC unit of the Titan consists of the following: ++ * ++ * -> XDMA Engine to move data to from the memory to the MAC packet FIFO ++ * -> FIFO is where the incoming and outgoing data is placed ++ * -> TRTG is the unit that pulls the data from the FIFO for Tx and pushes ++ * the data into the FIFO for Rx ++ * -> TMAC is the outgoing MAC interface and RMAC is the incoming. ++ * -> AFX is the address filtering block ++ * -> GMII block to communicate with the PHY ++ * ++ * Rx will look like the following: ++ * GMII --> RMAC --> AFX --> TRTG --> Rx FIFO --> XDMA --> CPU memory ++ * ++ * Tx will look like the following: ++ * CPU memory --> XDMA --> Tx FIFO --> TRTG --> TMAC --> GMII ++ * ++ * The Titan driver has support for the following performance features: ++ * -> Rx side checksumming ++ * -> Jumbo Frames ++ * -> Interrupt Coalscing ++ * -> Rx NAPI ++ * -> SKB Recycling ++ * -> Transmit/Receive descriptors in SRAM ++ * -> Fast routing for IP forwarding ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* For MII specifc registers, titan_mdio.h should be included */ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "titan_ge.h" ++#include "titan_mdio.h" ++ ++/* Static Function Declarations */ ++static int titan_ge_eth_open(struct net_device *); ++static void titan_ge_eth_stop(struct net_device *); ++static struct net_device_stats *titan_ge_get_stats(struct net_device *); ++static int titan_ge_init_rx_desc_ring(titan_ge_port_info *, int, int, ++ unsigned long, unsigned long, ++ unsigned long); ++static int titan_ge_init_tx_desc_ring(titan_ge_port_info *, int, ++ unsigned long, unsigned long); ++ ++static int titan_ge_open(struct net_device *); ++static int titan_ge_start_xmit(struct sk_buff *, struct net_device *); ++static int titan_ge_stop(struct net_device *); ++ ++static unsigned long titan_ge_tx_coal(unsigned long, int); ++ ++static void titan_ge_port_reset(unsigned int); ++static int titan_ge_free_tx_queue(titan_ge_port_info *); ++static int titan_ge_rx_task(struct net_device *, titan_ge_port_info *); ++static int titan_ge_port_start(struct net_device *, titan_ge_port_info *); ++ ++static int titan_ge_return_tx_desc(titan_ge_port_info *, int); ++ ++/* ++ * Some configuration for the FIFO and the XDMA channel needs ++ * to be done only once for all the ports. This flag controls ++ * that ++ */ ++static unsigned long config_done; ++ ++/* ++ * One time out of memory flag ++ */ ++static unsigned int oom_flag; ++ ++static int titan_ge_poll(struct net_device *netdev, int *budget); ++ ++static int titan_ge_receive_queue(struct net_device *, unsigned int); ++ ++static struct platform_device *titan_ge_device[3]; ++ ++/* MAC Address */ ++extern unsigned char titan_ge_mac_addr_base[6]; ++ ++unsigned long titan_ge_base; ++static unsigned long titan_ge_sram; ++ ++static char titan_string[] = "titan"; ++ ++/* ++ * The Titan GE has two alignment requirements: ++ * -> skb->data to be cacheline aligned (32 byte) ++ * -> IP header alignment to 16 bytes ++ * ++ * The latter is not implemented. So, that results in an extra copy on ++ * the Rx. This is a big performance hog. For the former case, the ++ * dev_alloc_skb() has been replaced with titan_ge_alloc_skb(). The size ++ * requested is calculated: ++ * ++ * Ethernet Frame Size : 1518 ++ * Ethernet Header : 14 ++ * Future Titan change for IP header alignment : 2 ++ * ++ * Hence, we allocate (1518 + 14 + 2+ 64) = 1580 bytes. For IP header ++ * alignment, we use skb_reserve(). ++ */ ++ ++#define ALIGNED_RX_SKB_ADDR(addr) \ ++ ((((unsigned long)(addr) + (64UL - 1UL)) \ ++ & ~(64UL - 1UL)) - (unsigned long)(addr)) ++ ++#define titan_ge_alloc_skb(__length, __gfp_flags) \ ++({ struct sk_buff *__skb; \ ++ __skb = alloc_skb((__length) + 64, (__gfp_flags)); \ ++ if(__skb) { \ ++ int __offset = (int) ALIGNED_RX_SKB_ADDR(__skb->data); \ ++ if(__offset) \ ++ skb_reserve(__skb, __offset); \ ++ } \ ++ __skb; \ ++}) ++ ++/* ++ * Configure the GMII block of the Titan based on what the PHY tells us ++ */ ++static void titan_ge_gmii_config(int port_num) ++{ ++ unsigned int reg_data = 0, phy_reg; ++ int err; ++ ++ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg); ++ ++ if (err == TITAN_GE_MDIO_ERROR) { ++ printk(KERN_ERR ++ "Could not read PHY control register 0x11 \n"); ++ printk(KERN_ERR ++ "Setting speed to 1000 Mbps and Duplex to Full \n"); ++ ++ return; ++ } ++ ++ err = titan_ge_mdio_write(port_num, TITAN_GE_MDIO_PHY_IE, 0); ++ ++ if (phy_reg & 0x8000) { ++ if (phy_reg & 0x2000) { ++ /* Full Duplex and 1000 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x201); ++ } else { ++ /* Half Duplex and 1000 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x2201); ++ } ++ } ++ if (phy_reg & 0x4000) { ++ if (phy_reg & 0x2000) { ++ /* Full Duplex and 100 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x100); ++ } else { ++ /* Half Duplex and 100 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x2100); ++ } ++ } ++ reg_data = TITAN_GE_READ(TITAN_GE_GMII_CONFIG_GENERAL + ++ (port_num << 12)); ++ reg_data |= 0x3; ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_GENERAL + ++ (port_num << 12)), reg_data); ++} ++ ++/* ++ * Enable the TMAC if it is not ++ */ ++static void titan_ge_enable_tx(unsigned int port_num) ++{ ++ unsigned long reg_data; ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)); ++ if (!(reg_data & 0x8000)) { ++ printk("TMAC disabled for port %d!! \n", port_num); ++ ++ reg_data |= 0x0001; /* Enable TMAC */ ++ reg_data |= 0x4000; /* CRC Check Enable */ ++ reg_data |= 0x2000; /* Padding enable */ ++ reg_data |= 0x0800; /* CRC Add enable */ ++ reg_data |= 0x0080; /* PAUSE frame */ ++ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ } ++} ++ ++/* ++ * Tx Timeout function ++ */ ++static void titan_ge_tx_timeout(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ printk(KERN_INFO "%s: TX timeout ", netdev->name); ++ printk(KERN_INFO "Resetting card \n"); ++ ++ /* Do the reset outside of interrupt context */ ++ schedule_work(&titan_ge_eth->tx_timeout_task); ++} ++ ++/* ++ * Update the AFX tables for UC and MC for slice 0 only ++ */ ++static void titan_ge_update_afx(titan_ge_port_info * titan_ge_eth) ++{ ++ int port = titan_ge_eth->port_num; ++ unsigned int i; ++ volatile unsigned long reg_data = 0; ++ u8 p_addr[6]; ++ ++ memcpy(p_addr, titan_ge_eth->port_mac_addr, 6); ++ ++ /* Set the MAC address here for TMAC and RMAC */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((0x112c | (port << 12)), 0x1); ++ /* Configure the eight address filters */ ++ for (i = 0; i < 8; i++) { ++ /* Select each of the eight filters */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 + ++ (port << 12)), i); ++ ++ /* Configure the match */ ++ reg_data = 0x9; /* Forward Enable Bit */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 + ++ (port << 12)), reg_data); ++ ++ /* Finally, AFX Exact Match Address Registers */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_HIGH + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ ++ /* VLAN id set to 0 */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_VID + ++ (port << 12)), 0); ++ } ++} ++ ++/* ++ * Actual Routine to reset the adapter when the timeout occurred ++ */ ++static void titan_ge_tx_timeout_task(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ int port = titan_ge_eth->port_num; ++ ++ printk("Titan GE: Transmit timed out. Resetting ... \n"); ++ ++ /* Dump debug info */ ++ printk(KERN_ERR "TRTG cause : %x \n", ++ TITAN_GE_READ(0x100c + (port << 12))); ++ ++ /* Fix this for the other ports */ ++ printk(KERN_ERR "FIFO cause : %x \n", TITAN_GE_READ(0x482c)); ++ printk(KERN_ERR "IE cause : %x \n", TITAN_GE_READ(0x0040)); ++ printk(KERN_ERR "XDMA GDI ERROR : %x \n", ++ TITAN_GE_READ(0x5008 + (port << 8))); ++ printk(KERN_ERR "CHANNEL ERROR: %x \n", ++ TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT ++ + (port << 8))); ++ ++ netif_device_detach(netdev); ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ titan_ge_port_start(netdev, titan_ge_eth); ++ netif_device_attach(netdev); ++} ++ ++/* ++ * Change the MTU of the Ethernet Device ++ */ ++static int titan_ge_change_mtu(struct net_device *netdev, int new_mtu) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned long flags; ++ ++ if ((new_mtu > 9500) || (new_mtu < 64)) ++ return -EINVAL; ++ ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ netdev->mtu = new_mtu; ++ ++ /* Now we have to reopen the interface so that SKBs with the new ++ * size will be allocated */ ++ ++ if (netif_running(netdev)) { ++ titan_ge_eth_stop(netdev); ++ ++ if (titan_ge_eth_open(netdev) != TITAN_OK) { ++ printk(KERN_ERR ++ "%s: Fatal error on opening device\n", ++ netdev->name); ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ return -1; ++ } ++ } ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ return 0; ++} ++ ++/* ++ * Titan Gbe Interrupt Handler. All the three ports send interrupt to one line ++ * only. Once an interrupt is triggered, figure out the port and then check ++ * the channel. ++ */ ++static irqreturn_t titan_ge_int_handler(int irq, void *dev_id) ++{ ++ struct net_device *netdev = (struct net_device *) dev_id; ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int reg_data; ++ unsigned int eth_int_cause_error = 0, is; ++ unsigned long eth_int_cause1; ++ int err = 0; ++#ifdef CONFIG_SMP ++ unsigned long eth_int_cause2; ++#endif ++ ++ /* Ack the CPU interrupt */ ++ switch (port_num) { ++ case 0: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS1); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR1, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS1); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR1, is); ++#endif ++ break; ++ ++ case 1: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS0); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR0, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS0); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR0, is); ++#endif ++ break; ++ ++ case 2: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS4); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR4, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS4); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR4, is); ++#endif ++ } ++ ++ eth_int_cause1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A); ++#ifdef CONFIG_SMP ++ eth_int_cause2 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_B); ++#endif ++ ++ /* Spurious interrupt */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 == 0) && (eth_int_cause2 == 0)) { ++#else ++ if (eth_int_cause1 == 0) { ++#endif ++ eth_int_cause_error = TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT + ++ (port_num << 8)); ++ ++ if (eth_int_cause_error == 0) ++ return IRQ_NONE; ++ } ++ ++ /* Handle Tx first. No need to ack interrupts */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 & 0x20202) || ++ (eth_int_cause2 & 0x20202) ) ++#else ++ if (eth_int_cause1 & 0x20202) ++#endif ++ titan_ge_free_tx_queue(titan_ge_eth); ++ ++ /* Handle the Rx next */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 & 0x10101) || ++ (eth_int_cause2 & 0x10101)) { ++#else ++ if (eth_int_cause1 & 0x10101) { ++#endif ++ if (netif_rx_schedule_prep(netdev)) { ++ unsigned int ack; ++ ++ ack = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ /* Disable Tx and Rx both */ ++ if (port_num == 0) ++ ack &= ~(0x3); ++ if (port_num == 1) ++ ack &= ~(0x300); ++ ++ if (port_num == 2) ++ ack &= ~(0x30000); ++ ++ /* Interrupts have been disabled */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, ack); ++ ++ __netif_rx_schedule(netdev); ++ } ++ } ++ ++ /* Handle error interrupts */ ++ if (eth_int_cause_error && (eth_int_cause_error != 0x2)) { ++ printk(KERN_ERR ++ "XDMA Channel Error : %x on port %d\n", ++ eth_int_cause_error, port_num); ++ ++ printk(KERN_ERR ++ "XDMA GDI Hardware error : %x on port %d\n", ++ TITAN_GE_READ(0x5008 + (port_num << 8)), port_num); ++ ++ printk(KERN_ERR ++ "XDMA currently has %d Rx descriptors \n", ++ TITAN_GE_READ(0x5048 + (port_num << 8))); ++ ++ printk(KERN_ERR ++ "XDMA currently has prefetcted %d Rx descriptors \n", ++ TITAN_GE_READ(0x505c + (port_num << 8))); ++ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT + ++ (port_num << 8)), eth_int_cause_error); ++ } ++ ++ /* ++ * PHY interrupt to inform abt the changes. Reading the ++ * PHY Status register will clear the interrupt ++ */ ++ if ((!(eth_int_cause1 & 0x30303)) && ++ (eth_int_cause_error == 0)) { ++ err = ++ titan_ge_mdio_read(port_num, ++ TITAN_GE_MDIO_PHY_IS, ®_data); ++ ++ if (reg_data & 0x0400) { ++ /* Link status change */ ++ titan_ge_mdio_read(port_num, ++ TITAN_GE_MDIO_PHY_STATUS, ®_data); ++ if (!(reg_data & 0x0400)) { ++ /* Link is down */ ++ netif_carrier_off(netdev); ++ netif_stop_queue(netdev); ++ } else { ++ /* Link is up */ ++ netif_carrier_on(netdev); ++ netif_wake_queue(netdev); ++ ++ /* Enable the queue */ ++ titan_ge_enable_tx(port_num); ++ } ++ } ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++/* ++ * Multicast and Promiscuous mode set. The ++ * set_multi entry point is called whenever the ++ * multicast address list or the network interface ++ * flags are updated. ++ */ ++static void titan_ge_set_multi(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned long reg_data; ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 + ++ (port_num << 12)); ++ ++ if (netdev->flags & IFF_PROMISC) { ++ reg_data |= 0x2; ++ } ++ else if (netdev->flags & IFF_ALLMULTI) { ++ reg_data |= 0x01; ++ reg_data |= 0x400; /* Use the 64-bit Multicast Hash bin */ ++ } ++ else { ++ reg_data = 0x2; ++ } ++ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 + ++ (port_num << 12)), reg_data); ++ if (reg_data & 0x01) { ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_LOW + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDLOW + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDHI + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_HI + ++ (port_num << 12)), 0xffff); ++ } ++} ++ ++/* ++ * Open the network device ++ */ ++static int titan_ge_open(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int irq = TITAN_ETH_PORT_IRQ - port_num; ++ int retval; ++ ++ retval = request_irq(irq, titan_ge_int_handler, ++ SA_INTERRUPT | SA_SAMPLE_RANDOM , netdev->name, netdev); ++ ++ if (retval != 0) { ++ printk(KERN_ERR "Cannot assign IRQ number to TITAN GE \n"); ++ return -1; ++ } ++ ++ netdev->irq = irq; ++ printk(KERN_INFO "Assigned IRQ %d to port %d\n", irq, port_num); ++ ++ spin_lock_irq(&(titan_ge_eth->lock)); ++ ++ if (titan_ge_eth_open(netdev) != TITAN_OK) { ++ spin_unlock_irq(&(titan_ge_eth->lock)); ++ printk("%s: Error opening interface \n", netdev->name); ++ free_irq(netdev->irq, netdev); ++ return -EBUSY; ++ } ++ ++ spin_unlock_irq(&(titan_ge_eth->lock)); ++ ++ return 0; ++} ++ ++/* ++ * Allocate the SKBs for the Rx ring. Also used ++ * for refilling the queue ++ */ ++static int titan_ge_rx_task(struct net_device *netdev, ++ titan_ge_port_info *titan_ge_port) ++{ ++ struct device *device = &titan_ge_device[titan_ge_port->port_num]->dev; ++ volatile titan_ge_rx_desc *rx_desc; ++ struct sk_buff *skb; ++ int rx_used_desc; ++ int count = 0; ++ ++ while (titan_ge_port->rx_ring_skbs < titan_ge_port->rx_ring_size) { ++ ++ /* First try to get the skb from the recycler */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ skb = titan_ge_alloc_skb(TITAN_GE_JUMBO_BUFSIZE, GFP_ATOMIC); ++#else ++ skb = titan_ge_alloc_skb(TITAN_GE_STD_BUFSIZE, GFP_ATOMIC); ++#endif ++ if (unlikely(!skb)) { ++ /* OOM, set the flag */ ++ printk("OOM \n"); ++ oom_flag = 1; ++ break; ++ } ++ count++; ++ skb->dev = netdev; ++ ++ titan_ge_port->rx_ring_skbs++; ++ ++ rx_used_desc = titan_ge_port->rx_used_desc_q; ++ rx_desc = &(titan_ge_port->rx_desc_area[rx_used_desc]); ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ rx_desc->buffer_addr = dma_map_single(device, skb->data, ++ TITAN_GE_JUMBO_BUFSIZE - 2, DMA_FROM_DEVICE); ++#else ++ rx_desc->buffer_addr = dma_map_single(device, skb->data, ++ TITAN_GE_STD_BUFSIZE - 2, DMA_FROM_DEVICE); ++#endif ++ ++ titan_ge_port->rx_skb[rx_used_desc] = skb; ++ rx_desc->cmd_sts = TITAN_GE_RX_BUFFER_OWNED; ++ ++ titan_ge_port->rx_used_desc_q = ++ (rx_used_desc + 1) % TITAN_GE_RX_QUEUE; ++ } ++ ++ return count; ++} ++ ++/* ++ * Actual init of the Tital GE port. There is one register for ++ * the channel configuration ++ */ ++static void titan_port_init(struct net_device *netdev, ++ titan_ge_port_info * titan_ge_eth) ++{ ++ unsigned long reg_data; ++ ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ ++ /* First reset the TMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data |= 0x80000000; ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ udelay(30); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data &= ~(0xc0000000); ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ /* Now reset the RMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data |= 0x00080000; ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ udelay(30); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data &= ~(0x000c0000); ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++} ++ ++/* ++ * Start the port. All the hardware specific configuration ++ * for the XDMA, Tx FIFO, Rx FIFO, TMAC, RMAC, TRTG and AFX ++ * go here ++ */ ++static int titan_ge_port_start(struct net_device *netdev, ++ titan_ge_port_info * titan_port) ++{ ++ volatile unsigned long reg_data, reg_data1; ++ int port_num = titan_port->port_num; ++ int count = 0; ++ unsigned long reg_data_1; ++ ++ if (config_done == 0) { ++ reg_data = TITAN_GE_READ(0x0004); ++ reg_data |= 0x100; ++ TITAN_GE_WRITE(0x0004, reg_data); ++ ++ reg_data &= ~(0x100); ++ TITAN_GE_WRITE(0x0004, reg_data); ++ ++ /* Turn on GMII/MII mode and turn off TBI mode */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TSB_CTRL_1); ++ reg_data |= 0x00000700; ++ reg_data &= ~(0x00800000); /* Fencing */ ++ ++ TITAN_GE_WRITE(0x000c, 0x00001100); ++ ++ TITAN_GE_WRITE(TITAN_GE_TSB_CTRL_1, reg_data); ++ ++ /* Set the CPU Resource Limit register */ ++ TITAN_GE_WRITE(0x00f8, 0x8); ++ ++ /* Be conservative when using the BIU buffers */ ++ TITAN_GE_WRITE(0x0068, 0x4); ++ } ++ ++ titan_port->tx_threshold = 0; ++ titan_port->rx_threshold = 0; ++ ++ /* We need to write the descriptors for Tx and Rx */ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_TX_DESC + (port_num << 8)), ++ (unsigned long) titan_port->tx_dma); ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_RX_DESC + (port_num << 8)), ++ (unsigned long) titan_port->rx_dma); ++ ++ if (config_done == 0) { ++ /* Step 1: XDMA config */ ++ reg_data = TITAN_GE_READ(TITAN_GE_XDMA_CONFIG); ++ reg_data &= ~(0x80000000); /* clear reset */ ++ reg_data |= 0x1 << 29; /* sparse tx descriptor spacing */ ++ reg_data |= 0x1 << 28; /* sparse rx descriptor spacing */ ++ reg_data |= (0x1 << 23) | (0x1 << 24); /* Descriptor Coherency */ ++ reg_data |= (0x1 << 21) | (0x1 << 22); /* Data Coherency */ ++ TITAN_GE_WRITE(TITAN_GE_XDMA_CONFIG, reg_data); ++ } ++ ++ /* IR register for the XDMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8)); ++ reg_data |= 0x80068000; /* No Rx_OOD */ ++ TITAN_GE_WRITE((TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8)), reg_data); ++ ++ /* Start the Tx and Rx XDMA controller */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + (port_num << 8)); ++ reg_data &= 0x4fffffff; /* Clear tx reset */ ++ reg_data &= 0xfff4ffff; /* Clear rx reset */ ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ reg_data |= 0xa0 | 0x30030000; ++#else ++ reg_data |= 0x40 | 0x20030000; ++#endif ++ ++#ifndef CONFIG_SMP ++ reg_data &= ~(0x10); ++ reg_data |= 0x0f; /* All of the packet */ ++#endif ++ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + (port_num << 8)), reg_data); ++ ++ /* Rx desc count */ ++ count = titan_ge_rx_task(netdev, titan_port); ++ TITAN_GE_WRITE((0x5048 + (port_num << 8)), count); ++ count = TITAN_GE_READ(0x5048 + (port_num << 8)); ++ ++ udelay(30); ++ ++ /* ++ * Step 2: Configure the SDQPF, i.e. FIFO ++ */ ++ if (config_done == 0) { ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL); ++ reg_data = 0x1; ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ reg_data &= ~(0x1); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL); ++ reg_data = 0x1; ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ reg_data &= ~(0x1); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ } ++ /* ++ * Enable RX FIFO 0, 4 and 8 ++ */ ++ if (port_num == 0) { ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10); ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4844); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x4844, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_0); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ reg_data |= (0xff << 10); ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4944); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x4944, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ } ++ ++ if (port_num == 1) { ++ reg_data = TITAN_GE_READ(0x4870); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (0xff + 1); ++ ++ TITAN_GE_WRITE(0x4870, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4874); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x4874, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4870, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x494c); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x494c, reg_data); ++ reg_data |= (0xff << 10) | (0xff + 1); ++ TITAN_GE_WRITE(0x494c, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4950); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x4950, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x494c, reg_data); ++ } ++ ++ /* ++ * Titan 1.2 revision does support port #2 ++ */ ++ if (port_num == 2) { ++ /* ++ * Put the descriptors in the SRAM ++ */ ++ reg_data = TITAN_GE_READ(0x48a0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x48a4); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x48a4, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x4958); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ TITAN_GE_WRITE(0x4958, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x495c); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x495c, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ } ++ ++ if (port_num == 2) { ++ reg_data = TITAN_GE_READ(0x48a0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x48a4); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x48a4, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x4958); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ TITAN_GE_WRITE(0x4958, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x495c); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x495c, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ } ++ ++ /* ++ * Step 3: TRTG block enable ++ */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TRTG_CONFIG + (port_num << 12)); ++ ++ /* ++ * This is the 1.2 revision of the chip. It has fix for the ++ * IP header alignment. Now, the IP header begins at an ++ * aligned address and this wont need an extra copy in the ++ * driver. This performance drawback existed in the previous ++ * versions of the silicon ++ */ ++ reg_data_1 = TITAN_GE_READ(0x103c + (port_num << 12)); ++ reg_data_1 |= 0x40000000; ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ reg_data_1 |= 0x04000000; ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ mdelay(5); ++ ++ reg_data_1 &= ~(0x04000000); ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ mdelay(5); ++ ++ reg_data |= 0x0001; ++ TITAN_GE_WRITE((TITAN_GE_TRTG_CONFIG + (port_num << 12)), reg_data); ++ ++ /* ++ * Step 4: Start the Tx activity ++ */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_2 + (port_num << 12)), 0xe197); ++#ifdef TITAN_GE_JUMBO_FRAMES ++ TITAN_GE_WRITE((0x1258 + (port_num << 12)), 0x4000); ++#endif ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)); ++ reg_data |= 0x0001; /* Enable TMAC */ ++ reg_data |= 0x6c70; /* PAUSE also set */ ++ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ udelay(30); ++ ++ /* Destination Address drop bit */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_2 + (port_num << 12)); ++ reg_data |= 0x218; /* DA_DROP bit and pause */ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_2 + (port_num << 12)), reg_data); ++ ++ TITAN_GE_WRITE((0x1218 + (port_num << 12)), 0x3); ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ TITAN_GE_WRITE((0x1208 + (port_num << 12)), 0x4000); ++#endif ++ /* Start the Rx activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)); ++ reg_data |= 0x0001; /* RMAC Enable */ ++ reg_data |= 0x0010; /* CRC Check enable */ ++ reg_data |= 0x0040; /* Min Frame check enable */ ++ reg_data |= 0x4400; /* Max Frame check enable */ ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ udelay(30); ++ ++ /* ++ * Enable the Interrupts for Tx and Rx ++ */ ++ reg_data1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ ++ if (port_num == 0) { ++ reg_data1 |= 0x3; ++#ifdef CONFIG_SMP ++ TITAN_GE_WRITE(0x0038, 0x003); ++#else ++ TITAN_GE_WRITE(0x0038, 0x303); ++#endif ++ } ++ ++ if (port_num == 1) { ++ reg_data1 |= 0x300; ++ } ++ ++ if (port_num == 2) ++ reg_data1 |= 0x30000; ++ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data1); ++ TITAN_GE_WRITE(0x003c, 0x300); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(0x0024, 0x04000024); /* IRQ vector */ ++ TITAN_GE_WRITE(0x0020, 0x000fb000); /* INTMSG base */ ++ } ++ ++ /* Priority */ ++ reg_data = TITAN_GE_READ(0x1038 + (port_num << 12)); ++ reg_data &= ~(0x00f00000); ++ TITAN_GE_WRITE((0x1038 + (port_num << 12)), reg_data); ++ ++ /* Step 5: GMII config */ ++ titan_ge_gmii_config(port_num); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(0x1a80, 0); ++ config_done = 1; ++ } ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Function to queue the packet for the Ethernet device ++ */ ++static void titan_ge_tx_queue(titan_ge_port_info * titan_ge_eth, ++ struct sk_buff * skb) ++{ ++ struct device *device = &titan_ge_device[titan_ge_eth->port_num]->dev; ++ unsigned int curr_desc = titan_ge_eth->tx_curr_desc_q; ++ volatile titan_ge_tx_desc *tx_curr; ++ int port_num = titan_ge_eth->port_num; ++ ++ tx_curr = &(titan_ge_eth->tx_desc_area[curr_desc]); ++ tx_curr->buffer_addr = ++ dma_map_single(device, skb->data, skb_headlen(skb), ++ DMA_TO_DEVICE); ++ ++ titan_ge_eth->tx_skb[curr_desc] = (struct sk_buff *) skb; ++ tx_curr->buffer_len = skb_headlen(skb); ++ ++ /* Last descriptor enables interrupt and changes ownership */ ++ tx_curr->cmd_sts = 0x1 | (1 << 15) | (1 << 5); ++ ++ /* Kick the XDMA to start the transfer from memory to the FIFO */ ++ TITAN_GE_WRITE((0x5044 + (port_num << 8)), 0x1); ++ ++ /* Current descriptor updated */ ++ titan_ge_eth->tx_curr_desc_q = (curr_desc + 1) % TITAN_GE_TX_QUEUE; ++ ++ /* Prefetch the next descriptor */ ++ prefetch((const void *) ++ &titan_ge_eth->tx_desc_area[titan_ge_eth->tx_curr_desc_q]); ++} ++ ++/* ++ * Actually does the open of the Ethernet device ++ */ ++static int titan_ge_eth_open(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ struct device *device = &titan_ge_device[port_num]->dev; ++ unsigned long reg_data; ++ unsigned int phy_reg; ++ int err = 0; ++ ++ /* Stop the Rx activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ /* Clear the port interrupts */ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT + (port_num << 8)), 0x0); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0); ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_B, 0); ++ } ++ ++ /* Set the MAC Address */ ++ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6); ++ ++ if (config_done == 0) ++ titan_port_init(netdev, titan_ge_eth); ++ ++ titan_ge_update_afx(titan_ge_eth); ++ ++ /* Allocate the Tx ring now */ ++ titan_ge_eth->tx_ring_skbs = 0; ++ titan_ge_eth->tx_ring_size = TITAN_GE_TX_QUEUE; ++ ++ /* Allocate space in the SRAM for the descriptors */ ++ titan_ge_eth->tx_desc_area = (titan_ge_tx_desc *) ++ (titan_ge_sram + TITAN_TX_RING_BYTES * port_num); ++ titan_ge_eth->tx_dma = TITAN_SRAM_BASE + TITAN_TX_RING_BYTES * port_num; ++ ++ if (!titan_ge_eth->tx_desc_area) { ++ printk(KERN_ERR ++ "%s: Cannot allocate Tx Ring (size %d bytes) for port %d\n", ++ netdev->name, TITAN_TX_RING_BYTES, port_num); ++ return -ENOMEM; ++ } ++ ++ memset(titan_ge_eth->tx_desc_area, 0, titan_ge_eth->tx_desc_area_size); ++ ++ /* Now initialize the Tx descriptor ring */ ++ titan_ge_init_tx_desc_ring(titan_ge_eth, ++ titan_ge_eth->tx_ring_size, ++ (unsigned long) titan_ge_eth->tx_desc_area, ++ (unsigned long) titan_ge_eth->tx_dma); ++ ++ /* Allocate the Rx ring now */ ++ titan_ge_eth->rx_ring_size = TITAN_GE_RX_QUEUE; ++ titan_ge_eth->rx_ring_skbs = 0; ++ ++ titan_ge_eth->rx_desc_area = ++ (titan_ge_rx_desc *)(titan_ge_sram + 0x1000 + TITAN_RX_RING_BYTES * port_num); ++ ++ titan_ge_eth->rx_dma = TITAN_SRAM_BASE + 0x1000 + TITAN_RX_RING_BYTES * port_num; ++ ++ if (!titan_ge_eth->rx_desc_area) { ++ printk(KERN_ERR "%s: Cannot allocate Rx Ring (size %d bytes)\n", ++ netdev->name, TITAN_RX_RING_BYTES); ++ ++ printk(KERN_ERR "%s: Freeing previously allocated TX queues...", ++ netdev->name); ++ ++ dma_free_coherent(device, titan_ge_eth->tx_desc_area_size, ++ (void *) titan_ge_eth->tx_desc_area, ++ titan_ge_eth->tx_dma); ++ ++ return -ENOMEM; ++ } ++ ++ memset(titan_ge_eth->rx_desc_area, 0, titan_ge_eth->rx_desc_area_size); ++ ++ /* Now initialize the Rx ring */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ if ((titan_ge_init_rx_desc_ring ++ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_JUMBO_BUFSIZE, ++ (unsigned long) titan_ge_eth->rx_desc_area, 0, ++ (unsigned long) titan_ge_eth->rx_dma)) == 0) ++#else ++ if ((titan_ge_init_rx_desc_ring ++ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_STD_BUFSIZE, ++ (unsigned long) titan_ge_eth->rx_desc_area, 0, ++ (unsigned long) titan_ge_eth->rx_dma)) == 0) ++#endif ++ panic("%s: Error initializing RX Ring\n", netdev->name); ++ ++ /* Fill the Rx ring with the SKBs */ ++ titan_ge_port_start(netdev, titan_ge_eth); ++ ++ /* ++ * Check if Interrupt Coalscing needs to be turned on. The ++ * values specified in the register is multiplied by ++ * (8 x 64 nanoseconds) to determine when an interrupt should ++ * be sent to the CPU. ++ */ ++ ++ if (TITAN_GE_TX_COAL) { ++ titan_ge_eth->tx_int_coal = ++ titan_ge_tx_coal(TITAN_GE_TX_COAL, port_num); ++ } ++ ++ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg); ++ if (err == TITAN_GE_MDIO_ERROR) { ++ printk(KERN_ERR ++ "Could not read PHY control register 0x11 \n"); ++ return TITAN_ERROR; ++ } ++ if (!(phy_reg & 0x0400)) { ++ netif_carrier_off(netdev); ++ netif_stop_queue(netdev); ++ return TITAN_ERROR; ++ } else { ++ netif_carrier_on(netdev); ++ netif_start_queue(netdev); ++ } ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Queue the packet for Tx. Currently no support for zero copy, ++ * checksum offload and Scatter Gather. The chip does support ++ * Scatter Gather only. But, that wont help here since zero copy ++ * requires support for Tx checksumming also. ++ */ ++int titan_ge_start_xmit(struct sk_buff *skb, struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned long flags; ++ struct net_device_stats *stats; ++//printk("titan_ge_start_xmit\n"); ++ ++ stats = &titan_ge_eth->stats; ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ if ((TITAN_GE_TX_QUEUE - titan_ge_eth->tx_ring_skbs) <= ++ (skb_shinfo(skb)->nr_frags + 1)) { ++ netif_stop_queue(netdev); ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ printk(KERN_ERR "Tx OOD \n"); ++ return 1; ++ } ++ ++ titan_ge_tx_queue(titan_ge_eth, skb); ++ titan_ge_eth->tx_ring_skbs++; ++ ++ if (TITAN_GE_TX_QUEUE <= (titan_ge_eth->tx_ring_skbs + 4)) { ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ titan_ge_free_tx_queue(titan_ge_eth); ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ } ++ ++ stats->tx_bytes += skb->len; ++ stats->tx_packets++; ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ netdev->trans_start = jiffies; ++ ++ return 0; ++} ++ ++/* ++ * Actually does the Rx. Rx side checksumming supported. ++ */ ++static int titan_ge_rx(struct net_device *netdev, int port_num, ++ titan_ge_port_info * titan_ge_port, ++ titan_ge_packet * packet) ++{ ++ int rx_curr_desc, rx_used_desc; ++ volatile titan_ge_rx_desc *rx_desc; ++ ++ rx_curr_desc = titan_ge_port->rx_curr_desc_q; ++ rx_used_desc = titan_ge_port->rx_used_desc_q; ++ ++ if (((rx_curr_desc + 1) % TITAN_GE_RX_QUEUE) == rx_used_desc) ++ return TITAN_ERROR; ++ ++ rx_desc = &(titan_ge_port->rx_desc_area[rx_curr_desc]); ++ ++ if (rx_desc->cmd_sts & TITAN_GE_RX_BUFFER_OWNED) ++ return TITAN_ERROR; ++ ++ packet->skb = titan_ge_port->rx_skb[rx_curr_desc]; ++ packet->len = (rx_desc->cmd_sts & 0x7fff); ++ ++ /* ++ * At this point, we dont know if the checksumming ++ * actually helps relieve CPU. So, keep it for ++ * port 0 only ++ */ ++ packet->checksum = ntohs((rx_desc->buffer & 0xffff0000) >> 16); ++ packet->cmd_sts = rx_desc->cmd_sts; ++ ++ titan_ge_port->rx_curr_desc_q = (rx_curr_desc + 1) % TITAN_GE_RX_QUEUE; ++ ++ /* Prefetch the next descriptor */ ++ prefetch((const void *) ++ &titan_ge_port->rx_desc_area[titan_ge_port->rx_curr_desc_q + 1]); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Free the Tx queue of the used SKBs ++ */ ++static int titan_ge_free_tx_queue(titan_ge_port_info *titan_ge_eth) ++{ ++ unsigned long flags; ++ ++ /* Take the lock */ ++ spin_lock_irqsave(&(titan_ge_eth->lock), flags); ++ ++ while (titan_ge_return_tx_desc(titan_ge_eth, titan_ge_eth->port_num) == 0) ++ if (titan_ge_eth->tx_ring_skbs != 1) ++ titan_ge_eth->tx_ring_skbs--; ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Threshold beyond which we do the cleaning of ++ * Tx queue and new allocation for the Rx ++ * queue ++ */ ++#define TX_THRESHOLD 4 ++#define RX_THRESHOLD 10 ++ ++/* ++ * Receive the packets and send it to the kernel. ++ */ ++static int titan_ge_receive_queue(struct net_device *netdev, unsigned int max) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ titan_ge_packet packet; ++ struct net_device_stats *stats; ++ struct sk_buff *skb; ++ unsigned long received_packets = 0; ++ unsigned int ack; ++ ++ stats = &titan_ge_eth->stats; ++ ++ while ((--max) ++ && (titan_ge_rx(netdev, port_num, titan_ge_eth, &packet) == TITAN_OK)) { ++ skb = (struct sk_buff *) packet.skb; ++ ++ titan_ge_eth->rx_ring_skbs--; ++ ++ if (--titan_ge_eth->rx_work_limit < 0) ++ break; ++ received_packets++; ++ ++ stats->rx_packets++; ++ stats->rx_bytes += packet.len; ++ ++ if ((packet.cmd_sts & TITAN_GE_RX_PERR) || ++ (packet.cmd_sts & TITAN_GE_RX_OVERFLOW_ERROR) || ++ (packet.cmd_sts & TITAN_GE_RX_TRUNC) || ++ (packet.cmd_sts & TITAN_GE_RX_CRC_ERROR)) { ++ stats->rx_dropped++; ++ dev_kfree_skb_any(skb); ++ ++ continue; ++ } ++ /* ++ * Either support fast path or slow path. Decision ++ * making can really slow down the performance. The ++ * idea is to cut down the number of checks and improve ++ * the fastpath. ++ */ ++ ++ skb_put(skb, packet.len - 2); ++ ++ /* ++ * Increment data pointer by two since thats where ++ * the MAC starts ++ */ ++ skb_reserve(skb, 2); ++ skb->protocol = eth_type_trans(skb, netdev); ++ netif_receive_skb(skb); ++ ++ if (titan_ge_eth->rx_threshold > RX_THRESHOLD) { ++ ack = titan_ge_rx_task(netdev, titan_ge_eth); ++ TITAN_GE_WRITE((0x5048 + (port_num << 8)), ack); ++ titan_ge_eth->rx_threshold = 0; ++ } else ++ titan_ge_eth->rx_threshold++; ++ ++ if (titan_ge_eth->tx_threshold > TX_THRESHOLD) { ++ titan_ge_eth->tx_threshold = 0; ++ titan_ge_free_tx_queue(titan_ge_eth); ++ } ++ else ++ titan_ge_eth->tx_threshold++; ++ ++ } ++ return received_packets; ++} ++ ++ ++/* ++ * Enable the Rx side interrupts ++ */ ++static void titan_ge_enable_int(unsigned int port_num, ++ titan_ge_port_info *titan_ge_eth, ++ struct net_device *netdev) ++{ ++ unsigned long reg_data = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ ++ if (port_num == 0) ++ reg_data |= 0x3; ++ if (port_num == 1) ++ reg_data |= 0x300; ++ if (port_num == 2) ++ reg_data |= 0x30000; ++ ++ /* Re-enable interrupts */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data); ++} ++ ++/* ++ * Main function to handle the polling for Rx side NAPI. ++ * Receive interrupts have been disabled at this point. ++ * The poll schedules the transmit followed by receive. ++ */ ++static int titan_ge_poll(struct net_device *netdev, int *budget) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ int port_num = titan_ge_eth->port_num; ++ int work_done = 0; ++ unsigned long flags, status; ++ ++ titan_ge_eth->rx_work_limit = *budget; ++ if (titan_ge_eth->rx_work_limit > netdev->quota) ++ titan_ge_eth->rx_work_limit = netdev->quota; ++ ++ do { ++ /* Do the transmit cleaning work here */ ++ titan_ge_free_tx_queue(titan_ge_eth); ++ ++ /* Ack the Rx interrupts */ ++ if (port_num == 0) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x3); ++ if (port_num == 1) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x300); ++ if (port_num == 2) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x30000); ++ ++ work_done += titan_ge_receive_queue(netdev, 0); ++ ++ /* Out of quota and there is work to be done */ ++ if (titan_ge_eth->rx_work_limit < 0) ++ goto not_done; ++ ++ /* Receive alloc_skb could lead to OOM */ ++ if (oom_flag == 1) { ++ oom_flag = 0; ++ goto oom; ++ } ++ ++ status = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A); ++ } while (status & 0x30300); ++ ++ /* If we are here, then no more interrupts to process */ ++ goto done; ++ ++not_done: ++ *budget -= work_done; ++ netdev->quota -= work_done; ++ return 1; ++ ++oom: ++ printk(KERN_ERR "OOM \n"); ++ netif_rx_complete(netdev); ++ return 0; ++ ++done: ++ /* ++ * No more packets on the poll list. Turn the interrupts ++ * back on and we should be able to catch the new ++ * packets in the interrupt handler ++ */ ++ if (!work_done) ++ work_done = 1; ++ ++ *budget -= work_done; ++ netdev->quota -= work_done; ++ ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ /* Remove us from the poll list */ ++ netif_rx_complete(netdev); ++ ++ /* Re-enable interrupts */ ++ titan_ge_enable_int(port_num, titan_ge_eth, netdev); ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ return 0; ++} ++ ++/* ++ * Close the network device ++ */ ++int titan_ge_stop(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ spin_lock_irq(&(titan_ge_eth->lock)); ++ titan_ge_eth_stop(netdev); ++ free_irq(netdev->irq, netdev); ++ spin_unlock_irq(&titan_ge_eth->lock); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Free the Tx ring ++ */ ++static void titan_ge_free_tx_rings(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int curr; ++ unsigned long reg_data; ++ ++ /* Stop the Tx DMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)); ++ reg_data |= 0xc0000000; ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)), reg_data); ++ ++ /* Disable the TMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ for (curr = 0; ++ (titan_ge_eth->tx_ring_skbs) && (curr < TITAN_GE_TX_QUEUE); ++ curr++) { ++ if (titan_ge_eth->tx_skb[curr]) { ++ dev_kfree_skb(titan_ge_eth->tx_skb[curr]); ++ titan_ge_eth->tx_ring_skbs--; ++ } ++ } ++ ++ if (titan_ge_eth->tx_ring_skbs != 0) ++ printk ++ ("%s: Error on Tx descriptor free - could not free %d" ++ " descriptors\n", netdev->name, ++ titan_ge_eth->tx_ring_skbs); ++ ++#ifndef TITAN_RX_RING_IN_SRAM ++ dma_free_coherent(&titan_ge_device[port_num]->dev, ++ titan_ge_eth->tx_desc_area_size, ++ (void *) titan_ge_eth->tx_desc_area, ++ titan_ge_eth->tx_dma); ++#endif ++} ++ ++/* ++ * Free the Rx ring ++ */ ++static void titan_ge_free_rx_rings(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int curr; ++ unsigned long reg_data; ++ ++ /* Stop the Rx DMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)); ++ reg_data |= 0x000c0000; ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)), reg_data); ++ ++ /* Disable the RMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ for (curr = 0; ++ titan_ge_eth->rx_ring_skbs && (curr < TITAN_GE_RX_QUEUE); ++ curr++) { ++ if (titan_ge_eth->rx_skb[curr]) { ++ dev_kfree_skb(titan_ge_eth->rx_skb[curr]); ++ titan_ge_eth->rx_ring_skbs--; ++ } ++ } ++ ++ if (titan_ge_eth->rx_ring_skbs != 0) ++ printk(KERN_ERR ++ "%s: Error in freeing Rx Ring. %d skb's still" ++ " stuck in RX Ring - ignoring them\n", netdev->name, ++ titan_ge_eth->rx_ring_skbs); ++ ++#ifndef TITAN_RX_RING_IN_SRAM ++ dma_free_coherent(&titan_ge_device[port_num]->dev, ++ titan_ge_eth->rx_desc_area_size, ++ (void *) titan_ge_eth->rx_desc_area, ++ titan_ge_eth->rx_dma); ++#endif ++} ++ ++/* ++ * Actually does the stop of the Ethernet device ++ */ ++static void titan_ge_eth_stop(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ netif_stop_queue(netdev); ++ ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ ++ titan_ge_free_tx_rings(netdev); ++ titan_ge_free_rx_rings(netdev); ++ ++ /* Disable the Tx and Rx Interrupts for all channels */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, 0x0); ++} ++ ++/* ++ * Update the MAC address. Note that we have to write the ++ * address in three station registers, 16 bits each. And this ++ * has to be done for TMAC and RMAC ++ */ ++static void titan_ge_update_mac_address(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ u8 p_addr[6]; ++ ++ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6); ++ memcpy(p_addr, netdev->dev_addr, 6); ++ ++ /* Update the Address Filtering Match tables */ ++ titan_ge_update_afx(titan_ge_eth); ++ ++ printk("Station MAC : %d %d %d %d %d %d \n", ++ p_addr[5], p_addr[4], p_addr[3], ++ p_addr[2], p_addr[1], p_addr[0]); ++ ++ /* Set the MAC address here for TMAC and RMAC */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port_num << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port_num << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port_num << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port_num << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port_num << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port_num << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++} ++ ++/* ++ * Set the MAC address of the Ethernet device ++ */ ++static int titan_ge_set_mac_address(struct net_device *dev, void *addr) ++{ ++ titan_ge_port_info *tp = netdev_priv(dev); ++ struct sockaddr *sa = addr; ++ ++ memcpy(dev->dev_addr, sa->sa_data, dev->addr_len); ++ ++ spin_lock_irq(&tp->lock); ++ titan_ge_update_mac_address(dev); ++ spin_unlock_irq(&tp->lock); ++ ++ return 0; ++} ++ ++/* ++ * Get the Ethernet device stats ++ */ ++static struct net_device_stats *titan_ge_get_stats(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ return &titan_ge_eth->stats; ++} ++ ++/* ++ * Initialize the Rx descriptor ring for the Titan Ge ++ */ ++static int titan_ge_init_rx_desc_ring(titan_ge_port_info * titan_eth_port, ++ int rx_desc_num, ++ int rx_buff_size, ++ unsigned long rx_desc_base_addr, ++ unsigned long rx_buff_base_addr, ++ unsigned long rx_dma) ++{ ++ volatile titan_ge_rx_desc *rx_desc; ++ unsigned long buffer_addr; ++ int index; ++ unsigned long titan_ge_rx_desc_bus = rx_dma; ++ ++ buffer_addr = rx_buff_base_addr; ++ rx_desc = (titan_ge_rx_desc *) rx_desc_base_addr; ++ ++ /* Check alignment */ ++ if (rx_buff_base_addr & 0xF) ++ return 0; ++ ++ /* Check Rx buffer size */ ++ if ((rx_buff_size < 8) || (rx_buff_size > TITAN_GE_MAX_RX_BUFFER)) ++ return 0; ++ ++ /* 64-bit alignment ++ if ((rx_buff_base_addr + rx_buff_size) & 0x7) ++ return 0; */ ++ ++ /* Initialize the Rx desc ring */ ++ for (index = 0; index < rx_desc_num; index++) { ++ titan_ge_rx_desc_bus += sizeof(titan_ge_rx_desc); ++ rx_desc[index].cmd_sts = 0; ++ rx_desc[index].buffer_addr = buffer_addr; ++ titan_eth_port->rx_skb[index] = NULL; ++ buffer_addr += rx_buff_size; ++ } ++ ++ titan_eth_port->rx_curr_desc_q = 0; ++ titan_eth_port->rx_used_desc_q = 0; ++ ++ titan_eth_port->rx_desc_area = (titan_ge_rx_desc *) rx_desc_base_addr; ++ titan_eth_port->rx_desc_area_size = ++ rx_desc_num * sizeof(titan_ge_rx_desc); ++ ++ titan_eth_port->rx_dma = rx_dma; ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Initialize the Tx descriptor ring. Descriptors in the SRAM ++ */ ++static int titan_ge_init_tx_desc_ring(titan_ge_port_info * titan_ge_port, ++ int tx_desc_num, ++ unsigned long tx_desc_base_addr, ++ unsigned long tx_dma) ++{ ++ titan_ge_tx_desc *tx_desc; ++ int index; ++ unsigned long titan_ge_tx_desc_bus = tx_dma; ++ ++ if (tx_desc_base_addr & 0xF) ++ return 0; ++ ++ tx_desc = (titan_ge_tx_desc *) tx_desc_base_addr; ++ ++ for (index = 0; index < tx_desc_num; index++) { ++ titan_ge_port->tx_dma_array[index] = ++ (dma_addr_t) titan_ge_tx_desc_bus; ++ titan_ge_tx_desc_bus += sizeof(titan_ge_tx_desc); ++ tx_desc[index].cmd_sts = 0x0000; ++ tx_desc[index].buffer_len = 0; ++ tx_desc[index].buffer_addr = 0x00000000; ++ titan_ge_port->tx_skb[index] = NULL; ++ } ++ ++ titan_ge_port->tx_curr_desc_q = 0; ++ titan_ge_port->tx_used_desc_q = 0; ++ ++ titan_ge_port->tx_desc_area = (titan_ge_tx_desc *) tx_desc_base_addr; ++ titan_ge_port->tx_desc_area_size = ++ tx_desc_num * sizeof(titan_ge_tx_desc); ++ ++ titan_ge_port->tx_dma = tx_dma; ++ return TITAN_OK; ++} ++ ++/* ++ * Initialize the device as an Ethernet device ++ */ ++static int __init titan_ge_probe(struct device *device) ++{ ++ titan_ge_port_info *titan_ge_eth; ++ struct net_device *netdev; ++ int port = to_platform_device(device)->id; ++ int err; ++ ++ netdev = alloc_etherdev(sizeof(titan_ge_port_info)); ++ if (!netdev) { ++ err = -ENODEV; ++ goto out; ++ } ++ ++ netdev->open = titan_ge_open; ++ netdev->stop = titan_ge_stop; ++ netdev->hard_start_xmit = titan_ge_start_xmit; ++ netdev->get_stats = titan_ge_get_stats; ++ netdev->set_multicast_list = titan_ge_set_multi; ++ netdev->set_mac_address = titan_ge_set_mac_address; ++ ++ /* Tx timeout */ ++ netdev->tx_timeout = titan_ge_tx_timeout; ++ netdev->watchdog_timeo = 2 * HZ; ++ ++ /* Set these to very high values */ ++ netdev->poll = titan_ge_poll; ++ netdev->weight = 64; ++ ++ netdev->tx_queue_len = TITAN_GE_TX_QUEUE; ++ netif_carrier_off(netdev); ++ netdev->base_addr = 0; ++ ++ netdev->change_mtu = titan_ge_change_mtu; ++ ++ titan_ge_eth = netdev_priv(netdev); ++ /* Allocation of memory for the driver structures */ ++ ++ titan_ge_eth->port_num = port; ++ ++ /* Configure the Tx timeout handler */ ++ INIT_WORK(&titan_ge_eth->tx_timeout_task, ++ (void (*)(void *)) titan_ge_tx_timeout_task, netdev); ++ ++ spin_lock_init(&titan_ge_eth->lock); ++ ++ /* set MAC addresses */ ++ memcpy(netdev->dev_addr, titan_ge_mac_addr_base, 6); ++ netdev->dev_addr[5] += port; ++ ++ err = register_netdev(netdev); ++ ++ if (err) ++ goto out_free_netdev; ++ ++ printk(KERN_NOTICE ++ "%s: port %d with MAC address %02x:%02x:%02x:%02x:%02x:%02x\n", ++ netdev->name, port, netdev->dev_addr[0], ++ netdev->dev_addr[1], netdev->dev_addr[2], ++ netdev->dev_addr[3], netdev->dev_addr[4], ++ netdev->dev_addr[5]); ++ ++ printk(KERN_NOTICE "Rx NAPI supported, Tx Coalescing ON \n"); ++ ++ return 0; ++ ++out_free_netdev: ++ kfree(netdev); ++ ++out: ++ return err; ++} ++ ++static void __devexit titan_device_remove(struct device *device) ++{ ++} ++ ++/* ++ * Reset the Ethernet port ++ */ ++static void titan_ge_port_reset(unsigned int port_num) ++{ ++ unsigned int reg_data; ++ ++ /* Stop the Tx port activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x0001); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ /* Stop the Rx port activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x0001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ return; ++} ++ ++/* ++ * Return the Tx desc after use by the XDMA ++ */ ++static int titan_ge_return_tx_desc(titan_ge_port_info * titan_ge_eth, int port) ++{ ++ int tx_desc_used; ++ struct sk_buff *skb; ++ ++ tx_desc_used = titan_ge_eth->tx_used_desc_q; ++ ++ /* return right away */ ++ if (tx_desc_used == titan_ge_eth->tx_curr_desc_q) ++ return TITAN_ERROR; ++ ++ /* Now the critical stuff */ ++ skb = titan_ge_eth->tx_skb[tx_desc_used]; ++ ++ dev_kfree_skb_any(skb); ++ ++ titan_ge_eth->tx_skb[tx_desc_used] = NULL; ++ titan_ge_eth->tx_used_desc_q = ++ (tx_desc_used + 1) % TITAN_GE_TX_QUEUE; ++ ++ return 0; ++} ++ ++/* ++ * Coalescing for the Tx path ++ */ ++static unsigned long titan_ge_tx_coal(unsigned long delay, int port) ++{ ++ unsigned long rx_delay; ++ ++ rx_delay = TITAN_GE_READ(TITAN_GE_INT_COALESCING); ++ delay = (delay << 16) | rx_delay; ++ ++ TITAN_GE_WRITE(TITAN_GE_INT_COALESCING, delay); ++ TITAN_GE_WRITE(0x5038, delay); ++ ++ return delay; ++} ++ ++static struct device_driver titan_soc_driver = { ++ .name = titan_string, ++ .bus = &platform_bus_type, ++ .probe = titan_ge_probe, ++ .remove = __devexit_p(titan_device_remove), ++}; ++ ++static void titan_platform_release (struct device *device) ++{ ++ struct platform_device *pldev; ++ ++ /* free device */ ++ pldev = to_platform_device (device); ++ kfree (pldev); ++} ++ ++/* ++ * Register the Titan GE with the kernel ++ */ ++static int __init titan_ge_init_module(void) ++{ ++ struct platform_device *pldev; ++ unsigned int version, device; ++ int i; ++ ++ printk(KERN_NOTICE ++ "PMC-Sierra TITAN 10/100/1000 Ethernet Driver \n"); ++ ++ titan_ge_base = (unsigned long) ioremap(TITAN_GE_BASE, TITAN_GE_SIZE); ++ if (!titan_ge_base) { ++ printk("Mapping Titan GE failed\n"); ++ goto out; ++ } ++ ++ device = TITAN_GE_READ(TITAN_GE_DEVICE_ID); ++ version = (device & 0x000f0000) >> 16; ++ device &= 0x0000ffff; ++ ++ printk(KERN_NOTICE "Device Id : %x, Version : %x \n", device, version); ++ ++#ifdef TITAN_RX_RING_IN_SRAM ++ titan_ge_sram = (unsigned long) ioremap(TITAN_SRAM_BASE, ++ TITAN_SRAM_SIZE); ++ if (!titan_ge_sram) { ++ printk("Mapping Titan SRAM failed\n"); ++ goto out_unmap_ge; ++ } ++#endif ++ ++ if (driver_register(&titan_soc_driver)) { ++ printk(KERN_ERR "Driver registration failed\n"); ++ goto out_unmap_sram; ++ } ++ ++ for (i = 0; i < 3; i++) { ++ titan_ge_device[i] = NULL; ++ ++ if (!(pldev = kmalloc (sizeof (*pldev), GFP_KERNEL))) ++ continue; ++ ++ memset (pldev, 0, sizeof (*pldev)); ++ pldev->name = titan_string; ++ pldev->id = i; ++ pldev->dev.release = titan_platform_release; ++ titan_ge_device[i] = pldev; ++ ++ if (platform_device_register (pldev)) { ++ kfree (pldev); ++ titan_ge_device[i] = NULL; ++ continue; ++ } ++ ++ if (!pldev->dev.driver) { ++ /* ++ * The driver was not bound to this device, there was ++ * no hardware at this address. Unregister it, as the ++ * release fuction will take care of freeing the ++ * allocated structure ++ */ ++ titan_ge_device[i] = NULL; ++ platform_device_unregister (pldev); ++ } ++ } ++ ++ return 0; ++ ++out_unmap_sram: ++ iounmap((void *)titan_ge_sram); ++ ++out_unmap_ge: ++ iounmap((void *)titan_ge_base); ++ ++out: ++ return -ENOMEM; ++} ++ ++/* ++ * Unregister the Titan GE from the kernel ++ */ ++static void __exit titan_ge_cleanup_module(void) ++{ ++ int i; ++ ++ driver_unregister(&titan_soc_driver); ++ ++ for (i = 0; i < 3; i++) { ++ if (titan_ge_device[i]) { ++ platform_device_unregister (titan_ge_device[i]); ++ titan_ge_device[i] = NULL; ++ } ++ } ++ ++ iounmap((void *)titan_ge_sram); ++ iounmap((void *)titan_ge_base); ++} ++ ++MODULE_AUTHOR("Manish Lachwani "); ++MODULE_DESCRIPTION("Titan GE Ethernet driver"); ++MODULE_LICENSE("GPL"); ++ ++module_init(titan_ge_init_module); ++module_exit(titan_ge_cleanup_module); +diff --git a/drivers/net/titan_ge.h b/drivers/net/titan_ge.h +new file mode 100644 +index 0000000..3719f78 +--- /dev/null ++++ b/drivers/net/titan_ge.h +@@ -0,0 +1,415 @@ ++#ifndef _TITAN_GE_H_ ++#define _TITAN_GE_H_ ++ ++#include ++#include ++#include ++#include ++ ++/* ++ * These functions should be later moved to a more generic location since there ++ * will be others accessing it also ++ */ ++ ++/* ++ * This is the way it works: LKB5 Base is at 0x0128. TITAN_BASE is defined in ++ * include/asm/titan_dep.h. TITAN_GE_BASE is the value in the TITAN_GE_LKB5 ++ * register. ++ */ ++ ++#define TITAN_GE_BASE 0xfe000000UL ++#define TITAN_GE_SIZE 0x10000UL ++ ++extern unsigned long titan_ge_base; ++ ++#define TITAN_GE_WRITE(offset, data) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) = (data) ++ ++#define TITAN_GE_READ(offset) *(volatile u32 *)(titan_ge_base + (offset)) ++ ++#ifndef msec_delay ++#define msec_delay(x) do { if(in_interrupt()) { \ ++ /* Don't mdelay in interrupt context! */ \ ++ BUG(); \ ++ } else { \ ++ set_current_state(TASK_UNINTERRUPTIBLE); \ ++ schedule_timeout((x * HZ)/1000); \ ++ } } while(0) ++#endif ++ ++#define TITAN_GE_PORT_0 ++ ++#define TITAN_SRAM_BASE ((OCD_READ(RM9000x2_OCD_LKB13) & ~1) << 4) ++#define TITAN_SRAM_SIZE 0x2000UL ++ ++/* ++ * We may need these constants ++ */ ++#define TITAN_BIT0 0x00000001 ++#define TITAN_BIT1 0x00000002 ++#define TITAN_BIT2 0x00000004 ++#define TITAN_BIT3 0x00000008 ++#define TITAN_BIT4 0x00000010 ++#define TITAN_BIT5 0x00000020 ++#define TITAN_BIT6 0x00000040 ++#define TITAN_BIT7 0x00000080 ++#define TITAN_BIT8 0x00000100 ++#define TITAN_BIT9 0x00000200 ++#define TITAN_BIT10 0x00000400 ++#define TITAN_BIT11 0x00000800 ++#define TITAN_BIT12 0x00001000 ++#define TITAN_BIT13 0x00002000 ++#define TITAN_BIT14 0x00004000 ++#define TITAN_BIT15 0x00008000 ++#define TITAN_BIT16 0x00010000 ++#define TITAN_BIT17 0x00020000 ++#define TITAN_BIT18 0x00040000 ++#define TITAN_BIT19 0x00080000 ++#define TITAN_BIT20 0x00100000 ++#define TITAN_BIT21 0x00200000 ++#define TITAN_BIT22 0x00400000 ++#define TITAN_BIT23 0x00800000 ++#define TITAN_BIT24 0x01000000 ++#define TITAN_BIT25 0x02000000 ++#define TITAN_BIT26 0x04000000 ++#define TITAN_BIT27 0x08000000 ++#define TITAN_BIT28 0x10000000 ++#define TITAN_BIT29 0x20000000 ++#define TITAN_BIT30 0x40000000 ++#define TITAN_BIT31 0x80000000 ++ ++/* Flow Control */ ++#define TITAN_GE_FC_NONE 0x0 ++#define TITAN_GE_FC_FULL 0x1 ++#define TITAN_GE_FC_TX_PAUSE 0x2 ++#define TITAN_GE_FC_RX_PAUSE 0x3 ++ ++/* Duplex Settings */ ++#define TITAN_GE_FULL_DUPLEX 0x1 ++#define TITAN_GE_HALF_DUPLEX 0x2 ++ ++/* Speed settings */ ++#define TITAN_GE_SPEED_1000 0x1 ++#define TITAN_GE_SPEED_100 0x2 ++#define TITAN_GE_SPEED_10 0x3 ++ ++/* Debugging info only */ ++#undef TITAN_DEBUG ++ ++/* Keep the rings in the Titan's SSRAM */ ++#define TITAN_RX_RING_IN_SRAM ++ ++#ifdef CONFIG_64BIT ++#define TITAN_GE_IE_MASK 0xfffffffffb001b64 ++#define TITAN_GE_IE_STATUS 0xfffffffffb001b60 ++#else ++#define TITAN_GE_IE_MASK 0xfb001b64 ++#define TITAN_GE_IE_STATUS 0xfb001b60 ++#endif ++ ++/* Support for Jumbo Frames */ ++#undef TITAN_GE_JUMBO_FRAMES ++ ++/* Rx buffer size */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++#define TITAN_GE_JUMBO_BUFSIZE 9080 ++#else ++#define TITAN_GE_STD_BUFSIZE 1580 ++#endif ++ ++/* ++ * Tx and Rx Interrupt Coalescing parameter. These values are ++ * for 1 Ghz processor. Rx coalescing can be taken care of ++ * by NAPI. NAPI is adaptive and hence useful. Tx coalescing ++ * is not adaptive. Hence, these values need to be adjusted ++ * based on load, CPU speed etc. ++ */ ++#define TITAN_GE_RX_COAL 150 ++#define TITAN_GE_TX_COAL 300 ++ ++#if defined(__BIG_ENDIAN) ++ ++/* Define the Rx descriptor */ ++typedef struct eth_rx_desc { ++ u32 reserved; /* Unused */ ++ u32 buffer_addr; /* CPU buffer address */ ++ u32 cmd_sts; /* Command and Status */ ++ u32 buffer; /* XDMA buffer address */ ++} titan_ge_rx_desc; ++ ++/* Define the Tx descriptor */ ++typedef struct eth_tx_desc { ++ u16 cmd_sts; /* Command, Status and Buffer count */ ++ u16 buffer_len; /* Length of the buffer */ ++ u32 buffer_addr; /* Physical address of the buffer */ ++} titan_ge_tx_desc; ++ ++#elif defined(__LITTLE_ENDIAN) ++ ++/* Define the Rx descriptor */ ++typedef struct eth_rx_desc { ++ u32 buffer_addr; /* CPU buffer address */ ++ u32 reserved; /* Unused */ ++ u32 buffer; /* XDMA buffer address */ ++ u32 cmd_sts; /* Command and Status */ ++} titan_ge_rx_desc; ++ ++/* Define the Tx descriptor */ ++typedef struct eth_tx_desc { ++ u32 buffer_addr; /* Physical address of the buffer */ ++ u16 buffer_len; /* Length of the buffer */ ++ u16 cmd_sts; /* Command, Status and Buffer count */ ++} titan_ge_tx_desc; ++#endif ++ ++/* Default Tx Queue Size */ ++#define TITAN_GE_TX_QUEUE 128 ++#define TITAN_TX_RING_BYTES (TITAN_GE_TX_QUEUE * sizeof(struct eth_tx_desc)) ++ ++/* Default Rx Queue Size */ ++#define TITAN_GE_RX_QUEUE 64 ++#define TITAN_RX_RING_BYTES (TITAN_GE_RX_QUEUE * sizeof(struct eth_rx_desc)) ++ ++/* Packet Structure */ ++typedef struct _pkt_info { ++ unsigned int len; ++ unsigned int cmd_sts; ++ unsigned int buffer; ++ struct sk_buff *skb; ++ unsigned int checksum; ++} titan_ge_packet; ++ ++ ++#define PHYS_CNT 3 ++ ++/* Titan Port specific data structure */ ++typedef struct _eth_port_ctrl { ++ unsigned int port_num; ++ u8 port_mac_addr[6]; ++ ++ /* Rx descriptor pointers */ ++ int rx_curr_desc_q, rx_used_desc_q; ++ ++ /* Tx descriptor pointers */ ++ int tx_curr_desc_q, tx_used_desc_q; ++ ++ /* Rx descriptor area */ ++ volatile titan_ge_rx_desc *rx_desc_area; ++ unsigned int rx_desc_area_size; ++ struct sk_buff* rx_skb[TITAN_GE_RX_QUEUE]; ++ ++ /* Tx Descriptor area */ ++ volatile titan_ge_tx_desc *tx_desc_area; ++ unsigned int tx_desc_area_size; ++ struct sk_buff* tx_skb[TITAN_GE_TX_QUEUE]; ++ ++ /* Timeout task */ ++ struct work_struct tx_timeout_task; ++ ++ /* DMA structures and handles */ ++ dma_addr_t tx_dma; ++ dma_addr_t rx_dma; ++ dma_addr_t tx_dma_array[TITAN_GE_TX_QUEUE]; ++ ++ /* Device lock */ ++ spinlock_t lock; ++ ++ unsigned int tx_ring_skbs; ++ unsigned int rx_ring_size; ++ unsigned int tx_ring_size; ++ unsigned int rx_ring_skbs; ++ ++ struct net_device_stats stats; ++ ++ /* Tx and Rx coalescing */ ++ unsigned long rx_int_coal; ++ unsigned long tx_int_coal; ++ ++ /* Threshold for replenishing the Rx and Tx rings */ ++ unsigned int tx_threshold; ++ unsigned int rx_threshold; ++ ++ /* NAPI work limit */ ++ unsigned int rx_work_limit; ++} titan_ge_port_info; ++ ++/* Titan specific constants */ ++#define TITAN_ETH_PORT_IRQ 3 ++ ++/* Max Rx buffer */ ++#define TITAN_GE_MAX_RX_BUFFER 65536 ++ ++/* Tx and Rx Error */ ++#define TITAN_GE_ERROR ++ ++/* Rx Descriptor Command and Status */ ++ ++#define TITAN_GE_RX_CRC_ERROR TITAN_BIT27 /* crc error */ ++#define TITAN_GE_RX_OVERFLOW_ERROR TITAN_BIT15 /* overflow */ ++#define TITAN_GE_RX_BUFFER_OWNED TITAN_BIT21 /* buffer ownership */ ++#define TITAN_GE_RX_STP TITAN_BIT31 /* start of packet */ ++#define TITAN_GE_RX_BAM TITAN_BIT30 /* broadcast address match */ ++#define TITAN_GE_RX_PAM TITAN_BIT28 /* physical address match */ ++#define TITAN_GE_RX_LAFM TITAN_BIT29 /* logical address filter match */ ++#define TITAN_GE_RX_VLAN TITAN_BIT26 /* virtual lans */ ++#define TITAN_GE_RX_PERR TITAN_BIT19 /* packet error */ ++#define TITAN_GE_RX_TRUNC TITAN_BIT20 /* packet size greater than 32 buffers */ ++ ++/* Tx Descriptor Command */ ++#define TITAN_GE_TX_BUFFER_OWNED TITAN_BIT5 /* buffer ownership */ ++#define TITAN_GE_TX_ENABLE_INTERRUPT TITAN_BIT15 /* Interrupt Enable */ ++ ++/* Return Status */ ++#define TITAN_OK 0x1 /* Good Status */ ++#define TITAN_ERROR 0x2 /* Error Status */ ++ ++/* MIB specific register offset */ ++#define TITAN_GE_MSTATX_STATS_BASE_LOW 0x0800 /* MSTATX COUNTL[15:0] */ ++#define TITAN_GE_MSTATX_STATS_BASE_MID 0x0804 /* MSTATX COUNTM[15:0] */ ++#define TITAN_GE_MSTATX_STATS_BASE_HI 0x0808 /* MSTATX COUNTH[7:0] */ ++#define TITAN_GE_MSTATX_CONTROL 0x0828 /* MSTATX Control */ ++#define TITAN_GE_MSTATX_VARIABLE_SELECT 0x082C /* MSTATX Variable Select */ ++ ++/* MIB counter offsets, add to the TITAN_GE_MSTATX_STATS_BASE_XXX */ ++#define TITAN_GE_MSTATX_RXFRAMESOK 0x0040 ++#define TITAN_GE_MSTATX_RXOCTETSOK 0x0050 ++#define TITAN_GE_MSTATX_RXFRAMES 0x0060 ++#define TITAN_GE_MSTATX_RXOCTETS 0x0070 ++#define TITAN_GE_MSTATX_RXUNICASTFRAMESOK 0x0080 ++#define TITAN_GE_MSTATX_RXBROADCASTFRAMESOK 0x0090 ++#define TITAN_GE_MSTATX_RXMULTICASTFRAMESOK 0x00A0 ++#define TITAN_GE_MSTATX_RXTAGGEDFRAMESOK 0x00B0 ++#define TITAN_GE_MSTATX_RXMACPAUSECONTROLFRAMESOK 0x00C0 ++#define TITAN_GE_MSTATX_RXMACCONTROLFRAMESOK 0x00D0 ++#define TITAN_GE_MSTATX_RXFCSERROR 0x00E0 ++#define TITAN_GE_MSTATX_RXALIGNMENTERROR 0x00F0 ++#define TITAN_GE_MSTATX_RXSYMBOLERROR 0x0100 ++#define TITAN_GE_MSTATX_RXLAYER1ERROR 0x0110 ++#define TITAN_GE_MSTATX_RXINRANGELENGTHERROR 0x0120 ++#define TITAN_GE_MSTATX_RXLONGLENGTHERROR 0x0130 ++#define TITAN_GE_MSTATX_RXLONGLENGTHCRCERROR 0x0140 ++#define TITAN_GE_MSTATX_RXSHORTLENGTHERROR 0x0150 ++#define TITAN_GE_MSTATX_RXSHORTLLENGTHCRCERROR 0x0160 ++#define TITAN_GE_MSTATX_RXFRAMES64OCTETS 0x0170 ++#define TITAN_GE_MSTATX_RXFRAMES65TO127OCTETS 0x0180 ++#define TITAN_GE_MSTATX_RXFRAMES128TO255OCTETS 0x0190 ++#define TITAN_GE_MSTATX_RXFRAMES256TO511OCTETS 0x01A0 ++#define TITAN_GE_MSTATX_RXFRAMES512TO1023OCTETS 0x01B0 ++#define TITAN_GE_MSTATX_RXFRAMES1024TO1518OCTETS 0x01C0 ++#define TITAN_GE_MSTATX_RXFRAMES1519TOMAXSIZE 0x01D0 ++#define TITAN_GE_MSTATX_RXSTATIONADDRESSFILTERED 0x01E0 ++#define TITAN_GE_MSTATX_RXVARIABLE 0x01F0 ++#define TITAN_GE_MSTATX_GENERICADDRESSFILTERED 0x0200 ++#define TITAN_GE_MSTATX_UNICASTFILTERED 0x0210 ++#define TITAN_GE_MSTATX_MULTICASTFILTERED 0x0220 ++#define TITAN_GE_MSTATX_BROADCASTFILTERED 0x0230 ++#define TITAN_GE_MSTATX_HASHFILTERED 0x0240 ++#define TITAN_GE_MSTATX_TXFRAMESOK 0x0250 ++#define TITAN_GE_MSTATX_TXOCTETSOK 0x0260 ++#define TITAN_GE_MSTATX_TXOCTETS 0x0270 ++#define TITAN_GE_MSTATX_TXTAGGEDFRAMESOK 0x0280 ++#define TITAN_GE_MSTATX_TXMACPAUSECONTROLFRAMESOK 0x0290 ++#define TITAN_GE_MSTATX_TXFCSERROR 0x02A0 ++#define TITAN_GE_MSTATX_TXSHORTLENGTHERROR 0x02B0 ++#define TITAN_GE_MSTATX_TXLONGLENGTHERROR 0x02C0 ++#define TITAN_GE_MSTATX_TXSYSTEMERROR 0x02D0 ++#define TITAN_GE_MSTATX_TXMACERROR 0x02E0 ++#define TITAN_GE_MSTATX_TXCARRIERSENSEERROR 0x02F0 ++#define TITAN_GE_MSTATX_TXSQETESTERROR 0x0300 ++#define TITAN_GE_MSTATX_TXUNICASTFRAMESOK 0x0310 ++#define TITAN_GE_MSTATX_TXBROADCASTFRAMESOK 0x0320 ++#define TITAN_GE_MSTATX_TXMULTICASTFRAMESOK 0x0330 ++#define TITAN_GE_MSTATX_TXUNICASTFRAMESATTEMPTED 0x0340 ++#define TITAN_GE_MSTATX_TXBROADCASTFRAMESATTEMPTED 0x0350 ++#define TITAN_GE_MSTATX_TXMULTICASTFRAMESATTEMPTED 0x0360 ++#define TITAN_GE_MSTATX_TXFRAMES64OCTETS 0x0370 ++#define TITAN_GE_MSTATX_TXFRAMES65TO127OCTETS 0x0380 ++#define TITAN_GE_MSTATX_TXFRAMES128TO255OCTETS 0x0390 ++#define TITAN_GE_MSTATX_TXFRAMES256TO511OCTETS 0x03A0 ++#define TITAN_GE_MSTATX_TXFRAMES512TO1023OCTETS 0x03B0 ++#define TITAN_GE_MSTATX_TXFRAMES1024TO1518OCTETS 0x03C0 ++#define TITAN_GE_MSTATX_TXFRAMES1519TOMAXSIZE 0x03D0 ++#define TITAN_GE_MSTATX_TXVARIABLE 0x03E0 ++#define TITAN_GE_MSTATX_RXSYSTEMERROR 0x03F0 ++#define TITAN_GE_MSTATX_SINGLECOLLISION 0x0400 ++#define TITAN_GE_MSTATX_MULTIPLECOLLISION 0x0410 ++#define TITAN_GE_MSTATX_DEFERREDXMISSIONS 0x0420 ++#define TITAN_GE_MSTATX_LATECOLLISIONS 0x0430 ++#define TITAN_GE_MSTATX_ABORTEDDUETOXSCOLLS 0x0440 ++ ++/* Interrupt specific defines */ ++#define TITAN_GE_DEVICE_ID 0x0000 /* Device ID */ ++#define TITAN_GE_RESET 0x0004 /* Reset reg */ ++#define TITAN_GE_TSB_CTRL_0 0x000C /* TSB Control reg 0 */ ++#define TITAN_GE_TSB_CTRL_1 0x0010 /* TSB Control reg 1 */ ++#define TITAN_GE_INTR_GRP0_STATUS 0x0040 /* General Interrupt Group 0 Status */ ++#define TITAN_GE_INTR_XDMA_CORE_A 0x0048 /* XDMA Channel Interrupt Status, Core A*/ ++#define TITAN_GE_INTR_XDMA_CORE_B 0x004C /* XDMA Channel Interrupt Status, Core B*/ ++#define TITAN_GE_INTR_XDMA_IE 0x0058 /* XDMA Channel Interrupt Enable */ ++#define TITAN_GE_SDQPF_ECC_INTR 0x480C /* SDQPF ECC Interrupt Status */ ++#define TITAN_GE_SDQPF_RXFIFO_CTL 0x4828 /* SDQPF RxFifo Control and Interrupt Enb*/ ++#define TITAN_GE_SDQPF_RXFIFO_INTR 0x482C /* SDQPF RxFifo Interrupt Status */ ++#define TITAN_GE_SDQPF_TXFIFO_CTL 0x4928 /* SDQPF TxFifo Control and Interrupt Enb*/ ++#define TITAN_GE_SDQPF_TXFIFO_INTR 0x492C /* SDQPF TxFifo Interrupt Status */ ++#define TITAN_GE_SDQPF_RXFIFO_0 0x4840 /* SDQPF RxFIFO Enable */ ++#define TITAN_GE_SDQPF_TXFIFO_0 0x4940 /* SDQPF TxFIFO Enable */ ++#define TITAN_GE_XDMA_CONFIG 0x5000 /* XDMA Global Configuration */ ++#define TITAN_GE_XDMA_INTR_SUMMARY 0x5010 /* XDMA Interrupt Summary */ ++#define TITAN_GE_XDMA_BUFADDRPRE 0x5018 /* XDMA Buffer Address Prefix */ ++#define TITAN_GE_XDMA_DESCADDRPRE 0x501C /* XDMA Descriptor Address Prefix */ ++#define TITAN_GE_XDMA_PORTWEIGHT 0x502C /* XDMA Port Weight Configuration */ ++ ++/* Rx MAC defines */ ++#define TITAN_GE_RMAC_CONFIG_1 0x1200 /* RMAC Configuration 1 */ ++#define TITAN_GE_RMAC_CONFIG_2 0x1204 /* RMAC Configuration 2 */ ++#define TITAN_GE_RMAC_MAX_FRAME_LEN 0x1208 /* RMAC Max Frame Length */ ++#define TITAN_GE_RMAC_STATION_HI 0x120C /* Rx Station Address High */ ++#define TITAN_GE_RMAC_STATION_MID 0x1210 /* Rx Station Address Middle */ ++#define TITAN_GE_RMAC_STATION_LOW 0x1214 /* Rx Station Address Low */ ++#define TITAN_GE_RMAC_LINK_CONFIG 0x1218 /* RMAC Link Configuration */ ++ ++/* Tx MAC defines */ ++#define TITAN_GE_TMAC_CONFIG_1 0x1240 /* TMAC Configuration 1 */ ++#define TITAN_GE_TMAC_CONFIG_2 0x1244 /* TMAC Configuration 2 */ ++#define TITAN_GE_TMAC_IPG 0x1248 /* TMAC Inter-Packet Gap */ ++#define TITAN_GE_TMAC_STATION_HI 0x124C /* Tx Station Address High */ ++#define TITAN_GE_TMAC_STATION_MID 0x1250 /* Tx Station Address Middle */ ++#define TITAN_GE_TMAC_STATION_LOW 0x1254 /* Tx Station Address Low */ ++#define TITAN_GE_TMAC_MAX_FRAME_LEN 0x1258 /* TMAC Max Frame Length */ ++#define TITAN_GE_TMAC_MIN_FRAME_LEN 0x125C /* TMAC Min Frame Length */ ++#define TITAN_GE_TMAC_PAUSE_FRAME_TIME 0x1260 /* TMAC Pause Frame Time */ ++#define TITAN_GE_TMAC_PAUSE_FRAME_INTERVAL 0x1264 /* TMAC Pause Frame Interval */ ++ ++/* GMII register */ ++#define TITAN_GE_GMII_INTERRUPT_STATUS 0x1348 /* GMII Interrupt Status */ ++#define TITAN_GE_GMII_CONFIG_GENERAL 0x134C /* GMII Configuration General */ ++#define TITAN_GE_GMII_CONFIG_MODE 0x1350 /* GMII Configuration Mode */ ++ ++/* Tx and Rx XDMA defines */ ++#define TITAN_GE_INT_COALESCING 0x5030 /* Interrupt Coalescing */ ++#define TITAN_GE_CHANNEL0_CONFIG 0x5040 /* Channel 0 XDMA config */ ++#define TITAN_GE_CHANNEL0_INTERRUPT 0x504c /* Channel 0 Interrupt Status */ ++#define TITAN_GE_GDI_INTERRUPT_ENABLE 0x5050 /* IE for the GDI Errors */ ++#define TITAN_GE_CHANNEL0_PACKET 0x5060 /* Channel 0 Packet count */ ++#define TITAN_GE_CHANNEL0_BYTE 0x5064 /* Channel 0 Byte count */ ++#define TITAN_GE_CHANNEL0_TX_DESC 0x5054 /* Channel 0 Tx first desc */ ++#define TITAN_GE_CHANNEL0_RX_DESC 0x5058 /* Channel 0 Rx first desc */ ++ ++/* AFX (Address Filter Exact) register offsets for Slice 0 */ ++#define TITAN_GE_AFX_EXACT_MATCH_LOW 0x1100 /* AFX Exact Match Address Low*/ ++#define TITAN_GE_AFX_EXACT_MATCH_MID 0x1104 /* AFX Exact Match Address Mid*/ ++#define TITAN_GE_AFX_EXACT_MATCH_HIGH 0x1108 /* AFX Exact Match Address Hi */ ++#define TITAN_GE_AFX_EXACT_MATCH_VID 0x110C /* AFX Exact Match VID */ ++#define TITAN_GE_AFX_MULTICAST_HASH_LOW 0x1110 /* AFX Multicast HASH Low */ ++#define TITAN_GE_AFX_MULTICAST_HASH_MIDLOW 0x1114 /* AFX Multicast HASH MidLow */ ++#define TITAN_GE_AFX_MULTICAST_HASH_MIDHI 0x1118 /* AFX Multicast HASH MidHi */ ++#define TITAN_GE_AFX_MULTICAST_HASH_HI 0x111C /* AFX Multicast HASH Hi */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 0x1120 /* AFX Address Filter Ctrl 0 */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 0x1124 /* AFX Address Filter Ctrl 1 */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 0x1128 /* AFX Address Filter Ctrl 2 */ ++ ++/* Traffic Groomer block */ ++#define TITAN_GE_TRTG_CONFIG 0x1000 /* TRTG Config */ ++ ++#endif /* _TITAN_GE_H_ */ ++ +diff --git a/drivers/net/titan_mdio.c b/drivers/net/titan_mdio.c +new file mode 100644 +index 0000000..8a8785b +--- /dev/null ++++ b/drivers/net/titan_mdio.c +@@ -0,0 +1,217 @@ ++/* ++ * drivers/net/titan_mdio.c - Driver for Titan ethernet ports ++ * ++ * Copyright (C) 2003 PMC-Sierra Inc. ++ * Author : Manish Lachwani (lachwani@pmc-sierra.com) ++ * ++ * 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. ++ * ++ * Management Data IO (MDIO) driver for the Titan GMII. Interacts with the Marvel PHY ++ * on the Titan. No support for the TBI as yet. ++ * ++ */ ++ ++#include "titan_mdio.h" ++ ++#define MDIO_DEBUG ++ ++/* ++ * Local constants ++ */ ++#define MAX_CLKA 1023 ++#define MAX_PHY_DEV 31 ++#define MAX_PHY_REG 31 ++#define WRITEADDRS_OPCODE 0x0 ++#define READ_OPCODE 0x2 ++#define WRITE_OPCODE 0x1 ++#define MAX_MDIO_POLL 100 ++ ++/* ++ * Titan MDIO and SCMB registers ++ */ ++#define TITAN_GE_SCMB_CONTROL 0x01c0 /* SCMB Control */ ++#define TITAN_GE_SCMB_CLKA 0x01c4 /* SCMB Clock A */ ++#define TITAN_GE_MDIO_COMMAND 0x01d0 /* MDIO Command */ ++#define TITAN_GE_MDIO_DEVICE_PORT_ADDRESS 0x01d4 /* MDIO Device and Port addrs */ ++#define TITAN_GE_MDIO_DATA 0x01d8 /* MDIO Data */ ++#define TITAN_GE_MDIO_INTERRUPTS 0x01dC /* MDIO Interrupts */ ++ ++/* ++ * Function to poll the MDIO ++ */ ++static int titan_ge_mdio_poll(void) ++{ ++ int i, val; ++ ++ for (i = 0; i < MAX_MDIO_POLL; i++) { ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ ++ if (!(val & 0x8000)) ++ return TITAN_GE_MDIO_GOOD; ++ } ++ ++ return TITAN_GE_MDIO_ERROR; ++} ++ ++ ++/* ++ * Initialize and configure the MDIO ++ */ ++int titan_ge_mdio_setup(titan_ge_mdio_config *titan_mdio) ++{ ++ unsigned long val; ++ ++ /* Reset the SCMB and program into MDIO mode*/ ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x9000); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x1000); ++ ++ /* CLK A */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_SCMB_CLKA); ++ val = ( (val & ~(0x03ff)) | (titan_mdio->clka & 0x03ff)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CLKA, val); ++ ++ /* Preamble Suppresion */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0001)) | (titan_mdio->mdio_spre & 0x0001)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ /* MDIO mode */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x4000)) | (titan_mdio->mdio_mode & 0x4000)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Set the PHY address in indirect mode ++ */ ++int titan_ge_mdio_inaddrs(int dev_addr, int reg_addr) ++{ ++ volatile unsigned long val; ++ ++ /* Setup the PHY device */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ /* Write the new address */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (WRITEADDRS_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Read the MDIO register. This is what the individual parametes mean: ++ * ++ * dev_addr : PHY ID ++ * reg_addr : register offset ++ * ++ * See the spec for the Titan MAC. We operate in the Direct Mode. ++ */ ++ ++#define MAX_RETRIES 2 ++ ++int titan_ge_mdio_read(int dev_addr, int reg_addr, unsigned int *pdata) ++{ ++ volatile unsigned long val; ++ int retries = 0; ++ ++ /* Setup the PHY device */ ++ ++again: ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ val |= 0x4000; ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ udelay(30); ++ ++ /* Issue the read command */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (READ_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ udelay(30); ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ *pdata = (unsigned int)TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DATA); ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS); ++ ++ udelay(30); ++ ++ if (val & 0x2) { ++ if (retries == MAX_RETRIES) ++ return TITAN_GE_MDIO_ERROR; ++ else { ++ retries++; ++ goto again; ++ } ++ } ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Write to the MDIO register ++ * ++ * dev_addr : PHY ID ++ * reg_addr : register that needs to be written to ++ * ++ */ ++int titan_ge_mdio_write(int dev_addr, int reg_addr, unsigned int data) ++{ ++ volatile unsigned long val; ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ /* Setup the PHY device */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ val |= 0x4000; ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ udelay(30); ++ ++ /* Setup the data to write */ ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DATA, data); ++ ++ udelay(30); ++ ++ /* Issue the write command */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (WRITE_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ udelay(30); ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS); ++ if (val & 0x2) ++ return TITAN_GE_MDIO_ERROR; ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ +diff --git a/drivers/net/titan_mdio.h b/drivers/net/titan_mdio.h +new file mode 100644 +index 0000000..5d23344 +--- /dev/null ++++ b/drivers/net/titan_mdio.h +@@ -0,0 +1,56 @@ ++/* ++ * MDIO used to interact with the PHY when using GMII/MII ++ */ ++#ifndef _TITAN_MDIO_H ++#define _TITAN_MDIO_H ++ ++#include ++#include ++#include ++#include "titan_ge.h" ++ ++ ++#define TITAN_GE_MDIO_ERROR (-9000) ++#define TITAN_GE_MDIO_GOOD 0 ++ ++#define TITAN_GE_MDIO_BASE titan_ge_base ++ ++#define TITAN_GE_MDIO_READ(offset) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) ++ ++#define TITAN_GE_MDIO_WRITE(offset, data) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) = (data) ++ ++ ++/* GMII specific registers */ ++#define TITAN_GE_MARVEL_PHY_ID 0x00 ++#define TITAN_PHY_AUTONEG_ADV 0x04 ++#define TITAN_PHY_LP_ABILITY 0x05 ++#define TITAN_GE_MDIO_MII_CTRL 0x09 ++#define TITAN_GE_MDIO_MII_EXTENDED 0x0f ++#define TITAN_GE_MDIO_PHY_CTRL 0x10 ++#define TITAN_GE_MDIO_PHY_STATUS 0x11 ++#define TITAN_GE_MDIO_PHY_IE 0x12 ++#define TITAN_GE_MDIO_PHY_IS 0x13 ++#define TITAN_GE_MDIO_PHY_LED 0x18 ++#define TITAN_GE_MDIO_PHY_LED_OVER 0x19 ++#define PHY_ANEG_TIME_WAIT 45 /* 45 seconds wait time */ ++ ++/* ++ * MDIO Config Structure ++ */ ++typedef struct { ++ unsigned int clka; ++ int mdio_spre; ++ int mdio_mode; ++} titan_ge_mdio_config; ++ ++/* ++ * Function Prototypes ++ */ ++int titan_ge_mdio_setup(titan_ge_mdio_config *); ++int titan_ge_mdio_inaddrs(int, int); ++int titan_ge_mdio_read(int, int, unsigned int *); ++int titan_ge_mdio_write(int, int, unsigned int); ++ ++#endif /* _TITAN_MDIO_H */ +diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig +index f8f0156..e6b8e8a 100644 +--- a/drivers/net/wireless/Kconfig ++++ b/drivers/net/wireless/Kconfig +@@ -213,6 +213,91 @@ config USB_NET_RNDIS_WLAN + + If you choose to build a module, it'll be called rndis_wlan. + ++config RTL8180 ++ tristate "Realtek 8180/8185 PCI support" ++ depends on MAC80211 && PCI && EXPERIMENTAL ++ select EEPROM_93CX6 ++ ---help--- ++ This is a driver for RTL8180 and RTL8185 based cards. ++ These are PCI based chips found in cards such as: ++ ++ (RTL8185 802.11g) ++ A-Link WL54PC ++ ++ (RTL8180 802.11b) ++ Belkin F5D6020 v3 ++ Belkin F5D6020 v3 ++ Dlink DWL-610 ++ Dlink DWL-510 ++ Netgear MA521 ++ Level-One WPC-0101 ++ Acer Aspire 1357 LMi ++ VCTnet PC-11B1 ++ Ovislink AirLive WL-1120PCM ++ Mentor WL-PCI ++ Linksys WPC11 v4 ++ TrendNET TEW-288PI ++ D-Link DWL-520 Rev D ++ Repotec RP-WP7126 ++ TP-Link TL-WN250/251 ++ Zonet ZEW1000 ++ Longshine LCS-8031-R ++ HomeLine HLW-PCC200 ++ GigaFast WF721-AEX ++ Planet WL-3553 ++ Encore ENLWI-PCI1-NT ++ TrendNET TEW-266PC ++ Gigabyte GN-WLMR101 ++ Siemens-fujitsu Amilo D1840W ++ Edimax EW-7126 ++ PheeNet WL-11PCIR ++ Tonze PC-2100T ++ Planet WL-8303 ++ Dlink DWL-650 v M1 ++ Edimax EW-7106 ++ Q-Tec 770WC ++ Topcom Skyr@cer 4011b ++ Roper FreeLan 802.11b (edition 2004) ++ Wistron Neweb Corp CB-200B ++ Pentagram HorNET ++ QTec 775WC ++ TwinMOS Booming B Series ++ Micronet SP906BB ++ Sweex LC700010 ++ Surecom EP-9428 ++ Safecom SWLCR-1100 ++ ++ Thanks to Realtek for their support! ++ ++config RTL8187 ++ tristate "Realtek 8187 and 8187B USB support" ++ depends on MAC80211 && USB && !LEMOTE_MACH2F ++ select EEPROM_93CX6 ++ ---help--- ++ This is a driver for RTL8187 and RTL8187B based cards. ++ These are USB based chips found in devices such as: ++ ++ Netgear WG111v2 ++ Level 1 WNC-0301USB ++ Micronet SP907GK V5 ++ Encore ENUWI-G2 ++ Trendnet TEW-424UB ++ ASUS P5B Deluxe/P5K Premium motherboards ++ Toshiba Satellite Pro series of laptops ++ Asus Wireless Link ++ Linksys WUSB54GC-EU v2 ++ (v1 = rt73usb; v3 is rt2070-based, ++ use staging/rt3070 or try rt2800usb) ++ ++ Thanks to Realtek for their support! ++ ++# If possible, automatically enable LEDs for RTL8187. ++ ++config RTL8187_LEDS ++ bool ++ depends on RTL8187 && MAC80211_LEDS && (LEDS_CLASS = y || LEDS_CLASS = RTL8187) ++ default y ++ + source "drivers/net/wireless/rtl818x/Kconfig" + + config ADM8211 +diff --git a/drivers/net/wireless/Makefile b/drivers/net/wireless/Makefile +index 67156ef..940aaf7 100644 +--- a/drivers/net/wireless/Makefile ++++ b/drivers/net/wireless/Makefile +@@ -24,7 +24,7 @@ obj-$(CONFIG_B43LEGACY) += b43legacy/ + obj-$(CONFIG_ZD1211RW) += zd1211rw/ + obj-$(CONFIG_RTL8180) += rtl818x/ + obj-$(CONFIG_RTL8187) += rtl818x/ +-obj-$(CONFIG_RTLWIFI) += rtlwifi/ ++obj-$(CONFIG_RTL8192CE) += rtlwifi/ + + # 16-bit wireless PCMCIA client drivers + obj-$(CONFIG_PCMCIA_RAYCS) += ray_cs.o +diff --git a/drivers/net/wireless/rtl818x/rtl8187/dev.c b/drivers/net/wireless/rtl818x/rtl8187/dev.c +index f49220e..acbfed9 100644 +--- a/drivers/net/wireless/rtl818x/rtl8187/dev.c ++++ b/drivers/net/wireless/rtl818x/rtl8187/dev.c +@@ -1015,6 +1015,9 @@ static void rtl8187_stop(struct ieee80211_hw *dev) + u32 reg; + + mutex_lock(&priv->conf_mutex); ++ ++ priv->vif = NULL; ++ + rtl818x_iowrite16(priv, &priv->map->INT_MASK, 0); + + reg = rtl818x_ioread8(priv, &priv->map->CMD); +@@ -1134,10 +1137,7 @@ exit: + static void rtl8187_remove_interface(struct ieee80211_hw *dev, + struct ieee80211_vif *vif) + { +- struct rtl8187_priv *priv = dev->priv; +- mutex_lock(&priv->conf_mutex); +- priv->vif = NULL; +- mutex_unlock(&priv->conf_mutex); ++ /* Nothing to do */ + } + + static int rtl8187_config(struct ieee80211_hw *dev, u32 changed) +diff --git a/drivers/net/wireless/rtl818x/rtl8187/rfkill.c b/drivers/net/wireless/rtl818x/rtl8187/rfkill.c +index 3411671..4d252c1 100644 +--- a/drivers/net/wireless/rtl818x/rtl8187/rfkill.c ++++ b/drivers/net/wireless/rtl818x/rtl8187/rfkill.c +@@ -22,6 +22,10 @@ + + static bool rtl8187_is_radio_enabled(struct rtl8187_priv *priv) + { ++#ifdef CONFIG_LEMOTE_MACH2F ++ /* Allow users to activate rfkill through only the /sys interface */ ++ return 1; ++#else + u8 gpio; + + gpio = rtl818x_ioread8(priv, &priv->map->GPIO0); +@@ -29,6 +33,7 @@ static bool rtl8187_is_radio_enabled(struct rtl8187_priv *priv) + gpio = rtl818x_ioread8(priv, &priv->map->GPIO1); + + return gpio & priv->rfkill_mask; ++#endif + } + + void rtl8187_rfkill_init(struct ieee80211_hw *hw) +diff --git a/drivers/platform/Kconfig b/drivers/platform/Kconfig +index 69616ae..20f4f61 100644 +--- a/drivers/platform/Kconfig ++++ b/drivers/platform/Kconfig +@@ -4,4 +4,6 @@ endif + if GOLDFISH + source "drivers/platform/goldfish/Kconfig" + endif +- ++if MIPS ++source "drivers/platform/mips/Kconfig" ++endif +diff --git a/drivers/platform/Makefile b/drivers/platform/Makefile +index 8a44a4c..f38b7e8 100644 +--- a/drivers/platform/Makefile ++++ b/drivers/platform/Makefile +@@ -3,5 +3,6 @@ + # + + obj-$(CONFIG_X86) += x86/ ++obj-$(CONFIG_MIPS) += mips/ + obj-$(CONFIG_OLPC) += olpc/ + obj-$(CONFIG_GOLDFISH) += goldfish/ +diff --git a/drivers/platform/mips/Kconfig b/drivers/platform/mips/Kconfig +new file mode 100644 +index 0000000..722d690 +--- /dev/null ++++ b/drivers/platform/mips/Kconfig +@@ -0,0 +1,60 @@ ++# ++# MIPS Platform Specific Drivers ++# ++ ++menuconfig MIPS_PLATFORM_DEVICES ++ bool "MIPS Platform Specific Device Drivers" ++ default y ++ help ++ Say Y here to get to see options for device drivers of various ++ MIPS platforms, including vendor-specific netbook/laptop/pc extension ++ drivers. This option alone does not add any kernel code. ++ ++ If you say N, all options in this submenu will be skipped and disabled. ++ ++if MIPS_PLATFORM_DEVICES ++ ++config LEMOTE_YEELOONG2F ++ tristate "Lemote YeeLoong Laptop" ++ depends on LEMOTE_MACH2F ++ select BACKLIGHT_LCD_SUPPORT ++ select LCD_CLASS_DEVICE ++ select BACKLIGHT_CLASS_DEVICE ++ select POWER_SUPPLY ++ select HWMON ++ select VIDEO_OUTPUT_CONTROL ++ select INPUT_SPARSEKMAP ++ select INPUT_EVDEV ++ depends on INPUT ++ default m ++ help ++ YeeLoong netbook is a mini laptop made by Lemote, which is basically ++ compatible to FuLoong2F mini PC, but it has an extra Embedded ++ Controller(kb3310b) for battery, hotkey, backlight, temperature and ++ fan management. ++ ++config LEMOTE_LYNLOONG2F ++ tristate "Lemote LynLoong PC" ++ depends on LEMOTE_MACH2F ++ select BACKLIGHT_LCD_SUPPORT ++ select BACKLIGHT_CLASS_DEVICE ++ select VIDEO_OUTPUT_CONTROL ++ default m ++ help ++ LynLoong PC is an AllINONE machine made by Lemote, which is basically ++ compatible to FuLoong2F Mini PC, the only difference is that it has a ++ size-fixed screen: 1360x768 with sisfb video driver. and also, it has ++ its own specific suspend support. ++ ++config GDIUM_LAPTOP ++ tristate "GDIUM laptop extras" ++ depends on DEXXON_GDIUM ++ select POWER_SUPPLY ++ select I2C ++ select INPUT_POLLDEV ++ default m ++ help ++ This mini-driver drives the ST7 chipset present in the Gdium laptops. ++ This gives battery support, wlan rfkill. ++ ++endif # MIPS_PLATFORM_DEVICES +diff --git a/drivers/platform/mips/Makefile b/drivers/platform/mips/Makefile +new file mode 100644 +index 0000000..0eadf8e +--- /dev/null ++++ b/drivers/platform/mips/Makefile +@@ -0,0 +1,8 @@ ++# ++# Makefile for MIPS Platform-Specific Drivers ++# ++ ++obj-$(CONFIG_LEMOTE_YEELOONG2F) += yeeloong_laptop.o ++ ++obj-$(CONFIG_LEMOTE_LYNLOONG2F) += lynloong_pc.o ++obj-$(CONFIG_GDIUM_LAPTOP) += gdium_laptop.o +diff --git a/drivers/platform/mips/gdium_laptop.c b/drivers/platform/mips/gdium_laptop.c +new file mode 100644 +index 0000000..41a65ad +--- /dev/null ++++ b/drivers/platform/mips/gdium_laptop.c +@@ -0,0 +1,927 @@ ++/* ++ * gdium_laptop -- Gdium laptop extras ++ * ++ * Arnaud Patard ++ * ++ * 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. ++ * ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* For input device */ ++#define SCAN_INTERVAL 150 ++ ++/* For battery status */ ++#define BAT_SCAN_INTERVAL 500 ++ ++#define EC_FIRM_VERSION 0 ++ ++#if CONFIG_GDIUM_VERSION > 2 ++#define EC_REG_BASE 1 ++#else ++#define EC_REG_BASE 0 ++#endif ++ ++#define EC_STATUS (EC_REG_BASE+0) ++#define EC_STATUS_LID (1<<0) ++#define EC_STATUS_PWRBUT (1<<1) ++#define EC_STATUS_BATID (1<<2) /* this bit has no real meaning on v2. */ ++ /* Same as EC_STATUS_ADAPT */ ++ /* but on v3 it's BATID which mean bat present */ ++#define EC_STATUS_SYS_POWER (1<<3) ++#define EC_STATUS_WLAN (1<<4) ++#define EC_STATUS_ADAPT (1<<5) ++ ++#define EC_CTRL (EC_REG_BASE+1) ++#define EC_CTRL_DDR_CLK (1<<0) ++#define EC_CTRL_CHARGE_LED (1<<1) ++#define EC_CTRL_BEEP (1<<2) ++#define EC_CTRL_SUSB (1<<3) /* memory power */ ++#define EC_CTRL_TRICKLE (1<<4) ++#define EC_CTRL_WLAN_EN (1<<5) ++#define EC_CTRL_SUSC (1<<6) /* main power */ ++#define EC_CTRL_CHARGE_EN (1<<7) ++ ++#define EC_BAT_LOW (EC_REG_BASE+2) ++#define EC_BAT_HIGH (EC_REG_BASE+3) ++ ++#define EC_SIGN (EC_REG_BASE+4) ++#define EC_SIGN_OS 0xAE /* write 0xae to control pm stuff */ ++#define EC_SIGN_EC 0x00 /* write 0x00 to let the st7 manage pm stuff */ ++ ++#if 0 ++#define EC_TEST (EC_REG_BASE+5) /* Depending on firmware version this register */ ++ /* may be the programmation register so don't play */ ++ /* with it */ ++#endif ++ ++#define BAT_VOLT_PRESENT 500000 /* Min voltage to consider battery present uV */ ++#define BAT_MIN 7000000 /* Min battery voltage in uV */ ++#define BAT_MIN_MV 7000 /* Min battery voltage in mV */ ++#define BAT_TRICKLE_EN 8000000 /* Charging at 1.4A before 8.0V and then charging at 0.25A */ ++#define BAT_MAX 7950000 /* Max battery voltage ~8V in V */ ++#define BAT_MAX_MV 7950 /* Max battery voltage ~8V in V */ ++#define BAT_READ_ERROR 300000 /* battery read error of 0.3V */ ++#define BAT_READ_ERROR_MV 300 /* battery read error of 0.3V */ ++ ++#define SM502_WLAN_ON (224+16)/* SM502 GPIO16 may be used on gdium v2 (v3?) as wlan_on */ ++ /* when R422 is connected */ ++ ++static unsigned char verbose; ++static unsigned char gpio16; ++static unsigned char ec; ++module_param(verbose, byte, S_IRUGO | S_IWUSR); ++MODULE_PARM_DESC(verbose, "Add some debugging messages"); ++module_param(gpio16, byte, S_IRUGO); ++MODULE_PARM_DESC(gpio16, "Enable wlan_on signal on SM502"); ++module_param(ec, byte, S_IRUGO); ++MODULE_PARM_DESC(ec, "Let the ST7 handle the battery (default OS)"); ++ ++struct gdium_laptop_data { ++ struct i2c_client *client; ++ struct input_polled_dev *input_polldev; ++ struct dentry *debugfs; ++ struct mutex mutex; ++ struct platform_device *bat_pdev; ++ struct power_supply gdium_ac; ++ struct power_supply gdium_battery; ++ struct workqueue_struct *workqueue; ++ struct delayed_work work; ++ char charge_cmd; ++ /* important registers value */ ++ char status; ++ char ctrl; ++ /* mV */ ++ int battery_level; ++ char version; ++}; ++ ++/**********************************************************************/ ++/* Low level I2C functions */ ++/* All are supposed to be called with mutex held */ ++/**********************************************************************/ ++/* ++ * Return battery voltage in mV ++ * >= 0 battery voltage ++ * < 0 error ++ */ ++static s32 ec_read_battery(struct i2c_client *client) ++{ ++ unsigned char bat_low, bat_high; ++ s32 data; ++ unsigned int ret; ++ ++ /* ++ * a = battery high ++ * b = battery low ++ * bat = a << 2 | b & 0x03; ++ * battery voltage = (bat / 1024) * 5 * 2 ++ */ ++ data = i2c_smbus_read_byte_data(client, EC_BAT_LOW); ++ if (data < 0) { ++ dev_err(&client->dev, "ec_read_bat: read bat_low failed\n"); ++ return data; ++ } ++ bat_low = data & 0xff; ++ if (verbose) ++ dev_info(&client->dev, "bat_low %x\n", bat_low); ++ ++ data = i2c_smbus_read_byte_data(client, EC_BAT_HIGH); ++ if (data < 0) { ++ dev_err(&client->dev, "ec_read_bat: read bat_high failed\n"); ++ return data; ++ } ++ bat_high = data & 0xff; ++ if (verbose) ++ dev_info(&client->dev, "bat_high %x\n", bat_high); ++ ++ ret = (bat_high << 2) | (bat_low & 3); ++ /* ++ * mV ++ */ ++ ret = (ret * 5 * 2) * 1000 / 1024; ++ ++ return ret; ++} ++ ++static s32 ec_read_version(struct i2c_client *client) ++{ ++#if CONFIG_GDIUM_VERSION > 2 ++ return i2c_smbus_read_byte_data(client, EC_FIRM_VERSION); ++#else ++ return 0; ++#endif ++} ++ ++static s32 ec_read_status(struct i2c_client *client) ++{ ++ return i2c_smbus_read_byte_data(client, EC_STATUS); ++} ++ ++static s32 ec_read_ctrl(struct i2c_client *client) ++{ ++ return i2c_smbus_read_byte_data(client, EC_CTRL); ++} ++ ++static s32 ec_write_ctrl(struct i2c_client *client, unsigned char newvalue) ++{ ++ return i2c_smbus_write_byte_data(client, EC_CTRL, newvalue); ++} ++ ++static s32 ec_read_sign(struct i2c_client *client) ++{ ++ return i2c_smbus_read_byte_data(client, EC_SIGN); ++} ++ ++static s32 ec_write_sign(struct i2c_client *client, unsigned char sign) ++{ ++ unsigned char value; ++ s32 ret; ++ ++ ret = i2c_smbus_write_byte_data(client, EC_SIGN, sign); ++ if (ret < 0) { ++ dev_err(&client->dev, "ec_set_control: write failed\n"); ++ return ret; ++ } ++ ++ value = ec_read_sign(client); ++ if (value != sign) { ++ dev_err(&client->dev, "Failed to set control to %s\n", ++ sign == EC_SIGN_OS ? "OS" : "EC"); ++ return -EIO; ++ } ++ ++ return 0; ++} ++ ++#if 0 ++static int ec_power_off(struct i2c_client *client) ++{ ++ char value; ++ int ret; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) { ++ dev_err(&client->dev, "ec_power_off: read failed\n"); ++ return value; ++ } ++ value &= ~(EC_CTRL_SUSB | EC_CTRL_SUSC); ++ ret = ec_write_ctrl(client, value); ++ if (ret < 0) { ++ dev_err(&client->dev, "ec_power_off: write failed\n"); ++ return ret; ++ } ++ ++ return 0; ++} ++#endif ++ ++static s32 ec_wlan_status(struct i2c_client *client) ++{ ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ return (value & EC_CTRL_WLAN_EN) ? 1 : 0; ++} ++ ++static s32 ec_wlan_en(struct i2c_client *client, int on) ++{ ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ value &= ~EC_CTRL_WLAN_EN; ++ if (on) ++ value |= EC_CTRL_WLAN_EN; ++ ++ return ec_write_ctrl(client, value&0xff); ++} ++ ++#if 0 ++static s32 ec_led_status(struct i2c_client *client) ++{ ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ return (value & EC_CTRL_CHARGE_LED) ? 1 : 0; ++} ++#endif ++ ++/* Changing the charging led status has never worked */ ++static s32 ec_led_en(struct i2c_client *client, int on) ++{ ++#if 0 ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ value &= ~EC_CTRL_CHARGE_LED; ++ if (on) ++ value |= EC_CTRL_CHARGE_LED; ++ return ec_write_ctrl(client, value&0xff); ++#else ++ return 0; ++#endif ++} ++ ++static s32 ec_charge_en(struct i2c_client *client, int on, int trickle) ++{ ++ s32 value; ++ s32 set = 0; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ if (on) ++ set |= EC_CTRL_CHARGE_EN; ++ if (trickle) ++ set |= EC_CTRL_TRICKLE; ++ ++ /* Be clever : don't change values if you don't need to */ ++ if ((value & (EC_CTRL_CHARGE_EN | EC_CTRL_TRICKLE)) == set) ++ return 0; ++ ++ value &= ~(EC_CTRL_CHARGE_EN | EC_CTRL_TRICKLE); ++ value |= set; ++ ec_led_en(client, on); ++ return ec_write_ctrl(client, (unsigned char)(value&0xff)); ++ ++} ++ ++/**********************************************************************/ ++/* Input functions */ ++/**********************************************************************/ ++struct gdium_keys { ++ int last_state; ++ int key_code; ++ int mask; ++ int type; ++}; ++ ++static struct gdium_keys gkeys[] = { ++ { ++ .key_code = KEY_WLAN, ++ .mask = EC_STATUS_WLAN, ++ .type = EV_KEY, ++ }, ++ { ++ .key_code = KEY_POWER, ++ .mask = EC_STATUS_PWRBUT, ++ .type = EV_KEY, /*EV_PWR,*/ ++ }, ++ { ++ .key_code = SW_LID, ++ .mask = EC_STATUS_LID, ++ .type = EV_SW, ++ }, ++}; ++ ++static void gdium_laptop_keys_poll(struct input_polled_dev *dev) ++{ ++ int state, i; ++ struct gdium_laptop_data *data = dev->private; ++ struct i2c_client *client = data->client; ++ struct input_dev *input = dev->input; ++ s32 status; ++ ++ mutex_lock(&data->mutex); ++ status = ec_read_status(client); ++ mutex_unlock(&data->mutex); ++ ++ if (status < 0) { ++ /* ++ * Don't know exactly which version of the firmware ++ * has this bug but when the power button is pressed ++ * there are i2c read errors :( ++ */ ++ if ((data->version >= 0x13) && !gkeys[1].last_state) { ++ input_event(input, EV_KEY, KEY_POWER, 1); ++ input_sync(input); ++ gkeys[1].last_state = 1; ++ } ++ return; ++ } ++ ++ for (i = 0; i < ARRAY_SIZE(gkeys); i++) { ++ state = status & gkeys[i].mask; ++ if (state != gkeys[i].last_state) { ++ gkeys[i].last_state = state; ++ /* for power key, we want power & key press/release event */ ++ if (gkeys[i].type == EV_PWR) { ++ input_event(input, EV_KEY, gkeys[i].key_code, !!state); ++ input_sync(input); ++ } ++ /* Disable wifi on key press but not key release */ ++ /* ++ * On firmware >= 0x13 the EC_STATUS_WLAN has it's ++ * original meaning of Wifi status and no more the ++ * wifi button status so we have to ignore the event ++ * on theses versions ++ */ ++ if (state && (gkeys[i].key_code == KEY_WLAN) && (data->version < 0x13)) { ++ mutex_lock(&data->mutex); ++ ec_wlan_en(client, !ec_wlan_status(client)); ++ if (gpio16) ++ gpio_set_value(SM502_WLAN_ON, !ec_wlan_status(client)); ++ mutex_unlock(&data->mutex); ++ } ++ ++ input_event(input, gkeys[i].type, gkeys[i].key_code, !!state); ++ input_sync(input); ++ } ++ } ++} ++ ++static int gdium_laptop_input_init(struct gdium_laptop_data *data) ++{ ++ struct i2c_client *client = data->client; ++ struct input_dev *input; ++ int ret, i; ++ ++ data->input_polldev = input_allocate_polled_device(); ++ if (!data->input_polldev) { ++ ret = -ENOMEM; ++ goto err; ++ } ++ ++ input = data->input_polldev->input; ++ input->evbit[0] = BIT(EV_KEY) | BIT_MASK(EV_PWR) | BIT_MASK(EV_SW); ++ data->input_polldev->poll = gdium_laptop_keys_poll; ++ data->input_polldev->poll_interval = SCAN_INTERVAL; ++ data->input_polldev->private = data; ++ input->name = "gdium-keys"; ++ input->dev.parent = &client->dev; ++ ++ input->id.bustype = BUS_HOST; ++ input->id.vendor = 0x0001; ++ input->id.product = 0x0001; ++ input->id.version = 0x0100; ++ ++ for (i = 0; i < ARRAY_SIZE(gkeys); i++) ++ input_set_capability(input, gkeys[i].type, gkeys[i].key_code); ++ ++ ret = input_register_polled_device(data->input_polldev); ++ if (ret) { ++ dev_err(&client->dev, "Unable to register button device\n"); ++ goto err_poll_dev; ++ } ++ ++ return 0; ++ ++err_poll_dev: ++ input_free_polled_device(data->input_polldev); ++err: ++ return ret; ++} ++ ++static void gdium_laptop_input_exit(struct gdium_laptop_data *data) ++{ ++ input_unregister_polled_device(data->input_polldev); ++ input_free_polled_device(data->input_polldev); ++} ++ ++/**********************************************************************/ ++/* Battery management */ ++/**********************************************************************/ ++static int gdium_ac_get_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ char status; ++ struct gdium_laptop_data *data = container_of(psy, struct gdium_laptop_data, gdium_ac); ++ int ret = 0; ++ ++ if (!data) { ++ pr_err("gdium-ac: gdium_laptop_data not found\n"); ++ return -EINVAL; ++ } ++ ++ status = data->status; ++ switch (psp) { ++ case POWER_SUPPLY_PROP_ONLINE: ++ val->intval = !!(status & EC_STATUS_ADAPT); ++ break; ++ default: ++ ret = -EINVAL; ++ break; ++ } ++ ++ return ret; ++} ++ ++#undef RET ++#define RET (val->intval) ++ ++static int gdium_battery_get_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ char status, ctrl; ++ struct gdium_laptop_data *data = container_of(psy, struct gdium_laptop_data, gdium_battery); ++ int percentage_capacity = 0, charge_now = 0, time_to_empty = 0; ++ int ret = 0, tmp; ++ ++ if (!data) { ++ pr_err("gdium-battery: gdium_laptop_data not found\n"); ++ return -EINVAL; ++ } ++ ++ status = data->status; ++ ctrl = data->ctrl; ++ switch (psp) { ++ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: ++ /* uAh */ ++ RET = 5000000; ++ break; ++ case POWER_SUPPLY_PROP_CURRENT_NOW: ++ case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW: ++ /* This formula is gotten by gnuplot with the statistic data */ ++ time_to_empty = (data->battery_level - BAT_MIN_MV + BAT_READ_ERROR_MV) * 113 - 29870; ++ if (psp == POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW) { ++ /* seconds */ ++ RET = time_to_empty / 10; ++ break; ++ } ++ /* fall through */ ++ case POWER_SUPPLY_PROP_CHARGE_NOW: ++ case POWER_SUPPLY_PROP_CAPACITY: { ++ tmp = data->battery_level * 1000; ++ /* > BAT_MIN to avoid negative values */ ++ percentage_capacity = 0; ++ if ((status & EC_STATUS_BATID) && (tmp > BAT_MIN)) ++ percentage_capacity = (tmp-BAT_MIN)*100/(BAT_MAX-BAT_MIN); ++ ++ if (percentage_capacity > 100) ++ percentage_capacity = 100; ++ ++ if (psp == POWER_SUPPLY_PROP_CAPACITY) { ++ RET = percentage_capacity; ++ break; ++ } ++ charge_now = 50000 * percentage_capacity; ++ if (psp == POWER_SUPPLY_PROP_CHARGE_NOW) { ++ /* uAh */ ++ RET = charge_now; ++ break; ++ } ++ } /* fall through */ ++ case POWER_SUPPLY_PROP_STATUS: { ++ if (status & EC_STATUS_ADAPT) ++ if (ctrl & EC_CTRL_CHARGE_EN) ++ RET = POWER_SUPPLY_STATUS_CHARGING; ++ else ++ RET = POWER_SUPPLY_STATUS_NOT_CHARGING; ++ else ++ RET = POWER_SUPPLY_STATUS_DISCHARGING; ++ ++ if (psp == POWER_SUPPLY_PROP_STATUS) ++ break; ++ /* mAh -> µA */ ++ switch (RET) { ++ case POWER_SUPPLY_STATUS_CHARGING: ++ RET = -(data->charge_cmd == 2) ? 1400000 : 250000; ++ break; ++ case POWER_SUPPLY_STATUS_DISCHARGING: ++ RET = charge_now / time_to_empty * 36000; ++ break; ++ case POWER_SUPPLY_STATUS_NOT_CHARGING: ++ default: ++ RET = 0; ++ break; ++ } ++ } break; ++ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: ++ RET = BAT_MAX+BAT_READ_ERROR; ++ break; ++ case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: ++ RET = BAT_MIN-BAT_READ_ERROR; ++ break; ++ case POWER_SUPPLY_PROP_VOLTAGE_NOW: ++ /* mV -> uV */ ++ RET = data->battery_level * 1000; ++ break; ++ case POWER_SUPPLY_PROP_PRESENT: ++#if CONFIG_GDIUM_VERSION > 2 ++ RET = !!(status & EC_STATUS_BATID); ++#else ++ RET = !!(data->battery_level > BAT_VOLT_PRESENT); ++#endif ++ break; ++ case POWER_SUPPLY_PROP_CAPACITY_LEVEL: ++ tmp = data->battery_level * 1000; ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; ++ if (status & EC_STATUS_BATID) { ++ if (tmp >= BAT_MAX) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_HIGH; ++ if (tmp >= BAT_MAX+BAT_READ_ERROR) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_FULL; ++ } else if (tmp <= BAT_MIN+BAT_READ_ERROR) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_LOW; ++ if (tmp <= BAT_MIN) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; ++ } else ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; ++ } ++ break; ++ case POWER_SUPPLY_PROP_CHARGE_TYPE: ++ if (ctrl & EC_CTRL_TRICKLE) ++ RET = POWER_SUPPLY_CHARGE_TYPE_TRICKLE; ++ else if (ctrl & EC_CTRL_CHARGE_EN) ++ RET = POWER_SUPPLY_CHARGE_TYPE_FAST; ++ else ++ RET = POWER_SUPPLY_CHARGE_TYPE_NONE; ++ break; ++ case POWER_SUPPLY_PROP_CURRENT_MAX: ++ /* 1.4A ? */ ++ RET = 1400000; ++ break; ++ default: ++ break; ++ } ++ ++ return ret; ++} ++#undef RET ++ ++static enum power_supply_property gdium_ac_props[] = { ++ POWER_SUPPLY_PROP_ONLINE, ++}; ++ ++static enum power_supply_property gdium_battery_props[] = { ++ POWER_SUPPLY_PROP_STATUS, ++ POWER_SUPPLY_PROP_PRESENT, ++ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_NOW, ++ POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, ++ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, ++ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, ++ POWER_SUPPLY_PROP_VOLTAGE_NOW, ++ POWER_SUPPLY_PROP_CURRENT_MAX, ++ POWER_SUPPLY_PROP_CURRENT_NOW, ++ POWER_SUPPLY_PROP_CAPACITY, ++ POWER_SUPPLY_PROP_CAPACITY_LEVEL, ++ POWER_SUPPLY_PROP_CHARGE_TYPE, ++}; ++ ++static void gdium_laptop_battery_work(struct work_struct *work) ++{ ++ struct gdium_laptop_data *data = container_of(work, struct gdium_laptop_data, work.work); ++ struct i2c_client *client; ++ int ret; ++ char old_status, old_charge_cmd; ++ char present; ++ s32 status; ++ ++ mutex_lock(&data->mutex); ++ client = data->client; ++ status = ec_read_status(client); ++ ret = ec_read_battery(client); ++ ++ if ((status < 0) || (ret < 0)) ++ goto i2c_read_error; ++ ++ old_status = data->status; ++ old_charge_cmd = data->charge_cmd; ++ data->status = status; ++ ++ /* ++ * Charge only if : ++ * - battery present ++ * - ac adapter plugged in ++ * - battery not fully charged ++ */ ++#if CONFIG_GDIUM_VERSION > 2 ++ present = !!(data->status & EC_STATUS_BATID); ++#else ++ present = !!(ret > BAT_VOLT_PRESENT); ++#endif ++ data->battery_level = 0; ++ if (present) { ++ data->battery_level = (unsigned int)ret; ++ if (data->status & EC_STATUS_ADAPT) ++ data->battery_level -= BAT_READ_ERROR_MV; ++ } ++ ++ data->charge_cmd = 0; ++ if ((data->status & EC_STATUS_ADAPT) && present && (data->battery_level <= BAT_MAX_MV)) ++ data->charge_cmd = (ret < BAT_TRICKLE_EN) ? 2 : 3; ++ ++ ec_charge_en(client, (data->charge_cmd >> 1) & 1, data->charge_cmd & 1); ++ ++ /* ++ * data->ctrl must be set _after_ calling ec_charge_en as this will change the ++ * control register content ++ */ ++ data->ctrl = ec_read_ctrl(client); ++ ++ if ((data->status & EC_STATUS_ADAPT) != (old_status & EC_STATUS_ADAPT)) { ++ power_supply_changed(&data->gdium_ac); ++ /* Send charging/discharging state change */ ++ power_supply_changed(&data->gdium_battery); ++ } else if ((data->status & EC_STATUS_ADAPT) && ++ ((old_charge_cmd&2) != (data->charge_cmd&2))) ++ power_supply_changed(&data->gdium_battery); ++ ++i2c_read_error: ++ mutex_unlock(&data->mutex); ++ queue_delayed_work(data->workqueue, &data->work, msecs_to_jiffies(BAT_SCAN_INTERVAL)); ++} ++ ++static int gdium_laptop_battery_init(struct gdium_laptop_data *data) ++{ ++ int ret; ++ ++ data->bat_pdev = platform_device_register_simple("gdium-battery", 0, NULL, 0); ++ if (IS_ERR(data->bat_pdev)) ++ return PTR_ERR(data->bat_pdev); ++ ++ data->gdium_battery.name = data->bat_pdev->name; ++ data->gdium_battery.properties = gdium_battery_props; ++ data->gdium_battery.num_properties = ARRAY_SIZE(gdium_battery_props); ++ data->gdium_battery.get_property = gdium_battery_get_props; ++ data->gdium_battery.use_for_apm = 1; ++ ++ ret = power_supply_register(&data->bat_pdev->dev, &data->gdium_battery); ++ if (ret) ++ goto err_platform; ++ ++ data->gdium_ac.name = "gdium-ac"; ++ data->gdium_ac.type = POWER_SUPPLY_TYPE_MAINS; ++ data->gdium_ac.properties = gdium_ac_props; ++ data->gdium_ac.num_properties = ARRAY_SIZE(gdium_ac_props); ++ data->gdium_ac.get_property = gdium_ac_get_props; ++/* data->gdium_ac.use_for_apm_ac = 1, */ ++ ++ ret = power_supply_register(&data->bat_pdev->dev, &data->gdium_ac); ++ if (ret) ++ goto err_battery; ++ ++ if (!ec) { ++ INIT_DELAYED_WORK(&data->work, gdium_laptop_battery_work); ++ data->workqueue = create_singlethread_workqueue("gdium-battery-work"); ++ if (!data->workqueue) { ++ ret = -ESRCH; ++ goto err_work; ++ } ++ queue_delayed_work(data->workqueue, &data->work, msecs_to_jiffies(BAT_SCAN_INTERVAL)); ++ } ++ ++ return 0; ++ ++err_work: ++err_battery: ++ power_supply_unregister(&data->gdium_battery); ++err_platform: ++ platform_device_unregister(data->bat_pdev); ++ ++ return ret; ++} ++static void gdium_laptop_battery_exit(struct gdium_laptop_data *data) ++{ ++ if (!ec) { ++ cancel_rearming_delayed_workqueue(data->workqueue, &data->work); ++ destroy_workqueue(data->workqueue); ++ } ++ power_supply_unregister(&data->gdium_battery); ++ power_supply_unregister(&data->gdium_ac); ++ platform_device_unregister(data->bat_pdev); ++} ++ ++/* Debug fs */ ++static int gdium_laptop_regs_show(struct seq_file *s, void *p) ++{ ++ struct gdium_laptop_data *data = s->private; ++ struct i2c_client *client = data->client; ++ ++ mutex_lock(&data->mutex); ++ seq_printf(s, "Version : 0x%02x\n", (unsigned char)ec_read_version(client)); ++ seq_printf(s, "Status : 0x%02x\n", (unsigned char)ec_read_status(client)); ++ seq_printf(s, "Ctrl : 0x%02x\n", (unsigned char)ec_read_ctrl(client)); ++ seq_printf(s, "Sign : 0x%02x\n", (unsigned char)ec_read_sign(client)); ++ seq_printf(s, "Bat Lo : 0x%02x\n", (unsigned char)i2c_smbus_read_byte_data(client, EC_BAT_LOW)); ++ seq_printf(s, "Bat Hi : 0x%02x\n", (unsigned char)i2c_smbus_read_byte_data(client, EC_BAT_HIGH)); ++ seq_printf(s, "Battery : %d uV\n", (unsigned int)ec_read_battery(client) * 1000); ++ seq_printf(s, "Charge cmd : %s %s\n", data->charge_cmd & 2 ? "C" : " ", data->charge_cmd & 1 ? "T" : " "); ++ ++ mutex_unlock(&data->mutex); ++ return 0; ++} ++ ++static int gdium_laptop_regs_open(struct inode *inode, ++ struct file *file) ++{ ++ return single_open(file, gdium_laptop_regs_show, inode->i_private); ++} ++ ++static const struct file_operations gdium_laptop_regs_fops = { ++ .open = gdium_laptop_regs_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .owner = THIS_MODULE, ++}; ++ ++ ++static int gdium_laptop_probe(struct i2c_client *client, const struct i2c_device_id *id) ++{ ++ struct gdium_laptop_data *data; ++ int ret; ++ ++ if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { ++ dev_err(&client->dev, ++ "%s: no smbus_byte support !\n", __func__); ++ return -ENODEV; ++ } ++ ++ data = kzalloc(sizeof(struct gdium_laptop_data), GFP_KERNEL); ++ if (!data) ++ return -ENOMEM; ++ ++ i2c_set_clientdata(client, data); ++ data->client = client; ++ mutex_init(&data->mutex); ++ ++ ret = ec_read_version(client); ++ if (ret < 0) ++ goto err_alloc; ++ ++ data->version = (unsigned char)ret; ++ ++ ret = gdium_laptop_input_init(data); ++ if (ret) ++ goto err_alloc; ++ ++ ret = gdium_laptop_battery_init(data); ++ if (ret) ++ goto err_input; ++ ++ ++ if (!ec) { ++ ret = ec_write_sign(client, EC_SIGN_OS); ++ if (ret) ++ goto err_sign; ++ } ++ ++ if (gpio16) { ++ ret = gpio_request(SM502_WLAN_ON, "wlan-on"); ++ if (ret < 0) ++ goto err_sign; ++ gpio_set_value(SM502_WLAN_ON, ec_wlan_status(client)); ++ gpio_direction_output(SM502_WLAN_ON, 1); ++ } ++ ++ dev_info(&client->dev, "Found firmware 0x%02x\n", data->version); ++ data->debugfs = debugfs_create_file("gdium_laptop", S_IFREG | S_IRUGO, ++ NULL, data, &gdium_laptop_regs_fops); ++ ++ return 0; ++ ++err_sign: ++ gdium_laptop_battery_exit(data); ++err_input: ++ gdium_laptop_input_exit(data); ++err_alloc: ++ kfree(data); ++ return ret; ++} ++ ++static int gdium_laptop_remove(struct i2c_client *client) ++{ ++ struct gdium_laptop_data *data = i2c_get_clientdata(client); ++ ++ if (gpio16) ++ gpio_free(SM502_WLAN_ON); ++ ec_write_sign(client, EC_SIGN_EC); ++ if (data->debugfs) ++ debugfs_remove(data->debugfs); ++ ++ gdium_laptop_battery_exit(data); ++ gdium_laptop_input_exit(data); ++ ++ kfree(data); ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++static int gdium_laptop_suspend(struct i2c_client *client, pm_message_t msg) ++{ ++ struct gdium_laptop_data *data = i2c_get_clientdata(client); ++ ++ if (!ec) ++ cancel_rearming_delayed_workqueue(data->workqueue, &data->work); ++ return 0; ++} ++ ++static int gdium_laptop_resume(struct i2c_client *client) ++{ ++ struct gdium_laptop_data *data = i2c_get_clientdata(client); ++ ++ if (!ec) ++ queue_delayed_work(data->workqueue, &data->work, msecs_to_jiffies(BAT_SCAN_INTERVAL)); ++ return 0; ++} ++#else ++#define gdium_laptop_suspend NULL ++#define gdium_laptop_resume NULL ++#endif ++static const struct i2c_device_id gdium_id[] = { ++ { "gdium-laptop" }, ++ {}, ++}; ++MODULE_DEVICE_TABLE(i2c, gdium_id); ++ ++static struct i2c_driver gdium_laptop_driver = { ++ .driver = { ++ .name = "gdium-laptop", ++ .owner = THIS_MODULE, ++ }, ++ .probe = gdium_laptop_probe, ++ .remove = gdium_laptop_remove, ++ .shutdown = gdium_laptop_remove, ++ .suspend = gdium_laptop_suspend, ++ .resume = gdium_laptop_resume, ++ .id_table = gdium_id, ++}; ++ ++static int __init gdium_laptop_init(void) ++{ ++ return i2c_add_driver(&gdium_laptop_driver); ++} ++ ++static void __exit gdium_laptop_exit(void) ++{ ++ i2c_del_driver(&gdium_laptop_driver); ++} ++ ++module_init(gdium_laptop_init); ++module_exit(gdium_laptop_exit); ++ ++MODULE_AUTHOR("Arnaud Patard "); ++MODULE_DESCRIPTION("Gdium laptop extras"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/mips/lynloong_pc.c b/drivers/platform/mips/lynloong_pc.c +new file mode 100644 +index 0000000..68f29e4 +--- /dev/null ++++ b/drivers/platform/mips/lynloong_pc.c +@@ -0,0 +1,515 @@ ++/* ++ * Driver for LynLoong PC extras ++ * ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin , Xiang Yu ++ * ++ * 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 /* for backlight subdriver */ ++#include ++#include /* for video output subdriver */ ++#include /* for suspend support */ ++ ++#include ++#include ++ ++#include ++ ++static u32 gpio_base, mfgpt_base; ++ ++static void set_gpio_reg_high(int gpio, int reg) ++{ ++ u32 val; ++ ++ val = inl(gpio_base + reg); ++ val |= (1 << gpio); ++ val &= ~(1 << (16 + gpio)); ++ outl(val, gpio_base + reg); ++ mmiowb(); ++} ++ ++static void set_gpio_reg_low(int gpio, int reg) ++{ ++ u32 val; ++ ++ val = inl(gpio_base + reg); ++ val |= (1 << (16 + gpio)); ++ val &= ~(1 << gpio); ++ outl(val, gpio_base + reg); ++ mmiowb(); ++} ++ ++static void set_gpio_output_low(int gpio) ++{ ++ set_gpio_reg_high(gpio, GPIOL_OUT_EN); ++ set_gpio_reg_low(gpio, GPIOL_OUT_VAL); ++} ++ ++static void set_gpio_output_high(int gpio) ++{ ++ set_gpio_reg_high(gpio, GPIOL_OUT_EN); ++ set_gpio_reg_high(gpio, GPIOL_OUT_VAL); ++} ++ ++/* backlight subdriver */ ++ ++#define MAX_BRIGHTNESS 100 ++#define DEFAULT_BRIGHTNESS 50 ++#define MIN_BRIGHTNESS 0 ++static unsigned int level; ++ ++DEFINE_SPINLOCK(backlight_lock); ++/* Tune the brightness */ ++static void setup_mfgpt2(void) ++{ ++ unsigned long flags; ++ ++ spin_lock_irqsave(&backlight_lock, flags); ++ ++ /* Set MFGPT2 comparator 1,2 */ ++ outw(MAX_BRIGHTNESS-level, MFGPT2_CMP1); ++ outw(MAX_BRIGHTNESS, MFGPT2_CMP2); ++ /* Clear MFGPT2 UP COUNTER */ ++ outw(0, MFGPT2_CNT); ++ /* Enable counter, compare mode, 32k */ ++ outw(0x8280, MFGPT2_SETUP); ++ ++ spin_unlock_irqrestore(&backlight_lock, flags); ++} ++ ++static int lynloong_set_brightness(struct backlight_device *bd) ++{ ++ level = (bd->props.fb_blank == FB_BLANK_UNBLANK && ++ bd->props.power == FB_BLANK_UNBLANK) ? ++ bd->props.brightness : 0; ++ ++ if (level > MAX_BRIGHTNESS) ++ level = MAX_BRIGHTNESS; ++ else if (level < MIN_BRIGHTNESS) ++ level = MIN_BRIGHTNESS; ++ ++ setup_mfgpt2(); ++ ++ return 0; ++} ++ ++static int lynloong_get_brightness(struct backlight_device *bd) ++{ ++ return level; ++} ++ ++static struct backlight_ops backlight_ops = { ++ .get_brightness = lynloong_get_brightness, ++ .update_status = lynloong_set_brightness, ++}; ++ ++static struct backlight_device *lynloong_backlight_dev; ++ ++static int lynloong_backlight_init(void) ++{ ++ int ret; ++ u32 hi; ++ struct backlight_properties props; ++ ++ /* Get gpio_base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &gpio_base); ++ /* Get mfgpt_base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &hi, &mfgpt_base); ++ /* Get gpio_base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &gpio_base); ++ ++ /* Select for mfgpt */ ++ set_gpio_reg_high(7, GPIOL_OUT_AUX1_SEL); ++ /* Enable brightness controlling */ ++ set_gpio_output_high(7); ++ ++ memset(&props, 0, sizeof(struct backlight_properties)); ++ props.max_brightness = MAX_BRIGHTNESS; ++ props.type = BACKLIGHT_PLATFORM; ++ lynloong_backlight_dev = backlight_device_register("backlight0", NULL, ++ NULL, &backlight_ops, &props); ++ ++ if (IS_ERR(lynloong_backlight_dev)) { ++ ret = PTR_ERR(lynloong_backlight_dev); ++ return ret; ++ } ++ ++ lynloong_backlight_dev->props.brightness = DEFAULT_BRIGHTNESS; ++ backlight_update_status(lynloong_backlight_dev); ++ ++ return 0; ++} ++ ++static void lynloong_backlight_exit(void) ++{ ++ if (lynloong_backlight_dev) { ++ backlight_device_unregister(lynloong_backlight_dev); ++ lynloong_backlight_dev = NULL; ++ } ++ /* Disable brightness controlling */ ++ set_gpio_output_low(7); ++} ++ ++/* video output driver */ ++static int vo_status = 1; ++ ++static int lcd_video_output_get(struct output_device *od) ++{ ++ return vo_status; ++} ++ ++static int lcd_video_output_set(struct output_device *od) ++{ ++ int i; ++ unsigned long status; ++ ++ status = !!od->request_state; ++ ++ if (status == 0) { ++ /* Set the current status as off */ ++ vo_status = 0; ++ /* Turn off the backlight */ ++ set_gpio_output_low(11); ++ for (i = 0; i < 0x500; i++) ++ delay(); ++ /* Turn off the LCD */ ++ set_gpio_output_high(8); ++ } else { ++ /* Turn on the LCD */ ++ set_gpio_output_low(8); ++ for (i = 0; i < 0x500; i++) ++ delay(); ++ /* Turn on the backlight */ ++ set_gpio_output_high(11); ++ /* Set the current status as on */ ++ vo_status = 1; ++ } ++ ++ return 0; ++} ++ ++static struct output_properties lcd_output_properties = { ++ .set_state = lcd_video_output_set, ++ .get_status = lcd_video_output_get, ++}; ++ ++static struct output_device *lcd_output_dev; ++ ++static void lynloong_lcd_vo_set(int status) ++{ ++ lcd_output_dev->request_state = status; ++ lcd_video_output_set(lcd_output_dev); ++} ++ ++static int lynloong_vo_init(void) ++{ ++ int ret; ++ ++ /* Register video output device: lcd */ ++ lcd_output_dev = video_output_register("LCD", NULL, NULL, ++ &lcd_output_properties); ++ ++ if (IS_ERR(lcd_output_dev)) { ++ ret = PTR_ERR(lcd_output_dev); ++ lcd_output_dev = NULL; ++ return ret; ++ } ++ /* Ensure LCD is on by default */ ++ lynloong_lcd_vo_set(1); ++ ++ return 0; ++} ++ ++static void lynloong_vo_exit(void) ++{ ++ if (lcd_output_dev) { ++ video_output_unregister(lcd_output_dev); ++ lcd_output_dev = NULL; ++ } ++} ++ ++/* suspend support */ ++ ++#ifdef CONFIG_PM ++ ++static u32 smb_base; ++ ++/* I2C operations */ ++ ++static int i2c_wait(void) ++{ ++ char c; ++ int i; ++ ++ udelay(1000); ++ for (i = 0; i < 20; i++) { ++ c = inb(smb_base | SMB_STS); ++ if (c & (SMB_STS_BER | SMB_STS_NEGACK)) ++ return -1; ++ if (c & SMB_STS_SDAST) ++ return 0; ++ udelay(100); ++ } ++ return -2; ++} ++ ++static void i2c_read_single(int addr, int regNo, char *value) ++{ ++ unsigned char c; ++ ++ /* Start condition */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_START, smb_base | SMB_CTRL1); ++ i2c_wait(); ++ ++ /* Send slave address */ ++ outb(addr & 0xfe, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Acknowledge smbus */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_ACK, smb_base | SMB_CTRL1); ++ ++ /* Send register index */ ++ outb(regNo, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Acknowledge smbus */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_ACK, smb_base | SMB_CTRL1); ++ ++ /* Start condition again */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_START, smb_base | SMB_CTRL1); ++ i2c_wait(); ++ ++ /* Send salve address again */ ++ outb(1 | addr, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Acknowledge smbus */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_ACK, smb_base | SMB_CTRL1); ++ ++ /* Read data */ ++ *value = inb(smb_base | SMB_SDA); ++ ++ /* Stop condition */ ++ outb(SMB_CTRL1_STOP, smb_base | SMB_CTRL1); ++ i2c_wait(); ++} ++ ++static void i2c_write_single(int addr, int regNo, char value) ++{ ++ unsigned char c; ++ ++ /* Start condition */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_START, smb_base | SMB_CTRL1); ++ i2c_wait(); ++ /* Send slave address */ ++ outb(addr & 0xfe, smb_base | SMB_SDA); ++ i2c_wait();; ++ ++ /* Send register index */ ++ outb(regNo, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Write data */ ++ outb(value, smb_base | SMB_SDA); ++ i2c_wait(); ++ /* Stop condition */ ++ outb(SMB_CTRL1_STOP, smb_base | SMB_CTRL1); ++ i2c_wait(); ++} ++ ++static void stop_clock(int clk_reg, int clk_sel) ++{ ++ u8 value; ++ ++ i2c_read_single(0xd3, clk_reg, &value); ++ value &= ~(1 << clk_sel); ++ i2c_write_single(0xd2, clk_reg, value); ++} ++ ++static void enable_clock(int clk_reg, int clk_sel) ++{ ++ u8 value; ++ ++ i2c_read_single(0xd3, clk_reg, &value); ++ value |= (1 << clk_sel); ++ i2c_write_single(0xd2, clk_reg, value); ++} ++ ++static char cached_clk_freq; ++static char cached_pci_fixed_freq; ++ ++static void decrease_clk_freq(void) ++{ ++ char value; ++ ++ i2c_read_single(0xd3, 1, &value); ++ cached_clk_freq = value; ++ ++ /* Select frequency by software */ ++ value |= (1 << 1); ++ /* CPU, 3V66, PCI : 100, 66, 33(1) */ ++ value |= (1 << 2); ++ i2c_write_single(0xd2, 1, value); ++ ++ /* Cache the pci frequency */ ++ i2c_read_single(0xd3, 14, &value); ++ cached_pci_fixed_freq = value; ++ ++ /* Enable PCI fix mode */ ++ value |= (1 << 5); ++ /* 3V66, PCI : 64MHz, 32MHz */ ++ value |= (1 << 3); ++ i2c_write_single(0xd2, 14, value); ++ ++} ++ ++static void resume_clk_freq(void) ++{ ++ i2c_write_single(0xd2, 1, cached_clk_freq); ++ i2c_write_single(0xd2, 14, cached_pci_fixed_freq); ++} ++ ++static void stop_clocks(void) ++{ ++ /* CPU Clock Register */ ++ stop_clock(2, 5); /* not used */ ++ stop_clock(2, 6); /* not used */ ++ stop_clock(2, 7); /* not used */ ++ ++ /* PCI Clock Register */ ++ stop_clock(3, 1); /* 8100 */ ++ stop_clock(3, 5); /* SIS */ ++ stop_clock(3, 0); /* not used */ ++ stop_clock(3, 6); /* not used */ ++ ++ /* PCI 48M Clock Register */ ++ stop_clock(4, 6); /* USB grounding */ ++ stop_clock(4, 5); /* REF(5536_14M) */ ++ ++ /* 3V66 Control Register */ ++ stop_clock(5, 0); /* VCH_CLK..., grounding */ ++} ++ ++static void enable_clocks(void) ++{ ++ enable_clock(3, 1); /* 8100 */ ++ enable_clock(3, 5); /* SIS */ ++ ++ enable_clock(4, 6); ++ enable_clock(4, 5); /* REF(5536_14M) */ ++ ++ enable_clock(5, 0); /* VCH_CLOCK, grounding */ ++} ++ ++static int lynloong_suspend(struct device *dev) ++{ ++ /* Disable AMP */ ++ set_gpio_output_high(6); ++ /* Turn off LCD */ ++ lynloong_lcd_vo_set(0); ++ ++ /* Stop the clocks of some devices */ ++ stop_clocks(); ++ ++ /* Decrease the external clock frequency */ ++ decrease_clk_freq(); ++ ++ return 0; ++} ++ ++static int lynloong_resume(struct device *dev) ++{ ++ /* Turn on the LCD */ ++ lynloong_lcd_vo_set(1); ++ ++ /* Resume clock frequency, enable the relative clocks */ ++ resume_clk_freq(); ++ enable_clocks(); ++ ++ /* Enable AMP */ ++ set_gpio_output_low(6); ++ ++ return 0; ++} ++ ++static const SIMPLE_DEV_PM_OPS(lynloong_pm_ops, lynloong_suspend, ++ lynloong_resume); ++#endif /* !CONFIG_PM */ ++ ++static struct platform_device_id platform_device_ids[] = { ++ { ++ .name = "lynloong_pc", ++ }, ++ {} ++}; ++ ++MODULE_DEVICE_TABLE(platform, platform_device_ids); ++ ++static struct platform_driver platform_driver = { ++ .driver = { ++ .name = "lynloong_pc", ++ .owner = THIS_MODULE, ++#ifdef CONFIG_PM ++ .pm = &lynloong_pm_ops, ++#endif ++ }, ++ .id_table = platform_device_ids, ++}; ++ ++static int __init lynloong_init(void) ++{ ++ int ret; ++ ++ pr_info("LynLoong platform specific driver loaded.\n"); ++ ++ /* Register platform stuff */ ++ ret = platform_driver_register(&platform_driver); ++ if (ret) { ++ pr_err("Failed to register LynLoong platform driver.\n"); ++ return ret; ++ } ++ ++ ret = lynloong_backlight_init(); ++ if (ret) { ++ pr_err("Failed to register LynLoong backlight driver.\n"); ++ return ret; ++ } ++ ++ ret = lynloong_vo_init(); ++ if (ret) { ++ pr_err("Failed to register LynLoong backlight driver.\n"); ++ lynloong_vo_exit(); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static void __exit lynloong_exit(void) ++{ ++ lynloong_vo_exit(); ++ lynloong_backlight_exit(); ++ platform_driver_unregister(&platform_driver); ++ ++ pr_info("LynLoong platform specific driver unloaded.\n"); ++} ++ ++module_init(lynloong_init); ++module_exit(lynloong_exit); ++ ++MODULE_AUTHOR("Wu Zhangjin ; Xiang Yu "); ++MODULE_DESCRIPTION("LynLoong PC driver"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/mips/yeeloong_ecrom.c b/drivers/platform/mips/yeeloong_ecrom.c +new file mode 100644 +index 0000000..1bfe4cf +--- /dev/null ++++ b/drivers/platform/mips/yeeloong_ecrom.c +@@ -0,0 +1,944 @@ ++/* ++ * Driver for flushing/dumping ROM of EC on YeeLoong laptop ++ * ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: liujl ++ * ++ * NOTE : ++ * The EC resources accessing and programming are supported. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define EC_MISC_DEV "ec_misc" ++#define EC_IOC_MAGIC 'E' ++ ++/* ec registers range */ ++#define EC_MAX_REGADDR 0xFFFF ++#define EC_MIN_REGADDR 0xF000 ++#define EC_RAM_ADDR 0xF800 ++ ++/* version burned address */ ++#define VER_ADDR 0xf7a1 ++#define VER_MAX_SIZE 7 ++#define EC_ROM_MAX_SIZE 0x10000 ++ ++/* ec internal register */ ++#define REG_POWER_MODE 0xF710 ++#define FLAG_NORMAL_MODE 0x00 ++#define FLAG_IDLE_MODE 0x01 ++#define FLAG_RESET_MODE 0x02 ++ ++/* ec update program flag */ ++#define PROGRAM_FLAG_NONE 0x00 ++#define PROGRAM_FLAG_IE 0x01 ++#define PROGRAM_FLAG_ROM 0x02 ++ ++/* XBI relative registers */ ++#define REG_XBISEG0 0xFEA0 ++#define REG_XBISEG1 0xFEA1 ++#define REG_XBIRSV2 0xFEA2 ++#define REG_XBIRSV3 0xFEA3 ++#define REG_XBIRSV4 0xFEA4 ++#define REG_XBICFG 0xFEA5 ++#define REG_XBICS 0xFEA6 ++#define REG_XBIWE 0xFEA7 ++#define REG_XBISPIA0 0xFEA8 ++#define REG_XBISPIA1 0xFEA9 ++#define REG_XBISPIA2 0xFEAA ++#define REG_XBISPIDAT 0xFEAB ++#define REG_XBISPICMD 0xFEAC ++#define REG_XBISPICFG 0xFEAD ++#define REG_XBISPIDATR 0xFEAE ++#define REG_XBISPICFG2 0xFEAF ++ ++/* commands definition for REG_XBISPICMD */ ++#define SPICMD_WRITE_STATUS 0x01 ++#define SPICMD_BYTE_PROGRAM 0x02 ++#define SPICMD_READ_BYTE 0x03 ++#define SPICMD_WRITE_DISABLE 0x04 ++#define SPICMD_READ_STATUS 0x05 ++#define SPICMD_WRITE_ENABLE 0x06 ++#define SPICMD_HIGH_SPEED_READ 0x0B ++#define SPICMD_POWER_DOWN 0xB9 ++#define SPICMD_SST_EWSR 0x50 ++#define SPICMD_SST_SEC_ERASE 0x20 ++#define SPICMD_SST_BLK_ERASE 0x52 ++#define SPICMD_SST_CHIP_ERASE 0x60 ++#define SPICMD_FRDO 0x3B ++#define SPICMD_SEC_ERASE 0xD7 ++#define SPICMD_BLK_ERASE 0xD8 ++#define SPICMD_CHIP_ERASE 0xC7 ++ ++/* bits definition for REG_XBISPICFG */ ++#define SPICFG_AUTO_CHECK 0x01 ++#define SPICFG_SPI_BUSY 0x02 ++#define SPICFG_DUMMY_READ 0x04 ++#define SPICFG_EN_SPICMD 0x08 ++#define SPICFG_LOW_SPICS 0x10 ++#define SPICFG_EN_SHORT_READ 0x20 ++#define SPICFG_EN_OFFSET_READ 0x40 ++#define SPICFG_EN_FAST_READ 0x80 ++ ++/* watchdog timer registers */ ++#define REG_WDTCFG 0xfe80 ++#define REG_WDTPF 0xfe81 ++#define REG_WDT 0xfe82 ++ ++/* lpc configure register */ ++#define REG_LPCCFG 0xfe95 ++ ++/* 8051 reg */ ++#define REG_PXCFG 0xff14 ++ ++/* Fan register in KB3310 */ ++#define REG_ECFAN_SPEED_LEVEL 0xf4e4 ++#define REG_ECFAN_SWITCH 0xf4d2 ++ ++/* the ec flash rom id number */ ++#define EC_ROM_PRODUCT_ID_SPANSION 0x01 ++#define EC_ROM_PRODUCT_ID_MXIC 0xC2 ++#define EC_ROM_PRODUCT_ID_AMIC 0x37 ++#define EC_ROM_PRODUCT_ID_EONIC 0x1C ++ ++/* misc ioctl operations */ ++#define IOCTL_RDREG _IOR(EC_IOC_MAGIC, 1, int) ++#define IOCTL_WRREG _IOW(EC_IOC_MAGIC, 2, int) ++#define IOCTL_READ_EC _IOR(EC_IOC_MAGIC, 3, int) ++#define IOCTL_PROGRAM_IE _IOW(EC_IOC_MAGIC, 4, int) ++#define IOCTL_PROGRAM_EC _IOW(EC_IOC_MAGIC, 5, int) ++ ++/* start address for programming of EC content or IE */ ++/* ec running code start address */ ++#define EC_START_ADDR 0x00000000 ++/* ec information element storing address */ ++#define IE_START_ADDR 0x00020000 ++ ++/* EC state */ ++#define EC_STATE_IDLE 0x00 /* ec in idle state */ ++#define EC_STATE_BUSY 0x01 /* ec in busy state */ ++ ++/* timeout value for programming */ ++#define EC_FLASH_TIMEOUT 0x1000 /* ec program timeout */ ++/* command checkout timeout including cmd to port or state flag check */ ++#define EC_CMD_TIMEOUT 0x1000 ++#define EC_SPICMD_STANDARD_TIMEOUT (4 * 1000) /* unit : us */ ++#define EC_MAX_DELAY_UNIT (10) /* every time for polling */ ++#define SPI_FINISH_WAIT_TIME 10 ++/* EC content max size */ ++#define EC_CONTENT_MAX_SIZE (64 * 1024) ++#define IE_CONTENT_MAX_SIZE (0x100000 - IE_START_ADDR) ++ ++/* the register operation access struct */ ++struct ec_reg { ++ u32 addr; /* the address of kb3310 registers */ ++ u8 val; /* the register value */ ++}; ++ ++struct ec_info { ++ u32 start_addr; ++ u32 size; ++ u8 *buf; ++}; ++ ++/* open for using rom protection action */ ++#define EC_ROM_PROTECTION ++ ++/* enable the chip reset mode */ ++static int ec_init_reset_mode(void) ++{ ++ int timeout; ++ unsigned char status = 0; ++ int ret = 0; ++ ++ /* make chip goto reset mode */ ++ ret = ec_query_seq(CMD_INIT_RESET_MODE); ++ if (ret < 0) { ++ printk(KERN_ERR "ec init reset mode failed.\n"); ++ goto out; ++ } ++ ++ /* make the action take active */ ++ timeout = EC_CMD_TIMEOUT; ++ status = ec_read(REG_POWER_MODE) & FLAG_RESET_MODE; ++ while (timeout--) { ++ if (status) { ++ udelay(EC_REG_DELAY); ++ break; ++ } ++ status = ec_read(REG_POWER_MODE) & FLAG_RESET_MODE; ++ udelay(EC_REG_DELAY); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR "ec rom fixup : can't check reset status.\n"); ++ ret = -EINVAL; ++ } else ++ printk(KERN_INFO "(%d/%d)reset 0xf710 : 0x%x\n", timeout, ++ EC_CMD_TIMEOUT - timeout, status); ++ ++ /* set MCU to reset mode */ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_PXCFG); ++ status |= (1 << 0); ++ ec_write(REG_PXCFG, status); ++ udelay(EC_REG_DELAY); ++ ++ /* disable FWH/LPC */ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_LPCCFG); ++ status &= ~(1 << 7); ++ ec_write(REG_LPCCFG, status); ++ udelay(EC_REG_DELAY); ++ ++ printk(KERN_INFO "entering reset mode ok..............\n"); ++ ++ out: ++ return ret; ++} ++ ++/* make ec exit from reset mode */ ++static void ec_exit_reset_mode(void) ++{ ++ unsigned char regval; ++ ++ udelay(EC_REG_DELAY); ++ regval = ec_read(REG_LPCCFG); ++ regval |= (1 << 7); ++ ec_write(REG_LPCCFG, regval); ++ regval = ec_read(REG_PXCFG); ++ regval &= ~(1 << 0); ++ ec_write(REG_PXCFG, regval); ++ printk(KERN_INFO "exit reset mode ok..................\n"); ++ ++ return; ++} ++ ++/* make ec disable WDD */ ++static void ec_disable_WDD(void) ++{ ++ unsigned char status; ++ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_WDTCFG); ++ ec_write(REG_WDTPF, 0x03); ++ ec_write(REG_WDTCFG, (status & 0x80) | 0x48); ++ printk(KERN_INFO "Disable WDD ok..................\n"); ++ ++ return; ++} ++ ++/* make ec enable WDD */ ++static void ec_enable_WDD(void) ++{ ++ unsigned char status; ++ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_WDTCFG); ++ ec_write(REG_WDT, 0x28); /* set WDT 5sec(0x28) */ ++ ec_write(REG_WDTCFG, (status & 0x80) | 0x03); ++ printk(KERN_INFO "Enable WDD ok..................\n"); ++ ++ return; ++} ++ ++/* make ec goto idle mode */ ++static int ec_init_idle_mode(void) ++{ ++ int timeout; ++ unsigned char status = 0; ++ int ret = 0; ++ ++ ec_query_seq(CMD_INIT_IDLE_MODE); ++ ++ /* make the action take active */ ++ timeout = EC_CMD_TIMEOUT; ++ status = ec_read(REG_POWER_MODE) & FLAG_IDLE_MODE; ++ while (timeout--) { ++ if (status) { ++ udelay(EC_REG_DELAY); ++ break; ++ } ++ status = ec_read(REG_POWER_MODE) & FLAG_IDLE_MODE; ++ udelay(EC_REG_DELAY); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR "ec rom fixup : can't check out the status.\n"); ++ ret = -EINVAL; ++ } else ++ printk(KERN_INFO "(%d/%d)0xf710 : 0x%x\n", timeout, ++ EC_CMD_TIMEOUT - timeout, ec_read(REG_POWER_MODE)); ++ ++ printk(KERN_INFO "entering idle mode ok...................\n"); ++ ++ return ret; ++} ++ ++/* make ec exit from idle mode */ ++static int ec_exit_idle_mode(void) ++{ ++ ++ ec_query_seq(CMD_EXIT_IDLE_MODE); ++ ++ printk(KERN_INFO "exit idle mode ok...................\n"); ++ ++ return 0; ++} ++ ++static int ec_instruction_cycle(void) ++{ ++ unsigned long timeout; ++ int ret = 0; ++ ++ timeout = EC_FLASH_TIMEOUT; ++ while (timeout-- >= 0) { ++ if (!(ec_read(REG_XBISPICFG) & SPICFG_SPI_BUSY)) ++ break; ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR ++ "EC_INSTRUCTION_CYCLE : timeout for check flag.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ out: ++ return ret; ++} ++ ++/* To see if the ec is in busy state or not. */ ++static inline int ec_flash_busy(unsigned long timeout) ++{ ++ /* assurance the first command be going to rom */ ++ if (ec_instruction_cycle() < 0) ++ return EC_STATE_BUSY; ++#if 1 ++ timeout = timeout / EC_MAX_DELAY_UNIT; ++ while (timeout-- > 0) { ++ /* check the rom's status of busy flag */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (ec_instruction_cycle() < 0) ++ return EC_STATE_BUSY; ++ if ((ec_read(REG_XBISPIDAT) & 0x01) == 0x00) ++ return EC_STATE_IDLE; ++ udelay(EC_MAX_DELAY_UNIT); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR ++ "EC_FLASH_BUSY : timeout for check rom flag.\n"); ++ return EC_STATE_BUSY; ++ } ++#else ++ /* check the rom's status of busy flag */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (ec_instruction_cycle() < 0) ++ return EC_STATE_BUSY; ++ ++ timeout = timeout / EC_MAX_DELAY_UNIT; ++ while (timeout-- > 0) { ++ if ((ec_read(REG_XBISPIDAT) & 0x01) == 0x00) ++ return EC_STATE_IDLE; ++ udelay(EC_MAX_DELAY_UNIT); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR ++ "EC_FLASH_BUSY : timeout for check rom flag.\n"); ++ return EC_STATE_BUSY; ++ } ++#endif ++ ++ return EC_STATE_IDLE; ++} ++ ++static int rom_instruction_cycle(unsigned char cmd) ++{ ++ unsigned long timeout = 0; ++ ++ switch (cmd) { ++ case SPICMD_READ_STATUS: ++ case SPICMD_WRITE_ENABLE: ++ case SPICMD_WRITE_DISABLE: ++ case SPICMD_READ_BYTE: ++ case SPICMD_HIGH_SPEED_READ: ++ timeout = 0; ++ break; ++ case SPICMD_WRITE_STATUS: ++ timeout = 300 * 1000; ++ break; ++ case SPICMD_BYTE_PROGRAM: ++ timeout = 5 * 1000; ++ break; ++ case SPICMD_SST_SEC_ERASE: ++ case SPICMD_SEC_ERASE: ++ timeout = 1000 * 1000; ++ break; ++ case SPICMD_SST_BLK_ERASE: ++ case SPICMD_BLK_ERASE: ++ timeout = 3 * 1000 * 1000; ++ break; ++ case SPICMD_SST_CHIP_ERASE: ++ case SPICMD_CHIP_ERASE: ++ timeout = 20 * 1000 * 1000; ++ break; ++ default: ++ timeout = EC_SPICMD_STANDARD_TIMEOUT; ++ } ++ if (timeout == 0) ++ return ec_instruction_cycle(); ++ if (timeout < EC_SPICMD_STANDARD_TIMEOUT) ++ timeout = EC_SPICMD_STANDARD_TIMEOUT; ++ ++ return ec_flash_busy(timeout); ++} ++ ++/* delay for start/stop action */ ++static void delay_spi(int n) ++{ ++ while (n--) ++ inb(EC_IO_PORT_HIGH); ++} ++ ++/* start the action to spi rom function */ ++static void ec_start_spi(void) ++{ ++ unsigned char val; ++ ++ delay_spi(SPI_FINISH_WAIT_TIME); ++ val = ec_read(REG_XBISPICFG) | SPICFG_EN_SPICMD | SPICFG_AUTO_CHECK; ++ ec_write(REG_XBISPICFG, val); ++ delay_spi(SPI_FINISH_WAIT_TIME); ++} ++ ++/* stop the action to spi rom function */ ++static void ec_stop_spi(void) ++{ ++ unsigned char val; ++ ++ delay_spi(SPI_FINISH_WAIT_TIME); ++ val = ++ ec_read(REG_XBISPICFG) & (~(SPICFG_EN_SPICMD | SPICFG_AUTO_CHECK)); ++ ec_write(REG_XBISPICFG, val); ++ delay_spi(SPI_FINISH_WAIT_TIME); ++} ++ ++/* read one byte from xbi interface */ ++static int ec_read_byte(unsigned int addr, unsigned char *byte) ++{ ++ int ret = 0; ++ ++ /* enable spicmd writing. */ ++ ec_start_spi(); ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR "EC_READ_BYTE : SPICMD_WRITE_ENABLE failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* write the address */ ++ ec_write(REG_XBISPIA2, (addr & 0xff0000) >> 16); ++ ec_write(REG_XBISPIA1, (addr & 0x00ff00) >> 8); ++ ec_write(REG_XBISPIA0, (addr & 0x0000ff) >> 0); ++ /* start action */ ++ ec_write(REG_XBISPICMD, SPICMD_HIGH_SPEED_READ); ++ if (rom_instruction_cycle(SPICMD_HIGH_SPEED_READ) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_READ_BYTE : SPICMD_HIGH_SPEED_READ failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ *byte = ec_read(REG_XBISPIDAT); ++ ++ out: ++ /* disable spicmd writing. */ ++ ec_stop_spi(); ++ ++ return ret; ++} ++ ++/* write one byte to ec rom */ ++static int ec_write_byte(unsigned int addr, unsigned char byte) ++{ ++ int ret = 0; ++ ++ /* enable spicmd writing. */ ++ ec_start_spi(); ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_WRITE_BYTE : SPICMD_WRITE_ENABLE failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* write the address */ ++ ec_write(REG_XBISPIA2, (addr & 0xff0000) >> 16); ++ ec_write(REG_XBISPIA1, (addr & 0x00ff00) >> 8); ++ ec_write(REG_XBISPIA0, (addr & 0x0000ff) >> 0); ++ ec_write(REG_XBISPIDAT, byte); ++ /* start action */ ++ ec_write(REG_XBISPICMD, SPICMD_BYTE_PROGRAM); ++ if (rom_instruction_cycle(SPICMD_BYTE_PROGRAM) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_WRITE_BYTE : SPICMD_BYTE_PROGRAM failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ out: ++ /* disable spicmd writing. */ ++ ec_stop_spi(); ++ ++ return ret; ++} ++ ++/* unprotect SPI ROM */ ++/* EC_ROM_unprotect function code */ ++static int EC_ROM_unprotect(void) ++{ ++ unsigned char status; ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_UNIT_ERASE : SPICMD_WRITE_ENABLE failed.\n"); ++ return 1; ++ } ++ ++ /* unprotect the status register of rom */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (rom_instruction_cycle(SPICMD_READ_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR "EC_UNIT_ERASE : SPICMD_READ_STATUS failed.\n"); ++ return 1; ++ } ++ status = ec_read(REG_XBISPIDAT); ++ ec_write(REG_XBISPIDAT, status & 0x02); ++ if (ec_instruction_cycle() < 0) { ++ printk(KERN_ERR "EC_UNIT_ERASE : write status value failed.\n"); ++ return 1; ++ } ++ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_STATUS); ++ if (rom_instruction_cycle(SPICMD_WRITE_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_UNIT_ERASE : SPICMD_WRITE_STATUS failed.\n"); ++ return 1; ++ } ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_UNIT_ERASE : SPICMD_WRITE_ENABLE failed.\n"); ++ return 1; ++ } ++ ++ return 0; ++} ++ ++/* erase one block or chip or sector as needed */ ++static int ec_unit_erase(unsigned char erase_cmd, unsigned int addr) ++{ ++ unsigned char status; ++ int ret = 0, i = 0; ++ int unprotect_count = 3; ++ int check_flag = 0; ++ ++ /* enable spicmd writing. */ ++ ec_start_spi(); ++ ++#ifdef EC_ROM_PROTECTION ++ /* added for re-check SPICMD_READ_STATUS */ ++ while (unprotect_count-- > 0) { ++ if (EC_ROM_unprotect()) { ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* first time:500ms --> 5.5sec -->10.5sec */ ++ for (i = 0; i < ((2 - unprotect_count) * 100 + 10); i++) ++ udelay(50000); ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (rom_instruction_cycle(SPICMD_READ_STATUS) ++ == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_READ_STATUS failed.\n"); ++ } else { ++ status = ec_read(REG_XBISPIDAT); ++ printk(KERN_INFO "Read unprotect status : 0x%x\n", ++ status); ++ if ((status & 0x1C) == 0x00) { ++ printk(KERN_INFO ++ "Read unprotect status OK1 : 0x%x\n", ++ status & 0x1C); ++ check_flag = 1; ++ break; ++ } ++ } ++ } ++ ++ if (!check_flag) { ++ printk(KERN_INFO "SPI ROM unprotect fail.\n"); ++ return 1; ++ } ++#endif ++ ++ /* block address fill */ ++ if (erase_cmd == SPICMD_BLK_ERASE) { ++ ec_write(REG_XBISPIA2, (addr & 0x00ff0000) >> 16); ++ ec_write(REG_XBISPIA1, (addr & 0x0000ff00) >> 8); ++ ec_write(REG_XBISPIA0, (addr & 0x000000ff) >> 0); ++ } ++ ++ /* erase the whole chip first */ ++ ec_write(REG_XBISPICMD, erase_cmd); ++ if (rom_instruction_cycle(erase_cmd) == EC_STATE_BUSY) { ++ printk(KERN_ERR "EC_UNIT_ERASE : erase failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ out: ++ /* disable spicmd writing. */ ++ ec_stop_spi(); ++ ++ return ret; ++} ++ ++/* update the whole rom content with H/W mode ++ * PLEASE USING ec_unit_erase() FIRSTLY ++ */ ++static int ec_program_rom(struct ec_info *info, int flag) ++{ ++ unsigned int addr = 0; ++ unsigned long size = 0; ++ unsigned char *ptr = NULL; ++ unsigned char data; ++ unsigned char val = 0; ++ int ret = 0; ++ int i, j; ++ unsigned char status; ++ ++ /* modify for program serial No. ++ * set IE_START_ADDR & use idle mode, ++ * disable WDD ++ */ ++ if (flag == PROGRAM_FLAG_ROM) { ++ ret = ec_init_reset_mode(); ++ addr = info->start_addr + EC_START_ADDR; ++ printk(KERN_INFO "PROGRAM_FLAG_ROM..............\n"); ++ } else if (flag == PROGRAM_FLAG_IE) { ++ ret = ec_init_idle_mode(); ++ ec_disable_WDD(); ++ addr = info->start_addr + IE_START_ADDR; ++ printk(KERN_INFO "PROGRAM_FLAG_IE..............\n"); ++ } else { ++ return 0; ++ } ++ ++ if (ret < 0) { ++ if (flag == PROGRAM_FLAG_IE) ++ ec_enable_WDD(); ++ return ret; ++ } ++ ++ size = info->size; ++ ptr = info->buf; ++ printk(KERN_INFO "starting update ec ROM..............\n"); ++ ++ ret = ec_unit_erase(SPICMD_BLK_ERASE, addr); ++ if (ret) { ++ printk(KERN_ERR "program ec : erase block failed.\n"); ++ goto out; ++ } ++ printk(KERN_ERR "program ec : erase block OK.\n"); ++ ++ i = 0; ++ while (i < size) { ++ data = *(ptr + i); ++ ec_write_byte(addr, data); ++ ec_read_byte(addr, &val); ++ if (val != data) { ++ ec_write_byte(addr, data); ++ ec_read_byte(addr, &val); ++ if (val != data) { ++ printk(KERN_INFO ++ "EC : Second flash program failed at:\t"); ++ printk(KERN_INFO ++ "addr : 0x%x, source : 0x%x, dest: 0x%x\n", ++ addr, data, val); ++ printk(KERN_INFO "This should not happen... STOP\n"); ++ break; ++ } ++ } ++ i++; ++ addr++; ++ } ++ ++#ifdef EC_ROM_PROTECTION ++ /* we should start spi access firstly */ ++ ec_start_spi(); ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_WRITE_ENABLE failed.\n"); ++ goto out1; ++ } ++ ++ /* protect the status register of rom */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (rom_instruction_cycle(SPICMD_READ_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_READ_STATUS failed.\n"); ++ goto out1; ++ } ++ status = ec_read(REG_XBISPIDAT); ++ ++ ec_write(REG_XBISPIDAT, status | 0x1C); ++ if (ec_instruction_cycle() < 0) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : write status value failed.\n"); ++ goto out1; ++ } ++ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_STATUS); ++ if (rom_instruction_cycle(SPICMD_WRITE_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_WRITE_STATUS failed.\n"); ++ goto out1; ++ } ++#endif ++ ++ /* disable the write action to spi rom */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_DISABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_DISABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_WRITE_DISABLE failed.\n"); ++ goto out1; ++ } ++ ++ out1: ++ /* we should stop spi access firstly */ ++ ec_stop_spi(); ++ out: ++ /* for security */ ++ for (j = 0; j < 2000; j++) ++ udelay(1000); ++ ++ /* modify for program serial No. ++ * after program No exit idle mode ++ * and enable WDD ++ */ ++ if (flag == PROGRAM_FLAG_ROM) { ++ /* exit from the reset mode */ ++ ec_exit_reset_mode(); ++ } else { ++ /* ec exit from idle mode */ ++ ret = ec_exit_idle_mode(); ++ ec_enable_WDD(); ++ if (ret < 0) ++ return ret; ++ } ++ ++ return 0; ++} ++ ++/* ioctl */ ++static int misc_ioctl(struct inode *inode, struct file *filp, u_int cmd, ++ u_long arg) ++{ ++ struct ec_info ecinfo; ++ void __user *ptr = (void __user *)arg; ++ struct ec_reg *ecreg = (struct ec_reg *)(filp->private_data); ++ int ret = 0; ++ ++ switch (cmd) { ++ case IOCTL_RDREG: ++ ret = copy_from_user(ecreg, ptr, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "reg read : copy from user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecreg->addr > EC_MAX_REGADDR) ++ || (ecreg->addr < EC_MIN_REGADDR)) { ++ printk(KERN_ERR ++ "reg read : out of register address range.\n"); ++ return -EINVAL; ++ } ++ ecreg->val = ec_read(ecreg->addr); ++ ret = copy_to_user(ptr, ecreg, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "reg read : copy to user error.\n"); ++ return -EFAULT; ++ } ++ break; ++ case IOCTL_WRREG: ++ ret = copy_from_user(ecreg, ptr, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "reg write : copy from user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecreg->addr > EC_MAX_REGADDR) ++ || (ecreg->addr < EC_MIN_REGADDR)) { ++ printk(KERN_ERR ++ "reg write : out of register address range.\n"); ++ return -EINVAL; ++ } ++ ec_write(ecreg->addr, ecreg->val); ++ break; ++ case IOCTL_READ_EC: ++ ret = copy_from_user(ecreg, ptr, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "spi read : copy from user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecreg->addr > EC_RAM_ADDR) ++ && (ecreg->addr < EC_MAX_REGADDR)) { ++ printk(KERN_ERR ++ "spi read : out of register address range.\n"); ++ return -EINVAL; ++ } ++ ec_read_byte(ecreg->addr, &(ecreg->val)); ++ ret = copy_to_user(ptr, ecreg, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "spi read : copy to user error.\n"); ++ return -EFAULT; ++ } ++ break; ++ case IOCTL_PROGRAM_IE: ++ ecinfo.start_addr = EC_START_ADDR; ++ ecinfo.size = EC_CONTENT_MAX_SIZE; ++ ecinfo.buf = (u8 *) kmalloc(ecinfo.size, GFP_KERNEL); ++ if (ecinfo.buf == NULL) { ++ printk(KERN_ERR "program ie : kmalloc failed.\n"); ++ return -ENOMEM; ++ } ++ ret = copy_from_user(ecinfo.buf, (u8 *) ptr, ecinfo.size); ++ if (ret) { ++ printk(KERN_ERR "program ie : copy from user error.\n"); ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ return -EFAULT; ++ } ++ ++ /* use ec_program_rom to write serial No */ ++ ec_program_rom(&ecinfo, PROGRAM_FLAG_IE); ++ ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ break; ++ case IOCTL_PROGRAM_EC: ++ ecinfo.start_addr = EC_START_ADDR; ++ if (get_user((ecinfo.size), (u32 *) ptr)) { ++ printk(KERN_ERR "program ec : get user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecinfo.size) > EC_CONTENT_MAX_SIZE) { ++ printk(KERN_ERR "program ec : size out of limited.\n"); ++ return -EINVAL; ++ } ++ ecinfo.buf = (u8 *) kmalloc(ecinfo.size, GFP_KERNEL); ++ if (ecinfo.buf == NULL) { ++ printk(KERN_ERR "program ec : kmalloc failed.\n"); ++ return -ENOMEM; ++ } ++ ret = copy_from_user(ecinfo.buf, ((u8 *) ptr + 4), ecinfo.size); ++ if (ret) { ++ printk(KERN_ERR "program ec : copy from user error.\n"); ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ return -EFAULT; ++ } ++ ++ ec_program_rom(&ecinfo, PROGRAM_FLAG_ROM); ++ ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ break; ++ ++ default: ++ break; ++ } ++ ++ return 0; ++} ++ ++static long misc_compat_ioctl(struct file *file, unsigned int cmd, ++ unsigned long arg) ++{ ++ return misc_ioctl(file->f_dentry->d_inode, file, cmd, arg); ++} ++ ++static int misc_open(struct inode *inode, struct file *filp) ++{ ++ struct ec_reg *ecreg = NULL; ++ ecreg = kmalloc(sizeof(struct ec_reg), GFP_KERNEL); ++ if (ecreg) ++ filp->private_data = ecreg; ++ ++ return ecreg ? 0 : -ENOMEM; ++} ++ ++static int misc_release(struct inode *inode, struct file *filp) ++{ ++ struct ec_reg *ecreg = (struct ec_reg *)(filp->private_data); ++ ++ filp->private_data = NULL; ++ kfree(ecreg); ++ ++ return 0; ++} ++ ++static const struct file_operations ecmisc_fops = { ++ .open = misc_open, ++ .release = misc_release, ++ .read = NULL, ++ .write = NULL, ++#ifdef CONFIG_64BIT ++ .compat_ioctl = misc_compat_ioctl, ++#else ++ .ioctl = misc_ioctl, ++#endif ++}; ++ ++static struct miscdevice ecmisc_device = { ++ .minor = MISC_DYNAMIC_MINOR, ++ .name = EC_MISC_DEV, ++ .fops = &ecmisc_fops ++}; ++ ++static int __init ecmisc_init(void) ++{ ++ int ret; ++ ++ printk(KERN_INFO "EC misc device init.\n"); ++ ret = misc_register(&ecmisc_device); ++ ++ return ret; ++} ++ ++static void __exit ecmisc_exit(void) ++{ ++ printk(KERN_INFO "EC misc device exit.\n"); ++ misc_deregister(&ecmisc_device); ++} ++ ++module_init(ecmisc_init); ++module_exit(ecmisc_exit); ++ ++MODULE_AUTHOR("liujl "); ++MODULE_DESCRIPTION("Driver for flushing/dumping ROM of EC on YeeLoong laptop"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/mips/yeeloong_laptop.c b/drivers/platform/mips/yeeloong_laptop.c +new file mode 100644 +index 0000000..3db791e +--- /dev/null ++++ b/drivers/platform/mips/yeeloong_laptop.c +@@ -0,0 +1,1356 @@ ++/* ++ * Driver for YeeLoong laptop extras ++ * ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin , Liu Junliang ++ * ++ * 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 /* for backlight subdriver */ ++#include ++#include /* for hwmon subdriver */ ++#include ++#include /* for video output subdriver */ ++#include /* for lcd output subdriver */ ++#include /* for hotkey subdriver */ ++#include ++#include ++#include ++#include /* for AC & Battery subdriver */ ++#include /* for register_reboot_notifier */ ++#include /* for register_pm_notifier */ ++ ++#include ++ ++#include /* for loongson_cmdline */ ++#include ++ ++/* common function */ ++#define EC_VER_LEN 64 ++ ++static int ec_version_before(char *version) ++{ ++ char *p, ec_ver[EC_VER_LEN]; ++ ++ p = strstr(loongson_cmdline, "EC_VER="); ++ if (!p) ++ memset(ec_ver, 0, EC_VER_LEN); ++ else { ++ strncpy(ec_ver, p, EC_VER_LEN); ++ p = strstr(ec_ver, " "); ++ if (p) ++ *p = '\0'; ++ } ++ ++ return (strncasecmp(ec_ver, version, 64) < 0); ++} ++ ++/* backlight subdriver */ ++#define MIN_BRIGHTNESS 1 ++#define MAX_BRIGHTNESS 8 ++ ++static int yeeloong_set_brightness(struct backlight_device *bd) ++{ ++ unsigned char level; ++ static unsigned char old_level; ++ ++ level = (bd->props.fb_blank == FB_BLANK_UNBLANK && ++ bd->props.power == FB_BLANK_UNBLANK) ? ++ bd->props.brightness : 0; ++ ++ level = clamp_val(level, MIN_BRIGHTNESS, MAX_BRIGHTNESS); ++ ++ /* Avoid to modify the brightness when EC is tuning it */ ++ if (old_level != level) { ++ if (ec_read(REG_DISPLAY_BRIGHTNESS) == old_level) ++ ec_write(REG_DISPLAY_BRIGHTNESS, level); ++ old_level = level; ++ } ++ ++ return 0; ++} ++ ++static int yeeloong_get_brightness(struct backlight_device *bd) ++{ ++ return ec_read(REG_DISPLAY_BRIGHTNESS); ++} ++ ++static struct backlight_ops backlight_ops = { ++ .get_brightness = yeeloong_get_brightness, ++ .update_status = yeeloong_set_brightness, ++}; ++ ++static struct backlight_device *yeeloong_backlight_dev; ++ ++static int yeeloong_backlight_init(void) ++{ ++ int ret; ++ struct backlight_properties props; ++ ++ memset(&props, 0, sizeof(struct backlight_properties)); ++ props.max_brightness = MAX_BRIGHTNESS; ++ props.type = BACKLIGHT_PLATFORM; ++ yeeloong_backlight_dev = backlight_device_register("backlight0", NULL, ++ NULL, &backlight_ops, &props); ++ ++ if (IS_ERR(yeeloong_backlight_dev)) { ++ ret = PTR_ERR(yeeloong_backlight_dev); ++ yeeloong_backlight_dev = NULL; ++ return ret; ++ } ++ ++ yeeloong_backlight_dev->props.brightness = ++ yeeloong_get_brightness(yeeloong_backlight_dev); ++ backlight_update_status(yeeloong_backlight_dev); ++ ++ return 0; ++} ++ ++static void yeeloong_backlight_exit(void) ++{ ++ if (yeeloong_backlight_dev) { ++ backlight_device_unregister(yeeloong_backlight_dev); ++ yeeloong_backlight_dev = NULL; ++ } ++} ++ ++/* AC & Battery subdriver */ ++ ++static struct power_supply yeeloong_ac, yeeloong_bat; ++ ++#define RET (val->intval) ++ ++#define BAT_CAP_CRITICAL 5 ++#define BAT_CAP_HIGH 95 ++ ++#define get_bat(type) \ ++ ec_read(REG_BAT_##type) ++ ++#define get_bat_l(type) \ ++ ((get_bat(type##_HIGH) << 8) | get_bat(type##_LOW)) ++ ++static int yeeloong_get_ac_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ if (psp == POWER_SUPPLY_PROP_ONLINE) ++ RET = !!(get_bat(POWER) & BIT_BAT_POWER_ACIN); ++ ++ return 0; ++} ++ ++static enum power_supply_property yeeloong_ac_props[] = { ++ POWER_SUPPLY_PROP_ONLINE, ++}; ++ ++static struct power_supply yeeloong_ac = { ++ .name = "yeeloong-ac", ++ .type = POWER_SUPPLY_TYPE_MAINS, ++ .properties = yeeloong_ac_props, ++ .num_properties = ARRAY_SIZE(yeeloong_ac_props), ++ .get_property = yeeloong_get_ac_props, ++}; ++ ++static inline bool is_bat_in(void) ++{ ++ return !!(get_bat(STATUS) & BIT_BAT_STATUS_IN); ++} ++ ++static int get_bat_temp(void) ++{ ++ return get_bat_l(TEMPERATURE) * 10; ++} ++ ++static int get_bat_current(void) ++{ ++ return -(s16)get_bat_l(CURRENT); ++} ++ ++static int get_bat_voltage(void) ++{ ++ return get_bat_l(VOLTAGE); ++} ++ ++static char *get_manufacturer(void) ++{ ++ return (get_bat(VENDOR) == FLAG_BAT_VENDOR_SANYO) ? "SANYO" : "SIMPLO"; ++} ++ ++static int get_relative_cap(void) ++{ ++ /* ++ * When the relative capacity becomes 2, the hardware is observed to ++ * have been turned off forcely. so, we must tune it be suitable to ++ * make the software do related actions. ++ */ ++ int tmp = get_bat_l(RELATIVE_CAP); ++ ++ if (tmp <= (BAT_CAP_CRITICAL * 2)) ++ tmp -= 3; ++ ++ return tmp; ++} ++ ++static int yeeloong_get_bat_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ switch (psp) { ++ /* Fixed information */ ++ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: ++ /* mV -> µV */ ++ RET = get_bat_l(DESIGN_VOL) * 1000; ++ break; ++ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: ++ /* mAh->µAh */ ++ RET = get_bat_l(DESIGN_CAP) * 1000; ++ break; ++ case POWER_SUPPLY_PROP_CHARGE_FULL: ++ /* µAh */ ++ RET = get_bat_l(FULLCHG_CAP) * 1000; ++ break; ++ case POWER_SUPPLY_PROP_MANUFACTURER: ++ val->strval = get_manufacturer(); ++ break; ++ /* Dynamic information */ ++ case POWER_SUPPLY_PROP_PRESENT: ++ RET = is_bat_in(); ++ break; ++ case POWER_SUPPLY_PROP_CURRENT_NOW: ++ /* mA -> µA */ ++ RET = is_bat_in() ? get_bat_current() * 1000 : 0; ++ break; ++ case POWER_SUPPLY_PROP_VOLTAGE_NOW: ++ /* mV -> µV */ ++ RET = is_bat_in() ? get_bat_voltage() * 1000 : 0; ++ break; ++ case POWER_SUPPLY_PROP_TEMP: ++ /* Celcius */ ++ RET = is_bat_in() ? get_bat_temp() : 0; ++ break; ++ case POWER_SUPPLY_PROP_CAPACITY: ++ RET = is_bat_in() ? get_relative_cap() : 0; ++ break; ++ case POWER_SUPPLY_PROP_CAPACITY_LEVEL: { ++ int status; ++ ++ if (!is_bat_in()) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; ++ break; ++ } ++ ++ status = get_bat(STATUS); ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; ++ ++ if (unlikely(status & BIT_BAT_STATUS_DESTROY)) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; ++ break; ++ } ++ ++ if (status & BIT_BAT_STATUS_FULL) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_FULL; ++ else { ++ int curr_cap = get_relative_cap(); ++ ++ if (status & BIT_BAT_STATUS_LOW) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_LOW; ++ if (curr_cap <= BAT_CAP_CRITICAL) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; ++ } else if (curr_cap >= BAT_CAP_HIGH) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_HIGH; ++ } ++ } break; ++ case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW: ++ /* seconds */ ++ RET = is_bat_in() ? (get_relative_cap() - 3) * 54 + 142 : 0; ++ break; ++ case POWER_SUPPLY_PROP_STATUS: { ++ int charge = get_bat(CHARGE); ++ ++ RET = POWER_SUPPLY_STATUS_UNKNOWN; ++ if (charge & FLAG_BAT_CHARGE_DISCHARGE) ++ RET = POWER_SUPPLY_STATUS_DISCHARGING; ++ else if (charge & FLAG_BAT_CHARGE_CHARGE) ++ RET = POWER_SUPPLY_STATUS_CHARGING; ++ } break; ++ case POWER_SUPPLY_PROP_HEALTH: { ++ int status; ++ ++ if (!is_bat_in()) { ++ RET = POWER_SUPPLY_HEALTH_UNKNOWN; ++ break; ++ } ++ ++ status = get_bat(STATUS); ++ RET = POWER_SUPPLY_HEALTH_GOOD; ++ ++ if (status & (BIT_BAT_STATUS_DESTROY | ++ BIT_BAT_STATUS_LOW)) ++ RET = POWER_SUPPLY_HEALTH_DEAD; ++ if (get_bat(CHARGE_STATUS) & ++ BIT_BAT_CHARGE_STATUS_OVERTEMP) ++ RET = POWER_SUPPLY_HEALTH_OVERHEAT; ++ } break; ++ case POWER_SUPPLY_PROP_CHARGE_NOW: /* 1/100(%)*1000 µAh */ ++ RET = get_relative_cap() * get_bat_l(FULLCHG_CAP) * 10; ++ break; ++ default: ++ return -EINVAL; ++ } ++ return 0; ++} ++#undef RET ++ ++static enum power_supply_property yeeloong_bat_props[] = { ++ POWER_SUPPLY_PROP_STATUS, ++ POWER_SUPPLY_PROP_PRESENT, ++ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_FULL, ++ POWER_SUPPLY_PROP_CHARGE_NOW, ++ POWER_SUPPLY_PROP_CURRENT_NOW, ++ POWER_SUPPLY_PROP_VOLTAGE_NOW, ++ POWER_SUPPLY_PROP_HEALTH, ++ POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, ++ POWER_SUPPLY_PROP_CAPACITY, ++ POWER_SUPPLY_PROP_CAPACITY_LEVEL, ++ POWER_SUPPLY_PROP_TEMP, ++ POWER_SUPPLY_PROP_MANUFACTURER, ++}; ++ ++static struct power_supply yeeloong_bat = { ++ .name = "yeeloong-bat", ++ .type = POWER_SUPPLY_TYPE_BATTERY, ++ .properties = yeeloong_bat_props, ++ .num_properties = ARRAY_SIZE(yeeloong_bat_props), ++ .get_property = yeeloong_get_bat_props, ++}; ++ ++static int ac_bat_initialized; ++ ++static int yeeloong_bat_init(void) ++{ ++ int ret; ++ ++ ret = power_supply_register(NULL, &yeeloong_ac); ++ if (ret) ++ return ret; ++ ret = power_supply_register(NULL, &yeeloong_bat); ++ if (ret) { ++ power_supply_unregister(&yeeloong_ac); ++ return ret; ++ } ++ ac_bat_initialized = 1; ++ ++ return 0; ++} ++ ++static void yeeloong_bat_exit(void) ++{ ++ ac_bat_initialized = 0; ++ ++ power_supply_unregister(&yeeloong_ac); ++ power_supply_unregister(&yeeloong_bat); ++} ++/* hwmon subdriver */ ++ ++#define MIN_FAN_SPEED 0 ++#define MAX_FAN_SPEED 3 ++ ++#define get_fan(type) \ ++ ec_read(REG_FAN_##type) ++ ++#define set_fan(type, val) \ ++ ec_write(REG_FAN_##type, val) ++ ++static inline int get_fan_speed_level(void) ++{ ++ return get_fan(SPEED_LEVEL); ++} ++static inline void set_fan_speed_level(int speed) ++{ ++ set_fan(SPEED_LEVEL, speed); ++} ++ ++static inline int get_fan_mode(void) ++{ ++ return get_fan(AUTO_MAN_SWITCH); ++} ++static inline void set_fan_mode(int mode) ++{ ++ set_fan(AUTO_MAN_SWITCH, mode); ++} ++ ++/* ++ * 3 different modes: Full speed(0); manual mode(1); auto mode(2) ++ */ ++static int get_fan_pwm_enable(void) ++{ ++ return (get_fan_mode() == BIT_FAN_AUTO) ? 2 : ++ (get_fan_speed_level() == MAX_FAN_SPEED) ? 0 : 1; ++} ++ ++static void set_fan_pwm_enable(int mode) ++{ ++ set_fan_mode((mode == 2) ? BIT_FAN_AUTO : BIT_FAN_MANUAL); ++ if (mode == 0) ++ set_fan_speed_level(MAX_FAN_SPEED); ++} ++ ++static int get_fan_pwm(void) ++{ ++ return get_fan_speed_level(); ++} ++ ++static void set_fan_pwm(int value) ++{ ++ if (get_fan_mode() != BIT_FAN_MANUAL) ++ return; ++ ++ value = clamp_val(value, MIN_FAN_SPEED, MAX_FAN_SPEED); ++ ++ /* We must ensure the fan is on */ ++ if (value > 0) ++ set_fan(CONTROL, ON); ++ ++ set_fan_speed_level(value); ++} ++ ++static inline int get_fan_speed(void) ++{ ++ return ((get_fan(SPEED_HIGH) & 0x0f) << 8) | get_fan(SPEED_LOW); ++} ++ ++static int get_fan_rpm(void) ++{ ++ return FAN_SPEED_DIVIDER / get_fan_speed(); ++} ++ ++static int get_cpu_temp(void) ++{ ++ return (s8)ec_read(REG_TEMPERATURE_VALUE) * 1000; ++} ++ ++static int get_cpu_temp_max(void) ++{ ++ return 60 * 1000; ++} ++ ++static int get_bat_temp_alarm(void) ++{ ++ return !!(get_bat(CHARGE_STATUS) & BIT_BAT_CHARGE_STATUS_OVERTEMP); ++} ++ ++static ssize_t store_sys_hwmon(void (*set) (int), const char *buf, size_t count) ++{ ++ int ret; ++ unsigned long value; ++ ++ if (!count) ++ return 0; ++ ++ ret = strict_strtoul(buf, 10, &value); ++ if (ret) ++ return ret; ++ ++ set(value); ++ ++ return count; ++} ++ ++static ssize_t show_sys_hwmon(int (*get) (void), char *buf) ++{ ++ return sprintf(buf, "%d\n", get()); ++} ++ ++#define CREATE_SENSOR_ATTR(_name, _mode, _set, _get) \ ++ static ssize_t show_##_name(struct device *dev, \ ++ struct device_attribute *attr, \ ++ char *buf) \ ++ { \ ++ return show_sys_hwmon(_set, buf); \ ++ } \ ++ static ssize_t store_##_name(struct device *dev, \ ++ struct device_attribute *attr, \ ++ const char *buf, size_t count) \ ++ { \ ++ return store_sys_hwmon(_get, buf, count); \ ++ } \ ++ static SENSOR_DEVICE_ATTR(_name, _mode, show_##_name, store_##_name, 0); ++ ++CREATE_SENSOR_ATTR(fan1_input, S_IRUGO, get_fan_rpm, NULL); ++CREATE_SENSOR_ATTR(pwm1, S_IRUGO | S_IWUSR, get_fan_pwm, set_fan_pwm); ++CREATE_SENSOR_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, get_fan_pwm_enable, ++ set_fan_pwm_enable); ++CREATE_SENSOR_ATTR(temp1_input, S_IRUGO, get_cpu_temp, NULL); ++CREATE_SENSOR_ATTR(temp1_max, S_IRUGO, get_cpu_temp_max, NULL); ++CREATE_SENSOR_ATTR(temp2_input, S_IRUGO, get_bat_temp, NULL); ++CREATE_SENSOR_ATTR(temp2_max_alarm, S_IRUGO, get_bat_temp_alarm, NULL); ++CREATE_SENSOR_ATTR(curr1_input, S_IRUGO, get_bat_current, NULL); ++CREATE_SENSOR_ATTR(in1_input, S_IRUGO, get_bat_voltage, NULL); ++ ++static ssize_t ++show_name(struct device *dev, struct device_attribute *attr, char *buf) ++{ ++ return sprintf(buf, "yeeloong\n"); ++} ++ ++static SENSOR_DEVICE_ATTR(name, S_IRUGO, show_name, NULL, 0); ++ ++static struct attribute *hwmon_attributes[] = { ++ &sensor_dev_attr_pwm1.dev_attr.attr, ++ &sensor_dev_attr_pwm1_enable.dev_attr.attr, ++ &sensor_dev_attr_fan1_input.dev_attr.attr, ++ &sensor_dev_attr_temp1_input.dev_attr.attr, ++ &sensor_dev_attr_temp1_max.dev_attr.attr, ++ &sensor_dev_attr_temp2_input.dev_attr.attr, ++ &sensor_dev_attr_temp2_max_alarm.dev_attr.attr, ++ &sensor_dev_attr_curr1_input.dev_attr.attr, ++ &sensor_dev_attr_in1_input.dev_attr.attr, ++ &sensor_dev_attr_name.dev_attr.attr, ++ NULL ++}; ++ ++static struct attribute_group hwmon_attribute_group = { ++ .attrs = hwmon_attributes ++}; ++ ++static struct device *yeeloong_hwmon_dev; ++ ++static int yeeloong_hwmon_init(void) ++{ ++ int ret; ++ ++ yeeloong_hwmon_dev = hwmon_device_register(NULL); ++ if (IS_ERR(yeeloong_hwmon_dev)) { ++ yeeloong_hwmon_dev = NULL; ++ return PTR_ERR(yeeloong_hwmon_dev); ++ } ++ ret = sysfs_create_group(&yeeloong_hwmon_dev->kobj, ++ &hwmon_attribute_group); ++ if (ret) { ++ hwmon_device_unregister(yeeloong_hwmon_dev); ++ yeeloong_hwmon_dev = NULL; ++ return ret; ++ } ++ /* ensure fan is set to auto mode */ ++ set_fan_pwm_enable(2); ++ ++ return 0; ++} ++ ++static void yeeloong_hwmon_exit(void) ++{ ++ if (yeeloong_hwmon_dev) { ++ sysfs_remove_group(&yeeloong_hwmon_dev->kobj, ++ &hwmon_attribute_group); ++ hwmon_device_unregister(yeeloong_hwmon_dev); ++ yeeloong_hwmon_dev = NULL; ++ } ++} ++ ++/* video output subdriver */ ++ ++#define LCD 0 ++#define CRT 1 ++#define VOD_NUM 2 /* The total number of video output device*/ ++ ++static struct output_device *vod[VOD_NUM]; ++ ++static int vor[] = {REG_DISPLAY_LCD, REG_CRT_DETECT}; ++ ++static int get_vo_dev(struct output_device *od) ++{ ++ int i, dev; ++ ++ dev = -1; ++ for (i = 0; i < VOD_NUM; i++) ++ if (od == vod[i]) ++ dev = i; ++ ++ return dev; ++} ++ ++static int vo_get_status(int dev) ++{ ++ return ec_read(vor[dev]); ++} ++ ++static int yeeloong_vo_get_status(struct output_device *od) ++{ ++ int vd; ++ ++ vd = get_vo_dev(od); ++ if (vd != -1) ++ return vo_get_status(vd); ++ ++ return -ENODEV; ++} ++ ++static void vo_set_state(int dev, int state) ++{ ++ int addr; ++ unsigned long value; ++ ++ switch (dev) { ++ case LCD: ++ addr = 0x31; ++ break; ++ case CRT: ++ addr = 0x21; ++ break; ++ default: ++ /* return directly if the wrong video output device */ ++ return; ++ } ++ ++ outb(addr, 0x3c4); ++ value = inb(0x3c5); ++ ++ switch (dev) { ++ case LCD: ++ value |= (state ? 0x03 : 0x02); ++ break; ++ case CRT: ++ if (state) ++ clear_bit(7, &value); ++ else ++ set_bit(7, &value); ++ break; ++ default: ++ break; ++ } ++ ++ outb(addr, 0x3c4); ++ outb(value, 0x3c5); ++ ++ if (dev == LCD) ++ ec_write(REG_BACKLIGHT_CTRL, state); ++} ++ ++static int yeeloong_vo_set_state(struct output_device *od) ++{ ++ int vd; ++ ++ vd = get_vo_dev(od); ++ if (vd == -1) ++ return -ENODEV; ++ ++ if (vd == CRT && !vo_get_status(vd)) ++ return 0; ++ ++ vo_set_state(vd, !!od->request_state); ++ ++ return 0; ++} ++ ++static struct output_properties vop = { ++ .set_state = yeeloong_vo_set_state, ++ .get_status = yeeloong_vo_get_status, ++}; ++ ++static int yeeloong_vo_init(void) ++{ ++ int ret, i; ++ char dev_name[VOD_NUM][4] = {"LCD", "CRT"}; ++ ++ /* Register video output device: lcd, crt */ ++ for (i = 0; i < VOD_NUM; i++) { ++ vod[i] = video_output_register(dev_name[i], NULL, NULL, &vop); ++ if (IS_ERR(vod[i])) { ++ if (i != 0) ++ video_output_unregister(vod[i-1]); ++ ret = PTR_ERR(vod[i]); ++ vod[i] = NULL; ++ return ret; ++ } ++ } ++ /* Ensure LCD is on by default */ ++ vo_set_state(LCD, ON); ++ ++ /* ++ * Turn off CRT by default, and will be enabled when the CRT ++ * connectting event reported by SCI ++ */ ++ vo_set_state(CRT, OFF); ++ ++ return 0; ++} ++ ++static void yeeloong_vo_exit(void) ++{ ++ int i; ++ ++ for (i = 0; i < VOD_NUM; i++) { ++ if (vod[i]) { ++ video_output_unregister(vod[i]); ++ vod[i] = NULL; ++ } ++ } ++} ++ ++/* lcd subdriver */ ++ ++struct lcd_device *lcd[VOD_NUM]; ++ ++static int get_lcd_dev(struct lcd_device *ld) ++{ ++ int i, dev; ++ ++ dev = -1; ++ for (i = 0; i < VOD_NUM; i++) ++ if (ld == lcd[i]) ++ dev = i; ++ ++ return dev; ++} ++ ++static int yeeloong_lcd_set_power(struct lcd_device *ld, int power) ++{ ++ int dev = get_lcd_dev(ld); ++ ++ if (power == FB_BLANK_UNBLANK) ++ vo_set_state(dev, ON); ++ if (power == FB_BLANK_POWERDOWN) ++ vo_set_state(dev, OFF); ++ ++ return 0; ++} ++ ++static int yeeloong_lcd_get_power(struct lcd_device *ld) ++{ ++ return vo_get_status(get_lcd_dev(ld)); ++} ++ ++static struct lcd_ops lcd_ops = { ++ .set_power = yeeloong_lcd_set_power, ++ .get_power = yeeloong_lcd_get_power, ++}; ++ ++static int yeeloong_lcd_init(void) ++{ ++ int ret, i; ++ char dev_name[VOD_NUM][4] = {"LCD", "CRT"}; ++ ++ /* Register video output device: lcd, crt */ ++ for (i = 0; i < VOD_NUM; i++) { ++ lcd[i] = lcd_device_register(dev_name[i], NULL, NULL, &lcd_ops); ++ if (IS_ERR(lcd[i])) { ++ if (i != 0) ++ lcd_device_unregister(lcd[i-1]); ++ ret = PTR_ERR(lcd[i]); ++ lcd[i] = NULL; ++ return ret; ++ } ++ } ++#if 0 ++ /* This has been done by the vide output driver */ ++ ++ /* Ensure LCD is on by default */ ++ vo_set_state(LCD, ON); ++ ++ /* ++ * Turn off CRT by default, and will be enabled when the CRT ++ * connectting event reported by SCI ++ */ ++ vo_set_state(CRT, OFF); ++#endif ++ return 0; ++} ++ ++static void yeeloong_lcd_exit(void) ++{ ++ int i; ++ ++ for (i = 0; i < VOD_NUM; i++) { ++ if (lcd[i]) { ++ lcd_device_unregister(lcd[i]); ++ lcd[i] = NULL; ++ } ++ } ++} ++ ++/* hotkey subdriver */ ++ ++static struct input_dev *yeeloong_hotkey_dev; ++ ++static atomic_t reboot_flag, sleep_flag; ++#define in_sleep() (&sleep_flag) ++#define in_reboot() (&reboot_flag) ++ ++static const struct key_entry yeeloong_keymap[] = { ++ {KE_SW, EVENT_LID, { SW_LID } }, ++ {KE_KEY, EVENT_CAMERA, { KEY_CAMERA } }, /* Fn + ESC */ ++ {KE_KEY, EVENT_SLEEP, { KEY_SLEEP } }, /* Fn + F1 */ ++ {KE_KEY, EVENT_DISPLAYTOGGLE, { KEY_DISPLAYTOGGLE } }, /* Fn + F2 */ ++ {KE_KEY, EVENT_SWITCHVIDEOMODE, { KEY_SWITCHVIDEOMODE } }, /* Fn + F3 */ ++ {KE_KEY, EVENT_AUDIO_MUTE, { KEY_MUTE } }, /* Fn + F4 */ ++ {KE_KEY, EVENT_WLAN, { KEY_WLAN } }, /* Fn + F5 */ ++ {KE_KEY, EVENT_DISPLAY_BRIGHTNESS, { KEY_BRIGHTNESSUP } }, /* Fn + up */ ++ {KE_KEY, EVENT_DISPLAY_BRIGHTNESS, { KEY_BRIGHTNESSDOWN } }, /* Fn + down */ ++ {KE_KEY, EVENT_AUDIO_VOLUME, { KEY_VOLUMEUP } }, /* Fn + right */ ++ {KE_KEY, EVENT_AUDIO_VOLUME, { KEY_VOLUMEDOWN } }, /* Fn + left */ ++ {KE_END, 0} ++}; ++ ++static int is_fake_event(u16 keycode) ++{ ++ switch (keycode) { ++ case KEY_SLEEP: ++ case SW_LID: ++ return atomic_read(in_sleep()) | atomic_read(in_reboot()); ++ break; ++ default: ++ break; ++ } ++ return 0; ++} ++ ++static struct key_entry *get_event_key_entry(int event, int status) ++{ ++ struct key_entry *ke; ++ static int old_brightness_status = -1; ++ static int old_volume_status = -1; ++ ++ ke = sparse_keymap_entry_from_scancode(yeeloong_hotkey_dev, event); ++ if (!ke) ++ return NULL; ++ ++ switch (event) { ++ case EVENT_DISPLAY_BRIGHTNESS: ++ /* current status > old one, means up */ ++ if ((status < old_brightness_status) || (0 == status)) ++ ke++; ++ old_brightness_status = status; ++ break; ++ case EVENT_AUDIO_VOLUME: ++ if ((status < old_volume_status) || (0 == status)) ++ ke++; ++ old_volume_status = status; ++ break; ++ default: ++ break; ++ } ++ ++ return ke; ++} ++ ++static int report_lid_switch(int status) ++{ ++ static int old_status; ++ ++ /* ++ * LID is a switch button, so, two continuous same status should be ++ * ignored ++ */ ++ if (old_status != status) { ++ input_report_switch(yeeloong_hotkey_dev, SW_LID, !status); ++ input_sync(yeeloong_hotkey_dev); ++ } ++ old_status = status; ++ ++ return status; ++} ++ ++static int crt_detect_handler(int status) ++{ ++ /* ++ * When CRT is inserted, enable its output and disable the LCD output, ++ * otherwise, do reversely. ++ */ ++ vo_set_state(CRT, status); ++ vo_set_state(LCD, !status); ++ ++ return status; ++} ++ ++static int displaytoggle_handler(int status) ++{ ++ /* EC(>=PQ1D26) does this job for us, we can not do it again, ++ * otherwise, the brightness will not resume to the normal level! */ ++ if (ec_version_before("EC_VER=PQ1D26")) ++ vo_set_state(LCD, status); ++ ++ return status; ++} ++ ++static int mypow(int x, int y) ++{ ++ int i, j = x; ++ ++ for (i = 1; i < y; i++) ++ j *= j; ++ ++ return j; ++} ++ ++static int switchvideomode_handler(int status) ++{ ++ /* Default status: CRT|LCD = 0|1 = 1 */ ++ static int bin_state = 1; ++ int i; ++ ++ /* ++ * Only enable switch video output button ++ * when CRT is connected ++ */ ++ if (!vo_get_status(CRT)) ++ return 0; ++ /* ++ * 2. no CRT connected: LCD on, CRT off ++ * 3. BOTH on ++ * 0. BOTH off ++ * 1. LCD off, CRT on ++ */ ++ ++ bin_state++; ++ if (bin_state > mypow(2, VOD_NUM) - 1) ++ bin_state = 0; ++ ++ for (i = 0; i < VOD_NUM; i++) ++ vo_set_state(i, bin_state & (1 << i)); ++ ++ return bin_state; ++} ++ ++static int camera_handler(int status) ++{ ++ int value; ++ ++ value = ec_read(REG_CAMERA_CONTROL); ++ ec_write(REG_CAMERA_CONTROL, value | (1 << 1)); ++ ++ return status; ++} ++ ++static int usb2_handler(int status) ++{ ++ pr_emerg("USB2 Over Current occurred\n"); ++ ++ return status; ++} ++ ++static int usb0_handler(int status) ++{ ++ pr_emerg("USB0 Over Current occurred\n"); ++ ++ return status; ++} ++ ++static int ac_bat_handler(int status) ++{ ++ if (ac_bat_initialized) { ++ power_supply_changed(&yeeloong_ac); ++ power_supply_changed(&yeeloong_bat); ++ } ++ ++ return status; ++} ++ ++struct sci_event { ++ int reg; ++ sci_handler handler; ++}; ++ ++static const struct sci_event se[] = { ++ [EVENT_AC_BAT] = {0, ac_bat_handler}, ++ [EVENT_AUDIO_MUTE] = {REG_AUDIO_MUTE, NULL}, ++ [EVENT_AUDIO_VOLUME] = {REG_AUDIO_VOLUME, NULL}, ++ [EVENT_CRT_DETECT] = {REG_CRT_DETECT, crt_detect_handler}, ++ [EVENT_CAMERA] = {REG_CAMERA_STATUS, camera_handler}, ++ [EVENT_DISPLAYTOGGLE] = {REG_DISPLAY_LCD, displaytoggle_handler}, ++ [EVENT_DISPLAY_BRIGHTNESS] = {REG_DISPLAY_BRIGHTNESS, NULL}, ++ [EVENT_LID] = {REG_LID_DETECT, NULL}, ++ [EVENT_SWITCHVIDEOMODE] = {0, switchvideomode_handler}, ++ [EVENT_USB_OC0] = {REG_USB2_FLAG, usb0_handler}, ++ [EVENT_USB_OC2] = {REG_USB2_FLAG, usb2_handler}, ++ [EVENT_WLAN] = {REG_WLAN, NULL}, ++}; ++ ++static void do_event_action(int event) ++{ ++ int status = -1; ++ struct key_entry *ke; ++ struct sci_event *sep; ++ ++ sep = (struct sci_event *)&se[event]; ++ ++ if (sep->reg != 0) ++ status = ec_read(sep->reg); ++ ++ if (status == -1) { ++ /* ec_read hasn't been called, status is invalid */ ++ return; ++ } ++ ++ if (sep->handler != NULL) ++ status = sep->handler(status); ++ ++ pr_debug("%s: event: %d status: %d\n", __func__, event, status); ++ ++ /* Report current key to user-space */ ++ ke = get_event_key_entry(event, status); ++ ++ /* ++ * Ignore the LID and SLEEP event when we are already in sleep or ++ * reboot state, this will avoid the recursive pm operations. but note: ++ * the report_lid_switch() called in arch/mips/loongson/lemote-2f/pm.c ++ * is necessary, because it is used to wake the system from sleep ++ * state. In the future, perhaps SW_LID should works like SLEEP, no ++ * need to function as a SWITCH, just report the state when the LID is ++ * closed is enough, this event can tell the software to "SLEEP", no ++ * need to tell the softwares when we are resuming from "SLEEP". ++ */ ++ if (ke && !is_fake_event(ke->keycode)) { ++ if (ke->keycode == SW_LID) ++ report_lid_switch(status); ++ else ++ sparse_keymap_report_entry(yeeloong_hotkey_dev, ke, 1, ++ true); ++ } ++} ++ ++/* ++ * SCI(system control interrupt) main interrupt routine ++ * ++ * We will do the query and get event number together so the interrupt routine ++ * should be longer than 120us now at least 3ms elpase for it. ++ */ ++static irqreturn_t sci_irq_handler(int irq, void *dev_id) ++{ ++ int ret, event; ++ ++ if (SCI_IRQ_NUM != irq) ++ return IRQ_NONE; ++ ++ /* Query the event number */ ++ ret = ec_query_event_num(); ++ if (ret < 0) ++ return IRQ_NONE; ++ ++ event = ec_get_event_num(); ++ if (event < EVENT_START || event > EVENT_END) ++ return IRQ_NONE; ++ ++ /* Execute corresponding actions */ ++ do_event_action(event); ++ ++ return IRQ_HANDLED; ++} ++ ++/* ++ * Config and init some msr and gpio register properly. ++ */ ++static int sci_irq_init(void) ++{ ++ u32 hi, lo; ++ u32 gpio_base; ++ unsigned long flags; ++ int ret; ++ ++ /* Get gpio base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &lo); ++ gpio_base = lo & 0xff00; ++ ++ /* Filter the former kb3310 interrupt for security */ ++ ret = ec_query_event_num(); ++ if (ret) ++ return ret; ++ ++ /* For filtering next number interrupt */ ++ udelay(10000); ++ ++ /* Set gpio native registers and msrs for GPIO27 SCI EVENT PIN ++ * gpio : ++ * input, pull-up, no-invert, event-count and value 0, ++ * no-filter, no edge mode ++ * gpio27 map to Virtual gpio0 ++ * msr : ++ * no primary and lpc ++ * Unrestricted Z input to IG10 from Virtual gpio 0. ++ */ ++ local_irq_save(flags); ++ _rdmsr(0x80000024, &hi, &lo); ++ lo &= ~(1 << 10); ++ _wrmsr(0x80000024, hi, lo); ++ _rdmsr(0x80000025, &hi, &lo); ++ lo &= ~(1 << 10); ++ _wrmsr(0x80000025, hi, lo); ++ _rdmsr(0x80000023, &hi, &lo); ++ lo |= (0x0a << 0); ++ _wrmsr(0x80000023, hi, lo); ++ local_irq_restore(flags); ++ ++ /* Set gpio27 as sci interrupt ++ * ++ * input, pull-up, no-fliter, no-negedge, invert ++ * the sci event is just about 120us ++ */ ++ asm(".set noreorder\n"); ++ /* input enable */ ++ outl(0x00000800, (gpio_base | 0xA0)); ++ /* revert the input */ ++ outl(0x00000800, (gpio_base | 0xA4)); ++ /* event-int enable */ ++ outl(0x00000800, (gpio_base | 0xB8)); ++ asm(".set reorder\n"); ++ ++ return 0; ++} ++ ++static int notify_reboot(struct notifier_block *nb, unsigned long event, void *buf) ++{ ++ switch (event) { ++ case SYS_RESTART: ++ case SYS_HALT: ++ case SYS_POWER_OFF: ++ atomic_set(in_reboot(), 1); ++ break; ++ default: ++ return NOTIFY_DONE; ++ } ++ ++ return NOTIFY_OK; ++} ++ ++static int notify_pm(struct notifier_block *nb, unsigned long event, void *buf) ++{ ++ switch (event) { ++ case PM_HIBERNATION_PREPARE: ++ case PM_SUSPEND_PREPARE: ++ atomic_inc(in_sleep()); ++ break; ++ case PM_POST_HIBERNATION: ++ case PM_POST_SUSPEND: ++ case PM_RESTORE_PREPARE: /* do we need this ?? */ ++ atomic_dec(in_sleep()); ++ break; ++ default: ++ return NOTIFY_DONE; ++ } ++ ++ pr_debug("%s: event = %lu, in_sleep() = %d\n", __func__, event, ++ atomic_read(in_sleep())); ++ ++ return NOTIFY_OK; ++} ++ ++static struct notifier_block reboot_notifier = { ++ .notifier_call = notify_reboot, ++}; ++ ++static struct notifier_block pm_notifier = { ++ .notifier_call = notify_pm, ++}; ++ ++static int yeeloong_hotkey_init(void) ++{ ++ int ret = 0; ++ ++ ret = register_reboot_notifier(&reboot_notifier); ++ if (ret) { ++ pr_err("Can't register reboot notifier\n"); ++ goto end; ++ } ++ ++ ret = register_pm_notifier(&pm_notifier); ++ if (ret) { ++ pr_err("Can't register pm notifier\n"); ++ goto free_reboot_notifier; ++ } ++ ++ ret = sci_irq_init(); ++ if (ret) { ++ pr_err("Can't init SCI interrupt\n"); ++ goto free_pm_notifier; ++ } ++ ++ ret = request_threaded_irq(SCI_IRQ_NUM, NULL, &sci_irq_handler, ++ IRQF_ONESHOT, "sci", NULL); ++ if (ret) { ++ pr_err("Can't thread SCI interrupt handler\n"); ++ goto free_pm_notifier; ++ } ++ ++ yeeloong_hotkey_dev = input_allocate_device(); ++ ++ if (!yeeloong_hotkey_dev) { ++ ret = -ENOMEM; ++ goto free_irq; ++ } ++ ++ yeeloong_hotkey_dev->name = "HotKeys"; ++ yeeloong_hotkey_dev->phys = "button/input0"; ++ yeeloong_hotkey_dev->id.bustype = BUS_HOST; ++ yeeloong_hotkey_dev->dev.parent = NULL; ++ ++ ret = sparse_keymap_setup(yeeloong_hotkey_dev, yeeloong_keymap, NULL); ++ if (ret) { ++ pr_err("Failed to setup input device keymap\n"); ++ goto free_dev; ++ } ++ ++ ret = input_register_device(yeeloong_hotkey_dev); ++ if (ret) ++ goto free_keymap; ++ ++ /* Update the current status of LID */ ++ report_lid_switch(ON); ++ ++#ifdef CONFIG_LOONGSON_SUSPEND ++ /* Install the real yeeloong_report_lid_status for pm.c */ ++ yeeloong_report_lid_status = report_lid_switch; ++#endif ++ return 0; ++ ++free_keymap: ++ sparse_keymap_free(yeeloong_hotkey_dev); ++free_dev: ++ input_free_device(yeeloong_hotkey_dev); ++free_irq: ++ free_irq(SCI_IRQ_NUM, NULL); ++free_pm_notifier: ++ unregister_pm_notifier(&pm_notifier); ++free_reboot_notifier: ++ unregister_reboot_notifier(&reboot_notifier); ++end: ++ return ret; ++} ++ ++static void yeeloong_hotkey_exit(void) ++{ ++ /* Free irq */ ++ free_irq(SCI_IRQ_NUM, NULL); ++ ++#ifdef CONFIG_LOONGSON_SUSPEND ++ /* Uninstall yeeloong_report_lid_status for pm.c */ ++ if (yeeloong_report_lid_status == report_lid_switch) ++ yeeloong_report_lid_status = NULL; ++#endif ++ ++ if (yeeloong_hotkey_dev) { ++ sparse_keymap_free(yeeloong_hotkey_dev); ++ input_unregister_device(yeeloong_hotkey_dev); ++ yeeloong_hotkey_dev = NULL; ++ } ++} ++ ++#ifdef CONFIG_PM ++static void usb_ports_set(int status) ++{ ++ status = !!status; ++ ++ ec_write(REG_USB0_FLAG, status); ++ ec_write(REG_USB1_FLAG, status); ++ ec_write(REG_USB2_FLAG, status); ++} ++ ++static int yeeloong_suspend(struct device *dev) ++ ++{ ++ if (ec_version_before("EC_VER=PQ1D27")) ++ vo_set_state(LCD, OFF); ++ vo_set_state(CRT, OFF); ++ usb_ports_set(OFF); ++ ++ return 0; ++} ++ ++static int yeeloong_resume(struct device *dev) ++{ ++ int ret; ++ ++ if (ec_version_before("EC_VER=PQ1D27")) ++ vo_set_state(LCD, ON); ++ vo_set_state(CRT, ON); ++ usb_ports_set(ON); ++ ++ ret = sci_irq_init(); ++ if (ret) ++ return -EFAULT; ++ ++ return 0; ++} ++ ++static const SIMPLE_DEV_PM_OPS(yeeloong_pm_ops, yeeloong_suspend, ++ yeeloong_resume); ++#endif ++ ++static struct platform_device_id platform_device_ids[] = { ++ { ++ .name = "yeeloong_laptop", ++ }, ++ {} ++}; ++ ++MODULE_DEVICE_TABLE(platform, platform_device_ids); ++ ++static struct platform_driver platform_driver = { ++ .driver = { ++ .name = "yeeloong_laptop", ++ .owner = THIS_MODULE, ++#ifdef CONFIG_PM ++ .pm = &yeeloong_pm_ops, ++#endif ++ }, ++ .id_table = platform_device_ids, ++}; ++ ++static int __init yeeloong_init(void) ++{ ++ int ret; ++ ++ pr_info("YeeLoong Laptop platform specific driver loaded.\n"); ++ ++ /* Register platform stuff */ ++ ret = platform_driver_register(&platform_driver); ++ if (ret) { ++ pr_err("Failed to register YeeLoong platform driver.\n"); ++ return ret; ++ } ++ ++#define yeeloong_init_drv(drv, alias) do { \ ++ pr_info("Registered YeeLoong " alias " driver.\n"); \ ++ ret = yeeloong_ ## drv ## _init(); \ ++ if (ret) { \ ++ pr_err("Failed to register YeeLoong " alias " driver.\n"); \ ++ yeeloong_ ## drv ## _exit(); \ ++ return ret; \ ++ } \ ++} while (0) ++ ++ yeeloong_init_drv(backlight, "backlight"); ++ yeeloong_init_drv(bat, "battery and AC"); ++ yeeloong_init_drv(hwmon, "hardware monitor"); ++ yeeloong_init_drv(vo, "video output"); ++ yeeloong_init_drv(lcd, "lcd output"); ++ yeeloong_init_drv(hotkey, "hotkey input"); ++ ++ return 0; ++} ++ ++static void __exit yeeloong_exit(void) ++{ ++ yeeloong_hotkey_exit(); ++ yeeloong_lcd_exit(); ++ yeeloong_vo_exit(); ++ yeeloong_hwmon_exit(); ++ yeeloong_bat_exit(); ++ yeeloong_backlight_exit(); ++ platform_driver_unregister(&platform_driver); ++ ++ pr_info("YeeLoong platform specific driver unloaded.\n"); ++} ++ ++module_init(yeeloong_init); ++module_exit(yeeloong_exit); ++ ++MODULE_AUTHOR("Wu Zhangjin ; Liu Junliang "); ++MODULE_DESCRIPTION("YeeLoong laptop driver"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig +index b983813..1d8b111 100644 +--- a/drivers/rtc/Kconfig ++++ b/drivers/rtc/Kconfig +@@ -598,6 +598,7 @@ comment "Platform RTC drivers" + config RTC_DRV_CMOS + tristate "PC-style 'CMOS'" + depends on X86 || ALPHA || ARM || M32R || ATARI || PPC || MIPS || SPARC64 ++ depends on !DEXXON_GDIUM + default y if X86 + help + Say "yes" here to get direct support for the real time clock +diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c +index 6ae046b..4c46047 100644 +--- a/drivers/rtc/rtc-cmos.c ++++ b/drivers/rtc/rtc-cmos.c +@@ -739,8 +739,8 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq) + /* FIXME: + * doesn't know 12-hour mode either. + */ +- if (is_valid_irq(rtc_irq) && !(rtc_control & RTC_24H)) { +- dev_warn(dev, "only 24-hr supported\n"); ++ if (is_valid_irq(rtc_irq) && !(rtc_control & RTC_24H)) { ++ dev_dbg(dev, "only 24-hr supported\n"); + retval = -ENXIO; + goto cleanup1; + } +diff --git a/drivers/staging/sm7xxfb/sm7xxfb.c b/drivers/staging/sm7xxfb/sm7xxfb.c +index 8add64b..df8d3fb 100644 +--- a/drivers/staging/sm7xxfb/sm7xxfb.c ++++ b/drivers/staging/sm7xxfb/sm7xxfb.c +@@ -101,6 +101,7 @@ static struct vesa_mode vesa_mode_table[] = { + {"0x307", 1280, 1024, 8}, + + {"0x311", 640, 480, 16}, ++ {"0x313", 800, 480, 16}, + {"0x314", 800, 600, 16}, + {"0x317", 1024, 768, 16}, + {"0x31A", 1280, 1024, 16}, +diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c +index 865946c..8b7434fdb 100644 +--- a/drivers/usb/host/ohci-hcd.c ++++ b/drivers/usb/host/ohci-hcd.c +@@ -863,9 +863,13 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd) + } + + if (ints & OHCI_INTR_WDH) { +- spin_lock (&ohci->lock); +- dl_done_list (ohci); +- spin_unlock (&ohci->lock); ++ if (ohci->hcca->done_head == 0) { ++ ints &= ~OHCI_INTR_WDH; ++ } else { ++ spin_lock (&ohci->lock); ++ dl_done_list (ohci); ++ spin_unlock (&ohci->lock); ++ } + } + + if (quirk_zfmicro(ohci) && (ints & OHCI_INTR_SF)) { +diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c +index 9cfe3af..b93877d 100644 +--- a/drivers/usb/host/pci-quirks.c ++++ b/drivers/usb/host/pci-quirks.c +@@ -353,6 +353,7 @@ void usb_amd_dev_put(void) + } + EXPORT_SYMBOL_GPL(usb_amd_dev_put); + ++#if defined(CONFIG_USB_UHCI_HCD) || defined(CONFIG_USB_UHCI_HCD_MODULE) + /* + * Make sure the controller is completely inactive, unable to + * generate interrupts or do DMA. +@@ -460,12 +461,16 @@ static void quirk_usb_handoff_uhci(struct pci_dev *pdev) + if (base) + uhci_check_and_reset_hc(pdev, base); + } ++#else ++#define quirk_usb_handoff_uhci(x) do { } while (0) ++#endif /* CONFIG_USB_UHCI_HCD* */ + + static int mmio_resource_enabled(struct pci_dev *pdev, int idx) + { + return pci_resource_start(pdev, idx) && mmio_enabled(pdev); + } + ++#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) + static void quirk_usb_handoff_ohci(struct pci_dev *pdev) + { + void __iomem *base; +@@ -532,7 +537,11 @@ static void quirk_usb_handoff_ohci(struct pci_dev *pdev) + /* Now the controller is safely in SUSPEND and nothing can wake it up */ + iounmap(base); + } ++#else ++#define quirk_usb_handoff_ohci(x) do { } while(0) ++#endif /* CONFIG_USB_OHCI_HCD* */ + ++#if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE) + static const struct dmi_system_id ehci_dmi_nohandoff_table[] = { + { + /* Pegatron Lucid (ExoPC) */ +@@ -705,6 +714,9 @@ static void quirk_usb_disable_ehci(struct pci_dev *pdev) + + iounmap(base); + } ++#else ++#define quirk_usb_disable_ehci(x) do { } while (0) ++#endif /* CONFIG_USB_EHCI_HCD* */ + + /* + * handshake - spin reading a register until handshake completes +@@ -849,6 +861,7 @@ void usb_disable_xhci_ports(struct pci_dev *xhci_pdev) + } + EXPORT_SYMBOL_GPL(usb_disable_xhci_ports); + ++#if defined(CONFIG_USB_XHCI_HCD) || defined(CONFIG_USB_XHCI_HCD_MODULE) + /** + * PCI Quirks for xHCI. + * +@@ -956,6 +969,9 @@ hc_init: + + iounmap(base); + } ++#else ++#define quirk_usb_handoff_xhci(x) do { } while (0) ++#endif /* CONFIG_USB_UHCI_HCD* */ + + static void quirk_usb_early_handoff(struct pci_dev *pdev) + { +diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c +index 9da566a..fffecfb 100644 +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -79,6 +79,9 @@ static void option_instat_callback(struct urb *urb); + #define OPTION_PRODUCT_ETNA_KOI_MODEM 0x7100 + #define OPTION_PRODUCT_GTM380_MODEM 0x7201 + ++#define HUAWO_VENDOR_ID 0x21F5 ++#define HUAWO_PRODUCT_E1621 0x2008 ++ + #define HUAWEI_VENDOR_ID 0x12D1 + #define HUAWEI_PRODUCT_E173 0x140C + #define HUAWEI_PRODUCT_E1750 0x1406 +@@ -610,6 +613,7 @@ static const struct usb_device_id option_ids[] = { + { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) }, + { USB_DEVICE(QUANTA_VENDOR_ID, 0xea42), + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, ++ { USB_DEVICE(HUAWO_VENDOR_ID, HUAWO_PRODUCT_E1621) }, /* QUANTA 6500 chips, Unicom extensive use of this card */ + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c05, USB_CLASS_COMM, 0x02, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c1f, USB_CLASS_COMM, 0x02, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) }, +diff --git a/drivers/video/Makefile b/drivers/video/Makefile +index e8bae8d..ad1d873 100644 +--- a/drivers/video/Makefile ++++ b/drivers/video/Makefile +@@ -141,7 +141,7 @@ obj-$(CONFIG_FB_SH_MOBILE_HDMI) += sh_mobile_hdmi.o + obj-$(CONFIG_FB_SH_MOBILE_MERAM) += sh_mobile_meram.o + obj-$(CONFIG_FB_SH_MOBILE_LCDC) += sh_mobile_lcdcfb.o + obj-$(CONFIG_FB_OMAP) += omap/ +-obj-y += omap2/ ++obj-$(CONFIG_FB_OMAP2) += omap2/ + obj-$(CONFIG_XEN_FBDEV_FRONTEND) += xen-fbfront.o + obj-$(CONFIG_FB_CARMINE) += carminefb.o + obj-$(CONFIG_FB_MB862XX) += mb862xx/ +diff --git a/include/linux/sm501.h b/include/linux/sm501.h +index 02fde50..a8677f0 100644 +--- a/include/linux/sm501.h ++++ b/include/linux/sm501.h +@@ -27,6 +27,9 @@ extern unsigned long sm501_set_clock(struct device *dev, + extern unsigned long sm501_find_clock(struct device *dev, + int clksrc, unsigned long req_freq); + ++extern void sm501_configure_gpio(struct device *dev, ++ unsigned int gpio, unsigned char mode); ++ + /* sm501_misc_control + * + * Modify the SM501's MISC_CONTROL register +@@ -122,6 +125,7 @@ struct sm501_reg_init { + #define SM501_USE_AC97 (1<<7) + #define SM501_USE_I2S (1<<8) + #define SM501_USE_GPIO (1<<9) ++#define SM501_USE_PWM (1<<10) + + #define SM501_USE_ALL (0xffffffff) + +diff --git a/init/calibrate.c b/init/calibrate.c +index fda0a7b..7b5b4e5 100644 +--- a/init/calibrate.c ++++ b/init/calibrate.c +@@ -21,6 +21,7 @@ static int __init lpj_setup(char *str) + + __setup("lpj=", lpj_setup); + ++#ifndef ARCH_HAS_PREPARED_LPJ + #ifdef ARCH_HAS_READ_CURRENT_TIMER + + /* This routine uses the read_current_timer() routine and gets the +@@ -168,6 +169,7 @@ static unsigned long __cpuinit calibrate_delay_direct(void) + #else + static unsigned long __cpuinit calibrate_delay_direct(void) {return 0;} + #endif ++#endif /* ARCH_HAS_PREPARED_LPJ */ + + /* + * This is the number of bits of precision for the loops_per_jiffy. Each +@@ -279,6 +281,7 @@ void __cpuinit calibrate_delay(void) + lpj = lpj_fine; + pr_info("Calibrating delay loop (skipped), " + "value calculated using timer frequency.. "); ++#ifndef ARCH_HAS_PREPARED_LPJ + } else if ((lpj = calibrate_delay_is_known())) { + ; + } else if ((lpj = calibrate_delay_direct()) != 0) { +@@ -289,7 +292,9 @@ void __cpuinit calibrate_delay(void) + if (!printed) + pr_info("Calibrating delay loop... "); + lpj = calibrate_delay_converge(); ++#endif /* ARCH_HAS_PREPARED_LPJ */ + } ++ + per_cpu(cpu_loops_per_jiffy, this_cpu) = lpj; + if (!printed) + pr_cont("%lu.%02lu BogoMIPS (lpj=%lu)\n", +diff --git a/net/rfkill/core.c b/net/rfkill/core.c +index 1cec5e4..f6e5eae 100644 +--- a/net/rfkill/core.c ++++ b/net/rfkill/core.c +@@ -113,7 +113,7 @@ static LIST_HEAD(rfkill_list); /* list of registered rf switches */ + static DEFINE_MUTEX(rfkill_global_mutex); + static LIST_HEAD(rfkill_fds); /* list of open fds of /dev/rfkill */ + +-static unsigned int rfkill_default_state = 1; ++static unsigned int rfkill_default_state; /* default: 0 = radio off */ + module_param_named(default_state, rfkill_default_state, uint, 0444); + MODULE_PARM_DESC(default_state, + "Default initial state for all radio types, 0 = radio off"); +diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl +index 858966a..537470e 100755 +--- a/scripts/recordmcount.pl ++++ b/scripts/recordmcount.pl +@@ -307,14 +307,33 @@ if ($arch eq "x86_64") { + $cc .= " -m64"; + $objcopy .= " -O elf64-sparc"; + } elsif ($arch eq "mips") { +- # To enable module support, we need to enable the -mlong-calls option +- # of gcc for module, after using this option, we can not get the real +- # offset of the calling to _mcount, but the offset of the lui +- # instruction or the addiu one. herein, we record the address of the +- # first one, and then we can replace this instruction by a branch +- # instruction to jump over the profiling function to filter the +- # indicated functions, or swith back to the lui instruction to trace +- # them, which means dynamic tracing. ++ # ++ # To disable tracing, just replace "jal _mcount" with nop; ++ # to enable tracing, replace back. so, the offset 14 is ++ # needed to be recorded. ++ # ++ # 10: 03e0082d move at,ra ++ # 14: 0c000000 jal 0 ++ # 14: R_MIPS_26 _mcount ++ # 14: R_MIPS_NONE *ABS* ++ # 14: R_MIPS_NONE *ABS* ++ # 18: 00020021 nop ++ # ++ # ++ # ++ # If no long call(-mlong-calls), the same to kernel. ++ # ++ # If the module space differs from the kernel space, long ++ # call is needed, as a result, the address of _mcount is ++ # needed to be recorded in a register and then jump from ++ # module space to kernel space via "jalr ". To ++ # disable tracing, "jalr " can be replaced by ++ # nop; to enable tracing, replace it back. Since the ++ # offset of "jalr " is not easy to be matched, ++ # the offset of the 1st _mcount below is recorded and to ++ # disable tracing, "lui v1, 0x0" is substituted with "b ++ # label", which jumps over "jalr "; to enable ++ # tracing, replace it back. + # + # c: 3c030000 lui v1,0x0 + # c: R_MIPS_HI16 _mcount +@@ -326,19 +345,12 @@ if ($arch eq "x86_64") { + # 10: R_MIPS_NONE *ABS* + # 14: 03e0082d move at,ra + # 18: 0060f809 jalr v1 ++ # label: + # +- # for the kernel: +- # +- # 10: 03e0082d move at,ra +- # 14: 0c000000 jal 0 +- # 14: R_MIPS_26 _mcount +- # 14: R_MIPS_NONE *ABS* +- # 14: R_MIPS_NONE *ABS* +- # 18: 00020021 nop + if ($is_module eq "0") { + $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_26\\s+_mcount\$"; + } else { +- $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_HI16\\s+_mcount\$"; ++ $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_(HI16|26)\\s+_mcount\$"; + } + $objdump .= " -Melf-trad".$endian."mips "; + +diff --git a/scripts/sstrip.sh b/scripts/sstrip.sh +new file mode 100755 +index 0000000..49b973a +--- /dev/null ++++ b/scripts/sstrip.sh +@@ -0,0 +1,59 @@ ++#!/bin/bash ++# sstrip.sh -- strip the section table of an elf file ++# ++# Copyright (C) 2010 Wu Zhangjin, wuzhangjin@gmail.com ++# Licensed under the GPLv2 ++# ++# Since the section table is useless for the embedded device, it can be ++# stripped out. ++# ++# Note: Some bootloader may check the section table but most of the time, it ++# may be not really used, If it really need the section table, it may need the ++# decompressed kernel image. ++ ++# Usage ++ ++function usage ++{ ++cat </dev/null` ++[ "xELF" != "x${FILE_TYPE}" ] && echo "$0: ${IMAGE} is not an ELF file" && exit -1 ++ ++[ "x${V}" == "x1" ] && orig_filesz=`wc -c ${IMAGE} | cut -d' ' -f1` ++ ++# Get the offset of the section table, here get the end of the program section ++filesz=$((`${OBJDUMP} -p ${IMAGE} | grep -m1 filesz | tr -s ' ' | cut -d' ' -f3`)) ++ ++# Truncate it via the dd tool ++dd if=/dev/null bs=1 of=${IMAGE} seek=${filesz} 2>/dev/null ++ ++# Clear the section table information in the ELF header ++# The last 6 bytes of the ELF header are the section table information ++echo -ne "\x00\x00\x00\x00\x00\x00" | dd of=${IMAGE} bs=1 seek=46 count=6 conv=notrunc 2>/dev/null ++ ++# Debug ++if [ "x${V}" == "x1" ]; then ++ echo "----------------------------------------------------------------" ++ echo "Strip the section table at ${filesz} of ${IMAGE}" ++ echo "----------------------------------------------------------------" ++ echo " sstrip: $0" ++ echo " objdump: ${OBJDUMP}" ++ echo "original size: ${orig_filesz}" ++ echo "current size: ${filesz}" ++ echo "reduced size: $((${orig_filesz} - ${filesz}))" ++fi diff --git a/kernels/linux-libre-lts-knock/gnewsense-binutils-flag.patch b/kernels/linux-libre-lts-knock/gnewsense-binutils-flag.patch new file mode 100644 index 000000000..5f2d44f99 --- /dev/null +++ b/kernels/linux-libre-lts-knock/gnewsense-binutils-flag.patch @@ -0,0 +1,28 @@ +Our binutils somehow ended up with a -mfix-gs2f-kernel, rather than +-mfix-ls2f-kernel. Cope with it. + +Index: arch/mips/loongson/Platform +=================================================================== +--- arch/mips/loongson/Platform.orig 2010-10-25 19:09:49.000000000 +0000 ++++ arch/mips/loongson/Platform 2010-10-25 19:10:44.000000000 +0000 +@@ -10,6 +10,12 @@ + $(call cc-option,-march=loongson2f,-march=r4600) + # Enable the workarounds for Loongson2f + ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS ++ ifneq ($(call as-option,-Wa$(comma)-mfix-gs2f-kernel,),) ++ cflags-$(CONFIG_CPU_NOP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel ++ ifneq ($(CONFIG_CPU_NOP_WORKAROUNDS),$(CONFIG_CPU_JUMP_WORKAROUNDS)) ++ cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel ++ endif ++ else + ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-nop,),) + $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-nop) + else +@@ -20,6 +26,7 @@ + else + cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-jump + endif ++ endif + endif + + # diff --git a/kernels/linux-libre-rt/3.14.14-a410a5e2b7-loongson-community.patch b/kernels/linux-libre-rt/3.14.14-a410a5e2b7-loongson-community.patch new file mode 100644 index 000000000..c7a63c2e5 --- /dev/null +++ b/kernels/linux-libre-rt/3.14.14-a410a5e2b7-loongson-community.patch @@ -0,0 +1,10869 @@ +diff --git a/Makefile b/Makefile +index 230c7f6..69dfbc4 100644 +--- a/Makefile ++++ b/Makefile +@@ -244,8 +244,8 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ + + HOSTCC = gcc + HOSTCXX = g++ +-HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer +-HOSTCXXFLAGS = -O2 ++HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O3 -fomit-frame-pointer ++HOSTCXXFLAGS = -O3 + + # Decide whether to build built-in, modular, or both. + # Normally, just do built-in. +@@ -582,7 +582,7 @@ all: vmlinux + ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE + KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,) + else +-KBUILD_CFLAGS += -O2 ++KBUILD_CFLAGS += -O3 + endif + + include $(srctree)/arch/$(SRCARCH)/Makefile +diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig +index 95fa1f1..82dc7e8 100644 +--- a/arch/mips/Kconfig ++++ b/arch/mips/Kconfig +@@ -278,7 +278,7 @@ config LASAT + + config MACH_LOONGSON + bool "Loongson family of machines" +- select SYS_SUPPORTS_ZBOOT ++ select SYS_SUPPORTS_ZBOOT_UART16550 + help + This enables the support of Loongson family of machines. + +@@ -885,6 +885,60 @@ config CSRC_IOASIC + config CSRC_R4K + bool + ++config MIPS_USER_RDTSC ++ bool "Emulate rdtsc instruction for MIPS" ++ depends on CSRC_R4K && MIPS32_O32 ++ default n ++ help ++ This optoin enables the Emulated rdtsc support for MIPS, which allows ++ the user-space applications read the R4k count directly. Currently, ++ this only support the CONFIG_MIPS32_O32 and R4K, but future, we may ++ add support for scall64-{n32,64}.S and scall32-32.S and for the count ++ registers provided by the other MIPS variants. ++ ++ This emulation based on the syscall instruction, by default, the ++ syscall is encoded as 0x0000000c, except the 0xc, the other parts can ++ be encoded as specific meaning. when a syscall instruction is issued, ++ through checking the encoding of the instruction, when the encoding ++ is the generic 0x000000c, we do the generic syscall work, if ++ something other is encoded in, we can do relevant things, except for ++ the light-weight things, such as read a register. herein, we read the ++ count register whenever there is something encoded in the syscall ++ instruction. In the future, we may be possible to abstract more ++ light-weight & frequently-used operations and add a ++ sys_call_table-like table to store the entries of some light-weight ++ operations and encode 1,2,3... into the syscall instruction and jump ++ to respective entry for diffrent numbers, as a result, we get ++ fast-syscall and which may speed up the user-space applications and ++ even be possibly improve the determinism. ++ ++ *Example* ++ ++ #include ++ #include ++ ++ /* ++ * Currently, our return value is only 32bit, In the long run, ++ * this should be uint64_t, just like clock_gettime(), but it ++ * should has high precision/low overhead than clock_gettime() ++ */ ++ uint32_t rdtsc(void) ++ { ++ /* ++ * Linux will store the value of the count register into ++ * the v0 register, which is just the return value of this ++ * function, so, please ignore the compiling warning. ++ */ ++ __asm__ __volatile__ ( ++ "syscall 1\n" ++ :::"$2"); ++ } ++ ++ int main(int argc, char *argv[]) ++ { ++ return printf("cycles: %u\n", rdtsc()); ++ } ++ + config CSRC_GIC + bool + +@@ -1492,6 +1546,15 @@ config CPU_LOONGSON2 + bool + select CPU_SUPPORTS_32BIT_KERNEL + select CPU_SUPPORTS_64BIT_KERNEL ++ select CPU_SUPPORTS_HIGHMEM if ! EMBEDDED ++ select ARCH_WANT_OPTIONAL_GPIOLIB ++ ++config CPU_LOONGSON1 ++ bool ++ select CPU_MIPS32 ++ select CPU_MIPSR2 ++ select CPU_HAS_PREFETCH ++ select CPU_SUPPORTS_32BIT_KERNEL + select CPU_SUPPORTS_HIGHMEM + select CPU_SUPPORTS_HUGEPAGES + +@@ -2110,7 +2173,7 @@ config SYS_SUPPORTS_MICROMIPS + + config ARCH_FLATMEM_ENABLE + def_bool y +- depends on !NUMA && !CPU_LOONGSON2 ++ depends on !NUMA && !(CPU_LOONGSON2 && HIBERNATION) + + config ARCH_DISCONTIGMEM_ENABLE + bool +diff --git a/arch/mips/Kconfig.debug b/arch/mips/Kconfig.debug +index b147e70..f32dfb0 100644 +--- a/arch/mips/Kconfig.debug ++++ b/arch/mips/Kconfig.debug +@@ -7,9 +7,9 @@ config TRACE_IRQFLAGS_SUPPORT + source "lib/Kconfig.debug" + + config EARLY_PRINTK +- bool "Early printk" if EXPERT ++ bool "Early printk" + depends on SYS_HAS_EARLY_PRINTK +- default y ++ default n + help + This option enables special console drivers which allow the kernel + to print messages very early in the bootup process. +diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile +index 61af6b6..8598044 100644 +--- a/arch/mips/boot/compressed/Makefile ++++ b/arch/mips/boot/compressed/Makefile +@@ -30,9 +30,10 @@ KBUILD_AFLAGS := $(LINUXINCLUDE) $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ + targets := head.o decompress.o string.o dbg.o uart-16550.o uart-alchemy.o + + # decompressor objects (linked with vmlinuz) +-vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o $(obj)/dbg.o ++vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o + + ifdef CONFIG_DEBUG_ZBOOT ++vmlinuzobjs-y += $(obj)/dbg.o + vmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o + vmlinuzobjs-$(CONFIG_MIPS_ALCHEMY) += $(obj)/uart-alchemy.o + endif +@@ -79,9 +80,18 @@ quiet_cmd_zld = LD $@ + cmd_zld = $(LD) $(LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T $< $(vmlinuzobjs-y) -o $@ + quiet_cmd_strip = STRIP $@ + cmd_strip = $(STRIP) -s $@ ++ifdef CONFIG_EMBEDDED ++quiet_cmd_sstrip = SSTRIP $@ ++ cmd_sstrip = $(srctree)/scripts/sstrip.sh $@ ++endif + vmlinuz: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr + $(call cmd,zld) + $(call cmd,strip) ++ $(call cmd,sstrip) ++ ++vmlinuz.unsstrip: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr ++ $(call cmd,zld) ++ $(call cmd,strip) + + # + # Some DECstations need all possible sections of an ECOFF executable +@@ -94,14 +104,14 @@ endif + hostprogs-y += ../elf2ecoff + + ifdef CONFIG_32BIT +- VMLINUZ = vmlinuz ++ VMLINUZ = vmlinuz.unsstrip + else + VMLINUZ = vmlinuz.32 + endif + + quiet_cmd_32 = OBJCOPY $@ + cmd_32 = $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@ +-vmlinuz.32: vmlinuz ++vmlinuz.32: vmlinuz.unsstrip + $(call cmd,32) + + quiet_cmd_ecoff = ECOFF $@ +@@ -110,11 +120,11 @@ vmlinuz.ecoff: $(obj)/../elf2ecoff $(VMLINUZ) + $(call cmd,ecoff) + + OBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary +-vmlinuz.bin: vmlinuz ++vmlinuz.bin: vmlinuz.unsstrip + $(call cmd,objcopy) + + OBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec +-vmlinuz.srec: vmlinuz ++vmlinuz.srec: vmlinuz.unsstrip + $(call cmd,objcopy) + +-clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec} ++clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec,unsstrip} +diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c +index c00c4dd..f4a656d 100644 +--- a/arch/mips/boot/compressed/decompress.c ++++ b/arch/mips/boot/compressed/decompress.c +@@ -27,8 +27,13 @@ unsigned long free_mem_end_ptr; + extern unsigned char __image_begin, __image_end; + + /* debug interfaces */ ++#ifdef CONFIG_DEBUG_ZBOOT + extern void puts(const char *s); + extern void puthex(unsigned long long val); ++#else ++#define puts(s) ++#define puthex(val) ++#endif + + void error(char *x) + { +diff --git a/arch/mips/boot/compressed/ld.script b/arch/mips/boot/compressed/ld.script +index 5a33409..de04ac9 100644 +--- a/arch/mips/boot/compressed/ld.script ++++ b/arch/mips/boot/compressed/ld.script +@@ -49,5 +49,6 @@ SECTIONS + *(.reginfo) + *(.comment) + *(.note) ++ *(.gnu.attributes) + } + } +diff --git a/arch/mips/include/asm/dma-mapping.h b/arch/mips/include/asm/dma-mapping.h +index 84238c5..28e0b03 100644 +--- a/arch/mips/include/asm/dma-mapping.h ++++ b/arch/mips/include/asm/dma-mapping.h +@@ -6,9 +6,7 @@ + #include + #include + +-#ifndef CONFIG_SGI_IP27 /* Kludge to fix 2.6.39 build for IP27 */ + #include +-#endif + + extern struct dma_map_ops *mips_dma_map_ops; + +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h +index a0ee0cb..c6df1c4 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h +@@ -299,7 +299,42 @@ extern void _wrmsr(u32 msr, u32 hi, u32 lo); + + /****************** NATIVE ***************************/ + /* GPIO : I/O SPACE; REG : 32BITS */ +-#define GPIOL_OUT_VAL 0x00 +-#define GPIOL_OUT_EN 0x04 ++#define GPIOL_OUT_VAL 0x00 ++#define GPIOL_OUT_EN 0x04 ++#define GPIOL_OUT_AUX1_SEL 0x10 ++/* SMB : I/O SPACE, REG : 8BITS WIDTH */ ++#define SMB_SDA 0x00 ++#define SMB_STS 0x01 ++#define SMB_STS_SLVSTP (1 << 7) ++#define SMB_STS_SDAST (1 << 6) ++#define SMB_STS_BER (1 << 5) ++#define SMB_STS_NEGACK (1 << 4) ++#define SMB_STS_STASTR (1 << 3) ++#define SMB_STS_NMATCH (1 << 2) ++#define SMB_STS_MASTER (1 << 1) ++#define SMB_STS_XMIT (1 << 0) ++#define SMB_CTRL_STS 0x02 ++#define SMB_CSTS_TGSTL (1 << 5) ++#define SMB_CSTS_TSDA (1 << 4) ++#define SMB_CSTS_GCMTCH (1 << 3) ++#define SMB_CSTS_MATCH (1 << 2) ++#define SMB_CSTS_BB (1 << 1) ++#define SMB_CSTS_BUSY (1 << 0) ++#define SMB_CTRL1 0x03 ++#define SMB_CTRL1_STASTRE (1 << 7) ++#define SMB_CTRL1_NMINTE (1 << 6) ++#define SMB_CTRL1_GCMEN (1 << 5) ++#define SMB_CTRL1_ACK (1 << 4) ++#define SMB_CTRL1_RSVD (1 << 3) ++#define SMB_CTRL1_INTEN (1 << 2) ++#define SMB_CTRL1_STOP (1 << 1) ++#define SMB_CTRL1_START (1 << 0) ++#define SMB_ADDR 0x04 ++#define SMB_ADDR_SAEN (1 << 7) ++#define SMB_CONTROLLER_ADDR (0xef << 0) ++#define SMB_CTRL2 0x05 ++#define SMB_FREQ (0x20 << 1) ++#define SMB_ENABLE (0x01 << 0) ++#define SMB_CTRL3 0x06 + + #endif /* _CS5536_H */ +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h +index 021d017..d058e46 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h +@@ -10,26 +10,45 @@ + + #ifdef CONFIG_CS5536_MFGPT + extern void setup_mfgpt0_timer(void); +-extern void disable_mfgpt0_counter(void); +-extern void enable_mfgpt0_counter(void); ++extern void disable_mfgpt_counter(void); ++extern void enable_mfgpt_counter(void); + #else + static inline void __maybe_unused setup_mfgpt0_timer(void) + { + } +-static inline void __maybe_unused disable_mfgpt0_counter(void) ++static inline void __maybe_unused disable_mfgpt_counter(void) + { + } +-static inline void __maybe_unused enable_mfgpt0_counter(void) ++static inline void __maybe_unused enable_mfgpt_counter(void) + { + } + #endif + +-#define MFGPT_TICK_RATE 14318000 +-#define COMPARE ((MFGPT_TICK_RATE + HZ/2) / HZ) ++#define MFGPT_CLK_RATE(c) ((14318000UL-32768)*c + 32768) ++#define MFGPT_TICK_RATE(c, scale) (MFGPT_CLK_RATE(c) / (1 << scale)) ++#define MFGPT_COMPARE(c, scale) ((MFGPT_TICK_RATE(c, scale)+HZ/2)/HZ) + +-#define MFGPT_BASE mfgpt_base +-#define MFGPT0_CMP2 (MFGPT_BASE + 2) +-#define MFGPT0_CNT (MFGPT_BASE + 4) +-#define MFGPT0_SETUP (MFGPT_BASE + 6) ++#define MFGPT_SETUP_ENABLE (1 << 15) ++#define MFGPT_SETUP_ACK (3 << 13) ++#define MFGPT_SETUP_SETUP (1 << 12) ++#define MFGPT_SETUP_CMP2EVT (3 << 8) ++#define MFGPT_SETUP_CMP1EVT (3 << 6) ++#define MFGPT_SETUP_CLOCK(c) (c << 4) ++#define MFGPT_SETUP_SCALE(scale) scale ++ ++#define MFGPT0_CMP1 mfgpt_base ++#define MFGPT0_CMP2 (mfgpt_base + 0x02) ++#define MFGPT0_CNT (mfgpt_base + 0x04) ++#define MFGPT0_SETUP (mfgpt_base + 0x06) ++ ++#define MFGPT1_CMP1 (mfgpt_base + 0x08) ++#define MFGPT1_CMP2 (mfgpt_base + 0x0A) ++#define MFGPT1_CNT (mfgpt_base + 0x0C) ++#define MFGPT1_SETUP (mfgpt_base + 0x0E) ++ ++#define MFGPT2_CMP1 (mfgpt_base + 0x10) ++#define MFGPT2_CMP2 (mfgpt_base + 0x12) ++#define MFGPT2_CNT (mfgpt_base + 0x14) ++#define MFGPT2_SETUP (mfgpt_base + 0x16) + + #endif /*!_CS5536_MFGPT_H */ +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h +index 8a7ecb4..ac01334 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h +@@ -13,6 +13,7 @@ + + #include + #include ++#include + + extern void cs5536_pci_conf_write4(int function, int reg, u32 value); + extern u32 cs5536_pci_conf_read4(int function, int reg); +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h +index 1f17c18..9bc368f0d 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h +@@ -17,15 +17,43 @@ typedef u32 (*cs5536_pci_vsm_read)(int reg); + extern void pci_##name##_write_reg(int reg, u32 value); \ + extern u32 pci_##name##_read_reg(int reg); + ++#define DEFINE_CS5536_MODULE(name) \ ++static void pci_##name##_write_reg(int reg, u32 value) {} \ ++static u32 pci_##name##_read_reg(int reg) { return 0; } ++ ++/* isa module */ ++#ifdef CONFIG_CS5536_ISA ++DECLARE_CS5536_MODULE(isa) ++#else ++DEFINE_CS5536_MODULE(isa) ++#endif ++ + /* ide module */ ++#ifdef CONFIG_CS5536_IDE + DECLARE_CS5536_MODULE(ide) ++#else ++DEFINE_CS5536_MODULE(ide) ++#endif ++ + /* acc module */ ++#ifdef CONFIG_CS5536_AUDIO + DECLARE_CS5536_MODULE(acc) ++#else ++DEFINE_CS5536_MODULE(acc) ++#endif ++ + /* ohci module */ ++#ifdef CONFIG_CS5536_OHCI + DECLARE_CS5536_MODULE(ohci) +-/* isa module */ +-DECLARE_CS5536_MODULE(isa) ++#else ++DEFINE_CS5536_MODULE(ohci) ++#endif ++ + /* ehci module */ ++#ifdef CONFIG_CS5536_EHCI + DECLARE_CS5536_MODULE(ehci) ++#else ++DEFINE_CS5536_MODULE(ehci) ++#endif + + #endif /* _CS5536_VSM_H */ +diff --git a/arch/mips/include/asm/mach-loongson/gpio.h b/arch/mips/include/asm/mach-loongson/gpio.h +index 211a7b7..f15db3c 100644 +--- a/arch/mips/include/asm/mach-loongson/gpio.h ++++ b/arch/mips/include/asm/mach-loongson/gpio.h +@@ -13,12 +13,16 @@ + #ifndef __STLS2F_GPIO_H + #define __STLS2F_GPIO_H + ++#ifdef CONFIG_GPIOLIB ++#define ARCH_NR_GPIOS 4 + #include + + extern void gpio_set_value(unsigned gpio, int value); + extern int gpio_get_value(unsigned gpio); + extern int gpio_cansleep(unsigned gpio); + ++#endif ++ + /* The chip can do interrupt + * but it has not been tested and doc not clear + */ +diff --git a/arch/mips/include/asm/mach-loongson/loongson.h b/arch/mips/include/asm/mach-loongson/loongson.h +index b286534..222d179 100644 +--- a/arch/mips/include/asm/mach-loongson/loongson.h ++++ b/arch/mips/include/asm/mach-loongson/loongson.h +@@ -32,17 +32,13 @@ extern void __init prom_init_memory(void); + extern void __init prom_init_cmdline(void); + extern void __init prom_init_machtype(void); + extern void __init prom_init_env(void); +-#ifdef CONFIG_LOONGSON_UART_BASE +-extern unsigned long _loongson_uart_base, loongson_uart_base; +-extern void prom_init_loongson_uart_base(void); +-#endif ++extern void __init prom_init_uart_base(void); + +-static inline void prom_init_uart_base(void) +-{ +-#ifdef CONFIG_LOONGSON_UART_BASE +- prom_init_loongson_uart_base(); +-#endif +-} ++/* ++ * Copy kernel command line from arcs_cmdline ++ */ ++#include ++extern char loongson_cmdline[COMMAND_LINE_SIZE]; + + /* irq operation functions */ + extern void bonito_irqdispatch(void); +@@ -249,6 +245,12 @@ extern struct cpufreq_frequency_table loongson2_clockmod_table[]; + + /* Chip Config */ + #define LOONGSON_CHIPCFG0 LOONGSON_REG(LOONGSON_REGBASE + 0x80) ++#define LOONGSON_GET_CPUFREQ() (LOONGSON_CHIPCFG0 & 7) ++ ++#define LOONGSON_SET_CPUFREQ(level) do { \ ++ LOONGSON_CHIPCFG0 = (LOONGSON_CHIPCFG0 & (~7)) | (level); \ ++} while (0) ++ + #endif + + /* +diff --git a/arch/mips/include/asm/mach-loongson/machine.h b/arch/mips/include/asm/mach-loongson/machine.h +index 3810d5c..d219499 100644 +--- a/arch/mips/include/asm/mach-loongson/machine.h ++++ b/arch/mips/include/asm/mach-loongson/machine.h +@@ -24,4 +24,10 @@ + + #endif + ++#ifdef CONFIG_DEXXON_GDIUM ++ ++#define LOONGSON_MACHTYPE MACH_DEXXON_GDIUM2F10 ++ ++#endif ++ + #endif /* __ASM_MACH_LOONGSON_MACHINE_H */ +diff --git a/arch/mips/include/asm/mach-loongson1/clock.h b/arch/mips/include/asm/mach-loongson1/clock.h +new file mode 100644 +index 0000000..dd1afdb +--- /dev/null ++++ b/arch/mips/include/asm/mach-loongson1/clock.h +@@ -0,0 +1,53 @@ ++#ifndef __ASM_MACH_LOONGSON1_CLOCK_H ++#define __ASM_MACH_LOONGSON1_CLOCK_H ++ ++#include ++#include ++#include ++#include ++ ++extern void (*cpu_wait) (void); ++ ++struct clk; ++ ++struct clk_ops { ++ void (*init) (struct clk *clk); ++ void (*enable) (struct clk *clk); ++ void (*disable) (struct clk *clk); ++ void (*recalc) (struct clk *clk); ++ int (*set_rate) (struct clk *clk, unsigned long rate, int algo_id); ++ long (*round_rate) (struct clk *clk, unsigned long rate); ++}; ++ ++struct clk { ++ struct list_head node; ++ const char *name; ++ int id; ++ struct module *owner; ++ ++ struct clk *parent; ++ struct clk_ops *ops; ++ ++ struct kref kref; ++ ++ unsigned long rate; ++ unsigned long flags; ++}; ++ ++#define CLK_ALWAYS_ENABLED (1 << 0) ++#define CLK_RATE_PROPAGATES (1 << 1) ++ ++/* Should be defined by processor-specific code */ ++void arch_init_clk_ops(struct clk_ops **, int type); ++ ++int clk_init(void); ++ ++int __clk_enable(struct clk *); ++void __clk_disable(struct clk *); ++ ++void clk_recalc_rate(struct clk *); ++ ++int clk_register(struct clk *); ++void clk_unregister(struct clk *); ++ ++#endif /* __ASM_MIPS_CLOCK_H */ +diff --git a/arch/mips/include/asm/mach-loongson1/regs-intc.h b/arch/mips/include/asm/mach-loongson1/regs-intc.h +new file mode 100644 +index 0000000..6d5db23 +--- /dev/null ++++ b/arch/mips/include/asm/mach-loongson1/regs-intc.h +@@ -0,0 +1,25 @@ ++/* ++ * Copyright (c) 2011 Zhang, Keguang ++ * ++ * Loongson1 Interrupt register definitions. ++ * ++ * 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. ++ */ ++ ++#ifndef __ASM_MACH_LOONGSON1_REGS_INTC_H ++#define __ASM_MACH_LOONGSON1_REGS_INTC_H ++ ++#define LS1X_INTC_REG(n, x) \ ++ (ioremap(LS1X_INTC_BASE + (n * 0x18) + (x), 4)) ++ ++#define LS1X_INTC_INTISR(n) LS1X_INTC_REG(n, 0x0) ++#define LS1X_INTC_INTIEN(n) LS1X_INTC_REG(n, 0x4) ++#define LS1X_INTC_INTSET(n) LS1X_INTC_REG(n, 0x8) ++#define LS1X_INTC_INTCLR(n) LS1X_INTC_REG(n, 0xc) ++#define LS1X_INTC_INTPOL(n) LS1X_INTC_REG(n, 0x10) ++#define LS1X_INTC_INTEDGE(n) LS1X_INTC_REG(n, 0x14) ++ ++#endif /* __ASM_MACH_LOONGSON1_REGS_INTC_H */ +diff --git a/arch/mips/include/asm/module.h b/arch/mips/include/asm/module.h +index 44b705d..c28a782 100644 +--- a/arch/mips/include/asm/module.h ++++ b/arch/mips/include/asm/module.h +@@ -126,6 +126,8 @@ search_module_dbetables(unsigned long addr) + #define MODULE_PROC_FAMILY "LOONGSON1 " + #elif defined CONFIG_CPU_LOONGSON2 + #define MODULE_PROC_FAMILY "LOONGSON2 " ++#elif defined CONFIG_CPU_LOONGSON1 ++#define MODULE_PROC_FAMILY "LOONGSON1 " + #elif defined CONFIG_CPU_CAVIUM_OCTEON + #define MODULE_PROC_FAMILY "OCTEON " + #elif defined CONFIG_CPU_XLR +diff --git a/arch/mips/include/asm/timex.h b/arch/mips/include/asm/timex.h +index c542475..74fef34 100644 +--- a/arch/mips/include/asm/timex.h ++++ b/arch/mips/include/asm/timex.h +@@ -10,6 +10,10 @@ + + #ifdef __KERNEL__ + ++#ifdef CONFIG_CSRC_R4K ++#define ARCH_HAS_PREPARED_LPJ ++#endif ++ + #include + #include + #include +diff --git a/arch/mips/include/uapi/asm/inst.h b/arch/mips/include/uapi/asm/inst.h +index f25181b..d243152 100644 +--- a/arch/mips/include/uapi/asm/inst.h ++++ b/arch/mips/include/uapi/asm/inst.h +@@ -62,6 +62,8 @@ enum spec_op { + enum spec2_op { + madd_op, maddu_op, mul_op, spec2_3_unused_op, + msub_op, msubu_op, /* more unused ops */ ++ loongson_madd_op = 0x18, loongson_msub_op, ++ loongson_nmadd_op, loongson_nmsub_op, + clz_op = 0x20, clo_op, + dclz_op = 0x24, dclo_op, + sdbpp_op = 0x3f +@@ -135,7 +137,7 @@ enum cop0_com_func { + */ + enum cop1_fmt { + s_fmt, d_fmt, e_fmt, q_fmt, +- w_fmt, l_fmt ++ w_fmt, l_fmt, ps_fmt + }; + + /* +@@ -164,7 +166,8 @@ enum cop1_sdw_func { + enum cop1x_func { + lwxc1_op = 0x00, ldxc1_op = 0x01, + swxc1_op = 0x08, sdxc1_op = 0x09, +- pfetch_op = 0x0f, madd_s_op = 0x20, ++ pfetch_op = 0x0f, ++ prefx_op = 0x17, madd_s_op = 0x20, + madd_d_op = 0x21, madd_e_op = 0x22, + msub_s_op = 0x28, msub_d_op = 0x29, + msub_e_op = 0x2a, nmadd_s_op = 0x30, +diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S +index 6788727..0f81805 100644 +--- a/arch/mips/kernel/scall64-o32.S ++++ b/arch/mips/kernel/scall64-o32.S +@@ -26,6 +26,18 @@ + + .align 5 + NESTED(handle_sys, PT_SIZE, sp) ++#ifdef CONFIG_MIPS_USER_RDTSC ++ MFC0 k0, CP0_EPC ++ lw k1, 0(k0) ++ sltiu k1, k1, 0x1c ++ bne k1, zero, 1f # Normal syscall code: 0x0c < 0x1c ++ nop ++ mfc0 v0, CP0_COUNT # Get TSC ++ PTR_ADDIU k0, 4 # ret from syscall ++ MTC0 k0, CP0_EPC ++ eret ++1: ++#endif /* CONFIG_MIPS_USER_RDTSC */ + .set noat + SAVE_SOME + TRACE_IRQS_ON_RELOAD +diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c +index dcb8e5d..45177bc 100644 +--- a/arch/mips/kernel/time.c ++++ b/arch/mips/kernel/time.c +@@ -120,6 +120,11 @@ static __init int cpu_has_mfc0_count_bug(void) + + void __init time_init(void) + { ++#ifdef CONFIG_HR_SCHED_CLOCK ++ if (!mips_clockevent_init() || !cpu_has_mfc0_count_bug()) ++ write_c0_count(0); ++#endif ++ + plat_time_init(); + + /* +diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile +index eeddc58..d7bec00 100644 +--- a/arch/mips/lib/Makefile ++++ b/arch/mips/lib/Makefile +@@ -2,10 +2,14 @@ + # Makefile for MIPS-specific library files.. + # + +-lib-y += bitops.o csum_partial.o delay.o memcpy.o memset.o \ ++lib-y += bitops.o csum_partial.o memcpy.o memset.o \ + mips-atomic.o strlen_user.o strncpy_user.o \ + strnlen_user.o uncached.o + ++ifndef CONFIG_CSRC_R4K ++lib-y += delay.o ++endif ++ + obj-y += iomap.o + obj-$(CONFIG_PCI) += iomap-pci.o + +diff --git a/arch/mips/loongson/Kconfig b/arch/mips/loongson/Kconfig +index 263beb9..d56d594 100644 +--- a/arch/mips/loongson/Kconfig ++++ b/arch/mips/loongson/Kconfig +@@ -32,12 +32,12 @@ config LEMOTE_FULOONG2E + + config LEMOTE_MACH2F + bool "Lemote Loongson 2F family machines" +- select ARCH_SPARSEMEM_ENABLE ++ select ARCH_SPARSEMEM_ENABLE if HIBERNATION + select BOARD_SCACHE + select BOOT_ELF32 + select CEVT_R4K if ! MIPS_EXTERNAL_TIMER + select CPU_HAS_WB +- select CS5536 ++ select CS5536 if PCI + select CSRC_R4K if ! MIPS_EXTERNAL_TIMER + select DMA_NONCOHERENT + select GENERIC_ISA_DMA_SUPPORT_BROKEN +@@ -45,23 +45,68 @@ config LEMOTE_MACH2F + select HW_HAS_PCI + select I8259 + select IRQ_CPU +- select ISA + select SYS_HAS_CPU_LOONGSON2F + select SYS_HAS_EARLY_PRINTK + select SYS_SUPPORTS_32BIT_KERNEL + select SYS_SUPPORTS_64BIT_KERNEL +- select SYS_SUPPORTS_HIGHMEM ++ select SYS_SUPPORTS_HIGHMEM if ! EMBEDDED + select SYS_SUPPORTS_LITTLE_ENDIAN +- select LOONGSON_MC146818 ++ select LOONGSON_MC146818 if RTC_DRV_CMOS + help + Lemote Loongson 2F family machines utilize the 2F revision of + Loongson processor and the AMD CS5536 south bridge. + + These family machines include fuloong2f mini PC, yeeloong2f notebook, + LingLoong allinone PC and so forth. ++ ++config DEXXON_GDIUM ++ bool "Dexxon Gdium Netbook" ++ select ARCH_SPARSEMEM_ENABLE ++ select BOARD_SCACHE ++ select BOOT_ELF32 ++ select CEVT_R4K if ! MIPS_EXTERNAL_TIMER ++ select CPU_HAS_WB ++ select CSRC_R4K if ! MIPS_EXTERNAL_TIMER ++ select DMA_NONCOHERENT ++ select GENERIC_ISA_DMA_SUPPORT_BROKEN ++ select HW_HAS_PCI ++ select I8259 ++ select IRQ_CPU ++ select ISA ++ select SYS_HAS_CPU_LOONGSON2F ++ select SYS_HAS_EARLY_PRINTK ++ select SYS_SUPPORTS_32BIT_KERNEL ++ select SYS_SUPPORTS_64BIT_KERNEL ++ select SYS_SUPPORTS_HIGHMEM ++ select SYS_SUPPORTS_LITTLE_ENDIAN ++ select ARCH_REQUIRE_GPIOLIB ++ select HAVE_PWM if MFD_SM501 ++ help ++ Dexxon gdium netbook based on Loongson 2F and SM502. + endchoice + + config CS5536 ++ select CS5536_IDE if (PATA_AMD || BLK_DEV_AMD74XX || PATA_CS5536) ++ select CS5536_OHCI if USB_OHCI_HCD ++ select CS5536_EHCI if USB_EHCI_HCD ++ select CS5536_AUDIO if SND_CS5535AUDIO ++ select CS5536_ISA ++ bool ++ ++config CS5536_ISA ++ select ISA ++ bool ++ ++config CS5536_IDE ++ bool ++ ++config CS5536_OHCI ++ bool ++ ++config CS5536_EHCI ++ bool ++ ++config CS5536_AUDIO + bool + + config CS5536_MFGPT +@@ -81,13 +126,25 @@ config LOONGSON_SUSPEND + default y + depends on CPU_SUPPORTS_CPUFREQ && SUSPEND + +-config LOONGSON_UART_BASE +- bool +- default y +- depends on EARLY_PRINTK || SERIAL_8250 +- + config LOONGSON_MC146818 + bool + default n + ++config GDIUM_PWM_CLOCK ++ tristate "Gdium PWM Timer" ++ default n ++ depends on HAVE_PWM && EXPERIMENTAL && BROKEN ++ select MIPS_EXTERNAL_TIMER ++ help ++ This options enables the experimental sm501-pwm based clock. With it, ++ you may be possible to use the loongson2f cpufreq driver. ++ ++config GDIUM_VERSION ++ int "Configure Gdium Version" ++ depends on DEXXON_GDIUM ++ default "3" ++ help ++ I have no information about how to determine which version your board ++ is, If the default config doesn't work for it, please change it to ++ smaller ones. + endif # MACH_LOONGSON +diff --git a/arch/mips/loongson/Makefile b/arch/mips/loongson/Makefile +index 0dc0055..4b69866 100644 +--- a/arch/mips/loongson/Makefile ++++ b/arch/mips/loongson/Makefile +@@ -15,3 +15,9 @@ obj-$(CONFIG_LEMOTE_FULOONG2E) += fuloong-2e/ + # + + obj-$(CONFIG_LEMOTE_MACH2F) += lemote-2f/ ++ ++# ++# Dexxon gdium netbook, based on loongson 2F and SM502 ++# ++ ++obj-$(CONFIG_DEXXON_GDIUM) += gdium/ +diff --git a/arch/mips/loongson/Platform b/arch/mips/loongson/Platform +index 29692e5..6be5dff 100644 +--- a/arch/mips/loongson/Platform ++++ b/arch/mips/loongson/Platform +@@ -30,3 +30,4 @@ platform-$(CONFIG_MACH_LOONGSON) += loongson/ + cflags-$(CONFIG_MACH_LOONGSON) += -I$(srctree)/arch/mips/include/asm/mach-loongson -mno-branch-likely + load-$(CONFIG_LEMOTE_FULOONG2E) += 0xffffffff80100000 + load-$(CONFIG_LEMOTE_MACH2F) += 0xffffffff80200000 ++load-$(CONFIG_DEXXON_GDIUM) += 0xffffffff80200000 +diff --git a/arch/mips/loongson/common/Makefile b/arch/mips/loongson/common/Makefile +index 9e4484c..73f1f9f 100644 +--- a/arch/mips/loongson/common/Makefile ++++ b/arch/mips/loongson/common/Makefile +@@ -12,7 +12,6 @@ obj-$(CONFIG_PCI) += pci.o + # + obj-$(CONFIG_EARLY_PRINTK) += early_printk.o + obj-$(CONFIG_SERIAL_8250) += serial.o +-obj-$(CONFIG_LOONGSON_UART_BASE) += uart_base.o + obj-$(CONFIG_LOONGSON_MC146818) += rtc.o + + # +diff --git a/arch/mips/loongson/common/cmdline.c b/arch/mips/loongson/common/cmdline.c +index 72fed00..96d5919 100644 +--- a/arch/mips/loongson/common/cmdline.c ++++ b/arch/mips/loongson/common/cmdline.c +@@ -17,10 +17,15 @@ + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ ++#include + #include + + #include + ++/* the kernel command line copied from arcs_cmdline */ ++char loongson_cmdline[COMMAND_LINE_SIZE]; ++EXPORT_SYMBOL(loongson_cmdline); ++ + void __init prom_init_cmdline(void) + { + int prom_argc; +@@ -45,4 +50,31 @@ void __init prom_init_cmdline(void) + } + + prom_init_machtype(); ++ ++ /* append machine specific command line */ ++ switch (mips_machtype) { ++ case MACH_LEMOTE_LL2F: ++ if ((strstr(arcs_cmdline, "video=")) == NULL) ++ strcat(arcs_cmdline, " video=sisfb:1360x768-16@60"); ++ break; ++ case MACH_LEMOTE_FL2F: ++ if ((strstr(arcs_cmdline, "ide_core.ignore_cable=")) == NULL) ++ strcat(arcs_cmdline, " ide_core.ignore_cable=0"); ++ break; ++ case MACH_LEMOTE_ML2F7: ++ /* Mengloong-2F has a 800x480 screen */ ++ if ((strstr(arcs_cmdline, "vga=")) == NULL) ++ strcat(arcs_cmdline, " vga=0x313"); ++ break; ++ case MACH_DEXXON_GDIUM2F10: ++ /* gdium has a 1024x600 screen */ ++ if ((strstr(arcs_cmdline, "video=")) == NULL) ++ strcat(arcs_cmdline, " video=sm501fb:1024x600@60"); ++ break; ++ default: ++ break; ++ } ++ ++ /* copy arcs_cmdline into loongson_cmdline */ ++ strncpy(loongson_cmdline, arcs_cmdline, COMMAND_LINE_SIZE); + } +diff --git a/arch/mips/loongson/common/cs5536/Makefile b/arch/mips/loongson/common/cs5536/Makefile +index f12e640..70f6057 100644 +--- a/arch/mips/loongson/common/cs5536/Makefile ++++ b/arch/mips/loongson/common/cs5536/Makefile +@@ -2,8 +2,13 @@ + # Makefile for CS5536 support. + # + +-obj-$(CONFIG_CS5536) += cs5536_pci.o cs5536_ide.o cs5536_acc.o cs5536_ohci.o \ +- cs5536_isa.o cs5536_ehci.o ++obj-$(CONFIG_CS5536) += cs5536_pci.o ++ ++obj-$(CONFIG_ISA) += cs5536_isa.o ++obj-$(CONFIG_CS5536_IDE) += cs5536_ide.o ++obj-$(CONFIG_CS5536_AUDIO) += cs5536_acc.o ++obj-$(CONFIG_CS5536_OHCI) += cs5536_ohci.o ++obj-$(CONFIG_CS5536_EHCI) += cs5536_ehci.o + + # + # Enable cs5536 mfgpt Timer +diff --git a/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c b/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c +index c639b9d..a7078ae 100644 +--- a/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c ++++ b/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c +@@ -7,6 +7,9 @@ + * Copyright (C) 2009 Lemote Inc. + * Author: Wu zhangjin, wuzhangjin@gmail.com + * ++ * Copyright (C) 2010 Lemote Inc. ++ * Author: Gang Liang, randomizedthinking@gmail.com ++ * + * Reference: AMD Geode(TM) CS5536 Companion Device Data Book + * + * This program is free software; you can redistribute it and/or modify it +@@ -15,11 +18,24 @@ + * option) any later version. + */ + ++/* ++ * The MFGPT base address is variable, i.e., it could change over time. In ++ * reality, it only changes once when setting up the PCI memory mapping (occurs ++ * about 0.2 second from boot). But because of this, we have to read in the ++ * mfgpt base address repeatly in the beginning of various routines, most ++ * noticeably, mfgpt1_read_cycle (for sched_clock), and mfgpt1_interrupt. ++ * ++ * The source of problem is that PMON and the current cs5536 set up pci ++ * register window differently (to be further confirmed). Can we set ++ * them the same so as to save the trouble here? ++ * ++ * Now an ugly hack is used to save a few CPU cycles... likely an ++ * over-optimization. Feel free to remove it. ++ */ ++ + #include + #include + #include +-#include +-#include + #include + #include + +@@ -27,108 +43,143 @@ + + #include + +-DEFINE_SPINLOCK(mfgpt_lock); +-EXPORT_SYMBOL(mfgpt_lock); ++static void mfgpt0_set_mode(enum clock_event_mode, struct clock_event_device*); ++static int mfgpt0_next_event(unsigned long, struct clock_event_device*); ++static irqreturn_t mfgpt0_interrupt(int irq, void *dev_id); ++static void mfgpt0_start_timer(u16 delta); + ++static cycle_t mfgpt1_read_cycle(struct clocksource *cs); ++ ++static enum clock_event_mode mfgpt0_mode = CLOCK_EVT_MODE_SHUTDOWN; + static u32 mfgpt_base; + +-/* +- * Initialize the MFGPT timer. +- * +- * This is also called after resume to bring the MFGPT into operation again. +- */ ++static struct clock_event_device mfgpt0_clockevent = { ++ .name = "mfgpt0", ++ .features = CLOCK_EVT_MODE_ONESHOT | CLOCK_EVT_FEAT_PERIODIC, ++ .set_mode = mfgpt0_set_mode, ++ .set_next_event = mfgpt0_next_event, ++ .rating = 220, ++ .irq = CS5536_MFGPT_INTR, ++}; ++ ++static struct irqaction irq5 = { ++ .handler = mfgpt0_interrupt, ++ .flags = IRQF_DISABLED | IRQF_NOBALANCING | IRQF_TIMER, ++ .name = "mfgpt0-timer" ++}; ++ ++static struct clocksource mfgpt1_clocksource = { ++ .name = "mfgpt1", ++ .rating = 210, ++ .read = mfgpt1_read_cycle, ++ .mask = CLOCKSOURCE_MASK(16), ++ .flags = CLOCK_SOURCE_IS_CONTINUOUS ++}; + +-/* disable counter */ +-void disable_mfgpt0_counter(void) ++static inline void enable_mfgpt0_counter(void) + { +- outw(inw(MFGPT0_SETUP) & 0x7fff, MFGPT0_SETUP); ++ u32 basehi; ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &basehi, &mfgpt_base); ++ ++ /* clockevent: 14M, divisor = 8 (scale=3), CMP2 event mode */ ++ outw(MFGPT_SETUP_ACK | MFGPT_SETUP_CMP2EVT | ++ MFGPT_SETUP_CLOCK(1) | MFGPT_SETUP_SCALE(3), MFGPT0_SETUP); ++ outw(0, MFGPT0_CNT); ++ outw(MFGPT_COMPARE(1, 3), MFGPT0_CMP2); ++ outw(0xFFFF, MFGPT0_SETUP); + } +-EXPORT_SYMBOL(disable_mfgpt0_counter); + +-/* enable counter, comparator2 to event mode, 14.318MHz clock */ +-void enable_mfgpt0_counter(void) ++static inline void enable_mfgpt1_counter(void) + { +- outw(0xe310, MFGPT0_SETUP); ++ u32 basehi; ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &basehi, &mfgpt_base); ++ ++ /* clocksource: 32K w/ divisor = 2 (scale=1) */ ++ outw(MFGPT_SETUP_ACK | MFGPT_SETUP_CLOCK(0) | ++ MFGPT_SETUP_SCALE(1), MFGPT1_SETUP); ++ ++ outw(0, MFGPT1_CNT); ++ outw(0xFFFF, MFGPT1_CMP2); /* CNT won't tick with no CMP set */ ++ outw(0xFFFF, MFGPT1_SETUP); + } +-EXPORT_SYMBOL(enable_mfgpt0_counter); + +-static void init_mfgpt_timer(enum clock_event_mode mode, +- struct clock_event_device *evt) ++void enable_mfgpt_counter(void) + { +- spin_lock(&mfgpt_lock); +- +- switch (mode) { +- case CLOCK_EVT_MODE_PERIODIC: +- outw(COMPARE, MFGPT0_CMP2); /* set comparator2 */ +- outw(0, MFGPT0_CNT); /* set counter to 0 */ +- enable_mfgpt0_counter(); +- break; +- +- case CLOCK_EVT_MODE_SHUTDOWN: +- case CLOCK_EVT_MODE_UNUSED: +- if (evt->mode == CLOCK_EVT_MODE_PERIODIC || +- evt->mode == CLOCK_EVT_MODE_ONESHOT) +- disable_mfgpt0_counter(); +- break; +- +- case CLOCK_EVT_MODE_ONESHOT: +- /* The oneshot mode have very high deviation, Not use it! */ +- break; +- +- case CLOCK_EVT_MODE_RESUME: +- /* Nothing to do here */ +- break; +- } +- spin_unlock(&mfgpt_lock); ++ /* TODO: add a mfgpt system hard reset here ++ * timers might not reset correctly when OS crashes ++ */ ++ ++ enable_mfgpt0_counter(); ++ enable_mfgpt1_counter(); + } ++EXPORT_SYMBOL(enable_mfgpt_counter); + +-static struct clock_event_device mfgpt_clockevent = { +- .name = "mfgpt", +- .features = CLOCK_EVT_FEAT_PERIODIC, +- .set_mode = init_mfgpt_timer, +- .irq = CS5536_MFGPT_INTR, +-}; ++void disable_mfgpt_counter(void) ++{ ++ outw(0x7FFF, MFGPT0_SETUP); ++ outw(0x7FFF, MFGPT1_SETUP); ++} ++EXPORT_SYMBOL(disable_mfgpt_counter); + +-static irqreturn_t timer_interrupt(int irq, void *dev_id) ++static void mfgpt0_start_timer(u16 delta) + { +- u32 basehi; ++ outw(0x7FFF, MFGPT0_SETUP); ++ outw(0, MFGPT0_CNT); ++ outw(delta, MFGPT0_CMP2); ++ outw(0xFFFF, MFGPT0_SETUP); ++} + +- /* +- * get MFGPT base address +- * +- * NOTE: do not remove me, it's need for the value of mfgpt_base is +- * variable +- */ ++static void mfgpt0_set_mode(enum clock_event_mode mode, ++ struct clock_event_device *evt) ++{ ++ outw(0x7FFF, MFGPT0_SETUP); ++ if (mode == CLOCK_EVT_MODE_PERIODIC) ++ mfgpt0_start_timer(MFGPT_COMPARE(1, 3)); ++ ++ mfgpt0_mode = mode; ++} ++ ++static int mfgpt0_next_event(unsigned long delta, ++ struct clock_event_device *evt) ++{ ++ mfgpt0_start_timer(delta); ++ return 0; ++} ++ ++static irqreturn_t mfgpt0_interrupt(int irq, void *dev_id) ++{ ++ u32 basehi; + _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &basehi, &mfgpt_base); + +- /* ack */ +- outw(inw(MFGPT0_SETUP) | 0x4000, MFGPT0_SETUP); ++ /* stop the timer and ack the interrupt */ ++ outw(0x7FFF, MFGPT0_SETUP); + +- mfgpt_clockevent.event_handler(&mfgpt_clockevent); ++ if (mfgpt0_mode == CLOCK_EVT_MODE_SHUTDOWN) ++ return IRQ_HANDLED; + ++ /* restart timer for periodic mode */ ++ if (mfgpt0_mode == CLOCK_EVT_MODE_PERIODIC) ++ outw(0xFFFF, MFGPT0_SETUP); ++ ++ mfgpt0_clockevent.event_handler(&mfgpt0_clockevent); + return IRQ_HANDLED; + } + +-static struct irqaction irq5 = { +- .handler = timer_interrupt, +- .flags = IRQF_NOBALANCING | IRQF_TIMER, +- .name = "timer" +-}; +- + /* + * Initialize the conversion factor and the min/max deltas of the clock event + * structure and register the clock event source with the framework. + */ + void __init setup_mfgpt0_timer(void) + { +- u32 basehi; +- struct clock_event_device *cd = &mfgpt_clockevent; ++ struct clock_event_device *cd = &mfgpt0_clockevent; + unsigned int cpu = smp_processor_id(); +- + cd->cpumask = cpumask_of(cpu); +- clockevent_set_clock(cd, MFGPT_TICK_RATE); +- cd->max_delta_ns = clockevent_delta2ns(0xffff, cd); +- cd->min_delta_ns = clockevent_delta2ns(0xf, cd); ++ ++ cd->shift = 22; ++ cd->mult = div_sc(MFGPT_TICK_RATE(1, 3), NSEC_PER_SEC, cd->shift); ++ ++ cd->min_delta_ns = clockevent_delta2ns(0xF, cd); ++ cd->max_delta_ns = clockevent_delta2ns(0xFFFF, cd); + + /* Enable MFGPT0 Comparator 2 Output to the Interrupt Mapper */ + _wrmsr(DIVIL_MSR_REG(MFGPT_IRQ), 0, 0x100); +@@ -136,79 +187,24 @@ void __init setup_mfgpt0_timer(void) + /* Enable Interrupt Gate 5 */ + _wrmsr(DIVIL_MSR_REG(PIC_ZSEL_LOW), 0, 0x50000); + +- /* get MFGPT base address */ +- _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &basehi, &mfgpt_base); +- ++ enable_mfgpt0_counter(); + clockevents_register_device(cd); +- + setup_irq(CS5536_MFGPT_INTR, &irq5); + } + +-/* +- * Since the MFGPT overflows every tick, its not very useful +- * to just read by itself. So use jiffies to emulate a free +- * running counter: +- */ +-static cycle_t mfgpt_read(struct clocksource *cs) ++static cycle_t mfgpt1_read_cycle(struct clocksource *cs) + { +- unsigned long flags; +- int count; +- u32 jifs; +- static int old_count; +- static u32 old_jifs; +- +- spin_lock_irqsave(&mfgpt_lock, flags); +- /* +- * Although our caller may have the read side of xtime_lock, +- * this is now a seqlock, and we are cheating in this routine +- * by having side effects on state that we cannot undo if +- * there is a collision on the seqlock and our caller has to +- * retry. (Namely, old_jifs and old_count.) So we must treat +- * jiffies as volatile despite the lock. We read jiffies +- * before latching the timer count to guarantee that although +- * the jiffies value might be older than the count (that is, +- * the counter may underflow between the last point where +- * jiffies was incremented and the point where we latch the +- * count), it cannot be newer. +- */ +- jifs = jiffies; +- /* read the count */ +- count = inw(MFGPT0_CNT); +- +- /* +- * It's possible for count to appear to go the wrong way for this +- * reason: +- * +- * The timer counter underflows, but we haven't handled the resulting +- * interrupt and incremented jiffies yet. +- * +- * Previous attempts to handle these cases intelligently were buggy, so +- * we just do the simple thing now. +- */ +- if (count < old_count && jifs == old_jifs) +- count = old_count; +- +- old_count = count; +- old_jifs = jifs; +- +- spin_unlock_irqrestore(&mfgpt_lock, flags); +- +- return (cycle_t) (jifs * COMPARE) + count; ++ return inw(MFGPT1_CNT); + } + +-static struct clocksource clocksource_mfgpt = { +- .name = "mfgpt", +- .rating = 120, /* Functional for real use, but not desired */ +- .read = mfgpt_read, +- .mask = CLOCKSOURCE_MASK(32), +-}; +- +-int __init init_mfgpt_clocksource(void) ++int __init init_mfgpt1_clocksource(void) + { + if (num_possible_cpus() > 1) /* MFGPT does not scale! */ + return 0; + +- return clocksource_register_hz(&clocksource_mfgpt, MFGPT_TICK_RATE); ++ enable_mfgpt1_counter(); ++ ++ return clocksource_register_hz(&mfgpt1_clocksource, MFGPT_TICK_RATE(0, 1)); + } + +-arch_initcall(init_mfgpt_clocksource); ++arch_initcall(init_mfgpt1_clocksource); +diff --git a/arch/mips/loongson/common/early_printk.c b/arch/mips/loongson/common/early_printk.c +index ced461b..89aecbf 100644 +--- a/arch/mips/loongson/common/early_printk.c ++++ b/arch/mips/loongson/common/early_printk.c +@@ -10,9 +10,13 @@ + * option) any later version. + */ + #include ++#include ++#include + + #include + ++unsigned long _loongson_uart_base; ++ + #define PORT(base, offset) (u8 *)(base + offset) + + static inline unsigned int serial_in(unsigned char *base, int offset) +@@ -39,3 +43,29 @@ void prom_putchar(char c) + + serial_out(uart_base, UART_TX, c); + } ++ ++void __init prom_init_uart_base(void) ++{ ++ unsigned long loongson_uart_base; ++ ++ switch (mips_machtype) { ++ case MACH_LEMOTE_FL2E: ++ loongson_uart_base = LOONGSON_PCIIO_BASE + 0x3f8; ++ break; ++ case MACH_LEMOTE_FL2F: ++ case MACH_LEMOTE_LL2F: ++ loongson_uart_base = LOONGSON_PCIIO_BASE + 0x2f8; ++ break; ++ case MACH_LEMOTE_ML2F7: ++ case MACH_LEMOTE_YL2F89: ++ case MACH_DEXXON_GDIUM2F10: ++ case MACH_LEMOTE_NAS: ++ default: ++ /* The CPU provided serial port */ ++ loongson_uart_base = LOONGSON_LIO1_BASE + 0x3f8; ++ break; ++ } ++ ++ _loongson_uart_base = ++ (unsigned long)ioremap_nocache(loongson_uart_base, 8); ++} +diff --git a/arch/mips/loongson/common/init.c b/arch/mips/loongson/common/init.c +index ae7af1f..3083978 100644 +--- a/arch/mips/loongson/common/init.c ++++ b/arch/mips/loongson/common/init.c +@@ -30,8 +30,10 @@ void __init prom_init(void) + prom_init_env(); + prom_init_memory(); + ++#ifdef CONFIG_EARLY_PRINTK + /*init the uart base address */ + prom_init_uart_base(); ++#endif + } + + void __init prom_free_prom_memory(void) +diff --git a/arch/mips/loongson/common/irq.c b/arch/mips/loongson/common/irq.c +index 687003b..d62fa77 100644 +--- a/arch/mips/loongson/common/irq.c ++++ b/arch/mips/loongson/common/irq.c +@@ -10,6 +10,10 @@ + #include + #include + ++#include ++#include ++#include ++ + #include + /* + * the first level int-handler will jump here if it is a bonito irq +@@ -48,20 +52,32 @@ asmlinkage void plat_irq_dispatch(void) + void __init arch_init_irq(void) + { + /* +- * Clear all of the interrupts while we change the able around a bit. +- * int-handler is not on bootstrap ++ * The vector addresses of the generic exceptions are in the cached ++ * address space. + */ +- clear_c0_status(ST0_IM | ST0_BEV); ++ clear_c0_status(ST0_BEV); + +- /* no steer */ ++ /* No steer */ + LOONGSON_INTSTEER = 0; + + /* +- * Mask out all interrupt by writing "1" to all bit position in +- * the interrupt reset reg. ++ * Clear all interrupts + */ + LOONGSON_INTENCLR = ~0; + ++ /* ++ * Sets the first-level interrupt dispatcher: ++ * ++ * 0-15: i8259 interrupt (If CONFIG_I8259 selected) ++ * 16-23: mips cpu interrupt ++ * 32-63: bonito irq ++ */ ++ mips_cpu_irq_init(); ++ bonito_irq_init(); ++#ifdef CONFIG_I8259 ++ init_i8259_irqs(); ++#endif ++ + /* machine specific irq init */ + mach_init_irq(); + } +diff --git a/arch/mips/loongson/common/mem.c b/arch/mips/loongson/common/mem.c +index 8626a42..7aea259 100644 +--- a/arch/mips/loongson/common/mem.c ++++ b/arch/mips/loongson/common/mem.c +@@ -14,39 +14,24 @@ + #include + #include + ++#define MB(x) ((x) << 20) ++ + void __init prom_init_memory(void) + { +- add_memory_region(0x0, (memsize << 20), BOOT_MEM_RAM); +- +- add_memory_region(memsize << 20, LOONGSON_PCI_MEM_START - (memsize << +- 20), BOOT_MEM_RESERVED); +- ++ add_memory_region(0x0, MB(memsize), BOOT_MEM_RAM); ++ add_memory_region(MB(memsize), LOONGSON_PCI_MEM_START - MB(memsize), BOOT_MEM_RESERVED); + #ifdef CONFIG_CPU_SUPPORTS_ADDRWINCFG +- { +- int bit; +- +- bit = fls(memsize + highmemsize); +- if (bit != ffs(memsize + highmemsize)) +- bit += 20; +- else +- bit = bit + 20 - 1; +- +- /* set cpu window3 to map CPU to DDR: 2G -> 2G */ +- LOONGSON_ADDRWIN_CPUTODDR(ADDRWIN_WIN3, 0x80000000ul, +- 0x80000000ul, (1 << bit)); +- mmiowb(); +- } +-#endif /* !CONFIG_CPU_SUPPORTS_ADDRWINCFG */ ++ /* set cpu window3 to map CPU to DDR: 2G -> 0G */ ++ LOONGSON_ADDRWIN_CPUTODDR(ADDRWIN_WIN3, 0x80000000ul, 0, MB(memsize + highmemsize)); ++ mmiowb(); ++#endif + + #ifdef CONFIG_64BIT + if (highmemsize > 0) +- add_memory_region(LOONGSON_HIGHMEM_START, +- highmemsize << 20, BOOT_MEM_RAM); +- ++ add_memory_region(LOONGSON_HIGHMEM_START, MB(highmemsize), BOOT_MEM_RAM); + add_memory_region(LOONGSON_PCI_MEM_END + 1, LOONGSON_HIGHMEM_START - +- LOONGSON_PCI_MEM_END - 1, BOOT_MEM_RESERVED); +- +-#endif /* !CONFIG_64BIT */ ++ LOONGSON_PCI_MEM_END - 1, BOOT_MEM_RESERVED); ++#endif + } + + /* override of arch/mips/mm/cache.c: __uncached_access */ +diff --git a/arch/mips/loongson/common/mtd.c b/arch/mips/loongson/common/mtd.c +new file mode 100644 +index 0000000..49a57a7 +--- /dev/null ++++ b/arch/mips/loongson/common/mtd.c +@@ -0,0 +1,91 @@ ++/* ++ * Driver for flushing/dumping ROM of PMON on loongson family machines ++ * ++ * Copyright (C) 2008-2009 Lemote Inc. ++ * Author: Yan Hua ++ * ++ * 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++ ++#define FLASH_PHYS_ADDR LOONGSON_BOOT_BASE ++#define FLASH_SIZE 0x080000 ++ ++#define FLASH_PARTITION0_ADDR 0x00000000 ++#define FLASH_PARTITION0_SIZE 0x00080000 ++ ++struct map_info flash_map = { ++ .name = "flash device", ++ .size = FLASH_SIZE, ++ .bankwidth = 1, ++}; ++ ++struct mtd_partition flash_parts[] = { ++ { ++ .name = "Bootloader", ++ .offset = FLASH_PARTITION0_ADDR, ++ .size = FLASH_PARTITION0_SIZE}, ++}; ++ ++#define PARTITION_COUNT ARRAY_SIZE(flash_parts) ++ ++static struct mtd_info *mymtd; ++ ++int __init init_flash(void) ++{ ++ printk(KERN_NOTICE "flash device: %x at %x\n", ++ FLASH_SIZE, FLASH_PHYS_ADDR); ++ ++ flash_map.phys = FLASH_PHYS_ADDR; ++ flash_map.virt = ioremap(FLASH_PHYS_ADDR, FLASH_SIZE); ++ ++ if (!flash_map.virt) { ++ printk(KERN_NOTICE "Failed to ioremap\n"); ++ return -EIO; ++ } ++ ++ simple_map_init(&flash_map); ++ ++ mymtd = do_map_probe("cfi_probe", &flash_map); ++ if (mymtd) { ++ add_mtd_partitions(mymtd, flash_parts, PARTITION_COUNT); ++ printk(KERN_NOTICE "pmon flash device initialized\n"); ++ return 0; ++ } ++ ++ iounmap((void *)flash_map.virt); ++ return -ENXIO; ++} ++ ++static void __exit cleanup_flash(void) ++{ ++ if (mymtd) { ++ del_mtd_partitions(mymtd); ++ map_destroy(mymtd); ++ } ++ if (flash_map.virt) { ++ iounmap((void *)flash_map.virt); ++ flash_map.virt = 0; ++ } ++} ++ ++module_init(init_flash); ++module_exit(cleanup_flash); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Yanhua "); ++MODULE_DESCRIPTION("MTD driver for pmon flushing/dumping"); +diff --git a/arch/mips/loongson/common/pci.c b/arch/mips/loongson/common/pci.c +index fa77844..a992931 100644 +--- a/arch/mips/loongson/common/pci.c ++++ b/arch/mips/loongson/common/pci.c +@@ -50,11 +50,11 @@ static void __init setup_pcimap(void) + LOONGSON_PCIMAP_WIN(0, 0); + + /* +- * PCI-DMA to local mapping: [2G,2G+256M] -> [0M,256M] ++ * PCI-DMA to local mapping: [2G,4G] -> [0M,2G] + */ + LOONGSON_PCIBASE0 = 0x80000000ul; /* base: 2G -> mmap: 0M */ +- /* size: 256M, burst transmission, pre-fetch enable, 64bit */ +- LOONGSON_PCI_HIT0_SEL_L = 0xc000000cul; ++ /* size: 2G, burst transmission, pre-fetch enable, 64bit */ ++ LOONGSON_PCI_HIT0_SEL_L = 0x8000000cul; + LOONGSON_PCI_HIT0_SEL_H = 0xfffffffful; + LOONGSON_PCI_HIT1_SEL_L = 0x00000006ul; /* set this BAR as invalid */ + LOONGSON_PCI_HIT1_SEL_H = 0x00000000ul; +diff --git a/arch/mips/loongson/common/serial.c b/arch/mips/loongson/common/serial.c +index 5f2b78a..c828600 100644 +--- a/arch/mips/loongson/common/serial.c ++++ b/arch/mips/loongson/common/serial.c +@@ -10,6 +10,7 @@ + * Author: Wu Zhangjin (wuzhangjin@gmail.com) + */ + ++#include + #include + #include + #include +@@ -19,58 +20,44 @@ + #include + #include + +-#define PORT(int) \ ++#define PORT(int, base_baud, io_type, port) \ + { \ + .irq = int, \ +- .uartclk = 1843200, \ +- .iotype = UPIO_PORT, \ ++ .uartclk = base_baud, \ ++ .iotype = io_type, \ + .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, \ + .regshift = 0, \ ++ .iobase = port, \ + } + +-#define PORT_M(int) \ +-{ \ +- .irq = MIPS_CPU_IRQ_BASE + (int), \ +- .uartclk = 3686400, \ +- .iotype = UPIO_MEM, \ +- .membase = (void __iomem *)NULL, \ +- .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, \ +- .regshift = 0, \ +-} +- +-static struct plat_serial8250_port uart8250_data[][2] = { +- [MACH_LOONGSON_UNKNOWN] {}, +- [MACH_LEMOTE_FL2E] {PORT(4), {} }, +- [MACH_LEMOTE_FL2F] {PORT(3), {} }, +- [MACH_LEMOTE_ML2F7] {PORT_M(3), {} }, +- [MACH_LEMOTE_YL2F89] {PORT_M(3), {} }, +- [MACH_DEXXON_GDIUM2F10] {PORT_M(3), {} }, +- [MACH_LEMOTE_NAS] {PORT_M(3), {} }, +- [MACH_LEMOTE_LL2F] {PORT(3), {} }, +- [MACH_LOONGSON_END] {}, ++static struct plat_serial8250_port uart8250_data[] = { ++ /* ttyS0: cpu_uart0 Yeeloong, Gdium, UNAS, ... */ ++ PORT((MIPS_CPU_IRQ_BASE + 3), 3686400, UPIO_MEM, 0x3f8), ++ /* ttyS1: sb_uart1 2E */ ++ PORT(4, 1843200, UPIO_PORT, 0x3f8), ++ /* ttyS2: sb_uart2 fuloong2f */ ++ PORT(3, 1843200, UPIO_PORT, 0x2f8), ++ {}, + }; + + static struct platform_device uart8250_device = { + .name = "serial8250", + .id = PLAT8250_DEV_PLATFORM, ++ .dev = { ++ .platform_data = uart8250_data, ++ }, + }; + + static int __init serial_init(void) + { +- unsigned char iotype; +- +- iotype = uart8250_data[mips_machtype][0].iotype; +- +- if (UPIO_MEM == iotype) +- uart8250_data[mips_machtype][0].membase = +- (void __iomem *)_loongson_uart_base; +- else if (UPIO_PORT == iotype) +- uart8250_data[mips_machtype][0].iobase = +- loongson_uart_base - LOONGSON_PCIIO_BASE; +- +- uart8250_device.dev.platform_data = uart8250_data[mips_machtype]; ++ uart8250_data[0].membase = (void __iomem *)ioremap_nocache( ++ LOONGSON_LIO1_BASE + uart8250_data[0].iobase, 8); + +- return platform_device_register(&uart8250_device); ++ platform_device_register(&uart8250_device); ++ return 0; + } + + device_initcall(serial_init); ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("liu shiwei "); ++MODULE_DESCRIPTION("loongson serial"); +diff --git a/arch/mips/loongson/common/time.c b/arch/mips/loongson/common/time.c +index 262a1f6..eebbeef 100644 +--- a/arch/mips/loongson/common/time.c ++++ b/arch/mips/loongson/common/time.c +@@ -10,6 +10,8 @@ + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ ++#include ++ + #include + #include + +@@ -24,8 +26,81 @@ void __init plat_time_init(void) + setup_mfgpt0_timer(); + } + ++#ifdef CONFIG_LOONGSON_MC146818 + void read_persistent_clock(struct timespec *ts) + { + ts->tv_sec = mc146818_get_cmos_time(); + ts->tv_nsec = 0; + } ++#else ++ ++/* If no CMOS RTC, use the one below */ ++ ++/* ++ * Cloned from drivers/rtc/hctosys.c ++ * ++ * If CONFIG_RTC_HCTOSYS=y is enabled, the system time can be set from the ++ * hardware clock(when boot and resuming from suspend), this may be also done ++ * (duplicately) by the timekeeper, which may need to be avoided(TODO). ++ * ++ * read_persistent_clock() may be useful in some places, e.g. there is not ++ * peristent clock in the system, we can use this to recover the system time. ++ * ++ * Note: The device indicated by CONFIG_RTC_HCTOSYS_DEVICE must be the one ++ * created by the RTC driver. Use Gdium as an example, We must disable the ++ * rt_cmos driver If we want to use the rtc_m41t80 driver for ++ * CONFIG_RTC_HCTOSYS_DEVICE is configured as /dev/rtc0, if rtc_cmos is ++ * enabled, rtc_cmos driver will be used, but it is not supported by Gdium. ++ * So, for Gdium, please ensure "# CONFIG_RTC_DRV_CMOS is not set" ++ */ ++ ++#ifdef CONFIG_RTC_HCTOSYS ++void read_persistent_clock(struct timespec *ts) ++{ ++ int err = -ENODEV; ++ struct rtc_time tm; ++ struct rtc_device *rtc; ++ ++ /* We can not access the RTC device before it is initialized ... */ ++ if (rtc_hctosys_ret != 0) { ++ ts->tv_sec = 0; ++ ts->tv_nsec = 0; ++ return; ++ } ++ ++ rtc = rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE); ++ ++ if (rtc == NULL) { ++ pr_err("%s: unable to open rtc device (%s)\n", ++ __FILE__, CONFIG_RTC_HCTOSYS_DEVICE); ++ goto err_open; ++ } ++ ++ err = rtc_read_time(rtc, &tm); ++ if (err) { ++ dev_err(rtc->dev.parent, ++ "hctosys: unable to read the hardware clock\n"); ++ goto err_read; ++ ++ } ++ ++ err = rtc_valid_tm(&tm); ++ if (err) { ++ dev_err(rtc->dev.parent, ++ "hctosys: invalid date/time\n"); ++ goto err_invalid; ++ } ++ ++ ts->tv_nsec = NSEC_PER_SEC >> 1, ++ rtc_tm_to_time(&tm, &ts->tv_sec); ++ ++err_invalid: ++err_read: ++ rtc_class_close(rtc); ++ ++err_open: ++ rtc_hctosys_ret = err; ++} ++#endif /* CONFIG_RTC_HCTOSYS */ ++ ++#endif /* !CONFIG_LOONGSON_MC146818 */ +diff --git a/arch/mips/loongson/common/uart_base.c b/arch/mips/loongson/common/uart_base.c +deleted file mode 100644 +index e192ad0..0000000 +--- a/arch/mips/loongson/common/uart_base.c ++++ /dev/null +@@ -1,45 +0,0 @@ +-/* +- * Copyright (C) 2009 Lemote Inc. +- * Author: Wu Zhangjin, wuzhangjin@gmail.com +- * +- * 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. +- */ +- +-#include +-#include +- +-#include +- +-/* ioremapped */ +-unsigned long _loongson_uart_base; +-EXPORT_SYMBOL(_loongson_uart_base); +-/* raw */ +-unsigned long loongson_uart_base; +-EXPORT_SYMBOL(loongson_uart_base); +- +-void prom_init_loongson_uart_base(void) +-{ +- switch (mips_machtype) { +- case MACH_LEMOTE_FL2E: +- loongson_uart_base = LOONGSON_PCIIO_BASE + 0x3f8; +- break; +- case MACH_LEMOTE_FL2F: +- case MACH_LEMOTE_LL2F: +- loongson_uart_base = LOONGSON_PCIIO_BASE + 0x2f8; +- break; +- case MACH_LEMOTE_ML2F7: +- case MACH_LEMOTE_YL2F89: +- case MACH_DEXXON_GDIUM2F10: +- case MACH_LEMOTE_NAS: +- default: +- /* The CPU provided serial port */ +- loongson_uart_base = LOONGSON_LIO1_BASE + 0x3f8; +- break; +- } +- +- _loongson_uart_base = +- (unsigned long)ioremap_nocache(loongson_uart_base, 8); +-} +diff --git a/arch/mips/loongson/fuloong-2e/irq.c b/arch/mips/loongson/fuloong-2e/irq.c +index ef5ec8f..232930e 100644 +--- a/arch/mips/loongson/fuloong-2e/irq.c ++++ b/arch/mips/loongson/fuloong-2e/irq.c +@@ -9,7 +9,6 @@ + */ + #include + +-#include + #include + + #include +@@ -57,11 +56,6 @@ void __init mach_init_irq(void) + LOONGSON_INTEDGE = LOONGSON_ICU_SYSTEMERR | LOONGSON_ICU_MASTERERR | + LOONGSON_ICU_RETRYERR | LOONGSON_ICU_MBOXES; + +- /* Sets the first-level interrupt dispatcher. */ +- mips_cpu_irq_init(); +- init_i8259_irqs(); +- bonito_irq_init(); +- + /* bonito irq at IP2 */ + setup_irq(MIPS_CPU_IRQ_BASE + 2, &cascade_irqaction); + /* 8259 irq at IP5 */ +diff --git a/arch/mips/loongson/gdium/Makefile b/arch/mips/loongson/gdium/Makefile +new file mode 100644 +index 0000000..f3f4f51 +--- /dev/null ++++ b/arch/mips/loongson/gdium/Makefile +@@ -0,0 +1,6 @@ ++# Makefile for gdium ++ ++obj-y += irq.o reset.o platform.o ++ ++obj-$(CONFIG_MFD_SM501) += sm501-pwm.o ++obj-$(CONFIG_GDIUM_PWM_CLOCK) += gdium-clock.o +diff --git a/arch/mips/loongson/gdium/gdium-clock.c b/arch/mips/loongson/gdium/gdium-clock.c +new file mode 100644 +index 0000000..fdbf42a +--- /dev/null ++++ b/arch/mips/loongson/gdium/gdium-clock.c +@@ -0,0 +1,234 @@ ++/* ++ * Doesn't work really well. When used, the clocksource is producing ++ * bad timings and the clockevent can't be used (don't have one shot feature ++ * thus can't switch on the fly and the pwm is initialised too late to be able ++ * to use it at boot time). ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define CLOCK_PWM 1 ++#define CLOCK_PWM_FREQ 1500000 /* Freq in Hz */ ++#define CLOCK_LATCH ((CLOCK_PWM_FREQ + HZ/2) / HZ) ++#define CLOCK_PWM_PERIOD (1000000000/CLOCK_PWM_FREQ) /* period ns */ ++#define CLOCK_PWM_DUTY 50 ++#define CLOCK_PWM_IRQ (MIPS_CPU_IRQ_BASE + 4) ++ ++static const char drv_name[] = "gdium-clock"; ++ ++static struct pwm_device *clock_pwm; ++ ++static DEFINE_SPINLOCK(clock_pwm_lock); ++static uint64_t clock_tick; ++ ++static irqreturn_t gdium_pwm_clock_interrupt(int irq, void *dev_id) ++{ ++ struct clock_event_device *cd = dev_id; ++ unsigned long flag; ++ ++ spin_lock_irqsave(&clock_pwm_lock, flag); ++ clock_tick++; ++ /* wait intn2 to finish */ ++ do { ++ LOONGSON_INTENCLR = (1 << 13); ++ } while (LOONGSON_INTISR & (1 << 13)); ++ spin_unlock_irqrestore(&clock_pwm_lock, flag); ++ ++ if (cd && cd->event_handler) ++ cd->event_handler(cd); ++ ++ return IRQ_HANDLED; ++} ++ ++static cycle_t gdium_pwm_clock_read(struct clocksource *cs) ++{ ++ unsigned long flag; ++ uint32_t jifs; ++ uint64_t ticks; ++ ++ spin_lock_irqsave(&clock_pwm_lock, flag); ++ jifs = jiffies; ++ ticks = clock_tick; ++ spin_unlock_irqrestore(&clock_pwm_lock, flag); ++ /* return (cycle_t)ticks; */ ++ return (cycle_t)(CLOCK_LATCH * jifs); ++} ++ ++static struct clocksource gdium_pwm_clock_clocksource = { ++ .name = "gdium_csrc", ++ .read = gdium_pwm_clock_read, ++ .mask = CLOCKSOURCE_MASK(64), ++ .flags = CLOCK_SOURCE_IS_CONTINUOUS | CLOCK_SOURCE_MUST_VERIFY, ++ .shift = 20, ++}; ++ ++/* Debug fs */ ++static int gdium_pwm_clock_show(struct seq_file *s, void *p) ++{ ++ unsigned long flag; ++ uint64_t ticks; ++ ++ spin_lock_irqsave(&clock_pwm_lock, flag); ++ ticks = clock_tick; ++ spin_unlock_irqrestore(&clock_pwm_lock, flag); ++ seq_printf(s, "%lld\n", ticks); ++ return 0; ++} ++ ++static int gdium_pwm_clock_open(struct inode *inode, struct file *file) ++{ ++ return single_open(file, gdium_pwm_clock_show, inode->i_private); ++} ++ ++static const struct file_operations gdium_pwm_clock_fops = { ++ .open = gdium_pwm_clock_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .owner = THIS_MODULE, ++}; ++static struct dentry *debugfs_file; ++ ++static void gdium_pwm_clock_set_mode(enum clock_event_mode mode, ++ struct clock_event_device *evt) ++{ ++ /* Nothing to do ... */ ++} ++ ++static struct clock_event_device gdium_pwm_clock_cevt = { ++ .name = "gdium_cevt", ++ .features = CLOCK_EVT_FEAT_PERIODIC, ++ /* .mult, .shift, .max_delta_ns and .min_delta_ns left uninitialized */ ++ .rating = 299, ++ .irq = CLOCK_PWM_IRQ, ++ .set_mode = gdium_pwm_clock_set_mode, ++}; ++ ++static struct platform_device_id platform_device_ids[] = { ++ { ++ .name = "gdium-pwmclk", ++ }, ++ {} ++}; ++MODULE_DEVICE_TABLE(platform, platform_device_ids); ++ ++static struct platform_driver gdium_pwm_clock_driver = { ++ .driver = { ++ .name = drv_name, ++ .owner = THIS_MODULE, ++ }, ++ .id_table = platform_device_ids, ++}; ++ ++static int gdium_pwm_clock_drvinit(void) ++{ ++ int ret; ++ struct clocksource *cs = &gdium_pwm_clock_clocksource; ++ struct clock_event_device *cd = &gdium_pwm_clock_cevt; ++ unsigned int cpu = smp_processor_id(); ++ ++ clock_tick = 0; ++ ++ clock_pwm = pwm_request(CLOCK_PWM, drv_name); ++ if (clock_pwm == NULL) { ++ pr_err("unable to request PWM for Gdium clock\n"); ++ return -EBUSY; ++ } ++ ret = pwm_config(clock_pwm, CLOCK_PWM_DUTY, CLOCK_PWM_PERIOD); ++ if (ret) { ++ pr_err("unable to configure PWM for Gdium clock\n"); ++ goto err_pwm_request; ++ } ++ ret = pwm_enable(clock_pwm); ++ if (ret) { ++ pr_err("unable to enable PWM for Gdium clock\n"); ++ goto err_pwm_request; ++ } ++ ++ cd->cpumask = cpumask_of(cpu); ++ ++ cd->shift = 22; ++ cd->mult = div_sc(CLOCK_PWM_FREQ, NSEC_PER_SEC, cd->shift); ++ cd->max_delta_ns = clockevent_delta2ns(0x7FFF, cd); ++ cd->min_delta_ns = clockevent_delta2ns(0xF, cd); ++ clockevents_register_device(&gdium_pwm_clock_cevt); ++ ++ /* SM501 PWM1 connected to intn2 <->ip4 */ ++ LOONGSON_INTPOL = (1 << 13); ++ LOONGSON_INTEDGE &= ~(1 << 13); ++ ret = request_irq(CLOCK_PWM_IRQ, gdium_pwm_clock_interrupt, IRQF_DISABLED, drv_name, &gdium_pwm_clock_cevt); ++ if (ret) { ++ pr_err("Can't claim irq\n"); ++ goto err_pwm_disable; ++ } ++ ++ cs->rating = 200; ++ cs->mult = clocksource_hz2mult(CLOCK_PWM_FREQ, cs->shift); ++ ret = clocksource_register(&gdium_pwm_clock_clocksource); ++ if (ret) { ++ pr_err("Can't register clocksource\n"); ++ goto err_irq; ++ } ++ pr_info("Clocksource registered with shift %d and mult %d\n", ++ cs->shift, cs->mult); ++ ++ debugfs_file = debugfs_create_file(drv_name, S_IFREG | S_IRUGO, ++ NULL, NULL, &gdium_pwm_clock_fops); ++ ++ return 0; ++ ++err_irq: ++ free_irq(CLOCK_PWM_IRQ, &gdium_pwm_clock_cevt); ++err_pwm_disable: ++ pwm_disable(clock_pwm); ++err_pwm_request: ++ pwm_free(clock_pwm); ++ return ret; ++} ++ ++static void gdium_pwm_clock_drvexit(void) ++{ ++ free_irq(CLOCK_PWM_IRQ, &gdium_pwm_clock_cevt); ++ pwm_disable(clock_pwm); ++ pwm_free(clock_pwm); ++} ++ ++ ++static int __devinit gdium_pwm_clock_init(void) ++{ ++ int ret = gdium_pwm_clock_drvinit(); ++ ++ if (ret) { ++ pr_err("Fail to register gdium clock driver\n"); ++ return ret; ++ } ++ ++ return platform_driver_register(&gdium_pwm_clock_driver); ++} ++ ++static void __exit gdium_pwm_clock_cleanup(void) ++{ ++ gdium_pwm_clock_drvexit(); ++ platform_driver_unregister(&gdium_pwm_clock_driver); ++} ++ ++module_init(gdium_pwm_clock_init); ++module_exit(gdium_pwm_clock_cleanup); ++ ++MODULE_AUTHOR("Arnaud Patard "); ++MODULE_DESCRIPTION("Gdium PWM clock driver"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("platform:gdium-pwmclk"); +diff --git a/arch/mips/loongson/gdium/irq.c b/arch/mips/loongson/gdium/irq.c +new file mode 100644 +index 0000000..2415d20 +--- /dev/null ++++ b/arch/mips/loongson/gdium/irq.c +@@ -0,0 +1,55 @@ ++/* ++ * Copyright (C) 2007 Lemote Inc. ++ * Author: Fuxin Zhang, zhangfx@lemote.com ++ * ++ * Copyright (c) 2010 yajin ++ * ++ * 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. ++ */ ++ ++#include ++#include ++ ++#include ++#include ++ ++#define LOONGSON_TIMER_IRQ (MIPS_CPU_IRQ_BASE + 7) /* cpu timer */ ++#define LOONGSON_NORTH_BRIDGE_IRQ (MIPS_CPU_IRQ_BASE + 6) /* bonito */ ++#define LOONGSON_UART_IRQ (MIPS_CPU_IRQ_BASE + 3) /* cpu serial port */ ++ ++void mach_irq_dispatch(unsigned int pending) ++{ ++ if (pending & CAUSEF_IP7) ++ do_IRQ(LOONGSON_TIMER_IRQ); ++ else if (pending & CAUSEF_IP6) { /* North Bridge, Perf counter */ ++ do_perfcnt_IRQ(); ++ bonito_irqdispatch(); ++ } else if (pending & CAUSEF_IP3) /* CPU UART */ ++ do_IRQ(LOONGSON_UART_IRQ); ++#if defined(CONFIG_GDIUM_PWM_CLOCK) || defined(CONFIG_GDIUM_PWM_CLOCK_MODULE) ++ else if (pending & CAUSEF_IP4) /* SM501 PWM clock */ ++ do_IRQ(MIPS_CPU_IRQ_BASE + 4); ++#endif ++ else ++ spurious_interrupt(); ++} ++ ++static irqreturn_t ip6_action(int cpl, void *dev_id) ++{ ++ return IRQ_HANDLED; ++} ++ ++struct irqaction ip6_irqaction = { ++ .handler = ip6_action, ++ .name = "cascade", ++ .flags = IRQF_SHARED, ++}; ++ ++void __init mach_init_irq(void) ++{ ++ /* setup north bridge irq (bonito) */ ++ setup_irq(LOONGSON_NORTH_BRIDGE_IRQ, &ip6_irqaction); ++} +diff --git a/arch/mips/loongson/gdium/platform.c b/arch/mips/loongson/gdium/platform.c +new file mode 100644 +index 0000000..ffafba4 +--- /dev/null ++++ b/arch/mips/loongson/gdium/platform.c +@@ -0,0 +1,135 @@ ++/* ++ * Copyright (c) 2009 Philippe Vachon ++ * ++ * 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define GDIUM_GPIO_BASE 224 ++ ++static struct i2c_board_info __initdata sm502dev_i2c_devices[] = { ++ { ++ I2C_BOARD_INFO("lm75", 0x48), ++ }, ++ { ++ I2C_BOARD_INFO("m41t83", 0x68), ++ }, ++ { ++ I2C_BOARD_INFO("gdium-laptop", 0x40), ++ }, ++}; ++ ++static int sm502dev_backlight_init(struct device *dev) ++{ ++ /* Add gpio request stuff here */ ++ return 0; ++} ++ ++static void sm502dev_backlight_exit(struct device *dev) ++{ ++ /* Add gpio free stuff here */ ++} ++ ++static struct platform_pwm_backlight_data backlight_data = { ++ .pwm_id = 0, ++ .max_brightness = 15, ++ .dft_brightness = 8, ++ .pwm_period_ns = 50000, /* 20 kHz */ ++ .init = sm502dev_backlight_init, ++ .exit = sm502dev_backlight_exit, ++}; ++ ++static struct platform_device backlight = { ++ .name = "pwm-backlight", ++ .dev = { ++ .platform_data = &backlight_data, ++ }, ++ .id = -1, ++}; ++ ++/* ++ * Warning this stunt is very dangerous ++ * as the sm501 gpio have dynamic numbers... ++ */ ++/* bus 0 is the one for the ST7, DS75 etc... */ ++static struct i2c_gpio_platform_data i2c_gpio0_data = { ++#if CONFIG_GDIUM_VERSION > 2 ++ .sda_pin = GDIUM_GPIO_BASE + 13, ++ .scl_pin = GDIUM_GPIO_BASE + 6, ++#else ++ .sda_pin = 192+15, ++ .scl_pin = 192+14, ++#endif ++ .udelay = 5, ++ .timeout = HZ / 10, ++ .sda_is_open_drain = 0, ++ .scl_is_open_drain = 0, ++}; ++ ++static struct platform_device i2c_gpio0_device = { ++ .name = "i2c-gpio", ++ .id = 0, ++ .dev = { .platform_data = &i2c_gpio0_data, }, ++}; ++ ++/* bus 1 is for the CRT/VGA external screen */ ++static struct i2c_gpio_platform_data i2c_gpio1_data = { ++ .sda_pin = GDIUM_GPIO_BASE + 10, ++ .scl_pin = GDIUM_GPIO_BASE + 9, ++ .udelay = 5, ++ .timeout = HZ / 10, ++ .sda_is_open_drain = 0, ++ .scl_is_open_drain = 0, ++}; ++ ++static struct platform_device i2c_gpio1_device = { ++ .name = "i2c-gpio", ++ .id = 1, ++ .dev = { .platform_data = &i2c_gpio1_data, }, ++}; ++ ++static struct platform_device gdium_clock = { ++ .name = "gdium-pwmclk", ++ .id = -1, ++}; ++ ++static struct platform_device *devices[] __initdata = { ++ &i2c_gpio0_device, ++ &i2c_gpio1_device, ++ &backlight, ++ &gdium_clock, ++}; ++ ++static int __init gdium_platform_devices_setup(void) ++{ ++ int ret; ++ ++ pr_info("Registering gdium platform devices\n"); ++ ++ ret = i2c_register_board_info(0, sm502dev_i2c_devices, ++ ARRAY_SIZE(sm502dev_i2c_devices)); ++ ++ if (ret != 0) { ++ pr_info("Error while registering platform devices: %d\n", ret); ++ return ret; ++ } ++ ++ platform_add_devices(devices, ARRAY_SIZE(devices)); ++ ++ return 0; ++} ++ ++/* ++ * some devices are on the pwm stuff which is behind the mfd which is ++ * behind the pci bus so arch_initcall can't work because too early ++ */ ++late_initcall(gdium_platform_devices_setup); +diff --git a/arch/mips/loongson/gdium/reset.c b/arch/mips/loongson/gdium/reset.c +new file mode 100644 +index 0000000..8289f95 +--- /dev/null ++++ b/arch/mips/loongson/gdium/reset.c +@@ -0,0 +1,22 @@ ++/* Board-specific reboot/shutdown routines ++ * ++ * Copyright (C) 2010 yajin ++ * ++ * 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. ++ */ ++#include ++ ++void mach_prepare_shutdown(void) ++{ ++ LOONGSON_GPIOIE &= ~(1<<1); ++ LOONGSON_GPIODATA |= (1<<1); ++} ++ ++void mach_prepare_reboot(void) ++{ ++ LOONGSON_GPIOIE &= ~(1<<2); ++ LOONGSON_GPIODATA &= ~(1<<2); ++} +diff --git a/arch/mips/loongson/gdium/sm501-pwm.c b/arch/mips/loongson/gdium/sm501-pwm.c +new file mode 100644 +index 0000000..5af3b23 +--- /dev/null ++++ b/arch/mips/loongson/gdium/sm501-pwm.c +@@ -0,0 +1,465 @@ ++/* ++ * SM501 PWM clock ++ * Copyright (C) 2009-2010 Arnaud Patard ++ * ++ * 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static const char drv_name[] = "sm501-pwm"; ++ ++#define INPUT_CLOCK 96 /* MHz */ ++#define PWM_COUNT 3 ++ ++#define SM501PWM_HIGH_COUNTER (1<<20) ++#define SM501PWM_LOW_COUNTER (1<<8) ++#define SM501PWM_CLOCK_DIVIDE (1>>4) ++#define SM501PWM_IP (1<<3) ++#define SM501PWM_I (1<<2) ++#define SM501PWM_E (1<<0) ++ ++struct pwm_device { ++ struct list_head node; ++ struct device *dev; ++ void __iomem *regs; ++ int duty_ns; ++ int period_ns; ++ char enabled; ++ void (*handler)(struct pwm_device *pwm); ++ ++ const char *label; ++ unsigned int use_count; ++ unsigned int pwm_id; ++}; ++ ++struct sm501pwm_info { ++ void __iomem *regs; ++ int irq; ++ struct resource *res; ++ struct device *dev; ++ struct dentry *debugfs; ++ ++ struct pwm_device pwm[3]; ++}; ++ ++int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) ++{ ++ unsigned int high, low, divider; ++ int divider1, divider2; ++ unsigned long long delay; ++ ++ if (!pwm || !pwm->regs || period_ns == 0 || duty_ns > period_ns) ++ return -EINVAL; ++ ++ /* Get delay ++ * We're loosing some precision but multiplying then dividing ++ * will overflow ++ */ ++ if (period_ns > 1000) { ++ delay = period_ns / 1000; ++ delay *= INPUT_CLOCK; ++ } else { ++ delay = period_ns * 96; ++ delay /= 1000; ++ } ++ ++ /* Get the number of clock low and high */ ++ high = delay * duty_ns / period_ns; ++ low = delay - high; ++ ++ /* Get divider to make 'low' and 'high' fit into 12 bits */ ++ /* No need to say that the divider must be >= 0 */ ++ divider1 = fls(low)-12; ++ divider2 = fls(high)-12; ++ ++ if (divider1 < 0) ++ divider1 = 0; ++ if (divider2 < 0) ++ divider2 = 0; ++ ++ divider = max(divider1, divider2); ++ ++ low >>= divider; ++ high >>= divider; ++ ++ pwm->duty_ns = duty_ns; ++ pwm->period_ns = period_ns; ++ ++ writel((high<<20)|(low<<8)|(divider<<4), pwm->regs); ++ return 0; ++} ++EXPORT_SYMBOL(pwm_config); ++ ++int pwm_enable(struct pwm_device *pwm) ++{ ++ u32 reg; ++ ++ if (!pwm) ++ return -EINVAL; ++ ++ switch (pwm->pwm_id) { ++ case 0: ++ sm501_configure_gpio(pwm->dev->parent, 29, 1); ++ break; ++ case 1: ++ sm501_configure_gpio(pwm->dev->parent, 30, 1); ++ break; ++ case 2: ++ sm501_configure_gpio(pwm->dev->parent, 31, 1); ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ reg = readl(pwm->regs); ++ reg |= (SM501PWM_IP | SM501PWM_E); ++ writel(reg, pwm->regs); ++ pwm->enabled = 1; ++ ++ return 0; ++} ++EXPORT_SYMBOL(pwm_enable); ++ ++void pwm_disable(struct pwm_device *pwm) ++{ ++ u32 reg; ++ ++ if (!pwm) ++ return; ++ ++ reg = readl(pwm->regs); ++ reg &= ~(SM501PWM_IP | SM501PWM_E); ++ writel(reg, pwm->regs); ++ ++ switch (pwm->pwm_id) { ++ case 0: ++ sm501_configure_gpio(pwm->dev->parent, 29, 0); ++ break; ++ case 1: ++ sm501_configure_gpio(pwm->dev->parent, 30, 0); ++ break; ++ case 2: ++ sm501_configure_gpio(pwm->dev->parent, 31, 0); ++ break; ++ default: ++ break; ++ } ++ pwm->enabled = 0; ++} ++EXPORT_SYMBOL(pwm_disable); ++ ++static DEFINE_MUTEX(pwm_lock); ++static LIST_HEAD(pwm_list); ++ ++struct pwm_device *pwm_request(int pwm_id, const char *label) ++{ ++ struct pwm_device *pwm; ++ int found = 0; ++ ++ mutex_lock(&pwm_lock); ++ ++ list_for_each_entry(pwm, &pwm_list, node) { ++ if (pwm->pwm_id == pwm_id && pwm->use_count == 0) { ++ pwm->use_count++; ++ pwm->label = label; ++ found = 1; ++ break; ++ } ++ } ++ ++ mutex_unlock(&pwm_lock); ++ ++ return (found) ? pwm : NULL; ++} ++EXPORT_SYMBOL(pwm_request); ++ ++void pwm_free(struct pwm_device *pwm) ++{ ++ mutex_lock(&pwm_lock); ++ ++ if (pwm->use_count) { ++ pwm->use_count--; ++ pwm->label = NULL; ++ } else ++ dev_warn(pwm->dev, "PWM device already freed\n"); ++ ++ mutex_unlock(&pwm_lock); ++} ++EXPORT_SYMBOL(pwm_free); ++ ++int pwm_int_enable(struct pwm_device *pwm) ++{ ++ unsigned long conf; ++ ++ if (!pwm || !pwm->regs || !pwm->handler) ++ return -EINVAL; ++ ++ conf = readl(pwm->regs); ++ conf |= SM501PWM_I; ++ writel(conf, pwm->regs); ++ return 0; ++} ++EXPORT_SYMBOL(pwm_int_enable); ++ ++int pwm_int_disable(struct pwm_device *pwm) ++{ ++ unsigned long conf; ++ ++ if (!pwm || !pwm->regs || !pwm->handler) ++ return -EINVAL; ++ ++ conf = readl(pwm->regs); ++ conf &= ~SM501PWM_I; ++ writel(conf, pwm->regs); ++ return 0; ++} ++EXPORT_SYMBOL(pwm_int_disable); ++ ++int pwm_set_handler(struct pwm_device *pwm, ++ void (*handler)(struct pwm_device *pwm)) ++{ ++ if (!pwm || !handler) ++ return -EINVAL; ++ pwm->handler = handler; ++ return 0; ++} ++EXPORT_SYMBOL(pwm_set_handler); ++ ++static irqreturn_t sm501pwm_irq(int irq, void *dev_id) ++{ ++ unsigned long value; ++ struct sm501pwm_info *info = (struct sm501pwm_info *)dev_id; ++ struct pwm_device *pwm; ++ int i; ++ ++ value = sm501_modify_reg(info->dev->parent, SM501_IRQ_STATUS, 0, 0); ++ ++ /* Check is the interrupt is for us */ ++ if (value & (1<<22)) { ++ for (i = 0 ; i < PWM_COUNT ; i++) { ++ /* ++ * Find which pwm triggered the interrupt ++ * and ack ++ */ ++ value = readl(info->regs + i*4); ++ if (value & SM501PWM_IP) ++ writel(value | SM501PWM_IP, info->regs + i*4); ++ ++ pwm = &info->pwm[i]; ++ if (pwm->handler) ++ pwm->handler(pwm); ++ } ++ return IRQ_HANDLED; ++ } ++ ++ return IRQ_NONE; ++} ++ ++static void add_pwm(int id, struct sm501pwm_info *info) ++{ ++ struct pwm_device *pwm = &info->pwm[id]; ++ ++ pwm->use_count = 0; ++ pwm->pwm_id = id; ++ pwm->dev = info->dev; ++ pwm->regs = info->regs + id * 4; ++ ++ mutex_lock(&pwm_lock); ++ list_add_tail(&pwm->node, &pwm_list); ++ mutex_unlock(&pwm_lock); ++} ++ ++static void del_pwm(int id, struct sm501pwm_info *info) ++{ ++ struct pwm_device *pwm = &info->pwm[id]; ++ ++ pwm->use_count = 0; ++ pwm->pwm_id = -1; ++ mutex_lock(&pwm_lock); ++ list_del(&pwm->node); ++ mutex_unlock(&pwm_lock); ++} ++ ++/* Debug fs */ ++static int sm501pwm_show(struct seq_file *s, void *p) ++{ ++ struct pwm_device *pwm; ++ ++ mutex_lock(&pwm_lock); ++ list_for_each_entry(pwm, &pwm_list, node) { ++ if (pwm->use_count) { ++ seq_printf(s, "pwm-%d (%12s) %d %d %s\n", ++ pwm->pwm_id, pwm->label, ++ pwm->duty_ns, pwm->period_ns, ++ pwm->enabled ? "on" : "off"); ++ seq_printf(s, " %08x\n", readl(pwm->regs)); ++ } ++ } ++ mutex_unlock(&pwm_lock); ++ ++ return 0; ++} ++ ++static int sm501pwm_open(struct inode *inode, struct file *file) ++{ ++ return single_open(file, sm501pwm_show, inode->i_private); ++} ++ ++static const struct file_operations sm501pwm_fops = { ++ .open = sm501pwm_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .owner = THIS_MODULE, ++}; ++ ++static int __init sm501pwm_probe(struct platform_device *pdev) ++{ ++ struct sm501pwm_info *info; ++ struct device *dev = &pdev->dev; ++ struct resource *res; ++ int ret = 0; ++ int res_len; ++ int i; ++ ++ info = kzalloc(sizeof(struct sm501pwm_info), GFP_KERNEL); ++ if (!info) { ++ dev_err(dev, "Allocation failure\n"); ++ ret = -ENOMEM; ++ goto err; ++ } ++ info->dev = dev; ++ platform_set_drvdata(pdev, info); ++ ++ /* Get irq number */ ++ info->irq = platform_get_irq(pdev, 0); ++ if (!info->irq) { ++ dev_err(dev, "no irq found\n"); ++ ret = -ENODEV; ++ goto err_alloc; ++ } ++ ++ /* Get regs address */ ++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (res == NULL) { ++ dev_err(dev, "No memory resource found\n"); ++ ret = -ENODEV; ++ goto err_alloc; ++ } ++ info->res = res; ++ res_len = (res->end - res->start)+1; ++ ++ if (!request_mem_region(res->start, res_len, drv_name)) { ++ dev_err(dev, "Can't request iomem resource\n"); ++ ret = -EBUSY; ++ goto err_alloc; ++ } ++ ++ info->regs = ioremap(res->start, res_len); ++ if (!info->regs) { ++ dev_err(dev, "ioremap failed\n"); ++ ret = -ENOMEM; ++ goto err_mem; ++ } ++ ++ ret = request_irq(info->irq, sm501pwm_irq, IRQF_SHARED, drv_name, info); ++ if (ret != 0) { ++ dev_err(dev, "can't get irq\n"); ++ goto err_map; ++ } ++ ++ ++ sm501_unit_power(info->dev->parent, SM501_GATE_GPIO, 1); ++ ++ for (i = 0; i < 3; i++) ++ add_pwm(i, info); ++ ++ dev_info(dev, "SM501 PWM Found at %lx irq %d\n", ++ (unsigned long)info->res->start, info->irq); ++ ++ info->debugfs = debugfs_create_file("pwm", S_IFREG | S_IRUGO, ++ NULL, info, &sm501pwm_fops); ++ ++ ++ return 0; ++ ++err_map: ++ iounmap(info->regs); ++ ++err_mem: ++ release_mem_region(res->start, res_len); ++ ++err_alloc: ++ kfree(info); ++ platform_set_drvdata(pdev, NULL); ++err: ++ return ret; ++} ++ ++static int sm501pwm_remove(struct platform_device *pdev) ++{ ++ struct sm501pwm_info *info = platform_get_drvdata(pdev); ++ int i; ++ ++ if (info->debugfs) ++ debugfs_remove(info->debugfs); ++ ++ for (i = 0; i < 3; i++) { ++ pwm_disable(&info->pwm[i]); ++ del_pwm(i, info); ++ } ++ ++ sm501_unit_power(info->dev->parent, SM501_GATE_GPIO, 0); ++ sm501_modify_reg(info->dev->parent, SM501_IRQ_STATUS, 0, 1<<22); ++ ++ free_irq(info->irq, info); ++ iounmap(info->regs); ++ release_mem_region(info->res->start, ++ (info->res->end - info->res->start)+1); ++ kfree(info); ++ platform_set_drvdata(pdev, NULL); ++ ++ return 0; ++} ++ ++static struct platform_driver sm501pwm_driver = { ++ .probe = sm501pwm_probe, ++ .remove = sm501pwm_remove, ++ .driver = { ++ .name = drv_name, ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++static int __devinit sm501pwm_init(void) ++{ ++ return platform_driver_register(&sm501pwm_driver); ++} ++ ++static void __exit sm501pwm_cleanup(void) ++{ ++ platform_driver_unregister(&sm501pwm_driver); ++} ++ ++module_init(sm501pwm_init); ++module_exit(sm501pwm_cleanup); ++ ++MODULE_AUTHOR("Arnaud Patard "); ++MODULE_DESCRIPTION("SM501 PWM driver"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("platform:sm501-pwm"); +diff --git a/arch/mips/loongson/lemote-2f/Makefile b/arch/mips/loongson/lemote-2f/Makefile +index 4f9eaa3..f945bd7a 100644 +--- a/arch/mips/loongson/lemote-2f/Makefile ++++ b/arch/mips/loongson/lemote-2f/Makefile +@@ -2,7 +2,7 @@ + # Makefile for lemote loongson2f family machines + # + +-obj-y += clock.o machtype.o irq.o reset.o ec_kb3310b.o ++obj-y += clock.o machtype.o irq.o reset.o ec_kb3310b.o platform.o + + # + # Suspend Support +diff --git a/arch/mips/loongson/lemote-2f/irq.c b/arch/mips/loongson/lemote-2f/irq.c +index 6f8682e..2d54037 100644 +--- a/arch/mips/loongson/lemote-2f/irq.c ++++ b/arch/mips/loongson/lemote-2f/irq.c +@@ -11,9 +11,7 @@ + #include + #include + +-#include + #include +-#include + + #include + #include +@@ -117,11 +115,6 @@ void __init mach_init_irq(void) + LOONGSON_INTPOL = LOONGSON_INT_BIT_INT0 | LOONGSON_INT_BIT_INT1; + LOONGSON_INTEDGE &= ~(LOONGSON_INT_BIT_INT0 | LOONGSON_INT_BIT_INT1); + +- /* Sets the first-level interrupt dispatcher. */ +- mips_cpu_irq_init(); +- init_i8259_irqs(); +- bonito_irq_init(); +- + /* setup north bridge irq (bonito) */ + setup_irq(LOONGSON_NORTH_BRIDGE_IRQ, &ip6_irqaction); + /* setup source bridge irq (i8259) */ +diff --git a/arch/mips/loongson/lemote-2f/platform.c b/arch/mips/loongson/lemote-2f/platform.c +new file mode 100644 +index 0000000..5316360 +--- /dev/null ++++ b/arch/mips/loongson/lemote-2f/platform.c +@@ -0,0 +1,48 @@ ++/* ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin, wuzhangjin@gmail.com ++ * ++ * 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. ++ */ ++ ++#include ++#include ++ ++#include ++ ++static struct platform_device yeeloong_pdev = { ++ .name = "yeeloong_laptop", ++ .id = -1, ++}; ++ ++static struct platform_device lynloong_pdev = { ++ .name = "lynloong_pc", ++ .id = -1, ++}; ++ ++static int __init lemote2f_platform_init(void) ++{ ++ struct platform_device *pdev = NULL; ++ ++ switch (mips_machtype) { ++ case MACH_LEMOTE_YL2F89: ++ pdev = &yeeloong_pdev; ++ break; ++ case MACH_LEMOTE_LL2F: ++ pdev = &lynloong_pdev; ++ break; ++ default: ++ break; ++ ++ } ++ ++ if (pdev != NULL) ++ return platform_device_register(pdev); ++ ++ return -ENODEV; ++} ++ ++arch_initcall(lemote2f_platform_init); +diff --git a/arch/mips/loongson/lemote-2f/pm.c b/arch/mips/loongson/lemote-2f/pm.c +index cac4d38..2b6e0ef 100644 +--- a/arch/mips/loongson/lemote-2f/pm.c ++++ b/arch/mips/loongson/lemote-2f/pm.c +@@ -140,10 +140,10 @@ int wakeup_loongson(void) + + void __weak mach_suspend(void) + { +- disable_mfgpt0_counter(); ++ disable_mfgpt_counter(); + } + + void __weak mach_resume(void) + { +- enable_mfgpt0_counter(); ++ enable_mfgpt_counter(); + } +diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c +index 0b4e2e3..60fad2c 100644 +--- a/arch/mips/math-emu/cp1emu.c ++++ b/arch/mips/math-emu/cp1emu.c +@@ -7,6 +7,9 @@ + * Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com + * Copyright (C) 2000 MIPS Technologies, Inc. + * ++ * Loongson instruction support ++ * Copyright (C) 2011 Mark H Weaver ++ * + * This program is free software; you can distribute it and/or modify it + * under the terms of the GNU General Public License (Version 2) as + * published by the Free Software Foundation. +@@ -58,6 +61,14 @@ + #endif + #define __mips 4 + ++#ifdef __loongson_fp ++#undef __loongson_fp ++#endif ++#if __mips >= 4 && __mips != 32 ++/* Include support for Loongson floating point instructions */ ++#define __loongson_fp 1 ++#endif ++ + /* Function which emulates a floating point instruction. */ + + static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *, +@@ -67,6 +78,10 @@ static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *, + static int fpux_emu(struct pt_regs *, + struct mips_fpu_struct *, mips_instruction, void *__user *); + #endif ++#ifdef __loongson_fp ++static int loongson_spec2_emu(struct pt_regs *, ++ struct mips_fpu_struct *, mips_instruction, void *__user *); ++#endif + + /* Further private data for which no space exists in mips_fpu_struct */ + +@@ -896,6 +911,14 @@ static inline int cop1_64bit(struct pt_regs *xcp) + #define DPFROMREG(dp, x) DIFROMREG((dp).bits, x) + #define DPTOREG(dp, x) DITOREG((dp).bits, x) + ++/* Support for Loongson paired single floating-point format */ ++#define PSIFROMREG(si1, si2, x) ({ u64 di; DIFROMREG(di, x); \ ++ (si1) = (u32)di; (si2) = (u32)(di >> 32); }) ++#define PSITOREG(si1, si2, x) DITOREG((si1) | ((u64)(si2) << 32), x) ++ ++#define PSPFROMREG(sp1, sp2, x) PSIFROMREG((sp1).bits, (sp2).bits, x) ++#define PSPTOREG(sp1, sp2, x) PSITOREG((sp1).bits, (sp2).bits, x) ++ + /* + * Emulate the single floating point instruction pointed at by EPC. + * Two instructions if the instruction is in a branch delay slot. +@@ -1291,6 +1314,15 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + #endif + ++#ifdef __loongson_fp ++ case spec2_op:{ ++ int sig = loongson_spec2_emu(xcp, ctx, ir, fault_addr); ++ if (sig) ++ return sig; ++ break; ++ } ++#endif ++ + default: + sigill: + return SIGILL; +@@ -1370,6 +1402,172 @@ DEF3OP(msub, dp, ieee754dp_mul, ieee754dp_sub, ); + DEF3OP(nmadd, dp, ieee754dp_mul, ieee754dp_add, ieee754dp_neg); + DEF3OP(nmsub, dp, ieee754dp_mul, ieee754dp_sub, ieee754dp_neg); + ++#ifdef __loongson_fp ++static int loongson_spec2_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, ++ mips_instruction ir, void *__user *fault_addr) ++{ ++ int rfmt; /* resulting format */ ++ unsigned rcsr = 0; /* resulting csr */ ++ union { ++ ieee754dp d; ++ struct { ++ ieee754sp s; ++ ieee754sp s2; ++ }; ++ } rv; /* resulting value */ ++ ++ /* XXX maybe add a counter for loongson spec2 fp instructions? */ ++ /* MIPS_FPU_EMU_INC_STATS(cp1xops); */ ++ ++ switch (rfmt = (MIPSInst_FFMT(ir) & 0xf)) { ++ case s_fmt:{ ++ ieee754sp(*handler) (ieee754sp, ieee754sp, ieee754sp); ++ ieee754sp fd, fs, ft; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ case loongson_madd_op: ++ handler = fpemu_sp_madd; ++ goto scoptop; ++ case loongson_msub_op: ++ handler = fpemu_sp_msub; ++ goto scoptop; ++ case loongson_nmadd_op: ++ handler = fpemu_sp_nmadd; ++ goto scoptop; ++ case loongson_nmsub_op: ++ handler = fpemu_sp_nmsub; ++ goto scoptop; ++ ++ scoptop: ++ SPFROMREG(fd, MIPSInst_FD(ir)); ++ SPFROMREG(fs, MIPSInst_FS(ir)); ++ SPFROMREG(ft, MIPSInst_FT(ir)); ++ rv.s = (*handler) (fd, fs, ft); ++ ++ copcsr: ++ if (ieee754_cxtest(IEEE754_INEXACT)) ++ rcsr |= FPU_CSR_INE_X | FPU_CSR_INE_S; ++ if (ieee754_cxtest(IEEE754_UNDERFLOW)) ++ rcsr |= FPU_CSR_UDF_X | FPU_CSR_UDF_S; ++ if (ieee754_cxtest(IEEE754_OVERFLOW)) ++ rcsr |= FPU_CSR_OVF_X | FPU_CSR_OVF_S; ++ if (ieee754_cxtest(IEEE754_INVALID_OPERATION)) ++ rcsr |= FPU_CSR_INV_X | FPU_CSR_INV_S; ++ ++ break; ++ ++ default: ++ return SIGILL; ++ } ++ break; ++ } ++ ++ case d_fmt:{ ++ ieee754dp(*handler) (ieee754dp, ieee754dp, ieee754dp); ++ ieee754dp fd, fs, ft; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ case loongson_madd_op: ++ handler = fpemu_dp_madd; ++ goto dcoptop; ++ case loongson_msub_op: ++ handler = fpemu_dp_msub; ++ goto dcoptop; ++ case loongson_nmadd_op: ++ handler = fpemu_dp_nmadd; ++ goto dcoptop; ++ case loongson_nmsub_op: ++ handler = fpemu_dp_nmsub; ++ goto dcoptop; ++ ++ dcoptop: ++ DPFROMREG(fd, MIPSInst_FD(ir)); ++ DPFROMREG(fs, MIPSInst_FS(ir)); ++ DPFROMREG(ft, MIPSInst_FT(ir)); ++ rv.d = (*handler) (fd, fs, ft); ++ goto copcsr; ++ ++ default: ++ return SIGILL; ++ } ++ break; ++ } ++ ++ case ps_fmt:{ ++ ieee754sp(*handler) (ieee754sp, ieee754sp, ieee754sp); ++ struct _ieee754_csr ieee754_csr_save; ++ ieee754sp fd1, fs1, ft1; ++ ieee754sp fd2, fs2, ft2; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ case loongson_madd_op: ++ handler = fpemu_sp_madd; ++ goto pscoptop; ++ case loongson_msub_op: ++ handler = fpemu_sp_msub; ++ goto pscoptop; ++ case loongson_nmadd_op: ++ handler = fpemu_sp_nmadd; ++ goto pscoptop; ++ case loongson_nmsub_op: ++ handler = fpemu_sp_nmsub; ++ goto pscoptop; ++ ++ pscoptop: ++ PSPFROMREG(fd1, fd2, MIPSInst_FD(ir)); ++ PSPFROMREG(fs1, fs2, MIPSInst_FS(ir)); ++ PSPFROMREG(ft1, ft2, MIPSInst_FT(ir)); ++ rv.s = (*handler) (fd1, fs1, ft1); ++ ieee754_csr_save = ieee754_csr; ++ rv.s2 = (*handler) (fd2, fs2, ft2); ++ ieee754_csr.cx |= ieee754_csr_save.cx; ++ ieee754_csr.sx |= ieee754_csr_save.sx; ++ goto copcsr; ++ ++ default: ++ return SIGILL; ++ } ++ break; ++ } ++ ++ default: ++ return SIGILL; ++ } ++ ++ /* ++ * Update the fpu CSR register for this operation. ++ * If an exception is required, generate a tidy SIGFPE exception, ++ * without updating the result register. ++ * Note: cause exception bits do not accumulate, they are rewritten ++ * for each op; only the flag/sticky bits accumulate. ++ */ ++ ctx->fcr31 = (ctx->fcr31 & ~FPU_CSR_ALL_X) | rcsr; ++ if ((ctx->fcr31 >> 5) & ctx->fcr31 & FPU_CSR_ALL_E) { ++ /*printk ("SIGFPE: fpu csr = %08x\n",ctx->fcr31); */ ++ return SIGFPE; ++ } ++ ++ /* ++ * Now we can safely write the result back to the register file. ++ */ ++ switch (rfmt) { ++ case d_fmt: ++ DPTOREG(rv.d, MIPSInst_FD(ir)); ++ break; ++ case s_fmt: ++ SPTOREG(rv.s, MIPSInst_FD(ir)); ++ break; ++ case ps_fmt: ++ PSPTOREG(rv.s, rv.s2, MIPSInst_FD(ir)); ++ break; ++ default: ++ return SIGILL; ++ } ++ ++ return 0; ++} ++#endif ++ + static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + mips_instruction ir, void *__user *fault_addr) + { +@@ -1463,7 +1661,7 @@ static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + + default: +- return SIGILL; ++ goto SIGILL_unless_prefx_op; + } + break; + } +@@ -1533,7 +1731,7 @@ static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + goto copcsr; + + default: +- return SIGILL; ++ goto SIGILL_unless_prefx_op; + } + break; + } +@@ -1546,6 +1744,11 @@ static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + + default: ++ SIGILL_unless_prefx_op: ++ if (MIPSInst_FUNC(ir) == prefx_op) { ++ /* ignore prefx operation */ ++ break; ++ } + return SIGILL; + } + +@@ -1566,7 +1769,12 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + unsigned cond; + union { + ieee754dp d; +- ieee754sp s; ++ struct { ++ ieee754sp s; ++#ifdef __loongson_fp ++ ieee754sp s2; /* for Loongson paired singles */ ++#endif ++ }; + int w; + #ifdef __mips64 + s64 l; +@@ -1638,7 +1846,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + case fmov_op: + /* an easy one */ + SPFROMREG(rv.s, MIPSInst_FS(ir)); +- goto copcsr; ++ break; + + /* binary op on handler */ + scopbop: +@@ -1825,7 +2033,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + case fmov_op: + /* an easy one */ + DPFROMREG(rv.d, MIPSInst_FS(ir)); +- goto copcsr; ++ break; + + /* binary op on handler */ + dcopbop:{ +@@ -1936,6 +2144,83 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + } + ++#ifdef __loongson_fp ++ case ps_fmt:{ /* 6 */ ++ /* Support for Loongson paired single fp instructions */ ++ union { ++ ieee754sp(*b) (ieee754sp, ieee754sp); ++ ieee754sp(*u) (ieee754sp); ++ } handler; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ /* binary ops */ ++ case fadd_op: ++ handler.b = ieee754sp_add; ++ goto pscopbop; ++ case fsub_op: ++ handler.b = ieee754sp_sub; ++ goto pscopbop; ++ case fmul_op: ++ handler.b = ieee754sp_mul; ++ goto pscopbop; ++ ++ /* unary ops */ ++ case fabs_op: ++ handler.u = ieee754sp_abs; ++ goto pscopuop; ++ case fneg_op: ++ handler.u = ieee754sp_neg; ++ goto pscopuop; ++ case fmov_op: ++ /* an easy one */ ++ PSPFROMREG(rv.s, rv.s2, MIPSInst_FS(ir)); ++ break; ++ ++ pscopbop: /* paired binary op handler */ ++ { ++ struct _ieee754_csr ieee754_csr_save; ++ ieee754sp fs1, ft1; ++ ieee754sp fs2, ft2; ++ ++ PSPFROMREG(fs1, fs2, MIPSInst_FS(ir)); ++ PSPFROMREG(ft1, ft2, MIPSInst_FT(ir)); ++ rv.s = (*handler.b) (fs1, ft1); ++ ieee754_csr_save = ieee754_csr; ++ rv.s2 = (*handler.b) (fs2, ft2); ++ ieee754_csr.cx |= ieee754_csr_save.cx; ++ ieee754_csr.sx |= ieee754_csr_save.sx; ++ goto copcsr; ++ } ++ pscopuop: /* paired unary op handler */ ++ { ++ struct _ieee754_csr ieee754_csr_save; ++ ieee754sp fs1; ++ ieee754sp fs2; ++ ++ PSPFROMREG(fs1, fs2, MIPSInst_FS(ir)); ++ rv.s = (*handler.u) (fs1); ++ ieee754_csr_save = ieee754_csr; ++ rv.s2 = (*handler.u) (fs2); ++ ieee754_csr.cx |= ieee754_csr_save.cx; ++ ieee754_csr.sx |= ieee754_csr_save.sx; ++ goto copcsr; ++ } ++ break; ++ ++ default: ++ if (MIPSInst_FUNC(ir) >= fcmp_op) { ++ /* Loongson fp hardware handles all ++ cases of fp compare insns, so we ++ shouldn't have to */ ++ printk ("Loongson paired-single fp compare" ++ " unimplemented in cp1emu.c\n"); ++ } ++ return SIGILL; ++ } ++ break; ++ } ++#endif ++ + case w_fmt:{ + ieee754sp fs; + +@@ -2025,6 +2310,11 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + DITOREG(rv.l, MIPSInst_FD(ir)); + break; + #endif ++#ifdef __loongson_fp ++ case ps_fmt: ++ PSPTOREG(rv.s, rv.s2, MIPSInst_FD(ir)); ++ break; ++#endif + default: + return SIGILL; + } +diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c +index 44b6dff..e782fae 100644 +--- a/arch/mips/mm/dma-default.c ++++ b/arch/mips/mm/dma-default.c +@@ -336,7 +336,7 @@ int mips_dma_supported(struct device *dev, u64 mask) + return plat_dma_supported(dev, mask); + } + +-void dma_cache_sync(struct device *dev, void *vaddr, size_t size, ++void mips_dma_cache_sync(struct device *dev, void *vaddr, size_t size, + enum dma_data_direction direction) + { + BUG_ON(direction == DMA_NONE); +@@ -345,8 +345,6 @@ void dma_cache_sync(struct device *dev, void *vaddr, size_t size, + __dma_sync_virtual(vaddr, size, direction); + } + +-EXPORT_SYMBOL(dma_cache_sync); +- + static struct dma_map_ops mips_default_dma_map_ops = { + .alloc = mips_dma_alloc_coherent, + .free = mips_dma_free_coherent, +diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile +index 137f2a6..b9845dc 100644 +--- a/arch/mips/pci/Makefile ++++ b/arch/mips/pci/Makefile +@@ -29,6 +29,7 @@ obj-$(CONFIG_LASAT) += pci-lasat.o + obj-$(CONFIG_MIPS_COBALT) += fixup-cobalt.o + obj-$(CONFIG_LEMOTE_FULOONG2E) += fixup-fuloong2e.o ops-loongson2.o + obj-$(CONFIG_LEMOTE_MACH2F) += fixup-lemote2f.o ops-loongson2.o ++obj-$(CONFIG_DEXXON_GDIUM) += fixup-gdium.o ops-loongson2.o + obj-$(CONFIG_MIPS_MALTA) += fixup-malta.o pci-malta.o + obj-$(CONFIG_PMC_MSP7120_GW) += fixup-pmcmsp.o ops-pmcmsp.o + obj-$(CONFIG_PMC_MSP7120_EVAL) += fixup-pmcmsp.o ops-pmcmsp.o +diff --git a/arch/mips/pci/fixup-gdium.c b/arch/mips/pci/fixup-gdium.c +new file mode 100644 +index 0000000..b296220 +--- /dev/null ++++ b/arch/mips/pci/fixup-gdium.c +@@ -0,0 +1,90 @@ ++/* ++ * Copyright (C) 2010 yajin ++ * ++ * 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. ++ */ ++ ++#include ++#include ++ ++#include ++/* ++ * http://www.pcidatabase.com ++ * GDIUM has different PCI mapping ++ * slot 13 (0x1814/0x0301) -> RaLink rt2561 Wireless-G PCI ++ * slog 14 (0x126f/0x0501) -> sm501 ++ * slot 15 (0x1033/0x0035) -> NEC Dual OHCI controllers ++ * plus Single EHCI controller ++ * slot 16 (0x10ec/0x8139) -> Realtek 8139c ++ * slot 17 (0x1033/0x00e0) -> NEC USB 2.0 Host Controller ++ */ ++ ++#undef INT_IRQA ++#undef INT_IRQB ++#undef INT_IRQC ++#undef INT_IRQD ++#define INT_IRQA 36 ++#define INT_IRQB 37 ++#define INT_IRQC 38 ++#define INT_IRQD 39 ++ ++int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) ++{ ++ int irq = 0; ++ ++ switch (slot) { ++ case 13: ++ irq = INT_IRQC + ((pin - 1) & 3); ++ break; ++ case 14: ++ irq = INT_IRQA; ++ break; ++ case 15: ++#if CONFIG_GDIUM_VERSION > 2 ++ irq = INT_IRQB; ++#else ++ irq = INT_IRQA + ((pin - 1) & 3); ++#endif ++ break; ++ case 16: ++ irq = INT_IRQD; ++ break; ++#if CONFIG_GDIUM_VERSION > 2 ++ case 17: ++ irq = INT_IRQC; ++ break; ++#endif ++ default: ++ pr_info(" strange pci slot number %d on gdium.\n", slot); ++ break; ++ } ++ return irq; ++} ++ ++/* Do platform specific device initialization at pci_enable_device() time */ ++int pcibios_plat_dev_init(struct pci_dev *dev) ++{ ++ return 0; ++} ++ ++/* Fixups for the USB host controllers */ ++static void __init gdium_usb_host_fixup(struct pci_dev *dev) ++{ ++ unsigned int val; ++ pci_read_config_dword(dev, 0xe0, &val); ++#if CONFIG_GDIUM_VERSION > 2 ++ pci_write_config_dword(dev, 0xe0, (val & ~3) | 0x3); ++#else ++ pci_write_config_dword(dev, 0xe0, (val & ~7) | 0x5); ++ pci_write_config_dword(dev, 0xe4, 1<<5); ++#endif ++} ++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_USB, ++ gdium_usb_host_fixup); ++#if CONFIG_GDIUM_VERSION > 2 ++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_CT_65550, ++ gdium_usb_host_fixup); ++#endif +diff --git a/arch/mips/power/hibernate.S b/arch/mips/power/hibernate.S +index 32a7c82..7e0277a 100644 +--- a/arch/mips/power/hibernate.S ++++ b/arch/mips/power/hibernate.S +@@ -43,7 +43,6 @@ LEAF(swsusp_arch_resume) + bne t1, t3, 1b + PTR_L t0, PBE_NEXT(t0) + bnez t0, 0b +- jal local_flush_tlb_all /* Avoid TLB mismatch after kernel resume */ + PTR_LA t0, saved_regs + PTR_L ra, PT_R31(t0) + PTR_L sp, PT_R29(t0) +diff --git a/drivers/ata/pata_cs5536.c b/drivers/ata/pata_cs5536.c +index 0448860..fa7cfab 100644 +--- a/drivers/ata/pata_cs5536.c ++++ b/drivers/ata/pata_cs5536.c +@@ -46,8 +46,6 @@ static int use_msr; + module_param_named(msr, use_msr, int, 0644); + MODULE_PARM_DESC(msr, "Force using MSR to configure IDE function (Default: 0)"); + #else +-#undef rdmsr /* avoid accidental MSR usage on, e.g. x86-64 */ +-#undef wrmsr + #define rdmsr(x, y, z) do { } while (0) + #define wrmsr(x, y, z) do { } while (0) + #define use_msr 0 +diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig +index f722001..5af02de 100644 +--- a/drivers/hid/Kconfig ++++ b/drivers/hid/Kconfig +@@ -786,6 +786,13 @@ config HID_ZYDACRON + ---help--- + Support for Zydacron remote control. + ++config HID_GDIUM ++ bool "Gdium Fn keys support" if EMBEDDED ++ depends on USB_HID && DEXXON_GDIUM ++ default !EMBEDDED ++ ---help--- ++ Support for Functions keys available on Gdiums. ++ + config HID_SENSOR_HUB + tristate "HID Sensors framework support" + depends on HID +diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile +index 30e4431..e41ca68 100644 +--- a/drivers/hid/Makefile ++++ b/drivers/hid/Makefile +@@ -115,6 +115,7 @@ obj-$(CONFIG_HID_ZEROPLUS) += hid-zpff.o + obj-$(CONFIG_HID_ZYDACRON) += hid-zydacron.o + obj-$(CONFIG_HID_WACOM) += hid-wacom.o + obj-$(CONFIG_HID_WALTOP) += hid-waltop.o ++obj-$(CONFIG_HID_GDIUM) += hid-gdium.o + obj-$(CONFIG_HID_WIIMOTE) += hid-wiimote.o + obj-$(CONFIG_HID_SENSOR_HUB) += hid-sensor-hub.o + +diff --git a/drivers/hid/hid-gdium.c b/drivers/hid/hid-gdium.c +new file mode 100644 +index 0000000..67cc095 +--- /dev/null ++++ b/drivers/hid/hid-gdium.c +@@ -0,0 +1,210 @@ ++/* ++ * hid-gdium -- Gdium laptop function keys ++ * ++ * Arnaud Patard ++ * ++ * Based on hid-apple.c ++ * ++ * 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. ++ */ ++ ++ ++#include ++#include ++#include ++#include ++ ++#include "hid-ids.h" ++ ++#define GDIUM_FN_ON 1 ++ ++static int fnmode = GDIUM_FN_ON; ++module_param(fnmode, int, 0644); ++MODULE_PARM_DESC(fnmode, "Mode of fn key on Gdium (0 = disabled, 1 = Enabled)"); ++ ++struct gdium_data { ++ unsigned int fn_on; ++}; ++ ++ ++struct gdium_key_translation { ++ u16 from; ++ u16 to; ++}; ++ ++static struct gdium_key_translation gdium_fn_keys[] = { ++ { KEY_F1, KEY_CAMERA }, ++ { KEY_F2, KEY_CONNECT }, ++ { KEY_F3, KEY_MUTE }, ++ { KEY_F4, KEY_VOLUMEUP}, ++ { KEY_F5, KEY_VOLUMEDOWN }, ++ { KEY_F6, KEY_SWITCHVIDEOMODE }, ++ { KEY_F7, KEY_F19 }, /* F7+12. Have to use existant keycodes */ ++ { KEY_F8, KEY_BRIGHTNESSUP }, ++ { KEY_F9, KEY_BRIGHTNESSDOWN }, ++ { KEY_F10, KEY_SLEEP }, ++ { KEY_F11, KEY_PROG1 }, ++ { KEY_F12, KEY_PROG2 }, ++ { KEY_UP, KEY_PAGEUP }, ++ { KEY_DOWN, KEY_PAGEDOWN }, ++ { KEY_INSERT, KEY_NUMLOCK }, ++ { KEY_DELETE, KEY_SCROLLLOCK }, ++ { KEY_T, KEY_STOPCD }, ++ { KEY_F, KEY_PREVIOUSSONG }, ++ { KEY_H, KEY_NEXTSONG }, ++ { KEY_G, KEY_PLAYPAUSE }, ++ { } ++}; ++ ++static struct gdium_key_translation *gdium_find_translation( ++ struct gdium_key_translation *table, u16 from) ++{ ++ struct gdium_key_translation *trans; ++ ++ /* Look for the translation */ ++ for (trans = table; trans->from; trans++) ++ if (trans->from == from) ++ return trans; ++ return NULL; ++} ++ ++static int hidinput_gdium_event(struct hid_device *hid, struct input_dev *input, ++ struct hid_usage *usage, __s32 value) ++{ ++ struct gdium_data *data = hid_get_drvdata(hid); ++ struct gdium_key_translation *trans; ++ int do_translate; ++ ++ if (usage->type != EV_KEY) ++ return 0; ++ ++ if ((usage->code == KEY_FN)) { ++ data->fn_on = !!value; ++ input_event(input, usage->type, usage->code, value); ++ return 1; ++ } ++ ++ if (fnmode) { ++ trans = gdium_find_translation(gdium_fn_keys, usage->code); ++ if (trans) { ++ do_translate = data->fn_on; ++ if (do_translate) { ++ input_event(input, usage->type, trans->to, value); ++ return 1; ++ } ++ } ++ } ++ ++ return 0; ++} ++ ++static int gdium_input_event(struct hid_device *hdev, struct hid_field *field, ++ struct hid_usage *usage, __s32 value) ++{ ++ if (!(hdev->claimed & HID_CLAIMED_INPUT) || !field->hidinput || !usage->type) ++ return 0; ++ ++ if (hidinput_gdium_event(hdev, field->hidinput->input, usage, value)) ++ return 1; ++ ++ return 0; ++} ++ ++ ++static void gdium_input_setup(struct input_dev *input) ++{ ++ struct gdium_key_translation *trans; ++ ++ set_bit(KEY_NUMLOCK, input->keybit); ++ ++ /* Enable all needed keys */ ++ for (trans = gdium_fn_keys; trans->from; trans++) ++ set_bit(trans->to, input->keybit); ++} ++ ++static int gdium_input_mapping(struct hid_device *hdev, struct hid_input *hi, ++ struct hid_field *field, struct hid_usage *usage, ++ unsigned long **bit, int *max) ++{ ++ if (((usage->hid & HID_USAGE_PAGE) == HID_UP_KEYBOARD) ++ && ((usage->hid & HID_USAGE) == 0x82)) { ++ hid_map_usage_clear(hi, usage, bit, max, EV_KEY, KEY_FN); ++ gdium_input_setup(hi->input); ++ return 1; ++ } ++ return 0; ++} ++ ++static int gdium_input_probe(struct hid_device *hdev, const struct hid_device_id *id) ++{ ++ struct gdium_data *data; ++ int ret; ++ ++ data = kzalloc(sizeof(*data), GFP_KERNEL); ++ if (!data) { ++ dev_err(&hdev->dev, "can't alloc gdium keyboard data\n"); ++ return -ENOMEM; ++ } ++ ++ hid_set_drvdata(hdev, data); ++ ++ ret = hid_parse(hdev); ++ if (ret) { ++ dev_err(&hdev->dev, "parse failed\n"); ++ goto err_free; ++ } ++ ++ ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); ++ if (ret) { ++ dev_err(&hdev->dev, "hw start failed\n"); ++ goto err_free; ++ } ++ ++ return 0; ++err_free: ++ kfree(data); ++ return ret; ++} ++static void gdium_input_remove(struct hid_device *hdev) ++{ ++ hid_hw_stop(hdev); ++ kfree(hid_get_drvdata(hdev)); ++} ++ ++static const struct hid_device_id gdium_input_devices[] = { ++ { HID_USB_DEVICE(USB_VENDOR_ID_GDIUM, USB_DEVICE_ID_GDIUM) }, ++ {} ++}; ++MODULE_DEVICE_TABLE(hid, gdium_input_devices); ++ ++static struct hid_driver gdium_input_driver = { ++ .name = "gdium-fnkeys", ++ .id_table = gdium_input_devices, ++ .probe = gdium_input_probe, ++ .remove = gdium_input_remove, ++ .event = gdium_input_event, ++ .input_mapping = gdium_input_mapping, ++}; ++ ++static int gdium_input_init(void) ++{ ++ int ret; ++ ++ ret = hid_register_driver(&gdium_input_driver); ++ if (ret) ++ pr_err("can't register gdium keyboard driver\n"); ++ ++ return ret; ++} ++static void gdium_input_exit(void) ++{ ++ hid_unregister_driver(&gdium_input_driver); ++} ++ ++module_init(gdium_input_init); ++module_exit(gdium_input_exit); ++MODULE_LICENSE("GPL"); ++ +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h +index 6e12cd0..1ce18ed 100644 +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -956,6 +956,9 @@ + #define USB_VENDOR_ID_ZYTRONIC 0x14c8 + #define USB_DEVICE_ID_ZYTRONIC_ZXY100 0x0005 + ++#define USB_VENDOR_ID_GDIUM 0x04B4 ++#define USB_DEVICE_ID_GDIUM 0xe001 ++ + #define USB_VENDOR_ID_PRIMAX 0x0461 + #define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05 + +diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig +index c5eec02..9e4eb1d 100644 +--- a/drivers/i2c/busses/Kconfig ++++ b/drivers/i2c/busses/Kconfig +@@ -1002,7 +1002,7 @@ config SCx200_I2C_SDA + + config SCx200_ACB + tristate "Geode ACCESS.bus support" +- depends on X86_32 && PCI ++ depends on PCI + help + Enable the use of the ACCESS.bus controllers on the Geode SCx200 and + SC1100 processors and the CS5535 and CS5536 Geode companion devices. +diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c +index 376f2dc..b576801 100644 +--- a/drivers/ide/ide-iops.c ++++ b/drivers/ide/ide-iops.c +@@ -27,6 +27,10 @@ + #include + #include + ++#ifdef CONFIG_LEMOTE_MACH2F ++#include ++#endif ++ + void SELECT_MASK(ide_drive_t *drive, int mask) + { + const struct ide_port_ops *port_ops = drive->hwif->port_ops; +@@ -300,6 +304,11 @@ void ide_check_nien_quirk_list(ide_drive_t *drive) + { + const char **list, *m = (char *)&drive->id[ATA_ID_PROD]; + ++#ifdef CONFIG_LEMOTE_MACH2F ++ if (mips_machtype != MACH_LEMOTE_YL2F89) ++ return; ++#endif ++ + for (list = nien_quirk_list; *list != NULL; list++) + if (strstr(m, *list) != NULL) { + drive->dev_flags |= IDE_DFLAG_NIEN_QUIRK; +diff --git a/drivers/mfd/sm501.c b/drivers/mfd/sm501.c +index e7dc441..124e8c3 100644 +--- a/drivers/mfd/sm501.c ++++ b/drivers/mfd/sm501.c +@@ -58,7 +58,7 @@ struct sm501_gpio { + struct sm501_gpio { + /* no gpio support, empty definition for sm501_devdata. */ + }; +-#endif ++#endif /* CONFIG_MFD_SM501_GPIO */ + + struct sm501_devdata { + spinlock_t reg_lock; +@@ -1135,6 +1135,22 @@ static inline int sm501_gpio_isregistered(struct sm501_devdata *sm) + { + return sm->gpio.registered; + } ++ ++void sm501_configure_gpio(struct device *dev, unsigned int gpio, unsigned ++ char mode) ++{ ++ unsigned long set, reg, offset = gpio; ++ ++ if (offset >= 32) { ++ reg = SM501_GPIO63_32_CONTROL; ++ offset = gpio - 32; ++ } else ++ reg = SM501_GPIO31_0_CONTROL; ++ ++ set = mode ? 1 << offset : 0; ++ ++ sm501_modify_reg(dev, reg, set, 0); ++} + #else + static inline int sm501_register_gpio(struct sm501_devdata *sm) + { +@@ -1154,7 +1170,13 @@ static inline int sm501_gpio_isregistered(struct sm501_devdata *sm) + { + return 0; + } +-#endif ++ ++void sm501_configure_gpio(struct device *dev, unsigned int gpio, ++ unsigned char mode) ++{ ++} ++#endif /* CONFIG_MFD_SM501_GPIO */ ++EXPORT_SYMBOL_GPL(sm501_configure_gpio); + + static int sm501_register_gpio_i2c_instance(struct sm501_devdata *sm, + struct sm501_platdata_gpio_i2c *iic) +@@ -1209,6 +1231,20 @@ static int sm501_register_gpio_i2c(struct sm501_devdata *sm, + return 0; + } + ++/* register sm501 PWM device */ ++static int sm501_register_pwm(struct sm501_devdata *sm) ++{ ++ struct platform_device *pdev; ++ ++ pdev = sm501_create_subdev(sm, "sm501-pwm", 2, 0); ++ if (!pdev) ++ return -ENOMEM; ++ sm501_create_subio(sm, &pdev->resource[0], 0x10020, 0xC); ++ sm501_create_irq(sm, &pdev->resource[1]); ++ ++ return sm501_register_device(sm, pdev); ++} ++ + /* sm501_dbg_regs + * + * Debug attribute to attach to parent device to show core registers +@@ -1367,6 +1403,8 @@ static int sm501_init_dev(struct sm501_devdata *sm) + sm501_register_uart(sm, idata->devices); + if (idata->devices & SM501_USE_GPIO) + sm501_register_gpio(sm); ++ if (idata->devices & SM501_USE_PWM) ++ sm501_register_pwm(sm); + } + + if (pdata && pdata->gpio_i2c != NULL && pdata->gpio_i2c_nr > 0) { +@@ -1553,10 +1591,15 @@ static struct sm501_initdata sm501_pci_initdata = { + .devices = SM501_USE_ALL, + + /* Errata AB-3 says that 72MHz is the fastest available +- * for 33MHZ PCI with proper bus-mastering operation */ +- ++ * for 33MHZ PCI with proper bus-mastering operation ++ * For gdium, it works under 84&112M clock freq.*/ ++#ifdef CONFIG_DEXXON_GDIUM ++ .mclk = 84 * MHZ, ++ .m1xclk = 112 * MHZ, ++#else + .mclk = 72 * MHZ, + .m1xclk = 144 * MHZ, ++#endif + }; + + static struct sm501_platdata_fbsub sm501_pdata_fbsub = { +diff --git a/drivers/net/titan_ge.c b/drivers/net/titan_ge.c +new file mode 100644 +index 0000000..dc137bf8 +--- /dev/null ++++ b/drivers/net/titan_ge.c +@@ -0,0 +1,2069 @@ ++/* ++ * drivers/net/titan_ge.c - Driver for Titan ethernet ports ++ * ++ * Copyright (C) 2003 PMC-Sierra Inc. ++ * Author : Manish Lachwani (lachwani@pmc-sierra.com) ++ * ++ * 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. ++ */ ++ ++/* ++ * The MAC unit of the Titan consists of the following: ++ * ++ * -> XDMA Engine to move data to from the memory to the MAC packet FIFO ++ * -> FIFO is where the incoming and outgoing data is placed ++ * -> TRTG is the unit that pulls the data from the FIFO for Tx and pushes ++ * the data into the FIFO for Rx ++ * -> TMAC is the outgoing MAC interface and RMAC is the incoming. ++ * -> AFX is the address filtering block ++ * -> GMII block to communicate with the PHY ++ * ++ * Rx will look like the following: ++ * GMII --> RMAC --> AFX --> TRTG --> Rx FIFO --> XDMA --> CPU memory ++ * ++ * Tx will look like the following: ++ * CPU memory --> XDMA --> Tx FIFO --> TRTG --> TMAC --> GMII ++ * ++ * The Titan driver has support for the following performance features: ++ * -> Rx side checksumming ++ * -> Jumbo Frames ++ * -> Interrupt Coalscing ++ * -> Rx NAPI ++ * -> SKB Recycling ++ * -> Transmit/Receive descriptors in SRAM ++ * -> Fast routing for IP forwarding ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* For MII specifc registers, titan_mdio.h should be included */ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "titan_ge.h" ++#include "titan_mdio.h" ++ ++/* Static Function Declarations */ ++static int titan_ge_eth_open(struct net_device *); ++static void titan_ge_eth_stop(struct net_device *); ++static struct net_device_stats *titan_ge_get_stats(struct net_device *); ++static int titan_ge_init_rx_desc_ring(titan_ge_port_info *, int, int, ++ unsigned long, unsigned long, ++ unsigned long); ++static int titan_ge_init_tx_desc_ring(titan_ge_port_info *, int, ++ unsigned long, unsigned long); ++ ++static int titan_ge_open(struct net_device *); ++static int titan_ge_start_xmit(struct sk_buff *, struct net_device *); ++static int titan_ge_stop(struct net_device *); ++ ++static unsigned long titan_ge_tx_coal(unsigned long, int); ++ ++static void titan_ge_port_reset(unsigned int); ++static int titan_ge_free_tx_queue(titan_ge_port_info *); ++static int titan_ge_rx_task(struct net_device *, titan_ge_port_info *); ++static int titan_ge_port_start(struct net_device *, titan_ge_port_info *); ++ ++static int titan_ge_return_tx_desc(titan_ge_port_info *, int); ++ ++/* ++ * Some configuration for the FIFO and the XDMA channel needs ++ * to be done only once for all the ports. This flag controls ++ * that ++ */ ++static unsigned long config_done; ++ ++/* ++ * One time out of memory flag ++ */ ++static unsigned int oom_flag; ++ ++static int titan_ge_poll(struct net_device *netdev, int *budget); ++ ++static int titan_ge_receive_queue(struct net_device *, unsigned int); ++ ++static struct platform_device *titan_ge_device[3]; ++ ++/* MAC Address */ ++extern unsigned char titan_ge_mac_addr_base[6]; ++ ++unsigned long titan_ge_base; ++static unsigned long titan_ge_sram; ++ ++static char titan_string[] = "titan"; ++ ++/* ++ * The Titan GE has two alignment requirements: ++ * -> skb->data to be cacheline aligned (32 byte) ++ * -> IP header alignment to 16 bytes ++ * ++ * The latter is not implemented. So, that results in an extra copy on ++ * the Rx. This is a big performance hog. For the former case, the ++ * dev_alloc_skb() has been replaced with titan_ge_alloc_skb(). The size ++ * requested is calculated: ++ * ++ * Ethernet Frame Size : 1518 ++ * Ethernet Header : 14 ++ * Future Titan change for IP header alignment : 2 ++ * ++ * Hence, we allocate (1518 + 14 + 2+ 64) = 1580 bytes. For IP header ++ * alignment, we use skb_reserve(). ++ */ ++ ++#define ALIGNED_RX_SKB_ADDR(addr) \ ++ ((((unsigned long)(addr) + (64UL - 1UL)) \ ++ & ~(64UL - 1UL)) - (unsigned long)(addr)) ++ ++#define titan_ge_alloc_skb(__length, __gfp_flags) \ ++({ struct sk_buff *__skb; \ ++ __skb = alloc_skb((__length) + 64, (__gfp_flags)); \ ++ if(__skb) { \ ++ int __offset = (int) ALIGNED_RX_SKB_ADDR(__skb->data); \ ++ if(__offset) \ ++ skb_reserve(__skb, __offset); \ ++ } \ ++ __skb; \ ++}) ++ ++/* ++ * Configure the GMII block of the Titan based on what the PHY tells us ++ */ ++static void titan_ge_gmii_config(int port_num) ++{ ++ unsigned int reg_data = 0, phy_reg; ++ int err; ++ ++ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg); ++ ++ if (err == TITAN_GE_MDIO_ERROR) { ++ printk(KERN_ERR ++ "Could not read PHY control register 0x11 \n"); ++ printk(KERN_ERR ++ "Setting speed to 1000 Mbps and Duplex to Full \n"); ++ ++ return; ++ } ++ ++ err = titan_ge_mdio_write(port_num, TITAN_GE_MDIO_PHY_IE, 0); ++ ++ if (phy_reg & 0x8000) { ++ if (phy_reg & 0x2000) { ++ /* Full Duplex and 1000 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x201); ++ } else { ++ /* Half Duplex and 1000 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x2201); ++ } ++ } ++ if (phy_reg & 0x4000) { ++ if (phy_reg & 0x2000) { ++ /* Full Duplex and 100 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x100); ++ } else { ++ /* Half Duplex and 100 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x2100); ++ } ++ } ++ reg_data = TITAN_GE_READ(TITAN_GE_GMII_CONFIG_GENERAL + ++ (port_num << 12)); ++ reg_data |= 0x3; ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_GENERAL + ++ (port_num << 12)), reg_data); ++} ++ ++/* ++ * Enable the TMAC if it is not ++ */ ++static void titan_ge_enable_tx(unsigned int port_num) ++{ ++ unsigned long reg_data; ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)); ++ if (!(reg_data & 0x8000)) { ++ printk("TMAC disabled for port %d!! \n", port_num); ++ ++ reg_data |= 0x0001; /* Enable TMAC */ ++ reg_data |= 0x4000; /* CRC Check Enable */ ++ reg_data |= 0x2000; /* Padding enable */ ++ reg_data |= 0x0800; /* CRC Add enable */ ++ reg_data |= 0x0080; /* PAUSE frame */ ++ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ } ++} ++ ++/* ++ * Tx Timeout function ++ */ ++static void titan_ge_tx_timeout(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ printk(KERN_INFO "%s: TX timeout ", netdev->name); ++ printk(KERN_INFO "Resetting card \n"); ++ ++ /* Do the reset outside of interrupt context */ ++ schedule_work(&titan_ge_eth->tx_timeout_task); ++} ++ ++/* ++ * Update the AFX tables for UC and MC for slice 0 only ++ */ ++static void titan_ge_update_afx(titan_ge_port_info * titan_ge_eth) ++{ ++ int port = titan_ge_eth->port_num; ++ unsigned int i; ++ volatile unsigned long reg_data = 0; ++ u8 p_addr[6]; ++ ++ memcpy(p_addr, titan_ge_eth->port_mac_addr, 6); ++ ++ /* Set the MAC address here for TMAC and RMAC */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((0x112c | (port << 12)), 0x1); ++ /* Configure the eight address filters */ ++ for (i = 0; i < 8; i++) { ++ /* Select each of the eight filters */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 + ++ (port << 12)), i); ++ ++ /* Configure the match */ ++ reg_data = 0x9; /* Forward Enable Bit */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 + ++ (port << 12)), reg_data); ++ ++ /* Finally, AFX Exact Match Address Registers */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_HIGH + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ ++ /* VLAN id set to 0 */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_VID + ++ (port << 12)), 0); ++ } ++} ++ ++/* ++ * Actual Routine to reset the adapter when the timeout occurred ++ */ ++static void titan_ge_tx_timeout_task(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ int port = titan_ge_eth->port_num; ++ ++ printk("Titan GE: Transmit timed out. Resetting ... \n"); ++ ++ /* Dump debug info */ ++ printk(KERN_ERR "TRTG cause : %x \n", ++ TITAN_GE_READ(0x100c + (port << 12))); ++ ++ /* Fix this for the other ports */ ++ printk(KERN_ERR "FIFO cause : %x \n", TITAN_GE_READ(0x482c)); ++ printk(KERN_ERR "IE cause : %x \n", TITAN_GE_READ(0x0040)); ++ printk(KERN_ERR "XDMA GDI ERROR : %x \n", ++ TITAN_GE_READ(0x5008 + (port << 8))); ++ printk(KERN_ERR "CHANNEL ERROR: %x \n", ++ TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT ++ + (port << 8))); ++ ++ netif_device_detach(netdev); ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ titan_ge_port_start(netdev, titan_ge_eth); ++ netif_device_attach(netdev); ++} ++ ++/* ++ * Change the MTU of the Ethernet Device ++ */ ++static int titan_ge_change_mtu(struct net_device *netdev, int new_mtu) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned long flags; ++ ++ if ((new_mtu > 9500) || (new_mtu < 64)) ++ return -EINVAL; ++ ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ netdev->mtu = new_mtu; ++ ++ /* Now we have to reopen the interface so that SKBs with the new ++ * size will be allocated */ ++ ++ if (netif_running(netdev)) { ++ titan_ge_eth_stop(netdev); ++ ++ if (titan_ge_eth_open(netdev) != TITAN_OK) { ++ printk(KERN_ERR ++ "%s: Fatal error on opening device\n", ++ netdev->name); ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ return -1; ++ } ++ } ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ return 0; ++} ++ ++/* ++ * Titan Gbe Interrupt Handler. All the three ports send interrupt to one line ++ * only. Once an interrupt is triggered, figure out the port and then check ++ * the channel. ++ */ ++static irqreturn_t titan_ge_int_handler(int irq, void *dev_id) ++{ ++ struct net_device *netdev = (struct net_device *) dev_id; ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int reg_data; ++ unsigned int eth_int_cause_error = 0, is; ++ unsigned long eth_int_cause1; ++ int err = 0; ++#ifdef CONFIG_SMP ++ unsigned long eth_int_cause2; ++#endif ++ ++ /* Ack the CPU interrupt */ ++ switch (port_num) { ++ case 0: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS1); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR1, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS1); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR1, is); ++#endif ++ break; ++ ++ case 1: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS0); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR0, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS0); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR0, is); ++#endif ++ break; ++ ++ case 2: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS4); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR4, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS4); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR4, is); ++#endif ++ } ++ ++ eth_int_cause1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A); ++#ifdef CONFIG_SMP ++ eth_int_cause2 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_B); ++#endif ++ ++ /* Spurious interrupt */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 == 0) && (eth_int_cause2 == 0)) { ++#else ++ if (eth_int_cause1 == 0) { ++#endif ++ eth_int_cause_error = TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT + ++ (port_num << 8)); ++ ++ if (eth_int_cause_error == 0) ++ return IRQ_NONE; ++ } ++ ++ /* Handle Tx first. No need to ack interrupts */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 & 0x20202) || ++ (eth_int_cause2 & 0x20202) ) ++#else ++ if (eth_int_cause1 & 0x20202) ++#endif ++ titan_ge_free_tx_queue(titan_ge_eth); ++ ++ /* Handle the Rx next */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 & 0x10101) || ++ (eth_int_cause2 & 0x10101)) { ++#else ++ if (eth_int_cause1 & 0x10101) { ++#endif ++ if (netif_rx_schedule_prep(netdev)) { ++ unsigned int ack; ++ ++ ack = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ /* Disable Tx and Rx both */ ++ if (port_num == 0) ++ ack &= ~(0x3); ++ if (port_num == 1) ++ ack &= ~(0x300); ++ ++ if (port_num == 2) ++ ack &= ~(0x30000); ++ ++ /* Interrupts have been disabled */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, ack); ++ ++ __netif_rx_schedule(netdev); ++ } ++ } ++ ++ /* Handle error interrupts */ ++ if (eth_int_cause_error && (eth_int_cause_error != 0x2)) { ++ printk(KERN_ERR ++ "XDMA Channel Error : %x on port %d\n", ++ eth_int_cause_error, port_num); ++ ++ printk(KERN_ERR ++ "XDMA GDI Hardware error : %x on port %d\n", ++ TITAN_GE_READ(0x5008 + (port_num << 8)), port_num); ++ ++ printk(KERN_ERR ++ "XDMA currently has %d Rx descriptors \n", ++ TITAN_GE_READ(0x5048 + (port_num << 8))); ++ ++ printk(KERN_ERR ++ "XDMA currently has prefetcted %d Rx descriptors \n", ++ TITAN_GE_READ(0x505c + (port_num << 8))); ++ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT + ++ (port_num << 8)), eth_int_cause_error); ++ } ++ ++ /* ++ * PHY interrupt to inform abt the changes. Reading the ++ * PHY Status register will clear the interrupt ++ */ ++ if ((!(eth_int_cause1 & 0x30303)) && ++ (eth_int_cause_error == 0)) { ++ err = ++ titan_ge_mdio_read(port_num, ++ TITAN_GE_MDIO_PHY_IS, ®_data); ++ ++ if (reg_data & 0x0400) { ++ /* Link status change */ ++ titan_ge_mdio_read(port_num, ++ TITAN_GE_MDIO_PHY_STATUS, ®_data); ++ if (!(reg_data & 0x0400)) { ++ /* Link is down */ ++ netif_carrier_off(netdev); ++ netif_stop_queue(netdev); ++ } else { ++ /* Link is up */ ++ netif_carrier_on(netdev); ++ netif_wake_queue(netdev); ++ ++ /* Enable the queue */ ++ titan_ge_enable_tx(port_num); ++ } ++ } ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++/* ++ * Multicast and Promiscuous mode set. The ++ * set_multi entry point is called whenever the ++ * multicast address list or the network interface ++ * flags are updated. ++ */ ++static void titan_ge_set_multi(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned long reg_data; ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 + ++ (port_num << 12)); ++ ++ if (netdev->flags & IFF_PROMISC) { ++ reg_data |= 0x2; ++ } ++ else if (netdev->flags & IFF_ALLMULTI) { ++ reg_data |= 0x01; ++ reg_data |= 0x400; /* Use the 64-bit Multicast Hash bin */ ++ } ++ else { ++ reg_data = 0x2; ++ } ++ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 + ++ (port_num << 12)), reg_data); ++ if (reg_data & 0x01) { ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_LOW + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDLOW + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDHI + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_HI + ++ (port_num << 12)), 0xffff); ++ } ++} ++ ++/* ++ * Open the network device ++ */ ++static int titan_ge_open(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int irq = TITAN_ETH_PORT_IRQ - port_num; ++ int retval; ++ ++ retval = request_irq(irq, titan_ge_int_handler, ++ SA_INTERRUPT | SA_SAMPLE_RANDOM , netdev->name, netdev); ++ ++ if (retval != 0) { ++ printk(KERN_ERR "Cannot assign IRQ number to TITAN GE \n"); ++ return -1; ++ } ++ ++ netdev->irq = irq; ++ printk(KERN_INFO "Assigned IRQ %d to port %d\n", irq, port_num); ++ ++ spin_lock_irq(&(titan_ge_eth->lock)); ++ ++ if (titan_ge_eth_open(netdev) != TITAN_OK) { ++ spin_unlock_irq(&(titan_ge_eth->lock)); ++ printk("%s: Error opening interface \n", netdev->name); ++ free_irq(netdev->irq, netdev); ++ return -EBUSY; ++ } ++ ++ spin_unlock_irq(&(titan_ge_eth->lock)); ++ ++ return 0; ++} ++ ++/* ++ * Allocate the SKBs for the Rx ring. Also used ++ * for refilling the queue ++ */ ++static int titan_ge_rx_task(struct net_device *netdev, ++ titan_ge_port_info *titan_ge_port) ++{ ++ struct device *device = &titan_ge_device[titan_ge_port->port_num]->dev; ++ volatile titan_ge_rx_desc *rx_desc; ++ struct sk_buff *skb; ++ int rx_used_desc; ++ int count = 0; ++ ++ while (titan_ge_port->rx_ring_skbs < titan_ge_port->rx_ring_size) { ++ ++ /* First try to get the skb from the recycler */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ skb = titan_ge_alloc_skb(TITAN_GE_JUMBO_BUFSIZE, GFP_ATOMIC); ++#else ++ skb = titan_ge_alloc_skb(TITAN_GE_STD_BUFSIZE, GFP_ATOMIC); ++#endif ++ if (unlikely(!skb)) { ++ /* OOM, set the flag */ ++ printk("OOM \n"); ++ oom_flag = 1; ++ break; ++ } ++ count++; ++ skb->dev = netdev; ++ ++ titan_ge_port->rx_ring_skbs++; ++ ++ rx_used_desc = titan_ge_port->rx_used_desc_q; ++ rx_desc = &(titan_ge_port->rx_desc_area[rx_used_desc]); ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ rx_desc->buffer_addr = dma_map_single(device, skb->data, ++ TITAN_GE_JUMBO_BUFSIZE - 2, DMA_FROM_DEVICE); ++#else ++ rx_desc->buffer_addr = dma_map_single(device, skb->data, ++ TITAN_GE_STD_BUFSIZE - 2, DMA_FROM_DEVICE); ++#endif ++ ++ titan_ge_port->rx_skb[rx_used_desc] = skb; ++ rx_desc->cmd_sts = TITAN_GE_RX_BUFFER_OWNED; ++ ++ titan_ge_port->rx_used_desc_q = ++ (rx_used_desc + 1) % TITAN_GE_RX_QUEUE; ++ } ++ ++ return count; ++} ++ ++/* ++ * Actual init of the Tital GE port. There is one register for ++ * the channel configuration ++ */ ++static void titan_port_init(struct net_device *netdev, ++ titan_ge_port_info * titan_ge_eth) ++{ ++ unsigned long reg_data; ++ ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ ++ /* First reset the TMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data |= 0x80000000; ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ udelay(30); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data &= ~(0xc0000000); ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ /* Now reset the RMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data |= 0x00080000; ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ udelay(30); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data &= ~(0x000c0000); ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++} ++ ++/* ++ * Start the port. All the hardware specific configuration ++ * for the XDMA, Tx FIFO, Rx FIFO, TMAC, RMAC, TRTG and AFX ++ * go here ++ */ ++static int titan_ge_port_start(struct net_device *netdev, ++ titan_ge_port_info * titan_port) ++{ ++ volatile unsigned long reg_data, reg_data1; ++ int port_num = titan_port->port_num; ++ int count = 0; ++ unsigned long reg_data_1; ++ ++ if (config_done == 0) { ++ reg_data = TITAN_GE_READ(0x0004); ++ reg_data |= 0x100; ++ TITAN_GE_WRITE(0x0004, reg_data); ++ ++ reg_data &= ~(0x100); ++ TITAN_GE_WRITE(0x0004, reg_data); ++ ++ /* Turn on GMII/MII mode and turn off TBI mode */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TSB_CTRL_1); ++ reg_data |= 0x00000700; ++ reg_data &= ~(0x00800000); /* Fencing */ ++ ++ TITAN_GE_WRITE(0x000c, 0x00001100); ++ ++ TITAN_GE_WRITE(TITAN_GE_TSB_CTRL_1, reg_data); ++ ++ /* Set the CPU Resource Limit register */ ++ TITAN_GE_WRITE(0x00f8, 0x8); ++ ++ /* Be conservative when using the BIU buffers */ ++ TITAN_GE_WRITE(0x0068, 0x4); ++ } ++ ++ titan_port->tx_threshold = 0; ++ titan_port->rx_threshold = 0; ++ ++ /* We need to write the descriptors for Tx and Rx */ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_TX_DESC + (port_num << 8)), ++ (unsigned long) titan_port->tx_dma); ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_RX_DESC + (port_num << 8)), ++ (unsigned long) titan_port->rx_dma); ++ ++ if (config_done == 0) { ++ /* Step 1: XDMA config */ ++ reg_data = TITAN_GE_READ(TITAN_GE_XDMA_CONFIG); ++ reg_data &= ~(0x80000000); /* clear reset */ ++ reg_data |= 0x1 << 29; /* sparse tx descriptor spacing */ ++ reg_data |= 0x1 << 28; /* sparse rx descriptor spacing */ ++ reg_data |= (0x1 << 23) | (0x1 << 24); /* Descriptor Coherency */ ++ reg_data |= (0x1 << 21) | (0x1 << 22); /* Data Coherency */ ++ TITAN_GE_WRITE(TITAN_GE_XDMA_CONFIG, reg_data); ++ } ++ ++ /* IR register for the XDMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8)); ++ reg_data |= 0x80068000; /* No Rx_OOD */ ++ TITAN_GE_WRITE((TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8)), reg_data); ++ ++ /* Start the Tx and Rx XDMA controller */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + (port_num << 8)); ++ reg_data &= 0x4fffffff; /* Clear tx reset */ ++ reg_data &= 0xfff4ffff; /* Clear rx reset */ ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ reg_data |= 0xa0 | 0x30030000; ++#else ++ reg_data |= 0x40 | 0x20030000; ++#endif ++ ++#ifndef CONFIG_SMP ++ reg_data &= ~(0x10); ++ reg_data |= 0x0f; /* All of the packet */ ++#endif ++ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + (port_num << 8)), reg_data); ++ ++ /* Rx desc count */ ++ count = titan_ge_rx_task(netdev, titan_port); ++ TITAN_GE_WRITE((0x5048 + (port_num << 8)), count); ++ count = TITAN_GE_READ(0x5048 + (port_num << 8)); ++ ++ udelay(30); ++ ++ /* ++ * Step 2: Configure the SDQPF, i.e. FIFO ++ */ ++ if (config_done == 0) { ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL); ++ reg_data = 0x1; ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ reg_data &= ~(0x1); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL); ++ reg_data = 0x1; ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ reg_data &= ~(0x1); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ } ++ /* ++ * Enable RX FIFO 0, 4 and 8 ++ */ ++ if (port_num == 0) { ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10); ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4844); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x4844, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_0); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ reg_data |= (0xff << 10); ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4944); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x4944, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ } ++ ++ if (port_num == 1) { ++ reg_data = TITAN_GE_READ(0x4870); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (0xff + 1); ++ ++ TITAN_GE_WRITE(0x4870, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4874); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x4874, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4870, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x494c); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x494c, reg_data); ++ reg_data |= (0xff << 10) | (0xff + 1); ++ TITAN_GE_WRITE(0x494c, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4950); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x4950, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x494c, reg_data); ++ } ++ ++ /* ++ * Titan 1.2 revision does support port #2 ++ */ ++ if (port_num == 2) { ++ /* ++ * Put the descriptors in the SRAM ++ */ ++ reg_data = TITAN_GE_READ(0x48a0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x48a4); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x48a4, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x4958); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ TITAN_GE_WRITE(0x4958, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x495c); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x495c, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ } ++ ++ if (port_num == 2) { ++ reg_data = TITAN_GE_READ(0x48a0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x48a4); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x48a4, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x4958); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ TITAN_GE_WRITE(0x4958, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x495c); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x495c, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ } ++ ++ /* ++ * Step 3: TRTG block enable ++ */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TRTG_CONFIG + (port_num << 12)); ++ ++ /* ++ * This is the 1.2 revision of the chip. It has fix for the ++ * IP header alignment. Now, the IP header begins at an ++ * aligned address and this wont need an extra copy in the ++ * driver. This performance drawback existed in the previous ++ * versions of the silicon ++ */ ++ reg_data_1 = TITAN_GE_READ(0x103c + (port_num << 12)); ++ reg_data_1 |= 0x40000000; ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ reg_data_1 |= 0x04000000; ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ mdelay(5); ++ ++ reg_data_1 &= ~(0x04000000); ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ mdelay(5); ++ ++ reg_data |= 0x0001; ++ TITAN_GE_WRITE((TITAN_GE_TRTG_CONFIG + (port_num << 12)), reg_data); ++ ++ /* ++ * Step 4: Start the Tx activity ++ */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_2 + (port_num << 12)), 0xe197); ++#ifdef TITAN_GE_JUMBO_FRAMES ++ TITAN_GE_WRITE((0x1258 + (port_num << 12)), 0x4000); ++#endif ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)); ++ reg_data |= 0x0001; /* Enable TMAC */ ++ reg_data |= 0x6c70; /* PAUSE also set */ ++ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ udelay(30); ++ ++ /* Destination Address drop bit */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_2 + (port_num << 12)); ++ reg_data |= 0x218; /* DA_DROP bit and pause */ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_2 + (port_num << 12)), reg_data); ++ ++ TITAN_GE_WRITE((0x1218 + (port_num << 12)), 0x3); ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ TITAN_GE_WRITE((0x1208 + (port_num << 12)), 0x4000); ++#endif ++ /* Start the Rx activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)); ++ reg_data |= 0x0001; /* RMAC Enable */ ++ reg_data |= 0x0010; /* CRC Check enable */ ++ reg_data |= 0x0040; /* Min Frame check enable */ ++ reg_data |= 0x4400; /* Max Frame check enable */ ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ udelay(30); ++ ++ /* ++ * Enable the Interrupts for Tx and Rx ++ */ ++ reg_data1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ ++ if (port_num == 0) { ++ reg_data1 |= 0x3; ++#ifdef CONFIG_SMP ++ TITAN_GE_WRITE(0x0038, 0x003); ++#else ++ TITAN_GE_WRITE(0x0038, 0x303); ++#endif ++ } ++ ++ if (port_num == 1) { ++ reg_data1 |= 0x300; ++ } ++ ++ if (port_num == 2) ++ reg_data1 |= 0x30000; ++ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data1); ++ TITAN_GE_WRITE(0x003c, 0x300); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(0x0024, 0x04000024); /* IRQ vector */ ++ TITAN_GE_WRITE(0x0020, 0x000fb000); /* INTMSG base */ ++ } ++ ++ /* Priority */ ++ reg_data = TITAN_GE_READ(0x1038 + (port_num << 12)); ++ reg_data &= ~(0x00f00000); ++ TITAN_GE_WRITE((0x1038 + (port_num << 12)), reg_data); ++ ++ /* Step 5: GMII config */ ++ titan_ge_gmii_config(port_num); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(0x1a80, 0); ++ config_done = 1; ++ } ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Function to queue the packet for the Ethernet device ++ */ ++static void titan_ge_tx_queue(titan_ge_port_info * titan_ge_eth, ++ struct sk_buff * skb) ++{ ++ struct device *device = &titan_ge_device[titan_ge_eth->port_num]->dev; ++ unsigned int curr_desc = titan_ge_eth->tx_curr_desc_q; ++ volatile titan_ge_tx_desc *tx_curr; ++ int port_num = titan_ge_eth->port_num; ++ ++ tx_curr = &(titan_ge_eth->tx_desc_area[curr_desc]); ++ tx_curr->buffer_addr = ++ dma_map_single(device, skb->data, skb_headlen(skb), ++ DMA_TO_DEVICE); ++ ++ titan_ge_eth->tx_skb[curr_desc] = (struct sk_buff *) skb; ++ tx_curr->buffer_len = skb_headlen(skb); ++ ++ /* Last descriptor enables interrupt and changes ownership */ ++ tx_curr->cmd_sts = 0x1 | (1 << 15) | (1 << 5); ++ ++ /* Kick the XDMA to start the transfer from memory to the FIFO */ ++ TITAN_GE_WRITE((0x5044 + (port_num << 8)), 0x1); ++ ++ /* Current descriptor updated */ ++ titan_ge_eth->tx_curr_desc_q = (curr_desc + 1) % TITAN_GE_TX_QUEUE; ++ ++ /* Prefetch the next descriptor */ ++ prefetch((const void *) ++ &titan_ge_eth->tx_desc_area[titan_ge_eth->tx_curr_desc_q]); ++} ++ ++/* ++ * Actually does the open of the Ethernet device ++ */ ++static int titan_ge_eth_open(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ struct device *device = &titan_ge_device[port_num]->dev; ++ unsigned long reg_data; ++ unsigned int phy_reg; ++ int err = 0; ++ ++ /* Stop the Rx activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ /* Clear the port interrupts */ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT + (port_num << 8)), 0x0); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0); ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_B, 0); ++ } ++ ++ /* Set the MAC Address */ ++ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6); ++ ++ if (config_done == 0) ++ titan_port_init(netdev, titan_ge_eth); ++ ++ titan_ge_update_afx(titan_ge_eth); ++ ++ /* Allocate the Tx ring now */ ++ titan_ge_eth->tx_ring_skbs = 0; ++ titan_ge_eth->tx_ring_size = TITAN_GE_TX_QUEUE; ++ ++ /* Allocate space in the SRAM for the descriptors */ ++ titan_ge_eth->tx_desc_area = (titan_ge_tx_desc *) ++ (titan_ge_sram + TITAN_TX_RING_BYTES * port_num); ++ titan_ge_eth->tx_dma = TITAN_SRAM_BASE + TITAN_TX_RING_BYTES * port_num; ++ ++ if (!titan_ge_eth->tx_desc_area) { ++ printk(KERN_ERR ++ "%s: Cannot allocate Tx Ring (size %d bytes) for port %d\n", ++ netdev->name, TITAN_TX_RING_BYTES, port_num); ++ return -ENOMEM; ++ } ++ ++ memset(titan_ge_eth->tx_desc_area, 0, titan_ge_eth->tx_desc_area_size); ++ ++ /* Now initialize the Tx descriptor ring */ ++ titan_ge_init_tx_desc_ring(titan_ge_eth, ++ titan_ge_eth->tx_ring_size, ++ (unsigned long) titan_ge_eth->tx_desc_area, ++ (unsigned long) titan_ge_eth->tx_dma); ++ ++ /* Allocate the Rx ring now */ ++ titan_ge_eth->rx_ring_size = TITAN_GE_RX_QUEUE; ++ titan_ge_eth->rx_ring_skbs = 0; ++ ++ titan_ge_eth->rx_desc_area = ++ (titan_ge_rx_desc *)(titan_ge_sram + 0x1000 + TITAN_RX_RING_BYTES * port_num); ++ ++ titan_ge_eth->rx_dma = TITAN_SRAM_BASE + 0x1000 + TITAN_RX_RING_BYTES * port_num; ++ ++ if (!titan_ge_eth->rx_desc_area) { ++ printk(KERN_ERR "%s: Cannot allocate Rx Ring (size %d bytes)\n", ++ netdev->name, TITAN_RX_RING_BYTES); ++ ++ printk(KERN_ERR "%s: Freeing previously allocated TX queues...", ++ netdev->name); ++ ++ dma_free_coherent(device, titan_ge_eth->tx_desc_area_size, ++ (void *) titan_ge_eth->tx_desc_area, ++ titan_ge_eth->tx_dma); ++ ++ return -ENOMEM; ++ } ++ ++ memset(titan_ge_eth->rx_desc_area, 0, titan_ge_eth->rx_desc_area_size); ++ ++ /* Now initialize the Rx ring */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ if ((titan_ge_init_rx_desc_ring ++ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_JUMBO_BUFSIZE, ++ (unsigned long) titan_ge_eth->rx_desc_area, 0, ++ (unsigned long) titan_ge_eth->rx_dma)) == 0) ++#else ++ if ((titan_ge_init_rx_desc_ring ++ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_STD_BUFSIZE, ++ (unsigned long) titan_ge_eth->rx_desc_area, 0, ++ (unsigned long) titan_ge_eth->rx_dma)) == 0) ++#endif ++ panic("%s: Error initializing RX Ring\n", netdev->name); ++ ++ /* Fill the Rx ring with the SKBs */ ++ titan_ge_port_start(netdev, titan_ge_eth); ++ ++ /* ++ * Check if Interrupt Coalscing needs to be turned on. The ++ * values specified in the register is multiplied by ++ * (8 x 64 nanoseconds) to determine when an interrupt should ++ * be sent to the CPU. ++ */ ++ ++ if (TITAN_GE_TX_COAL) { ++ titan_ge_eth->tx_int_coal = ++ titan_ge_tx_coal(TITAN_GE_TX_COAL, port_num); ++ } ++ ++ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg); ++ if (err == TITAN_GE_MDIO_ERROR) { ++ printk(KERN_ERR ++ "Could not read PHY control register 0x11 \n"); ++ return TITAN_ERROR; ++ } ++ if (!(phy_reg & 0x0400)) { ++ netif_carrier_off(netdev); ++ netif_stop_queue(netdev); ++ return TITAN_ERROR; ++ } else { ++ netif_carrier_on(netdev); ++ netif_start_queue(netdev); ++ } ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Queue the packet for Tx. Currently no support for zero copy, ++ * checksum offload and Scatter Gather. The chip does support ++ * Scatter Gather only. But, that wont help here since zero copy ++ * requires support for Tx checksumming also. ++ */ ++int titan_ge_start_xmit(struct sk_buff *skb, struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned long flags; ++ struct net_device_stats *stats; ++//printk("titan_ge_start_xmit\n"); ++ ++ stats = &titan_ge_eth->stats; ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ if ((TITAN_GE_TX_QUEUE - titan_ge_eth->tx_ring_skbs) <= ++ (skb_shinfo(skb)->nr_frags + 1)) { ++ netif_stop_queue(netdev); ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ printk(KERN_ERR "Tx OOD \n"); ++ return 1; ++ } ++ ++ titan_ge_tx_queue(titan_ge_eth, skb); ++ titan_ge_eth->tx_ring_skbs++; ++ ++ if (TITAN_GE_TX_QUEUE <= (titan_ge_eth->tx_ring_skbs + 4)) { ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ titan_ge_free_tx_queue(titan_ge_eth); ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ } ++ ++ stats->tx_bytes += skb->len; ++ stats->tx_packets++; ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ netdev->trans_start = jiffies; ++ ++ return 0; ++} ++ ++/* ++ * Actually does the Rx. Rx side checksumming supported. ++ */ ++static int titan_ge_rx(struct net_device *netdev, int port_num, ++ titan_ge_port_info * titan_ge_port, ++ titan_ge_packet * packet) ++{ ++ int rx_curr_desc, rx_used_desc; ++ volatile titan_ge_rx_desc *rx_desc; ++ ++ rx_curr_desc = titan_ge_port->rx_curr_desc_q; ++ rx_used_desc = titan_ge_port->rx_used_desc_q; ++ ++ if (((rx_curr_desc + 1) % TITAN_GE_RX_QUEUE) == rx_used_desc) ++ return TITAN_ERROR; ++ ++ rx_desc = &(titan_ge_port->rx_desc_area[rx_curr_desc]); ++ ++ if (rx_desc->cmd_sts & TITAN_GE_RX_BUFFER_OWNED) ++ return TITAN_ERROR; ++ ++ packet->skb = titan_ge_port->rx_skb[rx_curr_desc]; ++ packet->len = (rx_desc->cmd_sts & 0x7fff); ++ ++ /* ++ * At this point, we dont know if the checksumming ++ * actually helps relieve CPU. So, keep it for ++ * port 0 only ++ */ ++ packet->checksum = ntohs((rx_desc->buffer & 0xffff0000) >> 16); ++ packet->cmd_sts = rx_desc->cmd_sts; ++ ++ titan_ge_port->rx_curr_desc_q = (rx_curr_desc + 1) % TITAN_GE_RX_QUEUE; ++ ++ /* Prefetch the next descriptor */ ++ prefetch((const void *) ++ &titan_ge_port->rx_desc_area[titan_ge_port->rx_curr_desc_q + 1]); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Free the Tx queue of the used SKBs ++ */ ++static int titan_ge_free_tx_queue(titan_ge_port_info *titan_ge_eth) ++{ ++ unsigned long flags; ++ ++ /* Take the lock */ ++ spin_lock_irqsave(&(titan_ge_eth->lock), flags); ++ ++ while (titan_ge_return_tx_desc(titan_ge_eth, titan_ge_eth->port_num) == 0) ++ if (titan_ge_eth->tx_ring_skbs != 1) ++ titan_ge_eth->tx_ring_skbs--; ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Threshold beyond which we do the cleaning of ++ * Tx queue and new allocation for the Rx ++ * queue ++ */ ++#define TX_THRESHOLD 4 ++#define RX_THRESHOLD 10 ++ ++/* ++ * Receive the packets and send it to the kernel. ++ */ ++static int titan_ge_receive_queue(struct net_device *netdev, unsigned int max) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ titan_ge_packet packet; ++ struct net_device_stats *stats; ++ struct sk_buff *skb; ++ unsigned long received_packets = 0; ++ unsigned int ack; ++ ++ stats = &titan_ge_eth->stats; ++ ++ while ((--max) ++ && (titan_ge_rx(netdev, port_num, titan_ge_eth, &packet) == TITAN_OK)) { ++ skb = (struct sk_buff *) packet.skb; ++ ++ titan_ge_eth->rx_ring_skbs--; ++ ++ if (--titan_ge_eth->rx_work_limit < 0) ++ break; ++ received_packets++; ++ ++ stats->rx_packets++; ++ stats->rx_bytes += packet.len; ++ ++ if ((packet.cmd_sts & TITAN_GE_RX_PERR) || ++ (packet.cmd_sts & TITAN_GE_RX_OVERFLOW_ERROR) || ++ (packet.cmd_sts & TITAN_GE_RX_TRUNC) || ++ (packet.cmd_sts & TITAN_GE_RX_CRC_ERROR)) { ++ stats->rx_dropped++; ++ dev_kfree_skb_any(skb); ++ ++ continue; ++ } ++ /* ++ * Either support fast path or slow path. Decision ++ * making can really slow down the performance. The ++ * idea is to cut down the number of checks and improve ++ * the fastpath. ++ */ ++ ++ skb_put(skb, packet.len - 2); ++ ++ /* ++ * Increment data pointer by two since thats where ++ * the MAC starts ++ */ ++ skb_reserve(skb, 2); ++ skb->protocol = eth_type_trans(skb, netdev); ++ netif_receive_skb(skb); ++ ++ if (titan_ge_eth->rx_threshold > RX_THRESHOLD) { ++ ack = titan_ge_rx_task(netdev, titan_ge_eth); ++ TITAN_GE_WRITE((0x5048 + (port_num << 8)), ack); ++ titan_ge_eth->rx_threshold = 0; ++ } else ++ titan_ge_eth->rx_threshold++; ++ ++ if (titan_ge_eth->tx_threshold > TX_THRESHOLD) { ++ titan_ge_eth->tx_threshold = 0; ++ titan_ge_free_tx_queue(titan_ge_eth); ++ } ++ else ++ titan_ge_eth->tx_threshold++; ++ ++ } ++ return received_packets; ++} ++ ++ ++/* ++ * Enable the Rx side interrupts ++ */ ++static void titan_ge_enable_int(unsigned int port_num, ++ titan_ge_port_info *titan_ge_eth, ++ struct net_device *netdev) ++{ ++ unsigned long reg_data = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ ++ if (port_num == 0) ++ reg_data |= 0x3; ++ if (port_num == 1) ++ reg_data |= 0x300; ++ if (port_num == 2) ++ reg_data |= 0x30000; ++ ++ /* Re-enable interrupts */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data); ++} ++ ++/* ++ * Main function to handle the polling for Rx side NAPI. ++ * Receive interrupts have been disabled at this point. ++ * The poll schedules the transmit followed by receive. ++ */ ++static int titan_ge_poll(struct net_device *netdev, int *budget) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ int port_num = titan_ge_eth->port_num; ++ int work_done = 0; ++ unsigned long flags, status; ++ ++ titan_ge_eth->rx_work_limit = *budget; ++ if (titan_ge_eth->rx_work_limit > netdev->quota) ++ titan_ge_eth->rx_work_limit = netdev->quota; ++ ++ do { ++ /* Do the transmit cleaning work here */ ++ titan_ge_free_tx_queue(titan_ge_eth); ++ ++ /* Ack the Rx interrupts */ ++ if (port_num == 0) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x3); ++ if (port_num == 1) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x300); ++ if (port_num == 2) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x30000); ++ ++ work_done += titan_ge_receive_queue(netdev, 0); ++ ++ /* Out of quota and there is work to be done */ ++ if (titan_ge_eth->rx_work_limit < 0) ++ goto not_done; ++ ++ /* Receive alloc_skb could lead to OOM */ ++ if (oom_flag == 1) { ++ oom_flag = 0; ++ goto oom; ++ } ++ ++ status = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A); ++ } while (status & 0x30300); ++ ++ /* If we are here, then no more interrupts to process */ ++ goto done; ++ ++not_done: ++ *budget -= work_done; ++ netdev->quota -= work_done; ++ return 1; ++ ++oom: ++ printk(KERN_ERR "OOM \n"); ++ netif_rx_complete(netdev); ++ return 0; ++ ++done: ++ /* ++ * No more packets on the poll list. Turn the interrupts ++ * back on and we should be able to catch the new ++ * packets in the interrupt handler ++ */ ++ if (!work_done) ++ work_done = 1; ++ ++ *budget -= work_done; ++ netdev->quota -= work_done; ++ ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ /* Remove us from the poll list */ ++ netif_rx_complete(netdev); ++ ++ /* Re-enable interrupts */ ++ titan_ge_enable_int(port_num, titan_ge_eth, netdev); ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ return 0; ++} ++ ++/* ++ * Close the network device ++ */ ++int titan_ge_stop(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ spin_lock_irq(&(titan_ge_eth->lock)); ++ titan_ge_eth_stop(netdev); ++ free_irq(netdev->irq, netdev); ++ spin_unlock_irq(&titan_ge_eth->lock); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Free the Tx ring ++ */ ++static void titan_ge_free_tx_rings(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int curr; ++ unsigned long reg_data; ++ ++ /* Stop the Tx DMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)); ++ reg_data |= 0xc0000000; ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)), reg_data); ++ ++ /* Disable the TMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ for (curr = 0; ++ (titan_ge_eth->tx_ring_skbs) && (curr < TITAN_GE_TX_QUEUE); ++ curr++) { ++ if (titan_ge_eth->tx_skb[curr]) { ++ dev_kfree_skb(titan_ge_eth->tx_skb[curr]); ++ titan_ge_eth->tx_ring_skbs--; ++ } ++ } ++ ++ if (titan_ge_eth->tx_ring_skbs != 0) ++ printk ++ ("%s: Error on Tx descriptor free - could not free %d" ++ " descriptors\n", netdev->name, ++ titan_ge_eth->tx_ring_skbs); ++ ++#ifndef TITAN_RX_RING_IN_SRAM ++ dma_free_coherent(&titan_ge_device[port_num]->dev, ++ titan_ge_eth->tx_desc_area_size, ++ (void *) titan_ge_eth->tx_desc_area, ++ titan_ge_eth->tx_dma); ++#endif ++} ++ ++/* ++ * Free the Rx ring ++ */ ++static void titan_ge_free_rx_rings(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int curr; ++ unsigned long reg_data; ++ ++ /* Stop the Rx DMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)); ++ reg_data |= 0x000c0000; ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)), reg_data); ++ ++ /* Disable the RMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ for (curr = 0; ++ titan_ge_eth->rx_ring_skbs && (curr < TITAN_GE_RX_QUEUE); ++ curr++) { ++ if (titan_ge_eth->rx_skb[curr]) { ++ dev_kfree_skb(titan_ge_eth->rx_skb[curr]); ++ titan_ge_eth->rx_ring_skbs--; ++ } ++ } ++ ++ if (titan_ge_eth->rx_ring_skbs != 0) ++ printk(KERN_ERR ++ "%s: Error in freeing Rx Ring. %d skb's still" ++ " stuck in RX Ring - ignoring them\n", netdev->name, ++ titan_ge_eth->rx_ring_skbs); ++ ++#ifndef TITAN_RX_RING_IN_SRAM ++ dma_free_coherent(&titan_ge_device[port_num]->dev, ++ titan_ge_eth->rx_desc_area_size, ++ (void *) titan_ge_eth->rx_desc_area, ++ titan_ge_eth->rx_dma); ++#endif ++} ++ ++/* ++ * Actually does the stop of the Ethernet device ++ */ ++static void titan_ge_eth_stop(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ netif_stop_queue(netdev); ++ ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ ++ titan_ge_free_tx_rings(netdev); ++ titan_ge_free_rx_rings(netdev); ++ ++ /* Disable the Tx and Rx Interrupts for all channels */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, 0x0); ++} ++ ++/* ++ * Update the MAC address. Note that we have to write the ++ * address in three station registers, 16 bits each. And this ++ * has to be done for TMAC and RMAC ++ */ ++static void titan_ge_update_mac_address(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ u8 p_addr[6]; ++ ++ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6); ++ memcpy(p_addr, netdev->dev_addr, 6); ++ ++ /* Update the Address Filtering Match tables */ ++ titan_ge_update_afx(titan_ge_eth); ++ ++ printk("Station MAC : %d %d %d %d %d %d \n", ++ p_addr[5], p_addr[4], p_addr[3], ++ p_addr[2], p_addr[1], p_addr[0]); ++ ++ /* Set the MAC address here for TMAC and RMAC */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port_num << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port_num << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port_num << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port_num << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port_num << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port_num << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++} ++ ++/* ++ * Set the MAC address of the Ethernet device ++ */ ++static int titan_ge_set_mac_address(struct net_device *dev, void *addr) ++{ ++ titan_ge_port_info *tp = netdev_priv(dev); ++ struct sockaddr *sa = addr; ++ ++ memcpy(dev->dev_addr, sa->sa_data, dev->addr_len); ++ ++ spin_lock_irq(&tp->lock); ++ titan_ge_update_mac_address(dev); ++ spin_unlock_irq(&tp->lock); ++ ++ return 0; ++} ++ ++/* ++ * Get the Ethernet device stats ++ */ ++static struct net_device_stats *titan_ge_get_stats(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ return &titan_ge_eth->stats; ++} ++ ++/* ++ * Initialize the Rx descriptor ring for the Titan Ge ++ */ ++static int titan_ge_init_rx_desc_ring(titan_ge_port_info * titan_eth_port, ++ int rx_desc_num, ++ int rx_buff_size, ++ unsigned long rx_desc_base_addr, ++ unsigned long rx_buff_base_addr, ++ unsigned long rx_dma) ++{ ++ volatile titan_ge_rx_desc *rx_desc; ++ unsigned long buffer_addr; ++ int index; ++ unsigned long titan_ge_rx_desc_bus = rx_dma; ++ ++ buffer_addr = rx_buff_base_addr; ++ rx_desc = (titan_ge_rx_desc *) rx_desc_base_addr; ++ ++ /* Check alignment */ ++ if (rx_buff_base_addr & 0xF) ++ return 0; ++ ++ /* Check Rx buffer size */ ++ if ((rx_buff_size < 8) || (rx_buff_size > TITAN_GE_MAX_RX_BUFFER)) ++ return 0; ++ ++ /* 64-bit alignment ++ if ((rx_buff_base_addr + rx_buff_size) & 0x7) ++ return 0; */ ++ ++ /* Initialize the Rx desc ring */ ++ for (index = 0; index < rx_desc_num; index++) { ++ titan_ge_rx_desc_bus += sizeof(titan_ge_rx_desc); ++ rx_desc[index].cmd_sts = 0; ++ rx_desc[index].buffer_addr = buffer_addr; ++ titan_eth_port->rx_skb[index] = NULL; ++ buffer_addr += rx_buff_size; ++ } ++ ++ titan_eth_port->rx_curr_desc_q = 0; ++ titan_eth_port->rx_used_desc_q = 0; ++ ++ titan_eth_port->rx_desc_area = (titan_ge_rx_desc *) rx_desc_base_addr; ++ titan_eth_port->rx_desc_area_size = ++ rx_desc_num * sizeof(titan_ge_rx_desc); ++ ++ titan_eth_port->rx_dma = rx_dma; ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Initialize the Tx descriptor ring. Descriptors in the SRAM ++ */ ++static int titan_ge_init_tx_desc_ring(titan_ge_port_info * titan_ge_port, ++ int tx_desc_num, ++ unsigned long tx_desc_base_addr, ++ unsigned long tx_dma) ++{ ++ titan_ge_tx_desc *tx_desc; ++ int index; ++ unsigned long titan_ge_tx_desc_bus = tx_dma; ++ ++ if (tx_desc_base_addr & 0xF) ++ return 0; ++ ++ tx_desc = (titan_ge_tx_desc *) tx_desc_base_addr; ++ ++ for (index = 0; index < tx_desc_num; index++) { ++ titan_ge_port->tx_dma_array[index] = ++ (dma_addr_t) titan_ge_tx_desc_bus; ++ titan_ge_tx_desc_bus += sizeof(titan_ge_tx_desc); ++ tx_desc[index].cmd_sts = 0x0000; ++ tx_desc[index].buffer_len = 0; ++ tx_desc[index].buffer_addr = 0x00000000; ++ titan_ge_port->tx_skb[index] = NULL; ++ } ++ ++ titan_ge_port->tx_curr_desc_q = 0; ++ titan_ge_port->tx_used_desc_q = 0; ++ ++ titan_ge_port->tx_desc_area = (titan_ge_tx_desc *) tx_desc_base_addr; ++ titan_ge_port->tx_desc_area_size = ++ tx_desc_num * sizeof(titan_ge_tx_desc); ++ ++ titan_ge_port->tx_dma = tx_dma; ++ return TITAN_OK; ++} ++ ++/* ++ * Initialize the device as an Ethernet device ++ */ ++static int __init titan_ge_probe(struct device *device) ++{ ++ titan_ge_port_info *titan_ge_eth; ++ struct net_device *netdev; ++ int port = to_platform_device(device)->id; ++ int err; ++ ++ netdev = alloc_etherdev(sizeof(titan_ge_port_info)); ++ if (!netdev) { ++ err = -ENODEV; ++ goto out; ++ } ++ ++ netdev->open = titan_ge_open; ++ netdev->stop = titan_ge_stop; ++ netdev->hard_start_xmit = titan_ge_start_xmit; ++ netdev->get_stats = titan_ge_get_stats; ++ netdev->set_multicast_list = titan_ge_set_multi; ++ netdev->set_mac_address = titan_ge_set_mac_address; ++ ++ /* Tx timeout */ ++ netdev->tx_timeout = titan_ge_tx_timeout; ++ netdev->watchdog_timeo = 2 * HZ; ++ ++ /* Set these to very high values */ ++ netdev->poll = titan_ge_poll; ++ netdev->weight = 64; ++ ++ netdev->tx_queue_len = TITAN_GE_TX_QUEUE; ++ netif_carrier_off(netdev); ++ netdev->base_addr = 0; ++ ++ netdev->change_mtu = titan_ge_change_mtu; ++ ++ titan_ge_eth = netdev_priv(netdev); ++ /* Allocation of memory for the driver structures */ ++ ++ titan_ge_eth->port_num = port; ++ ++ /* Configure the Tx timeout handler */ ++ INIT_WORK(&titan_ge_eth->tx_timeout_task, ++ (void (*)(void *)) titan_ge_tx_timeout_task, netdev); ++ ++ spin_lock_init(&titan_ge_eth->lock); ++ ++ /* set MAC addresses */ ++ memcpy(netdev->dev_addr, titan_ge_mac_addr_base, 6); ++ netdev->dev_addr[5] += port; ++ ++ err = register_netdev(netdev); ++ ++ if (err) ++ goto out_free_netdev; ++ ++ printk(KERN_NOTICE ++ "%s: port %d with MAC address %02x:%02x:%02x:%02x:%02x:%02x\n", ++ netdev->name, port, netdev->dev_addr[0], ++ netdev->dev_addr[1], netdev->dev_addr[2], ++ netdev->dev_addr[3], netdev->dev_addr[4], ++ netdev->dev_addr[5]); ++ ++ printk(KERN_NOTICE "Rx NAPI supported, Tx Coalescing ON \n"); ++ ++ return 0; ++ ++out_free_netdev: ++ kfree(netdev); ++ ++out: ++ return err; ++} ++ ++static void __devexit titan_device_remove(struct device *device) ++{ ++} ++ ++/* ++ * Reset the Ethernet port ++ */ ++static void titan_ge_port_reset(unsigned int port_num) ++{ ++ unsigned int reg_data; ++ ++ /* Stop the Tx port activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x0001); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ /* Stop the Rx port activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x0001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ return; ++} ++ ++/* ++ * Return the Tx desc after use by the XDMA ++ */ ++static int titan_ge_return_tx_desc(titan_ge_port_info * titan_ge_eth, int port) ++{ ++ int tx_desc_used; ++ struct sk_buff *skb; ++ ++ tx_desc_used = titan_ge_eth->tx_used_desc_q; ++ ++ /* return right away */ ++ if (tx_desc_used == titan_ge_eth->tx_curr_desc_q) ++ return TITAN_ERROR; ++ ++ /* Now the critical stuff */ ++ skb = titan_ge_eth->tx_skb[tx_desc_used]; ++ ++ dev_kfree_skb_any(skb); ++ ++ titan_ge_eth->tx_skb[tx_desc_used] = NULL; ++ titan_ge_eth->tx_used_desc_q = ++ (tx_desc_used + 1) % TITAN_GE_TX_QUEUE; ++ ++ return 0; ++} ++ ++/* ++ * Coalescing for the Tx path ++ */ ++static unsigned long titan_ge_tx_coal(unsigned long delay, int port) ++{ ++ unsigned long rx_delay; ++ ++ rx_delay = TITAN_GE_READ(TITAN_GE_INT_COALESCING); ++ delay = (delay << 16) | rx_delay; ++ ++ TITAN_GE_WRITE(TITAN_GE_INT_COALESCING, delay); ++ TITAN_GE_WRITE(0x5038, delay); ++ ++ return delay; ++} ++ ++static struct device_driver titan_soc_driver = { ++ .name = titan_string, ++ .bus = &platform_bus_type, ++ .probe = titan_ge_probe, ++ .remove = __devexit_p(titan_device_remove), ++}; ++ ++static void titan_platform_release (struct device *device) ++{ ++ struct platform_device *pldev; ++ ++ /* free device */ ++ pldev = to_platform_device (device); ++ kfree (pldev); ++} ++ ++/* ++ * Register the Titan GE with the kernel ++ */ ++static int __init titan_ge_init_module(void) ++{ ++ struct platform_device *pldev; ++ unsigned int version, device; ++ int i; ++ ++ printk(KERN_NOTICE ++ "PMC-Sierra TITAN 10/100/1000 Ethernet Driver \n"); ++ ++ titan_ge_base = (unsigned long) ioremap(TITAN_GE_BASE, TITAN_GE_SIZE); ++ if (!titan_ge_base) { ++ printk("Mapping Titan GE failed\n"); ++ goto out; ++ } ++ ++ device = TITAN_GE_READ(TITAN_GE_DEVICE_ID); ++ version = (device & 0x000f0000) >> 16; ++ device &= 0x0000ffff; ++ ++ printk(KERN_NOTICE "Device Id : %x, Version : %x \n", device, version); ++ ++#ifdef TITAN_RX_RING_IN_SRAM ++ titan_ge_sram = (unsigned long) ioremap(TITAN_SRAM_BASE, ++ TITAN_SRAM_SIZE); ++ if (!titan_ge_sram) { ++ printk("Mapping Titan SRAM failed\n"); ++ goto out_unmap_ge; ++ } ++#endif ++ ++ if (driver_register(&titan_soc_driver)) { ++ printk(KERN_ERR "Driver registration failed\n"); ++ goto out_unmap_sram; ++ } ++ ++ for (i = 0; i < 3; i++) { ++ titan_ge_device[i] = NULL; ++ ++ if (!(pldev = kmalloc (sizeof (*pldev), GFP_KERNEL))) ++ continue; ++ ++ memset (pldev, 0, sizeof (*pldev)); ++ pldev->name = titan_string; ++ pldev->id = i; ++ pldev->dev.release = titan_platform_release; ++ titan_ge_device[i] = pldev; ++ ++ if (platform_device_register (pldev)) { ++ kfree (pldev); ++ titan_ge_device[i] = NULL; ++ continue; ++ } ++ ++ if (!pldev->dev.driver) { ++ /* ++ * The driver was not bound to this device, there was ++ * no hardware at this address. Unregister it, as the ++ * release fuction will take care of freeing the ++ * allocated structure ++ */ ++ titan_ge_device[i] = NULL; ++ platform_device_unregister (pldev); ++ } ++ } ++ ++ return 0; ++ ++out_unmap_sram: ++ iounmap((void *)titan_ge_sram); ++ ++out_unmap_ge: ++ iounmap((void *)titan_ge_base); ++ ++out: ++ return -ENOMEM; ++} ++ ++/* ++ * Unregister the Titan GE from the kernel ++ */ ++static void __exit titan_ge_cleanup_module(void) ++{ ++ int i; ++ ++ driver_unregister(&titan_soc_driver); ++ ++ for (i = 0; i < 3; i++) { ++ if (titan_ge_device[i]) { ++ platform_device_unregister (titan_ge_device[i]); ++ titan_ge_device[i] = NULL; ++ } ++ } ++ ++ iounmap((void *)titan_ge_sram); ++ iounmap((void *)titan_ge_base); ++} ++ ++MODULE_AUTHOR("Manish Lachwani "); ++MODULE_DESCRIPTION("Titan GE Ethernet driver"); ++MODULE_LICENSE("GPL"); ++ ++module_init(titan_ge_init_module); ++module_exit(titan_ge_cleanup_module); +diff --git a/drivers/net/titan_ge.h b/drivers/net/titan_ge.h +new file mode 100644 +index 0000000..3719f78 +--- /dev/null ++++ b/drivers/net/titan_ge.h +@@ -0,0 +1,415 @@ ++#ifndef _TITAN_GE_H_ ++#define _TITAN_GE_H_ ++ ++#include ++#include ++#include ++#include ++ ++/* ++ * These functions should be later moved to a more generic location since there ++ * will be others accessing it also ++ */ ++ ++/* ++ * This is the way it works: LKB5 Base is at 0x0128. TITAN_BASE is defined in ++ * include/asm/titan_dep.h. TITAN_GE_BASE is the value in the TITAN_GE_LKB5 ++ * register. ++ */ ++ ++#define TITAN_GE_BASE 0xfe000000UL ++#define TITAN_GE_SIZE 0x10000UL ++ ++extern unsigned long titan_ge_base; ++ ++#define TITAN_GE_WRITE(offset, data) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) = (data) ++ ++#define TITAN_GE_READ(offset) *(volatile u32 *)(titan_ge_base + (offset)) ++ ++#ifndef msec_delay ++#define msec_delay(x) do { if(in_interrupt()) { \ ++ /* Don't mdelay in interrupt context! */ \ ++ BUG(); \ ++ } else { \ ++ set_current_state(TASK_UNINTERRUPTIBLE); \ ++ schedule_timeout((x * HZ)/1000); \ ++ } } while(0) ++#endif ++ ++#define TITAN_GE_PORT_0 ++ ++#define TITAN_SRAM_BASE ((OCD_READ(RM9000x2_OCD_LKB13) & ~1) << 4) ++#define TITAN_SRAM_SIZE 0x2000UL ++ ++/* ++ * We may need these constants ++ */ ++#define TITAN_BIT0 0x00000001 ++#define TITAN_BIT1 0x00000002 ++#define TITAN_BIT2 0x00000004 ++#define TITAN_BIT3 0x00000008 ++#define TITAN_BIT4 0x00000010 ++#define TITAN_BIT5 0x00000020 ++#define TITAN_BIT6 0x00000040 ++#define TITAN_BIT7 0x00000080 ++#define TITAN_BIT8 0x00000100 ++#define TITAN_BIT9 0x00000200 ++#define TITAN_BIT10 0x00000400 ++#define TITAN_BIT11 0x00000800 ++#define TITAN_BIT12 0x00001000 ++#define TITAN_BIT13 0x00002000 ++#define TITAN_BIT14 0x00004000 ++#define TITAN_BIT15 0x00008000 ++#define TITAN_BIT16 0x00010000 ++#define TITAN_BIT17 0x00020000 ++#define TITAN_BIT18 0x00040000 ++#define TITAN_BIT19 0x00080000 ++#define TITAN_BIT20 0x00100000 ++#define TITAN_BIT21 0x00200000 ++#define TITAN_BIT22 0x00400000 ++#define TITAN_BIT23 0x00800000 ++#define TITAN_BIT24 0x01000000 ++#define TITAN_BIT25 0x02000000 ++#define TITAN_BIT26 0x04000000 ++#define TITAN_BIT27 0x08000000 ++#define TITAN_BIT28 0x10000000 ++#define TITAN_BIT29 0x20000000 ++#define TITAN_BIT30 0x40000000 ++#define TITAN_BIT31 0x80000000 ++ ++/* Flow Control */ ++#define TITAN_GE_FC_NONE 0x0 ++#define TITAN_GE_FC_FULL 0x1 ++#define TITAN_GE_FC_TX_PAUSE 0x2 ++#define TITAN_GE_FC_RX_PAUSE 0x3 ++ ++/* Duplex Settings */ ++#define TITAN_GE_FULL_DUPLEX 0x1 ++#define TITAN_GE_HALF_DUPLEX 0x2 ++ ++/* Speed settings */ ++#define TITAN_GE_SPEED_1000 0x1 ++#define TITAN_GE_SPEED_100 0x2 ++#define TITAN_GE_SPEED_10 0x3 ++ ++/* Debugging info only */ ++#undef TITAN_DEBUG ++ ++/* Keep the rings in the Titan's SSRAM */ ++#define TITAN_RX_RING_IN_SRAM ++ ++#ifdef CONFIG_64BIT ++#define TITAN_GE_IE_MASK 0xfffffffffb001b64 ++#define TITAN_GE_IE_STATUS 0xfffffffffb001b60 ++#else ++#define TITAN_GE_IE_MASK 0xfb001b64 ++#define TITAN_GE_IE_STATUS 0xfb001b60 ++#endif ++ ++/* Support for Jumbo Frames */ ++#undef TITAN_GE_JUMBO_FRAMES ++ ++/* Rx buffer size */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++#define TITAN_GE_JUMBO_BUFSIZE 9080 ++#else ++#define TITAN_GE_STD_BUFSIZE 1580 ++#endif ++ ++/* ++ * Tx and Rx Interrupt Coalescing parameter. These values are ++ * for 1 Ghz processor. Rx coalescing can be taken care of ++ * by NAPI. NAPI is adaptive and hence useful. Tx coalescing ++ * is not adaptive. Hence, these values need to be adjusted ++ * based on load, CPU speed etc. ++ */ ++#define TITAN_GE_RX_COAL 150 ++#define TITAN_GE_TX_COAL 300 ++ ++#if defined(__BIG_ENDIAN) ++ ++/* Define the Rx descriptor */ ++typedef struct eth_rx_desc { ++ u32 reserved; /* Unused */ ++ u32 buffer_addr; /* CPU buffer address */ ++ u32 cmd_sts; /* Command and Status */ ++ u32 buffer; /* XDMA buffer address */ ++} titan_ge_rx_desc; ++ ++/* Define the Tx descriptor */ ++typedef struct eth_tx_desc { ++ u16 cmd_sts; /* Command, Status and Buffer count */ ++ u16 buffer_len; /* Length of the buffer */ ++ u32 buffer_addr; /* Physical address of the buffer */ ++} titan_ge_tx_desc; ++ ++#elif defined(__LITTLE_ENDIAN) ++ ++/* Define the Rx descriptor */ ++typedef struct eth_rx_desc { ++ u32 buffer_addr; /* CPU buffer address */ ++ u32 reserved; /* Unused */ ++ u32 buffer; /* XDMA buffer address */ ++ u32 cmd_sts; /* Command and Status */ ++} titan_ge_rx_desc; ++ ++/* Define the Tx descriptor */ ++typedef struct eth_tx_desc { ++ u32 buffer_addr; /* Physical address of the buffer */ ++ u16 buffer_len; /* Length of the buffer */ ++ u16 cmd_sts; /* Command, Status and Buffer count */ ++} titan_ge_tx_desc; ++#endif ++ ++/* Default Tx Queue Size */ ++#define TITAN_GE_TX_QUEUE 128 ++#define TITAN_TX_RING_BYTES (TITAN_GE_TX_QUEUE * sizeof(struct eth_tx_desc)) ++ ++/* Default Rx Queue Size */ ++#define TITAN_GE_RX_QUEUE 64 ++#define TITAN_RX_RING_BYTES (TITAN_GE_RX_QUEUE * sizeof(struct eth_rx_desc)) ++ ++/* Packet Structure */ ++typedef struct _pkt_info { ++ unsigned int len; ++ unsigned int cmd_sts; ++ unsigned int buffer; ++ struct sk_buff *skb; ++ unsigned int checksum; ++} titan_ge_packet; ++ ++ ++#define PHYS_CNT 3 ++ ++/* Titan Port specific data structure */ ++typedef struct _eth_port_ctrl { ++ unsigned int port_num; ++ u8 port_mac_addr[6]; ++ ++ /* Rx descriptor pointers */ ++ int rx_curr_desc_q, rx_used_desc_q; ++ ++ /* Tx descriptor pointers */ ++ int tx_curr_desc_q, tx_used_desc_q; ++ ++ /* Rx descriptor area */ ++ volatile titan_ge_rx_desc *rx_desc_area; ++ unsigned int rx_desc_area_size; ++ struct sk_buff* rx_skb[TITAN_GE_RX_QUEUE]; ++ ++ /* Tx Descriptor area */ ++ volatile titan_ge_tx_desc *tx_desc_area; ++ unsigned int tx_desc_area_size; ++ struct sk_buff* tx_skb[TITAN_GE_TX_QUEUE]; ++ ++ /* Timeout task */ ++ struct work_struct tx_timeout_task; ++ ++ /* DMA structures and handles */ ++ dma_addr_t tx_dma; ++ dma_addr_t rx_dma; ++ dma_addr_t tx_dma_array[TITAN_GE_TX_QUEUE]; ++ ++ /* Device lock */ ++ spinlock_t lock; ++ ++ unsigned int tx_ring_skbs; ++ unsigned int rx_ring_size; ++ unsigned int tx_ring_size; ++ unsigned int rx_ring_skbs; ++ ++ struct net_device_stats stats; ++ ++ /* Tx and Rx coalescing */ ++ unsigned long rx_int_coal; ++ unsigned long tx_int_coal; ++ ++ /* Threshold for replenishing the Rx and Tx rings */ ++ unsigned int tx_threshold; ++ unsigned int rx_threshold; ++ ++ /* NAPI work limit */ ++ unsigned int rx_work_limit; ++} titan_ge_port_info; ++ ++/* Titan specific constants */ ++#define TITAN_ETH_PORT_IRQ 3 ++ ++/* Max Rx buffer */ ++#define TITAN_GE_MAX_RX_BUFFER 65536 ++ ++/* Tx and Rx Error */ ++#define TITAN_GE_ERROR ++ ++/* Rx Descriptor Command and Status */ ++ ++#define TITAN_GE_RX_CRC_ERROR TITAN_BIT27 /* crc error */ ++#define TITAN_GE_RX_OVERFLOW_ERROR TITAN_BIT15 /* overflow */ ++#define TITAN_GE_RX_BUFFER_OWNED TITAN_BIT21 /* buffer ownership */ ++#define TITAN_GE_RX_STP TITAN_BIT31 /* start of packet */ ++#define TITAN_GE_RX_BAM TITAN_BIT30 /* broadcast address match */ ++#define TITAN_GE_RX_PAM TITAN_BIT28 /* physical address match */ ++#define TITAN_GE_RX_LAFM TITAN_BIT29 /* logical address filter match */ ++#define TITAN_GE_RX_VLAN TITAN_BIT26 /* virtual lans */ ++#define TITAN_GE_RX_PERR TITAN_BIT19 /* packet error */ ++#define TITAN_GE_RX_TRUNC TITAN_BIT20 /* packet size greater than 32 buffers */ ++ ++/* Tx Descriptor Command */ ++#define TITAN_GE_TX_BUFFER_OWNED TITAN_BIT5 /* buffer ownership */ ++#define TITAN_GE_TX_ENABLE_INTERRUPT TITAN_BIT15 /* Interrupt Enable */ ++ ++/* Return Status */ ++#define TITAN_OK 0x1 /* Good Status */ ++#define TITAN_ERROR 0x2 /* Error Status */ ++ ++/* MIB specific register offset */ ++#define TITAN_GE_MSTATX_STATS_BASE_LOW 0x0800 /* MSTATX COUNTL[15:0] */ ++#define TITAN_GE_MSTATX_STATS_BASE_MID 0x0804 /* MSTATX COUNTM[15:0] */ ++#define TITAN_GE_MSTATX_STATS_BASE_HI 0x0808 /* MSTATX COUNTH[7:0] */ ++#define TITAN_GE_MSTATX_CONTROL 0x0828 /* MSTATX Control */ ++#define TITAN_GE_MSTATX_VARIABLE_SELECT 0x082C /* MSTATX Variable Select */ ++ ++/* MIB counter offsets, add to the TITAN_GE_MSTATX_STATS_BASE_XXX */ ++#define TITAN_GE_MSTATX_RXFRAMESOK 0x0040 ++#define TITAN_GE_MSTATX_RXOCTETSOK 0x0050 ++#define TITAN_GE_MSTATX_RXFRAMES 0x0060 ++#define TITAN_GE_MSTATX_RXOCTETS 0x0070 ++#define TITAN_GE_MSTATX_RXUNICASTFRAMESOK 0x0080 ++#define TITAN_GE_MSTATX_RXBROADCASTFRAMESOK 0x0090 ++#define TITAN_GE_MSTATX_RXMULTICASTFRAMESOK 0x00A0 ++#define TITAN_GE_MSTATX_RXTAGGEDFRAMESOK 0x00B0 ++#define TITAN_GE_MSTATX_RXMACPAUSECONTROLFRAMESOK 0x00C0 ++#define TITAN_GE_MSTATX_RXMACCONTROLFRAMESOK 0x00D0 ++#define TITAN_GE_MSTATX_RXFCSERROR 0x00E0 ++#define TITAN_GE_MSTATX_RXALIGNMENTERROR 0x00F0 ++#define TITAN_GE_MSTATX_RXSYMBOLERROR 0x0100 ++#define TITAN_GE_MSTATX_RXLAYER1ERROR 0x0110 ++#define TITAN_GE_MSTATX_RXINRANGELENGTHERROR 0x0120 ++#define TITAN_GE_MSTATX_RXLONGLENGTHERROR 0x0130 ++#define TITAN_GE_MSTATX_RXLONGLENGTHCRCERROR 0x0140 ++#define TITAN_GE_MSTATX_RXSHORTLENGTHERROR 0x0150 ++#define TITAN_GE_MSTATX_RXSHORTLLENGTHCRCERROR 0x0160 ++#define TITAN_GE_MSTATX_RXFRAMES64OCTETS 0x0170 ++#define TITAN_GE_MSTATX_RXFRAMES65TO127OCTETS 0x0180 ++#define TITAN_GE_MSTATX_RXFRAMES128TO255OCTETS 0x0190 ++#define TITAN_GE_MSTATX_RXFRAMES256TO511OCTETS 0x01A0 ++#define TITAN_GE_MSTATX_RXFRAMES512TO1023OCTETS 0x01B0 ++#define TITAN_GE_MSTATX_RXFRAMES1024TO1518OCTETS 0x01C0 ++#define TITAN_GE_MSTATX_RXFRAMES1519TOMAXSIZE 0x01D0 ++#define TITAN_GE_MSTATX_RXSTATIONADDRESSFILTERED 0x01E0 ++#define TITAN_GE_MSTATX_RXVARIABLE 0x01F0 ++#define TITAN_GE_MSTATX_GENERICADDRESSFILTERED 0x0200 ++#define TITAN_GE_MSTATX_UNICASTFILTERED 0x0210 ++#define TITAN_GE_MSTATX_MULTICASTFILTERED 0x0220 ++#define TITAN_GE_MSTATX_BROADCASTFILTERED 0x0230 ++#define TITAN_GE_MSTATX_HASHFILTERED 0x0240 ++#define TITAN_GE_MSTATX_TXFRAMESOK 0x0250 ++#define TITAN_GE_MSTATX_TXOCTETSOK 0x0260 ++#define TITAN_GE_MSTATX_TXOCTETS 0x0270 ++#define TITAN_GE_MSTATX_TXTAGGEDFRAMESOK 0x0280 ++#define TITAN_GE_MSTATX_TXMACPAUSECONTROLFRAMESOK 0x0290 ++#define TITAN_GE_MSTATX_TXFCSERROR 0x02A0 ++#define TITAN_GE_MSTATX_TXSHORTLENGTHERROR 0x02B0 ++#define TITAN_GE_MSTATX_TXLONGLENGTHERROR 0x02C0 ++#define TITAN_GE_MSTATX_TXSYSTEMERROR 0x02D0 ++#define TITAN_GE_MSTATX_TXMACERROR 0x02E0 ++#define TITAN_GE_MSTATX_TXCARRIERSENSEERROR 0x02F0 ++#define TITAN_GE_MSTATX_TXSQETESTERROR 0x0300 ++#define TITAN_GE_MSTATX_TXUNICASTFRAMESOK 0x0310 ++#define TITAN_GE_MSTATX_TXBROADCASTFRAMESOK 0x0320 ++#define TITAN_GE_MSTATX_TXMULTICASTFRAMESOK 0x0330 ++#define TITAN_GE_MSTATX_TXUNICASTFRAMESATTEMPTED 0x0340 ++#define TITAN_GE_MSTATX_TXBROADCASTFRAMESATTEMPTED 0x0350 ++#define TITAN_GE_MSTATX_TXMULTICASTFRAMESATTEMPTED 0x0360 ++#define TITAN_GE_MSTATX_TXFRAMES64OCTETS 0x0370 ++#define TITAN_GE_MSTATX_TXFRAMES65TO127OCTETS 0x0380 ++#define TITAN_GE_MSTATX_TXFRAMES128TO255OCTETS 0x0390 ++#define TITAN_GE_MSTATX_TXFRAMES256TO511OCTETS 0x03A0 ++#define TITAN_GE_MSTATX_TXFRAMES512TO1023OCTETS 0x03B0 ++#define TITAN_GE_MSTATX_TXFRAMES1024TO1518OCTETS 0x03C0 ++#define TITAN_GE_MSTATX_TXFRAMES1519TOMAXSIZE 0x03D0 ++#define TITAN_GE_MSTATX_TXVARIABLE 0x03E0 ++#define TITAN_GE_MSTATX_RXSYSTEMERROR 0x03F0 ++#define TITAN_GE_MSTATX_SINGLECOLLISION 0x0400 ++#define TITAN_GE_MSTATX_MULTIPLECOLLISION 0x0410 ++#define TITAN_GE_MSTATX_DEFERREDXMISSIONS 0x0420 ++#define TITAN_GE_MSTATX_LATECOLLISIONS 0x0430 ++#define TITAN_GE_MSTATX_ABORTEDDUETOXSCOLLS 0x0440 ++ ++/* Interrupt specific defines */ ++#define TITAN_GE_DEVICE_ID 0x0000 /* Device ID */ ++#define TITAN_GE_RESET 0x0004 /* Reset reg */ ++#define TITAN_GE_TSB_CTRL_0 0x000C /* TSB Control reg 0 */ ++#define TITAN_GE_TSB_CTRL_1 0x0010 /* TSB Control reg 1 */ ++#define TITAN_GE_INTR_GRP0_STATUS 0x0040 /* General Interrupt Group 0 Status */ ++#define TITAN_GE_INTR_XDMA_CORE_A 0x0048 /* XDMA Channel Interrupt Status, Core A*/ ++#define TITAN_GE_INTR_XDMA_CORE_B 0x004C /* XDMA Channel Interrupt Status, Core B*/ ++#define TITAN_GE_INTR_XDMA_IE 0x0058 /* XDMA Channel Interrupt Enable */ ++#define TITAN_GE_SDQPF_ECC_INTR 0x480C /* SDQPF ECC Interrupt Status */ ++#define TITAN_GE_SDQPF_RXFIFO_CTL 0x4828 /* SDQPF RxFifo Control and Interrupt Enb*/ ++#define TITAN_GE_SDQPF_RXFIFO_INTR 0x482C /* SDQPF RxFifo Interrupt Status */ ++#define TITAN_GE_SDQPF_TXFIFO_CTL 0x4928 /* SDQPF TxFifo Control and Interrupt Enb*/ ++#define TITAN_GE_SDQPF_TXFIFO_INTR 0x492C /* SDQPF TxFifo Interrupt Status */ ++#define TITAN_GE_SDQPF_RXFIFO_0 0x4840 /* SDQPF RxFIFO Enable */ ++#define TITAN_GE_SDQPF_TXFIFO_0 0x4940 /* SDQPF TxFIFO Enable */ ++#define TITAN_GE_XDMA_CONFIG 0x5000 /* XDMA Global Configuration */ ++#define TITAN_GE_XDMA_INTR_SUMMARY 0x5010 /* XDMA Interrupt Summary */ ++#define TITAN_GE_XDMA_BUFADDRPRE 0x5018 /* XDMA Buffer Address Prefix */ ++#define TITAN_GE_XDMA_DESCADDRPRE 0x501C /* XDMA Descriptor Address Prefix */ ++#define TITAN_GE_XDMA_PORTWEIGHT 0x502C /* XDMA Port Weight Configuration */ ++ ++/* Rx MAC defines */ ++#define TITAN_GE_RMAC_CONFIG_1 0x1200 /* RMAC Configuration 1 */ ++#define TITAN_GE_RMAC_CONFIG_2 0x1204 /* RMAC Configuration 2 */ ++#define TITAN_GE_RMAC_MAX_FRAME_LEN 0x1208 /* RMAC Max Frame Length */ ++#define TITAN_GE_RMAC_STATION_HI 0x120C /* Rx Station Address High */ ++#define TITAN_GE_RMAC_STATION_MID 0x1210 /* Rx Station Address Middle */ ++#define TITAN_GE_RMAC_STATION_LOW 0x1214 /* Rx Station Address Low */ ++#define TITAN_GE_RMAC_LINK_CONFIG 0x1218 /* RMAC Link Configuration */ ++ ++/* Tx MAC defines */ ++#define TITAN_GE_TMAC_CONFIG_1 0x1240 /* TMAC Configuration 1 */ ++#define TITAN_GE_TMAC_CONFIG_2 0x1244 /* TMAC Configuration 2 */ ++#define TITAN_GE_TMAC_IPG 0x1248 /* TMAC Inter-Packet Gap */ ++#define TITAN_GE_TMAC_STATION_HI 0x124C /* Tx Station Address High */ ++#define TITAN_GE_TMAC_STATION_MID 0x1250 /* Tx Station Address Middle */ ++#define TITAN_GE_TMAC_STATION_LOW 0x1254 /* Tx Station Address Low */ ++#define TITAN_GE_TMAC_MAX_FRAME_LEN 0x1258 /* TMAC Max Frame Length */ ++#define TITAN_GE_TMAC_MIN_FRAME_LEN 0x125C /* TMAC Min Frame Length */ ++#define TITAN_GE_TMAC_PAUSE_FRAME_TIME 0x1260 /* TMAC Pause Frame Time */ ++#define TITAN_GE_TMAC_PAUSE_FRAME_INTERVAL 0x1264 /* TMAC Pause Frame Interval */ ++ ++/* GMII register */ ++#define TITAN_GE_GMII_INTERRUPT_STATUS 0x1348 /* GMII Interrupt Status */ ++#define TITAN_GE_GMII_CONFIG_GENERAL 0x134C /* GMII Configuration General */ ++#define TITAN_GE_GMII_CONFIG_MODE 0x1350 /* GMII Configuration Mode */ ++ ++/* Tx and Rx XDMA defines */ ++#define TITAN_GE_INT_COALESCING 0x5030 /* Interrupt Coalescing */ ++#define TITAN_GE_CHANNEL0_CONFIG 0x5040 /* Channel 0 XDMA config */ ++#define TITAN_GE_CHANNEL0_INTERRUPT 0x504c /* Channel 0 Interrupt Status */ ++#define TITAN_GE_GDI_INTERRUPT_ENABLE 0x5050 /* IE for the GDI Errors */ ++#define TITAN_GE_CHANNEL0_PACKET 0x5060 /* Channel 0 Packet count */ ++#define TITAN_GE_CHANNEL0_BYTE 0x5064 /* Channel 0 Byte count */ ++#define TITAN_GE_CHANNEL0_TX_DESC 0x5054 /* Channel 0 Tx first desc */ ++#define TITAN_GE_CHANNEL0_RX_DESC 0x5058 /* Channel 0 Rx first desc */ ++ ++/* AFX (Address Filter Exact) register offsets for Slice 0 */ ++#define TITAN_GE_AFX_EXACT_MATCH_LOW 0x1100 /* AFX Exact Match Address Low*/ ++#define TITAN_GE_AFX_EXACT_MATCH_MID 0x1104 /* AFX Exact Match Address Mid*/ ++#define TITAN_GE_AFX_EXACT_MATCH_HIGH 0x1108 /* AFX Exact Match Address Hi */ ++#define TITAN_GE_AFX_EXACT_MATCH_VID 0x110C /* AFX Exact Match VID */ ++#define TITAN_GE_AFX_MULTICAST_HASH_LOW 0x1110 /* AFX Multicast HASH Low */ ++#define TITAN_GE_AFX_MULTICAST_HASH_MIDLOW 0x1114 /* AFX Multicast HASH MidLow */ ++#define TITAN_GE_AFX_MULTICAST_HASH_MIDHI 0x1118 /* AFX Multicast HASH MidHi */ ++#define TITAN_GE_AFX_MULTICAST_HASH_HI 0x111C /* AFX Multicast HASH Hi */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 0x1120 /* AFX Address Filter Ctrl 0 */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 0x1124 /* AFX Address Filter Ctrl 1 */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 0x1128 /* AFX Address Filter Ctrl 2 */ ++ ++/* Traffic Groomer block */ ++#define TITAN_GE_TRTG_CONFIG 0x1000 /* TRTG Config */ ++ ++#endif /* _TITAN_GE_H_ */ ++ +diff --git a/drivers/net/titan_mdio.c b/drivers/net/titan_mdio.c +new file mode 100644 +index 0000000..8a8785b +--- /dev/null ++++ b/drivers/net/titan_mdio.c +@@ -0,0 +1,217 @@ ++/* ++ * drivers/net/titan_mdio.c - Driver for Titan ethernet ports ++ * ++ * Copyright (C) 2003 PMC-Sierra Inc. ++ * Author : Manish Lachwani (lachwani@pmc-sierra.com) ++ * ++ * 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. ++ * ++ * Management Data IO (MDIO) driver for the Titan GMII. Interacts with the Marvel PHY ++ * on the Titan. No support for the TBI as yet. ++ * ++ */ ++ ++#include "titan_mdio.h" ++ ++#define MDIO_DEBUG ++ ++/* ++ * Local constants ++ */ ++#define MAX_CLKA 1023 ++#define MAX_PHY_DEV 31 ++#define MAX_PHY_REG 31 ++#define WRITEADDRS_OPCODE 0x0 ++#define READ_OPCODE 0x2 ++#define WRITE_OPCODE 0x1 ++#define MAX_MDIO_POLL 100 ++ ++/* ++ * Titan MDIO and SCMB registers ++ */ ++#define TITAN_GE_SCMB_CONTROL 0x01c0 /* SCMB Control */ ++#define TITAN_GE_SCMB_CLKA 0x01c4 /* SCMB Clock A */ ++#define TITAN_GE_MDIO_COMMAND 0x01d0 /* MDIO Command */ ++#define TITAN_GE_MDIO_DEVICE_PORT_ADDRESS 0x01d4 /* MDIO Device and Port addrs */ ++#define TITAN_GE_MDIO_DATA 0x01d8 /* MDIO Data */ ++#define TITAN_GE_MDIO_INTERRUPTS 0x01dC /* MDIO Interrupts */ ++ ++/* ++ * Function to poll the MDIO ++ */ ++static int titan_ge_mdio_poll(void) ++{ ++ int i, val; ++ ++ for (i = 0; i < MAX_MDIO_POLL; i++) { ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ ++ if (!(val & 0x8000)) ++ return TITAN_GE_MDIO_GOOD; ++ } ++ ++ return TITAN_GE_MDIO_ERROR; ++} ++ ++ ++/* ++ * Initialize and configure the MDIO ++ */ ++int titan_ge_mdio_setup(titan_ge_mdio_config *titan_mdio) ++{ ++ unsigned long val; ++ ++ /* Reset the SCMB and program into MDIO mode*/ ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x9000); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x1000); ++ ++ /* CLK A */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_SCMB_CLKA); ++ val = ( (val & ~(0x03ff)) | (titan_mdio->clka & 0x03ff)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CLKA, val); ++ ++ /* Preamble Suppresion */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0001)) | (titan_mdio->mdio_spre & 0x0001)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ /* MDIO mode */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x4000)) | (titan_mdio->mdio_mode & 0x4000)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Set the PHY address in indirect mode ++ */ ++int titan_ge_mdio_inaddrs(int dev_addr, int reg_addr) ++{ ++ volatile unsigned long val; ++ ++ /* Setup the PHY device */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ /* Write the new address */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (WRITEADDRS_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Read the MDIO register. This is what the individual parametes mean: ++ * ++ * dev_addr : PHY ID ++ * reg_addr : register offset ++ * ++ * See the spec for the Titan MAC. We operate in the Direct Mode. ++ */ ++ ++#define MAX_RETRIES 2 ++ ++int titan_ge_mdio_read(int dev_addr, int reg_addr, unsigned int *pdata) ++{ ++ volatile unsigned long val; ++ int retries = 0; ++ ++ /* Setup the PHY device */ ++ ++again: ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ val |= 0x4000; ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ udelay(30); ++ ++ /* Issue the read command */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (READ_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ udelay(30); ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ *pdata = (unsigned int)TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DATA); ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS); ++ ++ udelay(30); ++ ++ if (val & 0x2) { ++ if (retries == MAX_RETRIES) ++ return TITAN_GE_MDIO_ERROR; ++ else { ++ retries++; ++ goto again; ++ } ++ } ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Write to the MDIO register ++ * ++ * dev_addr : PHY ID ++ * reg_addr : register that needs to be written to ++ * ++ */ ++int titan_ge_mdio_write(int dev_addr, int reg_addr, unsigned int data) ++{ ++ volatile unsigned long val; ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ /* Setup the PHY device */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ val |= 0x4000; ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ udelay(30); ++ ++ /* Setup the data to write */ ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DATA, data); ++ ++ udelay(30); ++ ++ /* Issue the write command */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (WRITE_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ udelay(30); ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS); ++ if (val & 0x2) ++ return TITAN_GE_MDIO_ERROR; ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ +diff --git a/drivers/net/titan_mdio.h b/drivers/net/titan_mdio.h +new file mode 100644 +index 0000000..5d23344 +--- /dev/null ++++ b/drivers/net/titan_mdio.h +@@ -0,0 +1,56 @@ ++/* ++ * MDIO used to interact with the PHY when using GMII/MII ++ */ ++#ifndef _TITAN_MDIO_H ++#define _TITAN_MDIO_H ++ ++#include ++#include ++#include ++#include "titan_ge.h" ++ ++ ++#define TITAN_GE_MDIO_ERROR (-9000) ++#define TITAN_GE_MDIO_GOOD 0 ++ ++#define TITAN_GE_MDIO_BASE titan_ge_base ++ ++#define TITAN_GE_MDIO_READ(offset) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) ++ ++#define TITAN_GE_MDIO_WRITE(offset, data) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) = (data) ++ ++ ++/* GMII specific registers */ ++#define TITAN_GE_MARVEL_PHY_ID 0x00 ++#define TITAN_PHY_AUTONEG_ADV 0x04 ++#define TITAN_PHY_LP_ABILITY 0x05 ++#define TITAN_GE_MDIO_MII_CTRL 0x09 ++#define TITAN_GE_MDIO_MII_EXTENDED 0x0f ++#define TITAN_GE_MDIO_PHY_CTRL 0x10 ++#define TITAN_GE_MDIO_PHY_STATUS 0x11 ++#define TITAN_GE_MDIO_PHY_IE 0x12 ++#define TITAN_GE_MDIO_PHY_IS 0x13 ++#define TITAN_GE_MDIO_PHY_LED 0x18 ++#define TITAN_GE_MDIO_PHY_LED_OVER 0x19 ++#define PHY_ANEG_TIME_WAIT 45 /* 45 seconds wait time */ ++ ++/* ++ * MDIO Config Structure ++ */ ++typedef struct { ++ unsigned int clka; ++ int mdio_spre; ++ int mdio_mode; ++} titan_ge_mdio_config; ++ ++/* ++ * Function Prototypes ++ */ ++int titan_ge_mdio_setup(titan_ge_mdio_config *); ++int titan_ge_mdio_inaddrs(int, int); ++int titan_ge_mdio_read(int, int, unsigned int *); ++int titan_ge_mdio_write(int, int, unsigned int); ++ ++#endif /* _TITAN_MDIO_H */ +diff --git a/drivers/net/wireless/rtl818x/rtl8187/rfkill.c b/drivers/net/wireless/rtl818x/rtl8187/rfkill.c +index 3411671..4d252c1 100644 +--- a/drivers/net/wireless/rtl818x/rtl8187/rfkill.c ++++ b/drivers/net/wireless/rtl818x/rtl8187/rfkill.c +@@ -22,6 +22,10 @@ + + static bool rtl8187_is_radio_enabled(struct rtl8187_priv *priv) + { ++#ifdef CONFIG_LEMOTE_MACH2F ++ /* Allow users to activate rfkill through only the /sys interface */ ++ return 1; ++#else + u8 gpio; + + gpio = rtl818x_ioread8(priv, &priv->map->GPIO0); +@@ -29,6 +33,7 @@ static bool rtl8187_is_radio_enabled(struct rtl8187_priv *priv) + gpio = rtl818x_ioread8(priv, &priv->map->GPIO1); + + return gpio & priv->rfkill_mask; ++#endif + } + + void rtl8187_rfkill_init(struct ieee80211_hw *hw) +diff --git a/drivers/platform/Kconfig b/drivers/platform/Kconfig +index 09fde58..eacabd1 100644 +--- a/drivers/platform/Kconfig ++++ b/drivers/platform/Kconfig +@@ -4,5 +4,8 @@ endif + if GOLDFISH + source "drivers/platform/goldfish/Kconfig" + endif ++if MIPS ++source "drivers/platform/mips/Kconfig" ++endif + + source "drivers/platform/chrome/Kconfig" +diff --git a/drivers/platform/Makefile b/drivers/platform/Makefile +index 3656b7b..ca26925 100644 +--- a/drivers/platform/Makefile ++++ b/drivers/platform/Makefile +@@ -3,6 +3,7 @@ + # + + obj-$(CONFIG_X86) += x86/ ++obj-$(CONFIG_MIPS) += mips/ + obj-$(CONFIG_OLPC) += olpc/ + obj-$(CONFIG_GOLDFISH) += goldfish/ + obj-$(CONFIG_CHROME_PLATFORMS) += chrome/ +diff --git a/drivers/platform/mips/Kconfig b/drivers/platform/mips/Kconfig +new file mode 100644 +index 0000000..722d690 +--- /dev/null ++++ b/drivers/platform/mips/Kconfig +@@ -0,0 +1,60 @@ ++# ++# MIPS Platform Specific Drivers ++# ++ ++menuconfig MIPS_PLATFORM_DEVICES ++ bool "MIPS Platform Specific Device Drivers" ++ default y ++ help ++ Say Y here to get to see options for device drivers of various ++ MIPS platforms, including vendor-specific netbook/laptop/pc extension ++ drivers. This option alone does not add any kernel code. ++ ++ If you say N, all options in this submenu will be skipped and disabled. ++ ++if MIPS_PLATFORM_DEVICES ++ ++config LEMOTE_YEELOONG2F ++ tristate "Lemote YeeLoong Laptop" ++ depends on LEMOTE_MACH2F ++ select BACKLIGHT_LCD_SUPPORT ++ select LCD_CLASS_DEVICE ++ select BACKLIGHT_CLASS_DEVICE ++ select POWER_SUPPLY ++ select HWMON ++ select VIDEO_OUTPUT_CONTROL ++ select INPUT_SPARSEKMAP ++ select INPUT_EVDEV ++ depends on INPUT ++ default m ++ help ++ YeeLoong netbook is a mini laptop made by Lemote, which is basically ++ compatible to FuLoong2F mini PC, but it has an extra Embedded ++ Controller(kb3310b) for battery, hotkey, backlight, temperature and ++ fan management. ++ ++config LEMOTE_LYNLOONG2F ++ tristate "Lemote LynLoong PC" ++ depends on LEMOTE_MACH2F ++ select BACKLIGHT_LCD_SUPPORT ++ select BACKLIGHT_CLASS_DEVICE ++ select VIDEO_OUTPUT_CONTROL ++ default m ++ help ++ LynLoong PC is an AllINONE machine made by Lemote, which is basically ++ compatible to FuLoong2F Mini PC, the only difference is that it has a ++ size-fixed screen: 1360x768 with sisfb video driver. and also, it has ++ its own specific suspend support. ++ ++config GDIUM_LAPTOP ++ tristate "GDIUM laptop extras" ++ depends on DEXXON_GDIUM ++ select POWER_SUPPLY ++ select I2C ++ select INPUT_POLLDEV ++ default m ++ help ++ This mini-driver drives the ST7 chipset present in the Gdium laptops. ++ This gives battery support, wlan rfkill. ++ ++endif # MIPS_PLATFORM_DEVICES +diff --git a/drivers/platform/mips/Makefile b/drivers/platform/mips/Makefile +new file mode 100644 +index 0000000..f013e78 +--- /dev/null ++++ b/drivers/platform/mips/Makefile +@@ -0,0 +1,9 @@ ++# ++# Makefile for MIPS Platform-Specific Drivers ++# ++ ++obj-$(CONFIG_LEMOTE_YEELOONG2F) += yeeloong_laptop.o # yeeloong_ecrom.o ++CFLAGS_yeeloong_laptop.o = -I$(srctree)/arch/mips/loongson/lemote-2f ++ ++obj-$(CONFIG_LEMOTE_LYNLOONG2F) += lynloong_pc.o ++obj-$(CONFIG_GDIUM_LAPTOP) += gdium_laptop.o +diff --git a/drivers/platform/mips/gdium_laptop.c b/drivers/platform/mips/gdium_laptop.c +new file mode 100644 +index 0000000..41a65ad +--- /dev/null ++++ b/drivers/platform/mips/gdium_laptop.c +@@ -0,0 +1,927 @@ ++/* ++ * gdium_laptop -- Gdium laptop extras ++ * ++ * Arnaud Patard ++ * ++ * 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. ++ * ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* For input device */ ++#define SCAN_INTERVAL 150 ++ ++/* For battery status */ ++#define BAT_SCAN_INTERVAL 500 ++ ++#define EC_FIRM_VERSION 0 ++ ++#if CONFIG_GDIUM_VERSION > 2 ++#define EC_REG_BASE 1 ++#else ++#define EC_REG_BASE 0 ++#endif ++ ++#define EC_STATUS (EC_REG_BASE+0) ++#define EC_STATUS_LID (1<<0) ++#define EC_STATUS_PWRBUT (1<<1) ++#define EC_STATUS_BATID (1<<2) /* this bit has no real meaning on v2. */ ++ /* Same as EC_STATUS_ADAPT */ ++ /* but on v3 it's BATID which mean bat present */ ++#define EC_STATUS_SYS_POWER (1<<3) ++#define EC_STATUS_WLAN (1<<4) ++#define EC_STATUS_ADAPT (1<<5) ++ ++#define EC_CTRL (EC_REG_BASE+1) ++#define EC_CTRL_DDR_CLK (1<<0) ++#define EC_CTRL_CHARGE_LED (1<<1) ++#define EC_CTRL_BEEP (1<<2) ++#define EC_CTRL_SUSB (1<<3) /* memory power */ ++#define EC_CTRL_TRICKLE (1<<4) ++#define EC_CTRL_WLAN_EN (1<<5) ++#define EC_CTRL_SUSC (1<<6) /* main power */ ++#define EC_CTRL_CHARGE_EN (1<<7) ++ ++#define EC_BAT_LOW (EC_REG_BASE+2) ++#define EC_BAT_HIGH (EC_REG_BASE+3) ++ ++#define EC_SIGN (EC_REG_BASE+4) ++#define EC_SIGN_OS 0xAE /* write 0xae to control pm stuff */ ++#define EC_SIGN_EC 0x00 /* write 0x00 to let the st7 manage pm stuff */ ++ ++#if 0 ++#define EC_TEST (EC_REG_BASE+5) /* Depending on firmware version this register */ ++ /* may be the programmation register so don't play */ ++ /* with it */ ++#endif ++ ++#define BAT_VOLT_PRESENT 500000 /* Min voltage to consider battery present uV */ ++#define BAT_MIN 7000000 /* Min battery voltage in uV */ ++#define BAT_MIN_MV 7000 /* Min battery voltage in mV */ ++#define BAT_TRICKLE_EN 8000000 /* Charging at 1.4A before 8.0V and then charging at 0.25A */ ++#define BAT_MAX 7950000 /* Max battery voltage ~8V in V */ ++#define BAT_MAX_MV 7950 /* Max battery voltage ~8V in V */ ++#define BAT_READ_ERROR 300000 /* battery read error of 0.3V */ ++#define BAT_READ_ERROR_MV 300 /* battery read error of 0.3V */ ++ ++#define SM502_WLAN_ON (224+16)/* SM502 GPIO16 may be used on gdium v2 (v3?) as wlan_on */ ++ /* when R422 is connected */ ++ ++static unsigned char verbose; ++static unsigned char gpio16; ++static unsigned char ec; ++module_param(verbose, byte, S_IRUGO | S_IWUSR); ++MODULE_PARM_DESC(verbose, "Add some debugging messages"); ++module_param(gpio16, byte, S_IRUGO); ++MODULE_PARM_DESC(gpio16, "Enable wlan_on signal on SM502"); ++module_param(ec, byte, S_IRUGO); ++MODULE_PARM_DESC(ec, "Let the ST7 handle the battery (default OS)"); ++ ++struct gdium_laptop_data { ++ struct i2c_client *client; ++ struct input_polled_dev *input_polldev; ++ struct dentry *debugfs; ++ struct mutex mutex; ++ struct platform_device *bat_pdev; ++ struct power_supply gdium_ac; ++ struct power_supply gdium_battery; ++ struct workqueue_struct *workqueue; ++ struct delayed_work work; ++ char charge_cmd; ++ /* important registers value */ ++ char status; ++ char ctrl; ++ /* mV */ ++ int battery_level; ++ char version; ++}; ++ ++/**********************************************************************/ ++/* Low level I2C functions */ ++/* All are supposed to be called with mutex held */ ++/**********************************************************************/ ++/* ++ * Return battery voltage in mV ++ * >= 0 battery voltage ++ * < 0 error ++ */ ++static s32 ec_read_battery(struct i2c_client *client) ++{ ++ unsigned char bat_low, bat_high; ++ s32 data; ++ unsigned int ret; ++ ++ /* ++ * a = battery high ++ * b = battery low ++ * bat = a << 2 | b & 0x03; ++ * battery voltage = (bat / 1024) * 5 * 2 ++ */ ++ data = i2c_smbus_read_byte_data(client, EC_BAT_LOW); ++ if (data < 0) { ++ dev_err(&client->dev, "ec_read_bat: read bat_low failed\n"); ++ return data; ++ } ++ bat_low = data & 0xff; ++ if (verbose) ++ dev_info(&client->dev, "bat_low %x\n", bat_low); ++ ++ data = i2c_smbus_read_byte_data(client, EC_BAT_HIGH); ++ if (data < 0) { ++ dev_err(&client->dev, "ec_read_bat: read bat_high failed\n"); ++ return data; ++ } ++ bat_high = data & 0xff; ++ if (verbose) ++ dev_info(&client->dev, "bat_high %x\n", bat_high); ++ ++ ret = (bat_high << 2) | (bat_low & 3); ++ /* ++ * mV ++ */ ++ ret = (ret * 5 * 2) * 1000 / 1024; ++ ++ return ret; ++} ++ ++static s32 ec_read_version(struct i2c_client *client) ++{ ++#if CONFIG_GDIUM_VERSION > 2 ++ return i2c_smbus_read_byte_data(client, EC_FIRM_VERSION); ++#else ++ return 0; ++#endif ++} ++ ++static s32 ec_read_status(struct i2c_client *client) ++{ ++ return i2c_smbus_read_byte_data(client, EC_STATUS); ++} ++ ++static s32 ec_read_ctrl(struct i2c_client *client) ++{ ++ return i2c_smbus_read_byte_data(client, EC_CTRL); ++} ++ ++static s32 ec_write_ctrl(struct i2c_client *client, unsigned char newvalue) ++{ ++ return i2c_smbus_write_byte_data(client, EC_CTRL, newvalue); ++} ++ ++static s32 ec_read_sign(struct i2c_client *client) ++{ ++ return i2c_smbus_read_byte_data(client, EC_SIGN); ++} ++ ++static s32 ec_write_sign(struct i2c_client *client, unsigned char sign) ++{ ++ unsigned char value; ++ s32 ret; ++ ++ ret = i2c_smbus_write_byte_data(client, EC_SIGN, sign); ++ if (ret < 0) { ++ dev_err(&client->dev, "ec_set_control: write failed\n"); ++ return ret; ++ } ++ ++ value = ec_read_sign(client); ++ if (value != sign) { ++ dev_err(&client->dev, "Failed to set control to %s\n", ++ sign == EC_SIGN_OS ? "OS" : "EC"); ++ return -EIO; ++ } ++ ++ return 0; ++} ++ ++#if 0 ++static int ec_power_off(struct i2c_client *client) ++{ ++ char value; ++ int ret; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) { ++ dev_err(&client->dev, "ec_power_off: read failed\n"); ++ return value; ++ } ++ value &= ~(EC_CTRL_SUSB | EC_CTRL_SUSC); ++ ret = ec_write_ctrl(client, value); ++ if (ret < 0) { ++ dev_err(&client->dev, "ec_power_off: write failed\n"); ++ return ret; ++ } ++ ++ return 0; ++} ++#endif ++ ++static s32 ec_wlan_status(struct i2c_client *client) ++{ ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ return (value & EC_CTRL_WLAN_EN) ? 1 : 0; ++} ++ ++static s32 ec_wlan_en(struct i2c_client *client, int on) ++{ ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ value &= ~EC_CTRL_WLAN_EN; ++ if (on) ++ value |= EC_CTRL_WLAN_EN; ++ ++ return ec_write_ctrl(client, value&0xff); ++} ++ ++#if 0 ++static s32 ec_led_status(struct i2c_client *client) ++{ ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ return (value & EC_CTRL_CHARGE_LED) ? 1 : 0; ++} ++#endif ++ ++/* Changing the charging led status has never worked */ ++static s32 ec_led_en(struct i2c_client *client, int on) ++{ ++#if 0 ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ value &= ~EC_CTRL_CHARGE_LED; ++ if (on) ++ value |= EC_CTRL_CHARGE_LED; ++ return ec_write_ctrl(client, value&0xff); ++#else ++ return 0; ++#endif ++} ++ ++static s32 ec_charge_en(struct i2c_client *client, int on, int trickle) ++{ ++ s32 value; ++ s32 set = 0; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ if (on) ++ set |= EC_CTRL_CHARGE_EN; ++ if (trickle) ++ set |= EC_CTRL_TRICKLE; ++ ++ /* Be clever : don't change values if you don't need to */ ++ if ((value & (EC_CTRL_CHARGE_EN | EC_CTRL_TRICKLE)) == set) ++ return 0; ++ ++ value &= ~(EC_CTRL_CHARGE_EN | EC_CTRL_TRICKLE); ++ value |= set; ++ ec_led_en(client, on); ++ return ec_write_ctrl(client, (unsigned char)(value&0xff)); ++ ++} ++ ++/**********************************************************************/ ++/* Input functions */ ++/**********************************************************************/ ++struct gdium_keys { ++ int last_state; ++ int key_code; ++ int mask; ++ int type; ++}; ++ ++static struct gdium_keys gkeys[] = { ++ { ++ .key_code = KEY_WLAN, ++ .mask = EC_STATUS_WLAN, ++ .type = EV_KEY, ++ }, ++ { ++ .key_code = KEY_POWER, ++ .mask = EC_STATUS_PWRBUT, ++ .type = EV_KEY, /*EV_PWR,*/ ++ }, ++ { ++ .key_code = SW_LID, ++ .mask = EC_STATUS_LID, ++ .type = EV_SW, ++ }, ++}; ++ ++static void gdium_laptop_keys_poll(struct input_polled_dev *dev) ++{ ++ int state, i; ++ struct gdium_laptop_data *data = dev->private; ++ struct i2c_client *client = data->client; ++ struct input_dev *input = dev->input; ++ s32 status; ++ ++ mutex_lock(&data->mutex); ++ status = ec_read_status(client); ++ mutex_unlock(&data->mutex); ++ ++ if (status < 0) { ++ /* ++ * Don't know exactly which version of the firmware ++ * has this bug but when the power button is pressed ++ * there are i2c read errors :( ++ */ ++ if ((data->version >= 0x13) && !gkeys[1].last_state) { ++ input_event(input, EV_KEY, KEY_POWER, 1); ++ input_sync(input); ++ gkeys[1].last_state = 1; ++ } ++ return; ++ } ++ ++ for (i = 0; i < ARRAY_SIZE(gkeys); i++) { ++ state = status & gkeys[i].mask; ++ if (state != gkeys[i].last_state) { ++ gkeys[i].last_state = state; ++ /* for power key, we want power & key press/release event */ ++ if (gkeys[i].type == EV_PWR) { ++ input_event(input, EV_KEY, gkeys[i].key_code, !!state); ++ input_sync(input); ++ } ++ /* Disable wifi on key press but not key release */ ++ /* ++ * On firmware >= 0x13 the EC_STATUS_WLAN has it's ++ * original meaning of Wifi status and no more the ++ * wifi button status so we have to ignore the event ++ * on theses versions ++ */ ++ if (state && (gkeys[i].key_code == KEY_WLAN) && (data->version < 0x13)) { ++ mutex_lock(&data->mutex); ++ ec_wlan_en(client, !ec_wlan_status(client)); ++ if (gpio16) ++ gpio_set_value(SM502_WLAN_ON, !ec_wlan_status(client)); ++ mutex_unlock(&data->mutex); ++ } ++ ++ input_event(input, gkeys[i].type, gkeys[i].key_code, !!state); ++ input_sync(input); ++ } ++ } ++} ++ ++static int gdium_laptop_input_init(struct gdium_laptop_data *data) ++{ ++ struct i2c_client *client = data->client; ++ struct input_dev *input; ++ int ret, i; ++ ++ data->input_polldev = input_allocate_polled_device(); ++ if (!data->input_polldev) { ++ ret = -ENOMEM; ++ goto err; ++ } ++ ++ input = data->input_polldev->input; ++ input->evbit[0] = BIT(EV_KEY) | BIT_MASK(EV_PWR) | BIT_MASK(EV_SW); ++ data->input_polldev->poll = gdium_laptop_keys_poll; ++ data->input_polldev->poll_interval = SCAN_INTERVAL; ++ data->input_polldev->private = data; ++ input->name = "gdium-keys"; ++ input->dev.parent = &client->dev; ++ ++ input->id.bustype = BUS_HOST; ++ input->id.vendor = 0x0001; ++ input->id.product = 0x0001; ++ input->id.version = 0x0100; ++ ++ for (i = 0; i < ARRAY_SIZE(gkeys); i++) ++ input_set_capability(input, gkeys[i].type, gkeys[i].key_code); ++ ++ ret = input_register_polled_device(data->input_polldev); ++ if (ret) { ++ dev_err(&client->dev, "Unable to register button device\n"); ++ goto err_poll_dev; ++ } ++ ++ return 0; ++ ++err_poll_dev: ++ input_free_polled_device(data->input_polldev); ++err: ++ return ret; ++} ++ ++static void gdium_laptop_input_exit(struct gdium_laptop_data *data) ++{ ++ input_unregister_polled_device(data->input_polldev); ++ input_free_polled_device(data->input_polldev); ++} ++ ++/**********************************************************************/ ++/* Battery management */ ++/**********************************************************************/ ++static int gdium_ac_get_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ char status; ++ struct gdium_laptop_data *data = container_of(psy, struct gdium_laptop_data, gdium_ac); ++ int ret = 0; ++ ++ if (!data) { ++ pr_err("gdium-ac: gdium_laptop_data not found\n"); ++ return -EINVAL; ++ } ++ ++ status = data->status; ++ switch (psp) { ++ case POWER_SUPPLY_PROP_ONLINE: ++ val->intval = !!(status & EC_STATUS_ADAPT); ++ break; ++ default: ++ ret = -EINVAL; ++ break; ++ } ++ ++ return ret; ++} ++ ++#undef RET ++#define RET (val->intval) ++ ++static int gdium_battery_get_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ char status, ctrl; ++ struct gdium_laptop_data *data = container_of(psy, struct gdium_laptop_data, gdium_battery); ++ int percentage_capacity = 0, charge_now = 0, time_to_empty = 0; ++ int ret = 0, tmp; ++ ++ if (!data) { ++ pr_err("gdium-battery: gdium_laptop_data not found\n"); ++ return -EINVAL; ++ } ++ ++ status = data->status; ++ ctrl = data->ctrl; ++ switch (psp) { ++ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: ++ /* uAh */ ++ RET = 5000000; ++ break; ++ case POWER_SUPPLY_PROP_CURRENT_NOW: ++ case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW: ++ /* This formula is gotten by gnuplot with the statistic data */ ++ time_to_empty = (data->battery_level - BAT_MIN_MV + BAT_READ_ERROR_MV) * 113 - 29870; ++ if (psp == POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW) { ++ /* seconds */ ++ RET = time_to_empty / 10; ++ break; ++ } ++ /* fall through */ ++ case POWER_SUPPLY_PROP_CHARGE_NOW: ++ case POWER_SUPPLY_PROP_CAPACITY: { ++ tmp = data->battery_level * 1000; ++ /* > BAT_MIN to avoid negative values */ ++ percentage_capacity = 0; ++ if ((status & EC_STATUS_BATID) && (tmp > BAT_MIN)) ++ percentage_capacity = (tmp-BAT_MIN)*100/(BAT_MAX-BAT_MIN); ++ ++ if (percentage_capacity > 100) ++ percentage_capacity = 100; ++ ++ if (psp == POWER_SUPPLY_PROP_CAPACITY) { ++ RET = percentage_capacity; ++ break; ++ } ++ charge_now = 50000 * percentage_capacity; ++ if (psp == POWER_SUPPLY_PROP_CHARGE_NOW) { ++ /* uAh */ ++ RET = charge_now; ++ break; ++ } ++ } /* fall through */ ++ case POWER_SUPPLY_PROP_STATUS: { ++ if (status & EC_STATUS_ADAPT) ++ if (ctrl & EC_CTRL_CHARGE_EN) ++ RET = POWER_SUPPLY_STATUS_CHARGING; ++ else ++ RET = POWER_SUPPLY_STATUS_NOT_CHARGING; ++ else ++ RET = POWER_SUPPLY_STATUS_DISCHARGING; ++ ++ if (psp == POWER_SUPPLY_PROP_STATUS) ++ break; ++ /* mAh -> µA */ ++ switch (RET) { ++ case POWER_SUPPLY_STATUS_CHARGING: ++ RET = -(data->charge_cmd == 2) ? 1400000 : 250000; ++ break; ++ case POWER_SUPPLY_STATUS_DISCHARGING: ++ RET = charge_now / time_to_empty * 36000; ++ break; ++ case POWER_SUPPLY_STATUS_NOT_CHARGING: ++ default: ++ RET = 0; ++ break; ++ } ++ } break; ++ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: ++ RET = BAT_MAX+BAT_READ_ERROR; ++ break; ++ case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: ++ RET = BAT_MIN-BAT_READ_ERROR; ++ break; ++ case POWER_SUPPLY_PROP_VOLTAGE_NOW: ++ /* mV -> uV */ ++ RET = data->battery_level * 1000; ++ break; ++ case POWER_SUPPLY_PROP_PRESENT: ++#if CONFIG_GDIUM_VERSION > 2 ++ RET = !!(status & EC_STATUS_BATID); ++#else ++ RET = !!(data->battery_level > BAT_VOLT_PRESENT); ++#endif ++ break; ++ case POWER_SUPPLY_PROP_CAPACITY_LEVEL: ++ tmp = data->battery_level * 1000; ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; ++ if (status & EC_STATUS_BATID) { ++ if (tmp >= BAT_MAX) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_HIGH; ++ if (tmp >= BAT_MAX+BAT_READ_ERROR) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_FULL; ++ } else if (tmp <= BAT_MIN+BAT_READ_ERROR) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_LOW; ++ if (tmp <= BAT_MIN) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; ++ } else ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; ++ } ++ break; ++ case POWER_SUPPLY_PROP_CHARGE_TYPE: ++ if (ctrl & EC_CTRL_TRICKLE) ++ RET = POWER_SUPPLY_CHARGE_TYPE_TRICKLE; ++ else if (ctrl & EC_CTRL_CHARGE_EN) ++ RET = POWER_SUPPLY_CHARGE_TYPE_FAST; ++ else ++ RET = POWER_SUPPLY_CHARGE_TYPE_NONE; ++ break; ++ case POWER_SUPPLY_PROP_CURRENT_MAX: ++ /* 1.4A ? */ ++ RET = 1400000; ++ break; ++ default: ++ break; ++ } ++ ++ return ret; ++} ++#undef RET ++ ++static enum power_supply_property gdium_ac_props[] = { ++ POWER_SUPPLY_PROP_ONLINE, ++}; ++ ++static enum power_supply_property gdium_battery_props[] = { ++ POWER_SUPPLY_PROP_STATUS, ++ POWER_SUPPLY_PROP_PRESENT, ++ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_NOW, ++ POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, ++ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, ++ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, ++ POWER_SUPPLY_PROP_VOLTAGE_NOW, ++ POWER_SUPPLY_PROP_CURRENT_MAX, ++ POWER_SUPPLY_PROP_CURRENT_NOW, ++ POWER_SUPPLY_PROP_CAPACITY, ++ POWER_SUPPLY_PROP_CAPACITY_LEVEL, ++ POWER_SUPPLY_PROP_CHARGE_TYPE, ++}; ++ ++static void gdium_laptop_battery_work(struct work_struct *work) ++{ ++ struct gdium_laptop_data *data = container_of(work, struct gdium_laptop_data, work.work); ++ struct i2c_client *client; ++ int ret; ++ char old_status, old_charge_cmd; ++ char present; ++ s32 status; ++ ++ mutex_lock(&data->mutex); ++ client = data->client; ++ status = ec_read_status(client); ++ ret = ec_read_battery(client); ++ ++ if ((status < 0) || (ret < 0)) ++ goto i2c_read_error; ++ ++ old_status = data->status; ++ old_charge_cmd = data->charge_cmd; ++ data->status = status; ++ ++ /* ++ * Charge only if : ++ * - battery present ++ * - ac adapter plugged in ++ * - battery not fully charged ++ */ ++#if CONFIG_GDIUM_VERSION > 2 ++ present = !!(data->status & EC_STATUS_BATID); ++#else ++ present = !!(ret > BAT_VOLT_PRESENT); ++#endif ++ data->battery_level = 0; ++ if (present) { ++ data->battery_level = (unsigned int)ret; ++ if (data->status & EC_STATUS_ADAPT) ++ data->battery_level -= BAT_READ_ERROR_MV; ++ } ++ ++ data->charge_cmd = 0; ++ if ((data->status & EC_STATUS_ADAPT) && present && (data->battery_level <= BAT_MAX_MV)) ++ data->charge_cmd = (ret < BAT_TRICKLE_EN) ? 2 : 3; ++ ++ ec_charge_en(client, (data->charge_cmd >> 1) & 1, data->charge_cmd & 1); ++ ++ /* ++ * data->ctrl must be set _after_ calling ec_charge_en as this will change the ++ * control register content ++ */ ++ data->ctrl = ec_read_ctrl(client); ++ ++ if ((data->status & EC_STATUS_ADAPT) != (old_status & EC_STATUS_ADAPT)) { ++ power_supply_changed(&data->gdium_ac); ++ /* Send charging/discharging state change */ ++ power_supply_changed(&data->gdium_battery); ++ } else if ((data->status & EC_STATUS_ADAPT) && ++ ((old_charge_cmd&2) != (data->charge_cmd&2))) ++ power_supply_changed(&data->gdium_battery); ++ ++i2c_read_error: ++ mutex_unlock(&data->mutex); ++ queue_delayed_work(data->workqueue, &data->work, msecs_to_jiffies(BAT_SCAN_INTERVAL)); ++} ++ ++static int gdium_laptop_battery_init(struct gdium_laptop_data *data) ++{ ++ int ret; ++ ++ data->bat_pdev = platform_device_register_simple("gdium-battery", 0, NULL, 0); ++ if (IS_ERR(data->bat_pdev)) ++ return PTR_ERR(data->bat_pdev); ++ ++ data->gdium_battery.name = data->bat_pdev->name; ++ data->gdium_battery.properties = gdium_battery_props; ++ data->gdium_battery.num_properties = ARRAY_SIZE(gdium_battery_props); ++ data->gdium_battery.get_property = gdium_battery_get_props; ++ data->gdium_battery.use_for_apm = 1; ++ ++ ret = power_supply_register(&data->bat_pdev->dev, &data->gdium_battery); ++ if (ret) ++ goto err_platform; ++ ++ data->gdium_ac.name = "gdium-ac"; ++ data->gdium_ac.type = POWER_SUPPLY_TYPE_MAINS; ++ data->gdium_ac.properties = gdium_ac_props; ++ data->gdium_ac.num_properties = ARRAY_SIZE(gdium_ac_props); ++ data->gdium_ac.get_property = gdium_ac_get_props; ++/* data->gdium_ac.use_for_apm_ac = 1, */ ++ ++ ret = power_supply_register(&data->bat_pdev->dev, &data->gdium_ac); ++ if (ret) ++ goto err_battery; ++ ++ if (!ec) { ++ INIT_DELAYED_WORK(&data->work, gdium_laptop_battery_work); ++ data->workqueue = create_singlethread_workqueue("gdium-battery-work"); ++ if (!data->workqueue) { ++ ret = -ESRCH; ++ goto err_work; ++ } ++ queue_delayed_work(data->workqueue, &data->work, msecs_to_jiffies(BAT_SCAN_INTERVAL)); ++ } ++ ++ return 0; ++ ++err_work: ++err_battery: ++ power_supply_unregister(&data->gdium_battery); ++err_platform: ++ platform_device_unregister(data->bat_pdev); ++ ++ return ret; ++} ++static void gdium_laptop_battery_exit(struct gdium_laptop_data *data) ++{ ++ if (!ec) { ++ cancel_rearming_delayed_workqueue(data->workqueue, &data->work); ++ destroy_workqueue(data->workqueue); ++ } ++ power_supply_unregister(&data->gdium_battery); ++ power_supply_unregister(&data->gdium_ac); ++ platform_device_unregister(data->bat_pdev); ++} ++ ++/* Debug fs */ ++static int gdium_laptop_regs_show(struct seq_file *s, void *p) ++{ ++ struct gdium_laptop_data *data = s->private; ++ struct i2c_client *client = data->client; ++ ++ mutex_lock(&data->mutex); ++ seq_printf(s, "Version : 0x%02x\n", (unsigned char)ec_read_version(client)); ++ seq_printf(s, "Status : 0x%02x\n", (unsigned char)ec_read_status(client)); ++ seq_printf(s, "Ctrl : 0x%02x\n", (unsigned char)ec_read_ctrl(client)); ++ seq_printf(s, "Sign : 0x%02x\n", (unsigned char)ec_read_sign(client)); ++ seq_printf(s, "Bat Lo : 0x%02x\n", (unsigned char)i2c_smbus_read_byte_data(client, EC_BAT_LOW)); ++ seq_printf(s, "Bat Hi : 0x%02x\n", (unsigned char)i2c_smbus_read_byte_data(client, EC_BAT_HIGH)); ++ seq_printf(s, "Battery : %d uV\n", (unsigned int)ec_read_battery(client) * 1000); ++ seq_printf(s, "Charge cmd : %s %s\n", data->charge_cmd & 2 ? "C" : " ", data->charge_cmd & 1 ? "T" : " "); ++ ++ mutex_unlock(&data->mutex); ++ return 0; ++} ++ ++static int gdium_laptop_regs_open(struct inode *inode, ++ struct file *file) ++{ ++ return single_open(file, gdium_laptop_regs_show, inode->i_private); ++} ++ ++static const struct file_operations gdium_laptop_regs_fops = { ++ .open = gdium_laptop_regs_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .owner = THIS_MODULE, ++}; ++ ++ ++static int gdium_laptop_probe(struct i2c_client *client, const struct i2c_device_id *id) ++{ ++ struct gdium_laptop_data *data; ++ int ret; ++ ++ if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { ++ dev_err(&client->dev, ++ "%s: no smbus_byte support !\n", __func__); ++ return -ENODEV; ++ } ++ ++ data = kzalloc(sizeof(struct gdium_laptop_data), GFP_KERNEL); ++ if (!data) ++ return -ENOMEM; ++ ++ i2c_set_clientdata(client, data); ++ data->client = client; ++ mutex_init(&data->mutex); ++ ++ ret = ec_read_version(client); ++ if (ret < 0) ++ goto err_alloc; ++ ++ data->version = (unsigned char)ret; ++ ++ ret = gdium_laptop_input_init(data); ++ if (ret) ++ goto err_alloc; ++ ++ ret = gdium_laptop_battery_init(data); ++ if (ret) ++ goto err_input; ++ ++ ++ if (!ec) { ++ ret = ec_write_sign(client, EC_SIGN_OS); ++ if (ret) ++ goto err_sign; ++ } ++ ++ if (gpio16) { ++ ret = gpio_request(SM502_WLAN_ON, "wlan-on"); ++ if (ret < 0) ++ goto err_sign; ++ gpio_set_value(SM502_WLAN_ON, ec_wlan_status(client)); ++ gpio_direction_output(SM502_WLAN_ON, 1); ++ } ++ ++ dev_info(&client->dev, "Found firmware 0x%02x\n", data->version); ++ data->debugfs = debugfs_create_file("gdium_laptop", S_IFREG | S_IRUGO, ++ NULL, data, &gdium_laptop_regs_fops); ++ ++ return 0; ++ ++err_sign: ++ gdium_laptop_battery_exit(data); ++err_input: ++ gdium_laptop_input_exit(data); ++err_alloc: ++ kfree(data); ++ return ret; ++} ++ ++static int gdium_laptop_remove(struct i2c_client *client) ++{ ++ struct gdium_laptop_data *data = i2c_get_clientdata(client); ++ ++ if (gpio16) ++ gpio_free(SM502_WLAN_ON); ++ ec_write_sign(client, EC_SIGN_EC); ++ if (data->debugfs) ++ debugfs_remove(data->debugfs); ++ ++ gdium_laptop_battery_exit(data); ++ gdium_laptop_input_exit(data); ++ ++ kfree(data); ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++static int gdium_laptop_suspend(struct i2c_client *client, pm_message_t msg) ++{ ++ struct gdium_laptop_data *data = i2c_get_clientdata(client); ++ ++ if (!ec) ++ cancel_rearming_delayed_workqueue(data->workqueue, &data->work); ++ return 0; ++} ++ ++static int gdium_laptop_resume(struct i2c_client *client) ++{ ++ struct gdium_laptop_data *data = i2c_get_clientdata(client); ++ ++ if (!ec) ++ queue_delayed_work(data->workqueue, &data->work, msecs_to_jiffies(BAT_SCAN_INTERVAL)); ++ return 0; ++} ++#else ++#define gdium_laptop_suspend NULL ++#define gdium_laptop_resume NULL ++#endif ++static const struct i2c_device_id gdium_id[] = { ++ { "gdium-laptop" }, ++ {}, ++}; ++MODULE_DEVICE_TABLE(i2c, gdium_id); ++ ++static struct i2c_driver gdium_laptop_driver = { ++ .driver = { ++ .name = "gdium-laptop", ++ .owner = THIS_MODULE, ++ }, ++ .probe = gdium_laptop_probe, ++ .remove = gdium_laptop_remove, ++ .shutdown = gdium_laptop_remove, ++ .suspend = gdium_laptop_suspend, ++ .resume = gdium_laptop_resume, ++ .id_table = gdium_id, ++}; ++ ++static int __init gdium_laptop_init(void) ++{ ++ return i2c_add_driver(&gdium_laptop_driver); ++} ++ ++static void __exit gdium_laptop_exit(void) ++{ ++ i2c_del_driver(&gdium_laptop_driver); ++} ++ ++module_init(gdium_laptop_init); ++module_exit(gdium_laptop_exit); ++ ++MODULE_AUTHOR("Arnaud Patard "); ++MODULE_DESCRIPTION("Gdium laptop extras"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/mips/lynloong_pc.c b/drivers/platform/mips/lynloong_pc.c +new file mode 100644 +index 0000000..68f29e4 +--- /dev/null ++++ b/drivers/platform/mips/lynloong_pc.c +@@ -0,0 +1,515 @@ ++/* ++ * Driver for LynLoong PC extras ++ * ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin , Xiang Yu ++ * ++ * 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 /* for backlight subdriver */ ++#include ++#include /* for video output subdriver */ ++#include /* for suspend support */ ++ ++#include ++#include ++ ++#include ++ ++static u32 gpio_base, mfgpt_base; ++ ++static void set_gpio_reg_high(int gpio, int reg) ++{ ++ u32 val; ++ ++ val = inl(gpio_base + reg); ++ val |= (1 << gpio); ++ val &= ~(1 << (16 + gpio)); ++ outl(val, gpio_base + reg); ++ mmiowb(); ++} ++ ++static void set_gpio_reg_low(int gpio, int reg) ++{ ++ u32 val; ++ ++ val = inl(gpio_base + reg); ++ val |= (1 << (16 + gpio)); ++ val &= ~(1 << gpio); ++ outl(val, gpio_base + reg); ++ mmiowb(); ++} ++ ++static void set_gpio_output_low(int gpio) ++{ ++ set_gpio_reg_high(gpio, GPIOL_OUT_EN); ++ set_gpio_reg_low(gpio, GPIOL_OUT_VAL); ++} ++ ++static void set_gpio_output_high(int gpio) ++{ ++ set_gpio_reg_high(gpio, GPIOL_OUT_EN); ++ set_gpio_reg_high(gpio, GPIOL_OUT_VAL); ++} ++ ++/* backlight subdriver */ ++ ++#define MAX_BRIGHTNESS 100 ++#define DEFAULT_BRIGHTNESS 50 ++#define MIN_BRIGHTNESS 0 ++static unsigned int level; ++ ++DEFINE_SPINLOCK(backlight_lock); ++/* Tune the brightness */ ++static void setup_mfgpt2(void) ++{ ++ unsigned long flags; ++ ++ spin_lock_irqsave(&backlight_lock, flags); ++ ++ /* Set MFGPT2 comparator 1,2 */ ++ outw(MAX_BRIGHTNESS-level, MFGPT2_CMP1); ++ outw(MAX_BRIGHTNESS, MFGPT2_CMP2); ++ /* Clear MFGPT2 UP COUNTER */ ++ outw(0, MFGPT2_CNT); ++ /* Enable counter, compare mode, 32k */ ++ outw(0x8280, MFGPT2_SETUP); ++ ++ spin_unlock_irqrestore(&backlight_lock, flags); ++} ++ ++static int lynloong_set_brightness(struct backlight_device *bd) ++{ ++ level = (bd->props.fb_blank == FB_BLANK_UNBLANK && ++ bd->props.power == FB_BLANK_UNBLANK) ? ++ bd->props.brightness : 0; ++ ++ if (level > MAX_BRIGHTNESS) ++ level = MAX_BRIGHTNESS; ++ else if (level < MIN_BRIGHTNESS) ++ level = MIN_BRIGHTNESS; ++ ++ setup_mfgpt2(); ++ ++ return 0; ++} ++ ++static int lynloong_get_brightness(struct backlight_device *bd) ++{ ++ return level; ++} ++ ++static struct backlight_ops backlight_ops = { ++ .get_brightness = lynloong_get_brightness, ++ .update_status = lynloong_set_brightness, ++}; ++ ++static struct backlight_device *lynloong_backlight_dev; ++ ++static int lynloong_backlight_init(void) ++{ ++ int ret; ++ u32 hi; ++ struct backlight_properties props; ++ ++ /* Get gpio_base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &gpio_base); ++ /* Get mfgpt_base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &hi, &mfgpt_base); ++ /* Get gpio_base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &gpio_base); ++ ++ /* Select for mfgpt */ ++ set_gpio_reg_high(7, GPIOL_OUT_AUX1_SEL); ++ /* Enable brightness controlling */ ++ set_gpio_output_high(7); ++ ++ memset(&props, 0, sizeof(struct backlight_properties)); ++ props.max_brightness = MAX_BRIGHTNESS; ++ props.type = BACKLIGHT_PLATFORM; ++ lynloong_backlight_dev = backlight_device_register("backlight0", NULL, ++ NULL, &backlight_ops, &props); ++ ++ if (IS_ERR(lynloong_backlight_dev)) { ++ ret = PTR_ERR(lynloong_backlight_dev); ++ return ret; ++ } ++ ++ lynloong_backlight_dev->props.brightness = DEFAULT_BRIGHTNESS; ++ backlight_update_status(lynloong_backlight_dev); ++ ++ return 0; ++} ++ ++static void lynloong_backlight_exit(void) ++{ ++ if (lynloong_backlight_dev) { ++ backlight_device_unregister(lynloong_backlight_dev); ++ lynloong_backlight_dev = NULL; ++ } ++ /* Disable brightness controlling */ ++ set_gpio_output_low(7); ++} ++ ++/* video output driver */ ++static int vo_status = 1; ++ ++static int lcd_video_output_get(struct output_device *od) ++{ ++ return vo_status; ++} ++ ++static int lcd_video_output_set(struct output_device *od) ++{ ++ int i; ++ unsigned long status; ++ ++ status = !!od->request_state; ++ ++ if (status == 0) { ++ /* Set the current status as off */ ++ vo_status = 0; ++ /* Turn off the backlight */ ++ set_gpio_output_low(11); ++ for (i = 0; i < 0x500; i++) ++ delay(); ++ /* Turn off the LCD */ ++ set_gpio_output_high(8); ++ } else { ++ /* Turn on the LCD */ ++ set_gpio_output_low(8); ++ for (i = 0; i < 0x500; i++) ++ delay(); ++ /* Turn on the backlight */ ++ set_gpio_output_high(11); ++ /* Set the current status as on */ ++ vo_status = 1; ++ } ++ ++ return 0; ++} ++ ++static struct output_properties lcd_output_properties = { ++ .set_state = lcd_video_output_set, ++ .get_status = lcd_video_output_get, ++}; ++ ++static struct output_device *lcd_output_dev; ++ ++static void lynloong_lcd_vo_set(int status) ++{ ++ lcd_output_dev->request_state = status; ++ lcd_video_output_set(lcd_output_dev); ++} ++ ++static int lynloong_vo_init(void) ++{ ++ int ret; ++ ++ /* Register video output device: lcd */ ++ lcd_output_dev = video_output_register("LCD", NULL, NULL, ++ &lcd_output_properties); ++ ++ if (IS_ERR(lcd_output_dev)) { ++ ret = PTR_ERR(lcd_output_dev); ++ lcd_output_dev = NULL; ++ return ret; ++ } ++ /* Ensure LCD is on by default */ ++ lynloong_lcd_vo_set(1); ++ ++ return 0; ++} ++ ++static void lynloong_vo_exit(void) ++{ ++ if (lcd_output_dev) { ++ video_output_unregister(lcd_output_dev); ++ lcd_output_dev = NULL; ++ } ++} ++ ++/* suspend support */ ++ ++#ifdef CONFIG_PM ++ ++static u32 smb_base; ++ ++/* I2C operations */ ++ ++static int i2c_wait(void) ++{ ++ char c; ++ int i; ++ ++ udelay(1000); ++ for (i = 0; i < 20; i++) { ++ c = inb(smb_base | SMB_STS); ++ if (c & (SMB_STS_BER | SMB_STS_NEGACK)) ++ return -1; ++ if (c & SMB_STS_SDAST) ++ return 0; ++ udelay(100); ++ } ++ return -2; ++} ++ ++static void i2c_read_single(int addr, int regNo, char *value) ++{ ++ unsigned char c; ++ ++ /* Start condition */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_START, smb_base | SMB_CTRL1); ++ i2c_wait(); ++ ++ /* Send slave address */ ++ outb(addr & 0xfe, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Acknowledge smbus */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_ACK, smb_base | SMB_CTRL1); ++ ++ /* Send register index */ ++ outb(regNo, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Acknowledge smbus */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_ACK, smb_base | SMB_CTRL1); ++ ++ /* Start condition again */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_START, smb_base | SMB_CTRL1); ++ i2c_wait(); ++ ++ /* Send salve address again */ ++ outb(1 | addr, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Acknowledge smbus */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_ACK, smb_base | SMB_CTRL1); ++ ++ /* Read data */ ++ *value = inb(smb_base | SMB_SDA); ++ ++ /* Stop condition */ ++ outb(SMB_CTRL1_STOP, smb_base | SMB_CTRL1); ++ i2c_wait(); ++} ++ ++static void i2c_write_single(int addr, int regNo, char value) ++{ ++ unsigned char c; ++ ++ /* Start condition */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_START, smb_base | SMB_CTRL1); ++ i2c_wait(); ++ /* Send slave address */ ++ outb(addr & 0xfe, smb_base | SMB_SDA); ++ i2c_wait();; ++ ++ /* Send register index */ ++ outb(regNo, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Write data */ ++ outb(value, smb_base | SMB_SDA); ++ i2c_wait(); ++ /* Stop condition */ ++ outb(SMB_CTRL1_STOP, smb_base | SMB_CTRL1); ++ i2c_wait(); ++} ++ ++static void stop_clock(int clk_reg, int clk_sel) ++{ ++ u8 value; ++ ++ i2c_read_single(0xd3, clk_reg, &value); ++ value &= ~(1 << clk_sel); ++ i2c_write_single(0xd2, clk_reg, value); ++} ++ ++static void enable_clock(int clk_reg, int clk_sel) ++{ ++ u8 value; ++ ++ i2c_read_single(0xd3, clk_reg, &value); ++ value |= (1 << clk_sel); ++ i2c_write_single(0xd2, clk_reg, value); ++} ++ ++static char cached_clk_freq; ++static char cached_pci_fixed_freq; ++ ++static void decrease_clk_freq(void) ++{ ++ char value; ++ ++ i2c_read_single(0xd3, 1, &value); ++ cached_clk_freq = value; ++ ++ /* Select frequency by software */ ++ value |= (1 << 1); ++ /* CPU, 3V66, PCI : 100, 66, 33(1) */ ++ value |= (1 << 2); ++ i2c_write_single(0xd2, 1, value); ++ ++ /* Cache the pci frequency */ ++ i2c_read_single(0xd3, 14, &value); ++ cached_pci_fixed_freq = value; ++ ++ /* Enable PCI fix mode */ ++ value |= (1 << 5); ++ /* 3V66, PCI : 64MHz, 32MHz */ ++ value |= (1 << 3); ++ i2c_write_single(0xd2, 14, value); ++ ++} ++ ++static void resume_clk_freq(void) ++{ ++ i2c_write_single(0xd2, 1, cached_clk_freq); ++ i2c_write_single(0xd2, 14, cached_pci_fixed_freq); ++} ++ ++static void stop_clocks(void) ++{ ++ /* CPU Clock Register */ ++ stop_clock(2, 5); /* not used */ ++ stop_clock(2, 6); /* not used */ ++ stop_clock(2, 7); /* not used */ ++ ++ /* PCI Clock Register */ ++ stop_clock(3, 1); /* 8100 */ ++ stop_clock(3, 5); /* SIS */ ++ stop_clock(3, 0); /* not used */ ++ stop_clock(3, 6); /* not used */ ++ ++ /* PCI 48M Clock Register */ ++ stop_clock(4, 6); /* USB grounding */ ++ stop_clock(4, 5); /* REF(5536_14M) */ ++ ++ /* 3V66 Control Register */ ++ stop_clock(5, 0); /* VCH_CLK..., grounding */ ++} ++ ++static void enable_clocks(void) ++{ ++ enable_clock(3, 1); /* 8100 */ ++ enable_clock(3, 5); /* SIS */ ++ ++ enable_clock(4, 6); ++ enable_clock(4, 5); /* REF(5536_14M) */ ++ ++ enable_clock(5, 0); /* VCH_CLOCK, grounding */ ++} ++ ++static int lynloong_suspend(struct device *dev) ++{ ++ /* Disable AMP */ ++ set_gpio_output_high(6); ++ /* Turn off LCD */ ++ lynloong_lcd_vo_set(0); ++ ++ /* Stop the clocks of some devices */ ++ stop_clocks(); ++ ++ /* Decrease the external clock frequency */ ++ decrease_clk_freq(); ++ ++ return 0; ++} ++ ++static int lynloong_resume(struct device *dev) ++{ ++ /* Turn on the LCD */ ++ lynloong_lcd_vo_set(1); ++ ++ /* Resume clock frequency, enable the relative clocks */ ++ resume_clk_freq(); ++ enable_clocks(); ++ ++ /* Enable AMP */ ++ set_gpio_output_low(6); ++ ++ return 0; ++} ++ ++static const SIMPLE_DEV_PM_OPS(lynloong_pm_ops, lynloong_suspend, ++ lynloong_resume); ++#endif /* !CONFIG_PM */ ++ ++static struct platform_device_id platform_device_ids[] = { ++ { ++ .name = "lynloong_pc", ++ }, ++ {} ++}; ++ ++MODULE_DEVICE_TABLE(platform, platform_device_ids); ++ ++static struct platform_driver platform_driver = { ++ .driver = { ++ .name = "lynloong_pc", ++ .owner = THIS_MODULE, ++#ifdef CONFIG_PM ++ .pm = &lynloong_pm_ops, ++#endif ++ }, ++ .id_table = platform_device_ids, ++}; ++ ++static int __init lynloong_init(void) ++{ ++ int ret; ++ ++ pr_info("LynLoong platform specific driver loaded.\n"); ++ ++ /* Register platform stuff */ ++ ret = platform_driver_register(&platform_driver); ++ if (ret) { ++ pr_err("Failed to register LynLoong platform driver.\n"); ++ return ret; ++ } ++ ++ ret = lynloong_backlight_init(); ++ if (ret) { ++ pr_err("Failed to register LynLoong backlight driver.\n"); ++ return ret; ++ } ++ ++ ret = lynloong_vo_init(); ++ if (ret) { ++ pr_err("Failed to register LynLoong backlight driver.\n"); ++ lynloong_vo_exit(); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static void __exit lynloong_exit(void) ++{ ++ lynloong_vo_exit(); ++ lynloong_backlight_exit(); ++ platform_driver_unregister(&platform_driver); ++ ++ pr_info("LynLoong platform specific driver unloaded.\n"); ++} ++ ++module_init(lynloong_init); ++module_exit(lynloong_exit); ++ ++MODULE_AUTHOR("Wu Zhangjin ; Xiang Yu "); ++MODULE_DESCRIPTION("LynLoong PC driver"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/mips/yeeloong_ecrom.c b/drivers/platform/mips/yeeloong_ecrom.c +new file mode 100644 +index 0000000..1bfe4cf +--- /dev/null ++++ b/drivers/platform/mips/yeeloong_ecrom.c +@@ -0,0 +1,944 @@ ++/* ++ * Driver for flushing/dumping ROM of EC on YeeLoong laptop ++ * ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: liujl ++ * ++ * NOTE : ++ * The EC resources accessing and programming are supported. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define EC_MISC_DEV "ec_misc" ++#define EC_IOC_MAGIC 'E' ++ ++/* ec registers range */ ++#define EC_MAX_REGADDR 0xFFFF ++#define EC_MIN_REGADDR 0xF000 ++#define EC_RAM_ADDR 0xF800 ++ ++/* version burned address */ ++#define VER_ADDR 0xf7a1 ++#define VER_MAX_SIZE 7 ++#define EC_ROM_MAX_SIZE 0x10000 ++ ++/* ec internal register */ ++#define REG_POWER_MODE 0xF710 ++#define FLAG_NORMAL_MODE 0x00 ++#define FLAG_IDLE_MODE 0x01 ++#define FLAG_RESET_MODE 0x02 ++ ++/* ec update program flag */ ++#define PROGRAM_FLAG_NONE 0x00 ++#define PROGRAM_FLAG_IE 0x01 ++#define PROGRAM_FLAG_ROM 0x02 ++ ++/* XBI relative registers */ ++#define REG_XBISEG0 0xFEA0 ++#define REG_XBISEG1 0xFEA1 ++#define REG_XBIRSV2 0xFEA2 ++#define REG_XBIRSV3 0xFEA3 ++#define REG_XBIRSV4 0xFEA4 ++#define REG_XBICFG 0xFEA5 ++#define REG_XBICS 0xFEA6 ++#define REG_XBIWE 0xFEA7 ++#define REG_XBISPIA0 0xFEA8 ++#define REG_XBISPIA1 0xFEA9 ++#define REG_XBISPIA2 0xFEAA ++#define REG_XBISPIDAT 0xFEAB ++#define REG_XBISPICMD 0xFEAC ++#define REG_XBISPICFG 0xFEAD ++#define REG_XBISPIDATR 0xFEAE ++#define REG_XBISPICFG2 0xFEAF ++ ++/* commands definition for REG_XBISPICMD */ ++#define SPICMD_WRITE_STATUS 0x01 ++#define SPICMD_BYTE_PROGRAM 0x02 ++#define SPICMD_READ_BYTE 0x03 ++#define SPICMD_WRITE_DISABLE 0x04 ++#define SPICMD_READ_STATUS 0x05 ++#define SPICMD_WRITE_ENABLE 0x06 ++#define SPICMD_HIGH_SPEED_READ 0x0B ++#define SPICMD_POWER_DOWN 0xB9 ++#define SPICMD_SST_EWSR 0x50 ++#define SPICMD_SST_SEC_ERASE 0x20 ++#define SPICMD_SST_BLK_ERASE 0x52 ++#define SPICMD_SST_CHIP_ERASE 0x60 ++#define SPICMD_FRDO 0x3B ++#define SPICMD_SEC_ERASE 0xD7 ++#define SPICMD_BLK_ERASE 0xD8 ++#define SPICMD_CHIP_ERASE 0xC7 ++ ++/* bits definition for REG_XBISPICFG */ ++#define SPICFG_AUTO_CHECK 0x01 ++#define SPICFG_SPI_BUSY 0x02 ++#define SPICFG_DUMMY_READ 0x04 ++#define SPICFG_EN_SPICMD 0x08 ++#define SPICFG_LOW_SPICS 0x10 ++#define SPICFG_EN_SHORT_READ 0x20 ++#define SPICFG_EN_OFFSET_READ 0x40 ++#define SPICFG_EN_FAST_READ 0x80 ++ ++/* watchdog timer registers */ ++#define REG_WDTCFG 0xfe80 ++#define REG_WDTPF 0xfe81 ++#define REG_WDT 0xfe82 ++ ++/* lpc configure register */ ++#define REG_LPCCFG 0xfe95 ++ ++/* 8051 reg */ ++#define REG_PXCFG 0xff14 ++ ++/* Fan register in KB3310 */ ++#define REG_ECFAN_SPEED_LEVEL 0xf4e4 ++#define REG_ECFAN_SWITCH 0xf4d2 ++ ++/* the ec flash rom id number */ ++#define EC_ROM_PRODUCT_ID_SPANSION 0x01 ++#define EC_ROM_PRODUCT_ID_MXIC 0xC2 ++#define EC_ROM_PRODUCT_ID_AMIC 0x37 ++#define EC_ROM_PRODUCT_ID_EONIC 0x1C ++ ++/* misc ioctl operations */ ++#define IOCTL_RDREG _IOR(EC_IOC_MAGIC, 1, int) ++#define IOCTL_WRREG _IOW(EC_IOC_MAGIC, 2, int) ++#define IOCTL_READ_EC _IOR(EC_IOC_MAGIC, 3, int) ++#define IOCTL_PROGRAM_IE _IOW(EC_IOC_MAGIC, 4, int) ++#define IOCTL_PROGRAM_EC _IOW(EC_IOC_MAGIC, 5, int) ++ ++/* start address for programming of EC content or IE */ ++/* ec running code start address */ ++#define EC_START_ADDR 0x00000000 ++/* ec information element storing address */ ++#define IE_START_ADDR 0x00020000 ++ ++/* EC state */ ++#define EC_STATE_IDLE 0x00 /* ec in idle state */ ++#define EC_STATE_BUSY 0x01 /* ec in busy state */ ++ ++/* timeout value for programming */ ++#define EC_FLASH_TIMEOUT 0x1000 /* ec program timeout */ ++/* command checkout timeout including cmd to port or state flag check */ ++#define EC_CMD_TIMEOUT 0x1000 ++#define EC_SPICMD_STANDARD_TIMEOUT (4 * 1000) /* unit : us */ ++#define EC_MAX_DELAY_UNIT (10) /* every time for polling */ ++#define SPI_FINISH_WAIT_TIME 10 ++/* EC content max size */ ++#define EC_CONTENT_MAX_SIZE (64 * 1024) ++#define IE_CONTENT_MAX_SIZE (0x100000 - IE_START_ADDR) ++ ++/* the register operation access struct */ ++struct ec_reg { ++ u32 addr; /* the address of kb3310 registers */ ++ u8 val; /* the register value */ ++}; ++ ++struct ec_info { ++ u32 start_addr; ++ u32 size; ++ u8 *buf; ++}; ++ ++/* open for using rom protection action */ ++#define EC_ROM_PROTECTION ++ ++/* enable the chip reset mode */ ++static int ec_init_reset_mode(void) ++{ ++ int timeout; ++ unsigned char status = 0; ++ int ret = 0; ++ ++ /* make chip goto reset mode */ ++ ret = ec_query_seq(CMD_INIT_RESET_MODE); ++ if (ret < 0) { ++ printk(KERN_ERR "ec init reset mode failed.\n"); ++ goto out; ++ } ++ ++ /* make the action take active */ ++ timeout = EC_CMD_TIMEOUT; ++ status = ec_read(REG_POWER_MODE) & FLAG_RESET_MODE; ++ while (timeout--) { ++ if (status) { ++ udelay(EC_REG_DELAY); ++ break; ++ } ++ status = ec_read(REG_POWER_MODE) & FLAG_RESET_MODE; ++ udelay(EC_REG_DELAY); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR "ec rom fixup : can't check reset status.\n"); ++ ret = -EINVAL; ++ } else ++ printk(KERN_INFO "(%d/%d)reset 0xf710 : 0x%x\n", timeout, ++ EC_CMD_TIMEOUT - timeout, status); ++ ++ /* set MCU to reset mode */ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_PXCFG); ++ status |= (1 << 0); ++ ec_write(REG_PXCFG, status); ++ udelay(EC_REG_DELAY); ++ ++ /* disable FWH/LPC */ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_LPCCFG); ++ status &= ~(1 << 7); ++ ec_write(REG_LPCCFG, status); ++ udelay(EC_REG_DELAY); ++ ++ printk(KERN_INFO "entering reset mode ok..............\n"); ++ ++ out: ++ return ret; ++} ++ ++/* make ec exit from reset mode */ ++static void ec_exit_reset_mode(void) ++{ ++ unsigned char regval; ++ ++ udelay(EC_REG_DELAY); ++ regval = ec_read(REG_LPCCFG); ++ regval |= (1 << 7); ++ ec_write(REG_LPCCFG, regval); ++ regval = ec_read(REG_PXCFG); ++ regval &= ~(1 << 0); ++ ec_write(REG_PXCFG, regval); ++ printk(KERN_INFO "exit reset mode ok..................\n"); ++ ++ return; ++} ++ ++/* make ec disable WDD */ ++static void ec_disable_WDD(void) ++{ ++ unsigned char status; ++ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_WDTCFG); ++ ec_write(REG_WDTPF, 0x03); ++ ec_write(REG_WDTCFG, (status & 0x80) | 0x48); ++ printk(KERN_INFO "Disable WDD ok..................\n"); ++ ++ return; ++} ++ ++/* make ec enable WDD */ ++static void ec_enable_WDD(void) ++{ ++ unsigned char status; ++ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_WDTCFG); ++ ec_write(REG_WDT, 0x28); /* set WDT 5sec(0x28) */ ++ ec_write(REG_WDTCFG, (status & 0x80) | 0x03); ++ printk(KERN_INFO "Enable WDD ok..................\n"); ++ ++ return; ++} ++ ++/* make ec goto idle mode */ ++static int ec_init_idle_mode(void) ++{ ++ int timeout; ++ unsigned char status = 0; ++ int ret = 0; ++ ++ ec_query_seq(CMD_INIT_IDLE_MODE); ++ ++ /* make the action take active */ ++ timeout = EC_CMD_TIMEOUT; ++ status = ec_read(REG_POWER_MODE) & FLAG_IDLE_MODE; ++ while (timeout--) { ++ if (status) { ++ udelay(EC_REG_DELAY); ++ break; ++ } ++ status = ec_read(REG_POWER_MODE) & FLAG_IDLE_MODE; ++ udelay(EC_REG_DELAY); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR "ec rom fixup : can't check out the status.\n"); ++ ret = -EINVAL; ++ } else ++ printk(KERN_INFO "(%d/%d)0xf710 : 0x%x\n", timeout, ++ EC_CMD_TIMEOUT - timeout, ec_read(REG_POWER_MODE)); ++ ++ printk(KERN_INFO "entering idle mode ok...................\n"); ++ ++ return ret; ++} ++ ++/* make ec exit from idle mode */ ++static int ec_exit_idle_mode(void) ++{ ++ ++ ec_query_seq(CMD_EXIT_IDLE_MODE); ++ ++ printk(KERN_INFO "exit idle mode ok...................\n"); ++ ++ return 0; ++} ++ ++static int ec_instruction_cycle(void) ++{ ++ unsigned long timeout; ++ int ret = 0; ++ ++ timeout = EC_FLASH_TIMEOUT; ++ while (timeout-- >= 0) { ++ if (!(ec_read(REG_XBISPICFG) & SPICFG_SPI_BUSY)) ++ break; ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR ++ "EC_INSTRUCTION_CYCLE : timeout for check flag.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ out: ++ return ret; ++} ++ ++/* To see if the ec is in busy state or not. */ ++static inline int ec_flash_busy(unsigned long timeout) ++{ ++ /* assurance the first command be going to rom */ ++ if (ec_instruction_cycle() < 0) ++ return EC_STATE_BUSY; ++#if 1 ++ timeout = timeout / EC_MAX_DELAY_UNIT; ++ while (timeout-- > 0) { ++ /* check the rom's status of busy flag */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (ec_instruction_cycle() < 0) ++ return EC_STATE_BUSY; ++ if ((ec_read(REG_XBISPIDAT) & 0x01) == 0x00) ++ return EC_STATE_IDLE; ++ udelay(EC_MAX_DELAY_UNIT); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR ++ "EC_FLASH_BUSY : timeout for check rom flag.\n"); ++ return EC_STATE_BUSY; ++ } ++#else ++ /* check the rom's status of busy flag */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (ec_instruction_cycle() < 0) ++ return EC_STATE_BUSY; ++ ++ timeout = timeout / EC_MAX_DELAY_UNIT; ++ while (timeout-- > 0) { ++ if ((ec_read(REG_XBISPIDAT) & 0x01) == 0x00) ++ return EC_STATE_IDLE; ++ udelay(EC_MAX_DELAY_UNIT); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR ++ "EC_FLASH_BUSY : timeout for check rom flag.\n"); ++ return EC_STATE_BUSY; ++ } ++#endif ++ ++ return EC_STATE_IDLE; ++} ++ ++static int rom_instruction_cycle(unsigned char cmd) ++{ ++ unsigned long timeout = 0; ++ ++ switch (cmd) { ++ case SPICMD_READ_STATUS: ++ case SPICMD_WRITE_ENABLE: ++ case SPICMD_WRITE_DISABLE: ++ case SPICMD_READ_BYTE: ++ case SPICMD_HIGH_SPEED_READ: ++ timeout = 0; ++ break; ++ case SPICMD_WRITE_STATUS: ++ timeout = 300 * 1000; ++ break; ++ case SPICMD_BYTE_PROGRAM: ++ timeout = 5 * 1000; ++ break; ++ case SPICMD_SST_SEC_ERASE: ++ case SPICMD_SEC_ERASE: ++ timeout = 1000 * 1000; ++ break; ++ case SPICMD_SST_BLK_ERASE: ++ case SPICMD_BLK_ERASE: ++ timeout = 3 * 1000 * 1000; ++ break; ++ case SPICMD_SST_CHIP_ERASE: ++ case SPICMD_CHIP_ERASE: ++ timeout = 20 * 1000 * 1000; ++ break; ++ default: ++ timeout = EC_SPICMD_STANDARD_TIMEOUT; ++ } ++ if (timeout == 0) ++ return ec_instruction_cycle(); ++ if (timeout < EC_SPICMD_STANDARD_TIMEOUT) ++ timeout = EC_SPICMD_STANDARD_TIMEOUT; ++ ++ return ec_flash_busy(timeout); ++} ++ ++/* delay for start/stop action */ ++static void delay_spi(int n) ++{ ++ while (n--) ++ inb(EC_IO_PORT_HIGH); ++} ++ ++/* start the action to spi rom function */ ++static void ec_start_spi(void) ++{ ++ unsigned char val; ++ ++ delay_spi(SPI_FINISH_WAIT_TIME); ++ val = ec_read(REG_XBISPICFG) | SPICFG_EN_SPICMD | SPICFG_AUTO_CHECK; ++ ec_write(REG_XBISPICFG, val); ++ delay_spi(SPI_FINISH_WAIT_TIME); ++} ++ ++/* stop the action to spi rom function */ ++static void ec_stop_spi(void) ++{ ++ unsigned char val; ++ ++ delay_spi(SPI_FINISH_WAIT_TIME); ++ val = ++ ec_read(REG_XBISPICFG) & (~(SPICFG_EN_SPICMD | SPICFG_AUTO_CHECK)); ++ ec_write(REG_XBISPICFG, val); ++ delay_spi(SPI_FINISH_WAIT_TIME); ++} ++ ++/* read one byte from xbi interface */ ++static int ec_read_byte(unsigned int addr, unsigned char *byte) ++{ ++ int ret = 0; ++ ++ /* enable spicmd writing. */ ++ ec_start_spi(); ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR "EC_READ_BYTE : SPICMD_WRITE_ENABLE failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* write the address */ ++ ec_write(REG_XBISPIA2, (addr & 0xff0000) >> 16); ++ ec_write(REG_XBISPIA1, (addr & 0x00ff00) >> 8); ++ ec_write(REG_XBISPIA0, (addr & 0x0000ff) >> 0); ++ /* start action */ ++ ec_write(REG_XBISPICMD, SPICMD_HIGH_SPEED_READ); ++ if (rom_instruction_cycle(SPICMD_HIGH_SPEED_READ) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_READ_BYTE : SPICMD_HIGH_SPEED_READ failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ *byte = ec_read(REG_XBISPIDAT); ++ ++ out: ++ /* disable spicmd writing. */ ++ ec_stop_spi(); ++ ++ return ret; ++} ++ ++/* write one byte to ec rom */ ++static int ec_write_byte(unsigned int addr, unsigned char byte) ++{ ++ int ret = 0; ++ ++ /* enable spicmd writing. */ ++ ec_start_spi(); ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_WRITE_BYTE : SPICMD_WRITE_ENABLE failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* write the address */ ++ ec_write(REG_XBISPIA2, (addr & 0xff0000) >> 16); ++ ec_write(REG_XBISPIA1, (addr & 0x00ff00) >> 8); ++ ec_write(REG_XBISPIA0, (addr & 0x0000ff) >> 0); ++ ec_write(REG_XBISPIDAT, byte); ++ /* start action */ ++ ec_write(REG_XBISPICMD, SPICMD_BYTE_PROGRAM); ++ if (rom_instruction_cycle(SPICMD_BYTE_PROGRAM) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_WRITE_BYTE : SPICMD_BYTE_PROGRAM failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ out: ++ /* disable spicmd writing. */ ++ ec_stop_spi(); ++ ++ return ret; ++} ++ ++/* unprotect SPI ROM */ ++/* EC_ROM_unprotect function code */ ++static int EC_ROM_unprotect(void) ++{ ++ unsigned char status; ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_UNIT_ERASE : SPICMD_WRITE_ENABLE failed.\n"); ++ return 1; ++ } ++ ++ /* unprotect the status register of rom */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (rom_instruction_cycle(SPICMD_READ_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR "EC_UNIT_ERASE : SPICMD_READ_STATUS failed.\n"); ++ return 1; ++ } ++ status = ec_read(REG_XBISPIDAT); ++ ec_write(REG_XBISPIDAT, status & 0x02); ++ if (ec_instruction_cycle() < 0) { ++ printk(KERN_ERR "EC_UNIT_ERASE : write status value failed.\n"); ++ return 1; ++ } ++ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_STATUS); ++ if (rom_instruction_cycle(SPICMD_WRITE_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_UNIT_ERASE : SPICMD_WRITE_STATUS failed.\n"); ++ return 1; ++ } ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_UNIT_ERASE : SPICMD_WRITE_ENABLE failed.\n"); ++ return 1; ++ } ++ ++ return 0; ++} ++ ++/* erase one block or chip or sector as needed */ ++static int ec_unit_erase(unsigned char erase_cmd, unsigned int addr) ++{ ++ unsigned char status; ++ int ret = 0, i = 0; ++ int unprotect_count = 3; ++ int check_flag = 0; ++ ++ /* enable spicmd writing. */ ++ ec_start_spi(); ++ ++#ifdef EC_ROM_PROTECTION ++ /* added for re-check SPICMD_READ_STATUS */ ++ while (unprotect_count-- > 0) { ++ if (EC_ROM_unprotect()) { ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* first time:500ms --> 5.5sec -->10.5sec */ ++ for (i = 0; i < ((2 - unprotect_count) * 100 + 10); i++) ++ udelay(50000); ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (rom_instruction_cycle(SPICMD_READ_STATUS) ++ == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_READ_STATUS failed.\n"); ++ } else { ++ status = ec_read(REG_XBISPIDAT); ++ printk(KERN_INFO "Read unprotect status : 0x%x\n", ++ status); ++ if ((status & 0x1C) == 0x00) { ++ printk(KERN_INFO ++ "Read unprotect status OK1 : 0x%x\n", ++ status & 0x1C); ++ check_flag = 1; ++ break; ++ } ++ } ++ } ++ ++ if (!check_flag) { ++ printk(KERN_INFO "SPI ROM unprotect fail.\n"); ++ return 1; ++ } ++#endif ++ ++ /* block address fill */ ++ if (erase_cmd == SPICMD_BLK_ERASE) { ++ ec_write(REG_XBISPIA2, (addr & 0x00ff0000) >> 16); ++ ec_write(REG_XBISPIA1, (addr & 0x0000ff00) >> 8); ++ ec_write(REG_XBISPIA0, (addr & 0x000000ff) >> 0); ++ } ++ ++ /* erase the whole chip first */ ++ ec_write(REG_XBISPICMD, erase_cmd); ++ if (rom_instruction_cycle(erase_cmd) == EC_STATE_BUSY) { ++ printk(KERN_ERR "EC_UNIT_ERASE : erase failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ out: ++ /* disable spicmd writing. */ ++ ec_stop_spi(); ++ ++ return ret; ++} ++ ++/* update the whole rom content with H/W mode ++ * PLEASE USING ec_unit_erase() FIRSTLY ++ */ ++static int ec_program_rom(struct ec_info *info, int flag) ++{ ++ unsigned int addr = 0; ++ unsigned long size = 0; ++ unsigned char *ptr = NULL; ++ unsigned char data; ++ unsigned char val = 0; ++ int ret = 0; ++ int i, j; ++ unsigned char status; ++ ++ /* modify for program serial No. ++ * set IE_START_ADDR & use idle mode, ++ * disable WDD ++ */ ++ if (flag == PROGRAM_FLAG_ROM) { ++ ret = ec_init_reset_mode(); ++ addr = info->start_addr + EC_START_ADDR; ++ printk(KERN_INFO "PROGRAM_FLAG_ROM..............\n"); ++ } else if (flag == PROGRAM_FLAG_IE) { ++ ret = ec_init_idle_mode(); ++ ec_disable_WDD(); ++ addr = info->start_addr + IE_START_ADDR; ++ printk(KERN_INFO "PROGRAM_FLAG_IE..............\n"); ++ } else { ++ return 0; ++ } ++ ++ if (ret < 0) { ++ if (flag == PROGRAM_FLAG_IE) ++ ec_enable_WDD(); ++ return ret; ++ } ++ ++ size = info->size; ++ ptr = info->buf; ++ printk(KERN_INFO "starting update ec ROM..............\n"); ++ ++ ret = ec_unit_erase(SPICMD_BLK_ERASE, addr); ++ if (ret) { ++ printk(KERN_ERR "program ec : erase block failed.\n"); ++ goto out; ++ } ++ printk(KERN_ERR "program ec : erase block OK.\n"); ++ ++ i = 0; ++ while (i < size) { ++ data = *(ptr + i); ++ ec_write_byte(addr, data); ++ ec_read_byte(addr, &val); ++ if (val != data) { ++ ec_write_byte(addr, data); ++ ec_read_byte(addr, &val); ++ if (val != data) { ++ printk(KERN_INFO ++ "EC : Second flash program failed at:\t"); ++ printk(KERN_INFO ++ "addr : 0x%x, source : 0x%x, dest: 0x%x\n", ++ addr, data, val); ++ printk(KERN_INFO "This should not happen... STOP\n"); ++ break; ++ } ++ } ++ i++; ++ addr++; ++ } ++ ++#ifdef EC_ROM_PROTECTION ++ /* we should start spi access firstly */ ++ ec_start_spi(); ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_WRITE_ENABLE failed.\n"); ++ goto out1; ++ } ++ ++ /* protect the status register of rom */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (rom_instruction_cycle(SPICMD_READ_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_READ_STATUS failed.\n"); ++ goto out1; ++ } ++ status = ec_read(REG_XBISPIDAT); ++ ++ ec_write(REG_XBISPIDAT, status | 0x1C); ++ if (ec_instruction_cycle() < 0) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : write status value failed.\n"); ++ goto out1; ++ } ++ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_STATUS); ++ if (rom_instruction_cycle(SPICMD_WRITE_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_WRITE_STATUS failed.\n"); ++ goto out1; ++ } ++#endif ++ ++ /* disable the write action to spi rom */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_DISABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_DISABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_WRITE_DISABLE failed.\n"); ++ goto out1; ++ } ++ ++ out1: ++ /* we should stop spi access firstly */ ++ ec_stop_spi(); ++ out: ++ /* for security */ ++ for (j = 0; j < 2000; j++) ++ udelay(1000); ++ ++ /* modify for program serial No. ++ * after program No exit idle mode ++ * and enable WDD ++ */ ++ if (flag == PROGRAM_FLAG_ROM) { ++ /* exit from the reset mode */ ++ ec_exit_reset_mode(); ++ } else { ++ /* ec exit from idle mode */ ++ ret = ec_exit_idle_mode(); ++ ec_enable_WDD(); ++ if (ret < 0) ++ return ret; ++ } ++ ++ return 0; ++} ++ ++/* ioctl */ ++static int misc_ioctl(struct inode *inode, struct file *filp, u_int cmd, ++ u_long arg) ++{ ++ struct ec_info ecinfo; ++ void __user *ptr = (void __user *)arg; ++ struct ec_reg *ecreg = (struct ec_reg *)(filp->private_data); ++ int ret = 0; ++ ++ switch (cmd) { ++ case IOCTL_RDREG: ++ ret = copy_from_user(ecreg, ptr, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "reg read : copy from user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecreg->addr > EC_MAX_REGADDR) ++ || (ecreg->addr < EC_MIN_REGADDR)) { ++ printk(KERN_ERR ++ "reg read : out of register address range.\n"); ++ return -EINVAL; ++ } ++ ecreg->val = ec_read(ecreg->addr); ++ ret = copy_to_user(ptr, ecreg, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "reg read : copy to user error.\n"); ++ return -EFAULT; ++ } ++ break; ++ case IOCTL_WRREG: ++ ret = copy_from_user(ecreg, ptr, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "reg write : copy from user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecreg->addr > EC_MAX_REGADDR) ++ || (ecreg->addr < EC_MIN_REGADDR)) { ++ printk(KERN_ERR ++ "reg write : out of register address range.\n"); ++ return -EINVAL; ++ } ++ ec_write(ecreg->addr, ecreg->val); ++ break; ++ case IOCTL_READ_EC: ++ ret = copy_from_user(ecreg, ptr, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "spi read : copy from user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecreg->addr > EC_RAM_ADDR) ++ && (ecreg->addr < EC_MAX_REGADDR)) { ++ printk(KERN_ERR ++ "spi read : out of register address range.\n"); ++ return -EINVAL; ++ } ++ ec_read_byte(ecreg->addr, &(ecreg->val)); ++ ret = copy_to_user(ptr, ecreg, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "spi read : copy to user error.\n"); ++ return -EFAULT; ++ } ++ break; ++ case IOCTL_PROGRAM_IE: ++ ecinfo.start_addr = EC_START_ADDR; ++ ecinfo.size = EC_CONTENT_MAX_SIZE; ++ ecinfo.buf = (u8 *) kmalloc(ecinfo.size, GFP_KERNEL); ++ if (ecinfo.buf == NULL) { ++ printk(KERN_ERR "program ie : kmalloc failed.\n"); ++ return -ENOMEM; ++ } ++ ret = copy_from_user(ecinfo.buf, (u8 *) ptr, ecinfo.size); ++ if (ret) { ++ printk(KERN_ERR "program ie : copy from user error.\n"); ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ return -EFAULT; ++ } ++ ++ /* use ec_program_rom to write serial No */ ++ ec_program_rom(&ecinfo, PROGRAM_FLAG_IE); ++ ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ break; ++ case IOCTL_PROGRAM_EC: ++ ecinfo.start_addr = EC_START_ADDR; ++ if (get_user((ecinfo.size), (u32 *) ptr)) { ++ printk(KERN_ERR "program ec : get user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecinfo.size) > EC_CONTENT_MAX_SIZE) { ++ printk(KERN_ERR "program ec : size out of limited.\n"); ++ return -EINVAL; ++ } ++ ecinfo.buf = (u8 *) kmalloc(ecinfo.size, GFP_KERNEL); ++ if (ecinfo.buf == NULL) { ++ printk(KERN_ERR "program ec : kmalloc failed.\n"); ++ return -ENOMEM; ++ } ++ ret = copy_from_user(ecinfo.buf, ((u8 *) ptr + 4), ecinfo.size); ++ if (ret) { ++ printk(KERN_ERR "program ec : copy from user error.\n"); ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ return -EFAULT; ++ } ++ ++ ec_program_rom(&ecinfo, PROGRAM_FLAG_ROM); ++ ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ break; ++ ++ default: ++ break; ++ } ++ ++ return 0; ++} ++ ++static long misc_compat_ioctl(struct file *file, unsigned int cmd, ++ unsigned long arg) ++{ ++ return misc_ioctl(file->f_dentry->d_inode, file, cmd, arg); ++} ++ ++static int misc_open(struct inode *inode, struct file *filp) ++{ ++ struct ec_reg *ecreg = NULL; ++ ecreg = kmalloc(sizeof(struct ec_reg), GFP_KERNEL); ++ if (ecreg) ++ filp->private_data = ecreg; ++ ++ return ecreg ? 0 : -ENOMEM; ++} ++ ++static int misc_release(struct inode *inode, struct file *filp) ++{ ++ struct ec_reg *ecreg = (struct ec_reg *)(filp->private_data); ++ ++ filp->private_data = NULL; ++ kfree(ecreg); ++ ++ return 0; ++} ++ ++static const struct file_operations ecmisc_fops = { ++ .open = misc_open, ++ .release = misc_release, ++ .read = NULL, ++ .write = NULL, ++#ifdef CONFIG_64BIT ++ .compat_ioctl = misc_compat_ioctl, ++#else ++ .ioctl = misc_ioctl, ++#endif ++}; ++ ++static struct miscdevice ecmisc_device = { ++ .minor = MISC_DYNAMIC_MINOR, ++ .name = EC_MISC_DEV, ++ .fops = &ecmisc_fops ++}; ++ ++static int __init ecmisc_init(void) ++{ ++ int ret; ++ ++ printk(KERN_INFO "EC misc device init.\n"); ++ ret = misc_register(&ecmisc_device); ++ ++ return ret; ++} ++ ++static void __exit ecmisc_exit(void) ++{ ++ printk(KERN_INFO "EC misc device exit.\n"); ++ misc_deregister(&ecmisc_device); ++} ++ ++module_init(ecmisc_init); ++module_exit(ecmisc_exit); ++ ++MODULE_AUTHOR("liujl "); ++MODULE_DESCRIPTION("Driver for flushing/dumping ROM of EC on YeeLoong laptop"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/mips/yeeloong_laptop.c b/drivers/platform/mips/yeeloong_laptop.c +new file mode 100644 +index 0000000..c285a67 +--- /dev/null ++++ b/drivers/platform/mips/yeeloong_laptop.c +@@ -0,0 +1,1360 @@ ++/* ++ * Driver for YeeLoong laptop extras ++ * ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin , Liu Junliang ++ * ++ * 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 /* for backlight subdriver */ ++#include ++#include /* for hwmon subdriver */ ++#include ++#include /* for video output subdriver */ ++#include /* for lcd output subdriver */ ++#include /* for hotkey subdriver */ ++#include ++#include ++#include ++#include /* for AC & Battery subdriver */ ++#include /* for register_reboot_notifier */ ++#include /* for register_pm_notifier */ ++ ++#include ++ ++#include /* for loongson_cmdline */ ++#include ++ ++#define ON 1 ++#define OFF 0 ++#define EVENT_START EVENT_LID ++ ++/* common function */ ++#define EC_VER_LEN 64 ++ ++static int ec_version_before(char *version) ++{ ++ char *p, ec_ver[EC_VER_LEN]; ++ ++ p = strstr(loongson_cmdline, "EC_VER="); ++ if (!p) ++ memset(ec_ver, 0, EC_VER_LEN); ++ else { ++ strncpy(ec_ver, p, EC_VER_LEN); ++ p = strstr(ec_ver, " "); ++ if (p) ++ *p = '\0'; ++ } ++ ++ return (strncasecmp(ec_ver, version, 64) < 0); ++} ++ ++/* backlight subdriver */ ++#define MIN_BRIGHTNESS 1 ++#define MAX_BRIGHTNESS 8 ++ ++static int yeeloong_set_brightness(struct backlight_device *bd) ++{ ++ unsigned char level; ++ static unsigned char old_level; ++ ++ level = (bd->props.fb_blank == FB_BLANK_UNBLANK && ++ bd->props.power == FB_BLANK_UNBLANK) ? ++ bd->props.brightness : 0; ++ ++ level = clamp_val(level, MIN_BRIGHTNESS, MAX_BRIGHTNESS); ++ ++ /* Avoid to modify the brightness when EC is tuning it */ ++ if (old_level != level) { ++ if (ec_read(REG_DISPLAY_BRIGHTNESS) == old_level) ++ ec_write(REG_DISPLAY_BRIGHTNESS, level); ++ old_level = level; ++ } ++ ++ return 0; ++} ++ ++static int yeeloong_get_brightness(struct backlight_device *bd) ++{ ++ return ec_read(REG_DISPLAY_BRIGHTNESS); ++} ++ ++static struct backlight_ops backlight_ops = { ++ .get_brightness = yeeloong_get_brightness, ++ .update_status = yeeloong_set_brightness, ++}; ++ ++static struct backlight_device *yeeloong_backlight_dev; ++ ++static int yeeloong_backlight_init(void) ++{ ++ int ret; ++ struct backlight_properties props; ++ ++ memset(&props, 0, sizeof(struct backlight_properties)); ++ props.max_brightness = MAX_BRIGHTNESS; ++ props.type = BACKLIGHT_PLATFORM; ++ yeeloong_backlight_dev = backlight_device_register("backlight0", NULL, ++ NULL, &backlight_ops, &props); ++ ++ if (IS_ERR(yeeloong_backlight_dev)) { ++ ret = PTR_ERR(yeeloong_backlight_dev); ++ yeeloong_backlight_dev = NULL; ++ return ret; ++ } ++ ++ yeeloong_backlight_dev->props.brightness = ++ yeeloong_get_brightness(yeeloong_backlight_dev); ++ backlight_update_status(yeeloong_backlight_dev); ++ ++ return 0; ++} ++ ++static void yeeloong_backlight_exit(void) ++{ ++ if (yeeloong_backlight_dev) { ++ backlight_device_unregister(yeeloong_backlight_dev); ++ yeeloong_backlight_dev = NULL; ++ } ++} ++ ++/* AC & Battery subdriver */ ++ ++static struct power_supply yeeloong_ac, yeeloong_bat; ++ ++#define RET (val->intval) ++ ++#define BAT_CAP_CRITICAL 5 ++#define BAT_CAP_HIGH 95 ++ ++#define get_bat(type) \ ++ ec_read(REG_BAT_##type) ++ ++#define get_bat_l(type) \ ++ ((get_bat(type##_HIGH) << 8) | get_bat(type##_LOW)) ++ ++static int yeeloong_get_ac_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ if (psp == POWER_SUPPLY_PROP_ONLINE) ++ RET = !!(get_bat(POWER) & BIT_BAT_POWER_ACIN); ++ ++ return 0; ++} ++ ++static enum power_supply_property yeeloong_ac_props[] = { ++ POWER_SUPPLY_PROP_ONLINE, ++}; ++ ++static struct power_supply yeeloong_ac = { ++ .name = "yeeloong-ac", ++ .type = POWER_SUPPLY_TYPE_MAINS, ++ .properties = yeeloong_ac_props, ++ .num_properties = ARRAY_SIZE(yeeloong_ac_props), ++ .get_property = yeeloong_get_ac_props, ++}; ++ ++static inline bool is_bat_in(void) ++{ ++ return !!(get_bat(STATUS) & BIT_BAT_STATUS_IN); ++} ++ ++static int get_bat_temp(void) ++{ ++ return get_bat_l(TEMPERATURE) * 10; ++} ++ ++static int get_bat_current(void) ++{ ++ return -(s16)get_bat_l(CURRENT); ++} ++ ++static int get_bat_voltage(void) ++{ ++ return get_bat_l(VOLTAGE); ++} ++ ++static char *get_manufacturer(void) ++{ ++ return (get_bat(VENDOR) == FLAG_BAT_VENDOR_SANYO) ? "SANYO" : "SIMPLO"; ++} ++ ++static int get_relative_cap(void) ++{ ++ /* ++ * When the relative capacity becomes 2, the hardware is observed to ++ * have been turned off forcely. so, we must tune it be suitable to ++ * make the software do related actions. ++ */ ++ int tmp = get_bat_l(RELATIVE_CAP); ++ ++ if (tmp <= (BAT_CAP_CRITICAL * 2)) ++ tmp -= 3; ++ ++ return tmp; ++} ++ ++static int yeeloong_get_bat_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ switch (psp) { ++ /* Fixed information */ ++ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: ++ /* mV -> µV */ ++ RET = get_bat_l(DESIGN_VOL) * 1000; ++ break; ++ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: ++ /* mAh->µAh */ ++ RET = get_bat_l(DESIGN_CAP) * 1000; ++ break; ++ case POWER_SUPPLY_PROP_CHARGE_FULL: ++ /* µAh */ ++ RET = get_bat_l(FULLCHG_CAP) * 1000; ++ break; ++ case POWER_SUPPLY_PROP_MANUFACTURER: ++ val->strval = get_manufacturer(); ++ break; ++ /* Dynamic information */ ++ case POWER_SUPPLY_PROP_PRESENT: ++ RET = is_bat_in(); ++ break; ++ case POWER_SUPPLY_PROP_CURRENT_NOW: ++ /* mA -> µA */ ++ RET = is_bat_in() ? get_bat_current() * 1000 : 0; ++ break; ++ case POWER_SUPPLY_PROP_VOLTAGE_NOW: ++ /* mV -> µV */ ++ RET = is_bat_in() ? get_bat_voltage() * 1000 : 0; ++ break; ++ case POWER_SUPPLY_PROP_TEMP: ++ /* Celcius */ ++ RET = is_bat_in() ? get_bat_temp() : 0; ++ break; ++ case POWER_SUPPLY_PROP_CAPACITY: ++ RET = is_bat_in() ? get_relative_cap() : 0; ++ break; ++ case POWER_SUPPLY_PROP_CAPACITY_LEVEL: { ++ int status; ++ ++ if (!is_bat_in()) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; ++ break; ++ } ++ ++ status = get_bat(STATUS); ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; ++ ++ if (unlikely(status & BIT_BAT_STATUS_DESTROY)) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; ++ break; ++ } ++ ++ if (status & BIT_BAT_STATUS_FULL) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_FULL; ++ else { ++ int curr_cap = get_relative_cap(); ++ ++ if (status & BIT_BAT_STATUS_LOW) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_LOW; ++ if (curr_cap <= BAT_CAP_CRITICAL) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; ++ } else if (curr_cap >= BAT_CAP_HIGH) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_HIGH; ++ } ++ } break; ++ case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW: ++ /* seconds */ ++ RET = is_bat_in() ? (get_relative_cap() - 3) * 54 + 142 : 0; ++ break; ++ case POWER_SUPPLY_PROP_STATUS: { ++ int charge = get_bat(CHARGE); ++ ++ RET = POWER_SUPPLY_STATUS_UNKNOWN; ++ if (charge & FLAG_BAT_CHARGE_DISCHARGE) ++ RET = POWER_SUPPLY_STATUS_DISCHARGING; ++ else if (charge & FLAG_BAT_CHARGE_CHARGE) ++ RET = POWER_SUPPLY_STATUS_CHARGING; ++ } break; ++ case POWER_SUPPLY_PROP_HEALTH: { ++ int status; ++ ++ if (!is_bat_in()) { ++ RET = POWER_SUPPLY_HEALTH_UNKNOWN; ++ break; ++ } ++ ++ status = get_bat(STATUS); ++ RET = POWER_SUPPLY_HEALTH_GOOD; ++ ++ if (status & (BIT_BAT_STATUS_DESTROY | ++ BIT_BAT_STATUS_LOW)) ++ RET = POWER_SUPPLY_HEALTH_DEAD; ++ if (get_bat(CHARGE_STATUS) & ++ BIT_BAT_CHARGE_STATUS_OVERTEMP) ++ RET = POWER_SUPPLY_HEALTH_OVERHEAT; ++ } break; ++ case POWER_SUPPLY_PROP_CHARGE_NOW: /* 1/100(%)*1000 µAh */ ++ RET = get_relative_cap() * get_bat_l(FULLCHG_CAP) * 10; ++ break; ++ default: ++ return -EINVAL; ++ } ++ return 0; ++} ++#undef RET ++ ++static enum power_supply_property yeeloong_bat_props[] = { ++ POWER_SUPPLY_PROP_STATUS, ++ POWER_SUPPLY_PROP_PRESENT, ++ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_FULL, ++ POWER_SUPPLY_PROP_CHARGE_NOW, ++ POWER_SUPPLY_PROP_CURRENT_NOW, ++ POWER_SUPPLY_PROP_VOLTAGE_NOW, ++ POWER_SUPPLY_PROP_HEALTH, ++ POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, ++ POWER_SUPPLY_PROP_CAPACITY, ++ POWER_SUPPLY_PROP_CAPACITY_LEVEL, ++ POWER_SUPPLY_PROP_TEMP, ++ POWER_SUPPLY_PROP_MANUFACTURER, ++}; ++ ++static struct power_supply yeeloong_bat = { ++ .name = "yeeloong-bat", ++ .type = POWER_SUPPLY_TYPE_BATTERY, ++ .properties = yeeloong_bat_props, ++ .num_properties = ARRAY_SIZE(yeeloong_bat_props), ++ .get_property = yeeloong_get_bat_props, ++}; ++ ++static int ac_bat_initialized; ++ ++static int yeeloong_bat_init(void) ++{ ++ int ret; ++ ++ ret = power_supply_register(NULL, &yeeloong_ac); ++ if (ret) ++ return ret; ++ ret = power_supply_register(NULL, &yeeloong_bat); ++ if (ret) { ++ power_supply_unregister(&yeeloong_ac); ++ return ret; ++ } ++ ac_bat_initialized = 1; ++ ++ return 0; ++} ++ ++static void yeeloong_bat_exit(void) ++{ ++ ac_bat_initialized = 0; ++ ++ power_supply_unregister(&yeeloong_ac); ++ power_supply_unregister(&yeeloong_bat); ++} ++/* hwmon subdriver */ ++ ++#define MIN_FAN_SPEED 0 ++#define MAX_FAN_SPEED 3 ++ ++#define get_fan(type) \ ++ ec_read(REG_FAN_##type) ++ ++#define set_fan(type, val) \ ++ ec_write(REG_FAN_##type, val) ++ ++static inline int get_fan_speed_level(void) ++{ ++ return get_fan(SPEED_LEVEL); ++} ++static inline void set_fan_speed_level(int speed) ++{ ++ set_fan(SPEED_LEVEL, speed); ++} ++ ++static inline int get_fan_mode(void) ++{ ++ return get_fan(AUTO_MAN_SWITCH); ++} ++static inline void set_fan_mode(int mode) ++{ ++ set_fan(AUTO_MAN_SWITCH, mode); ++} ++ ++/* ++ * 3 different modes: Full speed(0); manual mode(1); auto mode(2) ++ */ ++static int get_fan_pwm_enable(void) ++{ ++ return (get_fan_mode() == BIT_FAN_AUTO) ? 2 : ++ (get_fan_speed_level() == MAX_FAN_SPEED) ? 0 : 1; ++} ++ ++static void set_fan_pwm_enable(int mode) ++{ ++ set_fan_mode((mode == 2) ? BIT_FAN_AUTO : BIT_FAN_MANUAL); ++ if (mode == 0) ++ set_fan_speed_level(MAX_FAN_SPEED); ++} ++ ++static int get_fan_pwm(void) ++{ ++ return get_fan_speed_level(); ++} ++ ++static void set_fan_pwm(int value) ++{ ++ if (get_fan_mode() != BIT_FAN_MANUAL) ++ return; ++ ++ value = clamp_val(value, MIN_FAN_SPEED, MAX_FAN_SPEED); ++ ++ /* We must ensure the fan is on */ ++ if (value > 0) ++ set_fan(CONTROL, ON); ++ ++ set_fan_speed_level(value); ++} ++ ++static inline int get_fan_speed(void) ++{ ++ return ((get_fan(SPEED_HIGH) & 0x0f) << 8) | get_fan(SPEED_LOW); ++} ++ ++static int get_fan_rpm(void) ++{ ++ return FAN_SPEED_DIVIDER / get_fan_speed(); ++} ++ ++static int get_cpu_temp(void) ++{ ++ return (s8)ec_read(REG_TEMPERATURE_VALUE) * 1000; ++} ++ ++static int get_cpu_temp_max(void) ++{ ++ return 60 * 1000; ++} ++ ++static int get_bat_temp_alarm(void) ++{ ++ return !!(get_bat(CHARGE_STATUS) & BIT_BAT_CHARGE_STATUS_OVERTEMP); ++} ++ ++static ssize_t store_sys_hwmon(void (*set) (int), const char *buf, size_t count) ++{ ++ int ret; ++ unsigned long value; ++ ++ if (!count) ++ return 0; ++ ++ ret = strict_strtoul(buf, 10, &value); ++ if (ret) ++ return ret; ++ ++ set(value); ++ ++ return count; ++} ++ ++static ssize_t show_sys_hwmon(int (*get) (void), char *buf) ++{ ++ return sprintf(buf, "%d\n", get()); ++} ++ ++#define CREATE_SENSOR_ATTR(_name, _mode, _set, _get) \ ++ static ssize_t show_##_name(struct device *dev, \ ++ struct device_attribute *attr, \ ++ char *buf) \ ++ { \ ++ return show_sys_hwmon(_set, buf); \ ++ } \ ++ static ssize_t store_##_name(struct device *dev, \ ++ struct device_attribute *attr, \ ++ const char *buf, size_t count) \ ++ { \ ++ return store_sys_hwmon(_get, buf, count); \ ++ } \ ++ static SENSOR_DEVICE_ATTR(_name, _mode, show_##_name, store_##_name, 0); ++ ++CREATE_SENSOR_ATTR(fan1_input, S_IRUGO, get_fan_rpm, NULL); ++CREATE_SENSOR_ATTR(pwm1, S_IRUGO | S_IWUSR, get_fan_pwm, set_fan_pwm); ++CREATE_SENSOR_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, get_fan_pwm_enable, ++ set_fan_pwm_enable); ++CREATE_SENSOR_ATTR(temp1_input, S_IRUGO, get_cpu_temp, NULL); ++CREATE_SENSOR_ATTR(temp1_max, S_IRUGO, get_cpu_temp_max, NULL); ++CREATE_SENSOR_ATTR(temp2_input, S_IRUGO, get_bat_temp, NULL); ++CREATE_SENSOR_ATTR(temp2_max_alarm, S_IRUGO, get_bat_temp_alarm, NULL); ++CREATE_SENSOR_ATTR(curr1_input, S_IRUGO, get_bat_current, NULL); ++CREATE_SENSOR_ATTR(in1_input, S_IRUGO, get_bat_voltage, NULL); ++ ++static ssize_t ++show_name(struct device *dev, struct device_attribute *attr, char *buf) ++{ ++ return sprintf(buf, "yeeloong\n"); ++} ++ ++static SENSOR_DEVICE_ATTR(name, S_IRUGO, show_name, NULL, 0); ++ ++static struct attribute *hwmon_attributes[] = { ++ &sensor_dev_attr_pwm1.dev_attr.attr, ++ &sensor_dev_attr_pwm1_enable.dev_attr.attr, ++ &sensor_dev_attr_fan1_input.dev_attr.attr, ++ &sensor_dev_attr_temp1_input.dev_attr.attr, ++ &sensor_dev_attr_temp1_max.dev_attr.attr, ++ &sensor_dev_attr_temp2_input.dev_attr.attr, ++ &sensor_dev_attr_temp2_max_alarm.dev_attr.attr, ++ &sensor_dev_attr_curr1_input.dev_attr.attr, ++ &sensor_dev_attr_in1_input.dev_attr.attr, ++ &sensor_dev_attr_name.dev_attr.attr, ++ NULL ++}; ++ ++static struct attribute_group hwmon_attribute_group = { ++ .attrs = hwmon_attributes ++}; ++ ++static struct device *yeeloong_hwmon_dev; ++ ++static int yeeloong_hwmon_init(void) ++{ ++ int ret; ++ ++ yeeloong_hwmon_dev = hwmon_device_register(NULL); ++ if (IS_ERR(yeeloong_hwmon_dev)) { ++ yeeloong_hwmon_dev = NULL; ++ return PTR_ERR(yeeloong_hwmon_dev); ++ } ++ ret = sysfs_create_group(&yeeloong_hwmon_dev->kobj, ++ &hwmon_attribute_group); ++ if (ret) { ++ hwmon_device_unregister(yeeloong_hwmon_dev); ++ yeeloong_hwmon_dev = NULL; ++ return ret; ++ } ++ /* ensure fan is set to auto mode */ ++ set_fan_pwm_enable(2); ++ ++ return 0; ++} ++ ++static void yeeloong_hwmon_exit(void) ++{ ++ if (yeeloong_hwmon_dev) { ++ sysfs_remove_group(&yeeloong_hwmon_dev->kobj, ++ &hwmon_attribute_group); ++ hwmon_device_unregister(yeeloong_hwmon_dev); ++ yeeloong_hwmon_dev = NULL; ++ } ++} ++ ++/* video output subdriver */ ++ ++#define LCD 0 ++#define CRT 1 ++#define VOD_NUM 2 /* The total number of video output device*/ ++ ++static struct output_device *vod[VOD_NUM]; ++ ++static int vor[] = {REG_DISPLAY_LCD, REG_CRT_DETECT}; ++ ++static int get_vo_dev(struct output_device *od) ++{ ++ int i, dev; ++ ++ dev = -1; ++ for (i = 0; i < VOD_NUM; i++) ++ if (od == vod[i]) ++ dev = i; ++ ++ return dev; ++} ++ ++static int vo_get_status(int dev) ++{ ++ return ec_read(vor[dev]); ++} ++ ++static int yeeloong_vo_get_status(struct output_device *od) ++{ ++ int vd; ++ ++ vd = get_vo_dev(od); ++ if (vd != -1) ++ return vo_get_status(vd); ++ ++ return -ENODEV; ++} ++ ++static void vo_set_state(int dev, int state) ++{ ++ int addr; ++ unsigned long value; ++ ++ switch (dev) { ++ case LCD: ++ addr = 0x31; ++ break; ++ case CRT: ++ addr = 0x21; ++ break; ++ default: ++ /* return directly if the wrong video output device */ ++ return; ++ } ++ ++ outb(addr, 0x3c4); ++ value = inb(0x3c5); ++ ++ switch (dev) { ++ case LCD: ++ value |= (state ? 0x03 : 0x02); ++ break; ++ case CRT: ++ if (state) ++ clear_bit(7, &value); ++ else ++ set_bit(7, &value); ++ break; ++ default: ++ break; ++ } ++ ++ outb(addr, 0x3c4); ++ outb(value, 0x3c5); ++ ++ if (dev == LCD) ++ ec_write(REG_BACKLIGHT_CTRL, state); ++} ++ ++static int yeeloong_vo_set_state(struct output_device *od) ++{ ++ int vd; ++ ++ vd = get_vo_dev(od); ++ if (vd == -1) ++ return -ENODEV; ++ ++ if (vd == CRT && !vo_get_status(vd)) ++ return 0; ++ ++ vo_set_state(vd, !!od->request_state); ++ ++ return 0; ++} ++ ++static struct output_properties vop = { ++ .set_state = yeeloong_vo_set_state, ++ .get_status = yeeloong_vo_get_status, ++}; ++ ++static int yeeloong_vo_init(void) ++{ ++ int ret, i; ++ char dev_name[VOD_NUM][4] = {"LCD", "CRT"}; ++ ++ /* Register video output device: lcd, crt */ ++ for (i = 0; i < VOD_NUM; i++) { ++ vod[i] = video_output_register(dev_name[i], NULL, NULL, &vop); ++ if (IS_ERR(vod[i])) { ++ if (i != 0) ++ video_output_unregister(vod[i-1]); ++ ret = PTR_ERR(vod[i]); ++ vod[i] = NULL; ++ return ret; ++ } ++ } ++ /* Ensure LCD is on by default */ ++ vo_set_state(LCD, ON); ++ ++ /* ++ * Turn off CRT by default, and will be enabled when the CRT ++ * connectting event reported by SCI ++ */ ++ vo_set_state(CRT, OFF); ++ ++ return 0; ++} ++ ++static void yeeloong_vo_exit(void) ++{ ++ int i; ++ ++ for (i = 0; i < VOD_NUM; i++) { ++ if (vod[i]) { ++ video_output_unregister(vod[i]); ++ vod[i] = NULL; ++ } ++ } ++} ++ ++/* lcd subdriver */ ++ ++struct lcd_device *lcd[VOD_NUM]; ++ ++static int get_lcd_dev(struct lcd_device *ld) ++{ ++ int i, dev; ++ ++ dev = -1; ++ for (i = 0; i < VOD_NUM; i++) ++ if (ld == lcd[i]) ++ dev = i; ++ ++ return dev; ++} ++ ++static int yeeloong_lcd_set_power(struct lcd_device *ld, int power) ++{ ++ int dev = get_lcd_dev(ld); ++ ++ if (power == FB_BLANK_UNBLANK) ++ vo_set_state(dev, ON); ++ if (power == FB_BLANK_POWERDOWN) ++ vo_set_state(dev, OFF); ++ ++ return 0; ++} ++ ++static int yeeloong_lcd_get_power(struct lcd_device *ld) ++{ ++ return vo_get_status(get_lcd_dev(ld)); ++} ++ ++static struct lcd_ops lcd_ops = { ++ .set_power = yeeloong_lcd_set_power, ++ .get_power = yeeloong_lcd_get_power, ++}; ++ ++static int yeeloong_lcd_init(void) ++{ ++ int ret, i; ++ char dev_name[VOD_NUM][4] = {"LCD", "CRT"}; ++ ++ /* Register video output device: lcd, crt */ ++ for (i = 0; i < VOD_NUM; i++) { ++ lcd[i] = lcd_device_register(dev_name[i], NULL, NULL, &lcd_ops); ++ if (IS_ERR(lcd[i])) { ++ if (i != 0) ++ lcd_device_unregister(lcd[i-1]); ++ ret = PTR_ERR(lcd[i]); ++ lcd[i] = NULL; ++ return ret; ++ } ++ } ++#if 0 ++ /* This has been done by the vide output driver */ ++ ++ /* Ensure LCD is on by default */ ++ vo_set_state(LCD, ON); ++ ++ /* ++ * Turn off CRT by default, and will be enabled when the CRT ++ * connectting event reported by SCI ++ */ ++ vo_set_state(CRT, OFF); ++#endif ++ return 0; ++} ++ ++static void yeeloong_lcd_exit(void) ++{ ++ int i; ++ ++ for (i = 0; i < VOD_NUM; i++) { ++ if (lcd[i]) { ++ lcd_device_unregister(lcd[i]); ++ lcd[i] = NULL; ++ } ++ } ++} ++ ++/* hotkey subdriver */ ++ ++static struct input_dev *yeeloong_hotkey_dev; ++ ++static atomic_t reboot_flag, sleep_flag; ++#define in_sleep() (&sleep_flag) ++#define in_reboot() (&reboot_flag) ++ ++static const struct key_entry yeeloong_keymap[] = { ++ {KE_SW, EVENT_LID, { SW_LID } }, ++ {KE_KEY, EVENT_CAMERA, { KEY_CAMERA } }, /* Fn + ESC */ ++ {KE_KEY, EVENT_SLEEP, { KEY_SLEEP } }, /* Fn + F1 */ ++ {KE_KEY, EVENT_BLACK_SCREEN, { KEY_DISPLAYTOGGLE } }, /* Fn + F2 */ ++ {KE_KEY, EVENT_DISPLAY_TOGGLE, { KEY_SWITCHVIDEOMODE } }, /* Fn + F3 */ ++ {KE_KEY, EVENT_AUDIO_MUTE, { KEY_MUTE } }, /* Fn + F4 */ ++ {KE_KEY, EVENT_WLAN, { KEY_WLAN } }, /* Fn + F5 */ ++ {KE_KEY, EVENT_DISPLAY_BRIGHTNESS, { KEY_BRIGHTNESSUP } }, /* Fn + up */ ++ {KE_KEY, EVENT_DISPLAY_BRIGHTNESS, { KEY_BRIGHTNESSDOWN } }, /* Fn + down */ ++ {KE_KEY, EVENT_AUDIO_VOLUME, { KEY_VOLUMEUP } }, /* Fn + right */ ++ {KE_KEY, EVENT_AUDIO_VOLUME, { KEY_VOLUMEDOWN } }, /* Fn + left */ ++ {KE_END, 0} ++}; ++ ++static int is_fake_event(u16 keycode) ++{ ++ switch (keycode) { ++ case KEY_SLEEP: ++ case SW_LID: ++ return atomic_read(in_sleep()) | atomic_read(in_reboot()); ++ break; ++ default: ++ break; ++ } ++ return 0; ++} ++ ++static struct key_entry *get_event_key_entry(int event, int status) ++{ ++ struct key_entry *ke; ++ static int old_brightness_status = -1; ++ static int old_volume_status = -1; ++ ++ ke = sparse_keymap_entry_from_scancode(yeeloong_hotkey_dev, event); ++ if (!ke) ++ return NULL; ++ ++ switch (event) { ++ case EVENT_DISPLAY_BRIGHTNESS: ++ /* current status > old one, means up */ ++ if ((status < old_brightness_status) || (0 == status)) ++ ke++; ++ old_brightness_status = status; ++ break; ++ case EVENT_AUDIO_VOLUME: ++ if ((status < old_volume_status) || (0 == status)) ++ ke++; ++ old_volume_status = status; ++ break; ++ default: ++ break; ++ } ++ ++ return ke; ++} ++ ++static int report_lid_switch(int status) ++{ ++ static int old_status; ++ ++ /* ++ * LID is a switch button, so, two continuous same status should be ++ * ignored ++ */ ++ if (old_status != status) { ++ input_report_switch(yeeloong_hotkey_dev, SW_LID, !status); ++ input_sync(yeeloong_hotkey_dev); ++ } ++ old_status = status; ++ ++ return status; ++} ++ ++static int crt_detect_handler(int status) ++{ ++ /* ++ * When CRT is inserted, enable its output and disable the LCD output, ++ * otherwise, do reversely. ++ */ ++ vo_set_state(CRT, status); ++ vo_set_state(LCD, !status); ++ ++ return status; ++} ++ ++static int displaytoggle_handler(int status) ++{ ++ /* EC(>=PQ1D26) does this job for us, we can not do it again, ++ * otherwise, the brightness will not resume to the normal level! */ ++ if (ec_version_before("EC_VER=PQ1D26")) ++ vo_set_state(LCD, status); ++ ++ return status; ++} ++ ++static int mypow(int x, int y) ++{ ++ int i, j = x; ++ ++ for (i = 1; i < y; i++) ++ j *= j; ++ ++ return j; ++} ++ ++static int switchvideomode_handler(int status) ++{ ++ /* Default status: CRT|LCD = 0|1 = 1 */ ++ static int bin_state = 1; ++ int i; ++ ++ /* ++ * Only enable switch video output button ++ * when CRT is connected ++ */ ++ if (!vo_get_status(CRT)) ++ return 0; ++ /* ++ * 2. no CRT connected: LCD on, CRT off ++ * 3. BOTH on ++ * 0. BOTH off ++ * 1. LCD off, CRT on ++ */ ++ ++ bin_state++; ++ if (bin_state > mypow(2, VOD_NUM) - 1) ++ bin_state = 0; ++ ++ for (i = 0; i < VOD_NUM; i++) ++ vo_set_state(i, bin_state & (1 << i)); ++ ++ return bin_state; ++} ++ ++static int camera_handler(int status) ++{ ++ int value; ++ ++ value = ec_read(REG_CAMERA_CONTROL); ++ ec_write(REG_CAMERA_CONTROL, value | (1 << 1)); ++ ++ return status; ++} ++ ++static int usb2_handler(int status) ++{ ++ pr_emerg("USB2 Over Current occurred\n"); ++ ++ return status; ++} ++ ++static int usb0_handler(int status) ++{ ++ pr_emerg("USB0 Over Current occurred\n"); ++ ++ return status; ++} ++ ++static int ac_bat_handler(int status) ++{ ++ if (ac_bat_initialized) { ++ power_supply_changed(&yeeloong_ac); ++ power_supply_changed(&yeeloong_bat); ++ } ++ ++ return status; ++} ++ ++struct sci_event { ++ int reg; ++ sci_handler handler; ++}; ++ ++static const struct sci_event se[] = { ++ [EVENT_AC_BAT] = {0, ac_bat_handler}, ++ [EVENT_AUDIO_MUTE] = {REG_AUDIO_MUTE, NULL}, ++ [EVENT_AUDIO_VOLUME] = {REG_AUDIO_VOLUME, NULL}, ++ [EVENT_CRT_DETECT] = {REG_CRT_DETECT, crt_detect_handler}, ++ [EVENT_CAMERA] = {REG_CAMERA_STATUS, camera_handler}, ++ [EVENT_BLACK_SCREEN] = {REG_DISPLAY_LCD, displaytoggle_handler}, ++ [EVENT_DISPLAY_BRIGHTNESS] = {REG_DISPLAY_BRIGHTNESS, NULL}, ++ [EVENT_LID] = {REG_LID_DETECT, NULL}, ++ [EVENT_DISPLAY_TOGGLE] = {0, switchvideomode_handler}, ++ [EVENT_USB_OC0] = {REG_USB2_FLAG, usb0_handler}, ++ [EVENT_USB_OC2] = {REG_USB2_FLAG, usb2_handler}, ++ [EVENT_WLAN] = {REG_WLAN, NULL}, ++}; ++ ++static void do_event_action(int event) ++{ ++ int status = -1; ++ struct key_entry *ke; ++ struct sci_event *sep; ++ ++ sep = (struct sci_event *)&se[event]; ++ ++ if (sep->reg != 0) ++ status = ec_read(sep->reg); ++ ++ if (status == -1) { ++ /* ec_read hasn't been called, status is invalid */ ++ return; ++ } ++ ++ if (sep->handler != NULL) ++ status = sep->handler(status); ++ ++ pr_debug("%s: event: %d status: %d\n", __func__, event, status); ++ ++ /* Report current key to user-space */ ++ ke = get_event_key_entry(event, status); ++ ++ /* ++ * Ignore the LID and SLEEP event when we are already in sleep or ++ * reboot state, this will avoid the recursive pm operations. but note: ++ * the report_lid_switch() called in arch/mips/loongson/lemote-2f/pm.c ++ * is necessary, because it is used to wake the system from sleep ++ * state. In the future, perhaps SW_LID should works like SLEEP, no ++ * need to function as a SWITCH, just report the state when the LID is ++ * closed is enough, this event can tell the software to "SLEEP", no ++ * need to tell the softwares when we are resuming from "SLEEP". ++ */ ++ if (ke && !is_fake_event(ke->keycode)) { ++ if (ke->keycode == SW_LID) ++ report_lid_switch(status); ++ else ++ sparse_keymap_report_entry(yeeloong_hotkey_dev, ke, 1, ++ true); ++ } ++} ++ ++/* ++ * SCI(system control interrupt) main interrupt routine ++ * ++ * We will do the query and get event number together so the interrupt routine ++ * should be longer than 120us now at least 3ms elpase for it. ++ */ ++static irqreturn_t sci_irq_handler(int irq, void *dev_id) ++{ ++ int ret, event; ++ ++ if (SCI_IRQ_NUM != irq) ++ return IRQ_NONE; ++ ++ /* Query the event number */ ++ ret = ec_query_event_num(); ++ if (ret < 0) ++ return IRQ_NONE; ++ ++ event = ec_get_event_num(); ++ if (event < EVENT_START || event > EVENT_END) ++ return IRQ_NONE; ++ ++ /* Execute corresponding actions */ ++ do_event_action(event); ++ ++ return IRQ_HANDLED; ++} ++ ++/* ++ * Config and init some msr and gpio register properly. ++ */ ++static int sci_irq_init(void) ++{ ++ u32 hi, lo; ++ u32 gpio_base; ++ unsigned long flags; ++ int ret; ++ ++ /* Get gpio base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &lo); ++ gpio_base = lo & 0xff00; ++ ++ /* Filter the former kb3310 interrupt for security */ ++ ret = ec_query_event_num(); ++ if (ret) ++ return ret; ++ ++ /* For filtering next number interrupt */ ++ udelay(10000); ++ ++ /* Set gpio native registers and msrs for GPIO27 SCI EVENT PIN ++ * gpio : ++ * input, pull-up, no-invert, event-count and value 0, ++ * no-filter, no edge mode ++ * gpio27 map to Virtual gpio0 ++ * msr : ++ * no primary and lpc ++ * Unrestricted Z input to IG10 from Virtual gpio 0. ++ */ ++ local_irq_save(flags); ++ _rdmsr(0x80000024, &hi, &lo); ++ lo &= ~(1 << 10); ++ _wrmsr(0x80000024, hi, lo); ++ _rdmsr(0x80000025, &hi, &lo); ++ lo &= ~(1 << 10); ++ _wrmsr(0x80000025, hi, lo); ++ _rdmsr(0x80000023, &hi, &lo); ++ lo |= (0x0a << 0); ++ _wrmsr(0x80000023, hi, lo); ++ local_irq_restore(flags); ++ ++ /* Set gpio27 as sci interrupt ++ * ++ * input, pull-up, no-fliter, no-negedge, invert ++ * the sci event is just about 120us ++ */ ++ asm(".set noreorder\n"); ++ /* input enable */ ++ outl(0x00000800, (gpio_base | 0xA0)); ++ /* revert the input */ ++ outl(0x00000800, (gpio_base | 0xA4)); ++ /* event-int enable */ ++ outl(0x00000800, (gpio_base | 0xB8)); ++ asm(".set reorder\n"); ++ ++ return 0; ++} ++ ++static int notify_reboot(struct notifier_block *nb, unsigned long event, void *buf) ++{ ++ switch (event) { ++ case SYS_RESTART: ++ case SYS_HALT: ++ case SYS_POWER_OFF: ++ atomic_set(in_reboot(), 1); ++ break; ++ default: ++ return NOTIFY_DONE; ++ } ++ ++ return NOTIFY_OK; ++} ++ ++static int notify_pm(struct notifier_block *nb, unsigned long event, void *buf) ++{ ++ switch (event) { ++ case PM_HIBERNATION_PREPARE: ++ case PM_SUSPEND_PREPARE: ++ atomic_inc(in_sleep()); ++ break; ++ case PM_POST_HIBERNATION: ++ case PM_POST_SUSPEND: ++ case PM_RESTORE_PREPARE: /* do we need this ?? */ ++ atomic_dec(in_sleep()); ++ break; ++ default: ++ return NOTIFY_DONE; ++ } ++ ++ pr_debug("%s: event = %lu, in_sleep() = %d\n", __func__, event, ++ atomic_read(in_sleep())); ++ ++ return NOTIFY_OK; ++} ++ ++static struct notifier_block reboot_notifier = { ++ .notifier_call = notify_reboot, ++}; ++ ++static struct notifier_block pm_notifier = { ++ .notifier_call = notify_pm, ++}; ++ ++static int yeeloong_hotkey_init(void) ++{ ++ int ret = 0; ++ ++ ret = register_reboot_notifier(&reboot_notifier); ++ if (ret) { ++ pr_err("Can't register reboot notifier\n"); ++ goto end; ++ } ++ ++ ret = register_pm_notifier(&pm_notifier); ++ if (ret) { ++ pr_err("Can't register pm notifier\n"); ++ goto free_reboot_notifier; ++ } ++ ++ ret = sci_irq_init(); ++ if (ret) { ++ pr_err("Can't init SCI interrupt\n"); ++ goto free_pm_notifier; ++ } ++ ++ ret = request_threaded_irq(SCI_IRQ_NUM, NULL, &sci_irq_handler, ++ IRQF_ONESHOT, "sci", NULL); ++ if (ret) { ++ pr_err("Can't thread SCI interrupt handler\n"); ++ goto free_pm_notifier; ++ } ++ ++ yeeloong_hotkey_dev = input_allocate_device(); ++ ++ if (!yeeloong_hotkey_dev) { ++ ret = -ENOMEM; ++ goto free_irq; ++ } ++ ++ yeeloong_hotkey_dev->name = "HotKeys"; ++ yeeloong_hotkey_dev->phys = "button/input0"; ++ yeeloong_hotkey_dev->id.bustype = BUS_HOST; ++ yeeloong_hotkey_dev->dev.parent = NULL; ++ ++ ret = sparse_keymap_setup(yeeloong_hotkey_dev, yeeloong_keymap, NULL); ++ if (ret) { ++ pr_err("Failed to setup input device keymap\n"); ++ goto free_dev; ++ } ++ ++ ret = input_register_device(yeeloong_hotkey_dev); ++ if (ret) ++ goto free_keymap; ++ ++ /* Update the current status of LID */ ++ report_lid_switch(ON); ++ ++#ifdef CONFIG_LOONGSON_SUSPEND ++ /* Install the real yeeloong_report_lid_status for pm.c */ ++ yeeloong_report_lid_status = report_lid_switch; ++#endif ++ return 0; ++ ++free_keymap: ++ sparse_keymap_free(yeeloong_hotkey_dev); ++free_dev: ++ input_free_device(yeeloong_hotkey_dev); ++free_irq: ++ free_irq(SCI_IRQ_NUM, NULL); ++free_pm_notifier: ++ unregister_pm_notifier(&pm_notifier); ++free_reboot_notifier: ++ unregister_reboot_notifier(&reboot_notifier); ++end: ++ return ret; ++} ++ ++static void yeeloong_hotkey_exit(void) ++{ ++ /* Free irq */ ++ free_irq(SCI_IRQ_NUM, NULL); ++ ++#ifdef CONFIG_LOONGSON_SUSPEND ++ /* Uninstall yeeloong_report_lid_status for pm.c */ ++ if (yeeloong_report_lid_status == report_lid_switch) ++ yeeloong_report_lid_status = NULL; ++#endif ++ ++ if (yeeloong_hotkey_dev) { ++ sparse_keymap_free(yeeloong_hotkey_dev); ++ input_unregister_device(yeeloong_hotkey_dev); ++ yeeloong_hotkey_dev = NULL; ++ } ++} ++ ++#ifdef CONFIG_PM ++static void usb_ports_set(int status) ++{ ++ status = !!status; ++ ++ ec_write(REG_USB0_FLAG, status); ++ ec_write(REG_USB1_FLAG, status); ++ ec_write(REG_USB2_FLAG, status); ++} ++ ++static int yeeloong_suspend(struct device *dev) ++ ++{ ++ if (ec_version_before("EC_VER=PQ1D27")) ++ vo_set_state(LCD, OFF); ++ vo_set_state(CRT, OFF); ++ usb_ports_set(OFF); ++ ++ return 0; ++} ++ ++static int yeeloong_resume(struct device *dev) ++{ ++ int ret; ++ ++ if (ec_version_before("EC_VER=PQ1D27")) ++ vo_set_state(LCD, ON); ++ vo_set_state(CRT, ON); ++ usb_ports_set(ON); ++ ++ ret = sci_irq_init(); ++ if (ret) ++ return -EFAULT; ++ ++ return 0; ++} ++ ++static const SIMPLE_DEV_PM_OPS(yeeloong_pm_ops, yeeloong_suspend, ++ yeeloong_resume); ++#endif ++ ++static struct platform_device_id platform_device_ids[] = { ++ { ++ .name = "yeeloong_laptop", ++ }, ++ {} ++}; ++ ++MODULE_DEVICE_TABLE(platform, platform_device_ids); ++ ++static struct platform_driver platform_driver = { ++ .driver = { ++ .name = "yeeloong_laptop", ++ .owner = THIS_MODULE, ++#ifdef CONFIG_PM ++ .pm = &yeeloong_pm_ops, ++#endif ++ }, ++ .id_table = platform_device_ids, ++}; ++ ++static int __init yeeloong_init(void) ++{ ++ int ret; ++ ++ pr_info("YeeLoong Laptop platform specific driver loaded.\n"); ++ ++ /* Register platform stuff */ ++ ret = platform_driver_register(&platform_driver); ++ if (ret) { ++ pr_err("Failed to register YeeLoong platform driver.\n"); ++ return ret; ++ } ++ ++#define yeeloong_init_drv(drv, alias) do { \ ++ pr_info("Registered YeeLoong " alias " driver.\n"); \ ++ ret = yeeloong_ ## drv ## _init(); \ ++ if (ret) { \ ++ pr_err("Failed to register YeeLoong " alias " driver.\n"); \ ++ yeeloong_ ## drv ## _exit(); \ ++ return ret; \ ++ } \ ++} while (0) ++ ++ yeeloong_init_drv(backlight, "backlight"); ++ yeeloong_init_drv(bat, "battery and AC"); ++ yeeloong_init_drv(hwmon, "hardware monitor"); ++ yeeloong_init_drv(vo, "video output"); ++ yeeloong_init_drv(lcd, "lcd output"); ++ yeeloong_init_drv(hotkey, "hotkey input"); ++ ++ return 0; ++} ++ ++static void __exit yeeloong_exit(void) ++{ ++ yeeloong_hotkey_exit(); ++ yeeloong_lcd_exit(); ++ yeeloong_vo_exit(); ++ yeeloong_hwmon_exit(); ++ yeeloong_bat_exit(); ++ yeeloong_backlight_exit(); ++ platform_driver_unregister(&platform_driver); ++ ++ pr_info("YeeLoong platform specific driver unloaded.\n"); ++} ++ ++module_init(yeeloong_init); ++module_exit(yeeloong_exit); ++ ++MODULE_AUTHOR("Wu Zhangjin ; Liu Junliang "); ++MODULE_DESCRIPTION("YeeLoong laptop driver"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig +index db933de..1232c4b 100644 +--- a/drivers/rtc/Kconfig ++++ b/drivers/rtc/Kconfig +@@ -649,6 +649,7 @@ comment "Platform RTC drivers" + config RTC_DRV_CMOS + tristate "PC-style 'CMOS'" + depends on X86 || ARM || M32R || PPC || MIPS || SPARC64 ++ depends on !DEXXON_GDIUM + default y if X86 + help + Say "yes" here to get direct support for the real time clock +diff --git a/drivers/staging/sm7xxfb/sm7xxfb.c b/drivers/staging/sm7xxfb/sm7xxfb.c +index 6176d98..e40ce80 100644 +--- a/drivers/staging/sm7xxfb/sm7xxfb.c ++++ b/drivers/staging/sm7xxfb/sm7xxfb.c +@@ -101,6 +101,7 @@ static struct vesa_mode vesa_mode_table[] = { + {"0x307", 1280, 1024, 8}, + + {"0x311", 640, 480, 16}, ++ {"0x313", 800, 480, 16}, + {"0x314", 800, 600, 16}, + {"0x317", 1024, 768, 16}, + {"0x31A", 1280, 1024, 16}, +diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c +index 3586460..15f66e5 100644 +--- a/drivers/usb/host/ohci-hcd.c ++++ b/drivers/usb/host/ohci-hcd.c +@@ -864,9 +864,13 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd) + } + + if (ints & OHCI_INTR_WDH) { +- spin_lock (&ohci->lock); +- dl_done_list (ohci); +- spin_unlock (&ohci->lock); ++ if (ohci->hcca->done_head == 0) { ++ ints &= ~OHCI_INTR_WDH; ++ } else { ++ spin_lock (&ohci->lock); ++ dl_done_list (ohci); ++ spin_unlock (&ohci->lock); ++ } + } + + if (quirk_zfmicro(ohci) && (ints & OHCI_INTR_SF)) { +diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c +index 2f3aceb..6647c3f 100644 +--- a/drivers/usb/host/pci-quirks.c ++++ b/drivers/usb/host/pci-quirks.c +@@ -454,6 +454,7 @@ void usb_amd_dev_put(void) + } + EXPORT_SYMBOL_GPL(usb_amd_dev_put); + ++#if defined(CONFIG_USB_UHCI_HCD) || defined(CONFIG_USB_UHCI_HCD_MODULE) + /* + * Make sure the controller is completely inactive, unable to + * generate interrupts or do DMA. +@@ -561,12 +562,16 @@ static void quirk_usb_handoff_uhci(struct pci_dev *pdev) + if (base) + uhci_check_and_reset_hc(pdev, base); + } ++#else ++#define quirk_usb_handoff_uhci(x) do { } while (0) ++#endif /* CONFIG_USB_UHCI_HCD* */ + + static int mmio_resource_enabled(struct pci_dev *pdev, int idx) + { + return pci_resource_start(pdev, idx) && mmio_enabled(pdev); + } + ++#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) + static void quirk_usb_handoff_ohci(struct pci_dev *pdev) + { + void __iomem *base; +@@ -633,7 +638,11 @@ static void quirk_usb_handoff_ohci(struct pci_dev *pdev) + /* Now the controller is safely in SUSPEND and nothing can wake it up */ + iounmap(base); + } ++#else ++#define quirk_usb_handoff_ohci(x) do { } while(0) ++#endif /* CONFIG_USB_OHCI_HCD* */ + ++#if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE) + static const struct dmi_system_id ehci_dmi_nohandoff_table[] = { + { + /* Pegatron Lucid (ExoPC) */ +@@ -806,6 +815,9 @@ static void quirk_usb_disable_ehci(struct pci_dev *pdev) + + iounmap(base); + } ++#else ++#define quirk_usb_disable_ehci(x) do { } while (0) ++#endif /* CONFIG_USB_EHCI_HCD* */ + + /* + * handshake - spin reading a register until handshake completes +@@ -945,6 +957,7 @@ void usb_disable_xhci_ports(struct pci_dev *xhci_pdev) + } + EXPORT_SYMBOL_GPL(usb_disable_xhci_ports); + ++#if defined(CONFIG_USB_XHCI_HCD) || defined(CONFIG_USB_XHCI_HCD_MODULE) + /** + * PCI Quirks for xHCI. + * +@@ -1052,6 +1065,9 @@ hc_init: + + iounmap(base); + } ++#else ++#define quirk_usb_handoff_xhci(x) do { } while (0) ++#endif /* CONFIG_USB_UHCI_HCD* */ + + static void quirk_usb_early_handoff(struct pci_dev *pdev) + { +diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c +index 9da566a..fffecfb 100644 +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -79,6 +79,9 @@ static void option_instat_callback(struct urb *urb); + #define OPTION_PRODUCT_ETNA_KOI_MODEM 0x7100 + #define OPTION_PRODUCT_GTM380_MODEM 0x7201 + ++#define HUAWO_VENDOR_ID 0x21F5 ++#define HUAWO_PRODUCT_E1621 0x2008 ++ + #define HUAWEI_VENDOR_ID 0x12D1 + #define HUAWEI_PRODUCT_E173 0x140C + #define HUAWEI_PRODUCT_E1750 0x1406 +@@ -610,6 +613,7 @@ static const struct usb_device_id option_ids[] = { + { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) }, + { USB_DEVICE(QUANTA_VENDOR_ID, 0xea42), + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, ++ { USB_DEVICE(HUAWO_VENDOR_ID, HUAWO_PRODUCT_E1621) }, /* QUANTA 6500 chips, Unicom extensive use of this card */ + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c05, USB_CLASS_COMM, 0x02, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c1f, USB_CLASS_COMM, 0x02, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) }, +diff --git a/include/linux/sm501.h b/include/linux/sm501.h +index 02fde50..a8677f0 100644 +--- a/include/linux/sm501.h ++++ b/include/linux/sm501.h +@@ -27,6 +27,9 @@ extern unsigned long sm501_set_clock(struct device *dev, + extern unsigned long sm501_find_clock(struct device *dev, + int clksrc, unsigned long req_freq); + ++extern void sm501_configure_gpio(struct device *dev, ++ unsigned int gpio, unsigned char mode); ++ + /* sm501_misc_control + * + * Modify the SM501's MISC_CONTROL register +@@ -122,6 +125,7 @@ struct sm501_reg_init { + #define SM501_USE_AC97 (1<<7) + #define SM501_USE_I2S (1<<8) + #define SM501_USE_GPIO (1<<9) ++#define SM501_USE_PWM (1<<10) + + #define SM501_USE_ALL (0xffffffff) + +diff --git a/init/calibrate.c b/init/calibrate.c +index 520702d..e78762a 100644 +--- a/init/calibrate.c ++++ b/init/calibrate.c +@@ -21,6 +21,7 @@ static int __init lpj_setup(char *str) + + __setup("lpj=", lpj_setup); + ++#ifndef ARCH_HAS_PREPARED_LPJ + #ifdef ARCH_HAS_READ_CURRENT_TIMER + + /* This routine uses the read_current_timer() routine and gets the +@@ -171,6 +172,7 @@ static unsigned long calibrate_delay_direct(void) + return 0; + } + #endif ++#endif /* ARCH_HAS_PREPARED_LPJ */ + + /* + * This is the number of bits of precision for the loops_per_jiffy. Each +@@ -282,6 +284,7 @@ void calibrate_delay(void) + lpj = lpj_fine; + pr_info("Calibrating delay loop (skipped), " + "value calculated using timer frequency.. "); ++#ifndef ARCH_HAS_PREPARED_LPJ + } else if ((lpj = calibrate_delay_is_known())) { + ; + } else if ((lpj = calibrate_delay_direct()) != 0) { +@@ -292,6 +295,7 @@ void calibrate_delay(void) + if (!printed) + pr_info("Calibrating delay loop... "); + lpj = calibrate_delay_converge(); ++#endif /* ARCH_HAS_PREPARED_LPJ */ + } + per_cpu(cpu_loops_per_jiffy, this_cpu) = lpj; + if (!printed) +diff --git a/net/rfkill/core.c b/net/rfkill/core.c +index ed7e0b4..6cb1ae8 100644 +--- a/net/rfkill/core.c ++++ b/net/rfkill/core.c +@@ -111,7 +111,7 @@ static LIST_HEAD(rfkill_list); /* list of registered rf switches */ + static DEFINE_MUTEX(rfkill_global_mutex); + static LIST_HEAD(rfkill_fds); /* list of open fds of /dev/rfkill */ + +-static unsigned int rfkill_default_state = 1; ++static unsigned int rfkill_default_state; /* default: 0 = radio off */ + module_param_named(default_state, rfkill_default_state, uint, 0444); + MODULE_PARM_DESC(default_state, + "Default initial state for all radio types, 0 = radio off"); +diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl +index 91280b8..6b147ae 100755 +--- a/scripts/recordmcount.pl ++++ b/scripts/recordmcount.pl +@@ -307,14 +307,33 @@ if ($arch eq "x86_64") { + $cc .= " -m64"; + $objcopy .= " -O elf64-sparc"; + } elsif ($arch eq "mips") { +- # To enable module support, we need to enable the -mlong-calls option +- # of gcc for module, after using this option, we can not get the real +- # offset of the calling to _mcount, but the offset of the lui +- # instruction or the addiu one. herein, we record the address of the +- # first one, and then we can replace this instruction by a branch +- # instruction to jump over the profiling function to filter the +- # indicated functions, or swith back to the lui instruction to trace +- # them, which means dynamic tracing. ++ # ++ # To disable tracing, just replace "jal _mcount" with nop; ++ # to enable tracing, replace back. so, the offset 14 is ++ # needed to be recorded. ++ # ++ # 10: 03e0082d move at,ra ++ # 14: 0c000000 jal 0 ++ # 14: R_MIPS_26 _mcount ++ # 14: R_MIPS_NONE *ABS* ++ # 14: R_MIPS_NONE *ABS* ++ # 18: 00020021 nop ++ # ++ # ++ # ++ # If no long call(-mlong-calls), the same to kernel. ++ # ++ # If the module space differs from the kernel space, long ++ # call is needed, as a result, the address of _mcount is ++ # needed to be recorded in a register and then jump from ++ # module space to kernel space via "jalr ". To ++ # disable tracing, "jalr " can be replaced by ++ # nop; to enable tracing, replace it back. Since the ++ # offset of "jalr " is not easy to be matched, ++ # the offset of the 1st _mcount below is recorded and to ++ # disable tracing, "lui v1, 0x0" is substituted with "b ++ # label", which jumps over "jalr "; to enable ++ # tracing, replace it back. + # + # c: 3c030000 lui v1,0x0 + # c: R_MIPS_HI16 _mcount +@@ -326,19 +345,12 @@ if ($arch eq "x86_64") { + # 10: R_MIPS_NONE *ABS* + # 14: 03e0082d move at,ra + # 18: 0060f809 jalr v1 ++ # label: + # +- # for the kernel: +- # +- # 10: 03e0082d move at,ra +- # 14: 0c000000 jal 0 +- # 14: R_MIPS_26 _mcount +- # 14: R_MIPS_NONE *ABS* +- # 14: R_MIPS_NONE *ABS* +- # 18: 00020021 nop + if ($is_module eq "0") { + $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_26\\s+_mcount\$"; + } else { +- $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_HI16\\s+_mcount\$"; ++ $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_(HI16|26)\\s+_mcount\$"; + } + $objdump .= " -Melf-trad".$endian."mips "; + +diff --git a/scripts/sstrip.sh b/scripts/sstrip.sh +new file mode 100755 +index 0000000..49b973a +--- /dev/null ++++ b/scripts/sstrip.sh +@@ -0,0 +1,59 @@ ++#!/bin/bash ++# sstrip.sh -- strip the section table of an elf file ++# ++# Copyright (C) 2010 Wu Zhangjin, wuzhangjin@gmail.com ++# Licensed under the GPLv2 ++# ++# Since the section table is useless for the embedded device, it can be ++# stripped out. ++# ++# Note: Some bootloader may check the section table but most of the time, it ++# may be not really used, If it really need the section table, it may need the ++# decompressed kernel image. ++ ++# Usage ++ ++function usage ++{ ++cat </dev/null` ++[ "xELF" != "x${FILE_TYPE}" ] && echo "$0: ${IMAGE} is not an ELF file" && exit -1 ++ ++[ "x${V}" == "x1" ] && orig_filesz=`wc -c ${IMAGE} | cut -d' ' -f1` ++ ++# Get the offset of the section table, here get the end of the program section ++filesz=$((`${OBJDUMP} -p ${IMAGE} | grep -m1 filesz | tr -s ' ' | cut -d' ' -f3`)) ++ ++# Truncate it via the dd tool ++dd if=/dev/null bs=1 of=${IMAGE} seek=${filesz} 2>/dev/null ++ ++# Clear the section table information in the ELF header ++# The last 6 bytes of the ELF header are the section table information ++echo -ne "\x00\x00\x00\x00\x00\x00" | dd of=${IMAGE} bs=1 seek=46 count=6 conv=notrunc 2>/dev/null ++ ++# Debug ++if [ "x${V}" == "x1" ]; then ++ echo "----------------------------------------------------------------" ++ echo "Strip the section table at ${filesz} of ${IMAGE}" ++ echo "----------------------------------------------------------------" ++ echo " sstrip: $0" ++ echo " objdump: ${OBJDUMP}" ++ echo "original size: ${orig_filesz}" ++ echo "current size: ${filesz}" ++ echo "reduced size: $((${orig_filesz} - ${filesz}))" ++fi diff --git a/kernels/linux-libre-rt/gnewsense-binutils-flag.patch b/kernels/linux-libre-rt/gnewsense-binutils-flag.patch new file mode 100644 index 000000000..5f2d44f99 --- /dev/null +++ b/kernels/linux-libre-rt/gnewsense-binutils-flag.patch @@ -0,0 +1,28 @@ +Our binutils somehow ended up with a -mfix-gs2f-kernel, rather than +-mfix-ls2f-kernel. Cope with it. + +Index: arch/mips/loongson/Platform +=================================================================== +--- arch/mips/loongson/Platform.orig 2010-10-25 19:09:49.000000000 +0000 ++++ arch/mips/loongson/Platform 2010-10-25 19:10:44.000000000 +0000 +@@ -10,6 +10,12 @@ + $(call cc-option,-march=loongson2f,-march=r4600) + # Enable the workarounds for Loongson2f + ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS ++ ifneq ($(call as-option,-Wa$(comma)-mfix-gs2f-kernel,),) ++ cflags-$(CONFIG_CPU_NOP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel ++ ifneq ($(CONFIG_CPU_NOP_WORKAROUNDS),$(CONFIG_CPU_JUMP_WORKAROUNDS)) ++ cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel ++ endif ++ else + ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-nop,),) + $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-nop) + else +@@ -20,6 +26,7 @@ + else + cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-jump + endif ++ endif + endif + + # diff --git a/libre/linux-libre-grsec/3.15.7-2704e67ebc-loongson-community.patch b/libre/linux-libre-grsec/3.15.7-2704e67ebc-loongson-community.patch new file mode 100644 index 000000000..0af02e4d4 --- /dev/null +++ b/libre/linux-libre-grsec/3.15.7-2704e67ebc-loongson-community.patch @@ -0,0 +1,11744 @@ +diff --git a/Makefile b/Makefile +index 833f67f..354c3fe 100644 +--- a/Makefile ++++ b/Makefile +@@ -245,8 +245,8 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ + + HOSTCC = gcc + HOSTCXX = g++ +-HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer +-HOSTCXXFLAGS = -O2 ++HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O3 -fomit-frame-pointer ++HOSTCXXFLAGS = -O3 + + ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1) + HOSTCFLAGS += -Wno-unused-value -Wno-unused-parameter \ +@@ -597,7 +597,7 @@ all: vmlinux + ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE + KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,) + else +-KBUILD_CFLAGS += -O2 ++KBUILD_CFLAGS += -O3 + endif + + include $(srctree)/arch/$(SRCARCH)/Makefile +diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig +index 5cd695f..2ca9abb 100644 +--- a/arch/mips/Kconfig ++++ b/arch/mips/Kconfig +@@ -277,7 +277,7 @@ config LASAT + + config MACH_LOONGSON + bool "Loongson family of machines" +- select SYS_SUPPORTS_ZBOOT ++ select SYS_SUPPORTS_ZBOOT_UART16550 + help + This enables the support of Loongson family of machines. + +@@ -882,6 +882,60 @@ config CSRC_IOASIC + config CSRC_R4K + bool + ++config MIPS_USER_RDTSC ++ bool "Emulate rdtsc instruction for MIPS" ++ depends on CSRC_R4K && MIPS32_O32 ++ default n ++ help ++ This optoin enables the Emulated rdtsc support for MIPS, which allows ++ the user-space applications read the R4k count directly. Currently, ++ this only support the CONFIG_MIPS32_O32 and R4K, but future, we may ++ add support for scall64-{n32,64}.S and scall32-32.S and for the count ++ registers provided by the other MIPS variants. ++ ++ This emulation based on the syscall instruction, by default, the ++ syscall is encoded as 0x0000000c, except the 0xc, the other parts can ++ be encoded as specific meaning. when a syscall instruction is issued, ++ through checking the encoding of the instruction, when the encoding ++ is the generic 0x000000c, we do the generic syscall work, if ++ something other is encoded in, we can do relevant things, except for ++ the light-weight things, such as read a register. herein, we read the ++ count register whenever there is something encoded in the syscall ++ instruction. In the future, we may be possible to abstract more ++ light-weight & frequently-used operations and add a ++ sys_call_table-like table to store the entries of some light-weight ++ operations and encode 1,2,3... into the syscall instruction and jump ++ to respective entry for diffrent numbers, as a result, we get ++ fast-syscall and which may speed up the user-space applications and ++ even be possibly improve the determinism. ++ ++ *Example* ++ ++ #include ++ #include ++ ++ /* ++ * Currently, our return value is only 32bit, In the long run, ++ * this should be uint64_t, just like clock_gettime(), but it ++ * should has high precision/low overhead than clock_gettime() ++ */ ++ uint32_t rdtsc(void) ++ { ++ /* ++ * Linux will store the value of the count register into ++ * the v0 register, which is just the return value of this ++ * function, so, please ignore the compiling warning. ++ */ ++ __asm__ __volatile__ ( ++ "syscall 1\n" ++ :::"$2"); ++ } ++ ++ int main(int argc, char *argv[]) ++ { ++ return printf("cycles: %u\n", rdtsc()); ++ } ++ + config CSRC_GIC + select MIPS_CM + bool +@@ -1524,6 +1578,15 @@ config CPU_LOONGSON2 + bool + select CPU_SUPPORTS_32BIT_KERNEL + select CPU_SUPPORTS_64BIT_KERNEL ++ select CPU_SUPPORTS_HIGHMEM if ! EMBEDDED ++ select ARCH_WANT_OPTIONAL_GPIOLIB ++ ++config CPU_LOONGSON1 ++ bool ++ select CPU_MIPS32 ++ select CPU_MIPSR2 ++ select CPU_HAS_PREFETCH ++ select CPU_SUPPORTS_32BIT_KERNEL + select CPU_SUPPORTS_HIGHMEM + select CPU_SUPPORTS_HUGEPAGES + +@@ -2204,7 +2267,7 @@ config CPU_SUPPORTS_MSA + + config ARCH_FLATMEM_ENABLE + def_bool y +- depends on !NUMA && !CPU_LOONGSON2 ++ depends on !NUMA && !(CPU_LOONGSON2 && HIBERNATION) + + config ARCH_DISCONTIGMEM_ENABLE + bool +diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile +index 61af6b6..8598044 100644 +--- a/arch/mips/boot/compressed/Makefile ++++ b/arch/mips/boot/compressed/Makefile +@@ -30,9 +30,10 @@ KBUILD_AFLAGS := $(LINUXINCLUDE) $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ + targets := head.o decompress.o string.o dbg.o uart-16550.o uart-alchemy.o + + # decompressor objects (linked with vmlinuz) +-vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o $(obj)/dbg.o ++vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o + + ifdef CONFIG_DEBUG_ZBOOT ++vmlinuzobjs-y += $(obj)/dbg.o + vmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o + vmlinuzobjs-$(CONFIG_MIPS_ALCHEMY) += $(obj)/uart-alchemy.o + endif +@@ -79,9 +80,18 @@ quiet_cmd_zld = LD $@ + cmd_zld = $(LD) $(LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T $< $(vmlinuzobjs-y) -o $@ + quiet_cmd_strip = STRIP $@ + cmd_strip = $(STRIP) -s $@ ++ifdef CONFIG_EMBEDDED ++quiet_cmd_sstrip = SSTRIP $@ ++ cmd_sstrip = $(srctree)/scripts/sstrip.sh $@ ++endif + vmlinuz: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr + $(call cmd,zld) + $(call cmd,strip) ++ $(call cmd,sstrip) ++ ++vmlinuz.unsstrip: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr ++ $(call cmd,zld) ++ $(call cmd,strip) + + # + # Some DECstations need all possible sections of an ECOFF executable +@@ -94,14 +104,14 @@ endif + hostprogs-y += ../elf2ecoff + + ifdef CONFIG_32BIT +- VMLINUZ = vmlinuz ++ VMLINUZ = vmlinuz.unsstrip + else + VMLINUZ = vmlinuz.32 + endif + + quiet_cmd_32 = OBJCOPY $@ + cmd_32 = $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@ +-vmlinuz.32: vmlinuz ++vmlinuz.32: vmlinuz.unsstrip + $(call cmd,32) + + quiet_cmd_ecoff = ECOFF $@ +@@ -110,11 +120,11 @@ vmlinuz.ecoff: $(obj)/../elf2ecoff $(VMLINUZ) + $(call cmd,ecoff) + + OBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary +-vmlinuz.bin: vmlinuz ++vmlinuz.bin: vmlinuz.unsstrip + $(call cmd,objcopy) + + OBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec +-vmlinuz.srec: vmlinuz ++vmlinuz.srec: vmlinuz.unsstrip + $(call cmd,objcopy) + +-clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec} ++clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec,unsstrip} +diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c +index c00c4dd..f4a656d 100644 +--- a/arch/mips/boot/compressed/decompress.c ++++ b/arch/mips/boot/compressed/decompress.c +@@ -27,8 +27,13 @@ unsigned long free_mem_end_ptr; + extern unsigned char __image_begin, __image_end; + + /* debug interfaces */ ++#ifdef CONFIG_DEBUG_ZBOOT + extern void puts(const char *s); + extern void puthex(unsigned long long val); ++#else ++#define puts(s) ++#define puthex(val) ++#endif + + void error(char *x) + { +diff --git a/arch/mips/boot/compressed/ld.script b/arch/mips/boot/compressed/ld.script +index 5a33409..de04ac9 100644 +--- a/arch/mips/boot/compressed/ld.script ++++ b/arch/mips/boot/compressed/ld.script +@@ -49,5 +49,6 @@ SECTIONS + *(.reginfo) + *(.comment) + *(.note) ++ *(.gnu.attributes) + } + } +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h +index a0ee0cb..4e18add 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h +@@ -301,5 +301,40 @@ extern void _wrmsr(u32 msr, u32 hi, u32 lo); + /* GPIO : I/O SPACE; REG : 32BITS */ + #define GPIOL_OUT_VAL 0x00 + #define GPIOL_OUT_EN 0x04 ++#define GPIOL_OUT_AUX1_SEL 0x10 ++/* SMB : I/O SPACE, REG : 8BITS WIDTH */ ++#define SMB_SDA 0x00 ++#define SMB_STS 0x01 ++#define SMB_STS_SLVSTP (1 << 7) ++#define SMB_STS_SDAST (1 << 6) ++#define SMB_STS_BER (1 << 5) ++#define SMB_STS_NEGACK (1 << 4) ++#define SMB_STS_STASTR (1 << 3) ++#define SMB_STS_NMATCH (1 << 2) ++#define SMB_STS_MASTER (1 << 1) ++#define SMB_STS_XMIT (1 << 0) ++#define SMB_CTRL_STS 0x02 ++#define SMB_CSTS_TGSTL (1 << 5) ++#define SMB_CSTS_TSDA (1 << 4) ++#define SMB_CSTS_GCMTCH (1 << 3) ++#define SMB_CSTS_MATCH (1 << 2) ++#define SMB_CSTS_BB (1 << 1) ++#define SMB_CSTS_BUSY (1 << 0) ++#define SMB_CTRL1 0x03 ++#define SMB_CTRL1_STASTRE (1 << 7) ++#define SMB_CTRL1_NMINTE (1 << 6) ++#define SMB_CTRL1_GCMEN (1 << 5) ++#define SMB_CTRL1_ACK (1 << 4) ++#define SMB_CTRL1_RSVD (1 << 3) ++#define SMB_CTRL1_INTEN (1 << 2) ++#define SMB_CTRL1_STOP (1 << 1) ++#define SMB_CTRL1_START (1 << 0) ++#define SMB_ADDR 0x04 ++#define SMB_ADDR_SAEN (1 << 7) ++#define SMB_CONTROLLER_ADDR (0xef << 0) ++#define SMB_CTRL2 0x05 ++#define SMB_FREQ (0x20 << 1) ++#define SMB_ENABLE (0x01 << 0) ++#define SMB_CTRL3 0x06 + + #endif /* _CS5536_H */ +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h +index 021d017..50aafca 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h +@@ -28,8 +28,19 @@ static inline void __maybe_unused enable_mfgpt0_counter(void) + #define COMPARE ((MFGPT_TICK_RATE + HZ/2) / HZ) + + #define MFGPT_BASE mfgpt_base ++#define MFGPT0_CMP1 (MFGPT_BASE + 0) + #define MFGPT0_CMP2 (MFGPT_BASE + 2) + #define MFGPT0_CNT (MFGPT_BASE + 4) + #define MFGPT0_SETUP (MFGPT_BASE + 6) + ++#define MFGPT1_CMP1 (MFGPT_BASE + 0x08) ++#define MFGPT1_CMP2 (MFGPT_BASE + 0x0A) ++#define MFGPT1_CNT (MFGPT_BASE + 0x0C) ++#define MFGPT1_SETUP (MFGPT_BASE + 0x0E) ++ ++#define MFGPT2_CMP1 (MFGPT_BASE + 0x10) ++#define MFGPT2_CMP2 (MFGPT_BASE + 0x12) ++#define MFGPT2_CNT (MFGPT_BASE + 0x14) ++#define MFGPT2_SETUP (MFGPT_BASE + 0x16) ++ + #endif /*!_CS5536_MFGPT_H */ +diff --git a/arch/mips/include/asm/mach-loongson/loongson.h b/arch/mips/include/asm/mach-loongson/loongson.h +index f3fd1eb..3fdfe84 100644 +--- a/arch/mips/include/asm/mach-loongson/loongson.h ++++ b/arch/mips/include/asm/mach-loongson/loongson.h +@@ -46,6 +46,12 @@ static inline void prom_init_uart_base(void) + #endif + } + ++/* ++ * Copy kernel command line from arcs_cmdline ++ */ ++#include ++extern char loongson_cmdline[COMMAND_LINE_SIZE]; ++ + /* irq operation functions */ + extern void bonito_irqdispatch(void); + extern void __init bonito_irq_init(void); +diff --git a/arch/mips/include/asm/mach-loongson/machine.h b/arch/mips/include/asm/mach-loongson/machine.h +index 1b1f592..2f6eb79 100644 +--- a/arch/mips/include/asm/mach-loongson/machine.h ++++ b/arch/mips/include/asm/mach-loongson/machine.h +@@ -24,6 +24,12 @@ + + #endif + ++#ifdef CONFIG_DEXXON_GDIUM ++ ++#define LOONGSON_MACHTYPE MACH_DEXXON_GDIUM2F10 ++ ++#endif ++ + #ifdef CONFIG_LEMOTE_MACH3A + + #define LOONGSON_MACHTYPE MACH_LEMOTE_A1101 +diff --git a/arch/mips/include/asm/mach-loongson1/clock.h b/arch/mips/include/asm/mach-loongson1/clock.h +new file mode 100644 +index 0000000..dd1afdb +--- /dev/null ++++ b/arch/mips/include/asm/mach-loongson1/clock.h +@@ -0,0 +1,53 @@ ++#ifndef __ASM_MACH_LOONGSON1_CLOCK_H ++#define __ASM_MACH_LOONGSON1_CLOCK_H ++ ++#include ++#include ++#include ++#include ++ ++extern void (*cpu_wait) (void); ++ ++struct clk; ++ ++struct clk_ops { ++ void (*init) (struct clk *clk); ++ void (*enable) (struct clk *clk); ++ void (*disable) (struct clk *clk); ++ void (*recalc) (struct clk *clk); ++ int (*set_rate) (struct clk *clk, unsigned long rate, int algo_id); ++ long (*round_rate) (struct clk *clk, unsigned long rate); ++}; ++ ++struct clk { ++ struct list_head node; ++ const char *name; ++ int id; ++ struct module *owner; ++ ++ struct clk *parent; ++ struct clk_ops *ops; ++ ++ struct kref kref; ++ ++ unsigned long rate; ++ unsigned long flags; ++}; ++ ++#define CLK_ALWAYS_ENABLED (1 << 0) ++#define CLK_RATE_PROPAGATES (1 << 1) ++ ++/* Should be defined by processor-specific code */ ++void arch_init_clk_ops(struct clk_ops **, int type); ++ ++int clk_init(void); ++ ++int __clk_enable(struct clk *); ++void __clk_disable(struct clk *); ++ ++void clk_recalc_rate(struct clk *); ++ ++int clk_register(struct clk *); ++void clk_unregister(struct clk *); ++ ++#endif /* __ASM_MIPS_CLOCK_H */ +diff --git a/arch/mips/include/asm/mach-loongson1/regs-intc.h b/arch/mips/include/asm/mach-loongson1/regs-intc.h +new file mode 100644 +index 0000000..6d5db23 +--- /dev/null ++++ b/arch/mips/include/asm/mach-loongson1/regs-intc.h +@@ -0,0 +1,25 @@ ++/* ++ * Copyright (c) 2011 Zhang, Keguang ++ * ++ * Loongson1 Interrupt register definitions. ++ * ++ * 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. ++ */ ++ ++#ifndef __ASM_MACH_LOONGSON1_REGS_INTC_H ++#define __ASM_MACH_LOONGSON1_REGS_INTC_H ++ ++#define LS1X_INTC_REG(n, x) \ ++ (ioremap(LS1X_INTC_BASE + (n * 0x18) + (x), 4)) ++ ++#define LS1X_INTC_INTISR(n) LS1X_INTC_REG(n, 0x0) ++#define LS1X_INTC_INTIEN(n) LS1X_INTC_REG(n, 0x4) ++#define LS1X_INTC_INTSET(n) LS1X_INTC_REG(n, 0x8) ++#define LS1X_INTC_INTCLR(n) LS1X_INTC_REG(n, 0xc) ++#define LS1X_INTC_INTPOL(n) LS1X_INTC_REG(n, 0x10) ++#define LS1X_INTC_INTEDGE(n) LS1X_INTC_REG(n, 0x14) ++ ++#endif /* __ASM_MACH_LOONGSON1_REGS_INTC_H */ +diff --git a/arch/mips/include/asm/timex.h b/arch/mips/include/asm/timex.h +index c542475..74fef34 100644 +--- a/arch/mips/include/asm/timex.h ++++ b/arch/mips/include/asm/timex.h +@@ -10,6 +10,10 @@ + + #ifdef __KERNEL__ + ++#ifdef CONFIG_CSRC_R4K ++#define ARCH_HAS_PREPARED_LPJ ++#endif ++ + #include + #include + #include +diff --git a/arch/mips/include/uapi/asm/inst.h b/arch/mips/include/uapi/asm/inst.h +index 3125797..bf4241d 100644 +--- a/arch/mips/include/uapi/asm/inst.h ++++ b/arch/mips/include/uapi/asm/inst.h +@@ -63,6 +63,8 @@ enum spec_op { + enum spec2_op { + madd_op, maddu_op, mul_op, spec2_3_unused_op, + msub_op, msubu_op, /* more unused ops */ ++ loongson_madd_op = 0x18, loongson_msub_op, ++ loongson_nmadd_op, loongson_nmsub_op, + clz_op = 0x20, clo_op, + dclz_op = 0x24, dclo_op, + sdbpp_op = 0x3f +@@ -142,7 +144,7 @@ enum cop0_com_func { + */ + enum cop1_fmt { + s_fmt, d_fmt, e_fmt, q_fmt, +- w_fmt, l_fmt ++ w_fmt, l_fmt, ps_fmt + }; + + /* +@@ -171,7 +173,8 @@ enum cop1_sdw_func { + enum cop1x_func { + lwxc1_op = 0x00, ldxc1_op = 0x01, + swxc1_op = 0x08, sdxc1_op = 0x09, +- pfetch_op = 0x0f, madd_s_op = 0x20, ++ pfetch_op = 0x0f, ++ prefx_op = 0x17, madd_s_op = 0x20, + madd_d_op = 0x21, madd_e_op = 0x22, + msub_s_op = 0x28, msub_d_op = 0x29, + msub_e_op = 0x2a, nmadd_s_op = 0x30, +diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S +index f1343cc..1320561 100644 +--- a/arch/mips/kernel/scall64-o32.S ++++ b/arch/mips/kernel/scall64-o32.S +@@ -26,6 +26,18 @@ + + .align 5 + NESTED(handle_sys, PT_SIZE, sp) ++#ifdef CONFIG_MIPS_USER_RDTSC ++ MFC0 k0, CP0_EPC ++ lw k1, 0(k0) ++ sltiu k1, k1, 0x1c ++ bne k1, zero, 1f # Normal syscall code: 0x0c < 0x1c ++ nop ++ mfc0 v0, CP0_COUNT # Get TSC ++ PTR_ADDIU k0, 4 # ret from syscall ++ MTC0 k0, CP0_EPC ++ eret ++1: ++#endif /* CONFIG_MIPS_USER_RDTSC */ + .set noat + SAVE_SOME + TRACE_IRQS_ON_RELOAD +diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c +index dcb8e5d..45177bc 100644 +--- a/arch/mips/kernel/time.c ++++ b/arch/mips/kernel/time.c +@@ -120,6 +120,11 @@ static __init int cpu_has_mfc0_count_bug(void) + + void __init time_init(void) + { ++#ifdef CONFIG_HR_SCHED_CLOCK ++ if (!mips_clockevent_init() || !cpu_has_mfc0_count_bug()) ++ write_c0_count(0); ++#endif ++ + plat_time_init(); + + /* +diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile +index eeddc58..d7bec00 100644 +--- a/arch/mips/lib/Makefile ++++ b/arch/mips/lib/Makefile +@@ -2,10 +2,14 @@ + # Makefile for MIPS-specific library files.. + # + +-lib-y += bitops.o csum_partial.o delay.o memcpy.o memset.o \ ++lib-y += bitops.o csum_partial.o memcpy.o memset.o \ + mips-atomic.o strlen_user.o strncpy_user.o \ + strnlen_user.o uncached.o + ++ifndef CONFIG_CSRC_R4K ++lib-y += delay.o ++endif ++ + obj-y += iomap.o + obj-$(CONFIG_PCI) += iomap-pci.o + +diff --git a/arch/mips/loongson/Kconfig b/arch/mips/loongson/Kconfig +index 603d79a..984bf73 100644 +--- a/arch/mips/loongson/Kconfig ++++ b/arch/mips/loongson/Kconfig +@@ -32,12 +32,12 @@ config LEMOTE_FULOONG2E + + config LEMOTE_MACH2F + bool "Lemote Loongson 2F family machines" +- select ARCH_SPARSEMEM_ENABLE ++ select ARCH_SPARSEMEM_ENABLE if HIBERNATION + select BOARD_SCACHE + select BOOT_ELF32 + select CEVT_R4K if ! MIPS_EXTERNAL_TIMER + select CPU_HAS_WB +- select CS5536 ++ select CS5536 if PCI + select CSRC_R4K if ! MIPS_EXTERNAL_TIMER + select DMA_NONCOHERENT + select GENERIC_ISA_DMA_SUPPORT_BROKEN +@@ -45,14 +45,13 @@ config LEMOTE_MACH2F + select HW_HAS_PCI + select I8259 + select IRQ_CPU +- select ISA + select SYS_HAS_CPU_LOONGSON2F + select SYS_HAS_EARLY_PRINTK + select SYS_SUPPORTS_32BIT_KERNEL + select SYS_SUPPORTS_64BIT_KERNEL +- select SYS_SUPPORTS_HIGHMEM ++ select SYS_SUPPORTS_HIGHMEM if ! EMBEDDED + select SYS_SUPPORTS_LITTLE_ENDIAN +- select LOONGSON_MC146818 ++ select LOONGSON_MC146818 if RTC_DRV_CMOS + help + Lemote Loongson 2F family machines utilize the 2F revision of + Loongson processor and the AMD CS5536 south bridge. +@@ -60,6 +59,31 @@ config LEMOTE_MACH2F + These family machines include fuloong2f mini PC, yeeloong2f notebook, + LingLoong allinone PC and so forth. + ++config DEXXON_GDIUM ++ bool "Dexxon Gdium Netbook" ++ select ARCH_SPARSEMEM_ENABLE ++ select BOARD_SCACHE ++ select BOOT_ELF32 ++ select CEVT_R4K if ! MIPS_EXTERNAL_TIMER ++ select CPU_HAS_WB ++ select CSRC_R4K if ! MIPS_EXTERNAL_TIMER ++ select DMA_NONCOHERENT ++ select GENERIC_ISA_DMA_SUPPORT_BROKEN ++ select HW_HAS_PCI ++ select I8259 ++ select IRQ_CPU ++ select ISA ++ select SYS_HAS_CPU_LOONGSON2F ++ select SYS_HAS_EARLY_PRINTK ++ select SYS_SUPPORTS_32BIT_KERNEL ++ select SYS_SUPPORTS_64BIT_KERNEL ++ select SYS_SUPPORTS_HIGHMEM ++ select SYS_SUPPORTS_LITTLE_ENDIAN ++ select ARCH_REQUIRE_GPIOLIB ++ select HAVE_PWM if MFD_SM501 ++ help ++ Dexxon gdium netbook based on Loongson 2F and SM502. ++ + config LEMOTE_MACH3A + bool "Lemote Loongson 3A family machines" + select ARCH_SPARSEMEM_ENABLE +@@ -133,6 +157,24 @@ config LOONGSON_MC146818 + bool + default n + ++config GDIUM_PWM_CLOCK ++ tristate "Gdium PWM Timer" ++ default n ++ depends on HAVE_PWM && EXPERIMENTAL && BROKEN ++ select MIPS_EXTERNAL_TIMER ++ help ++ This options enables the experimental sm501-pwm based clock. With it, ++ you may be possible to use the loongson2f cpufreq driver. ++ ++config GDIUM_VERSION ++ int "Configure Gdium Version" ++ depends on DEXXON_GDIUM ++ default "3" ++ help ++ I have no information about how to determine which version your board ++ is, If the default config doesn't work for it, please change it to ++ smaller ones. ++ + config LEFI_FIRMWARE_INTERFACE + bool + +diff --git a/arch/mips/loongson/Makefile b/arch/mips/loongson/Makefile +index 7429994..63214c8 100644 +--- a/arch/mips/loongson/Makefile ++++ b/arch/mips/loongson/Makefile +@@ -17,6 +17,12 @@ obj-$(CONFIG_LEMOTE_FULOONG2E) += fuloong-2e/ + obj-$(CONFIG_LEMOTE_MACH2F) += lemote-2f/ + + # ++# Dexxon gdium netbook, based on loongson 2F and SM502 ++# ++ ++obj-$(CONFIG_DEXXON_GDIUM) += gdium/ ++ ++# + # All Loongson-3 family machines + # + +diff --git a/arch/mips/loongson/Platform b/arch/mips/loongson/Platform +index 6205372..32dd006 100644 +--- a/arch/mips/loongson/Platform ++++ b/arch/mips/loongson/Platform +@@ -30,4 +30,5 @@ platform-$(CONFIG_MACH_LOONGSON) += loongson/ + cflags-$(CONFIG_MACH_LOONGSON) += -I$(srctree)/arch/mips/include/asm/mach-loongson -mno-branch-likely + load-$(CONFIG_LEMOTE_FULOONG2E) += 0xffffffff80100000 + load-$(CONFIG_LEMOTE_MACH2F) += 0xffffffff80200000 ++load-$(CONFIG_DEXXON_GDIUM) += 0xffffffff80200000 + load-$(CONFIG_CPU_LOONGSON3) += 0xffffffff80200000 +diff --git a/arch/mips/loongson/common/cmdline.c b/arch/mips/loongson/common/cmdline.c +index 72fed00..96d5919 100644 +--- a/arch/mips/loongson/common/cmdline.c ++++ b/arch/mips/loongson/common/cmdline.c +@@ -17,10 +17,15 @@ + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ ++#include + #include + + #include + ++/* the kernel command line copied from arcs_cmdline */ ++char loongson_cmdline[COMMAND_LINE_SIZE]; ++EXPORT_SYMBOL(loongson_cmdline); ++ + void __init prom_init_cmdline(void) + { + int prom_argc; +@@ -45,4 +50,31 @@ void __init prom_init_cmdline(void) + } + + prom_init_machtype(); ++ ++ /* append machine specific command line */ ++ switch (mips_machtype) { ++ case MACH_LEMOTE_LL2F: ++ if ((strstr(arcs_cmdline, "video=")) == NULL) ++ strcat(arcs_cmdline, " video=sisfb:1360x768-16@60"); ++ break; ++ case MACH_LEMOTE_FL2F: ++ if ((strstr(arcs_cmdline, "ide_core.ignore_cable=")) == NULL) ++ strcat(arcs_cmdline, " ide_core.ignore_cable=0"); ++ break; ++ case MACH_LEMOTE_ML2F7: ++ /* Mengloong-2F has a 800x480 screen */ ++ if ((strstr(arcs_cmdline, "vga=")) == NULL) ++ strcat(arcs_cmdline, " vga=0x313"); ++ break; ++ case MACH_DEXXON_GDIUM2F10: ++ /* gdium has a 1024x600 screen */ ++ if ((strstr(arcs_cmdline, "video=")) == NULL) ++ strcat(arcs_cmdline, " video=sm501fb:1024x600@60"); ++ break; ++ default: ++ break; ++ } ++ ++ /* copy arcs_cmdline into loongson_cmdline */ ++ strncpy(loongson_cmdline, arcs_cmdline, COMMAND_LINE_SIZE); + } +diff --git a/arch/mips/loongson/gdium/Makefile b/arch/mips/loongson/gdium/Makefile +new file mode 100644 +index 0000000..f3f4f51 +--- /dev/null ++++ b/arch/mips/loongson/gdium/Makefile +@@ -0,0 +1,6 @@ ++# Makefile for gdium ++ ++obj-y += irq.o reset.o platform.o ++ ++obj-$(CONFIG_MFD_SM501) += sm501-pwm.o ++obj-$(CONFIG_GDIUM_PWM_CLOCK) += gdium-clock.o +diff --git a/arch/mips/loongson/gdium/gdium-clock.c b/arch/mips/loongson/gdium/gdium-clock.c +new file mode 100644 +index 0000000..fdbf42a +--- /dev/null ++++ b/arch/mips/loongson/gdium/gdium-clock.c +@@ -0,0 +1,234 @@ ++/* ++ * Doesn't work really well. When used, the clocksource is producing ++ * bad timings and the clockevent can't be used (don't have one shot feature ++ * thus can't switch on the fly and the pwm is initialised too late to be able ++ * to use it at boot time). ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define CLOCK_PWM 1 ++#define CLOCK_PWM_FREQ 1500000 /* Freq in Hz */ ++#define CLOCK_LATCH ((CLOCK_PWM_FREQ + HZ/2) / HZ) ++#define CLOCK_PWM_PERIOD (1000000000/CLOCK_PWM_FREQ) /* period ns */ ++#define CLOCK_PWM_DUTY 50 ++#define CLOCK_PWM_IRQ (MIPS_CPU_IRQ_BASE + 4) ++ ++static const char drv_name[] = "gdium-clock"; ++ ++static struct pwm_device *clock_pwm; ++ ++static DEFINE_SPINLOCK(clock_pwm_lock); ++static uint64_t clock_tick; ++ ++static irqreturn_t gdium_pwm_clock_interrupt(int irq, void *dev_id) ++{ ++ struct clock_event_device *cd = dev_id; ++ unsigned long flag; ++ ++ spin_lock_irqsave(&clock_pwm_lock, flag); ++ clock_tick++; ++ /* wait intn2 to finish */ ++ do { ++ LOONGSON_INTENCLR = (1 << 13); ++ } while (LOONGSON_INTISR & (1 << 13)); ++ spin_unlock_irqrestore(&clock_pwm_lock, flag); ++ ++ if (cd && cd->event_handler) ++ cd->event_handler(cd); ++ ++ return IRQ_HANDLED; ++} ++ ++static cycle_t gdium_pwm_clock_read(struct clocksource *cs) ++{ ++ unsigned long flag; ++ uint32_t jifs; ++ uint64_t ticks; ++ ++ spin_lock_irqsave(&clock_pwm_lock, flag); ++ jifs = jiffies; ++ ticks = clock_tick; ++ spin_unlock_irqrestore(&clock_pwm_lock, flag); ++ /* return (cycle_t)ticks; */ ++ return (cycle_t)(CLOCK_LATCH * jifs); ++} ++ ++static struct clocksource gdium_pwm_clock_clocksource = { ++ .name = "gdium_csrc", ++ .read = gdium_pwm_clock_read, ++ .mask = CLOCKSOURCE_MASK(64), ++ .flags = CLOCK_SOURCE_IS_CONTINUOUS | CLOCK_SOURCE_MUST_VERIFY, ++ .shift = 20, ++}; ++ ++/* Debug fs */ ++static int gdium_pwm_clock_show(struct seq_file *s, void *p) ++{ ++ unsigned long flag; ++ uint64_t ticks; ++ ++ spin_lock_irqsave(&clock_pwm_lock, flag); ++ ticks = clock_tick; ++ spin_unlock_irqrestore(&clock_pwm_lock, flag); ++ seq_printf(s, "%lld\n", ticks); ++ return 0; ++} ++ ++static int gdium_pwm_clock_open(struct inode *inode, struct file *file) ++{ ++ return single_open(file, gdium_pwm_clock_show, inode->i_private); ++} ++ ++static const struct file_operations gdium_pwm_clock_fops = { ++ .open = gdium_pwm_clock_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .owner = THIS_MODULE, ++}; ++static struct dentry *debugfs_file; ++ ++static void gdium_pwm_clock_set_mode(enum clock_event_mode mode, ++ struct clock_event_device *evt) ++{ ++ /* Nothing to do ... */ ++} ++ ++static struct clock_event_device gdium_pwm_clock_cevt = { ++ .name = "gdium_cevt", ++ .features = CLOCK_EVT_FEAT_PERIODIC, ++ /* .mult, .shift, .max_delta_ns and .min_delta_ns left uninitialized */ ++ .rating = 299, ++ .irq = CLOCK_PWM_IRQ, ++ .set_mode = gdium_pwm_clock_set_mode, ++}; ++ ++static struct platform_device_id platform_device_ids[] = { ++ { ++ .name = "gdium-pwmclk", ++ }, ++ {} ++}; ++MODULE_DEVICE_TABLE(platform, platform_device_ids); ++ ++static struct platform_driver gdium_pwm_clock_driver = { ++ .driver = { ++ .name = drv_name, ++ .owner = THIS_MODULE, ++ }, ++ .id_table = platform_device_ids, ++}; ++ ++static int gdium_pwm_clock_drvinit(void) ++{ ++ int ret; ++ struct clocksource *cs = &gdium_pwm_clock_clocksource; ++ struct clock_event_device *cd = &gdium_pwm_clock_cevt; ++ unsigned int cpu = smp_processor_id(); ++ ++ clock_tick = 0; ++ ++ clock_pwm = pwm_request(CLOCK_PWM, drv_name); ++ if (clock_pwm == NULL) { ++ pr_err("unable to request PWM for Gdium clock\n"); ++ return -EBUSY; ++ } ++ ret = pwm_config(clock_pwm, CLOCK_PWM_DUTY, CLOCK_PWM_PERIOD); ++ if (ret) { ++ pr_err("unable to configure PWM for Gdium clock\n"); ++ goto err_pwm_request; ++ } ++ ret = pwm_enable(clock_pwm); ++ if (ret) { ++ pr_err("unable to enable PWM for Gdium clock\n"); ++ goto err_pwm_request; ++ } ++ ++ cd->cpumask = cpumask_of(cpu); ++ ++ cd->shift = 22; ++ cd->mult = div_sc(CLOCK_PWM_FREQ, NSEC_PER_SEC, cd->shift); ++ cd->max_delta_ns = clockevent_delta2ns(0x7FFF, cd); ++ cd->min_delta_ns = clockevent_delta2ns(0xF, cd); ++ clockevents_register_device(&gdium_pwm_clock_cevt); ++ ++ /* SM501 PWM1 connected to intn2 <->ip4 */ ++ LOONGSON_INTPOL = (1 << 13); ++ LOONGSON_INTEDGE &= ~(1 << 13); ++ ret = request_irq(CLOCK_PWM_IRQ, gdium_pwm_clock_interrupt, IRQF_DISABLED, drv_name, &gdium_pwm_clock_cevt); ++ if (ret) { ++ pr_err("Can't claim irq\n"); ++ goto err_pwm_disable; ++ } ++ ++ cs->rating = 200; ++ cs->mult = clocksource_hz2mult(CLOCK_PWM_FREQ, cs->shift); ++ ret = clocksource_register(&gdium_pwm_clock_clocksource); ++ if (ret) { ++ pr_err("Can't register clocksource\n"); ++ goto err_irq; ++ } ++ pr_info("Clocksource registered with shift %d and mult %d\n", ++ cs->shift, cs->mult); ++ ++ debugfs_file = debugfs_create_file(drv_name, S_IFREG | S_IRUGO, ++ NULL, NULL, &gdium_pwm_clock_fops); ++ ++ return 0; ++ ++err_irq: ++ free_irq(CLOCK_PWM_IRQ, &gdium_pwm_clock_cevt); ++err_pwm_disable: ++ pwm_disable(clock_pwm); ++err_pwm_request: ++ pwm_free(clock_pwm); ++ return ret; ++} ++ ++static void gdium_pwm_clock_drvexit(void) ++{ ++ free_irq(CLOCK_PWM_IRQ, &gdium_pwm_clock_cevt); ++ pwm_disable(clock_pwm); ++ pwm_free(clock_pwm); ++} ++ ++ ++static int __devinit gdium_pwm_clock_init(void) ++{ ++ int ret = gdium_pwm_clock_drvinit(); ++ ++ if (ret) { ++ pr_err("Fail to register gdium clock driver\n"); ++ return ret; ++ } ++ ++ return platform_driver_register(&gdium_pwm_clock_driver); ++} ++ ++static void __exit gdium_pwm_clock_cleanup(void) ++{ ++ gdium_pwm_clock_drvexit(); ++ platform_driver_unregister(&gdium_pwm_clock_driver); ++} ++ ++module_init(gdium_pwm_clock_init); ++module_exit(gdium_pwm_clock_cleanup); ++ ++MODULE_AUTHOR("Arnaud Patard "); ++MODULE_DESCRIPTION("Gdium PWM clock driver"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("platform:gdium-pwmclk"); +diff --git a/arch/mips/loongson/gdium/irq.c b/arch/mips/loongson/gdium/irq.c +new file mode 100644 +index 0000000..2415d20 +--- /dev/null ++++ b/arch/mips/loongson/gdium/irq.c +@@ -0,0 +1,55 @@ ++/* ++ * Copyright (C) 2007 Lemote Inc. ++ * Author: Fuxin Zhang, zhangfx@lemote.com ++ * ++ * Copyright (c) 2010 yajin ++ * ++ * 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. ++ */ ++ ++#include ++#include ++ ++#include ++#include ++ ++#define LOONGSON_TIMER_IRQ (MIPS_CPU_IRQ_BASE + 7) /* cpu timer */ ++#define LOONGSON_NORTH_BRIDGE_IRQ (MIPS_CPU_IRQ_BASE + 6) /* bonito */ ++#define LOONGSON_UART_IRQ (MIPS_CPU_IRQ_BASE + 3) /* cpu serial port */ ++ ++void mach_irq_dispatch(unsigned int pending) ++{ ++ if (pending & CAUSEF_IP7) ++ do_IRQ(LOONGSON_TIMER_IRQ); ++ else if (pending & CAUSEF_IP6) { /* North Bridge, Perf counter */ ++ do_perfcnt_IRQ(); ++ bonito_irqdispatch(); ++ } else if (pending & CAUSEF_IP3) /* CPU UART */ ++ do_IRQ(LOONGSON_UART_IRQ); ++#if defined(CONFIG_GDIUM_PWM_CLOCK) || defined(CONFIG_GDIUM_PWM_CLOCK_MODULE) ++ else if (pending & CAUSEF_IP4) /* SM501 PWM clock */ ++ do_IRQ(MIPS_CPU_IRQ_BASE + 4); ++#endif ++ else ++ spurious_interrupt(); ++} ++ ++static irqreturn_t ip6_action(int cpl, void *dev_id) ++{ ++ return IRQ_HANDLED; ++} ++ ++struct irqaction ip6_irqaction = { ++ .handler = ip6_action, ++ .name = "cascade", ++ .flags = IRQF_SHARED, ++}; ++ ++void __init mach_init_irq(void) ++{ ++ /* setup north bridge irq (bonito) */ ++ setup_irq(LOONGSON_NORTH_BRIDGE_IRQ, &ip6_irqaction); ++} +diff --git a/arch/mips/loongson/gdium/platform.c b/arch/mips/loongson/gdium/platform.c +new file mode 100644 +index 0000000..ffafba4 +--- /dev/null ++++ b/arch/mips/loongson/gdium/platform.c +@@ -0,0 +1,135 @@ ++/* ++ * Copyright (c) 2009 Philippe Vachon ++ * ++ * 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define GDIUM_GPIO_BASE 224 ++ ++static struct i2c_board_info __initdata sm502dev_i2c_devices[] = { ++ { ++ I2C_BOARD_INFO("lm75", 0x48), ++ }, ++ { ++ I2C_BOARD_INFO("m41t83", 0x68), ++ }, ++ { ++ I2C_BOARD_INFO("gdium-laptop", 0x40), ++ }, ++}; ++ ++static int sm502dev_backlight_init(struct device *dev) ++{ ++ /* Add gpio request stuff here */ ++ return 0; ++} ++ ++static void sm502dev_backlight_exit(struct device *dev) ++{ ++ /* Add gpio free stuff here */ ++} ++ ++static struct platform_pwm_backlight_data backlight_data = { ++ .pwm_id = 0, ++ .max_brightness = 15, ++ .dft_brightness = 8, ++ .pwm_period_ns = 50000, /* 20 kHz */ ++ .init = sm502dev_backlight_init, ++ .exit = sm502dev_backlight_exit, ++}; ++ ++static struct platform_device backlight = { ++ .name = "pwm-backlight", ++ .dev = { ++ .platform_data = &backlight_data, ++ }, ++ .id = -1, ++}; ++ ++/* ++ * Warning this stunt is very dangerous ++ * as the sm501 gpio have dynamic numbers... ++ */ ++/* bus 0 is the one for the ST7, DS75 etc... */ ++static struct i2c_gpio_platform_data i2c_gpio0_data = { ++#if CONFIG_GDIUM_VERSION > 2 ++ .sda_pin = GDIUM_GPIO_BASE + 13, ++ .scl_pin = GDIUM_GPIO_BASE + 6, ++#else ++ .sda_pin = 192+15, ++ .scl_pin = 192+14, ++#endif ++ .udelay = 5, ++ .timeout = HZ / 10, ++ .sda_is_open_drain = 0, ++ .scl_is_open_drain = 0, ++}; ++ ++static struct platform_device i2c_gpio0_device = { ++ .name = "i2c-gpio", ++ .id = 0, ++ .dev = { .platform_data = &i2c_gpio0_data, }, ++}; ++ ++/* bus 1 is for the CRT/VGA external screen */ ++static struct i2c_gpio_platform_data i2c_gpio1_data = { ++ .sda_pin = GDIUM_GPIO_BASE + 10, ++ .scl_pin = GDIUM_GPIO_BASE + 9, ++ .udelay = 5, ++ .timeout = HZ / 10, ++ .sda_is_open_drain = 0, ++ .scl_is_open_drain = 0, ++}; ++ ++static struct platform_device i2c_gpio1_device = { ++ .name = "i2c-gpio", ++ .id = 1, ++ .dev = { .platform_data = &i2c_gpio1_data, }, ++}; ++ ++static struct platform_device gdium_clock = { ++ .name = "gdium-pwmclk", ++ .id = -1, ++}; ++ ++static struct platform_device *devices[] __initdata = { ++ &i2c_gpio0_device, ++ &i2c_gpio1_device, ++ &backlight, ++ &gdium_clock, ++}; ++ ++static int __init gdium_platform_devices_setup(void) ++{ ++ int ret; ++ ++ pr_info("Registering gdium platform devices\n"); ++ ++ ret = i2c_register_board_info(0, sm502dev_i2c_devices, ++ ARRAY_SIZE(sm502dev_i2c_devices)); ++ ++ if (ret != 0) { ++ pr_info("Error while registering platform devices: %d\n", ret); ++ return ret; ++ } ++ ++ platform_add_devices(devices, ARRAY_SIZE(devices)); ++ ++ return 0; ++} ++ ++/* ++ * some devices are on the pwm stuff which is behind the mfd which is ++ * behind the pci bus so arch_initcall can't work because too early ++ */ ++late_initcall(gdium_platform_devices_setup); +diff --git a/arch/mips/loongson/gdium/reset.c b/arch/mips/loongson/gdium/reset.c +new file mode 100644 +index 0000000..8289f95 +--- /dev/null ++++ b/arch/mips/loongson/gdium/reset.c +@@ -0,0 +1,22 @@ ++/* Board-specific reboot/shutdown routines ++ * ++ * Copyright (C) 2010 yajin ++ * ++ * 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. ++ */ ++#include ++ ++void mach_prepare_shutdown(void) ++{ ++ LOONGSON_GPIOIE &= ~(1<<1); ++ LOONGSON_GPIODATA |= (1<<1); ++} ++ ++void mach_prepare_reboot(void) ++{ ++ LOONGSON_GPIOIE &= ~(1<<2); ++ LOONGSON_GPIODATA &= ~(1<<2); ++} +diff --git a/arch/mips/loongson/gdium/sm501-pwm.c b/arch/mips/loongson/gdium/sm501-pwm.c +new file mode 100644 +index 0000000..5af3b23 +--- /dev/null ++++ b/arch/mips/loongson/gdium/sm501-pwm.c +@@ -0,0 +1,465 @@ ++/* ++ * SM501 PWM clock ++ * Copyright (C) 2009-2010 Arnaud Patard ++ * ++ * 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static const char drv_name[] = "sm501-pwm"; ++ ++#define INPUT_CLOCK 96 /* MHz */ ++#define PWM_COUNT 3 ++ ++#define SM501PWM_HIGH_COUNTER (1<<20) ++#define SM501PWM_LOW_COUNTER (1<<8) ++#define SM501PWM_CLOCK_DIVIDE (1>>4) ++#define SM501PWM_IP (1<<3) ++#define SM501PWM_I (1<<2) ++#define SM501PWM_E (1<<0) ++ ++struct pwm_device { ++ struct list_head node; ++ struct device *dev; ++ void __iomem *regs; ++ int duty_ns; ++ int period_ns; ++ char enabled; ++ void (*handler)(struct pwm_device *pwm); ++ ++ const char *label; ++ unsigned int use_count; ++ unsigned int pwm_id; ++}; ++ ++struct sm501pwm_info { ++ void __iomem *regs; ++ int irq; ++ struct resource *res; ++ struct device *dev; ++ struct dentry *debugfs; ++ ++ struct pwm_device pwm[3]; ++}; ++ ++int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) ++{ ++ unsigned int high, low, divider; ++ int divider1, divider2; ++ unsigned long long delay; ++ ++ if (!pwm || !pwm->regs || period_ns == 0 || duty_ns > period_ns) ++ return -EINVAL; ++ ++ /* Get delay ++ * We're loosing some precision but multiplying then dividing ++ * will overflow ++ */ ++ if (period_ns > 1000) { ++ delay = period_ns / 1000; ++ delay *= INPUT_CLOCK; ++ } else { ++ delay = period_ns * 96; ++ delay /= 1000; ++ } ++ ++ /* Get the number of clock low and high */ ++ high = delay * duty_ns / period_ns; ++ low = delay - high; ++ ++ /* Get divider to make 'low' and 'high' fit into 12 bits */ ++ /* No need to say that the divider must be >= 0 */ ++ divider1 = fls(low)-12; ++ divider2 = fls(high)-12; ++ ++ if (divider1 < 0) ++ divider1 = 0; ++ if (divider2 < 0) ++ divider2 = 0; ++ ++ divider = max(divider1, divider2); ++ ++ low >>= divider; ++ high >>= divider; ++ ++ pwm->duty_ns = duty_ns; ++ pwm->period_ns = period_ns; ++ ++ writel((high<<20)|(low<<8)|(divider<<4), pwm->regs); ++ return 0; ++} ++EXPORT_SYMBOL(pwm_config); ++ ++int pwm_enable(struct pwm_device *pwm) ++{ ++ u32 reg; ++ ++ if (!pwm) ++ return -EINVAL; ++ ++ switch (pwm->pwm_id) { ++ case 0: ++ sm501_configure_gpio(pwm->dev->parent, 29, 1); ++ break; ++ case 1: ++ sm501_configure_gpio(pwm->dev->parent, 30, 1); ++ break; ++ case 2: ++ sm501_configure_gpio(pwm->dev->parent, 31, 1); ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ reg = readl(pwm->regs); ++ reg |= (SM501PWM_IP | SM501PWM_E); ++ writel(reg, pwm->regs); ++ pwm->enabled = 1; ++ ++ return 0; ++} ++EXPORT_SYMBOL(pwm_enable); ++ ++void pwm_disable(struct pwm_device *pwm) ++{ ++ u32 reg; ++ ++ if (!pwm) ++ return; ++ ++ reg = readl(pwm->regs); ++ reg &= ~(SM501PWM_IP | SM501PWM_E); ++ writel(reg, pwm->regs); ++ ++ switch (pwm->pwm_id) { ++ case 0: ++ sm501_configure_gpio(pwm->dev->parent, 29, 0); ++ break; ++ case 1: ++ sm501_configure_gpio(pwm->dev->parent, 30, 0); ++ break; ++ case 2: ++ sm501_configure_gpio(pwm->dev->parent, 31, 0); ++ break; ++ default: ++ break; ++ } ++ pwm->enabled = 0; ++} ++EXPORT_SYMBOL(pwm_disable); ++ ++static DEFINE_MUTEX(pwm_lock); ++static LIST_HEAD(pwm_list); ++ ++struct pwm_device *pwm_request(int pwm_id, const char *label) ++{ ++ struct pwm_device *pwm; ++ int found = 0; ++ ++ mutex_lock(&pwm_lock); ++ ++ list_for_each_entry(pwm, &pwm_list, node) { ++ if (pwm->pwm_id == pwm_id && pwm->use_count == 0) { ++ pwm->use_count++; ++ pwm->label = label; ++ found = 1; ++ break; ++ } ++ } ++ ++ mutex_unlock(&pwm_lock); ++ ++ return (found) ? pwm : NULL; ++} ++EXPORT_SYMBOL(pwm_request); ++ ++void pwm_free(struct pwm_device *pwm) ++{ ++ mutex_lock(&pwm_lock); ++ ++ if (pwm->use_count) { ++ pwm->use_count--; ++ pwm->label = NULL; ++ } else ++ dev_warn(pwm->dev, "PWM device already freed\n"); ++ ++ mutex_unlock(&pwm_lock); ++} ++EXPORT_SYMBOL(pwm_free); ++ ++int pwm_int_enable(struct pwm_device *pwm) ++{ ++ unsigned long conf; ++ ++ if (!pwm || !pwm->regs || !pwm->handler) ++ return -EINVAL; ++ ++ conf = readl(pwm->regs); ++ conf |= SM501PWM_I; ++ writel(conf, pwm->regs); ++ return 0; ++} ++EXPORT_SYMBOL(pwm_int_enable); ++ ++int pwm_int_disable(struct pwm_device *pwm) ++{ ++ unsigned long conf; ++ ++ if (!pwm || !pwm->regs || !pwm->handler) ++ return -EINVAL; ++ ++ conf = readl(pwm->regs); ++ conf &= ~SM501PWM_I; ++ writel(conf, pwm->regs); ++ return 0; ++} ++EXPORT_SYMBOL(pwm_int_disable); ++ ++int pwm_set_handler(struct pwm_device *pwm, ++ void (*handler)(struct pwm_device *pwm)) ++{ ++ if (!pwm || !handler) ++ return -EINVAL; ++ pwm->handler = handler; ++ return 0; ++} ++EXPORT_SYMBOL(pwm_set_handler); ++ ++static irqreturn_t sm501pwm_irq(int irq, void *dev_id) ++{ ++ unsigned long value; ++ struct sm501pwm_info *info = (struct sm501pwm_info *)dev_id; ++ struct pwm_device *pwm; ++ int i; ++ ++ value = sm501_modify_reg(info->dev->parent, SM501_IRQ_STATUS, 0, 0); ++ ++ /* Check is the interrupt is for us */ ++ if (value & (1<<22)) { ++ for (i = 0 ; i < PWM_COUNT ; i++) { ++ /* ++ * Find which pwm triggered the interrupt ++ * and ack ++ */ ++ value = readl(info->regs + i*4); ++ if (value & SM501PWM_IP) ++ writel(value | SM501PWM_IP, info->regs + i*4); ++ ++ pwm = &info->pwm[i]; ++ if (pwm->handler) ++ pwm->handler(pwm); ++ } ++ return IRQ_HANDLED; ++ } ++ ++ return IRQ_NONE; ++} ++ ++static void add_pwm(int id, struct sm501pwm_info *info) ++{ ++ struct pwm_device *pwm = &info->pwm[id]; ++ ++ pwm->use_count = 0; ++ pwm->pwm_id = id; ++ pwm->dev = info->dev; ++ pwm->regs = info->regs + id * 4; ++ ++ mutex_lock(&pwm_lock); ++ list_add_tail(&pwm->node, &pwm_list); ++ mutex_unlock(&pwm_lock); ++} ++ ++static void del_pwm(int id, struct sm501pwm_info *info) ++{ ++ struct pwm_device *pwm = &info->pwm[id]; ++ ++ pwm->use_count = 0; ++ pwm->pwm_id = -1; ++ mutex_lock(&pwm_lock); ++ list_del(&pwm->node); ++ mutex_unlock(&pwm_lock); ++} ++ ++/* Debug fs */ ++static int sm501pwm_show(struct seq_file *s, void *p) ++{ ++ struct pwm_device *pwm; ++ ++ mutex_lock(&pwm_lock); ++ list_for_each_entry(pwm, &pwm_list, node) { ++ if (pwm->use_count) { ++ seq_printf(s, "pwm-%d (%12s) %d %d %s\n", ++ pwm->pwm_id, pwm->label, ++ pwm->duty_ns, pwm->period_ns, ++ pwm->enabled ? "on" : "off"); ++ seq_printf(s, " %08x\n", readl(pwm->regs)); ++ } ++ } ++ mutex_unlock(&pwm_lock); ++ ++ return 0; ++} ++ ++static int sm501pwm_open(struct inode *inode, struct file *file) ++{ ++ return single_open(file, sm501pwm_show, inode->i_private); ++} ++ ++static const struct file_operations sm501pwm_fops = { ++ .open = sm501pwm_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .owner = THIS_MODULE, ++}; ++ ++static int __init sm501pwm_probe(struct platform_device *pdev) ++{ ++ struct sm501pwm_info *info; ++ struct device *dev = &pdev->dev; ++ struct resource *res; ++ int ret = 0; ++ int res_len; ++ int i; ++ ++ info = kzalloc(sizeof(struct sm501pwm_info), GFP_KERNEL); ++ if (!info) { ++ dev_err(dev, "Allocation failure\n"); ++ ret = -ENOMEM; ++ goto err; ++ } ++ info->dev = dev; ++ platform_set_drvdata(pdev, info); ++ ++ /* Get irq number */ ++ info->irq = platform_get_irq(pdev, 0); ++ if (!info->irq) { ++ dev_err(dev, "no irq found\n"); ++ ret = -ENODEV; ++ goto err_alloc; ++ } ++ ++ /* Get regs address */ ++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (res == NULL) { ++ dev_err(dev, "No memory resource found\n"); ++ ret = -ENODEV; ++ goto err_alloc; ++ } ++ info->res = res; ++ res_len = (res->end - res->start)+1; ++ ++ if (!request_mem_region(res->start, res_len, drv_name)) { ++ dev_err(dev, "Can't request iomem resource\n"); ++ ret = -EBUSY; ++ goto err_alloc; ++ } ++ ++ info->regs = ioremap(res->start, res_len); ++ if (!info->regs) { ++ dev_err(dev, "ioremap failed\n"); ++ ret = -ENOMEM; ++ goto err_mem; ++ } ++ ++ ret = request_irq(info->irq, sm501pwm_irq, IRQF_SHARED, drv_name, info); ++ if (ret != 0) { ++ dev_err(dev, "can't get irq\n"); ++ goto err_map; ++ } ++ ++ ++ sm501_unit_power(info->dev->parent, SM501_GATE_GPIO, 1); ++ ++ for (i = 0; i < 3; i++) ++ add_pwm(i, info); ++ ++ dev_info(dev, "SM501 PWM Found at %lx irq %d\n", ++ (unsigned long)info->res->start, info->irq); ++ ++ info->debugfs = debugfs_create_file("pwm", S_IFREG | S_IRUGO, ++ NULL, info, &sm501pwm_fops); ++ ++ ++ return 0; ++ ++err_map: ++ iounmap(info->regs); ++ ++err_mem: ++ release_mem_region(res->start, res_len); ++ ++err_alloc: ++ kfree(info); ++ platform_set_drvdata(pdev, NULL); ++err: ++ return ret; ++} ++ ++static int sm501pwm_remove(struct platform_device *pdev) ++{ ++ struct sm501pwm_info *info = platform_get_drvdata(pdev); ++ int i; ++ ++ if (info->debugfs) ++ debugfs_remove(info->debugfs); ++ ++ for (i = 0; i < 3; i++) { ++ pwm_disable(&info->pwm[i]); ++ del_pwm(i, info); ++ } ++ ++ sm501_unit_power(info->dev->parent, SM501_GATE_GPIO, 0); ++ sm501_modify_reg(info->dev->parent, SM501_IRQ_STATUS, 0, 1<<22); ++ ++ free_irq(info->irq, info); ++ iounmap(info->regs); ++ release_mem_region(info->res->start, ++ (info->res->end - info->res->start)+1); ++ kfree(info); ++ platform_set_drvdata(pdev, NULL); ++ ++ return 0; ++} ++ ++static struct platform_driver sm501pwm_driver = { ++ .probe = sm501pwm_probe, ++ .remove = sm501pwm_remove, ++ .driver = { ++ .name = drv_name, ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++static int __devinit sm501pwm_init(void) ++{ ++ return platform_driver_register(&sm501pwm_driver); ++} ++ ++static void __exit sm501pwm_cleanup(void) ++{ ++ platform_driver_unregister(&sm501pwm_driver); ++} ++ ++module_init(sm501pwm_init); ++module_exit(sm501pwm_cleanup); ++ ++MODULE_AUTHOR("Arnaud Patard "); ++MODULE_DESCRIPTION("SM501 PWM driver"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("platform:sm501-pwm"); +diff --git a/arch/mips/loongson/lemote-2f/Makefile b/arch/mips/loongson/lemote-2f/Makefile +index 4f9eaa3..f945bd7a 100644 +--- a/arch/mips/loongson/lemote-2f/Makefile ++++ b/arch/mips/loongson/lemote-2f/Makefile +@@ -2,7 +2,7 @@ + # Makefile for lemote loongson2f family machines + # + +-obj-y += clock.o machtype.o irq.o reset.o ec_kb3310b.o ++obj-y += clock.o machtype.o irq.o reset.o ec_kb3310b.o platform.o + + # + # Suspend Support +diff --git a/arch/mips/loongson/lemote-2f/platform.c b/arch/mips/loongson/lemote-2f/platform.c +new file mode 100644 +index 0000000..5316360 +--- /dev/null ++++ b/arch/mips/loongson/lemote-2f/platform.c +@@ -0,0 +1,48 @@ ++/* ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin, wuzhangjin@gmail.com ++ * ++ * 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. ++ */ ++ ++#include ++#include ++ ++#include ++ ++static struct platform_device yeeloong_pdev = { ++ .name = "yeeloong_laptop", ++ .id = -1, ++}; ++ ++static struct platform_device lynloong_pdev = { ++ .name = "lynloong_pc", ++ .id = -1, ++}; ++ ++static int __init lemote2f_platform_init(void) ++{ ++ struct platform_device *pdev = NULL; ++ ++ switch (mips_machtype) { ++ case MACH_LEMOTE_YL2F89: ++ pdev = &yeeloong_pdev; ++ break; ++ case MACH_LEMOTE_LL2F: ++ pdev = &lynloong_pdev; ++ break; ++ default: ++ break; ++ ++ } ++ ++ if (pdev != NULL) ++ return platform_device_register(pdev); ++ ++ return -ENODEV; ++} ++ ++arch_initcall(lemote2f_platform_init); +diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c +index 7b3c9ac..4ba73f2 100644 +--- a/arch/mips/math-emu/cp1emu.c ++++ b/arch/mips/math-emu/cp1emu.c +@@ -7,6 +7,9 @@ + * Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com + * Copyright (C) 2000 MIPS Technologies, Inc. + * ++ * Loongson instruction support ++ * Copyright (C) 2011 Mark H Weaver ++ * + * This program is free software; you can distribute it and/or modify it + * under the terms of the GNU General Public License (Version 2) as + * published by the Free Software Foundation. +@@ -58,6 +61,14 @@ + #endif + #define __mips 4 + ++#ifdef __loongson_fp ++#undef __loongson_fp ++#endif ++#if __mips >= 4 && __mips != 32 ++/* Include support for Loongson floating point instructions */ ++#define __loongson_fp 1 ++#endif ++ + /* Function which emulates a floating point instruction. */ + + static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *, +@@ -67,6 +78,10 @@ static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *, + static int fpux_emu(struct pt_regs *, + struct mips_fpu_struct *, mips_instruction, void *__user *); + #endif ++#ifdef __loongson_fp ++static int loongson_spec2_emu(struct pt_regs *, ++ struct mips_fpu_struct *, mips_instruction, void *__user *); ++#endif + + /* Further private data for which no space exists in mips_fpu_struct */ + +@@ -919,6 +934,14 @@ static inline int cop1_64bit(struct pt_regs *xcp) + #define DPFROMREG(dp, x) DIFROMREG((dp).bits, x) + #define DPTOREG(dp, x) DITOREG((dp).bits, x) + ++/* Support for Loongson paired single floating-point format */ ++#define PSIFROMREG(si1, si2, x) ({ u64 di; DIFROMREG(di, x); \ ++ (si1) = (u32)di; (si2) = (u32)(di >> 32); }) ++#define PSITOREG(si1, si2, x) DITOREG((si1) | ((u64)(si2) << 32), x) ++ ++#define PSPFROMREG(sp1, sp2, x) PSIFROMREG((sp1).bits, (sp2).bits, x) ++#define PSPTOREG(sp1, sp2, x) PSITOREG((sp1).bits, (sp2).bits, x) ++ + /* + * Emulate the single floating point instruction pointed at by EPC. + * Two instructions if the instruction is in a branch delay slot. +@@ -1314,6 +1337,15 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + #endif + ++#ifdef __loongson_fp ++ case spec2_op:{ ++ int sig = loongson_spec2_emu(xcp, ctx, ir, fault_addr); ++ if (sig) ++ return sig; ++ break; ++ } ++#endif ++ + default: + sigill: + return SIGILL; +@@ -1393,6 +1425,172 @@ DEF3OP(msub, dp, ieee754dp_mul, ieee754dp_sub, ); + DEF3OP(nmadd, dp, ieee754dp_mul, ieee754dp_add, ieee754dp_neg); + DEF3OP(nmsub, dp, ieee754dp_mul, ieee754dp_sub, ieee754dp_neg); + ++#ifdef __loongson_fp ++static int loongson_spec2_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, ++ mips_instruction ir, void *__user *fault_addr) ++{ ++ int rfmt; /* resulting format */ ++ unsigned rcsr = 0; /* resulting csr */ ++ union { ++ ieee754dp d; ++ struct { ++ ieee754sp s; ++ ieee754sp s2; ++ }; ++ } rv; /* resulting value */ ++ ++ /* XXX maybe add a counter for loongson spec2 fp instructions? */ ++ /* MIPS_FPU_EMU_INC_STATS(cp1xops); */ ++ ++ switch (rfmt = (MIPSInst_FFMT(ir) & 0xf)) { ++ case s_fmt:{ ++ ieee754sp(*handler) (ieee754sp, ieee754sp, ieee754sp); ++ ieee754sp fd, fs, ft; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ case loongson_madd_op: ++ handler = fpemu_sp_madd; ++ goto scoptop; ++ case loongson_msub_op: ++ handler = fpemu_sp_msub; ++ goto scoptop; ++ case loongson_nmadd_op: ++ handler = fpemu_sp_nmadd; ++ goto scoptop; ++ case loongson_nmsub_op: ++ handler = fpemu_sp_nmsub; ++ goto scoptop; ++ ++ scoptop: ++ SPFROMREG(fd, MIPSInst_FD(ir)); ++ SPFROMREG(fs, MIPSInst_FS(ir)); ++ SPFROMREG(ft, MIPSInst_FT(ir)); ++ rv.s = (*handler) (fd, fs, ft); ++ ++ copcsr: ++ if (ieee754_cxtest(IEEE754_INEXACT)) ++ rcsr |= FPU_CSR_INE_X | FPU_CSR_INE_S; ++ if (ieee754_cxtest(IEEE754_UNDERFLOW)) ++ rcsr |= FPU_CSR_UDF_X | FPU_CSR_UDF_S; ++ if (ieee754_cxtest(IEEE754_OVERFLOW)) ++ rcsr |= FPU_CSR_OVF_X | FPU_CSR_OVF_S; ++ if (ieee754_cxtest(IEEE754_INVALID_OPERATION)) ++ rcsr |= FPU_CSR_INV_X | FPU_CSR_INV_S; ++ ++ break; ++ ++ default: ++ return SIGILL; ++ } ++ break; ++ } ++ ++ case d_fmt:{ ++ ieee754dp(*handler) (ieee754dp, ieee754dp, ieee754dp); ++ ieee754dp fd, fs, ft; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ case loongson_madd_op: ++ handler = fpemu_dp_madd; ++ goto dcoptop; ++ case loongson_msub_op: ++ handler = fpemu_dp_msub; ++ goto dcoptop; ++ case loongson_nmadd_op: ++ handler = fpemu_dp_nmadd; ++ goto dcoptop; ++ case loongson_nmsub_op: ++ handler = fpemu_dp_nmsub; ++ goto dcoptop; ++ ++ dcoptop: ++ DPFROMREG(fd, MIPSInst_FD(ir)); ++ DPFROMREG(fs, MIPSInst_FS(ir)); ++ DPFROMREG(ft, MIPSInst_FT(ir)); ++ rv.d = (*handler) (fd, fs, ft); ++ goto copcsr; ++ ++ default: ++ return SIGILL; ++ } ++ break; ++ } ++ ++ case ps_fmt:{ ++ ieee754sp(*handler) (ieee754sp, ieee754sp, ieee754sp); ++ struct _ieee754_csr ieee754_csr_save; ++ ieee754sp fd1, fs1, ft1; ++ ieee754sp fd2, fs2, ft2; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ case loongson_madd_op: ++ handler = fpemu_sp_madd; ++ goto pscoptop; ++ case loongson_msub_op: ++ handler = fpemu_sp_msub; ++ goto pscoptop; ++ case loongson_nmadd_op: ++ handler = fpemu_sp_nmadd; ++ goto pscoptop; ++ case loongson_nmsub_op: ++ handler = fpemu_sp_nmsub; ++ goto pscoptop; ++ ++ pscoptop: ++ PSPFROMREG(fd1, fd2, MIPSInst_FD(ir)); ++ PSPFROMREG(fs1, fs2, MIPSInst_FS(ir)); ++ PSPFROMREG(ft1, ft2, MIPSInst_FT(ir)); ++ rv.s = (*handler) (fd1, fs1, ft1); ++ ieee754_csr_save = ieee754_csr; ++ rv.s2 = (*handler) (fd2, fs2, ft2); ++ ieee754_csr.cx |= ieee754_csr_save.cx; ++ ieee754_csr.sx |= ieee754_csr_save.sx; ++ goto copcsr; ++ ++ default: ++ return SIGILL; ++ } ++ break; ++ } ++ ++ default: ++ return SIGILL; ++ } ++ ++ /* ++ * Update the fpu CSR register for this operation. ++ * If an exception is required, generate a tidy SIGFPE exception, ++ * without updating the result register. ++ * Note: cause exception bits do not accumulate, they are rewritten ++ * for each op; only the flag/sticky bits accumulate. ++ */ ++ ctx->fcr31 = (ctx->fcr31 & ~FPU_CSR_ALL_X) | rcsr; ++ if ((ctx->fcr31 >> 5) & ctx->fcr31 & FPU_CSR_ALL_E) { ++ /*printk ("SIGFPE: fpu csr = %08x\n",ctx->fcr31); */ ++ return SIGFPE; ++ } ++ ++ /* ++ * Now we can safely write the result back to the register file. ++ */ ++ switch (rfmt) { ++ case d_fmt: ++ DPTOREG(rv.d, MIPSInst_FD(ir)); ++ break; ++ case s_fmt: ++ SPTOREG(rv.s, MIPSInst_FD(ir)); ++ break; ++ case ps_fmt: ++ PSPTOREG(rv.s, rv.s2, MIPSInst_FD(ir)); ++ break; ++ default: ++ return SIGILL; ++ } ++ ++ return 0; ++} ++#endif ++ + static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + mips_instruction ir, void *__user *fault_addr) + { +@@ -1486,7 +1684,7 @@ static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + + default: +- return SIGILL; ++ goto SIGILL_unless_prefx_op; + } + break; + } +@@ -1556,7 +1754,7 @@ static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + goto copcsr; + + default: +- return SIGILL; ++ goto SIGILL_unless_prefx_op; + } + break; + } +@@ -1569,6 +1767,11 @@ static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + + default: ++ SIGILL_unless_prefx_op: ++ if (MIPSInst_FUNC(ir) == prefx_op) { ++ /* ignore prefx operation */ ++ break; ++ } + return SIGILL; + } + +@@ -1589,7 +1792,12 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + unsigned cond; + union { + ieee754dp d; +- ieee754sp s; ++ struct { ++ ieee754sp s; ++#ifdef __loongson_fp ++ ieee754sp s2; /* for Loongson paired singles */ ++#endif ++ }; + int w; + #ifdef __mips64 + s64 l; +@@ -1661,7 +1869,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + case fmov_op: + /* an easy one */ + SPFROMREG(rv.s, MIPSInst_FS(ir)); +- goto copcsr; ++ break; + + /* binary op on handler */ + scopbop: +@@ -1848,7 +2056,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + case fmov_op: + /* an easy one */ + DPFROMREG(rv.d, MIPSInst_FS(ir)); +- goto copcsr; ++ break; + + /* binary op on handler */ + dcopbop:{ +@@ -1959,6 +2167,83 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + } + ++#ifdef __loongson_fp ++ case ps_fmt:{ /* 6 */ ++ /* Support for Loongson paired single fp instructions */ ++ union { ++ ieee754sp(*b) (ieee754sp, ieee754sp); ++ ieee754sp(*u) (ieee754sp); ++ } handler; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ /* binary ops */ ++ case fadd_op: ++ handler.b = ieee754sp_add; ++ goto pscopbop; ++ case fsub_op: ++ handler.b = ieee754sp_sub; ++ goto pscopbop; ++ case fmul_op: ++ handler.b = ieee754sp_mul; ++ goto pscopbop; ++ ++ /* unary ops */ ++ case fabs_op: ++ handler.u = ieee754sp_abs; ++ goto pscopuop; ++ case fneg_op: ++ handler.u = ieee754sp_neg; ++ goto pscopuop; ++ case fmov_op: ++ /* an easy one */ ++ PSPFROMREG(rv.s, rv.s2, MIPSInst_FS(ir)); ++ break; ++ ++ pscopbop: /* paired binary op handler */ ++ { ++ struct _ieee754_csr ieee754_csr_save; ++ ieee754sp fs1, ft1; ++ ieee754sp fs2, ft2; ++ ++ PSPFROMREG(fs1, fs2, MIPSInst_FS(ir)); ++ PSPFROMREG(ft1, ft2, MIPSInst_FT(ir)); ++ rv.s = (*handler.b) (fs1, ft1); ++ ieee754_csr_save = ieee754_csr; ++ rv.s2 = (*handler.b) (fs2, ft2); ++ ieee754_csr.cx |= ieee754_csr_save.cx; ++ ieee754_csr.sx |= ieee754_csr_save.sx; ++ goto copcsr; ++ } ++ pscopuop: /* paired unary op handler */ ++ { ++ struct _ieee754_csr ieee754_csr_save; ++ ieee754sp fs1; ++ ieee754sp fs2; ++ ++ PSPFROMREG(fs1, fs2, MIPSInst_FS(ir)); ++ rv.s = (*handler.u) (fs1); ++ ieee754_csr_save = ieee754_csr; ++ rv.s2 = (*handler.u) (fs2); ++ ieee754_csr.cx |= ieee754_csr_save.cx; ++ ieee754_csr.sx |= ieee754_csr_save.sx; ++ goto copcsr; ++ } ++ break; ++ ++ default: ++ if (MIPSInst_FUNC(ir) >= fcmp_op) { ++ /* Loongson fp hardware handles all ++ cases of fp compare insns, so we ++ shouldn't have to */ ++ printk ("Loongson paired-single fp compare" ++ " unimplemented in cp1emu.c\n"); ++ } ++ return SIGILL; ++ } ++ break; ++ } ++#endif ++ + case w_fmt:{ + ieee754sp fs; + +@@ -2051,6 +2336,11 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + DITOREG(rv.l, MIPSInst_FD(ir)); + break; + #endif ++#ifdef __loongson_fp ++ case ps_fmt: ++ PSPTOREG(rv.s, rv.s2, MIPSInst_FD(ir)); ++ break; ++#endif + default: + return SIGILL; + } +diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile +index d61138a..9083d6f 100644 +--- a/arch/mips/pci/Makefile ++++ b/arch/mips/pci/Makefile +@@ -29,6 +29,7 @@ obj-$(CONFIG_LASAT) += pci-lasat.o + obj-$(CONFIG_MIPS_COBALT) += fixup-cobalt.o + obj-$(CONFIG_LEMOTE_FULOONG2E) += fixup-fuloong2e.o ops-loongson2.o + obj-$(CONFIG_LEMOTE_MACH2F) += fixup-lemote2f.o ops-loongson2.o ++obj-$(CONFIG_DEXXON_GDIUM) += fixup-gdium.o ops-loongson2.o + obj-$(CONFIG_LEMOTE_MACH3A) += fixup-loongson3.o ops-loongson3.o + obj-$(CONFIG_MIPS_MALTA) += fixup-malta.o pci-malta.o + obj-$(CONFIG_PMC_MSP7120_GW) += fixup-pmcmsp.o ops-pmcmsp.o +diff --git a/arch/mips/pci/fixup-gdium.c b/arch/mips/pci/fixup-gdium.c +new file mode 100644 +index 0000000..b296220 +--- /dev/null ++++ b/arch/mips/pci/fixup-gdium.c +@@ -0,0 +1,90 @@ ++/* ++ * Copyright (C) 2010 yajin ++ * ++ * 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. ++ */ ++ ++#include ++#include ++ ++#include ++/* ++ * http://www.pcidatabase.com ++ * GDIUM has different PCI mapping ++ * slot 13 (0x1814/0x0301) -> RaLink rt2561 Wireless-G PCI ++ * slog 14 (0x126f/0x0501) -> sm501 ++ * slot 15 (0x1033/0x0035) -> NEC Dual OHCI controllers ++ * plus Single EHCI controller ++ * slot 16 (0x10ec/0x8139) -> Realtek 8139c ++ * slot 17 (0x1033/0x00e0) -> NEC USB 2.0 Host Controller ++ */ ++ ++#undef INT_IRQA ++#undef INT_IRQB ++#undef INT_IRQC ++#undef INT_IRQD ++#define INT_IRQA 36 ++#define INT_IRQB 37 ++#define INT_IRQC 38 ++#define INT_IRQD 39 ++ ++int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) ++{ ++ int irq = 0; ++ ++ switch (slot) { ++ case 13: ++ irq = INT_IRQC + ((pin - 1) & 3); ++ break; ++ case 14: ++ irq = INT_IRQA; ++ break; ++ case 15: ++#if CONFIG_GDIUM_VERSION > 2 ++ irq = INT_IRQB; ++#else ++ irq = INT_IRQA + ((pin - 1) & 3); ++#endif ++ break; ++ case 16: ++ irq = INT_IRQD; ++ break; ++#if CONFIG_GDIUM_VERSION > 2 ++ case 17: ++ irq = INT_IRQC; ++ break; ++#endif ++ default: ++ pr_info(" strange pci slot number %d on gdium.\n", slot); ++ break; ++ } ++ return irq; ++} ++ ++/* Do platform specific device initialization at pci_enable_device() time */ ++int pcibios_plat_dev_init(struct pci_dev *dev) ++{ ++ return 0; ++} ++ ++/* Fixups for the USB host controllers */ ++static void __init gdium_usb_host_fixup(struct pci_dev *dev) ++{ ++ unsigned int val; ++ pci_read_config_dword(dev, 0xe0, &val); ++#if CONFIG_GDIUM_VERSION > 2 ++ pci_write_config_dword(dev, 0xe0, (val & ~3) | 0x3); ++#else ++ pci_write_config_dword(dev, 0xe0, (val & ~7) | 0x5); ++ pci_write_config_dword(dev, 0xe4, 1<<5); ++#endif ++} ++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_USB, ++ gdium_usb_host_fixup); ++#if CONFIG_GDIUM_VERSION > 2 ++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_CT_65550, ++ gdium_usb_host_fixup); ++#endif +diff --git a/arch/mips/power/hibernate.S b/arch/mips/power/hibernate.S +index 32a7c82..7e0277a 100644 +--- a/arch/mips/power/hibernate.S ++++ b/arch/mips/power/hibernate.S +@@ -43,7 +43,6 @@ LEAF(swsusp_arch_resume) + bne t1, t3, 1b + PTR_L t0, PBE_NEXT(t0) + bnez t0, 0b +- jal local_flush_tlb_all /* Avoid TLB mismatch after kernel resume */ + PTR_LA t0, saved_regs + PTR_L ra, PT_R31(t0) + PTR_L sp, PT_R29(t0) +diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig +index 7af9d0b..925d8bb 100644 +--- a/drivers/hid/Kconfig ++++ b/drivers/hid/Kconfig +@@ -797,6 +797,13 @@ config HID_ZYDACRON + ---help--- + Support for Zydacron remote control. + ++config HID_GDIUM ++ bool "Gdium Fn keys support" if EMBEDDED ++ depends on USB_HID && DEXXON_GDIUM ++ default !EMBEDDED ++ ---help--- ++ Support for Functions keys available on Gdiums. ++ + config HID_SENSOR_HUB + tristate "HID Sensors framework support" + depends on HID +diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile +index fc712dd..666bd76 100644 +--- a/drivers/hid/Makefile ++++ b/drivers/hid/Makefile +@@ -116,6 +116,7 @@ obj-$(CONFIG_HID_ZEROPLUS) += hid-zpff.o + obj-$(CONFIG_HID_ZYDACRON) += hid-zydacron.o + obj-$(CONFIG_HID_WACOM) += hid-wacom.o + obj-$(CONFIG_HID_WALTOP) += hid-waltop.o ++obj-$(CONFIG_HID_GDIUM) += hid-gdium.o + obj-$(CONFIG_HID_WIIMOTE) += hid-wiimote.o + obj-$(CONFIG_HID_SENSOR_HUB) += hid-sensor-hub.o + +diff --git a/drivers/hid/hid-gdium.c b/drivers/hid/hid-gdium.c +new file mode 100644 +index 0000000..67cc095 +--- /dev/null ++++ b/drivers/hid/hid-gdium.c +@@ -0,0 +1,210 @@ ++/* ++ * hid-gdium -- Gdium laptop function keys ++ * ++ * Arnaud Patard ++ * ++ * Based on hid-apple.c ++ * ++ * 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. ++ */ ++ ++ ++#include ++#include ++#include ++#include ++ ++#include "hid-ids.h" ++ ++#define GDIUM_FN_ON 1 ++ ++static int fnmode = GDIUM_FN_ON; ++module_param(fnmode, int, 0644); ++MODULE_PARM_DESC(fnmode, "Mode of fn key on Gdium (0 = disabled, 1 = Enabled)"); ++ ++struct gdium_data { ++ unsigned int fn_on; ++}; ++ ++ ++struct gdium_key_translation { ++ u16 from; ++ u16 to; ++}; ++ ++static struct gdium_key_translation gdium_fn_keys[] = { ++ { KEY_F1, KEY_CAMERA }, ++ { KEY_F2, KEY_CONNECT }, ++ { KEY_F3, KEY_MUTE }, ++ { KEY_F4, KEY_VOLUMEUP}, ++ { KEY_F5, KEY_VOLUMEDOWN }, ++ { KEY_F6, KEY_SWITCHVIDEOMODE }, ++ { KEY_F7, KEY_F19 }, /* F7+12. Have to use existant keycodes */ ++ { KEY_F8, KEY_BRIGHTNESSUP }, ++ { KEY_F9, KEY_BRIGHTNESSDOWN }, ++ { KEY_F10, KEY_SLEEP }, ++ { KEY_F11, KEY_PROG1 }, ++ { KEY_F12, KEY_PROG2 }, ++ { KEY_UP, KEY_PAGEUP }, ++ { KEY_DOWN, KEY_PAGEDOWN }, ++ { KEY_INSERT, KEY_NUMLOCK }, ++ { KEY_DELETE, KEY_SCROLLLOCK }, ++ { KEY_T, KEY_STOPCD }, ++ { KEY_F, KEY_PREVIOUSSONG }, ++ { KEY_H, KEY_NEXTSONG }, ++ { KEY_G, KEY_PLAYPAUSE }, ++ { } ++}; ++ ++static struct gdium_key_translation *gdium_find_translation( ++ struct gdium_key_translation *table, u16 from) ++{ ++ struct gdium_key_translation *trans; ++ ++ /* Look for the translation */ ++ for (trans = table; trans->from; trans++) ++ if (trans->from == from) ++ return trans; ++ return NULL; ++} ++ ++static int hidinput_gdium_event(struct hid_device *hid, struct input_dev *input, ++ struct hid_usage *usage, __s32 value) ++{ ++ struct gdium_data *data = hid_get_drvdata(hid); ++ struct gdium_key_translation *trans; ++ int do_translate; ++ ++ if (usage->type != EV_KEY) ++ return 0; ++ ++ if ((usage->code == KEY_FN)) { ++ data->fn_on = !!value; ++ input_event(input, usage->type, usage->code, value); ++ return 1; ++ } ++ ++ if (fnmode) { ++ trans = gdium_find_translation(gdium_fn_keys, usage->code); ++ if (trans) { ++ do_translate = data->fn_on; ++ if (do_translate) { ++ input_event(input, usage->type, trans->to, value); ++ return 1; ++ } ++ } ++ } ++ ++ return 0; ++} ++ ++static int gdium_input_event(struct hid_device *hdev, struct hid_field *field, ++ struct hid_usage *usage, __s32 value) ++{ ++ if (!(hdev->claimed & HID_CLAIMED_INPUT) || !field->hidinput || !usage->type) ++ return 0; ++ ++ if (hidinput_gdium_event(hdev, field->hidinput->input, usage, value)) ++ return 1; ++ ++ return 0; ++} ++ ++ ++static void gdium_input_setup(struct input_dev *input) ++{ ++ struct gdium_key_translation *trans; ++ ++ set_bit(KEY_NUMLOCK, input->keybit); ++ ++ /* Enable all needed keys */ ++ for (trans = gdium_fn_keys; trans->from; trans++) ++ set_bit(trans->to, input->keybit); ++} ++ ++static int gdium_input_mapping(struct hid_device *hdev, struct hid_input *hi, ++ struct hid_field *field, struct hid_usage *usage, ++ unsigned long **bit, int *max) ++{ ++ if (((usage->hid & HID_USAGE_PAGE) == HID_UP_KEYBOARD) ++ && ((usage->hid & HID_USAGE) == 0x82)) { ++ hid_map_usage_clear(hi, usage, bit, max, EV_KEY, KEY_FN); ++ gdium_input_setup(hi->input); ++ return 1; ++ } ++ return 0; ++} ++ ++static int gdium_input_probe(struct hid_device *hdev, const struct hid_device_id *id) ++{ ++ struct gdium_data *data; ++ int ret; ++ ++ data = kzalloc(sizeof(*data), GFP_KERNEL); ++ if (!data) { ++ dev_err(&hdev->dev, "can't alloc gdium keyboard data\n"); ++ return -ENOMEM; ++ } ++ ++ hid_set_drvdata(hdev, data); ++ ++ ret = hid_parse(hdev); ++ if (ret) { ++ dev_err(&hdev->dev, "parse failed\n"); ++ goto err_free; ++ } ++ ++ ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); ++ if (ret) { ++ dev_err(&hdev->dev, "hw start failed\n"); ++ goto err_free; ++ } ++ ++ return 0; ++err_free: ++ kfree(data); ++ return ret; ++} ++static void gdium_input_remove(struct hid_device *hdev) ++{ ++ hid_hw_stop(hdev); ++ kfree(hid_get_drvdata(hdev)); ++} ++ ++static const struct hid_device_id gdium_input_devices[] = { ++ { HID_USB_DEVICE(USB_VENDOR_ID_GDIUM, USB_DEVICE_ID_GDIUM) }, ++ {} ++}; ++MODULE_DEVICE_TABLE(hid, gdium_input_devices); ++ ++static struct hid_driver gdium_input_driver = { ++ .name = "gdium-fnkeys", ++ .id_table = gdium_input_devices, ++ .probe = gdium_input_probe, ++ .remove = gdium_input_remove, ++ .event = gdium_input_event, ++ .input_mapping = gdium_input_mapping, ++}; ++ ++static int gdium_input_init(void) ++{ ++ int ret; ++ ++ ret = hid_register_driver(&gdium_input_driver); ++ if (ret) ++ pr_err("can't register gdium keyboard driver\n"); ++ ++ return ret; ++} ++static void gdium_input_exit(void) ++{ ++ hid_unregister_driver(&gdium_input_driver); ++} ++ ++module_init(gdium_input_init); ++module_exit(gdium_input_exit); ++MODULE_LICENSE("GPL"); ++ +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h +index 34bb220..4aae21f 100644 +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -968,6 +968,9 @@ + #define USB_VENDOR_ID_ZYTRONIC 0x14c8 + #define USB_DEVICE_ID_ZYTRONIC_ZXY100 0x0005 + ++#define USB_VENDOR_ID_GDIUM 0x04B4 ++#define USB_DEVICE_ID_GDIUM 0xe001 ++ + #define USB_VENDOR_ID_PRIMAX 0x0461 + #define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05 + +diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c +index 376f2dc..b576801 100644 +--- a/drivers/ide/ide-iops.c ++++ b/drivers/ide/ide-iops.c +@@ -27,6 +27,10 @@ + #include + #include + ++#ifdef CONFIG_LEMOTE_MACH2F ++#include ++#endif ++ + void SELECT_MASK(ide_drive_t *drive, int mask) + { + const struct ide_port_ops *port_ops = drive->hwif->port_ops; +@@ -300,6 +304,11 @@ void ide_check_nien_quirk_list(ide_drive_t *drive) + { + const char **list, *m = (char *)&drive->id[ATA_ID_PROD]; + ++#ifdef CONFIG_LEMOTE_MACH2F ++ if (mips_machtype != MACH_LEMOTE_YL2F89) ++ return; ++#endif ++ + for (list = nien_quirk_list; *list != NULL; list++) + if (strstr(m, *list) != NULL) { + drive->dev_flags |= IDE_DFLAG_NIEN_QUIRK; +diff --git a/drivers/mfd/sm501.c b/drivers/mfd/sm501.c +index e7dc441..124e8c3 100644 +--- a/drivers/mfd/sm501.c ++++ b/drivers/mfd/sm501.c +@@ -58,7 +58,7 @@ struct sm501_gpio { + struct sm501_gpio { + /* no gpio support, empty definition for sm501_devdata. */ + }; +-#endif ++#endif /* CONFIG_MFD_SM501_GPIO */ + + struct sm501_devdata { + spinlock_t reg_lock; +@@ -1135,6 +1135,22 @@ static inline int sm501_gpio_isregistered(struct sm501_devdata *sm) + { + return sm->gpio.registered; + } ++ ++void sm501_configure_gpio(struct device *dev, unsigned int gpio, unsigned ++ char mode) ++{ ++ unsigned long set, reg, offset = gpio; ++ ++ if (offset >= 32) { ++ reg = SM501_GPIO63_32_CONTROL; ++ offset = gpio - 32; ++ } else ++ reg = SM501_GPIO31_0_CONTROL; ++ ++ set = mode ? 1 << offset : 0; ++ ++ sm501_modify_reg(dev, reg, set, 0); ++} + #else + static inline int sm501_register_gpio(struct sm501_devdata *sm) + { +@@ -1154,7 +1170,13 @@ static inline int sm501_gpio_isregistered(struct sm501_devdata *sm) + { + return 0; + } +-#endif ++ ++void sm501_configure_gpio(struct device *dev, unsigned int gpio, ++ unsigned char mode) ++{ ++} ++#endif /* CONFIG_MFD_SM501_GPIO */ ++EXPORT_SYMBOL_GPL(sm501_configure_gpio); + + static int sm501_register_gpio_i2c_instance(struct sm501_devdata *sm, + struct sm501_platdata_gpio_i2c *iic) +@@ -1209,6 +1231,20 @@ static int sm501_register_gpio_i2c(struct sm501_devdata *sm, + return 0; + } + ++/* register sm501 PWM device */ ++static int sm501_register_pwm(struct sm501_devdata *sm) ++{ ++ struct platform_device *pdev; ++ ++ pdev = sm501_create_subdev(sm, "sm501-pwm", 2, 0); ++ if (!pdev) ++ return -ENOMEM; ++ sm501_create_subio(sm, &pdev->resource[0], 0x10020, 0xC); ++ sm501_create_irq(sm, &pdev->resource[1]); ++ ++ return sm501_register_device(sm, pdev); ++} ++ + /* sm501_dbg_regs + * + * Debug attribute to attach to parent device to show core registers +@@ -1367,6 +1403,8 @@ static int sm501_init_dev(struct sm501_devdata *sm) + sm501_register_uart(sm, idata->devices); + if (idata->devices & SM501_USE_GPIO) + sm501_register_gpio(sm); ++ if (idata->devices & SM501_USE_PWM) ++ sm501_register_pwm(sm); + } + + if (pdata && pdata->gpio_i2c != NULL && pdata->gpio_i2c_nr > 0) { +@@ -1553,10 +1591,15 @@ static struct sm501_initdata sm501_pci_initdata = { + .devices = SM501_USE_ALL, + + /* Errata AB-3 says that 72MHz is the fastest available +- * for 33MHZ PCI with proper bus-mastering operation */ +- ++ * for 33MHZ PCI with proper bus-mastering operation ++ * For gdium, it works under 84&112M clock freq.*/ ++#ifdef CONFIG_DEXXON_GDIUM ++ .mclk = 84 * MHZ, ++ .m1xclk = 112 * MHZ, ++#else + .mclk = 72 * MHZ, + .m1xclk = 144 * MHZ, ++#endif + }; + + static struct sm501_platdata_fbsub sm501_pdata_fbsub = { +diff --git a/drivers/net/titan_ge.c b/drivers/net/titan_ge.c +new file mode 100644 +index 0000000..dc137bf8 +--- /dev/null ++++ b/drivers/net/titan_ge.c +@@ -0,0 +1,2069 @@ ++/* ++ * drivers/net/titan_ge.c - Driver for Titan ethernet ports ++ * ++ * Copyright (C) 2003 PMC-Sierra Inc. ++ * Author : Manish Lachwani (lachwani@pmc-sierra.com) ++ * ++ * 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. ++ */ ++ ++/* ++ * The MAC unit of the Titan consists of the following: ++ * ++ * -> XDMA Engine to move data to from the memory to the MAC packet FIFO ++ * -> FIFO is where the incoming and outgoing data is placed ++ * -> TRTG is the unit that pulls the data from the FIFO for Tx and pushes ++ * the data into the FIFO for Rx ++ * -> TMAC is the outgoing MAC interface and RMAC is the incoming. ++ * -> AFX is the address filtering block ++ * -> GMII block to communicate with the PHY ++ * ++ * Rx will look like the following: ++ * GMII --> RMAC --> AFX --> TRTG --> Rx FIFO --> XDMA --> CPU memory ++ * ++ * Tx will look like the following: ++ * CPU memory --> XDMA --> Tx FIFO --> TRTG --> TMAC --> GMII ++ * ++ * The Titan driver has support for the following performance features: ++ * -> Rx side checksumming ++ * -> Jumbo Frames ++ * -> Interrupt Coalscing ++ * -> Rx NAPI ++ * -> SKB Recycling ++ * -> Transmit/Receive descriptors in SRAM ++ * -> Fast routing for IP forwarding ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* For MII specifc registers, titan_mdio.h should be included */ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "titan_ge.h" ++#include "titan_mdio.h" ++ ++/* Static Function Declarations */ ++static int titan_ge_eth_open(struct net_device *); ++static void titan_ge_eth_stop(struct net_device *); ++static struct net_device_stats *titan_ge_get_stats(struct net_device *); ++static int titan_ge_init_rx_desc_ring(titan_ge_port_info *, int, int, ++ unsigned long, unsigned long, ++ unsigned long); ++static int titan_ge_init_tx_desc_ring(titan_ge_port_info *, int, ++ unsigned long, unsigned long); ++ ++static int titan_ge_open(struct net_device *); ++static int titan_ge_start_xmit(struct sk_buff *, struct net_device *); ++static int titan_ge_stop(struct net_device *); ++ ++static unsigned long titan_ge_tx_coal(unsigned long, int); ++ ++static void titan_ge_port_reset(unsigned int); ++static int titan_ge_free_tx_queue(titan_ge_port_info *); ++static int titan_ge_rx_task(struct net_device *, titan_ge_port_info *); ++static int titan_ge_port_start(struct net_device *, titan_ge_port_info *); ++ ++static int titan_ge_return_tx_desc(titan_ge_port_info *, int); ++ ++/* ++ * Some configuration for the FIFO and the XDMA channel needs ++ * to be done only once for all the ports. This flag controls ++ * that ++ */ ++static unsigned long config_done; ++ ++/* ++ * One time out of memory flag ++ */ ++static unsigned int oom_flag; ++ ++static int titan_ge_poll(struct net_device *netdev, int *budget); ++ ++static int titan_ge_receive_queue(struct net_device *, unsigned int); ++ ++static struct platform_device *titan_ge_device[3]; ++ ++/* MAC Address */ ++extern unsigned char titan_ge_mac_addr_base[6]; ++ ++unsigned long titan_ge_base; ++static unsigned long titan_ge_sram; ++ ++static char titan_string[] = "titan"; ++ ++/* ++ * The Titan GE has two alignment requirements: ++ * -> skb->data to be cacheline aligned (32 byte) ++ * -> IP header alignment to 16 bytes ++ * ++ * The latter is not implemented. So, that results in an extra copy on ++ * the Rx. This is a big performance hog. For the former case, the ++ * dev_alloc_skb() has been replaced with titan_ge_alloc_skb(). The size ++ * requested is calculated: ++ * ++ * Ethernet Frame Size : 1518 ++ * Ethernet Header : 14 ++ * Future Titan change for IP header alignment : 2 ++ * ++ * Hence, we allocate (1518 + 14 + 2+ 64) = 1580 bytes. For IP header ++ * alignment, we use skb_reserve(). ++ */ ++ ++#define ALIGNED_RX_SKB_ADDR(addr) \ ++ ((((unsigned long)(addr) + (64UL - 1UL)) \ ++ & ~(64UL - 1UL)) - (unsigned long)(addr)) ++ ++#define titan_ge_alloc_skb(__length, __gfp_flags) \ ++({ struct sk_buff *__skb; \ ++ __skb = alloc_skb((__length) + 64, (__gfp_flags)); \ ++ if(__skb) { \ ++ int __offset = (int) ALIGNED_RX_SKB_ADDR(__skb->data); \ ++ if(__offset) \ ++ skb_reserve(__skb, __offset); \ ++ } \ ++ __skb; \ ++}) ++ ++/* ++ * Configure the GMII block of the Titan based on what the PHY tells us ++ */ ++static void titan_ge_gmii_config(int port_num) ++{ ++ unsigned int reg_data = 0, phy_reg; ++ int err; ++ ++ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg); ++ ++ if (err == TITAN_GE_MDIO_ERROR) { ++ printk(KERN_ERR ++ "Could not read PHY control register 0x11 \n"); ++ printk(KERN_ERR ++ "Setting speed to 1000 Mbps and Duplex to Full \n"); ++ ++ return; ++ } ++ ++ err = titan_ge_mdio_write(port_num, TITAN_GE_MDIO_PHY_IE, 0); ++ ++ if (phy_reg & 0x8000) { ++ if (phy_reg & 0x2000) { ++ /* Full Duplex and 1000 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x201); ++ } else { ++ /* Half Duplex and 1000 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x2201); ++ } ++ } ++ if (phy_reg & 0x4000) { ++ if (phy_reg & 0x2000) { ++ /* Full Duplex and 100 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x100); ++ } else { ++ /* Half Duplex and 100 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x2100); ++ } ++ } ++ reg_data = TITAN_GE_READ(TITAN_GE_GMII_CONFIG_GENERAL + ++ (port_num << 12)); ++ reg_data |= 0x3; ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_GENERAL + ++ (port_num << 12)), reg_data); ++} ++ ++/* ++ * Enable the TMAC if it is not ++ */ ++static void titan_ge_enable_tx(unsigned int port_num) ++{ ++ unsigned long reg_data; ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)); ++ if (!(reg_data & 0x8000)) { ++ printk("TMAC disabled for port %d!! \n", port_num); ++ ++ reg_data |= 0x0001; /* Enable TMAC */ ++ reg_data |= 0x4000; /* CRC Check Enable */ ++ reg_data |= 0x2000; /* Padding enable */ ++ reg_data |= 0x0800; /* CRC Add enable */ ++ reg_data |= 0x0080; /* PAUSE frame */ ++ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ } ++} ++ ++/* ++ * Tx Timeout function ++ */ ++static void titan_ge_tx_timeout(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ printk(KERN_INFO "%s: TX timeout ", netdev->name); ++ printk(KERN_INFO "Resetting card \n"); ++ ++ /* Do the reset outside of interrupt context */ ++ schedule_work(&titan_ge_eth->tx_timeout_task); ++} ++ ++/* ++ * Update the AFX tables for UC and MC for slice 0 only ++ */ ++static void titan_ge_update_afx(titan_ge_port_info * titan_ge_eth) ++{ ++ int port = titan_ge_eth->port_num; ++ unsigned int i; ++ volatile unsigned long reg_data = 0; ++ u8 p_addr[6]; ++ ++ memcpy(p_addr, titan_ge_eth->port_mac_addr, 6); ++ ++ /* Set the MAC address here for TMAC and RMAC */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((0x112c | (port << 12)), 0x1); ++ /* Configure the eight address filters */ ++ for (i = 0; i < 8; i++) { ++ /* Select each of the eight filters */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 + ++ (port << 12)), i); ++ ++ /* Configure the match */ ++ reg_data = 0x9; /* Forward Enable Bit */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 + ++ (port << 12)), reg_data); ++ ++ /* Finally, AFX Exact Match Address Registers */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_HIGH + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ ++ /* VLAN id set to 0 */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_VID + ++ (port << 12)), 0); ++ } ++} ++ ++/* ++ * Actual Routine to reset the adapter when the timeout occurred ++ */ ++static void titan_ge_tx_timeout_task(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ int port = titan_ge_eth->port_num; ++ ++ printk("Titan GE: Transmit timed out. Resetting ... \n"); ++ ++ /* Dump debug info */ ++ printk(KERN_ERR "TRTG cause : %x \n", ++ TITAN_GE_READ(0x100c + (port << 12))); ++ ++ /* Fix this for the other ports */ ++ printk(KERN_ERR "FIFO cause : %x \n", TITAN_GE_READ(0x482c)); ++ printk(KERN_ERR "IE cause : %x \n", TITAN_GE_READ(0x0040)); ++ printk(KERN_ERR "XDMA GDI ERROR : %x \n", ++ TITAN_GE_READ(0x5008 + (port << 8))); ++ printk(KERN_ERR "CHANNEL ERROR: %x \n", ++ TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT ++ + (port << 8))); ++ ++ netif_device_detach(netdev); ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ titan_ge_port_start(netdev, titan_ge_eth); ++ netif_device_attach(netdev); ++} ++ ++/* ++ * Change the MTU of the Ethernet Device ++ */ ++static int titan_ge_change_mtu(struct net_device *netdev, int new_mtu) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned long flags; ++ ++ if ((new_mtu > 9500) || (new_mtu < 64)) ++ return -EINVAL; ++ ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ netdev->mtu = new_mtu; ++ ++ /* Now we have to reopen the interface so that SKBs with the new ++ * size will be allocated */ ++ ++ if (netif_running(netdev)) { ++ titan_ge_eth_stop(netdev); ++ ++ if (titan_ge_eth_open(netdev) != TITAN_OK) { ++ printk(KERN_ERR ++ "%s: Fatal error on opening device\n", ++ netdev->name); ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ return -1; ++ } ++ } ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ return 0; ++} ++ ++/* ++ * Titan Gbe Interrupt Handler. All the three ports send interrupt to one line ++ * only. Once an interrupt is triggered, figure out the port and then check ++ * the channel. ++ */ ++static irqreturn_t titan_ge_int_handler(int irq, void *dev_id) ++{ ++ struct net_device *netdev = (struct net_device *) dev_id; ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int reg_data; ++ unsigned int eth_int_cause_error = 0, is; ++ unsigned long eth_int_cause1; ++ int err = 0; ++#ifdef CONFIG_SMP ++ unsigned long eth_int_cause2; ++#endif ++ ++ /* Ack the CPU interrupt */ ++ switch (port_num) { ++ case 0: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS1); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR1, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS1); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR1, is); ++#endif ++ break; ++ ++ case 1: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS0); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR0, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS0); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR0, is); ++#endif ++ break; ++ ++ case 2: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS4); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR4, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS4); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR4, is); ++#endif ++ } ++ ++ eth_int_cause1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A); ++#ifdef CONFIG_SMP ++ eth_int_cause2 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_B); ++#endif ++ ++ /* Spurious interrupt */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 == 0) && (eth_int_cause2 == 0)) { ++#else ++ if (eth_int_cause1 == 0) { ++#endif ++ eth_int_cause_error = TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT + ++ (port_num << 8)); ++ ++ if (eth_int_cause_error == 0) ++ return IRQ_NONE; ++ } ++ ++ /* Handle Tx first. No need to ack interrupts */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 & 0x20202) || ++ (eth_int_cause2 & 0x20202) ) ++#else ++ if (eth_int_cause1 & 0x20202) ++#endif ++ titan_ge_free_tx_queue(titan_ge_eth); ++ ++ /* Handle the Rx next */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 & 0x10101) || ++ (eth_int_cause2 & 0x10101)) { ++#else ++ if (eth_int_cause1 & 0x10101) { ++#endif ++ if (netif_rx_schedule_prep(netdev)) { ++ unsigned int ack; ++ ++ ack = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ /* Disable Tx and Rx both */ ++ if (port_num == 0) ++ ack &= ~(0x3); ++ if (port_num == 1) ++ ack &= ~(0x300); ++ ++ if (port_num == 2) ++ ack &= ~(0x30000); ++ ++ /* Interrupts have been disabled */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, ack); ++ ++ __netif_rx_schedule(netdev); ++ } ++ } ++ ++ /* Handle error interrupts */ ++ if (eth_int_cause_error && (eth_int_cause_error != 0x2)) { ++ printk(KERN_ERR ++ "XDMA Channel Error : %x on port %d\n", ++ eth_int_cause_error, port_num); ++ ++ printk(KERN_ERR ++ "XDMA GDI Hardware error : %x on port %d\n", ++ TITAN_GE_READ(0x5008 + (port_num << 8)), port_num); ++ ++ printk(KERN_ERR ++ "XDMA currently has %d Rx descriptors \n", ++ TITAN_GE_READ(0x5048 + (port_num << 8))); ++ ++ printk(KERN_ERR ++ "XDMA currently has prefetcted %d Rx descriptors \n", ++ TITAN_GE_READ(0x505c + (port_num << 8))); ++ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT + ++ (port_num << 8)), eth_int_cause_error); ++ } ++ ++ /* ++ * PHY interrupt to inform abt the changes. Reading the ++ * PHY Status register will clear the interrupt ++ */ ++ if ((!(eth_int_cause1 & 0x30303)) && ++ (eth_int_cause_error == 0)) { ++ err = ++ titan_ge_mdio_read(port_num, ++ TITAN_GE_MDIO_PHY_IS, ®_data); ++ ++ if (reg_data & 0x0400) { ++ /* Link status change */ ++ titan_ge_mdio_read(port_num, ++ TITAN_GE_MDIO_PHY_STATUS, ®_data); ++ if (!(reg_data & 0x0400)) { ++ /* Link is down */ ++ netif_carrier_off(netdev); ++ netif_stop_queue(netdev); ++ } else { ++ /* Link is up */ ++ netif_carrier_on(netdev); ++ netif_wake_queue(netdev); ++ ++ /* Enable the queue */ ++ titan_ge_enable_tx(port_num); ++ } ++ } ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++/* ++ * Multicast and Promiscuous mode set. The ++ * set_multi entry point is called whenever the ++ * multicast address list or the network interface ++ * flags are updated. ++ */ ++static void titan_ge_set_multi(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned long reg_data; ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 + ++ (port_num << 12)); ++ ++ if (netdev->flags & IFF_PROMISC) { ++ reg_data |= 0x2; ++ } ++ else if (netdev->flags & IFF_ALLMULTI) { ++ reg_data |= 0x01; ++ reg_data |= 0x400; /* Use the 64-bit Multicast Hash bin */ ++ } ++ else { ++ reg_data = 0x2; ++ } ++ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 + ++ (port_num << 12)), reg_data); ++ if (reg_data & 0x01) { ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_LOW + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDLOW + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDHI + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_HI + ++ (port_num << 12)), 0xffff); ++ } ++} ++ ++/* ++ * Open the network device ++ */ ++static int titan_ge_open(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int irq = TITAN_ETH_PORT_IRQ - port_num; ++ int retval; ++ ++ retval = request_irq(irq, titan_ge_int_handler, ++ SA_INTERRUPT | SA_SAMPLE_RANDOM , netdev->name, netdev); ++ ++ if (retval != 0) { ++ printk(KERN_ERR "Cannot assign IRQ number to TITAN GE \n"); ++ return -1; ++ } ++ ++ netdev->irq = irq; ++ printk(KERN_INFO "Assigned IRQ %d to port %d\n", irq, port_num); ++ ++ spin_lock_irq(&(titan_ge_eth->lock)); ++ ++ if (titan_ge_eth_open(netdev) != TITAN_OK) { ++ spin_unlock_irq(&(titan_ge_eth->lock)); ++ printk("%s: Error opening interface \n", netdev->name); ++ free_irq(netdev->irq, netdev); ++ return -EBUSY; ++ } ++ ++ spin_unlock_irq(&(titan_ge_eth->lock)); ++ ++ return 0; ++} ++ ++/* ++ * Allocate the SKBs for the Rx ring. Also used ++ * for refilling the queue ++ */ ++static int titan_ge_rx_task(struct net_device *netdev, ++ titan_ge_port_info *titan_ge_port) ++{ ++ struct device *device = &titan_ge_device[titan_ge_port->port_num]->dev; ++ volatile titan_ge_rx_desc *rx_desc; ++ struct sk_buff *skb; ++ int rx_used_desc; ++ int count = 0; ++ ++ while (titan_ge_port->rx_ring_skbs < titan_ge_port->rx_ring_size) { ++ ++ /* First try to get the skb from the recycler */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ skb = titan_ge_alloc_skb(TITAN_GE_JUMBO_BUFSIZE, GFP_ATOMIC); ++#else ++ skb = titan_ge_alloc_skb(TITAN_GE_STD_BUFSIZE, GFP_ATOMIC); ++#endif ++ if (unlikely(!skb)) { ++ /* OOM, set the flag */ ++ printk("OOM \n"); ++ oom_flag = 1; ++ break; ++ } ++ count++; ++ skb->dev = netdev; ++ ++ titan_ge_port->rx_ring_skbs++; ++ ++ rx_used_desc = titan_ge_port->rx_used_desc_q; ++ rx_desc = &(titan_ge_port->rx_desc_area[rx_used_desc]); ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ rx_desc->buffer_addr = dma_map_single(device, skb->data, ++ TITAN_GE_JUMBO_BUFSIZE - 2, DMA_FROM_DEVICE); ++#else ++ rx_desc->buffer_addr = dma_map_single(device, skb->data, ++ TITAN_GE_STD_BUFSIZE - 2, DMA_FROM_DEVICE); ++#endif ++ ++ titan_ge_port->rx_skb[rx_used_desc] = skb; ++ rx_desc->cmd_sts = TITAN_GE_RX_BUFFER_OWNED; ++ ++ titan_ge_port->rx_used_desc_q = ++ (rx_used_desc + 1) % TITAN_GE_RX_QUEUE; ++ } ++ ++ return count; ++} ++ ++/* ++ * Actual init of the Tital GE port. There is one register for ++ * the channel configuration ++ */ ++static void titan_port_init(struct net_device *netdev, ++ titan_ge_port_info * titan_ge_eth) ++{ ++ unsigned long reg_data; ++ ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ ++ /* First reset the TMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data |= 0x80000000; ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ udelay(30); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data &= ~(0xc0000000); ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ /* Now reset the RMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data |= 0x00080000; ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ udelay(30); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data &= ~(0x000c0000); ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++} ++ ++/* ++ * Start the port. All the hardware specific configuration ++ * for the XDMA, Tx FIFO, Rx FIFO, TMAC, RMAC, TRTG and AFX ++ * go here ++ */ ++static int titan_ge_port_start(struct net_device *netdev, ++ titan_ge_port_info * titan_port) ++{ ++ volatile unsigned long reg_data, reg_data1; ++ int port_num = titan_port->port_num; ++ int count = 0; ++ unsigned long reg_data_1; ++ ++ if (config_done == 0) { ++ reg_data = TITAN_GE_READ(0x0004); ++ reg_data |= 0x100; ++ TITAN_GE_WRITE(0x0004, reg_data); ++ ++ reg_data &= ~(0x100); ++ TITAN_GE_WRITE(0x0004, reg_data); ++ ++ /* Turn on GMII/MII mode and turn off TBI mode */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TSB_CTRL_1); ++ reg_data |= 0x00000700; ++ reg_data &= ~(0x00800000); /* Fencing */ ++ ++ TITAN_GE_WRITE(0x000c, 0x00001100); ++ ++ TITAN_GE_WRITE(TITAN_GE_TSB_CTRL_1, reg_data); ++ ++ /* Set the CPU Resource Limit register */ ++ TITAN_GE_WRITE(0x00f8, 0x8); ++ ++ /* Be conservative when using the BIU buffers */ ++ TITAN_GE_WRITE(0x0068, 0x4); ++ } ++ ++ titan_port->tx_threshold = 0; ++ titan_port->rx_threshold = 0; ++ ++ /* We need to write the descriptors for Tx and Rx */ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_TX_DESC + (port_num << 8)), ++ (unsigned long) titan_port->tx_dma); ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_RX_DESC + (port_num << 8)), ++ (unsigned long) titan_port->rx_dma); ++ ++ if (config_done == 0) { ++ /* Step 1: XDMA config */ ++ reg_data = TITAN_GE_READ(TITAN_GE_XDMA_CONFIG); ++ reg_data &= ~(0x80000000); /* clear reset */ ++ reg_data |= 0x1 << 29; /* sparse tx descriptor spacing */ ++ reg_data |= 0x1 << 28; /* sparse rx descriptor spacing */ ++ reg_data |= (0x1 << 23) | (0x1 << 24); /* Descriptor Coherency */ ++ reg_data |= (0x1 << 21) | (0x1 << 22); /* Data Coherency */ ++ TITAN_GE_WRITE(TITAN_GE_XDMA_CONFIG, reg_data); ++ } ++ ++ /* IR register for the XDMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8)); ++ reg_data |= 0x80068000; /* No Rx_OOD */ ++ TITAN_GE_WRITE((TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8)), reg_data); ++ ++ /* Start the Tx and Rx XDMA controller */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + (port_num << 8)); ++ reg_data &= 0x4fffffff; /* Clear tx reset */ ++ reg_data &= 0xfff4ffff; /* Clear rx reset */ ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ reg_data |= 0xa0 | 0x30030000; ++#else ++ reg_data |= 0x40 | 0x20030000; ++#endif ++ ++#ifndef CONFIG_SMP ++ reg_data &= ~(0x10); ++ reg_data |= 0x0f; /* All of the packet */ ++#endif ++ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + (port_num << 8)), reg_data); ++ ++ /* Rx desc count */ ++ count = titan_ge_rx_task(netdev, titan_port); ++ TITAN_GE_WRITE((0x5048 + (port_num << 8)), count); ++ count = TITAN_GE_READ(0x5048 + (port_num << 8)); ++ ++ udelay(30); ++ ++ /* ++ * Step 2: Configure the SDQPF, i.e. FIFO ++ */ ++ if (config_done == 0) { ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL); ++ reg_data = 0x1; ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ reg_data &= ~(0x1); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL); ++ reg_data = 0x1; ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ reg_data &= ~(0x1); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ } ++ /* ++ * Enable RX FIFO 0, 4 and 8 ++ */ ++ if (port_num == 0) { ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10); ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4844); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x4844, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_0); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ reg_data |= (0xff << 10); ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4944); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x4944, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ } ++ ++ if (port_num == 1) { ++ reg_data = TITAN_GE_READ(0x4870); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (0xff + 1); ++ ++ TITAN_GE_WRITE(0x4870, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4874); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x4874, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4870, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x494c); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x494c, reg_data); ++ reg_data |= (0xff << 10) | (0xff + 1); ++ TITAN_GE_WRITE(0x494c, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4950); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x4950, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x494c, reg_data); ++ } ++ ++ /* ++ * Titan 1.2 revision does support port #2 ++ */ ++ if (port_num == 2) { ++ /* ++ * Put the descriptors in the SRAM ++ */ ++ reg_data = TITAN_GE_READ(0x48a0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x48a4); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x48a4, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x4958); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ TITAN_GE_WRITE(0x4958, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x495c); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x495c, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ } ++ ++ if (port_num == 2) { ++ reg_data = TITAN_GE_READ(0x48a0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x48a4); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x48a4, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x4958); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ TITAN_GE_WRITE(0x4958, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x495c); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x495c, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ } ++ ++ /* ++ * Step 3: TRTG block enable ++ */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TRTG_CONFIG + (port_num << 12)); ++ ++ /* ++ * This is the 1.2 revision of the chip. It has fix for the ++ * IP header alignment. Now, the IP header begins at an ++ * aligned address and this wont need an extra copy in the ++ * driver. This performance drawback existed in the previous ++ * versions of the silicon ++ */ ++ reg_data_1 = TITAN_GE_READ(0x103c + (port_num << 12)); ++ reg_data_1 |= 0x40000000; ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ reg_data_1 |= 0x04000000; ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ mdelay(5); ++ ++ reg_data_1 &= ~(0x04000000); ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ mdelay(5); ++ ++ reg_data |= 0x0001; ++ TITAN_GE_WRITE((TITAN_GE_TRTG_CONFIG + (port_num << 12)), reg_data); ++ ++ /* ++ * Step 4: Start the Tx activity ++ */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_2 + (port_num << 12)), 0xe197); ++#ifdef TITAN_GE_JUMBO_FRAMES ++ TITAN_GE_WRITE((0x1258 + (port_num << 12)), 0x4000); ++#endif ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)); ++ reg_data |= 0x0001; /* Enable TMAC */ ++ reg_data |= 0x6c70; /* PAUSE also set */ ++ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ udelay(30); ++ ++ /* Destination Address drop bit */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_2 + (port_num << 12)); ++ reg_data |= 0x218; /* DA_DROP bit and pause */ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_2 + (port_num << 12)), reg_data); ++ ++ TITAN_GE_WRITE((0x1218 + (port_num << 12)), 0x3); ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ TITAN_GE_WRITE((0x1208 + (port_num << 12)), 0x4000); ++#endif ++ /* Start the Rx activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)); ++ reg_data |= 0x0001; /* RMAC Enable */ ++ reg_data |= 0x0010; /* CRC Check enable */ ++ reg_data |= 0x0040; /* Min Frame check enable */ ++ reg_data |= 0x4400; /* Max Frame check enable */ ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ udelay(30); ++ ++ /* ++ * Enable the Interrupts for Tx and Rx ++ */ ++ reg_data1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ ++ if (port_num == 0) { ++ reg_data1 |= 0x3; ++#ifdef CONFIG_SMP ++ TITAN_GE_WRITE(0x0038, 0x003); ++#else ++ TITAN_GE_WRITE(0x0038, 0x303); ++#endif ++ } ++ ++ if (port_num == 1) { ++ reg_data1 |= 0x300; ++ } ++ ++ if (port_num == 2) ++ reg_data1 |= 0x30000; ++ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data1); ++ TITAN_GE_WRITE(0x003c, 0x300); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(0x0024, 0x04000024); /* IRQ vector */ ++ TITAN_GE_WRITE(0x0020, 0x000fb000); /* INTMSG base */ ++ } ++ ++ /* Priority */ ++ reg_data = TITAN_GE_READ(0x1038 + (port_num << 12)); ++ reg_data &= ~(0x00f00000); ++ TITAN_GE_WRITE((0x1038 + (port_num << 12)), reg_data); ++ ++ /* Step 5: GMII config */ ++ titan_ge_gmii_config(port_num); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(0x1a80, 0); ++ config_done = 1; ++ } ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Function to queue the packet for the Ethernet device ++ */ ++static void titan_ge_tx_queue(titan_ge_port_info * titan_ge_eth, ++ struct sk_buff * skb) ++{ ++ struct device *device = &titan_ge_device[titan_ge_eth->port_num]->dev; ++ unsigned int curr_desc = titan_ge_eth->tx_curr_desc_q; ++ volatile titan_ge_tx_desc *tx_curr; ++ int port_num = titan_ge_eth->port_num; ++ ++ tx_curr = &(titan_ge_eth->tx_desc_area[curr_desc]); ++ tx_curr->buffer_addr = ++ dma_map_single(device, skb->data, skb_headlen(skb), ++ DMA_TO_DEVICE); ++ ++ titan_ge_eth->tx_skb[curr_desc] = (struct sk_buff *) skb; ++ tx_curr->buffer_len = skb_headlen(skb); ++ ++ /* Last descriptor enables interrupt and changes ownership */ ++ tx_curr->cmd_sts = 0x1 | (1 << 15) | (1 << 5); ++ ++ /* Kick the XDMA to start the transfer from memory to the FIFO */ ++ TITAN_GE_WRITE((0x5044 + (port_num << 8)), 0x1); ++ ++ /* Current descriptor updated */ ++ titan_ge_eth->tx_curr_desc_q = (curr_desc + 1) % TITAN_GE_TX_QUEUE; ++ ++ /* Prefetch the next descriptor */ ++ prefetch((const void *) ++ &titan_ge_eth->tx_desc_area[titan_ge_eth->tx_curr_desc_q]); ++} ++ ++/* ++ * Actually does the open of the Ethernet device ++ */ ++static int titan_ge_eth_open(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ struct device *device = &titan_ge_device[port_num]->dev; ++ unsigned long reg_data; ++ unsigned int phy_reg; ++ int err = 0; ++ ++ /* Stop the Rx activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ /* Clear the port interrupts */ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT + (port_num << 8)), 0x0); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0); ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_B, 0); ++ } ++ ++ /* Set the MAC Address */ ++ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6); ++ ++ if (config_done == 0) ++ titan_port_init(netdev, titan_ge_eth); ++ ++ titan_ge_update_afx(titan_ge_eth); ++ ++ /* Allocate the Tx ring now */ ++ titan_ge_eth->tx_ring_skbs = 0; ++ titan_ge_eth->tx_ring_size = TITAN_GE_TX_QUEUE; ++ ++ /* Allocate space in the SRAM for the descriptors */ ++ titan_ge_eth->tx_desc_area = (titan_ge_tx_desc *) ++ (titan_ge_sram + TITAN_TX_RING_BYTES * port_num); ++ titan_ge_eth->tx_dma = TITAN_SRAM_BASE + TITAN_TX_RING_BYTES * port_num; ++ ++ if (!titan_ge_eth->tx_desc_area) { ++ printk(KERN_ERR ++ "%s: Cannot allocate Tx Ring (size %d bytes) for port %d\n", ++ netdev->name, TITAN_TX_RING_BYTES, port_num); ++ return -ENOMEM; ++ } ++ ++ memset(titan_ge_eth->tx_desc_area, 0, titan_ge_eth->tx_desc_area_size); ++ ++ /* Now initialize the Tx descriptor ring */ ++ titan_ge_init_tx_desc_ring(titan_ge_eth, ++ titan_ge_eth->tx_ring_size, ++ (unsigned long) titan_ge_eth->tx_desc_area, ++ (unsigned long) titan_ge_eth->tx_dma); ++ ++ /* Allocate the Rx ring now */ ++ titan_ge_eth->rx_ring_size = TITAN_GE_RX_QUEUE; ++ titan_ge_eth->rx_ring_skbs = 0; ++ ++ titan_ge_eth->rx_desc_area = ++ (titan_ge_rx_desc *)(titan_ge_sram + 0x1000 + TITAN_RX_RING_BYTES * port_num); ++ ++ titan_ge_eth->rx_dma = TITAN_SRAM_BASE + 0x1000 + TITAN_RX_RING_BYTES * port_num; ++ ++ if (!titan_ge_eth->rx_desc_area) { ++ printk(KERN_ERR "%s: Cannot allocate Rx Ring (size %d bytes)\n", ++ netdev->name, TITAN_RX_RING_BYTES); ++ ++ printk(KERN_ERR "%s: Freeing previously allocated TX queues...", ++ netdev->name); ++ ++ dma_free_coherent(device, titan_ge_eth->tx_desc_area_size, ++ (void *) titan_ge_eth->tx_desc_area, ++ titan_ge_eth->tx_dma); ++ ++ return -ENOMEM; ++ } ++ ++ memset(titan_ge_eth->rx_desc_area, 0, titan_ge_eth->rx_desc_area_size); ++ ++ /* Now initialize the Rx ring */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ if ((titan_ge_init_rx_desc_ring ++ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_JUMBO_BUFSIZE, ++ (unsigned long) titan_ge_eth->rx_desc_area, 0, ++ (unsigned long) titan_ge_eth->rx_dma)) == 0) ++#else ++ if ((titan_ge_init_rx_desc_ring ++ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_STD_BUFSIZE, ++ (unsigned long) titan_ge_eth->rx_desc_area, 0, ++ (unsigned long) titan_ge_eth->rx_dma)) == 0) ++#endif ++ panic("%s: Error initializing RX Ring\n", netdev->name); ++ ++ /* Fill the Rx ring with the SKBs */ ++ titan_ge_port_start(netdev, titan_ge_eth); ++ ++ /* ++ * Check if Interrupt Coalscing needs to be turned on. The ++ * values specified in the register is multiplied by ++ * (8 x 64 nanoseconds) to determine when an interrupt should ++ * be sent to the CPU. ++ */ ++ ++ if (TITAN_GE_TX_COAL) { ++ titan_ge_eth->tx_int_coal = ++ titan_ge_tx_coal(TITAN_GE_TX_COAL, port_num); ++ } ++ ++ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg); ++ if (err == TITAN_GE_MDIO_ERROR) { ++ printk(KERN_ERR ++ "Could not read PHY control register 0x11 \n"); ++ return TITAN_ERROR; ++ } ++ if (!(phy_reg & 0x0400)) { ++ netif_carrier_off(netdev); ++ netif_stop_queue(netdev); ++ return TITAN_ERROR; ++ } else { ++ netif_carrier_on(netdev); ++ netif_start_queue(netdev); ++ } ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Queue the packet for Tx. Currently no support for zero copy, ++ * checksum offload and Scatter Gather. The chip does support ++ * Scatter Gather only. But, that wont help here since zero copy ++ * requires support for Tx checksumming also. ++ */ ++int titan_ge_start_xmit(struct sk_buff *skb, struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned long flags; ++ struct net_device_stats *stats; ++//printk("titan_ge_start_xmit\n"); ++ ++ stats = &titan_ge_eth->stats; ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ if ((TITAN_GE_TX_QUEUE - titan_ge_eth->tx_ring_skbs) <= ++ (skb_shinfo(skb)->nr_frags + 1)) { ++ netif_stop_queue(netdev); ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ printk(KERN_ERR "Tx OOD \n"); ++ return 1; ++ } ++ ++ titan_ge_tx_queue(titan_ge_eth, skb); ++ titan_ge_eth->tx_ring_skbs++; ++ ++ if (TITAN_GE_TX_QUEUE <= (titan_ge_eth->tx_ring_skbs + 4)) { ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ titan_ge_free_tx_queue(titan_ge_eth); ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ } ++ ++ stats->tx_bytes += skb->len; ++ stats->tx_packets++; ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ netdev->trans_start = jiffies; ++ ++ return 0; ++} ++ ++/* ++ * Actually does the Rx. Rx side checksumming supported. ++ */ ++static int titan_ge_rx(struct net_device *netdev, int port_num, ++ titan_ge_port_info * titan_ge_port, ++ titan_ge_packet * packet) ++{ ++ int rx_curr_desc, rx_used_desc; ++ volatile titan_ge_rx_desc *rx_desc; ++ ++ rx_curr_desc = titan_ge_port->rx_curr_desc_q; ++ rx_used_desc = titan_ge_port->rx_used_desc_q; ++ ++ if (((rx_curr_desc + 1) % TITAN_GE_RX_QUEUE) == rx_used_desc) ++ return TITAN_ERROR; ++ ++ rx_desc = &(titan_ge_port->rx_desc_area[rx_curr_desc]); ++ ++ if (rx_desc->cmd_sts & TITAN_GE_RX_BUFFER_OWNED) ++ return TITAN_ERROR; ++ ++ packet->skb = titan_ge_port->rx_skb[rx_curr_desc]; ++ packet->len = (rx_desc->cmd_sts & 0x7fff); ++ ++ /* ++ * At this point, we dont know if the checksumming ++ * actually helps relieve CPU. So, keep it for ++ * port 0 only ++ */ ++ packet->checksum = ntohs((rx_desc->buffer & 0xffff0000) >> 16); ++ packet->cmd_sts = rx_desc->cmd_sts; ++ ++ titan_ge_port->rx_curr_desc_q = (rx_curr_desc + 1) % TITAN_GE_RX_QUEUE; ++ ++ /* Prefetch the next descriptor */ ++ prefetch((const void *) ++ &titan_ge_port->rx_desc_area[titan_ge_port->rx_curr_desc_q + 1]); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Free the Tx queue of the used SKBs ++ */ ++static int titan_ge_free_tx_queue(titan_ge_port_info *titan_ge_eth) ++{ ++ unsigned long flags; ++ ++ /* Take the lock */ ++ spin_lock_irqsave(&(titan_ge_eth->lock), flags); ++ ++ while (titan_ge_return_tx_desc(titan_ge_eth, titan_ge_eth->port_num) == 0) ++ if (titan_ge_eth->tx_ring_skbs != 1) ++ titan_ge_eth->tx_ring_skbs--; ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Threshold beyond which we do the cleaning of ++ * Tx queue and new allocation for the Rx ++ * queue ++ */ ++#define TX_THRESHOLD 4 ++#define RX_THRESHOLD 10 ++ ++/* ++ * Receive the packets and send it to the kernel. ++ */ ++static int titan_ge_receive_queue(struct net_device *netdev, unsigned int max) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ titan_ge_packet packet; ++ struct net_device_stats *stats; ++ struct sk_buff *skb; ++ unsigned long received_packets = 0; ++ unsigned int ack; ++ ++ stats = &titan_ge_eth->stats; ++ ++ while ((--max) ++ && (titan_ge_rx(netdev, port_num, titan_ge_eth, &packet) == TITAN_OK)) { ++ skb = (struct sk_buff *) packet.skb; ++ ++ titan_ge_eth->rx_ring_skbs--; ++ ++ if (--titan_ge_eth->rx_work_limit < 0) ++ break; ++ received_packets++; ++ ++ stats->rx_packets++; ++ stats->rx_bytes += packet.len; ++ ++ if ((packet.cmd_sts & TITAN_GE_RX_PERR) || ++ (packet.cmd_sts & TITAN_GE_RX_OVERFLOW_ERROR) || ++ (packet.cmd_sts & TITAN_GE_RX_TRUNC) || ++ (packet.cmd_sts & TITAN_GE_RX_CRC_ERROR)) { ++ stats->rx_dropped++; ++ dev_kfree_skb_any(skb); ++ ++ continue; ++ } ++ /* ++ * Either support fast path or slow path. Decision ++ * making can really slow down the performance. The ++ * idea is to cut down the number of checks and improve ++ * the fastpath. ++ */ ++ ++ skb_put(skb, packet.len - 2); ++ ++ /* ++ * Increment data pointer by two since thats where ++ * the MAC starts ++ */ ++ skb_reserve(skb, 2); ++ skb->protocol = eth_type_trans(skb, netdev); ++ netif_receive_skb(skb); ++ ++ if (titan_ge_eth->rx_threshold > RX_THRESHOLD) { ++ ack = titan_ge_rx_task(netdev, titan_ge_eth); ++ TITAN_GE_WRITE((0x5048 + (port_num << 8)), ack); ++ titan_ge_eth->rx_threshold = 0; ++ } else ++ titan_ge_eth->rx_threshold++; ++ ++ if (titan_ge_eth->tx_threshold > TX_THRESHOLD) { ++ titan_ge_eth->tx_threshold = 0; ++ titan_ge_free_tx_queue(titan_ge_eth); ++ } ++ else ++ titan_ge_eth->tx_threshold++; ++ ++ } ++ return received_packets; ++} ++ ++ ++/* ++ * Enable the Rx side interrupts ++ */ ++static void titan_ge_enable_int(unsigned int port_num, ++ titan_ge_port_info *titan_ge_eth, ++ struct net_device *netdev) ++{ ++ unsigned long reg_data = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ ++ if (port_num == 0) ++ reg_data |= 0x3; ++ if (port_num == 1) ++ reg_data |= 0x300; ++ if (port_num == 2) ++ reg_data |= 0x30000; ++ ++ /* Re-enable interrupts */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data); ++} ++ ++/* ++ * Main function to handle the polling for Rx side NAPI. ++ * Receive interrupts have been disabled at this point. ++ * The poll schedules the transmit followed by receive. ++ */ ++static int titan_ge_poll(struct net_device *netdev, int *budget) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ int port_num = titan_ge_eth->port_num; ++ int work_done = 0; ++ unsigned long flags, status; ++ ++ titan_ge_eth->rx_work_limit = *budget; ++ if (titan_ge_eth->rx_work_limit > netdev->quota) ++ titan_ge_eth->rx_work_limit = netdev->quota; ++ ++ do { ++ /* Do the transmit cleaning work here */ ++ titan_ge_free_tx_queue(titan_ge_eth); ++ ++ /* Ack the Rx interrupts */ ++ if (port_num == 0) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x3); ++ if (port_num == 1) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x300); ++ if (port_num == 2) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x30000); ++ ++ work_done += titan_ge_receive_queue(netdev, 0); ++ ++ /* Out of quota and there is work to be done */ ++ if (titan_ge_eth->rx_work_limit < 0) ++ goto not_done; ++ ++ /* Receive alloc_skb could lead to OOM */ ++ if (oom_flag == 1) { ++ oom_flag = 0; ++ goto oom; ++ } ++ ++ status = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A); ++ } while (status & 0x30300); ++ ++ /* If we are here, then no more interrupts to process */ ++ goto done; ++ ++not_done: ++ *budget -= work_done; ++ netdev->quota -= work_done; ++ return 1; ++ ++oom: ++ printk(KERN_ERR "OOM \n"); ++ netif_rx_complete(netdev); ++ return 0; ++ ++done: ++ /* ++ * No more packets on the poll list. Turn the interrupts ++ * back on and we should be able to catch the new ++ * packets in the interrupt handler ++ */ ++ if (!work_done) ++ work_done = 1; ++ ++ *budget -= work_done; ++ netdev->quota -= work_done; ++ ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ /* Remove us from the poll list */ ++ netif_rx_complete(netdev); ++ ++ /* Re-enable interrupts */ ++ titan_ge_enable_int(port_num, titan_ge_eth, netdev); ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ return 0; ++} ++ ++/* ++ * Close the network device ++ */ ++int titan_ge_stop(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ spin_lock_irq(&(titan_ge_eth->lock)); ++ titan_ge_eth_stop(netdev); ++ free_irq(netdev->irq, netdev); ++ spin_unlock_irq(&titan_ge_eth->lock); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Free the Tx ring ++ */ ++static void titan_ge_free_tx_rings(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int curr; ++ unsigned long reg_data; ++ ++ /* Stop the Tx DMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)); ++ reg_data |= 0xc0000000; ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)), reg_data); ++ ++ /* Disable the TMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ for (curr = 0; ++ (titan_ge_eth->tx_ring_skbs) && (curr < TITAN_GE_TX_QUEUE); ++ curr++) { ++ if (titan_ge_eth->tx_skb[curr]) { ++ dev_kfree_skb(titan_ge_eth->tx_skb[curr]); ++ titan_ge_eth->tx_ring_skbs--; ++ } ++ } ++ ++ if (titan_ge_eth->tx_ring_skbs != 0) ++ printk ++ ("%s: Error on Tx descriptor free - could not free %d" ++ " descriptors\n", netdev->name, ++ titan_ge_eth->tx_ring_skbs); ++ ++#ifndef TITAN_RX_RING_IN_SRAM ++ dma_free_coherent(&titan_ge_device[port_num]->dev, ++ titan_ge_eth->tx_desc_area_size, ++ (void *) titan_ge_eth->tx_desc_area, ++ titan_ge_eth->tx_dma); ++#endif ++} ++ ++/* ++ * Free the Rx ring ++ */ ++static void titan_ge_free_rx_rings(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int curr; ++ unsigned long reg_data; ++ ++ /* Stop the Rx DMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)); ++ reg_data |= 0x000c0000; ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)), reg_data); ++ ++ /* Disable the RMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ for (curr = 0; ++ titan_ge_eth->rx_ring_skbs && (curr < TITAN_GE_RX_QUEUE); ++ curr++) { ++ if (titan_ge_eth->rx_skb[curr]) { ++ dev_kfree_skb(titan_ge_eth->rx_skb[curr]); ++ titan_ge_eth->rx_ring_skbs--; ++ } ++ } ++ ++ if (titan_ge_eth->rx_ring_skbs != 0) ++ printk(KERN_ERR ++ "%s: Error in freeing Rx Ring. %d skb's still" ++ " stuck in RX Ring - ignoring them\n", netdev->name, ++ titan_ge_eth->rx_ring_skbs); ++ ++#ifndef TITAN_RX_RING_IN_SRAM ++ dma_free_coherent(&titan_ge_device[port_num]->dev, ++ titan_ge_eth->rx_desc_area_size, ++ (void *) titan_ge_eth->rx_desc_area, ++ titan_ge_eth->rx_dma); ++#endif ++} ++ ++/* ++ * Actually does the stop of the Ethernet device ++ */ ++static void titan_ge_eth_stop(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ netif_stop_queue(netdev); ++ ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ ++ titan_ge_free_tx_rings(netdev); ++ titan_ge_free_rx_rings(netdev); ++ ++ /* Disable the Tx and Rx Interrupts for all channels */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, 0x0); ++} ++ ++/* ++ * Update the MAC address. Note that we have to write the ++ * address in three station registers, 16 bits each. And this ++ * has to be done for TMAC and RMAC ++ */ ++static void titan_ge_update_mac_address(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ u8 p_addr[6]; ++ ++ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6); ++ memcpy(p_addr, netdev->dev_addr, 6); ++ ++ /* Update the Address Filtering Match tables */ ++ titan_ge_update_afx(titan_ge_eth); ++ ++ printk("Station MAC : %d %d %d %d %d %d \n", ++ p_addr[5], p_addr[4], p_addr[3], ++ p_addr[2], p_addr[1], p_addr[0]); ++ ++ /* Set the MAC address here for TMAC and RMAC */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port_num << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port_num << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port_num << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port_num << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port_num << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port_num << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++} ++ ++/* ++ * Set the MAC address of the Ethernet device ++ */ ++static int titan_ge_set_mac_address(struct net_device *dev, void *addr) ++{ ++ titan_ge_port_info *tp = netdev_priv(dev); ++ struct sockaddr *sa = addr; ++ ++ memcpy(dev->dev_addr, sa->sa_data, dev->addr_len); ++ ++ spin_lock_irq(&tp->lock); ++ titan_ge_update_mac_address(dev); ++ spin_unlock_irq(&tp->lock); ++ ++ return 0; ++} ++ ++/* ++ * Get the Ethernet device stats ++ */ ++static struct net_device_stats *titan_ge_get_stats(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ return &titan_ge_eth->stats; ++} ++ ++/* ++ * Initialize the Rx descriptor ring for the Titan Ge ++ */ ++static int titan_ge_init_rx_desc_ring(titan_ge_port_info * titan_eth_port, ++ int rx_desc_num, ++ int rx_buff_size, ++ unsigned long rx_desc_base_addr, ++ unsigned long rx_buff_base_addr, ++ unsigned long rx_dma) ++{ ++ volatile titan_ge_rx_desc *rx_desc; ++ unsigned long buffer_addr; ++ int index; ++ unsigned long titan_ge_rx_desc_bus = rx_dma; ++ ++ buffer_addr = rx_buff_base_addr; ++ rx_desc = (titan_ge_rx_desc *) rx_desc_base_addr; ++ ++ /* Check alignment */ ++ if (rx_buff_base_addr & 0xF) ++ return 0; ++ ++ /* Check Rx buffer size */ ++ if ((rx_buff_size < 8) || (rx_buff_size > TITAN_GE_MAX_RX_BUFFER)) ++ return 0; ++ ++ /* 64-bit alignment ++ if ((rx_buff_base_addr + rx_buff_size) & 0x7) ++ return 0; */ ++ ++ /* Initialize the Rx desc ring */ ++ for (index = 0; index < rx_desc_num; index++) { ++ titan_ge_rx_desc_bus += sizeof(titan_ge_rx_desc); ++ rx_desc[index].cmd_sts = 0; ++ rx_desc[index].buffer_addr = buffer_addr; ++ titan_eth_port->rx_skb[index] = NULL; ++ buffer_addr += rx_buff_size; ++ } ++ ++ titan_eth_port->rx_curr_desc_q = 0; ++ titan_eth_port->rx_used_desc_q = 0; ++ ++ titan_eth_port->rx_desc_area = (titan_ge_rx_desc *) rx_desc_base_addr; ++ titan_eth_port->rx_desc_area_size = ++ rx_desc_num * sizeof(titan_ge_rx_desc); ++ ++ titan_eth_port->rx_dma = rx_dma; ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Initialize the Tx descriptor ring. Descriptors in the SRAM ++ */ ++static int titan_ge_init_tx_desc_ring(titan_ge_port_info * titan_ge_port, ++ int tx_desc_num, ++ unsigned long tx_desc_base_addr, ++ unsigned long tx_dma) ++{ ++ titan_ge_tx_desc *tx_desc; ++ int index; ++ unsigned long titan_ge_tx_desc_bus = tx_dma; ++ ++ if (tx_desc_base_addr & 0xF) ++ return 0; ++ ++ tx_desc = (titan_ge_tx_desc *) tx_desc_base_addr; ++ ++ for (index = 0; index < tx_desc_num; index++) { ++ titan_ge_port->tx_dma_array[index] = ++ (dma_addr_t) titan_ge_tx_desc_bus; ++ titan_ge_tx_desc_bus += sizeof(titan_ge_tx_desc); ++ tx_desc[index].cmd_sts = 0x0000; ++ tx_desc[index].buffer_len = 0; ++ tx_desc[index].buffer_addr = 0x00000000; ++ titan_ge_port->tx_skb[index] = NULL; ++ } ++ ++ titan_ge_port->tx_curr_desc_q = 0; ++ titan_ge_port->tx_used_desc_q = 0; ++ ++ titan_ge_port->tx_desc_area = (titan_ge_tx_desc *) tx_desc_base_addr; ++ titan_ge_port->tx_desc_area_size = ++ tx_desc_num * sizeof(titan_ge_tx_desc); ++ ++ titan_ge_port->tx_dma = tx_dma; ++ return TITAN_OK; ++} ++ ++/* ++ * Initialize the device as an Ethernet device ++ */ ++static int __init titan_ge_probe(struct device *device) ++{ ++ titan_ge_port_info *titan_ge_eth; ++ struct net_device *netdev; ++ int port = to_platform_device(device)->id; ++ int err; ++ ++ netdev = alloc_etherdev(sizeof(titan_ge_port_info)); ++ if (!netdev) { ++ err = -ENODEV; ++ goto out; ++ } ++ ++ netdev->open = titan_ge_open; ++ netdev->stop = titan_ge_stop; ++ netdev->hard_start_xmit = titan_ge_start_xmit; ++ netdev->get_stats = titan_ge_get_stats; ++ netdev->set_multicast_list = titan_ge_set_multi; ++ netdev->set_mac_address = titan_ge_set_mac_address; ++ ++ /* Tx timeout */ ++ netdev->tx_timeout = titan_ge_tx_timeout; ++ netdev->watchdog_timeo = 2 * HZ; ++ ++ /* Set these to very high values */ ++ netdev->poll = titan_ge_poll; ++ netdev->weight = 64; ++ ++ netdev->tx_queue_len = TITAN_GE_TX_QUEUE; ++ netif_carrier_off(netdev); ++ netdev->base_addr = 0; ++ ++ netdev->change_mtu = titan_ge_change_mtu; ++ ++ titan_ge_eth = netdev_priv(netdev); ++ /* Allocation of memory for the driver structures */ ++ ++ titan_ge_eth->port_num = port; ++ ++ /* Configure the Tx timeout handler */ ++ INIT_WORK(&titan_ge_eth->tx_timeout_task, ++ (void (*)(void *)) titan_ge_tx_timeout_task, netdev); ++ ++ spin_lock_init(&titan_ge_eth->lock); ++ ++ /* set MAC addresses */ ++ memcpy(netdev->dev_addr, titan_ge_mac_addr_base, 6); ++ netdev->dev_addr[5] += port; ++ ++ err = register_netdev(netdev); ++ ++ if (err) ++ goto out_free_netdev; ++ ++ printk(KERN_NOTICE ++ "%s: port %d with MAC address %02x:%02x:%02x:%02x:%02x:%02x\n", ++ netdev->name, port, netdev->dev_addr[0], ++ netdev->dev_addr[1], netdev->dev_addr[2], ++ netdev->dev_addr[3], netdev->dev_addr[4], ++ netdev->dev_addr[5]); ++ ++ printk(KERN_NOTICE "Rx NAPI supported, Tx Coalescing ON \n"); ++ ++ return 0; ++ ++out_free_netdev: ++ kfree(netdev); ++ ++out: ++ return err; ++} ++ ++static void __devexit titan_device_remove(struct device *device) ++{ ++} ++ ++/* ++ * Reset the Ethernet port ++ */ ++static void titan_ge_port_reset(unsigned int port_num) ++{ ++ unsigned int reg_data; ++ ++ /* Stop the Tx port activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x0001); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ /* Stop the Rx port activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x0001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ return; ++} ++ ++/* ++ * Return the Tx desc after use by the XDMA ++ */ ++static int titan_ge_return_tx_desc(titan_ge_port_info * titan_ge_eth, int port) ++{ ++ int tx_desc_used; ++ struct sk_buff *skb; ++ ++ tx_desc_used = titan_ge_eth->tx_used_desc_q; ++ ++ /* return right away */ ++ if (tx_desc_used == titan_ge_eth->tx_curr_desc_q) ++ return TITAN_ERROR; ++ ++ /* Now the critical stuff */ ++ skb = titan_ge_eth->tx_skb[tx_desc_used]; ++ ++ dev_kfree_skb_any(skb); ++ ++ titan_ge_eth->tx_skb[tx_desc_used] = NULL; ++ titan_ge_eth->tx_used_desc_q = ++ (tx_desc_used + 1) % TITAN_GE_TX_QUEUE; ++ ++ return 0; ++} ++ ++/* ++ * Coalescing for the Tx path ++ */ ++static unsigned long titan_ge_tx_coal(unsigned long delay, int port) ++{ ++ unsigned long rx_delay; ++ ++ rx_delay = TITAN_GE_READ(TITAN_GE_INT_COALESCING); ++ delay = (delay << 16) | rx_delay; ++ ++ TITAN_GE_WRITE(TITAN_GE_INT_COALESCING, delay); ++ TITAN_GE_WRITE(0x5038, delay); ++ ++ return delay; ++} ++ ++static struct device_driver titan_soc_driver = { ++ .name = titan_string, ++ .bus = &platform_bus_type, ++ .probe = titan_ge_probe, ++ .remove = __devexit_p(titan_device_remove), ++}; ++ ++static void titan_platform_release (struct device *device) ++{ ++ struct platform_device *pldev; ++ ++ /* free device */ ++ pldev = to_platform_device (device); ++ kfree (pldev); ++} ++ ++/* ++ * Register the Titan GE with the kernel ++ */ ++static int __init titan_ge_init_module(void) ++{ ++ struct platform_device *pldev; ++ unsigned int version, device; ++ int i; ++ ++ printk(KERN_NOTICE ++ "PMC-Sierra TITAN 10/100/1000 Ethernet Driver \n"); ++ ++ titan_ge_base = (unsigned long) ioremap(TITAN_GE_BASE, TITAN_GE_SIZE); ++ if (!titan_ge_base) { ++ printk("Mapping Titan GE failed\n"); ++ goto out; ++ } ++ ++ device = TITAN_GE_READ(TITAN_GE_DEVICE_ID); ++ version = (device & 0x000f0000) >> 16; ++ device &= 0x0000ffff; ++ ++ printk(KERN_NOTICE "Device Id : %x, Version : %x \n", device, version); ++ ++#ifdef TITAN_RX_RING_IN_SRAM ++ titan_ge_sram = (unsigned long) ioremap(TITAN_SRAM_BASE, ++ TITAN_SRAM_SIZE); ++ if (!titan_ge_sram) { ++ printk("Mapping Titan SRAM failed\n"); ++ goto out_unmap_ge; ++ } ++#endif ++ ++ if (driver_register(&titan_soc_driver)) { ++ printk(KERN_ERR "Driver registration failed\n"); ++ goto out_unmap_sram; ++ } ++ ++ for (i = 0; i < 3; i++) { ++ titan_ge_device[i] = NULL; ++ ++ if (!(pldev = kmalloc (sizeof (*pldev), GFP_KERNEL))) ++ continue; ++ ++ memset (pldev, 0, sizeof (*pldev)); ++ pldev->name = titan_string; ++ pldev->id = i; ++ pldev->dev.release = titan_platform_release; ++ titan_ge_device[i] = pldev; ++ ++ if (platform_device_register (pldev)) { ++ kfree (pldev); ++ titan_ge_device[i] = NULL; ++ continue; ++ } ++ ++ if (!pldev->dev.driver) { ++ /* ++ * The driver was not bound to this device, there was ++ * no hardware at this address. Unregister it, as the ++ * release fuction will take care of freeing the ++ * allocated structure ++ */ ++ titan_ge_device[i] = NULL; ++ platform_device_unregister (pldev); ++ } ++ } ++ ++ return 0; ++ ++out_unmap_sram: ++ iounmap((void *)titan_ge_sram); ++ ++out_unmap_ge: ++ iounmap((void *)titan_ge_base); ++ ++out: ++ return -ENOMEM; ++} ++ ++/* ++ * Unregister the Titan GE from the kernel ++ */ ++static void __exit titan_ge_cleanup_module(void) ++{ ++ int i; ++ ++ driver_unregister(&titan_soc_driver); ++ ++ for (i = 0; i < 3; i++) { ++ if (titan_ge_device[i]) { ++ platform_device_unregister (titan_ge_device[i]); ++ titan_ge_device[i] = NULL; ++ } ++ } ++ ++ iounmap((void *)titan_ge_sram); ++ iounmap((void *)titan_ge_base); ++} ++ ++MODULE_AUTHOR("Manish Lachwani "); ++MODULE_DESCRIPTION("Titan GE Ethernet driver"); ++MODULE_LICENSE("GPL"); ++ ++module_init(titan_ge_init_module); ++module_exit(titan_ge_cleanup_module); +diff --git a/drivers/net/titan_ge.h b/drivers/net/titan_ge.h +new file mode 100644 +index 0000000..3719f78 +--- /dev/null ++++ b/drivers/net/titan_ge.h +@@ -0,0 +1,415 @@ ++#ifndef _TITAN_GE_H_ ++#define _TITAN_GE_H_ ++ ++#include ++#include ++#include ++#include ++ ++/* ++ * These functions should be later moved to a more generic location since there ++ * will be others accessing it also ++ */ ++ ++/* ++ * This is the way it works: LKB5 Base is at 0x0128. TITAN_BASE is defined in ++ * include/asm/titan_dep.h. TITAN_GE_BASE is the value in the TITAN_GE_LKB5 ++ * register. ++ */ ++ ++#define TITAN_GE_BASE 0xfe000000UL ++#define TITAN_GE_SIZE 0x10000UL ++ ++extern unsigned long titan_ge_base; ++ ++#define TITAN_GE_WRITE(offset, data) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) = (data) ++ ++#define TITAN_GE_READ(offset) *(volatile u32 *)(titan_ge_base + (offset)) ++ ++#ifndef msec_delay ++#define msec_delay(x) do { if(in_interrupt()) { \ ++ /* Don't mdelay in interrupt context! */ \ ++ BUG(); \ ++ } else { \ ++ set_current_state(TASK_UNINTERRUPTIBLE); \ ++ schedule_timeout((x * HZ)/1000); \ ++ } } while(0) ++#endif ++ ++#define TITAN_GE_PORT_0 ++ ++#define TITAN_SRAM_BASE ((OCD_READ(RM9000x2_OCD_LKB13) & ~1) << 4) ++#define TITAN_SRAM_SIZE 0x2000UL ++ ++/* ++ * We may need these constants ++ */ ++#define TITAN_BIT0 0x00000001 ++#define TITAN_BIT1 0x00000002 ++#define TITAN_BIT2 0x00000004 ++#define TITAN_BIT3 0x00000008 ++#define TITAN_BIT4 0x00000010 ++#define TITAN_BIT5 0x00000020 ++#define TITAN_BIT6 0x00000040 ++#define TITAN_BIT7 0x00000080 ++#define TITAN_BIT8 0x00000100 ++#define TITAN_BIT9 0x00000200 ++#define TITAN_BIT10 0x00000400 ++#define TITAN_BIT11 0x00000800 ++#define TITAN_BIT12 0x00001000 ++#define TITAN_BIT13 0x00002000 ++#define TITAN_BIT14 0x00004000 ++#define TITAN_BIT15 0x00008000 ++#define TITAN_BIT16 0x00010000 ++#define TITAN_BIT17 0x00020000 ++#define TITAN_BIT18 0x00040000 ++#define TITAN_BIT19 0x00080000 ++#define TITAN_BIT20 0x00100000 ++#define TITAN_BIT21 0x00200000 ++#define TITAN_BIT22 0x00400000 ++#define TITAN_BIT23 0x00800000 ++#define TITAN_BIT24 0x01000000 ++#define TITAN_BIT25 0x02000000 ++#define TITAN_BIT26 0x04000000 ++#define TITAN_BIT27 0x08000000 ++#define TITAN_BIT28 0x10000000 ++#define TITAN_BIT29 0x20000000 ++#define TITAN_BIT30 0x40000000 ++#define TITAN_BIT31 0x80000000 ++ ++/* Flow Control */ ++#define TITAN_GE_FC_NONE 0x0 ++#define TITAN_GE_FC_FULL 0x1 ++#define TITAN_GE_FC_TX_PAUSE 0x2 ++#define TITAN_GE_FC_RX_PAUSE 0x3 ++ ++/* Duplex Settings */ ++#define TITAN_GE_FULL_DUPLEX 0x1 ++#define TITAN_GE_HALF_DUPLEX 0x2 ++ ++/* Speed settings */ ++#define TITAN_GE_SPEED_1000 0x1 ++#define TITAN_GE_SPEED_100 0x2 ++#define TITAN_GE_SPEED_10 0x3 ++ ++/* Debugging info only */ ++#undef TITAN_DEBUG ++ ++/* Keep the rings in the Titan's SSRAM */ ++#define TITAN_RX_RING_IN_SRAM ++ ++#ifdef CONFIG_64BIT ++#define TITAN_GE_IE_MASK 0xfffffffffb001b64 ++#define TITAN_GE_IE_STATUS 0xfffffffffb001b60 ++#else ++#define TITAN_GE_IE_MASK 0xfb001b64 ++#define TITAN_GE_IE_STATUS 0xfb001b60 ++#endif ++ ++/* Support for Jumbo Frames */ ++#undef TITAN_GE_JUMBO_FRAMES ++ ++/* Rx buffer size */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++#define TITAN_GE_JUMBO_BUFSIZE 9080 ++#else ++#define TITAN_GE_STD_BUFSIZE 1580 ++#endif ++ ++/* ++ * Tx and Rx Interrupt Coalescing parameter. These values are ++ * for 1 Ghz processor. Rx coalescing can be taken care of ++ * by NAPI. NAPI is adaptive and hence useful. Tx coalescing ++ * is not adaptive. Hence, these values need to be adjusted ++ * based on load, CPU speed etc. ++ */ ++#define TITAN_GE_RX_COAL 150 ++#define TITAN_GE_TX_COAL 300 ++ ++#if defined(__BIG_ENDIAN) ++ ++/* Define the Rx descriptor */ ++typedef struct eth_rx_desc { ++ u32 reserved; /* Unused */ ++ u32 buffer_addr; /* CPU buffer address */ ++ u32 cmd_sts; /* Command and Status */ ++ u32 buffer; /* XDMA buffer address */ ++} titan_ge_rx_desc; ++ ++/* Define the Tx descriptor */ ++typedef struct eth_tx_desc { ++ u16 cmd_sts; /* Command, Status and Buffer count */ ++ u16 buffer_len; /* Length of the buffer */ ++ u32 buffer_addr; /* Physical address of the buffer */ ++} titan_ge_tx_desc; ++ ++#elif defined(__LITTLE_ENDIAN) ++ ++/* Define the Rx descriptor */ ++typedef struct eth_rx_desc { ++ u32 buffer_addr; /* CPU buffer address */ ++ u32 reserved; /* Unused */ ++ u32 buffer; /* XDMA buffer address */ ++ u32 cmd_sts; /* Command and Status */ ++} titan_ge_rx_desc; ++ ++/* Define the Tx descriptor */ ++typedef struct eth_tx_desc { ++ u32 buffer_addr; /* Physical address of the buffer */ ++ u16 buffer_len; /* Length of the buffer */ ++ u16 cmd_sts; /* Command, Status and Buffer count */ ++} titan_ge_tx_desc; ++#endif ++ ++/* Default Tx Queue Size */ ++#define TITAN_GE_TX_QUEUE 128 ++#define TITAN_TX_RING_BYTES (TITAN_GE_TX_QUEUE * sizeof(struct eth_tx_desc)) ++ ++/* Default Rx Queue Size */ ++#define TITAN_GE_RX_QUEUE 64 ++#define TITAN_RX_RING_BYTES (TITAN_GE_RX_QUEUE * sizeof(struct eth_rx_desc)) ++ ++/* Packet Structure */ ++typedef struct _pkt_info { ++ unsigned int len; ++ unsigned int cmd_sts; ++ unsigned int buffer; ++ struct sk_buff *skb; ++ unsigned int checksum; ++} titan_ge_packet; ++ ++ ++#define PHYS_CNT 3 ++ ++/* Titan Port specific data structure */ ++typedef struct _eth_port_ctrl { ++ unsigned int port_num; ++ u8 port_mac_addr[6]; ++ ++ /* Rx descriptor pointers */ ++ int rx_curr_desc_q, rx_used_desc_q; ++ ++ /* Tx descriptor pointers */ ++ int tx_curr_desc_q, tx_used_desc_q; ++ ++ /* Rx descriptor area */ ++ volatile titan_ge_rx_desc *rx_desc_area; ++ unsigned int rx_desc_area_size; ++ struct sk_buff* rx_skb[TITAN_GE_RX_QUEUE]; ++ ++ /* Tx Descriptor area */ ++ volatile titan_ge_tx_desc *tx_desc_area; ++ unsigned int tx_desc_area_size; ++ struct sk_buff* tx_skb[TITAN_GE_TX_QUEUE]; ++ ++ /* Timeout task */ ++ struct work_struct tx_timeout_task; ++ ++ /* DMA structures and handles */ ++ dma_addr_t tx_dma; ++ dma_addr_t rx_dma; ++ dma_addr_t tx_dma_array[TITAN_GE_TX_QUEUE]; ++ ++ /* Device lock */ ++ spinlock_t lock; ++ ++ unsigned int tx_ring_skbs; ++ unsigned int rx_ring_size; ++ unsigned int tx_ring_size; ++ unsigned int rx_ring_skbs; ++ ++ struct net_device_stats stats; ++ ++ /* Tx and Rx coalescing */ ++ unsigned long rx_int_coal; ++ unsigned long tx_int_coal; ++ ++ /* Threshold for replenishing the Rx and Tx rings */ ++ unsigned int tx_threshold; ++ unsigned int rx_threshold; ++ ++ /* NAPI work limit */ ++ unsigned int rx_work_limit; ++} titan_ge_port_info; ++ ++/* Titan specific constants */ ++#define TITAN_ETH_PORT_IRQ 3 ++ ++/* Max Rx buffer */ ++#define TITAN_GE_MAX_RX_BUFFER 65536 ++ ++/* Tx and Rx Error */ ++#define TITAN_GE_ERROR ++ ++/* Rx Descriptor Command and Status */ ++ ++#define TITAN_GE_RX_CRC_ERROR TITAN_BIT27 /* crc error */ ++#define TITAN_GE_RX_OVERFLOW_ERROR TITAN_BIT15 /* overflow */ ++#define TITAN_GE_RX_BUFFER_OWNED TITAN_BIT21 /* buffer ownership */ ++#define TITAN_GE_RX_STP TITAN_BIT31 /* start of packet */ ++#define TITAN_GE_RX_BAM TITAN_BIT30 /* broadcast address match */ ++#define TITAN_GE_RX_PAM TITAN_BIT28 /* physical address match */ ++#define TITAN_GE_RX_LAFM TITAN_BIT29 /* logical address filter match */ ++#define TITAN_GE_RX_VLAN TITAN_BIT26 /* virtual lans */ ++#define TITAN_GE_RX_PERR TITAN_BIT19 /* packet error */ ++#define TITAN_GE_RX_TRUNC TITAN_BIT20 /* packet size greater than 32 buffers */ ++ ++/* Tx Descriptor Command */ ++#define TITAN_GE_TX_BUFFER_OWNED TITAN_BIT5 /* buffer ownership */ ++#define TITAN_GE_TX_ENABLE_INTERRUPT TITAN_BIT15 /* Interrupt Enable */ ++ ++/* Return Status */ ++#define TITAN_OK 0x1 /* Good Status */ ++#define TITAN_ERROR 0x2 /* Error Status */ ++ ++/* MIB specific register offset */ ++#define TITAN_GE_MSTATX_STATS_BASE_LOW 0x0800 /* MSTATX COUNTL[15:0] */ ++#define TITAN_GE_MSTATX_STATS_BASE_MID 0x0804 /* MSTATX COUNTM[15:0] */ ++#define TITAN_GE_MSTATX_STATS_BASE_HI 0x0808 /* MSTATX COUNTH[7:0] */ ++#define TITAN_GE_MSTATX_CONTROL 0x0828 /* MSTATX Control */ ++#define TITAN_GE_MSTATX_VARIABLE_SELECT 0x082C /* MSTATX Variable Select */ ++ ++/* MIB counter offsets, add to the TITAN_GE_MSTATX_STATS_BASE_XXX */ ++#define TITAN_GE_MSTATX_RXFRAMESOK 0x0040 ++#define TITAN_GE_MSTATX_RXOCTETSOK 0x0050 ++#define TITAN_GE_MSTATX_RXFRAMES 0x0060 ++#define TITAN_GE_MSTATX_RXOCTETS 0x0070 ++#define TITAN_GE_MSTATX_RXUNICASTFRAMESOK 0x0080 ++#define TITAN_GE_MSTATX_RXBROADCASTFRAMESOK 0x0090 ++#define TITAN_GE_MSTATX_RXMULTICASTFRAMESOK 0x00A0 ++#define TITAN_GE_MSTATX_RXTAGGEDFRAMESOK 0x00B0 ++#define TITAN_GE_MSTATX_RXMACPAUSECONTROLFRAMESOK 0x00C0 ++#define TITAN_GE_MSTATX_RXMACCONTROLFRAMESOK 0x00D0 ++#define TITAN_GE_MSTATX_RXFCSERROR 0x00E0 ++#define TITAN_GE_MSTATX_RXALIGNMENTERROR 0x00F0 ++#define TITAN_GE_MSTATX_RXSYMBOLERROR 0x0100 ++#define TITAN_GE_MSTATX_RXLAYER1ERROR 0x0110 ++#define TITAN_GE_MSTATX_RXINRANGELENGTHERROR 0x0120 ++#define TITAN_GE_MSTATX_RXLONGLENGTHERROR 0x0130 ++#define TITAN_GE_MSTATX_RXLONGLENGTHCRCERROR 0x0140 ++#define TITAN_GE_MSTATX_RXSHORTLENGTHERROR 0x0150 ++#define TITAN_GE_MSTATX_RXSHORTLLENGTHCRCERROR 0x0160 ++#define TITAN_GE_MSTATX_RXFRAMES64OCTETS 0x0170 ++#define TITAN_GE_MSTATX_RXFRAMES65TO127OCTETS 0x0180 ++#define TITAN_GE_MSTATX_RXFRAMES128TO255OCTETS 0x0190 ++#define TITAN_GE_MSTATX_RXFRAMES256TO511OCTETS 0x01A0 ++#define TITAN_GE_MSTATX_RXFRAMES512TO1023OCTETS 0x01B0 ++#define TITAN_GE_MSTATX_RXFRAMES1024TO1518OCTETS 0x01C0 ++#define TITAN_GE_MSTATX_RXFRAMES1519TOMAXSIZE 0x01D0 ++#define TITAN_GE_MSTATX_RXSTATIONADDRESSFILTERED 0x01E0 ++#define TITAN_GE_MSTATX_RXVARIABLE 0x01F0 ++#define TITAN_GE_MSTATX_GENERICADDRESSFILTERED 0x0200 ++#define TITAN_GE_MSTATX_UNICASTFILTERED 0x0210 ++#define TITAN_GE_MSTATX_MULTICASTFILTERED 0x0220 ++#define TITAN_GE_MSTATX_BROADCASTFILTERED 0x0230 ++#define TITAN_GE_MSTATX_HASHFILTERED 0x0240 ++#define TITAN_GE_MSTATX_TXFRAMESOK 0x0250 ++#define TITAN_GE_MSTATX_TXOCTETSOK 0x0260 ++#define TITAN_GE_MSTATX_TXOCTETS 0x0270 ++#define TITAN_GE_MSTATX_TXTAGGEDFRAMESOK 0x0280 ++#define TITAN_GE_MSTATX_TXMACPAUSECONTROLFRAMESOK 0x0290 ++#define TITAN_GE_MSTATX_TXFCSERROR 0x02A0 ++#define TITAN_GE_MSTATX_TXSHORTLENGTHERROR 0x02B0 ++#define TITAN_GE_MSTATX_TXLONGLENGTHERROR 0x02C0 ++#define TITAN_GE_MSTATX_TXSYSTEMERROR 0x02D0 ++#define TITAN_GE_MSTATX_TXMACERROR 0x02E0 ++#define TITAN_GE_MSTATX_TXCARRIERSENSEERROR 0x02F0 ++#define TITAN_GE_MSTATX_TXSQETESTERROR 0x0300 ++#define TITAN_GE_MSTATX_TXUNICASTFRAMESOK 0x0310 ++#define TITAN_GE_MSTATX_TXBROADCASTFRAMESOK 0x0320 ++#define TITAN_GE_MSTATX_TXMULTICASTFRAMESOK 0x0330 ++#define TITAN_GE_MSTATX_TXUNICASTFRAMESATTEMPTED 0x0340 ++#define TITAN_GE_MSTATX_TXBROADCASTFRAMESATTEMPTED 0x0350 ++#define TITAN_GE_MSTATX_TXMULTICASTFRAMESATTEMPTED 0x0360 ++#define TITAN_GE_MSTATX_TXFRAMES64OCTETS 0x0370 ++#define TITAN_GE_MSTATX_TXFRAMES65TO127OCTETS 0x0380 ++#define TITAN_GE_MSTATX_TXFRAMES128TO255OCTETS 0x0390 ++#define TITAN_GE_MSTATX_TXFRAMES256TO511OCTETS 0x03A0 ++#define TITAN_GE_MSTATX_TXFRAMES512TO1023OCTETS 0x03B0 ++#define TITAN_GE_MSTATX_TXFRAMES1024TO1518OCTETS 0x03C0 ++#define TITAN_GE_MSTATX_TXFRAMES1519TOMAXSIZE 0x03D0 ++#define TITAN_GE_MSTATX_TXVARIABLE 0x03E0 ++#define TITAN_GE_MSTATX_RXSYSTEMERROR 0x03F0 ++#define TITAN_GE_MSTATX_SINGLECOLLISION 0x0400 ++#define TITAN_GE_MSTATX_MULTIPLECOLLISION 0x0410 ++#define TITAN_GE_MSTATX_DEFERREDXMISSIONS 0x0420 ++#define TITAN_GE_MSTATX_LATECOLLISIONS 0x0430 ++#define TITAN_GE_MSTATX_ABORTEDDUETOXSCOLLS 0x0440 ++ ++/* Interrupt specific defines */ ++#define TITAN_GE_DEVICE_ID 0x0000 /* Device ID */ ++#define TITAN_GE_RESET 0x0004 /* Reset reg */ ++#define TITAN_GE_TSB_CTRL_0 0x000C /* TSB Control reg 0 */ ++#define TITAN_GE_TSB_CTRL_1 0x0010 /* TSB Control reg 1 */ ++#define TITAN_GE_INTR_GRP0_STATUS 0x0040 /* General Interrupt Group 0 Status */ ++#define TITAN_GE_INTR_XDMA_CORE_A 0x0048 /* XDMA Channel Interrupt Status, Core A*/ ++#define TITAN_GE_INTR_XDMA_CORE_B 0x004C /* XDMA Channel Interrupt Status, Core B*/ ++#define TITAN_GE_INTR_XDMA_IE 0x0058 /* XDMA Channel Interrupt Enable */ ++#define TITAN_GE_SDQPF_ECC_INTR 0x480C /* SDQPF ECC Interrupt Status */ ++#define TITAN_GE_SDQPF_RXFIFO_CTL 0x4828 /* SDQPF RxFifo Control and Interrupt Enb*/ ++#define TITAN_GE_SDQPF_RXFIFO_INTR 0x482C /* SDQPF RxFifo Interrupt Status */ ++#define TITAN_GE_SDQPF_TXFIFO_CTL 0x4928 /* SDQPF TxFifo Control and Interrupt Enb*/ ++#define TITAN_GE_SDQPF_TXFIFO_INTR 0x492C /* SDQPF TxFifo Interrupt Status */ ++#define TITAN_GE_SDQPF_RXFIFO_0 0x4840 /* SDQPF RxFIFO Enable */ ++#define TITAN_GE_SDQPF_TXFIFO_0 0x4940 /* SDQPF TxFIFO Enable */ ++#define TITAN_GE_XDMA_CONFIG 0x5000 /* XDMA Global Configuration */ ++#define TITAN_GE_XDMA_INTR_SUMMARY 0x5010 /* XDMA Interrupt Summary */ ++#define TITAN_GE_XDMA_BUFADDRPRE 0x5018 /* XDMA Buffer Address Prefix */ ++#define TITAN_GE_XDMA_DESCADDRPRE 0x501C /* XDMA Descriptor Address Prefix */ ++#define TITAN_GE_XDMA_PORTWEIGHT 0x502C /* XDMA Port Weight Configuration */ ++ ++/* Rx MAC defines */ ++#define TITAN_GE_RMAC_CONFIG_1 0x1200 /* RMAC Configuration 1 */ ++#define TITAN_GE_RMAC_CONFIG_2 0x1204 /* RMAC Configuration 2 */ ++#define TITAN_GE_RMAC_MAX_FRAME_LEN 0x1208 /* RMAC Max Frame Length */ ++#define TITAN_GE_RMAC_STATION_HI 0x120C /* Rx Station Address High */ ++#define TITAN_GE_RMAC_STATION_MID 0x1210 /* Rx Station Address Middle */ ++#define TITAN_GE_RMAC_STATION_LOW 0x1214 /* Rx Station Address Low */ ++#define TITAN_GE_RMAC_LINK_CONFIG 0x1218 /* RMAC Link Configuration */ ++ ++/* Tx MAC defines */ ++#define TITAN_GE_TMAC_CONFIG_1 0x1240 /* TMAC Configuration 1 */ ++#define TITAN_GE_TMAC_CONFIG_2 0x1244 /* TMAC Configuration 2 */ ++#define TITAN_GE_TMAC_IPG 0x1248 /* TMAC Inter-Packet Gap */ ++#define TITAN_GE_TMAC_STATION_HI 0x124C /* Tx Station Address High */ ++#define TITAN_GE_TMAC_STATION_MID 0x1250 /* Tx Station Address Middle */ ++#define TITAN_GE_TMAC_STATION_LOW 0x1254 /* Tx Station Address Low */ ++#define TITAN_GE_TMAC_MAX_FRAME_LEN 0x1258 /* TMAC Max Frame Length */ ++#define TITAN_GE_TMAC_MIN_FRAME_LEN 0x125C /* TMAC Min Frame Length */ ++#define TITAN_GE_TMAC_PAUSE_FRAME_TIME 0x1260 /* TMAC Pause Frame Time */ ++#define TITAN_GE_TMAC_PAUSE_FRAME_INTERVAL 0x1264 /* TMAC Pause Frame Interval */ ++ ++/* GMII register */ ++#define TITAN_GE_GMII_INTERRUPT_STATUS 0x1348 /* GMII Interrupt Status */ ++#define TITAN_GE_GMII_CONFIG_GENERAL 0x134C /* GMII Configuration General */ ++#define TITAN_GE_GMII_CONFIG_MODE 0x1350 /* GMII Configuration Mode */ ++ ++/* Tx and Rx XDMA defines */ ++#define TITAN_GE_INT_COALESCING 0x5030 /* Interrupt Coalescing */ ++#define TITAN_GE_CHANNEL0_CONFIG 0x5040 /* Channel 0 XDMA config */ ++#define TITAN_GE_CHANNEL0_INTERRUPT 0x504c /* Channel 0 Interrupt Status */ ++#define TITAN_GE_GDI_INTERRUPT_ENABLE 0x5050 /* IE for the GDI Errors */ ++#define TITAN_GE_CHANNEL0_PACKET 0x5060 /* Channel 0 Packet count */ ++#define TITAN_GE_CHANNEL0_BYTE 0x5064 /* Channel 0 Byte count */ ++#define TITAN_GE_CHANNEL0_TX_DESC 0x5054 /* Channel 0 Tx first desc */ ++#define TITAN_GE_CHANNEL0_RX_DESC 0x5058 /* Channel 0 Rx first desc */ ++ ++/* AFX (Address Filter Exact) register offsets for Slice 0 */ ++#define TITAN_GE_AFX_EXACT_MATCH_LOW 0x1100 /* AFX Exact Match Address Low*/ ++#define TITAN_GE_AFX_EXACT_MATCH_MID 0x1104 /* AFX Exact Match Address Mid*/ ++#define TITAN_GE_AFX_EXACT_MATCH_HIGH 0x1108 /* AFX Exact Match Address Hi */ ++#define TITAN_GE_AFX_EXACT_MATCH_VID 0x110C /* AFX Exact Match VID */ ++#define TITAN_GE_AFX_MULTICAST_HASH_LOW 0x1110 /* AFX Multicast HASH Low */ ++#define TITAN_GE_AFX_MULTICAST_HASH_MIDLOW 0x1114 /* AFX Multicast HASH MidLow */ ++#define TITAN_GE_AFX_MULTICAST_HASH_MIDHI 0x1118 /* AFX Multicast HASH MidHi */ ++#define TITAN_GE_AFX_MULTICAST_HASH_HI 0x111C /* AFX Multicast HASH Hi */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 0x1120 /* AFX Address Filter Ctrl 0 */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 0x1124 /* AFX Address Filter Ctrl 1 */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 0x1128 /* AFX Address Filter Ctrl 2 */ ++ ++/* Traffic Groomer block */ ++#define TITAN_GE_TRTG_CONFIG 0x1000 /* TRTG Config */ ++ ++#endif /* _TITAN_GE_H_ */ ++ +diff --git a/drivers/net/titan_mdio.c b/drivers/net/titan_mdio.c +new file mode 100644 +index 0000000..8a8785b +--- /dev/null ++++ b/drivers/net/titan_mdio.c +@@ -0,0 +1,217 @@ ++/* ++ * drivers/net/titan_mdio.c - Driver for Titan ethernet ports ++ * ++ * Copyright (C) 2003 PMC-Sierra Inc. ++ * Author : Manish Lachwani (lachwani@pmc-sierra.com) ++ * ++ * 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. ++ * ++ * Management Data IO (MDIO) driver for the Titan GMII. Interacts with the Marvel PHY ++ * on the Titan. No support for the TBI as yet. ++ * ++ */ ++ ++#include "titan_mdio.h" ++ ++#define MDIO_DEBUG ++ ++/* ++ * Local constants ++ */ ++#define MAX_CLKA 1023 ++#define MAX_PHY_DEV 31 ++#define MAX_PHY_REG 31 ++#define WRITEADDRS_OPCODE 0x0 ++#define READ_OPCODE 0x2 ++#define WRITE_OPCODE 0x1 ++#define MAX_MDIO_POLL 100 ++ ++/* ++ * Titan MDIO and SCMB registers ++ */ ++#define TITAN_GE_SCMB_CONTROL 0x01c0 /* SCMB Control */ ++#define TITAN_GE_SCMB_CLKA 0x01c4 /* SCMB Clock A */ ++#define TITAN_GE_MDIO_COMMAND 0x01d0 /* MDIO Command */ ++#define TITAN_GE_MDIO_DEVICE_PORT_ADDRESS 0x01d4 /* MDIO Device and Port addrs */ ++#define TITAN_GE_MDIO_DATA 0x01d8 /* MDIO Data */ ++#define TITAN_GE_MDIO_INTERRUPTS 0x01dC /* MDIO Interrupts */ ++ ++/* ++ * Function to poll the MDIO ++ */ ++static int titan_ge_mdio_poll(void) ++{ ++ int i, val; ++ ++ for (i = 0; i < MAX_MDIO_POLL; i++) { ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ ++ if (!(val & 0x8000)) ++ return TITAN_GE_MDIO_GOOD; ++ } ++ ++ return TITAN_GE_MDIO_ERROR; ++} ++ ++ ++/* ++ * Initialize and configure the MDIO ++ */ ++int titan_ge_mdio_setup(titan_ge_mdio_config *titan_mdio) ++{ ++ unsigned long val; ++ ++ /* Reset the SCMB and program into MDIO mode*/ ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x9000); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x1000); ++ ++ /* CLK A */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_SCMB_CLKA); ++ val = ( (val & ~(0x03ff)) | (titan_mdio->clka & 0x03ff)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CLKA, val); ++ ++ /* Preamble Suppresion */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0001)) | (titan_mdio->mdio_spre & 0x0001)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ /* MDIO mode */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x4000)) | (titan_mdio->mdio_mode & 0x4000)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Set the PHY address in indirect mode ++ */ ++int titan_ge_mdio_inaddrs(int dev_addr, int reg_addr) ++{ ++ volatile unsigned long val; ++ ++ /* Setup the PHY device */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ /* Write the new address */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (WRITEADDRS_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Read the MDIO register. This is what the individual parametes mean: ++ * ++ * dev_addr : PHY ID ++ * reg_addr : register offset ++ * ++ * See the spec for the Titan MAC. We operate in the Direct Mode. ++ */ ++ ++#define MAX_RETRIES 2 ++ ++int titan_ge_mdio_read(int dev_addr, int reg_addr, unsigned int *pdata) ++{ ++ volatile unsigned long val; ++ int retries = 0; ++ ++ /* Setup the PHY device */ ++ ++again: ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ val |= 0x4000; ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ udelay(30); ++ ++ /* Issue the read command */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (READ_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ udelay(30); ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ *pdata = (unsigned int)TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DATA); ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS); ++ ++ udelay(30); ++ ++ if (val & 0x2) { ++ if (retries == MAX_RETRIES) ++ return TITAN_GE_MDIO_ERROR; ++ else { ++ retries++; ++ goto again; ++ } ++ } ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Write to the MDIO register ++ * ++ * dev_addr : PHY ID ++ * reg_addr : register that needs to be written to ++ * ++ */ ++int titan_ge_mdio_write(int dev_addr, int reg_addr, unsigned int data) ++{ ++ volatile unsigned long val; ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ /* Setup the PHY device */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ val |= 0x4000; ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ udelay(30); ++ ++ /* Setup the data to write */ ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DATA, data); ++ ++ udelay(30); ++ ++ /* Issue the write command */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (WRITE_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ udelay(30); ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS); ++ if (val & 0x2) ++ return TITAN_GE_MDIO_ERROR; ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ +diff --git a/drivers/net/titan_mdio.h b/drivers/net/titan_mdio.h +new file mode 100644 +index 0000000..5d23344 +--- /dev/null ++++ b/drivers/net/titan_mdio.h +@@ -0,0 +1,56 @@ ++/* ++ * MDIO used to interact with the PHY when using GMII/MII ++ */ ++#ifndef _TITAN_MDIO_H ++#define _TITAN_MDIO_H ++ ++#include ++#include ++#include ++#include "titan_ge.h" ++ ++ ++#define TITAN_GE_MDIO_ERROR (-9000) ++#define TITAN_GE_MDIO_GOOD 0 ++ ++#define TITAN_GE_MDIO_BASE titan_ge_base ++ ++#define TITAN_GE_MDIO_READ(offset) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) ++ ++#define TITAN_GE_MDIO_WRITE(offset, data) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) = (data) ++ ++ ++/* GMII specific registers */ ++#define TITAN_GE_MARVEL_PHY_ID 0x00 ++#define TITAN_PHY_AUTONEG_ADV 0x04 ++#define TITAN_PHY_LP_ABILITY 0x05 ++#define TITAN_GE_MDIO_MII_CTRL 0x09 ++#define TITAN_GE_MDIO_MII_EXTENDED 0x0f ++#define TITAN_GE_MDIO_PHY_CTRL 0x10 ++#define TITAN_GE_MDIO_PHY_STATUS 0x11 ++#define TITAN_GE_MDIO_PHY_IE 0x12 ++#define TITAN_GE_MDIO_PHY_IS 0x13 ++#define TITAN_GE_MDIO_PHY_LED 0x18 ++#define TITAN_GE_MDIO_PHY_LED_OVER 0x19 ++#define PHY_ANEG_TIME_WAIT 45 /* 45 seconds wait time */ ++ ++/* ++ * MDIO Config Structure ++ */ ++typedef struct { ++ unsigned int clka; ++ int mdio_spre; ++ int mdio_mode; ++} titan_ge_mdio_config; ++ ++/* ++ * Function Prototypes ++ */ ++int titan_ge_mdio_setup(titan_ge_mdio_config *); ++int titan_ge_mdio_inaddrs(int, int); ++int titan_ge_mdio_read(int, int, unsigned int *); ++int titan_ge_mdio_write(int, int, unsigned int); ++ ++#endif /* _TITAN_MDIO_H */ +diff --git a/drivers/net/wireless/rtl818x/rtl8187/rfkill.c b/drivers/net/wireless/rtl818x/rtl8187/rfkill.c +index 3411671..4d252c1 100644 +--- a/drivers/net/wireless/rtl818x/rtl8187/rfkill.c ++++ b/drivers/net/wireless/rtl818x/rtl8187/rfkill.c +@@ -22,6 +22,10 @@ + + static bool rtl8187_is_radio_enabled(struct rtl8187_priv *priv) + { ++#ifdef CONFIG_LEMOTE_MACH2F ++ /* Allow users to activate rfkill through only the /sys interface */ ++ return 1; ++#else + u8 gpio; + + gpio = rtl818x_ioread8(priv, &priv->map->GPIO0); +@@ -29,6 +33,7 @@ static bool rtl8187_is_radio_enabled(struct rtl8187_priv *priv) + gpio = rtl818x_ioread8(priv, &priv->map->GPIO1); + + return gpio & priv->rfkill_mask; ++#endif + } + + void rtl8187_rfkill_init(struct ieee80211_hw *hw) +diff --git a/drivers/platform/Kconfig b/drivers/platform/Kconfig +index 09fde58..eacabd1 100644 +--- a/drivers/platform/Kconfig ++++ b/drivers/platform/Kconfig +@@ -4,5 +4,8 @@ endif + if GOLDFISH + source "drivers/platform/goldfish/Kconfig" + endif ++if MIPS ++source "drivers/platform/mips/Kconfig" ++endif + + source "drivers/platform/chrome/Kconfig" +diff --git a/drivers/platform/Makefile b/drivers/platform/Makefile +index 3656b7b..ca26925 100644 +--- a/drivers/platform/Makefile ++++ b/drivers/platform/Makefile +@@ -3,6 +3,7 @@ + # + + obj-$(CONFIG_X86) += x86/ ++obj-$(CONFIG_MIPS) += mips/ + obj-$(CONFIG_OLPC) += olpc/ + obj-$(CONFIG_GOLDFISH) += goldfish/ + obj-$(CONFIG_CHROME_PLATFORMS) += chrome/ +diff --git a/drivers/platform/mips/Kconfig b/drivers/platform/mips/Kconfig +new file mode 100644 +index 0000000..722d690 +--- /dev/null ++++ b/drivers/platform/mips/Kconfig +@@ -0,0 +1,60 @@ ++# ++# MIPS Platform Specific Drivers ++# ++ ++menuconfig MIPS_PLATFORM_DEVICES ++ bool "MIPS Platform Specific Device Drivers" ++ default y ++ help ++ Say Y here to get to see options for device drivers of various ++ MIPS platforms, including vendor-specific netbook/laptop/pc extension ++ drivers. This option alone does not add any kernel code. ++ ++ If you say N, all options in this submenu will be skipped and disabled. ++ ++if MIPS_PLATFORM_DEVICES ++ ++config LEMOTE_YEELOONG2F ++ tristate "Lemote YeeLoong Laptop" ++ depends on LEMOTE_MACH2F ++ select BACKLIGHT_LCD_SUPPORT ++ select LCD_CLASS_DEVICE ++ select BACKLIGHT_CLASS_DEVICE ++ select POWER_SUPPLY ++ select HWMON ++ select VIDEO_OUTPUT_CONTROL ++ select INPUT_SPARSEKMAP ++ select INPUT_EVDEV ++ depends on INPUT ++ default m ++ help ++ YeeLoong netbook is a mini laptop made by Lemote, which is basically ++ compatible to FuLoong2F mini PC, but it has an extra Embedded ++ Controller(kb3310b) for battery, hotkey, backlight, temperature and ++ fan management. ++ ++config LEMOTE_LYNLOONG2F ++ tristate "Lemote LynLoong PC" ++ depends on LEMOTE_MACH2F ++ select BACKLIGHT_LCD_SUPPORT ++ select BACKLIGHT_CLASS_DEVICE ++ select VIDEO_OUTPUT_CONTROL ++ default m ++ help ++ LynLoong PC is an AllINONE machine made by Lemote, which is basically ++ compatible to FuLoong2F Mini PC, the only difference is that it has a ++ size-fixed screen: 1360x768 with sisfb video driver. and also, it has ++ its own specific suspend support. ++ ++config GDIUM_LAPTOP ++ tristate "GDIUM laptop extras" ++ depends on DEXXON_GDIUM ++ select POWER_SUPPLY ++ select I2C ++ select INPUT_POLLDEV ++ default m ++ help ++ This mini-driver drives the ST7 chipset present in the Gdium laptops. ++ This gives battery support, wlan rfkill. ++ ++endif # MIPS_PLATFORM_DEVICES +diff --git a/drivers/platform/mips/Makefile b/drivers/platform/mips/Makefile +new file mode 100644 +index 0000000..f013e78 +--- /dev/null ++++ b/drivers/platform/mips/Makefile +@@ -0,0 +1,9 @@ ++# ++# Makefile for MIPS Platform-Specific Drivers ++# ++ ++obj-$(CONFIG_LEMOTE_YEELOONG2F) += yeeloong_laptop.o # yeeloong_ecrom.o ++CFLAGS_yeeloong_laptop.o = -I$(srctree)/arch/mips/loongson/lemote-2f ++ ++obj-$(CONFIG_LEMOTE_LYNLOONG2F) += lynloong_pc.o ++obj-$(CONFIG_GDIUM_LAPTOP) += gdium_laptop.o +diff --git a/drivers/platform/mips/gdium_laptop.c b/drivers/platform/mips/gdium_laptop.c +new file mode 100644 +index 0000000..41a65ad +--- /dev/null ++++ b/drivers/platform/mips/gdium_laptop.c +@@ -0,0 +1,927 @@ ++/* ++ * gdium_laptop -- Gdium laptop extras ++ * ++ * Arnaud Patard ++ * ++ * 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. ++ * ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* For input device */ ++#define SCAN_INTERVAL 150 ++ ++/* For battery status */ ++#define BAT_SCAN_INTERVAL 500 ++ ++#define EC_FIRM_VERSION 0 ++ ++#if CONFIG_GDIUM_VERSION > 2 ++#define EC_REG_BASE 1 ++#else ++#define EC_REG_BASE 0 ++#endif ++ ++#define EC_STATUS (EC_REG_BASE+0) ++#define EC_STATUS_LID (1<<0) ++#define EC_STATUS_PWRBUT (1<<1) ++#define EC_STATUS_BATID (1<<2) /* this bit has no real meaning on v2. */ ++ /* Same as EC_STATUS_ADAPT */ ++ /* but on v3 it's BATID which mean bat present */ ++#define EC_STATUS_SYS_POWER (1<<3) ++#define EC_STATUS_WLAN (1<<4) ++#define EC_STATUS_ADAPT (1<<5) ++ ++#define EC_CTRL (EC_REG_BASE+1) ++#define EC_CTRL_DDR_CLK (1<<0) ++#define EC_CTRL_CHARGE_LED (1<<1) ++#define EC_CTRL_BEEP (1<<2) ++#define EC_CTRL_SUSB (1<<3) /* memory power */ ++#define EC_CTRL_TRICKLE (1<<4) ++#define EC_CTRL_WLAN_EN (1<<5) ++#define EC_CTRL_SUSC (1<<6) /* main power */ ++#define EC_CTRL_CHARGE_EN (1<<7) ++ ++#define EC_BAT_LOW (EC_REG_BASE+2) ++#define EC_BAT_HIGH (EC_REG_BASE+3) ++ ++#define EC_SIGN (EC_REG_BASE+4) ++#define EC_SIGN_OS 0xAE /* write 0xae to control pm stuff */ ++#define EC_SIGN_EC 0x00 /* write 0x00 to let the st7 manage pm stuff */ ++ ++#if 0 ++#define EC_TEST (EC_REG_BASE+5) /* Depending on firmware version this register */ ++ /* may be the programmation register so don't play */ ++ /* with it */ ++#endif ++ ++#define BAT_VOLT_PRESENT 500000 /* Min voltage to consider battery present uV */ ++#define BAT_MIN 7000000 /* Min battery voltage in uV */ ++#define BAT_MIN_MV 7000 /* Min battery voltage in mV */ ++#define BAT_TRICKLE_EN 8000000 /* Charging at 1.4A before 8.0V and then charging at 0.25A */ ++#define BAT_MAX 7950000 /* Max battery voltage ~8V in V */ ++#define BAT_MAX_MV 7950 /* Max battery voltage ~8V in V */ ++#define BAT_READ_ERROR 300000 /* battery read error of 0.3V */ ++#define BAT_READ_ERROR_MV 300 /* battery read error of 0.3V */ ++ ++#define SM502_WLAN_ON (224+16)/* SM502 GPIO16 may be used on gdium v2 (v3?) as wlan_on */ ++ /* when R422 is connected */ ++ ++static unsigned char verbose; ++static unsigned char gpio16; ++static unsigned char ec; ++module_param(verbose, byte, S_IRUGO | S_IWUSR); ++MODULE_PARM_DESC(verbose, "Add some debugging messages"); ++module_param(gpio16, byte, S_IRUGO); ++MODULE_PARM_DESC(gpio16, "Enable wlan_on signal on SM502"); ++module_param(ec, byte, S_IRUGO); ++MODULE_PARM_DESC(ec, "Let the ST7 handle the battery (default OS)"); ++ ++struct gdium_laptop_data { ++ struct i2c_client *client; ++ struct input_polled_dev *input_polldev; ++ struct dentry *debugfs; ++ struct mutex mutex; ++ struct platform_device *bat_pdev; ++ struct power_supply gdium_ac; ++ struct power_supply gdium_battery; ++ struct workqueue_struct *workqueue; ++ struct delayed_work work; ++ char charge_cmd; ++ /* important registers value */ ++ char status; ++ char ctrl; ++ /* mV */ ++ int battery_level; ++ char version; ++}; ++ ++/**********************************************************************/ ++/* Low level I2C functions */ ++/* All are supposed to be called with mutex held */ ++/**********************************************************************/ ++/* ++ * Return battery voltage in mV ++ * >= 0 battery voltage ++ * < 0 error ++ */ ++static s32 ec_read_battery(struct i2c_client *client) ++{ ++ unsigned char bat_low, bat_high; ++ s32 data; ++ unsigned int ret; ++ ++ /* ++ * a = battery high ++ * b = battery low ++ * bat = a << 2 | b & 0x03; ++ * battery voltage = (bat / 1024) * 5 * 2 ++ */ ++ data = i2c_smbus_read_byte_data(client, EC_BAT_LOW); ++ if (data < 0) { ++ dev_err(&client->dev, "ec_read_bat: read bat_low failed\n"); ++ return data; ++ } ++ bat_low = data & 0xff; ++ if (verbose) ++ dev_info(&client->dev, "bat_low %x\n", bat_low); ++ ++ data = i2c_smbus_read_byte_data(client, EC_BAT_HIGH); ++ if (data < 0) { ++ dev_err(&client->dev, "ec_read_bat: read bat_high failed\n"); ++ return data; ++ } ++ bat_high = data & 0xff; ++ if (verbose) ++ dev_info(&client->dev, "bat_high %x\n", bat_high); ++ ++ ret = (bat_high << 2) | (bat_low & 3); ++ /* ++ * mV ++ */ ++ ret = (ret * 5 * 2) * 1000 / 1024; ++ ++ return ret; ++} ++ ++static s32 ec_read_version(struct i2c_client *client) ++{ ++#if CONFIG_GDIUM_VERSION > 2 ++ return i2c_smbus_read_byte_data(client, EC_FIRM_VERSION); ++#else ++ return 0; ++#endif ++} ++ ++static s32 ec_read_status(struct i2c_client *client) ++{ ++ return i2c_smbus_read_byte_data(client, EC_STATUS); ++} ++ ++static s32 ec_read_ctrl(struct i2c_client *client) ++{ ++ return i2c_smbus_read_byte_data(client, EC_CTRL); ++} ++ ++static s32 ec_write_ctrl(struct i2c_client *client, unsigned char newvalue) ++{ ++ return i2c_smbus_write_byte_data(client, EC_CTRL, newvalue); ++} ++ ++static s32 ec_read_sign(struct i2c_client *client) ++{ ++ return i2c_smbus_read_byte_data(client, EC_SIGN); ++} ++ ++static s32 ec_write_sign(struct i2c_client *client, unsigned char sign) ++{ ++ unsigned char value; ++ s32 ret; ++ ++ ret = i2c_smbus_write_byte_data(client, EC_SIGN, sign); ++ if (ret < 0) { ++ dev_err(&client->dev, "ec_set_control: write failed\n"); ++ return ret; ++ } ++ ++ value = ec_read_sign(client); ++ if (value != sign) { ++ dev_err(&client->dev, "Failed to set control to %s\n", ++ sign == EC_SIGN_OS ? "OS" : "EC"); ++ return -EIO; ++ } ++ ++ return 0; ++} ++ ++#if 0 ++static int ec_power_off(struct i2c_client *client) ++{ ++ char value; ++ int ret; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) { ++ dev_err(&client->dev, "ec_power_off: read failed\n"); ++ return value; ++ } ++ value &= ~(EC_CTRL_SUSB | EC_CTRL_SUSC); ++ ret = ec_write_ctrl(client, value); ++ if (ret < 0) { ++ dev_err(&client->dev, "ec_power_off: write failed\n"); ++ return ret; ++ } ++ ++ return 0; ++} ++#endif ++ ++static s32 ec_wlan_status(struct i2c_client *client) ++{ ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ return (value & EC_CTRL_WLAN_EN) ? 1 : 0; ++} ++ ++static s32 ec_wlan_en(struct i2c_client *client, int on) ++{ ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ value &= ~EC_CTRL_WLAN_EN; ++ if (on) ++ value |= EC_CTRL_WLAN_EN; ++ ++ return ec_write_ctrl(client, value&0xff); ++} ++ ++#if 0 ++static s32 ec_led_status(struct i2c_client *client) ++{ ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ return (value & EC_CTRL_CHARGE_LED) ? 1 : 0; ++} ++#endif ++ ++/* Changing the charging led status has never worked */ ++static s32 ec_led_en(struct i2c_client *client, int on) ++{ ++#if 0 ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ value &= ~EC_CTRL_CHARGE_LED; ++ if (on) ++ value |= EC_CTRL_CHARGE_LED; ++ return ec_write_ctrl(client, value&0xff); ++#else ++ return 0; ++#endif ++} ++ ++static s32 ec_charge_en(struct i2c_client *client, int on, int trickle) ++{ ++ s32 value; ++ s32 set = 0; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ if (on) ++ set |= EC_CTRL_CHARGE_EN; ++ if (trickle) ++ set |= EC_CTRL_TRICKLE; ++ ++ /* Be clever : don't change values if you don't need to */ ++ if ((value & (EC_CTRL_CHARGE_EN | EC_CTRL_TRICKLE)) == set) ++ return 0; ++ ++ value &= ~(EC_CTRL_CHARGE_EN | EC_CTRL_TRICKLE); ++ value |= set; ++ ec_led_en(client, on); ++ return ec_write_ctrl(client, (unsigned char)(value&0xff)); ++ ++} ++ ++/**********************************************************************/ ++/* Input functions */ ++/**********************************************************************/ ++struct gdium_keys { ++ int last_state; ++ int key_code; ++ int mask; ++ int type; ++}; ++ ++static struct gdium_keys gkeys[] = { ++ { ++ .key_code = KEY_WLAN, ++ .mask = EC_STATUS_WLAN, ++ .type = EV_KEY, ++ }, ++ { ++ .key_code = KEY_POWER, ++ .mask = EC_STATUS_PWRBUT, ++ .type = EV_KEY, /*EV_PWR,*/ ++ }, ++ { ++ .key_code = SW_LID, ++ .mask = EC_STATUS_LID, ++ .type = EV_SW, ++ }, ++}; ++ ++static void gdium_laptop_keys_poll(struct input_polled_dev *dev) ++{ ++ int state, i; ++ struct gdium_laptop_data *data = dev->private; ++ struct i2c_client *client = data->client; ++ struct input_dev *input = dev->input; ++ s32 status; ++ ++ mutex_lock(&data->mutex); ++ status = ec_read_status(client); ++ mutex_unlock(&data->mutex); ++ ++ if (status < 0) { ++ /* ++ * Don't know exactly which version of the firmware ++ * has this bug but when the power button is pressed ++ * there are i2c read errors :( ++ */ ++ if ((data->version >= 0x13) && !gkeys[1].last_state) { ++ input_event(input, EV_KEY, KEY_POWER, 1); ++ input_sync(input); ++ gkeys[1].last_state = 1; ++ } ++ return; ++ } ++ ++ for (i = 0; i < ARRAY_SIZE(gkeys); i++) { ++ state = status & gkeys[i].mask; ++ if (state != gkeys[i].last_state) { ++ gkeys[i].last_state = state; ++ /* for power key, we want power & key press/release event */ ++ if (gkeys[i].type == EV_PWR) { ++ input_event(input, EV_KEY, gkeys[i].key_code, !!state); ++ input_sync(input); ++ } ++ /* Disable wifi on key press but not key release */ ++ /* ++ * On firmware >= 0x13 the EC_STATUS_WLAN has it's ++ * original meaning of Wifi status and no more the ++ * wifi button status so we have to ignore the event ++ * on theses versions ++ */ ++ if (state && (gkeys[i].key_code == KEY_WLAN) && (data->version < 0x13)) { ++ mutex_lock(&data->mutex); ++ ec_wlan_en(client, !ec_wlan_status(client)); ++ if (gpio16) ++ gpio_set_value(SM502_WLAN_ON, !ec_wlan_status(client)); ++ mutex_unlock(&data->mutex); ++ } ++ ++ input_event(input, gkeys[i].type, gkeys[i].key_code, !!state); ++ input_sync(input); ++ } ++ } ++} ++ ++static int gdium_laptop_input_init(struct gdium_laptop_data *data) ++{ ++ struct i2c_client *client = data->client; ++ struct input_dev *input; ++ int ret, i; ++ ++ data->input_polldev = input_allocate_polled_device(); ++ if (!data->input_polldev) { ++ ret = -ENOMEM; ++ goto err; ++ } ++ ++ input = data->input_polldev->input; ++ input->evbit[0] = BIT(EV_KEY) | BIT_MASK(EV_PWR) | BIT_MASK(EV_SW); ++ data->input_polldev->poll = gdium_laptop_keys_poll; ++ data->input_polldev->poll_interval = SCAN_INTERVAL; ++ data->input_polldev->private = data; ++ input->name = "gdium-keys"; ++ input->dev.parent = &client->dev; ++ ++ input->id.bustype = BUS_HOST; ++ input->id.vendor = 0x0001; ++ input->id.product = 0x0001; ++ input->id.version = 0x0100; ++ ++ for (i = 0; i < ARRAY_SIZE(gkeys); i++) ++ input_set_capability(input, gkeys[i].type, gkeys[i].key_code); ++ ++ ret = input_register_polled_device(data->input_polldev); ++ if (ret) { ++ dev_err(&client->dev, "Unable to register button device\n"); ++ goto err_poll_dev; ++ } ++ ++ return 0; ++ ++err_poll_dev: ++ input_free_polled_device(data->input_polldev); ++err: ++ return ret; ++} ++ ++static void gdium_laptop_input_exit(struct gdium_laptop_data *data) ++{ ++ input_unregister_polled_device(data->input_polldev); ++ input_free_polled_device(data->input_polldev); ++} ++ ++/**********************************************************************/ ++/* Battery management */ ++/**********************************************************************/ ++static int gdium_ac_get_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ char status; ++ struct gdium_laptop_data *data = container_of(psy, struct gdium_laptop_data, gdium_ac); ++ int ret = 0; ++ ++ if (!data) { ++ pr_err("gdium-ac: gdium_laptop_data not found\n"); ++ return -EINVAL; ++ } ++ ++ status = data->status; ++ switch (psp) { ++ case POWER_SUPPLY_PROP_ONLINE: ++ val->intval = !!(status & EC_STATUS_ADAPT); ++ break; ++ default: ++ ret = -EINVAL; ++ break; ++ } ++ ++ return ret; ++} ++ ++#undef RET ++#define RET (val->intval) ++ ++static int gdium_battery_get_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ char status, ctrl; ++ struct gdium_laptop_data *data = container_of(psy, struct gdium_laptop_data, gdium_battery); ++ int percentage_capacity = 0, charge_now = 0, time_to_empty = 0; ++ int ret = 0, tmp; ++ ++ if (!data) { ++ pr_err("gdium-battery: gdium_laptop_data not found\n"); ++ return -EINVAL; ++ } ++ ++ status = data->status; ++ ctrl = data->ctrl; ++ switch (psp) { ++ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: ++ /* uAh */ ++ RET = 5000000; ++ break; ++ case POWER_SUPPLY_PROP_CURRENT_NOW: ++ case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW: ++ /* This formula is gotten by gnuplot with the statistic data */ ++ time_to_empty = (data->battery_level - BAT_MIN_MV + BAT_READ_ERROR_MV) * 113 - 29870; ++ if (psp == POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW) { ++ /* seconds */ ++ RET = time_to_empty / 10; ++ break; ++ } ++ /* fall through */ ++ case POWER_SUPPLY_PROP_CHARGE_NOW: ++ case POWER_SUPPLY_PROP_CAPACITY: { ++ tmp = data->battery_level * 1000; ++ /* > BAT_MIN to avoid negative values */ ++ percentage_capacity = 0; ++ if ((status & EC_STATUS_BATID) && (tmp > BAT_MIN)) ++ percentage_capacity = (tmp-BAT_MIN)*100/(BAT_MAX-BAT_MIN); ++ ++ if (percentage_capacity > 100) ++ percentage_capacity = 100; ++ ++ if (psp == POWER_SUPPLY_PROP_CAPACITY) { ++ RET = percentage_capacity; ++ break; ++ } ++ charge_now = 50000 * percentage_capacity; ++ if (psp == POWER_SUPPLY_PROP_CHARGE_NOW) { ++ /* uAh */ ++ RET = charge_now; ++ break; ++ } ++ } /* fall through */ ++ case POWER_SUPPLY_PROP_STATUS: { ++ if (status & EC_STATUS_ADAPT) ++ if (ctrl & EC_CTRL_CHARGE_EN) ++ RET = POWER_SUPPLY_STATUS_CHARGING; ++ else ++ RET = POWER_SUPPLY_STATUS_NOT_CHARGING; ++ else ++ RET = POWER_SUPPLY_STATUS_DISCHARGING; ++ ++ if (psp == POWER_SUPPLY_PROP_STATUS) ++ break; ++ /* mAh -> µA */ ++ switch (RET) { ++ case POWER_SUPPLY_STATUS_CHARGING: ++ RET = -(data->charge_cmd == 2) ? 1400000 : 250000; ++ break; ++ case POWER_SUPPLY_STATUS_DISCHARGING: ++ RET = charge_now / time_to_empty * 36000; ++ break; ++ case POWER_SUPPLY_STATUS_NOT_CHARGING: ++ default: ++ RET = 0; ++ break; ++ } ++ } break; ++ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: ++ RET = BAT_MAX+BAT_READ_ERROR; ++ break; ++ case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: ++ RET = BAT_MIN-BAT_READ_ERROR; ++ break; ++ case POWER_SUPPLY_PROP_VOLTAGE_NOW: ++ /* mV -> uV */ ++ RET = data->battery_level * 1000; ++ break; ++ case POWER_SUPPLY_PROP_PRESENT: ++#if CONFIG_GDIUM_VERSION > 2 ++ RET = !!(status & EC_STATUS_BATID); ++#else ++ RET = !!(data->battery_level > BAT_VOLT_PRESENT); ++#endif ++ break; ++ case POWER_SUPPLY_PROP_CAPACITY_LEVEL: ++ tmp = data->battery_level * 1000; ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; ++ if (status & EC_STATUS_BATID) { ++ if (tmp >= BAT_MAX) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_HIGH; ++ if (tmp >= BAT_MAX+BAT_READ_ERROR) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_FULL; ++ } else if (tmp <= BAT_MIN+BAT_READ_ERROR) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_LOW; ++ if (tmp <= BAT_MIN) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; ++ } else ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; ++ } ++ break; ++ case POWER_SUPPLY_PROP_CHARGE_TYPE: ++ if (ctrl & EC_CTRL_TRICKLE) ++ RET = POWER_SUPPLY_CHARGE_TYPE_TRICKLE; ++ else if (ctrl & EC_CTRL_CHARGE_EN) ++ RET = POWER_SUPPLY_CHARGE_TYPE_FAST; ++ else ++ RET = POWER_SUPPLY_CHARGE_TYPE_NONE; ++ break; ++ case POWER_SUPPLY_PROP_CURRENT_MAX: ++ /* 1.4A ? */ ++ RET = 1400000; ++ break; ++ default: ++ break; ++ } ++ ++ return ret; ++} ++#undef RET ++ ++static enum power_supply_property gdium_ac_props[] = { ++ POWER_SUPPLY_PROP_ONLINE, ++}; ++ ++static enum power_supply_property gdium_battery_props[] = { ++ POWER_SUPPLY_PROP_STATUS, ++ POWER_SUPPLY_PROP_PRESENT, ++ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_NOW, ++ POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, ++ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, ++ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, ++ POWER_SUPPLY_PROP_VOLTAGE_NOW, ++ POWER_SUPPLY_PROP_CURRENT_MAX, ++ POWER_SUPPLY_PROP_CURRENT_NOW, ++ POWER_SUPPLY_PROP_CAPACITY, ++ POWER_SUPPLY_PROP_CAPACITY_LEVEL, ++ POWER_SUPPLY_PROP_CHARGE_TYPE, ++}; ++ ++static void gdium_laptop_battery_work(struct work_struct *work) ++{ ++ struct gdium_laptop_data *data = container_of(work, struct gdium_laptop_data, work.work); ++ struct i2c_client *client; ++ int ret; ++ char old_status, old_charge_cmd; ++ char present; ++ s32 status; ++ ++ mutex_lock(&data->mutex); ++ client = data->client; ++ status = ec_read_status(client); ++ ret = ec_read_battery(client); ++ ++ if ((status < 0) || (ret < 0)) ++ goto i2c_read_error; ++ ++ old_status = data->status; ++ old_charge_cmd = data->charge_cmd; ++ data->status = status; ++ ++ /* ++ * Charge only if : ++ * - battery present ++ * - ac adapter plugged in ++ * - battery not fully charged ++ */ ++#if CONFIG_GDIUM_VERSION > 2 ++ present = !!(data->status & EC_STATUS_BATID); ++#else ++ present = !!(ret > BAT_VOLT_PRESENT); ++#endif ++ data->battery_level = 0; ++ if (present) { ++ data->battery_level = (unsigned int)ret; ++ if (data->status & EC_STATUS_ADAPT) ++ data->battery_level -= BAT_READ_ERROR_MV; ++ } ++ ++ data->charge_cmd = 0; ++ if ((data->status & EC_STATUS_ADAPT) && present && (data->battery_level <= BAT_MAX_MV)) ++ data->charge_cmd = (ret < BAT_TRICKLE_EN) ? 2 : 3; ++ ++ ec_charge_en(client, (data->charge_cmd >> 1) & 1, data->charge_cmd & 1); ++ ++ /* ++ * data->ctrl must be set _after_ calling ec_charge_en as this will change the ++ * control register content ++ */ ++ data->ctrl = ec_read_ctrl(client); ++ ++ if ((data->status & EC_STATUS_ADAPT) != (old_status & EC_STATUS_ADAPT)) { ++ power_supply_changed(&data->gdium_ac); ++ /* Send charging/discharging state change */ ++ power_supply_changed(&data->gdium_battery); ++ } else if ((data->status & EC_STATUS_ADAPT) && ++ ((old_charge_cmd&2) != (data->charge_cmd&2))) ++ power_supply_changed(&data->gdium_battery); ++ ++i2c_read_error: ++ mutex_unlock(&data->mutex); ++ queue_delayed_work(data->workqueue, &data->work, msecs_to_jiffies(BAT_SCAN_INTERVAL)); ++} ++ ++static int gdium_laptop_battery_init(struct gdium_laptop_data *data) ++{ ++ int ret; ++ ++ data->bat_pdev = platform_device_register_simple("gdium-battery", 0, NULL, 0); ++ if (IS_ERR(data->bat_pdev)) ++ return PTR_ERR(data->bat_pdev); ++ ++ data->gdium_battery.name = data->bat_pdev->name; ++ data->gdium_battery.properties = gdium_battery_props; ++ data->gdium_battery.num_properties = ARRAY_SIZE(gdium_battery_props); ++ data->gdium_battery.get_property = gdium_battery_get_props; ++ data->gdium_battery.use_for_apm = 1; ++ ++ ret = power_supply_register(&data->bat_pdev->dev, &data->gdium_battery); ++ if (ret) ++ goto err_platform; ++ ++ data->gdium_ac.name = "gdium-ac"; ++ data->gdium_ac.type = POWER_SUPPLY_TYPE_MAINS; ++ data->gdium_ac.properties = gdium_ac_props; ++ data->gdium_ac.num_properties = ARRAY_SIZE(gdium_ac_props); ++ data->gdium_ac.get_property = gdium_ac_get_props; ++/* data->gdium_ac.use_for_apm_ac = 1, */ ++ ++ ret = power_supply_register(&data->bat_pdev->dev, &data->gdium_ac); ++ if (ret) ++ goto err_battery; ++ ++ if (!ec) { ++ INIT_DELAYED_WORK(&data->work, gdium_laptop_battery_work); ++ data->workqueue = create_singlethread_workqueue("gdium-battery-work"); ++ if (!data->workqueue) { ++ ret = -ESRCH; ++ goto err_work; ++ } ++ queue_delayed_work(data->workqueue, &data->work, msecs_to_jiffies(BAT_SCAN_INTERVAL)); ++ } ++ ++ return 0; ++ ++err_work: ++err_battery: ++ power_supply_unregister(&data->gdium_battery); ++err_platform: ++ platform_device_unregister(data->bat_pdev); ++ ++ return ret; ++} ++static void gdium_laptop_battery_exit(struct gdium_laptop_data *data) ++{ ++ if (!ec) { ++ cancel_rearming_delayed_workqueue(data->workqueue, &data->work); ++ destroy_workqueue(data->workqueue); ++ } ++ power_supply_unregister(&data->gdium_battery); ++ power_supply_unregister(&data->gdium_ac); ++ platform_device_unregister(data->bat_pdev); ++} ++ ++/* Debug fs */ ++static int gdium_laptop_regs_show(struct seq_file *s, void *p) ++{ ++ struct gdium_laptop_data *data = s->private; ++ struct i2c_client *client = data->client; ++ ++ mutex_lock(&data->mutex); ++ seq_printf(s, "Version : 0x%02x\n", (unsigned char)ec_read_version(client)); ++ seq_printf(s, "Status : 0x%02x\n", (unsigned char)ec_read_status(client)); ++ seq_printf(s, "Ctrl : 0x%02x\n", (unsigned char)ec_read_ctrl(client)); ++ seq_printf(s, "Sign : 0x%02x\n", (unsigned char)ec_read_sign(client)); ++ seq_printf(s, "Bat Lo : 0x%02x\n", (unsigned char)i2c_smbus_read_byte_data(client, EC_BAT_LOW)); ++ seq_printf(s, "Bat Hi : 0x%02x\n", (unsigned char)i2c_smbus_read_byte_data(client, EC_BAT_HIGH)); ++ seq_printf(s, "Battery : %d uV\n", (unsigned int)ec_read_battery(client) * 1000); ++ seq_printf(s, "Charge cmd : %s %s\n", data->charge_cmd & 2 ? "C" : " ", data->charge_cmd & 1 ? "T" : " "); ++ ++ mutex_unlock(&data->mutex); ++ return 0; ++} ++ ++static int gdium_laptop_regs_open(struct inode *inode, ++ struct file *file) ++{ ++ return single_open(file, gdium_laptop_regs_show, inode->i_private); ++} ++ ++static const struct file_operations gdium_laptop_regs_fops = { ++ .open = gdium_laptop_regs_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .owner = THIS_MODULE, ++}; ++ ++ ++static int gdium_laptop_probe(struct i2c_client *client, const struct i2c_device_id *id) ++{ ++ struct gdium_laptop_data *data; ++ int ret; ++ ++ if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { ++ dev_err(&client->dev, ++ "%s: no smbus_byte support !\n", __func__); ++ return -ENODEV; ++ } ++ ++ data = kzalloc(sizeof(struct gdium_laptop_data), GFP_KERNEL); ++ if (!data) ++ return -ENOMEM; ++ ++ i2c_set_clientdata(client, data); ++ data->client = client; ++ mutex_init(&data->mutex); ++ ++ ret = ec_read_version(client); ++ if (ret < 0) ++ goto err_alloc; ++ ++ data->version = (unsigned char)ret; ++ ++ ret = gdium_laptop_input_init(data); ++ if (ret) ++ goto err_alloc; ++ ++ ret = gdium_laptop_battery_init(data); ++ if (ret) ++ goto err_input; ++ ++ ++ if (!ec) { ++ ret = ec_write_sign(client, EC_SIGN_OS); ++ if (ret) ++ goto err_sign; ++ } ++ ++ if (gpio16) { ++ ret = gpio_request(SM502_WLAN_ON, "wlan-on"); ++ if (ret < 0) ++ goto err_sign; ++ gpio_set_value(SM502_WLAN_ON, ec_wlan_status(client)); ++ gpio_direction_output(SM502_WLAN_ON, 1); ++ } ++ ++ dev_info(&client->dev, "Found firmware 0x%02x\n", data->version); ++ data->debugfs = debugfs_create_file("gdium_laptop", S_IFREG | S_IRUGO, ++ NULL, data, &gdium_laptop_regs_fops); ++ ++ return 0; ++ ++err_sign: ++ gdium_laptop_battery_exit(data); ++err_input: ++ gdium_laptop_input_exit(data); ++err_alloc: ++ kfree(data); ++ return ret; ++} ++ ++static int gdium_laptop_remove(struct i2c_client *client) ++{ ++ struct gdium_laptop_data *data = i2c_get_clientdata(client); ++ ++ if (gpio16) ++ gpio_free(SM502_WLAN_ON); ++ ec_write_sign(client, EC_SIGN_EC); ++ if (data->debugfs) ++ debugfs_remove(data->debugfs); ++ ++ gdium_laptop_battery_exit(data); ++ gdium_laptop_input_exit(data); ++ ++ kfree(data); ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++static int gdium_laptop_suspend(struct i2c_client *client, pm_message_t msg) ++{ ++ struct gdium_laptop_data *data = i2c_get_clientdata(client); ++ ++ if (!ec) ++ cancel_rearming_delayed_workqueue(data->workqueue, &data->work); ++ return 0; ++} ++ ++static int gdium_laptop_resume(struct i2c_client *client) ++{ ++ struct gdium_laptop_data *data = i2c_get_clientdata(client); ++ ++ if (!ec) ++ queue_delayed_work(data->workqueue, &data->work, msecs_to_jiffies(BAT_SCAN_INTERVAL)); ++ return 0; ++} ++#else ++#define gdium_laptop_suspend NULL ++#define gdium_laptop_resume NULL ++#endif ++static const struct i2c_device_id gdium_id[] = { ++ { "gdium-laptop" }, ++ {}, ++}; ++MODULE_DEVICE_TABLE(i2c, gdium_id); ++ ++static struct i2c_driver gdium_laptop_driver = { ++ .driver = { ++ .name = "gdium-laptop", ++ .owner = THIS_MODULE, ++ }, ++ .probe = gdium_laptop_probe, ++ .remove = gdium_laptop_remove, ++ .shutdown = gdium_laptop_remove, ++ .suspend = gdium_laptop_suspend, ++ .resume = gdium_laptop_resume, ++ .id_table = gdium_id, ++}; ++ ++static int __init gdium_laptop_init(void) ++{ ++ return i2c_add_driver(&gdium_laptop_driver); ++} ++ ++static void __exit gdium_laptop_exit(void) ++{ ++ i2c_del_driver(&gdium_laptop_driver); ++} ++ ++module_init(gdium_laptop_init); ++module_exit(gdium_laptop_exit); ++ ++MODULE_AUTHOR("Arnaud Patard "); ++MODULE_DESCRIPTION("Gdium laptop extras"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/mips/lynloong_pc.c b/drivers/platform/mips/lynloong_pc.c +new file mode 100644 +index 0000000..68f29e4 +--- /dev/null ++++ b/drivers/platform/mips/lynloong_pc.c +@@ -0,0 +1,515 @@ ++/* ++ * Driver for LynLoong PC extras ++ * ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin , Xiang Yu ++ * ++ * 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 /* for backlight subdriver */ ++#include ++#include /* for video output subdriver */ ++#include /* for suspend support */ ++ ++#include ++#include ++ ++#include ++ ++static u32 gpio_base, mfgpt_base; ++ ++static void set_gpio_reg_high(int gpio, int reg) ++{ ++ u32 val; ++ ++ val = inl(gpio_base + reg); ++ val |= (1 << gpio); ++ val &= ~(1 << (16 + gpio)); ++ outl(val, gpio_base + reg); ++ mmiowb(); ++} ++ ++static void set_gpio_reg_low(int gpio, int reg) ++{ ++ u32 val; ++ ++ val = inl(gpio_base + reg); ++ val |= (1 << (16 + gpio)); ++ val &= ~(1 << gpio); ++ outl(val, gpio_base + reg); ++ mmiowb(); ++} ++ ++static void set_gpio_output_low(int gpio) ++{ ++ set_gpio_reg_high(gpio, GPIOL_OUT_EN); ++ set_gpio_reg_low(gpio, GPIOL_OUT_VAL); ++} ++ ++static void set_gpio_output_high(int gpio) ++{ ++ set_gpio_reg_high(gpio, GPIOL_OUT_EN); ++ set_gpio_reg_high(gpio, GPIOL_OUT_VAL); ++} ++ ++/* backlight subdriver */ ++ ++#define MAX_BRIGHTNESS 100 ++#define DEFAULT_BRIGHTNESS 50 ++#define MIN_BRIGHTNESS 0 ++static unsigned int level; ++ ++DEFINE_SPINLOCK(backlight_lock); ++/* Tune the brightness */ ++static void setup_mfgpt2(void) ++{ ++ unsigned long flags; ++ ++ spin_lock_irqsave(&backlight_lock, flags); ++ ++ /* Set MFGPT2 comparator 1,2 */ ++ outw(MAX_BRIGHTNESS-level, MFGPT2_CMP1); ++ outw(MAX_BRIGHTNESS, MFGPT2_CMP2); ++ /* Clear MFGPT2 UP COUNTER */ ++ outw(0, MFGPT2_CNT); ++ /* Enable counter, compare mode, 32k */ ++ outw(0x8280, MFGPT2_SETUP); ++ ++ spin_unlock_irqrestore(&backlight_lock, flags); ++} ++ ++static int lynloong_set_brightness(struct backlight_device *bd) ++{ ++ level = (bd->props.fb_blank == FB_BLANK_UNBLANK && ++ bd->props.power == FB_BLANK_UNBLANK) ? ++ bd->props.brightness : 0; ++ ++ if (level > MAX_BRIGHTNESS) ++ level = MAX_BRIGHTNESS; ++ else if (level < MIN_BRIGHTNESS) ++ level = MIN_BRIGHTNESS; ++ ++ setup_mfgpt2(); ++ ++ return 0; ++} ++ ++static int lynloong_get_brightness(struct backlight_device *bd) ++{ ++ return level; ++} ++ ++static struct backlight_ops backlight_ops = { ++ .get_brightness = lynloong_get_brightness, ++ .update_status = lynloong_set_brightness, ++}; ++ ++static struct backlight_device *lynloong_backlight_dev; ++ ++static int lynloong_backlight_init(void) ++{ ++ int ret; ++ u32 hi; ++ struct backlight_properties props; ++ ++ /* Get gpio_base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &gpio_base); ++ /* Get mfgpt_base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &hi, &mfgpt_base); ++ /* Get gpio_base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &gpio_base); ++ ++ /* Select for mfgpt */ ++ set_gpio_reg_high(7, GPIOL_OUT_AUX1_SEL); ++ /* Enable brightness controlling */ ++ set_gpio_output_high(7); ++ ++ memset(&props, 0, sizeof(struct backlight_properties)); ++ props.max_brightness = MAX_BRIGHTNESS; ++ props.type = BACKLIGHT_PLATFORM; ++ lynloong_backlight_dev = backlight_device_register("backlight0", NULL, ++ NULL, &backlight_ops, &props); ++ ++ if (IS_ERR(lynloong_backlight_dev)) { ++ ret = PTR_ERR(lynloong_backlight_dev); ++ return ret; ++ } ++ ++ lynloong_backlight_dev->props.brightness = DEFAULT_BRIGHTNESS; ++ backlight_update_status(lynloong_backlight_dev); ++ ++ return 0; ++} ++ ++static void lynloong_backlight_exit(void) ++{ ++ if (lynloong_backlight_dev) { ++ backlight_device_unregister(lynloong_backlight_dev); ++ lynloong_backlight_dev = NULL; ++ } ++ /* Disable brightness controlling */ ++ set_gpio_output_low(7); ++} ++ ++/* video output driver */ ++static int vo_status = 1; ++ ++static int lcd_video_output_get(struct output_device *od) ++{ ++ return vo_status; ++} ++ ++static int lcd_video_output_set(struct output_device *od) ++{ ++ int i; ++ unsigned long status; ++ ++ status = !!od->request_state; ++ ++ if (status == 0) { ++ /* Set the current status as off */ ++ vo_status = 0; ++ /* Turn off the backlight */ ++ set_gpio_output_low(11); ++ for (i = 0; i < 0x500; i++) ++ delay(); ++ /* Turn off the LCD */ ++ set_gpio_output_high(8); ++ } else { ++ /* Turn on the LCD */ ++ set_gpio_output_low(8); ++ for (i = 0; i < 0x500; i++) ++ delay(); ++ /* Turn on the backlight */ ++ set_gpio_output_high(11); ++ /* Set the current status as on */ ++ vo_status = 1; ++ } ++ ++ return 0; ++} ++ ++static struct output_properties lcd_output_properties = { ++ .set_state = lcd_video_output_set, ++ .get_status = lcd_video_output_get, ++}; ++ ++static struct output_device *lcd_output_dev; ++ ++static void lynloong_lcd_vo_set(int status) ++{ ++ lcd_output_dev->request_state = status; ++ lcd_video_output_set(lcd_output_dev); ++} ++ ++static int lynloong_vo_init(void) ++{ ++ int ret; ++ ++ /* Register video output device: lcd */ ++ lcd_output_dev = video_output_register("LCD", NULL, NULL, ++ &lcd_output_properties); ++ ++ if (IS_ERR(lcd_output_dev)) { ++ ret = PTR_ERR(lcd_output_dev); ++ lcd_output_dev = NULL; ++ return ret; ++ } ++ /* Ensure LCD is on by default */ ++ lynloong_lcd_vo_set(1); ++ ++ return 0; ++} ++ ++static void lynloong_vo_exit(void) ++{ ++ if (lcd_output_dev) { ++ video_output_unregister(lcd_output_dev); ++ lcd_output_dev = NULL; ++ } ++} ++ ++/* suspend support */ ++ ++#ifdef CONFIG_PM ++ ++static u32 smb_base; ++ ++/* I2C operations */ ++ ++static int i2c_wait(void) ++{ ++ char c; ++ int i; ++ ++ udelay(1000); ++ for (i = 0; i < 20; i++) { ++ c = inb(smb_base | SMB_STS); ++ if (c & (SMB_STS_BER | SMB_STS_NEGACK)) ++ return -1; ++ if (c & SMB_STS_SDAST) ++ return 0; ++ udelay(100); ++ } ++ return -2; ++} ++ ++static void i2c_read_single(int addr, int regNo, char *value) ++{ ++ unsigned char c; ++ ++ /* Start condition */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_START, smb_base | SMB_CTRL1); ++ i2c_wait(); ++ ++ /* Send slave address */ ++ outb(addr & 0xfe, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Acknowledge smbus */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_ACK, smb_base | SMB_CTRL1); ++ ++ /* Send register index */ ++ outb(regNo, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Acknowledge smbus */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_ACK, smb_base | SMB_CTRL1); ++ ++ /* Start condition again */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_START, smb_base | SMB_CTRL1); ++ i2c_wait(); ++ ++ /* Send salve address again */ ++ outb(1 | addr, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Acknowledge smbus */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_ACK, smb_base | SMB_CTRL1); ++ ++ /* Read data */ ++ *value = inb(smb_base | SMB_SDA); ++ ++ /* Stop condition */ ++ outb(SMB_CTRL1_STOP, smb_base | SMB_CTRL1); ++ i2c_wait(); ++} ++ ++static void i2c_write_single(int addr, int regNo, char value) ++{ ++ unsigned char c; ++ ++ /* Start condition */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_START, smb_base | SMB_CTRL1); ++ i2c_wait(); ++ /* Send slave address */ ++ outb(addr & 0xfe, smb_base | SMB_SDA); ++ i2c_wait();; ++ ++ /* Send register index */ ++ outb(regNo, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Write data */ ++ outb(value, smb_base | SMB_SDA); ++ i2c_wait(); ++ /* Stop condition */ ++ outb(SMB_CTRL1_STOP, smb_base | SMB_CTRL1); ++ i2c_wait(); ++} ++ ++static void stop_clock(int clk_reg, int clk_sel) ++{ ++ u8 value; ++ ++ i2c_read_single(0xd3, clk_reg, &value); ++ value &= ~(1 << clk_sel); ++ i2c_write_single(0xd2, clk_reg, value); ++} ++ ++static void enable_clock(int clk_reg, int clk_sel) ++{ ++ u8 value; ++ ++ i2c_read_single(0xd3, clk_reg, &value); ++ value |= (1 << clk_sel); ++ i2c_write_single(0xd2, clk_reg, value); ++} ++ ++static char cached_clk_freq; ++static char cached_pci_fixed_freq; ++ ++static void decrease_clk_freq(void) ++{ ++ char value; ++ ++ i2c_read_single(0xd3, 1, &value); ++ cached_clk_freq = value; ++ ++ /* Select frequency by software */ ++ value |= (1 << 1); ++ /* CPU, 3V66, PCI : 100, 66, 33(1) */ ++ value |= (1 << 2); ++ i2c_write_single(0xd2, 1, value); ++ ++ /* Cache the pci frequency */ ++ i2c_read_single(0xd3, 14, &value); ++ cached_pci_fixed_freq = value; ++ ++ /* Enable PCI fix mode */ ++ value |= (1 << 5); ++ /* 3V66, PCI : 64MHz, 32MHz */ ++ value |= (1 << 3); ++ i2c_write_single(0xd2, 14, value); ++ ++} ++ ++static void resume_clk_freq(void) ++{ ++ i2c_write_single(0xd2, 1, cached_clk_freq); ++ i2c_write_single(0xd2, 14, cached_pci_fixed_freq); ++} ++ ++static void stop_clocks(void) ++{ ++ /* CPU Clock Register */ ++ stop_clock(2, 5); /* not used */ ++ stop_clock(2, 6); /* not used */ ++ stop_clock(2, 7); /* not used */ ++ ++ /* PCI Clock Register */ ++ stop_clock(3, 1); /* 8100 */ ++ stop_clock(3, 5); /* SIS */ ++ stop_clock(3, 0); /* not used */ ++ stop_clock(3, 6); /* not used */ ++ ++ /* PCI 48M Clock Register */ ++ stop_clock(4, 6); /* USB grounding */ ++ stop_clock(4, 5); /* REF(5536_14M) */ ++ ++ /* 3V66 Control Register */ ++ stop_clock(5, 0); /* VCH_CLK..., grounding */ ++} ++ ++static void enable_clocks(void) ++{ ++ enable_clock(3, 1); /* 8100 */ ++ enable_clock(3, 5); /* SIS */ ++ ++ enable_clock(4, 6); ++ enable_clock(4, 5); /* REF(5536_14M) */ ++ ++ enable_clock(5, 0); /* VCH_CLOCK, grounding */ ++} ++ ++static int lynloong_suspend(struct device *dev) ++{ ++ /* Disable AMP */ ++ set_gpio_output_high(6); ++ /* Turn off LCD */ ++ lynloong_lcd_vo_set(0); ++ ++ /* Stop the clocks of some devices */ ++ stop_clocks(); ++ ++ /* Decrease the external clock frequency */ ++ decrease_clk_freq(); ++ ++ return 0; ++} ++ ++static int lynloong_resume(struct device *dev) ++{ ++ /* Turn on the LCD */ ++ lynloong_lcd_vo_set(1); ++ ++ /* Resume clock frequency, enable the relative clocks */ ++ resume_clk_freq(); ++ enable_clocks(); ++ ++ /* Enable AMP */ ++ set_gpio_output_low(6); ++ ++ return 0; ++} ++ ++static const SIMPLE_DEV_PM_OPS(lynloong_pm_ops, lynloong_suspend, ++ lynloong_resume); ++#endif /* !CONFIG_PM */ ++ ++static struct platform_device_id platform_device_ids[] = { ++ { ++ .name = "lynloong_pc", ++ }, ++ {} ++}; ++ ++MODULE_DEVICE_TABLE(platform, platform_device_ids); ++ ++static struct platform_driver platform_driver = { ++ .driver = { ++ .name = "lynloong_pc", ++ .owner = THIS_MODULE, ++#ifdef CONFIG_PM ++ .pm = &lynloong_pm_ops, ++#endif ++ }, ++ .id_table = platform_device_ids, ++}; ++ ++static int __init lynloong_init(void) ++{ ++ int ret; ++ ++ pr_info("LynLoong platform specific driver loaded.\n"); ++ ++ /* Register platform stuff */ ++ ret = platform_driver_register(&platform_driver); ++ if (ret) { ++ pr_err("Failed to register LynLoong platform driver.\n"); ++ return ret; ++ } ++ ++ ret = lynloong_backlight_init(); ++ if (ret) { ++ pr_err("Failed to register LynLoong backlight driver.\n"); ++ return ret; ++ } ++ ++ ret = lynloong_vo_init(); ++ if (ret) { ++ pr_err("Failed to register LynLoong backlight driver.\n"); ++ lynloong_vo_exit(); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static void __exit lynloong_exit(void) ++{ ++ lynloong_vo_exit(); ++ lynloong_backlight_exit(); ++ platform_driver_unregister(&platform_driver); ++ ++ pr_info("LynLoong platform specific driver unloaded.\n"); ++} ++ ++module_init(lynloong_init); ++module_exit(lynloong_exit); ++ ++MODULE_AUTHOR("Wu Zhangjin ; Xiang Yu "); ++MODULE_DESCRIPTION("LynLoong PC driver"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/mips/yeeloong_ecrom.c b/drivers/platform/mips/yeeloong_ecrom.c +new file mode 100644 +index 0000000..1bfe4cf +--- /dev/null ++++ b/drivers/platform/mips/yeeloong_ecrom.c +@@ -0,0 +1,944 @@ ++/* ++ * Driver for flushing/dumping ROM of EC on YeeLoong laptop ++ * ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: liujl ++ * ++ * NOTE : ++ * The EC resources accessing and programming are supported. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define EC_MISC_DEV "ec_misc" ++#define EC_IOC_MAGIC 'E' ++ ++/* ec registers range */ ++#define EC_MAX_REGADDR 0xFFFF ++#define EC_MIN_REGADDR 0xF000 ++#define EC_RAM_ADDR 0xF800 ++ ++/* version burned address */ ++#define VER_ADDR 0xf7a1 ++#define VER_MAX_SIZE 7 ++#define EC_ROM_MAX_SIZE 0x10000 ++ ++/* ec internal register */ ++#define REG_POWER_MODE 0xF710 ++#define FLAG_NORMAL_MODE 0x00 ++#define FLAG_IDLE_MODE 0x01 ++#define FLAG_RESET_MODE 0x02 ++ ++/* ec update program flag */ ++#define PROGRAM_FLAG_NONE 0x00 ++#define PROGRAM_FLAG_IE 0x01 ++#define PROGRAM_FLAG_ROM 0x02 ++ ++/* XBI relative registers */ ++#define REG_XBISEG0 0xFEA0 ++#define REG_XBISEG1 0xFEA1 ++#define REG_XBIRSV2 0xFEA2 ++#define REG_XBIRSV3 0xFEA3 ++#define REG_XBIRSV4 0xFEA4 ++#define REG_XBICFG 0xFEA5 ++#define REG_XBICS 0xFEA6 ++#define REG_XBIWE 0xFEA7 ++#define REG_XBISPIA0 0xFEA8 ++#define REG_XBISPIA1 0xFEA9 ++#define REG_XBISPIA2 0xFEAA ++#define REG_XBISPIDAT 0xFEAB ++#define REG_XBISPICMD 0xFEAC ++#define REG_XBISPICFG 0xFEAD ++#define REG_XBISPIDATR 0xFEAE ++#define REG_XBISPICFG2 0xFEAF ++ ++/* commands definition for REG_XBISPICMD */ ++#define SPICMD_WRITE_STATUS 0x01 ++#define SPICMD_BYTE_PROGRAM 0x02 ++#define SPICMD_READ_BYTE 0x03 ++#define SPICMD_WRITE_DISABLE 0x04 ++#define SPICMD_READ_STATUS 0x05 ++#define SPICMD_WRITE_ENABLE 0x06 ++#define SPICMD_HIGH_SPEED_READ 0x0B ++#define SPICMD_POWER_DOWN 0xB9 ++#define SPICMD_SST_EWSR 0x50 ++#define SPICMD_SST_SEC_ERASE 0x20 ++#define SPICMD_SST_BLK_ERASE 0x52 ++#define SPICMD_SST_CHIP_ERASE 0x60 ++#define SPICMD_FRDO 0x3B ++#define SPICMD_SEC_ERASE 0xD7 ++#define SPICMD_BLK_ERASE 0xD8 ++#define SPICMD_CHIP_ERASE 0xC7 ++ ++/* bits definition for REG_XBISPICFG */ ++#define SPICFG_AUTO_CHECK 0x01 ++#define SPICFG_SPI_BUSY 0x02 ++#define SPICFG_DUMMY_READ 0x04 ++#define SPICFG_EN_SPICMD 0x08 ++#define SPICFG_LOW_SPICS 0x10 ++#define SPICFG_EN_SHORT_READ 0x20 ++#define SPICFG_EN_OFFSET_READ 0x40 ++#define SPICFG_EN_FAST_READ 0x80 ++ ++/* watchdog timer registers */ ++#define REG_WDTCFG 0xfe80 ++#define REG_WDTPF 0xfe81 ++#define REG_WDT 0xfe82 ++ ++/* lpc configure register */ ++#define REG_LPCCFG 0xfe95 ++ ++/* 8051 reg */ ++#define REG_PXCFG 0xff14 ++ ++/* Fan register in KB3310 */ ++#define REG_ECFAN_SPEED_LEVEL 0xf4e4 ++#define REG_ECFAN_SWITCH 0xf4d2 ++ ++/* the ec flash rom id number */ ++#define EC_ROM_PRODUCT_ID_SPANSION 0x01 ++#define EC_ROM_PRODUCT_ID_MXIC 0xC2 ++#define EC_ROM_PRODUCT_ID_AMIC 0x37 ++#define EC_ROM_PRODUCT_ID_EONIC 0x1C ++ ++/* misc ioctl operations */ ++#define IOCTL_RDREG _IOR(EC_IOC_MAGIC, 1, int) ++#define IOCTL_WRREG _IOW(EC_IOC_MAGIC, 2, int) ++#define IOCTL_READ_EC _IOR(EC_IOC_MAGIC, 3, int) ++#define IOCTL_PROGRAM_IE _IOW(EC_IOC_MAGIC, 4, int) ++#define IOCTL_PROGRAM_EC _IOW(EC_IOC_MAGIC, 5, int) ++ ++/* start address for programming of EC content or IE */ ++/* ec running code start address */ ++#define EC_START_ADDR 0x00000000 ++/* ec information element storing address */ ++#define IE_START_ADDR 0x00020000 ++ ++/* EC state */ ++#define EC_STATE_IDLE 0x00 /* ec in idle state */ ++#define EC_STATE_BUSY 0x01 /* ec in busy state */ ++ ++/* timeout value for programming */ ++#define EC_FLASH_TIMEOUT 0x1000 /* ec program timeout */ ++/* command checkout timeout including cmd to port or state flag check */ ++#define EC_CMD_TIMEOUT 0x1000 ++#define EC_SPICMD_STANDARD_TIMEOUT (4 * 1000) /* unit : us */ ++#define EC_MAX_DELAY_UNIT (10) /* every time for polling */ ++#define SPI_FINISH_WAIT_TIME 10 ++/* EC content max size */ ++#define EC_CONTENT_MAX_SIZE (64 * 1024) ++#define IE_CONTENT_MAX_SIZE (0x100000 - IE_START_ADDR) ++ ++/* the register operation access struct */ ++struct ec_reg { ++ u32 addr; /* the address of kb3310 registers */ ++ u8 val; /* the register value */ ++}; ++ ++struct ec_info { ++ u32 start_addr; ++ u32 size; ++ u8 *buf; ++}; ++ ++/* open for using rom protection action */ ++#define EC_ROM_PROTECTION ++ ++/* enable the chip reset mode */ ++static int ec_init_reset_mode(void) ++{ ++ int timeout; ++ unsigned char status = 0; ++ int ret = 0; ++ ++ /* make chip goto reset mode */ ++ ret = ec_query_seq(CMD_INIT_RESET_MODE); ++ if (ret < 0) { ++ printk(KERN_ERR "ec init reset mode failed.\n"); ++ goto out; ++ } ++ ++ /* make the action take active */ ++ timeout = EC_CMD_TIMEOUT; ++ status = ec_read(REG_POWER_MODE) & FLAG_RESET_MODE; ++ while (timeout--) { ++ if (status) { ++ udelay(EC_REG_DELAY); ++ break; ++ } ++ status = ec_read(REG_POWER_MODE) & FLAG_RESET_MODE; ++ udelay(EC_REG_DELAY); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR "ec rom fixup : can't check reset status.\n"); ++ ret = -EINVAL; ++ } else ++ printk(KERN_INFO "(%d/%d)reset 0xf710 : 0x%x\n", timeout, ++ EC_CMD_TIMEOUT - timeout, status); ++ ++ /* set MCU to reset mode */ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_PXCFG); ++ status |= (1 << 0); ++ ec_write(REG_PXCFG, status); ++ udelay(EC_REG_DELAY); ++ ++ /* disable FWH/LPC */ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_LPCCFG); ++ status &= ~(1 << 7); ++ ec_write(REG_LPCCFG, status); ++ udelay(EC_REG_DELAY); ++ ++ printk(KERN_INFO "entering reset mode ok..............\n"); ++ ++ out: ++ return ret; ++} ++ ++/* make ec exit from reset mode */ ++static void ec_exit_reset_mode(void) ++{ ++ unsigned char regval; ++ ++ udelay(EC_REG_DELAY); ++ regval = ec_read(REG_LPCCFG); ++ regval |= (1 << 7); ++ ec_write(REG_LPCCFG, regval); ++ regval = ec_read(REG_PXCFG); ++ regval &= ~(1 << 0); ++ ec_write(REG_PXCFG, regval); ++ printk(KERN_INFO "exit reset mode ok..................\n"); ++ ++ return; ++} ++ ++/* make ec disable WDD */ ++static void ec_disable_WDD(void) ++{ ++ unsigned char status; ++ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_WDTCFG); ++ ec_write(REG_WDTPF, 0x03); ++ ec_write(REG_WDTCFG, (status & 0x80) | 0x48); ++ printk(KERN_INFO "Disable WDD ok..................\n"); ++ ++ return; ++} ++ ++/* make ec enable WDD */ ++static void ec_enable_WDD(void) ++{ ++ unsigned char status; ++ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_WDTCFG); ++ ec_write(REG_WDT, 0x28); /* set WDT 5sec(0x28) */ ++ ec_write(REG_WDTCFG, (status & 0x80) | 0x03); ++ printk(KERN_INFO "Enable WDD ok..................\n"); ++ ++ return; ++} ++ ++/* make ec goto idle mode */ ++static int ec_init_idle_mode(void) ++{ ++ int timeout; ++ unsigned char status = 0; ++ int ret = 0; ++ ++ ec_query_seq(CMD_INIT_IDLE_MODE); ++ ++ /* make the action take active */ ++ timeout = EC_CMD_TIMEOUT; ++ status = ec_read(REG_POWER_MODE) & FLAG_IDLE_MODE; ++ while (timeout--) { ++ if (status) { ++ udelay(EC_REG_DELAY); ++ break; ++ } ++ status = ec_read(REG_POWER_MODE) & FLAG_IDLE_MODE; ++ udelay(EC_REG_DELAY); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR "ec rom fixup : can't check out the status.\n"); ++ ret = -EINVAL; ++ } else ++ printk(KERN_INFO "(%d/%d)0xf710 : 0x%x\n", timeout, ++ EC_CMD_TIMEOUT - timeout, ec_read(REG_POWER_MODE)); ++ ++ printk(KERN_INFO "entering idle mode ok...................\n"); ++ ++ return ret; ++} ++ ++/* make ec exit from idle mode */ ++static int ec_exit_idle_mode(void) ++{ ++ ++ ec_query_seq(CMD_EXIT_IDLE_MODE); ++ ++ printk(KERN_INFO "exit idle mode ok...................\n"); ++ ++ return 0; ++} ++ ++static int ec_instruction_cycle(void) ++{ ++ unsigned long timeout; ++ int ret = 0; ++ ++ timeout = EC_FLASH_TIMEOUT; ++ while (timeout-- >= 0) { ++ if (!(ec_read(REG_XBISPICFG) & SPICFG_SPI_BUSY)) ++ break; ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR ++ "EC_INSTRUCTION_CYCLE : timeout for check flag.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ out: ++ return ret; ++} ++ ++/* To see if the ec is in busy state or not. */ ++static inline int ec_flash_busy(unsigned long timeout) ++{ ++ /* assurance the first command be going to rom */ ++ if (ec_instruction_cycle() < 0) ++ return EC_STATE_BUSY; ++#if 1 ++ timeout = timeout / EC_MAX_DELAY_UNIT; ++ while (timeout-- > 0) { ++ /* check the rom's status of busy flag */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (ec_instruction_cycle() < 0) ++ return EC_STATE_BUSY; ++ if ((ec_read(REG_XBISPIDAT) & 0x01) == 0x00) ++ return EC_STATE_IDLE; ++ udelay(EC_MAX_DELAY_UNIT); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR ++ "EC_FLASH_BUSY : timeout for check rom flag.\n"); ++ return EC_STATE_BUSY; ++ } ++#else ++ /* check the rom's status of busy flag */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (ec_instruction_cycle() < 0) ++ return EC_STATE_BUSY; ++ ++ timeout = timeout / EC_MAX_DELAY_UNIT; ++ while (timeout-- > 0) { ++ if ((ec_read(REG_XBISPIDAT) & 0x01) == 0x00) ++ return EC_STATE_IDLE; ++ udelay(EC_MAX_DELAY_UNIT); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR ++ "EC_FLASH_BUSY : timeout for check rom flag.\n"); ++ return EC_STATE_BUSY; ++ } ++#endif ++ ++ return EC_STATE_IDLE; ++} ++ ++static int rom_instruction_cycle(unsigned char cmd) ++{ ++ unsigned long timeout = 0; ++ ++ switch (cmd) { ++ case SPICMD_READ_STATUS: ++ case SPICMD_WRITE_ENABLE: ++ case SPICMD_WRITE_DISABLE: ++ case SPICMD_READ_BYTE: ++ case SPICMD_HIGH_SPEED_READ: ++ timeout = 0; ++ break; ++ case SPICMD_WRITE_STATUS: ++ timeout = 300 * 1000; ++ break; ++ case SPICMD_BYTE_PROGRAM: ++ timeout = 5 * 1000; ++ break; ++ case SPICMD_SST_SEC_ERASE: ++ case SPICMD_SEC_ERASE: ++ timeout = 1000 * 1000; ++ break; ++ case SPICMD_SST_BLK_ERASE: ++ case SPICMD_BLK_ERASE: ++ timeout = 3 * 1000 * 1000; ++ break; ++ case SPICMD_SST_CHIP_ERASE: ++ case SPICMD_CHIP_ERASE: ++ timeout = 20 * 1000 * 1000; ++ break; ++ default: ++ timeout = EC_SPICMD_STANDARD_TIMEOUT; ++ } ++ if (timeout == 0) ++ return ec_instruction_cycle(); ++ if (timeout < EC_SPICMD_STANDARD_TIMEOUT) ++ timeout = EC_SPICMD_STANDARD_TIMEOUT; ++ ++ return ec_flash_busy(timeout); ++} ++ ++/* delay for start/stop action */ ++static void delay_spi(int n) ++{ ++ while (n--) ++ inb(EC_IO_PORT_HIGH); ++} ++ ++/* start the action to spi rom function */ ++static void ec_start_spi(void) ++{ ++ unsigned char val; ++ ++ delay_spi(SPI_FINISH_WAIT_TIME); ++ val = ec_read(REG_XBISPICFG) | SPICFG_EN_SPICMD | SPICFG_AUTO_CHECK; ++ ec_write(REG_XBISPICFG, val); ++ delay_spi(SPI_FINISH_WAIT_TIME); ++} ++ ++/* stop the action to spi rom function */ ++static void ec_stop_spi(void) ++{ ++ unsigned char val; ++ ++ delay_spi(SPI_FINISH_WAIT_TIME); ++ val = ++ ec_read(REG_XBISPICFG) & (~(SPICFG_EN_SPICMD | SPICFG_AUTO_CHECK)); ++ ec_write(REG_XBISPICFG, val); ++ delay_spi(SPI_FINISH_WAIT_TIME); ++} ++ ++/* read one byte from xbi interface */ ++static int ec_read_byte(unsigned int addr, unsigned char *byte) ++{ ++ int ret = 0; ++ ++ /* enable spicmd writing. */ ++ ec_start_spi(); ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR "EC_READ_BYTE : SPICMD_WRITE_ENABLE failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* write the address */ ++ ec_write(REG_XBISPIA2, (addr & 0xff0000) >> 16); ++ ec_write(REG_XBISPIA1, (addr & 0x00ff00) >> 8); ++ ec_write(REG_XBISPIA0, (addr & 0x0000ff) >> 0); ++ /* start action */ ++ ec_write(REG_XBISPICMD, SPICMD_HIGH_SPEED_READ); ++ if (rom_instruction_cycle(SPICMD_HIGH_SPEED_READ) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_READ_BYTE : SPICMD_HIGH_SPEED_READ failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ *byte = ec_read(REG_XBISPIDAT); ++ ++ out: ++ /* disable spicmd writing. */ ++ ec_stop_spi(); ++ ++ return ret; ++} ++ ++/* write one byte to ec rom */ ++static int ec_write_byte(unsigned int addr, unsigned char byte) ++{ ++ int ret = 0; ++ ++ /* enable spicmd writing. */ ++ ec_start_spi(); ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_WRITE_BYTE : SPICMD_WRITE_ENABLE failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* write the address */ ++ ec_write(REG_XBISPIA2, (addr & 0xff0000) >> 16); ++ ec_write(REG_XBISPIA1, (addr & 0x00ff00) >> 8); ++ ec_write(REG_XBISPIA0, (addr & 0x0000ff) >> 0); ++ ec_write(REG_XBISPIDAT, byte); ++ /* start action */ ++ ec_write(REG_XBISPICMD, SPICMD_BYTE_PROGRAM); ++ if (rom_instruction_cycle(SPICMD_BYTE_PROGRAM) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_WRITE_BYTE : SPICMD_BYTE_PROGRAM failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ out: ++ /* disable spicmd writing. */ ++ ec_stop_spi(); ++ ++ return ret; ++} ++ ++/* unprotect SPI ROM */ ++/* EC_ROM_unprotect function code */ ++static int EC_ROM_unprotect(void) ++{ ++ unsigned char status; ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_UNIT_ERASE : SPICMD_WRITE_ENABLE failed.\n"); ++ return 1; ++ } ++ ++ /* unprotect the status register of rom */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (rom_instruction_cycle(SPICMD_READ_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR "EC_UNIT_ERASE : SPICMD_READ_STATUS failed.\n"); ++ return 1; ++ } ++ status = ec_read(REG_XBISPIDAT); ++ ec_write(REG_XBISPIDAT, status & 0x02); ++ if (ec_instruction_cycle() < 0) { ++ printk(KERN_ERR "EC_UNIT_ERASE : write status value failed.\n"); ++ return 1; ++ } ++ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_STATUS); ++ if (rom_instruction_cycle(SPICMD_WRITE_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_UNIT_ERASE : SPICMD_WRITE_STATUS failed.\n"); ++ return 1; ++ } ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_UNIT_ERASE : SPICMD_WRITE_ENABLE failed.\n"); ++ return 1; ++ } ++ ++ return 0; ++} ++ ++/* erase one block or chip or sector as needed */ ++static int ec_unit_erase(unsigned char erase_cmd, unsigned int addr) ++{ ++ unsigned char status; ++ int ret = 0, i = 0; ++ int unprotect_count = 3; ++ int check_flag = 0; ++ ++ /* enable spicmd writing. */ ++ ec_start_spi(); ++ ++#ifdef EC_ROM_PROTECTION ++ /* added for re-check SPICMD_READ_STATUS */ ++ while (unprotect_count-- > 0) { ++ if (EC_ROM_unprotect()) { ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* first time:500ms --> 5.5sec -->10.5sec */ ++ for (i = 0; i < ((2 - unprotect_count) * 100 + 10); i++) ++ udelay(50000); ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (rom_instruction_cycle(SPICMD_READ_STATUS) ++ == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_READ_STATUS failed.\n"); ++ } else { ++ status = ec_read(REG_XBISPIDAT); ++ printk(KERN_INFO "Read unprotect status : 0x%x\n", ++ status); ++ if ((status & 0x1C) == 0x00) { ++ printk(KERN_INFO ++ "Read unprotect status OK1 : 0x%x\n", ++ status & 0x1C); ++ check_flag = 1; ++ break; ++ } ++ } ++ } ++ ++ if (!check_flag) { ++ printk(KERN_INFO "SPI ROM unprotect fail.\n"); ++ return 1; ++ } ++#endif ++ ++ /* block address fill */ ++ if (erase_cmd == SPICMD_BLK_ERASE) { ++ ec_write(REG_XBISPIA2, (addr & 0x00ff0000) >> 16); ++ ec_write(REG_XBISPIA1, (addr & 0x0000ff00) >> 8); ++ ec_write(REG_XBISPIA0, (addr & 0x000000ff) >> 0); ++ } ++ ++ /* erase the whole chip first */ ++ ec_write(REG_XBISPICMD, erase_cmd); ++ if (rom_instruction_cycle(erase_cmd) == EC_STATE_BUSY) { ++ printk(KERN_ERR "EC_UNIT_ERASE : erase failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ out: ++ /* disable spicmd writing. */ ++ ec_stop_spi(); ++ ++ return ret; ++} ++ ++/* update the whole rom content with H/W mode ++ * PLEASE USING ec_unit_erase() FIRSTLY ++ */ ++static int ec_program_rom(struct ec_info *info, int flag) ++{ ++ unsigned int addr = 0; ++ unsigned long size = 0; ++ unsigned char *ptr = NULL; ++ unsigned char data; ++ unsigned char val = 0; ++ int ret = 0; ++ int i, j; ++ unsigned char status; ++ ++ /* modify for program serial No. ++ * set IE_START_ADDR & use idle mode, ++ * disable WDD ++ */ ++ if (flag == PROGRAM_FLAG_ROM) { ++ ret = ec_init_reset_mode(); ++ addr = info->start_addr + EC_START_ADDR; ++ printk(KERN_INFO "PROGRAM_FLAG_ROM..............\n"); ++ } else if (flag == PROGRAM_FLAG_IE) { ++ ret = ec_init_idle_mode(); ++ ec_disable_WDD(); ++ addr = info->start_addr + IE_START_ADDR; ++ printk(KERN_INFO "PROGRAM_FLAG_IE..............\n"); ++ } else { ++ return 0; ++ } ++ ++ if (ret < 0) { ++ if (flag == PROGRAM_FLAG_IE) ++ ec_enable_WDD(); ++ return ret; ++ } ++ ++ size = info->size; ++ ptr = info->buf; ++ printk(KERN_INFO "starting update ec ROM..............\n"); ++ ++ ret = ec_unit_erase(SPICMD_BLK_ERASE, addr); ++ if (ret) { ++ printk(KERN_ERR "program ec : erase block failed.\n"); ++ goto out; ++ } ++ printk(KERN_ERR "program ec : erase block OK.\n"); ++ ++ i = 0; ++ while (i < size) { ++ data = *(ptr + i); ++ ec_write_byte(addr, data); ++ ec_read_byte(addr, &val); ++ if (val != data) { ++ ec_write_byte(addr, data); ++ ec_read_byte(addr, &val); ++ if (val != data) { ++ printk(KERN_INFO ++ "EC : Second flash program failed at:\t"); ++ printk(KERN_INFO ++ "addr : 0x%x, source : 0x%x, dest: 0x%x\n", ++ addr, data, val); ++ printk(KERN_INFO "This should not happen... STOP\n"); ++ break; ++ } ++ } ++ i++; ++ addr++; ++ } ++ ++#ifdef EC_ROM_PROTECTION ++ /* we should start spi access firstly */ ++ ec_start_spi(); ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_WRITE_ENABLE failed.\n"); ++ goto out1; ++ } ++ ++ /* protect the status register of rom */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (rom_instruction_cycle(SPICMD_READ_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_READ_STATUS failed.\n"); ++ goto out1; ++ } ++ status = ec_read(REG_XBISPIDAT); ++ ++ ec_write(REG_XBISPIDAT, status | 0x1C); ++ if (ec_instruction_cycle() < 0) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : write status value failed.\n"); ++ goto out1; ++ } ++ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_STATUS); ++ if (rom_instruction_cycle(SPICMD_WRITE_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_WRITE_STATUS failed.\n"); ++ goto out1; ++ } ++#endif ++ ++ /* disable the write action to spi rom */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_DISABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_DISABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_WRITE_DISABLE failed.\n"); ++ goto out1; ++ } ++ ++ out1: ++ /* we should stop spi access firstly */ ++ ec_stop_spi(); ++ out: ++ /* for security */ ++ for (j = 0; j < 2000; j++) ++ udelay(1000); ++ ++ /* modify for program serial No. ++ * after program No exit idle mode ++ * and enable WDD ++ */ ++ if (flag == PROGRAM_FLAG_ROM) { ++ /* exit from the reset mode */ ++ ec_exit_reset_mode(); ++ } else { ++ /* ec exit from idle mode */ ++ ret = ec_exit_idle_mode(); ++ ec_enable_WDD(); ++ if (ret < 0) ++ return ret; ++ } ++ ++ return 0; ++} ++ ++/* ioctl */ ++static int misc_ioctl(struct inode *inode, struct file *filp, u_int cmd, ++ u_long arg) ++{ ++ struct ec_info ecinfo; ++ void __user *ptr = (void __user *)arg; ++ struct ec_reg *ecreg = (struct ec_reg *)(filp->private_data); ++ int ret = 0; ++ ++ switch (cmd) { ++ case IOCTL_RDREG: ++ ret = copy_from_user(ecreg, ptr, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "reg read : copy from user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecreg->addr > EC_MAX_REGADDR) ++ || (ecreg->addr < EC_MIN_REGADDR)) { ++ printk(KERN_ERR ++ "reg read : out of register address range.\n"); ++ return -EINVAL; ++ } ++ ecreg->val = ec_read(ecreg->addr); ++ ret = copy_to_user(ptr, ecreg, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "reg read : copy to user error.\n"); ++ return -EFAULT; ++ } ++ break; ++ case IOCTL_WRREG: ++ ret = copy_from_user(ecreg, ptr, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "reg write : copy from user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecreg->addr > EC_MAX_REGADDR) ++ || (ecreg->addr < EC_MIN_REGADDR)) { ++ printk(KERN_ERR ++ "reg write : out of register address range.\n"); ++ return -EINVAL; ++ } ++ ec_write(ecreg->addr, ecreg->val); ++ break; ++ case IOCTL_READ_EC: ++ ret = copy_from_user(ecreg, ptr, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "spi read : copy from user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecreg->addr > EC_RAM_ADDR) ++ && (ecreg->addr < EC_MAX_REGADDR)) { ++ printk(KERN_ERR ++ "spi read : out of register address range.\n"); ++ return -EINVAL; ++ } ++ ec_read_byte(ecreg->addr, &(ecreg->val)); ++ ret = copy_to_user(ptr, ecreg, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "spi read : copy to user error.\n"); ++ return -EFAULT; ++ } ++ break; ++ case IOCTL_PROGRAM_IE: ++ ecinfo.start_addr = EC_START_ADDR; ++ ecinfo.size = EC_CONTENT_MAX_SIZE; ++ ecinfo.buf = (u8 *) kmalloc(ecinfo.size, GFP_KERNEL); ++ if (ecinfo.buf == NULL) { ++ printk(KERN_ERR "program ie : kmalloc failed.\n"); ++ return -ENOMEM; ++ } ++ ret = copy_from_user(ecinfo.buf, (u8 *) ptr, ecinfo.size); ++ if (ret) { ++ printk(KERN_ERR "program ie : copy from user error.\n"); ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ return -EFAULT; ++ } ++ ++ /* use ec_program_rom to write serial No */ ++ ec_program_rom(&ecinfo, PROGRAM_FLAG_IE); ++ ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ break; ++ case IOCTL_PROGRAM_EC: ++ ecinfo.start_addr = EC_START_ADDR; ++ if (get_user((ecinfo.size), (u32 *) ptr)) { ++ printk(KERN_ERR "program ec : get user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecinfo.size) > EC_CONTENT_MAX_SIZE) { ++ printk(KERN_ERR "program ec : size out of limited.\n"); ++ return -EINVAL; ++ } ++ ecinfo.buf = (u8 *) kmalloc(ecinfo.size, GFP_KERNEL); ++ if (ecinfo.buf == NULL) { ++ printk(KERN_ERR "program ec : kmalloc failed.\n"); ++ return -ENOMEM; ++ } ++ ret = copy_from_user(ecinfo.buf, ((u8 *) ptr + 4), ecinfo.size); ++ if (ret) { ++ printk(KERN_ERR "program ec : copy from user error.\n"); ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ return -EFAULT; ++ } ++ ++ ec_program_rom(&ecinfo, PROGRAM_FLAG_ROM); ++ ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ break; ++ ++ default: ++ break; ++ } ++ ++ return 0; ++} ++ ++static long misc_compat_ioctl(struct file *file, unsigned int cmd, ++ unsigned long arg) ++{ ++ return misc_ioctl(file->f_dentry->d_inode, file, cmd, arg); ++} ++ ++static int misc_open(struct inode *inode, struct file *filp) ++{ ++ struct ec_reg *ecreg = NULL; ++ ecreg = kmalloc(sizeof(struct ec_reg), GFP_KERNEL); ++ if (ecreg) ++ filp->private_data = ecreg; ++ ++ return ecreg ? 0 : -ENOMEM; ++} ++ ++static int misc_release(struct inode *inode, struct file *filp) ++{ ++ struct ec_reg *ecreg = (struct ec_reg *)(filp->private_data); ++ ++ filp->private_data = NULL; ++ kfree(ecreg); ++ ++ return 0; ++} ++ ++static const struct file_operations ecmisc_fops = { ++ .open = misc_open, ++ .release = misc_release, ++ .read = NULL, ++ .write = NULL, ++#ifdef CONFIG_64BIT ++ .compat_ioctl = misc_compat_ioctl, ++#else ++ .ioctl = misc_ioctl, ++#endif ++}; ++ ++static struct miscdevice ecmisc_device = { ++ .minor = MISC_DYNAMIC_MINOR, ++ .name = EC_MISC_DEV, ++ .fops = &ecmisc_fops ++}; ++ ++static int __init ecmisc_init(void) ++{ ++ int ret; ++ ++ printk(KERN_INFO "EC misc device init.\n"); ++ ret = misc_register(&ecmisc_device); ++ ++ return ret; ++} ++ ++static void __exit ecmisc_exit(void) ++{ ++ printk(KERN_INFO "EC misc device exit.\n"); ++ misc_deregister(&ecmisc_device); ++} ++ ++module_init(ecmisc_init); ++module_exit(ecmisc_exit); ++ ++MODULE_AUTHOR("liujl "); ++MODULE_DESCRIPTION("Driver for flushing/dumping ROM of EC on YeeLoong laptop"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/mips/yeeloong_laptop.c b/drivers/platform/mips/yeeloong_laptop.c +new file mode 100644 +index 0000000..c285a67 +--- /dev/null ++++ b/drivers/platform/mips/yeeloong_laptop.c +@@ -0,0 +1,1360 @@ ++/* ++ * Driver for YeeLoong laptop extras ++ * ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin , Liu Junliang ++ * ++ * 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 /* for backlight subdriver */ ++#include ++#include /* for hwmon subdriver */ ++#include ++#include /* for video output subdriver */ ++#include /* for lcd output subdriver */ ++#include /* for hotkey subdriver */ ++#include ++#include ++#include ++#include /* for AC & Battery subdriver */ ++#include /* for register_reboot_notifier */ ++#include /* for register_pm_notifier */ ++ ++#include ++ ++#include /* for loongson_cmdline */ ++#include ++ ++#define ON 1 ++#define OFF 0 ++#define EVENT_START EVENT_LID ++ ++/* common function */ ++#define EC_VER_LEN 64 ++ ++static int ec_version_before(char *version) ++{ ++ char *p, ec_ver[EC_VER_LEN]; ++ ++ p = strstr(loongson_cmdline, "EC_VER="); ++ if (!p) ++ memset(ec_ver, 0, EC_VER_LEN); ++ else { ++ strncpy(ec_ver, p, EC_VER_LEN); ++ p = strstr(ec_ver, " "); ++ if (p) ++ *p = '\0'; ++ } ++ ++ return (strncasecmp(ec_ver, version, 64) < 0); ++} ++ ++/* backlight subdriver */ ++#define MIN_BRIGHTNESS 1 ++#define MAX_BRIGHTNESS 8 ++ ++static int yeeloong_set_brightness(struct backlight_device *bd) ++{ ++ unsigned char level; ++ static unsigned char old_level; ++ ++ level = (bd->props.fb_blank == FB_BLANK_UNBLANK && ++ bd->props.power == FB_BLANK_UNBLANK) ? ++ bd->props.brightness : 0; ++ ++ level = clamp_val(level, MIN_BRIGHTNESS, MAX_BRIGHTNESS); ++ ++ /* Avoid to modify the brightness when EC is tuning it */ ++ if (old_level != level) { ++ if (ec_read(REG_DISPLAY_BRIGHTNESS) == old_level) ++ ec_write(REG_DISPLAY_BRIGHTNESS, level); ++ old_level = level; ++ } ++ ++ return 0; ++} ++ ++static int yeeloong_get_brightness(struct backlight_device *bd) ++{ ++ return ec_read(REG_DISPLAY_BRIGHTNESS); ++} ++ ++static struct backlight_ops backlight_ops = { ++ .get_brightness = yeeloong_get_brightness, ++ .update_status = yeeloong_set_brightness, ++}; ++ ++static struct backlight_device *yeeloong_backlight_dev; ++ ++static int yeeloong_backlight_init(void) ++{ ++ int ret; ++ struct backlight_properties props; ++ ++ memset(&props, 0, sizeof(struct backlight_properties)); ++ props.max_brightness = MAX_BRIGHTNESS; ++ props.type = BACKLIGHT_PLATFORM; ++ yeeloong_backlight_dev = backlight_device_register("backlight0", NULL, ++ NULL, &backlight_ops, &props); ++ ++ if (IS_ERR(yeeloong_backlight_dev)) { ++ ret = PTR_ERR(yeeloong_backlight_dev); ++ yeeloong_backlight_dev = NULL; ++ return ret; ++ } ++ ++ yeeloong_backlight_dev->props.brightness = ++ yeeloong_get_brightness(yeeloong_backlight_dev); ++ backlight_update_status(yeeloong_backlight_dev); ++ ++ return 0; ++} ++ ++static void yeeloong_backlight_exit(void) ++{ ++ if (yeeloong_backlight_dev) { ++ backlight_device_unregister(yeeloong_backlight_dev); ++ yeeloong_backlight_dev = NULL; ++ } ++} ++ ++/* AC & Battery subdriver */ ++ ++static struct power_supply yeeloong_ac, yeeloong_bat; ++ ++#define RET (val->intval) ++ ++#define BAT_CAP_CRITICAL 5 ++#define BAT_CAP_HIGH 95 ++ ++#define get_bat(type) \ ++ ec_read(REG_BAT_##type) ++ ++#define get_bat_l(type) \ ++ ((get_bat(type##_HIGH) << 8) | get_bat(type##_LOW)) ++ ++static int yeeloong_get_ac_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ if (psp == POWER_SUPPLY_PROP_ONLINE) ++ RET = !!(get_bat(POWER) & BIT_BAT_POWER_ACIN); ++ ++ return 0; ++} ++ ++static enum power_supply_property yeeloong_ac_props[] = { ++ POWER_SUPPLY_PROP_ONLINE, ++}; ++ ++static struct power_supply yeeloong_ac = { ++ .name = "yeeloong-ac", ++ .type = POWER_SUPPLY_TYPE_MAINS, ++ .properties = yeeloong_ac_props, ++ .num_properties = ARRAY_SIZE(yeeloong_ac_props), ++ .get_property = yeeloong_get_ac_props, ++}; ++ ++static inline bool is_bat_in(void) ++{ ++ return !!(get_bat(STATUS) & BIT_BAT_STATUS_IN); ++} ++ ++static int get_bat_temp(void) ++{ ++ return get_bat_l(TEMPERATURE) * 10; ++} ++ ++static int get_bat_current(void) ++{ ++ return -(s16)get_bat_l(CURRENT); ++} ++ ++static int get_bat_voltage(void) ++{ ++ return get_bat_l(VOLTAGE); ++} ++ ++static char *get_manufacturer(void) ++{ ++ return (get_bat(VENDOR) == FLAG_BAT_VENDOR_SANYO) ? "SANYO" : "SIMPLO"; ++} ++ ++static int get_relative_cap(void) ++{ ++ /* ++ * When the relative capacity becomes 2, the hardware is observed to ++ * have been turned off forcely. so, we must tune it be suitable to ++ * make the software do related actions. ++ */ ++ int tmp = get_bat_l(RELATIVE_CAP); ++ ++ if (tmp <= (BAT_CAP_CRITICAL * 2)) ++ tmp -= 3; ++ ++ return tmp; ++} ++ ++static int yeeloong_get_bat_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ switch (psp) { ++ /* Fixed information */ ++ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: ++ /* mV -> µV */ ++ RET = get_bat_l(DESIGN_VOL) * 1000; ++ break; ++ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: ++ /* mAh->µAh */ ++ RET = get_bat_l(DESIGN_CAP) * 1000; ++ break; ++ case POWER_SUPPLY_PROP_CHARGE_FULL: ++ /* µAh */ ++ RET = get_bat_l(FULLCHG_CAP) * 1000; ++ break; ++ case POWER_SUPPLY_PROP_MANUFACTURER: ++ val->strval = get_manufacturer(); ++ break; ++ /* Dynamic information */ ++ case POWER_SUPPLY_PROP_PRESENT: ++ RET = is_bat_in(); ++ break; ++ case POWER_SUPPLY_PROP_CURRENT_NOW: ++ /* mA -> µA */ ++ RET = is_bat_in() ? get_bat_current() * 1000 : 0; ++ break; ++ case POWER_SUPPLY_PROP_VOLTAGE_NOW: ++ /* mV -> µV */ ++ RET = is_bat_in() ? get_bat_voltage() * 1000 : 0; ++ break; ++ case POWER_SUPPLY_PROP_TEMP: ++ /* Celcius */ ++ RET = is_bat_in() ? get_bat_temp() : 0; ++ break; ++ case POWER_SUPPLY_PROP_CAPACITY: ++ RET = is_bat_in() ? get_relative_cap() : 0; ++ break; ++ case POWER_SUPPLY_PROP_CAPACITY_LEVEL: { ++ int status; ++ ++ if (!is_bat_in()) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; ++ break; ++ } ++ ++ status = get_bat(STATUS); ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; ++ ++ if (unlikely(status & BIT_BAT_STATUS_DESTROY)) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; ++ break; ++ } ++ ++ if (status & BIT_BAT_STATUS_FULL) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_FULL; ++ else { ++ int curr_cap = get_relative_cap(); ++ ++ if (status & BIT_BAT_STATUS_LOW) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_LOW; ++ if (curr_cap <= BAT_CAP_CRITICAL) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; ++ } else if (curr_cap >= BAT_CAP_HIGH) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_HIGH; ++ } ++ } break; ++ case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW: ++ /* seconds */ ++ RET = is_bat_in() ? (get_relative_cap() - 3) * 54 + 142 : 0; ++ break; ++ case POWER_SUPPLY_PROP_STATUS: { ++ int charge = get_bat(CHARGE); ++ ++ RET = POWER_SUPPLY_STATUS_UNKNOWN; ++ if (charge & FLAG_BAT_CHARGE_DISCHARGE) ++ RET = POWER_SUPPLY_STATUS_DISCHARGING; ++ else if (charge & FLAG_BAT_CHARGE_CHARGE) ++ RET = POWER_SUPPLY_STATUS_CHARGING; ++ } break; ++ case POWER_SUPPLY_PROP_HEALTH: { ++ int status; ++ ++ if (!is_bat_in()) { ++ RET = POWER_SUPPLY_HEALTH_UNKNOWN; ++ break; ++ } ++ ++ status = get_bat(STATUS); ++ RET = POWER_SUPPLY_HEALTH_GOOD; ++ ++ if (status & (BIT_BAT_STATUS_DESTROY | ++ BIT_BAT_STATUS_LOW)) ++ RET = POWER_SUPPLY_HEALTH_DEAD; ++ if (get_bat(CHARGE_STATUS) & ++ BIT_BAT_CHARGE_STATUS_OVERTEMP) ++ RET = POWER_SUPPLY_HEALTH_OVERHEAT; ++ } break; ++ case POWER_SUPPLY_PROP_CHARGE_NOW: /* 1/100(%)*1000 µAh */ ++ RET = get_relative_cap() * get_bat_l(FULLCHG_CAP) * 10; ++ break; ++ default: ++ return -EINVAL; ++ } ++ return 0; ++} ++#undef RET ++ ++static enum power_supply_property yeeloong_bat_props[] = { ++ POWER_SUPPLY_PROP_STATUS, ++ POWER_SUPPLY_PROP_PRESENT, ++ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_FULL, ++ POWER_SUPPLY_PROP_CHARGE_NOW, ++ POWER_SUPPLY_PROP_CURRENT_NOW, ++ POWER_SUPPLY_PROP_VOLTAGE_NOW, ++ POWER_SUPPLY_PROP_HEALTH, ++ POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, ++ POWER_SUPPLY_PROP_CAPACITY, ++ POWER_SUPPLY_PROP_CAPACITY_LEVEL, ++ POWER_SUPPLY_PROP_TEMP, ++ POWER_SUPPLY_PROP_MANUFACTURER, ++}; ++ ++static struct power_supply yeeloong_bat = { ++ .name = "yeeloong-bat", ++ .type = POWER_SUPPLY_TYPE_BATTERY, ++ .properties = yeeloong_bat_props, ++ .num_properties = ARRAY_SIZE(yeeloong_bat_props), ++ .get_property = yeeloong_get_bat_props, ++}; ++ ++static int ac_bat_initialized; ++ ++static int yeeloong_bat_init(void) ++{ ++ int ret; ++ ++ ret = power_supply_register(NULL, &yeeloong_ac); ++ if (ret) ++ return ret; ++ ret = power_supply_register(NULL, &yeeloong_bat); ++ if (ret) { ++ power_supply_unregister(&yeeloong_ac); ++ return ret; ++ } ++ ac_bat_initialized = 1; ++ ++ return 0; ++} ++ ++static void yeeloong_bat_exit(void) ++{ ++ ac_bat_initialized = 0; ++ ++ power_supply_unregister(&yeeloong_ac); ++ power_supply_unregister(&yeeloong_bat); ++} ++/* hwmon subdriver */ ++ ++#define MIN_FAN_SPEED 0 ++#define MAX_FAN_SPEED 3 ++ ++#define get_fan(type) \ ++ ec_read(REG_FAN_##type) ++ ++#define set_fan(type, val) \ ++ ec_write(REG_FAN_##type, val) ++ ++static inline int get_fan_speed_level(void) ++{ ++ return get_fan(SPEED_LEVEL); ++} ++static inline void set_fan_speed_level(int speed) ++{ ++ set_fan(SPEED_LEVEL, speed); ++} ++ ++static inline int get_fan_mode(void) ++{ ++ return get_fan(AUTO_MAN_SWITCH); ++} ++static inline void set_fan_mode(int mode) ++{ ++ set_fan(AUTO_MAN_SWITCH, mode); ++} ++ ++/* ++ * 3 different modes: Full speed(0); manual mode(1); auto mode(2) ++ */ ++static int get_fan_pwm_enable(void) ++{ ++ return (get_fan_mode() == BIT_FAN_AUTO) ? 2 : ++ (get_fan_speed_level() == MAX_FAN_SPEED) ? 0 : 1; ++} ++ ++static void set_fan_pwm_enable(int mode) ++{ ++ set_fan_mode((mode == 2) ? BIT_FAN_AUTO : BIT_FAN_MANUAL); ++ if (mode == 0) ++ set_fan_speed_level(MAX_FAN_SPEED); ++} ++ ++static int get_fan_pwm(void) ++{ ++ return get_fan_speed_level(); ++} ++ ++static void set_fan_pwm(int value) ++{ ++ if (get_fan_mode() != BIT_FAN_MANUAL) ++ return; ++ ++ value = clamp_val(value, MIN_FAN_SPEED, MAX_FAN_SPEED); ++ ++ /* We must ensure the fan is on */ ++ if (value > 0) ++ set_fan(CONTROL, ON); ++ ++ set_fan_speed_level(value); ++} ++ ++static inline int get_fan_speed(void) ++{ ++ return ((get_fan(SPEED_HIGH) & 0x0f) << 8) | get_fan(SPEED_LOW); ++} ++ ++static int get_fan_rpm(void) ++{ ++ return FAN_SPEED_DIVIDER / get_fan_speed(); ++} ++ ++static int get_cpu_temp(void) ++{ ++ return (s8)ec_read(REG_TEMPERATURE_VALUE) * 1000; ++} ++ ++static int get_cpu_temp_max(void) ++{ ++ return 60 * 1000; ++} ++ ++static int get_bat_temp_alarm(void) ++{ ++ return !!(get_bat(CHARGE_STATUS) & BIT_BAT_CHARGE_STATUS_OVERTEMP); ++} ++ ++static ssize_t store_sys_hwmon(void (*set) (int), const char *buf, size_t count) ++{ ++ int ret; ++ unsigned long value; ++ ++ if (!count) ++ return 0; ++ ++ ret = strict_strtoul(buf, 10, &value); ++ if (ret) ++ return ret; ++ ++ set(value); ++ ++ return count; ++} ++ ++static ssize_t show_sys_hwmon(int (*get) (void), char *buf) ++{ ++ return sprintf(buf, "%d\n", get()); ++} ++ ++#define CREATE_SENSOR_ATTR(_name, _mode, _set, _get) \ ++ static ssize_t show_##_name(struct device *dev, \ ++ struct device_attribute *attr, \ ++ char *buf) \ ++ { \ ++ return show_sys_hwmon(_set, buf); \ ++ } \ ++ static ssize_t store_##_name(struct device *dev, \ ++ struct device_attribute *attr, \ ++ const char *buf, size_t count) \ ++ { \ ++ return store_sys_hwmon(_get, buf, count); \ ++ } \ ++ static SENSOR_DEVICE_ATTR(_name, _mode, show_##_name, store_##_name, 0); ++ ++CREATE_SENSOR_ATTR(fan1_input, S_IRUGO, get_fan_rpm, NULL); ++CREATE_SENSOR_ATTR(pwm1, S_IRUGO | S_IWUSR, get_fan_pwm, set_fan_pwm); ++CREATE_SENSOR_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, get_fan_pwm_enable, ++ set_fan_pwm_enable); ++CREATE_SENSOR_ATTR(temp1_input, S_IRUGO, get_cpu_temp, NULL); ++CREATE_SENSOR_ATTR(temp1_max, S_IRUGO, get_cpu_temp_max, NULL); ++CREATE_SENSOR_ATTR(temp2_input, S_IRUGO, get_bat_temp, NULL); ++CREATE_SENSOR_ATTR(temp2_max_alarm, S_IRUGO, get_bat_temp_alarm, NULL); ++CREATE_SENSOR_ATTR(curr1_input, S_IRUGO, get_bat_current, NULL); ++CREATE_SENSOR_ATTR(in1_input, S_IRUGO, get_bat_voltage, NULL); ++ ++static ssize_t ++show_name(struct device *dev, struct device_attribute *attr, char *buf) ++{ ++ return sprintf(buf, "yeeloong\n"); ++} ++ ++static SENSOR_DEVICE_ATTR(name, S_IRUGO, show_name, NULL, 0); ++ ++static struct attribute *hwmon_attributes[] = { ++ &sensor_dev_attr_pwm1.dev_attr.attr, ++ &sensor_dev_attr_pwm1_enable.dev_attr.attr, ++ &sensor_dev_attr_fan1_input.dev_attr.attr, ++ &sensor_dev_attr_temp1_input.dev_attr.attr, ++ &sensor_dev_attr_temp1_max.dev_attr.attr, ++ &sensor_dev_attr_temp2_input.dev_attr.attr, ++ &sensor_dev_attr_temp2_max_alarm.dev_attr.attr, ++ &sensor_dev_attr_curr1_input.dev_attr.attr, ++ &sensor_dev_attr_in1_input.dev_attr.attr, ++ &sensor_dev_attr_name.dev_attr.attr, ++ NULL ++}; ++ ++static struct attribute_group hwmon_attribute_group = { ++ .attrs = hwmon_attributes ++}; ++ ++static struct device *yeeloong_hwmon_dev; ++ ++static int yeeloong_hwmon_init(void) ++{ ++ int ret; ++ ++ yeeloong_hwmon_dev = hwmon_device_register(NULL); ++ if (IS_ERR(yeeloong_hwmon_dev)) { ++ yeeloong_hwmon_dev = NULL; ++ return PTR_ERR(yeeloong_hwmon_dev); ++ } ++ ret = sysfs_create_group(&yeeloong_hwmon_dev->kobj, ++ &hwmon_attribute_group); ++ if (ret) { ++ hwmon_device_unregister(yeeloong_hwmon_dev); ++ yeeloong_hwmon_dev = NULL; ++ return ret; ++ } ++ /* ensure fan is set to auto mode */ ++ set_fan_pwm_enable(2); ++ ++ return 0; ++} ++ ++static void yeeloong_hwmon_exit(void) ++{ ++ if (yeeloong_hwmon_dev) { ++ sysfs_remove_group(&yeeloong_hwmon_dev->kobj, ++ &hwmon_attribute_group); ++ hwmon_device_unregister(yeeloong_hwmon_dev); ++ yeeloong_hwmon_dev = NULL; ++ } ++} ++ ++/* video output subdriver */ ++ ++#define LCD 0 ++#define CRT 1 ++#define VOD_NUM 2 /* The total number of video output device*/ ++ ++static struct output_device *vod[VOD_NUM]; ++ ++static int vor[] = {REG_DISPLAY_LCD, REG_CRT_DETECT}; ++ ++static int get_vo_dev(struct output_device *od) ++{ ++ int i, dev; ++ ++ dev = -1; ++ for (i = 0; i < VOD_NUM; i++) ++ if (od == vod[i]) ++ dev = i; ++ ++ return dev; ++} ++ ++static int vo_get_status(int dev) ++{ ++ return ec_read(vor[dev]); ++} ++ ++static int yeeloong_vo_get_status(struct output_device *od) ++{ ++ int vd; ++ ++ vd = get_vo_dev(od); ++ if (vd != -1) ++ return vo_get_status(vd); ++ ++ return -ENODEV; ++} ++ ++static void vo_set_state(int dev, int state) ++{ ++ int addr; ++ unsigned long value; ++ ++ switch (dev) { ++ case LCD: ++ addr = 0x31; ++ break; ++ case CRT: ++ addr = 0x21; ++ break; ++ default: ++ /* return directly if the wrong video output device */ ++ return; ++ } ++ ++ outb(addr, 0x3c4); ++ value = inb(0x3c5); ++ ++ switch (dev) { ++ case LCD: ++ value |= (state ? 0x03 : 0x02); ++ break; ++ case CRT: ++ if (state) ++ clear_bit(7, &value); ++ else ++ set_bit(7, &value); ++ break; ++ default: ++ break; ++ } ++ ++ outb(addr, 0x3c4); ++ outb(value, 0x3c5); ++ ++ if (dev == LCD) ++ ec_write(REG_BACKLIGHT_CTRL, state); ++} ++ ++static int yeeloong_vo_set_state(struct output_device *od) ++{ ++ int vd; ++ ++ vd = get_vo_dev(od); ++ if (vd == -1) ++ return -ENODEV; ++ ++ if (vd == CRT && !vo_get_status(vd)) ++ return 0; ++ ++ vo_set_state(vd, !!od->request_state); ++ ++ return 0; ++} ++ ++static struct output_properties vop = { ++ .set_state = yeeloong_vo_set_state, ++ .get_status = yeeloong_vo_get_status, ++}; ++ ++static int yeeloong_vo_init(void) ++{ ++ int ret, i; ++ char dev_name[VOD_NUM][4] = {"LCD", "CRT"}; ++ ++ /* Register video output device: lcd, crt */ ++ for (i = 0; i < VOD_NUM; i++) { ++ vod[i] = video_output_register(dev_name[i], NULL, NULL, &vop); ++ if (IS_ERR(vod[i])) { ++ if (i != 0) ++ video_output_unregister(vod[i-1]); ++ ret = PTR_ERR(vod[i]); ++ vod[i] = NULL; ++ return ret; ++ } ++ } ++ /* Ensure LCD is on by default */ ++ vo_set_state(LCD, ON); ++ ++ /* ++ * Turn off CRT by default, and will be enabled when the CRT ++ * connectting event reported by SCI ++ */ ++ vo_set_state(CRT, OFF); ++ ++ return 0; ++} ++ ++static void yeeloong_vo_exit(void) ++{ ++ int i; ++ ++ for (i = 0; i < VOD_NUM; i++) { ++ if (vod[i]) { ++ video_output_unregister(vod[i]); ++ vod[i] = NULL; ++ } ++ } ++} ++ ++/* lcd subdriver */ ++ ++struct lcd_device *lcd[VOD_NUM]; ++ ++static int get_lcd_dev(struct lcd_device *ld) ++{ ++ int i, dev; ++ ++ dev = -1; ++ for (i = 0; i < VOD_NUM; i++) ++ if (ld == lcd[i]) ++ dev = i; ++ ++ return dev; ++} ++ ++static int yeeloong_lcd_set_power(struct lcd_device *ld, int power) ++{ ++ int dev = get_lcd_dev(ld); ++ ++ if (power == FB_BLANK_UNBLANK) ++ vo_set_state(dev, ON); ++ if (power == FB_BLANK_POWERDOWN) ++ vo_set_state(dev, OFF); ++ ++ return 0; ++} ++ ++static int yeeloong_lcd_get_power(struct lcd_device *ld) ++{ ++ return vo_get_status(get_lcd_dev(ld)); ++} ++ ++static struct lcd_ops lcd_ops = { ++ .set_power = yeeloong_lcd_set_power, ++ .get_power = yeeloong_lcd_get_power, ++}; ++ ++static int yeeloong_lcd_init(void) ++{ ++ int ret, i; ++ char dev_name[VOD_NUM][4] = {"LCD", "CRT"}; ++ ++ /* Register video output device: lcd, crt */ ++ for (i = 0; i < VOD_NUM; i++) { ++ lcd[i] = lcd_device_register(dev_name[i], NULL, NULL, &lcd_ops); ++ if (IS_ERR(lcd[i])) { ++ if (i != 0) ++ lcd_device_unregister(lcd[i-1]); ++ ret = PTR_ERR(lcd[i]); ++ lcd[i] = NULL; ++ return ret; ++ } ++ } ++#if 0 ++ /* This has been done by the vide output driver */ ++ ++ /* Ensure LCD is on by default */ ++ vo_set_state(LCD, ON); ++ ++ /* ++ * Turn off CRT by default, and will be enabled when the CRT ++ * connectting event reported by SCI ++ */ ++ vo_set_state(CRT, OFF); ++#endif ++ return 0; ++} ++ ++static void yeeloong_lcd_exit(void) ++{ ++ int i; ++ ++ for (i = 0; i < VOD_NUM; i++) { ++ if (lcd[i]) { ++ lcd_device_unregister(lcd[i]); ++ lcd[i] = NULL; ++ } ++ } ++} ++ ++/* hotkey subdriver */ ++ ++static struct input_dev *yeeloong_hotkey_dev; ++ ++static atomic_t reboot_flag, sleep_flag; ++#define in_sleep() (&sleep_flag) ++#define in_reboot() (&reboot_flag) ++ ++static const struct key_entry yeeloong_keymap[] = { ++ {KE_SW, EVENT_LID, { SW_LID } }, ++ {KE_KEY, EVENT_CAMERA, { KEY_CAMERA } }, /* Fn + ESC */ ++ {KE_KEY, EVENT_SLEEP, { KEY_SLEEP } }, /* Fn + F1 */ ++ {KE_KEY, EVENT_BLACK_SCREEN, { KEY_DISPLAYTOGGLE } }, /* Fn + F2 */ ++ {KE_KEY, EVENT_DISPLAY_TOGGLE, { KEY_SWITCHVIDEOMODE } }, /* Fn + F3 */ ++ {KE_KEY, EVENT_AUDIO_MUTE, { KEY_MUTE } }, /* Fn + F4 */ ++ {KE_KEY, EVENT_WLAN, { KEY_WLAN } }, /* Fn + F5 */ ++ {KE_KEY, EVENT_DISPLAY_BRIGHTNESS, { KEY_BRIGHTNESSUP } }, /* Fn + up */ ++ {KE_KEY, EVENT_DISPLAY_BRIGHTNESS, { KEY_BRIGHTNESSDOWN } }, /* Fn + down */ ++ {KE_KEY, EVENT_AUDIO_VOLUME, { KEY_VOLUMEUP } }, /* Fn + right */ ++ {KE_KEY, EVENT_AUDIO_VOLUME, { KEY_VOLUMEDOWN } }, /* Fn + left */ ++ {KE_END, 0} ++}; ++ ++static int is_fake_event(u16 keycode) ++{ ++ switch (keycode) { ++ case KEY_SLEEP: ++ case SW_LID: ++ return atomic_read(in_sleep()) | atomic_read(in_reboot()); ++ break; ++ default: ++ break; ++ } ++ return 0; ++} ++ ++static struct key_entry *get_event_key_entry(int event, int status) ++{ ++ struct key_entry *ke; ++ static int old_brightness_status = -1; ++ static int old_volume_status = -1; ++ ++ ke = sparse_keymap_entry_from_scancode(yeeloong_hotkey_dev, event); ++ if (!ke) ++ return NULL; ++ ++ switch (event) { ++ case EVENT_DISPLAY_BRIGHTNESS: ++ /* current status > old one, means up */ ++ if ((status < old_brightness_status) || (0 == status)) ++ ke++; ++ old_brightness_status = status; ++ break; ++ case EVENT_AUDIO_VOLUME: ++ if ((status < old_volume_status) || (0 == status)) ++ ke++; ++ old_volume_status = status; ++ break; ++ default: ++ break; ++ } ++ ++ return ke; ++} ++ ++static int report_lid_switch(int status) ++{ ++ static int old_status; ++ ++ /* ++ * LID is a switch button, so, two continuous same status should be ++ * ignored ++ */ ++ if (old_status != status) { ++ input_report_switch(yeeloong_hotkey_dev, SW_LID, !status); ++ input_sync(yeeloong_hotkey_dev); ++ } ++ old_status = status; ++ ++ return status; ++} ++ ++static int crt_detect_handler(int status) ++{ ++ /* ++ * When CRT is inserted, enable its output and disable the LCD output, ++ * otherwise, do reversely. ++ */ ++ vo_set_state(CRT, status); ++ vo_set_state(LCD, !status); ++ ++ return status; ++} ++ ++static int displaytoggle_handler(int status) ++{ ++ /* EC(>=PQ1D26) does this job for us, we can not do it again, ++ * otherwise, the brightness will not resume to the normal level! */ ++ if (ec_version_before("EC_VER=PQ1D26")) ++ vo_set_state(LCD, status); ++ ++ return status; ++} ++ ++static int mypow(int x, int y) ++{ ++ int i, j = x; ++ ++ for (i = 1; i < y; i++) ++ j *= j; ++ ++ return j; ++} ++ ++static int switchvideomode_handler(int status) ++{ ++ /* Default status: CRT|LCD = 0|1 = 1 */ ++ static int bin_state = 1; ++ int i; ++ ++ /* ++ * Only enable switch video output button ++ * when CRT is connected ++ */ ++ if (!vo_get_status(CRT)) ++ return 0; ++ /* ++ * 2. no CRT connected: LCD on, CRT off ++ * 3. BOTH on ++ * 0. BOTH off ++ * 1. LCD off, CRT on ++ */ ++ ++ bin_state++; ++ if (bin_state > mypow(2, VOD_NUM) - 1) ++ bin_state = 0; ++ ++ for (i = 0; i < VOD_NUM; i++) ++ vo_set_state(i, bin_state & (1 << i)); ++ ++ return bin_state; ++} ++ ++static int camera_handler(int status) ++{ ++ int value; ++ ++ value = ec_read(REG_CAMERA_CONTROL); ++ ec_write(REG_CAMERA_CONTROL, value | (1 << 1)); ++ ++ return status; ++} ++ ++static int usb2_handler(int status) ++{ ++ pr_emerg("USB2 Over Current occurred\n"); ++ ++ return status; ++} ++ ++static int usb0_handler(int status) ++{ ++ pr_emerg("USB0 Over Current occurred\n"); ++ ++ return status; ++} ++ ++static int ac_bat_handler(int status) ++{ ++ if (ac_bat_initialized) { ++ power_supply_changed(&yeeloong_ac); ++ power_supply_changed(&yeeloong_bat); ++ } ++ ++ return status; ++} ++ ++struct sci_event { ++ int reg; ++ sci_handler handler; ++}; ++ ++static const struct sci_event se[] = { ++ [EVENT_AC_BAT] = {0, ac_bat_handler}, ++ [EVENT_AUDIO_MUTE] = {REG_AUDIO_MUTE, NULL}, ++ [EVENT_AUDIO_VOLUME] = {REG_AUDIO_VOLUME, NULL}, ++ [EVENT_CRT_DETECT] = {REG_CRT_DETECT, crt_detect_handler}, ++ [EVENT_CAMERA] = {REG_CAMERA_STATUS, camera_handler}, ++ [EVENT_BLACK_SCREEN] = {REG_DISPLAY_LCD, displaytoggle_handler}, ++ [EVENT_DISPLAY_BRIGHTNESS] = {REG_DISPLAY_BRIGHTNESS, NULL}, ++ [EVENT_LID] = {REG_LID_DETECT, NULL}, ++ [EVENT_DISPLAY_TOGGLE] = {0, switchvideomode_handler}, ++ [EVENT_USB_OC0] = {REG_USB2_FLAG, usb0_handler}, ++ [EVENT_USB_OC2] = {REG_USB2_FLAG, usb2_handler}, ++ [EVENT_WLAN] = {REG_WLAN, NULL}, ++}; ++ ++static void do_event_action(int event) ++{ ++ int status = -1; ++ struct key_entry *ke; ++ struct sci_event *sep; ++ ++ sep = (struct sci_event *)&se[event]; ++ ++ if (sep->reg != 0) ++ status = ec_read(sep->reg); ++ ++ if (status == -1) { ++ /* ec_read hasn't been called, status is invalid */ ++ return; ++ } ++ ++ if (sep->handler != NULL) ++ status = sep->handler(status); ++ ++ pr_debug("%s: event: %d status: %d\n", __func__, event, status); ++ ++ /* Report current key to user-space */ ++ ke = get_event_key_entry(event, status); ++ ++ /* ++ * Ignore the LID and SLEEP event when we are already in sleep or ++ * reboot state, this will avoid the recursive pm operations. but note: ++ * the report_lid_switch() called in arch/mips/loongson/lemote-2f/pm.c ++ * is necessary, because it is used to wake the system from sleep ++ * state. In the future, perhaps SW_LID should works like SLEEP, no ++ * need to function as a SWITCH, just report the state when the LID is ++ * closed is enough, this event can tell the software to "SLEEP", no ++ * need to tell the softwares when we are resuming from "SLEEP". ++ */ ++ if (ke && !is_fake_event(ke->keycode)) { ++ if (ke->keycode == SW_LID) ++ report_lid_switch(status); ++ else ++ sparse_keymap_report_entry(yeeloong_hotkey_dev, ke, 1, ++ true); ++ } ++} ++ ++/* ++ * SCI(system control interrupt) main interrupt routine ++ * ++ * We will do the query and get event number together so the interrupt routine ++ * should be longer than 120us now at least 3ms elpase for it. ++ */ ++static irqreturn_t sci_irq_handler(int irq, void *dev_id) ++{ ++ int ret, event; ++ ++ if (SCI_IRQ_NUM != irq) ++ return IRQ_NONE; ++ ++ /* Query the event number */ ++ ret = ec_query_event_num(); ++ if (ret < 0) ++ return IRQ_NONE; ++ ++ event = ec_get_event_num(); ++ if (event < EVENT_START || event > EVENT_END) ++ return IRQ_NONE; ++ ++ /* Execute corresponding actions */ ++ do_event_action(event); ++ ++ return IRQ_HANDLED; ++} ++ ++/* ++ * Config and init some msr and gpio register properly. ++ */ ++static int sci_irq_init(void) ++{ ++ u32 hi, lo; ++ u32 gpio_base; ++ unsigned long flags; ++ int ret; ++ ++ /* Get gpio base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &lo); ++ gpio_base = lo & 0xff00; ++ ++ /* Filter the former kb3310 interrupt for security */ ++ ret = ec_query_event_num(); ++ if (ret) ++ return ret; ++ ++ /* For filtering next number interrupt */ ++ udelay(10000); ++ ++ /* Set gpio native registers and msrs for GPIO27 SCI EVENT PIN ++ * gpio : ++ * input, pull-up, no-invert, event-count and value 0, ++ * no-filter, no edge mode ++ * gpio27 map to Virtual gpio0 ++ * msr : ++ * no primary and lpc ++ * Unrestricted Z input to IG10 from Virtual gpio 0. ++ */ ++ local_irq_save(flags); ++ _rdmsr(0x80000024, &hi, &lo); ++ lo &= ~(1 << 10); ++ _wrmsr(0x80000024, hi, lo); ++ _rdmsr(0x80000025, &hi, &lo); ++ lo &= ~(1 << 10); ++ _wrmsr(0x80000025, hi, lo); ++ _rdmsr(0x80000023, &hi, &lo); ++ lo |= (0x0a << 0); ++ _wrmsr(0x80000023, hi, lo); ++ local_irq_restore(flags); ++ ++ /* Set gpio27 as sci interrupt ++ * ++ * input, pull-up, no-fliter, no-negedge, invert ++ * the sci event is just about 120us ++ */ ++ asm(".set noreorder\n"); ++ /* input enable */ ++ outl(0x00000800, (gpio_base | 0xA0)); ++ /* revert the input */ ++ outl(0x00000800, (gpio_base | 0xA4)); ++ /* event-int enable */ ++ outl(0x00000800, (gpio_base | 0xB8)); ++ asm(".set reorder\n"); ++ ++ return 0; ++} ++ ++static int notify_reboot(struct notifier_block *nb, unsigned long event, void *buf) ++{ ++ switch (event) { ++ case SYS_RESTART: ++ case SYS_HALT: ++ case SYS_POWER_OFF: ++ atomic_set(in_reboot(), 1); ++ break; ++ default: ++ return NOTIFY_DONE; ++ } ++ ++ return NOTIFY_OK; ++} ++ ++static int notify_pm(struct notifier_block *nb, unsigned long event, void *buf) ++{ ++ switch (event) { ++ case PM_HIBERNATION_PREPARE: ++ case PM_SUSPEND_PREPARE: ++ atomic_inc(in_sleep()); ++ break; ++ case PM_POST_HIBERNATION: ++ case PM_POST_SUSPEND: ++ case PM_RESTORE_PREPARE: /* do we need this ?? */ ++ atomic_dec(in_sleep()); ++ break; ++ default: ++ return NOTIFY_DONE; ++ } ++ ++ pr_debug("%s: event = %lu, in_sleep() = %d\n", __func__, event, ++ atomic_read(in_sleep())); ++ ++ return NOTIFY_OK; ++} ++ ++static struct notifier_block reboot_notifier = { ++ .notifier_call = notify_reboot, ++}; ++ ++static struct notifier_block pm_notifier = { ++ .notifier_call = notify_pm, ++}; ++ ++static int yeeloong_hotkey_init(void) ++{ ++ int ret = 0; ++ ++ ret = register_reboot_notifier(&reboot_notifier); ++ if (ret) { ++ pr_err("Can't register reboot notifier\n"); ++ goto end; ++ } ++ ++ ret = register_pm_notifier(&pm_notifier); ++ if (ret) { ++ pr_err("Can't register pm notifier\n"); ++ goto free_reboot_notifier; ++ } ++ ++ ret = sci_irq_init(); ++ if (ret) { ++ pr_err("Can't init SCI interrupt\n"); ++ goto free_pm_notifier; ++ } ++ ++ ret = request_threaded_irq(SCI_IRQ_NUM, NULL, &sci_irq_handler, ++ IRQF_ONESHOT, "sci", NULL); ++ if (ret) { ++ pr_err("Can't thread SCI interrupt handler\n"); ++ goto free_pm_notifier; ++ } ++ ++ yeeloong_hotkey_dev = input_allocate_device(); ++ ++ if (!yeeloong_hotkey_dev) { ++ ret = -ENOMEM; ++ goto free_irq; ++ } ++ ++ yeeloong_hotkey_dev->name = "HotKeys"; ++ yeeloong_hotkey_dev->phys = "button/input0"; ++ yeeloong_hotkey_dev->id.bustype = BUS_HOST; ++ yeeloong_hotkey_dev->dev.parent = NULL; ++ ++ ret = sparse_keymap_setup(yeeloong_hotkey_dev, yeeloong_keymap, NULL); ++ if (ret) { ++ pr_err("Failed to setup input device keymap\n"); ++ goto free_dev; ++ } ++ ++ ret = input_register_device(yeeloong_hotkey_dev); ++ if (ret) ++ goto free_keymap; ++ ++ /* Update the current status of LID */ ++ report_lid_switch(ON); ++ ++#ifdef CONFIG_LOONGSON_SUSPEND ++ /* Install the real yeeloong_report_lid_status for pm.c */ ++ yeeloong_report_lid_status = report_lid_switch; ++#endif ++ return 0; ++ ++free_keymap: ++ sparse_keymap_free(yeeloong_hotkey_dev); ++free_dev: ++ input_free_device(yeeloong_hotkey_dev); ++free_irq: ++ free_irq(SCI_IRQ_NUM, NULL); ++free_pm_notifier: ++ unregister_pm_notifier(&pm_notifier); ++free_reboot_notifier: ++ unregister_reboot_notifier(&reboot_notifier); ++end: ++ return ret; ++} ++ ++static void yeeloong_hotkey_exit(void) ++{ ++ /* Free irq */ ++ free_irq(SCI_IRQ_NUM, NULL); ++ ++#ifdef CONFIG_LOONGSON_SUSPEND ++ /* Uninstall yeeloong_report_lid_status for pm.c */ ++ if (yeeloong_report_lid_status == report_lid_switch) ++ yeeloong_report_lid_status = NULL; ++#endif ++ ++ if (yeeloong_hotkey_dev) { ++ sparse_keymap_free(yeeloong_hotkey_dev); ++ input_unregister_device(yeeloong_hotkey_dev); ++ yeeloong_hotkey_dev = NULL; ++ } ++} ++ ++#ifdef CONFIG_PM ++static void usb_ports_set(int status) ++{ ++ status = !!status; ++ ++ ec_write(REG_USB0_FLAG, status); ++ ec_write(REG_USB1_FLAG, status); ++ ec_write(REG_USB2_FLAG, status); ++} ++ ++static int yeeloong_suspend(struct device *dev) ++ ++{ ++ if (ec_version_before("EC_VER=PQ1D27")) ++ vo_set_state(LCD, OFF); ++ vo_set_state(CRT, OFF); ++ usb_ports_set(OFF); ++ ++ return 0; ++} ++ ++static int yeeloong_resume(struct device *dev) ++{ ++ int ret; ++ ++ if (ec_version_before("EC_VER=PQ1D27")) ++ vo_set_state(LCD, ON); ++ vo_set_state(CRT, ON); ++ usb_ports_set(ON); ++ ++ ret = sci_irq_init(); ++ if (ret) ++ return -EFAULT; ++ ++ return 0; ++} ++ ++static const SIMPLE_DEV_PM_OPS(yeeloong_pm_ops, yeeloong_suspend, ++ yeeloong_resume); ++#endif ++ ++static struct platform_device_id platform_device_ids[] = { ++ { ++ .name = "yeeloong_laptop", ++ }, ++ {} ++}; ++ ++MODULE_DEVICE_TABLE(platform, platform_device_ids); ++ ++static struct platform_driver platform_driver = { ++ .driver = { ++ .name = "yeeloong_laptop", ++ .owner = THIS_MODULE, ++#ifdef CONFIG_PM ++ .pm = &yeeloong_pm_ops, ++#endif ++ }, ++ .id_table = platform_device_ids, ++}; ++ ++static int __init yeeloong_init(void) ++{ ++ int ret; ++ ++ pr_info("YeeLoong Laptop platform specific driver loaded.\n"); ++ ++ /* Register platform stuff */ ++ ret = platform_driver_register(&platform_driver); ++ if (ret) { ++ pr_err("Failed to register YeeLoong platform driver.\n"); ++ return ret; ++ } ++ ++#define yeeloong_init_drv(drv, alias) do { \ ++ pr_info("Registered YeeLoong " alias " driver.\n"); \ ++ ret = yeeloong_ ## drv ## _init(); \ ++ if (ret) { \ ++ pr_err("Failed to register YeeLoong " alias " driver.\n"); \ ++ yeeloong_ ## drv ## _exit(); \ ++ return ret; \ ++ } \ ++} while (0) ++ ++ yeeloong_init_drv(backlight, "backlight"); ++ yeeloong_init_drv(bat, "battery and AC"); ++ yeeloong_init_drv(hwmon, "hardware monitor"); ++ yeeloong_init_drv(vo, "video output"); ++ yeeloong_init_drv(lcd, "lcd output"); ++ yeeloong_init_drv(hotkey, "hotkey input"); ++ ++ return 0; ++} ++ ++static void __exit yeeloong_exit(void) ++{ ++ yeeloong_hotkey_exit(); ++ yeeloong_lcd_exit(); ++ yeeloong_vo_exit(); ++ yeeloong_hwmon_exit(); ++ yeeloong_bat_exit(); ++ yeeloong_backlight_exit(); ++ platform_driver_unregister(&platform_driver); ++ ++ pr_info("YeeLoong platform specific driver unloaded.\n"); ++} ++ ++module_init(yeeloong_init); ++module_exit(yeeloong_exit); ++ ++MODULE_AUTHOR("Wu Zhangjin ; Liu Junliang "); ++MODULE_DESCRIPTION("YeeLoong laptop driver"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig +index 2e565f8..f142f42 100644 +--- a/drivers/rtc/Kconfig ++++ b/drivers/rtc/Kconfig +@@ -661,6 +661,7 @@ comment "Platform RTC drivers" + config RTC_DRV_CMOS + tristate "PC-style 'CMOS'" + depends on X86 || ARM || M32R || PPC || MIPS || SPARC64 ++ depends on !DEXXON_GDIUM + default y if X86 + help + Say "yes" here to get direct support for the real time clock +diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig +index 22365f1..757d7ce 100644 +--- a/drivers/staging/Kconfig ++++ b/drivers/staging/Kconfig +@@ -80,6 +80,8 @@ source "drivers/staging/wlags49_h2/Kconfig" + + source "drivers/staging/wlags49_h25/Kconfig" + ++source "drivers/staging/sm7xxfb/Kconfig" ++ + source "drivers/staging/crystalhd/Kconfig" + + source "drivers/staging/cxt1e1/Kconfig" +diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile +index fbe84ed..585bfcef 100644 +--- a/drivers/staging/Makefile ++++ b/drivers/staging/Makefile +@@ -34,6 +34,7 @@ obj-$(CONFIG_DX_SEP) += sep/ + obj-$(CONFIG_IIO) += iio/ + obj-$(CONFIG_WLAGS49_H2) += wlags49_h2/ + obj-$(CONFIG_WLAGS49_H25) += wlags49_h25/ ++obj-$(CONFIG_FB_SM7XX) += sm7xxfb/ + obj-$(CONFIG_CRYSTALHD) += crystalhd/ + obj-$(CONFIG_CXT1E1) += cxt1e1/ + obj-$(CONFIG_FB_XGI) += xgifb/ +diff --git a/drivers/staging/sm7xxfb/Kconfig b/drivers/staging/sm7xxfb/Kconfig +new file mode 100644 +index 0000000..e2922ae +--- /dev/null ++++ b/drivers/staging/sm7xxfb/Kconfig +@@ -0,0 +1,13 @@ ++config FB_SM7XX ++ tristate "Silicon Motion SM7XX framebuffer support" ++ depends on FB && PCI ++ select FB_CFB_FILLRECT ++ select FB_CFB_COPYAREA ++ select FB_CFB_IMAGEBLIT ++ help ++ Frame buffer driver for the Silicon Motion SM710, SM712, SM721 ++ and SM722 chips. ++ ++ This driver is also available as a module. The module will be ++ called sm7xxfb. If you want to compile it as a module, say M ++ here and read . +diff --git a/drivers/staging/sm7xxfb/Makefile b/drivers/staging/sm7xxfb/Makefile +new file mode 100644 +index 0000000..48f471c +--- /dev/null ++++ b/drivers/staging/sm7xxfb/Makefile +@@ -0,0 +1 @@ ++obj-$(CONFIG_FB_SM7XX) += sm7xxfb.o +diff --git a/drivers/staging/sm7xxfb/TODO b/drivers/staging/sm7xxfb/TODO +new file mode 100644 +index 0000000..1fcead5 +--- /dev/null ++++ b/drivers/staging/sm7xxfb/TODO +@@ -0,0 +1,9 @@ ++TODO: ++- Dual head support ++- 2D acceleration support ++- use kernel coding style ++- refine the code and remove unused code ++- move it to drivers/video/sm7xxfb.c ++ ++Please send any patches to Greg Kroah-Hartman and ++Teddy Wang . +diff --git a/drivers/staging/sm7xxfb/sm7xx.h b/drivers/staging/sm7xxfb/sm7xx.h +new file mode 100644 +index 0000000..8599861 +--- /dev/null ++++ b/drivers/staging/sm7xxfb/sm7xx.h +@@ -0,0 +1,779 @@ ++/* ++ * Silicon Motion SM712 frame buffer device ++ * ++ * Copyright (C) 2006 Silicon Motion Technology Corp. ++ * Authors: Ge Wang, gewang@siliconmotion.com ++ * Boyod boyod.yang@siliconmotion.com.cn ++ * ++ * Copyright (C) 2009 Lemote, Inc. ++ * Author: Wu Zhangjin, wuzhangjin@gmail.com ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ */ ++ ++#define NR_PALETTE 256 ++ ++#define FB_ACCEL_SMI_LYNX 88 ++ ++#define SCREEN_X_RES 1024 ++#define SCREEN_Y_RES 600 ++#define SCREEN_BPP 16 ++ ++/*Assume SM712 graphics chip has 4MB VRAM */ ++#define SM712_VIDEOMEMORYSIZE 0x00400000 ++/*Assume SM722 graphics chip has 8MB VRAM */ ++#define SM722_VIDEOMEMORYSIZE 0x00800000 ++ ++#define dac_reg (0x3c8) ++#define dac_val (0x3c9) ++ ++extern void __iomem *smtc_RegBaseAddress; ++#define smtc_mmiowb(dat, reg) writeb(dat, smtc_RegBaseAddress + reg) ++#define smtc_mmioww(dat, reg) writew(dat, smtc_RegBaseAddress + reg) ++#define smtc_mmiowl(dat, reg) writel(dat, smtc_RegBaseAddress + reg) ++ ++#define smtc_mmiorb(reg) readb(smtc_RegBaseAddress + reg) ++#define smtc_mmiorw(reg) readw(smtc_RegBaseAddress + reg) ++#define smtc_mmiorl(reg) readl(smtc_RegBaseAddress + reg) ++ ++#define SIZE_SR00_SR04 (0x04 - 0x00 + 1) ++#define SIZE_SR10_SR24 (0x24 - 0x10 + 1) ++#define SIZE_SR30_SR75 (0x75 - 0x30 + 1) ++#define SIZE_SR80_SR93 (0x93 - 0x80 + 1) ++#define SIZE_SRA0_SRAF (0xAF - 0xA0 + 1) ++#define SIZE_GR00_GR08 (0x08 - 0x00 + 1) ++#define SIZE_AR00_AR14 (0x14 - 0x00 + 1) ++#define SIZE_CR00_CR18 (0x18 - 0x00 + 1) ++#define SIZE_CR30_CR4D (0x4D - 0x30 + 1) ++#define SIZE_CR90_CRA7 (0xA7 - 0x90 + 1) ++#define SIZE_VPR (0x6C + 1) ++#define SIZE_DPR (0x44 + 1) ++ ++static inline void smtc_crtcw(int reg, int val) ++{ ++ smtc_mmiowb(reg, 0x3d4); ++ smtc_mmiowb(val, 0x3d5); ++} ++ ++static inline unsigned int smtc_crtcr(int reg) ++{ ++ smtc_mmiowb(reg, 0x3d4); ++ return smtc_mmiorb(0x3d5); ++} ++ ++static inline void smtc_grphw(int reg, int val) ++{ ++ smtc_mmiowb(reg, 0x3ce); ++ smtc_mmiowb(val, 0x3cf); ++} ++ ++static inline unsigned int smtc_grphr(int reg) ++{ ++ smtc_mmiowb(reg, 0x3ce); ++ return smtc_mmiorb(0x3cf); ++} ++ ++static inline void smtc_attrw(int reg, int val) ++{ ++ smtc_mmiorb(0x3da); ++ smtc_mmiowb(reg, 0x3c0); ++ smtc_mmiorb(0x3c1); ++ smtc_mmiowb(val, 0x3c0); ++} ++ ++static inline void smtc_seqw(int reg, int val) ++{ ++ smtc_mmiowb(reg, 0x3c4); ++ smtc_mmiowb(val, 0x3c5); ++} ++ ++static inline unsigned int smtc_seqr(int reg) ++{ ++ smtc_mmiowb(reg, 0x3c4); ++ return smtc_mmiorb(0x3c5); ++} ++ ++/* The next structure holds all information relevant for a specific video mode. ++ */ ++ ++struct ModeInit { ++ int mmSizeX; ++ int mmSizeY; ++ int bpp; ++ int hz; ++ unsigned char Init_MISC; ++ unsigned char Init_SR00_SR04[SIZE_SR00_SR04]; ++ unsigned char Init_SR10_SR24[SIZE_SR10_SR24]; ++ unsigned char Init_SR30_SR75[SIZE_SR30_SR75]; ++ unsigned char Init_SR80_SR93[SIZE_SR80_SR93]; ++ unsigned char Init_SRA0_SRAF[SIZE_SRA0_SRAF]; ++ unsigned char Init_GR00_GR08[SIZE_GR00_GR08]; ++ unsigned char Init_AR00_AR14[SIZE_AR00_AR14]; ++ unsigned char Init_CR00_CR18[SIZE_CR00_CR18]; ++ unsigned char Init_CR30_CR4D[SIZE_CR30_CR4D]; ++ unsigned char Init_CR90_CRA7[SIZE_CR90_CRA7]; ++}; ++ ++/********************************************************************** ++ SM712 Mode table. ++ **********************************************************************/ ++struct ModeInit VGAMode[] = { ++ { ++ /* mode#0: 640 x 480 16Bpp 60Hz */ ++ 640, 480, 16, 60, ++ /* Init_MISC */ ++ 0xE3, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x00, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32, ++ 0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32, ++ 0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA, ++ 0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04, ++ 0x00, 0x45, 0x30, 0x30, 0x40, 0x30, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32, ++ 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED, ++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E, ++ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD, ++ 0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00, ++ 0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55, ++ 0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00, ++ 0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, ++ }, ++ }, ++ { ++ /* mode#1: 640 x 480 24Bpp 60Hz */ ++ 640, 480, 24, 60, ++ /* Init_MISC */ ++ 0xE3, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x00, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32, ++ 0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32, ++ 0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA, ++ 0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04, ++ 0x00, 0x45, 0x30, 0x30, 0x40, 0x30, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32, ++ 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED, ++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E, ++ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD, ++ 0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00, ++ 0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55, ++ 0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00, ++ 0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, ++ }, ++ }, ++ { ++ /* mode#0: 640 x 480 32Bpp 60Hz */ ++ 640, 480, 32, 60, ++ /* Init_MISC */ ++ 0xE3, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x00, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32, ++ 0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32, ++ 0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA, ++ 0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04, ++ 0x00, 0x45, 0x30, 0x30, 0x40, 0x30, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32, ++ 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED, ++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E, ++ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD, ++ 0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00, ++ 0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55, ++ 0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00, ++ 0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, ++ }, ++ }, ++ ++ { /* mode#2: 800 x 600 16Bpp 60Hz */ ++ 800, 600, 16, 60, ++ /* Init_MISC */ ++ 0x2B, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x03, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24, ++ 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24, ++ 0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58, ++ 0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24, ++ 0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13, ++ 0x02, 0x45, 0x30, 0x35, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24, ++ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED, ++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD, ++ 0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00, ++ 0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA, ++ 0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00, ++ 0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00, ++ }, ++ }, ++ { /* mode#3: 800 x 600 24Bpp 60Hz */ ++ 800, 600, 24, 60, ++ 0x2B, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x03, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x36, 0x03, 0x20, 0x09, 0xC0, 0x36, 0x36, 0x36, ++ 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x36, 0x36, 0x36, ++ 0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58, ++ 0x04, 0x55, 0x59, 0x36, 0x36, 0x00, 0x00, 0x36, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13, ++ 0x02, 0x45, 0x30, 0x30, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x36, ++ 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x36, 0x36, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED, ++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD, ++ 0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00, ++ 0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA, ++ 0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00, ++ 0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00, ++ }, ++ }, ++ { /* mode#7: 800 x 600 32Bpp 60Hz */ ++ 800, 600, 32, 60, ++ /* Init_MISC */ ++ 0x2B, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x03, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24, ++ 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24, ++ 0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58, ++ 0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24, ++ 0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13, ++ 0x02, 0x45, 0x30, 0x35, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24, ++ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED, ++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD, ++ 0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00, ++ 0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA, ++ 0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00, ++ 0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00, ++ }, ++ }, ++ /* We use 1024x768 table to light 1024x600 panel for lemote */ ++ { /* mode#4: 1024 x 600 16Bpp 60Hz */ ++ 1024, 600, 16, 60, ++ /* Init_MISC */ ++ 0xEB, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x00, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xC8, 0x40, 0x14, 0x60, 0x00, 0x0A, 0x17, 0x20, ++ 0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x00, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x22, 0x03, 0x24, 0x09, 0xC0, 0x22, 0x22, 0x22, ++ 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x22, 0x22, 0x22, ++ 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03, ++ 0x00, 0x60, 0x59, 0x22, 0x22, 0x00, 0x00, 0x22, ++ 0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x16, 0x02, 0x0D, 0x82, 0x09, 0x02, ++ 0x04, 0x45, 0x3F, 0x30, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A, ++ 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED, ++ 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF, ++ 0xA3, 0x7F, 0x00, 0x82, 0x0b, 0x6f, 0x57, 0x00, ++ 0x5c, 0x0f, 0xE0, 0xe0, 0x7F, 0x57, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26, ++ 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00, ++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03, ++ }, ++ }, ++ { /* mode#5: 1024 x 768 24Bpp 60Hz */ ++ 1024, 768, 24, 60, ++ /* Init_MISC */ ++ 0xEB, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x03, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A, ++ 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A, ++ 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03, ++ 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02, ++ 0x04, 0x45, 0x30, 0x30, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A, ++ 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED, ++ 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF, ++ 0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00, ++ 0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26, ++ 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00, ++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03, ++ }, ++ }, ++ { /* mode#4: 1024 x 768 32Bpp 60Hz */ ++ 1024, 768, 32, 60, ++ /* Init_MISC */ ++ 0xEB, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x03, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x32, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A, ++ 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A, ++ 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03, ++ 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02, ++ 0x04, 0x45, 0x30, 0x30, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A, ++ 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED, ++ 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF, ++ 0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00, ++ 0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26, ++ 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00, ++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03, ++ }, ++ }, ++ { /* mode#6: 320 x 240 16Bpp 60Hz */ ++ 320, 240, 16, 60, ++ /* Init_MISC */ ++ 0xEB, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x03, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x32, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A, ++ 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A, ++ 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03, ++ 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43, ++ 0x04, 0x45, 0x30, 0x30, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A, ++ 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED, ++ 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20, ++ 0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF, ++ 0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00, ++ 0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26, ++ 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00, ++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03, ++ }, ++ }, ++ ++ { /* mode#8: 320 x 240 32Bpp 60Hz */ ++ 320, 240, 32, 60, ++ /* Init_MISC */ ++ 0xEB, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x03, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x32, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A, ++ 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A, ++ 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03, ++ 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43, ++ 0x04, 0x45, 0x30, 0x30, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A, ++ 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED, ++ 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20, ++ 0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF, ++ 0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00, ++ 0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26, ++ 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00, ++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03, ++ }, ++ }, ++}; ++ ++#define numVGAModes ARRAY_SIZE(VGAMode) +diff --git a/drivers/staging/sm7xxfb/sm7xxfb.c b/drivers/staging/sm7xxfb/sm7xxfb.c +new file mode 100644 +index 0000000..e40ce80 +--- /dev/null ++++ b/drivers/staging/sm7xxfb/sm7xxfb.c +@@ -0,0 +1,1029 @@ ++/* ++ * Silicon Motion SM7XX frame buffer device ++ * ++ * Copyright (C) 2006 Silicon Motion Technology Corp. ++ * Authors: Ge Wang, gewang@siliconmotion.com ++ * Boyod boyod.yang@siliconmotion.com.cn ++ * ++ * Copyright (C) 2009 Lemote, Inc. ++ * Author: Wu Zhangjin, wuzhangjin@gmail.com ++ * ++ * Copyright (C) 2011 Igalia, S.L. ++ * Author: Javier M. Mellid ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * Framebuffer driver for Silicon Motion SM710, SM712, SM721 and SM722 chips ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef CONFIG_PM ++#include ++#endif ++ ++#include "sm7xx.h" ++ ++/* ++* Private structure ++*/ ++struct smtcfb_info { ++ struct pci_dev *pdev; ++ struct fb_info fb; ++ u16 chip_id; ++ u8 chip_rev_id; ++ ++ void __iomem *lfb; /* linear frame buffer */ ++ void __iomem *dp_regs; /* drawing processor control regs */ ++ void __iomem *vp_regs; /* video processor control regs */ ++ void __iomem *cp_regs; /* capture processor control regs */ ++ void __iomem *mmio; /* memory map IO port */ ++ ++ u_int width; ++ u_int height; ++ u_int hz; ++ ++ u32 colreg[17]; ++}; ++ ++void __iomem *smtc_RegBaseAddress; /* Memory Map IO starting address */ ++ ++static struct fb_var_screeninfo smtcfb_var = { ++ .xres = 1024, ++ .yres = 600, ++ .xres_virtual = 1024, ++ .yres_virtual = 600, ++ .bits_per_pixel = 16, ++ .red = {16, 8, 0}, ++ .green = {8, 8, 0}, ++ .blue = {0, 8, 0}, ++ .activate = FB_ACTIVATE_NOW, ++ .height = -1, ++ .width = -1, ++ .vmode = FB_VMODE_NONINTERLACED, ++ .nonstd = 0, ++ .accel_flags = FB_ACCELF_TEXT, ++}; ++ ++static struct fb_fix_screeninfo smtcfb_fix = { ++ .id = "smXXXfb", ++ .type = FB_TYPE_PACKED_PIXELS, ++ .visual = FB_VISUAL_TRUECOLOR, ++ .line_length = 800 * 3, ++ .accel = FB_ACCEL_SMI_LYNX, ++ .type_aux = 0, ++ .xpanstep = 0, ++ .ypanstep = 0, ++ .ywrapstep = 0, ++}; ++ ++struct vesa_mode { ++ char index[6]; ++ u16 lfb_width; ++ u16 lfb_height; ++ u16 lfb_depth; ++}; ++ ++static struct vesa_mode vesa_mode_table[] = { ++ {"0x301", 640, 480, 8}, ++ {"0x303", 800, 600, 8}, ++ {"0x305", 1024, 768, 8}, ++ {"0x307", 1280, 1024, 8}, ++ ++ {"0x311", 640, 480, 16}, ++ {"0x313", 800, 480, 16}, ++ {"0x314", 800, 600, 16}, ++ {"0x317", 1024, 768, 16}, ++ {"0x31A", 1280, 1024, 16}, ++ ++ {"0x312", 640, 480, 24}, ++ {"0x315", 800, 600, 24}, ++ {"0x318", 1024, 768, 24}, ++ {"0x31B", 1280, 1024, 24}, ++}; ++ ++struct screen_info smtc_scr_info; ++ ++/* process command line options, get vga parameter */ ++static int __init sm7xx_vga_setup(char *options) ++{ ++ int i; ++ ++ if (!options || !*options) ++ return -EINVAL; ++ ++ smtc_scr_info.lfb_width = 0; ++ smtc_scr_info.lfb_height = 0; ++ smtc_scr_info.lfb_depth = 0; ++ ++ pr_debug("sm7xx_vga_setup = %s\n", options); ++ ++ for (i = 0; i < ARRAY_SIZE(vesa_mode_table); i++) { ++ if (strstr(options, vesa_mode_table[i].index)) { ++ smtc_scr_info.lfb_width = vesa_mode_table[i].lfb_width; ++ smtc_scr_info.lfb_height = ++ vesa_mode_table[i].lfb_height; ++ smtc_scr_info.lfb_depth = vesa_mode_table[i].lfb_depth; ++ return 0; ++ } ++ } ++ ++ return -1; ++} ++__setup("vga=", sm7xx_vga_setup); ++ ++static void sm712_setpalette(int regno, unsigned red, unsigned green, ++ unsigned blue, struct fb_info *info) ++{ ++ /* set bit 5:4 = 01 (write LCD RAM only) */ ++ smtc_seqw(0x66, (smtc_seqr(0x66) & 0xC3) | 0x10); ++ ++ smtc_mmiowb(regno, dac_reg); ++ smtc_mmiowb(red >> 10, dac_val); ++ smtc_mmiowb(green >> 10, dac_val); ++ smtc_mmiowb(blue >> 10, dac_val); ++} ++ ++/* chan_to_field ++ * ++ * convert a colour value into a field position ++ * ++ * from pxafb.c ++ */ ++ ++static inline unsigned int chan_to_field(unsigned int chan, ++ struct fb_bitfield *bf) ++{ ++ chan &= 0xffff; ++ chan >>= 16 - bf->length; ++ return chan << bf->offset; ++} ++ ++static int smtc_blank(int blank_mode, struct fb_info *info) ++{ ++ /* clear DPMS setting */ ++ switch (blank_mode) { ++ case FB_BLANK_UNBLANK: ++ /* Screen On: HSync: On, VSync : On */ ++ smtc_seqw(0x01, (smtc_seqr(0x01) & (~0x20))); ++ smtc_seqw(0x6a, 0x16); ++ smtc_seqw(0x6b, 0x02); ++ smtc_seqw(0x21, (smtc_seqr(0x21) & 0x77)); ++ smtc_seqw(0x22, (smtc_seqr(0x22) & (~0x30))); ++ smtc_seqw(0x23, (smtc_seqr(0x23) & (~0xc0))); ++ smtc_seqw(0x24, (smtc_seqr(0x24) | 0x01)); ++ smtc_seqw(0x31, (smtc_seqr(0x31) | 0x03)); ++ break; ++ case FB_BLANK_NORMAL: ++ /* Screen Off: HSync: On, VSync : On Soft blank */ ++ smtc_seqw(0x01, (smtc_seqr(0x01) & (~0x20))); ++ smtc_seqw(0x6a, 0x16); ++ smtc_seqw(0x6b, 0x02); ++ smtc_seqw(0x22, (smtc_seqr(0x22) & (~0x30))); ++ smtc_seqw(0x23, (smtc_seqr(0x23) & (~0xc0))); ++ smtc_seqw(0x24, (smtc_seqr(0x24) | 0x01)); ++ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00)); ++ break; ++ case FB_BLANK_VSYNC_SUSPEND: ++ /* Screen On: HSync: On, VSync : Off */ ++ smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20)); ++ smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0))); ++ smtc_seqw(0x6a, 0x0c); ++ smtc_seqw(0x6b, 0x02); ++ smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88)); ++ smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x20)); ++ smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0x20)); ++ smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01))); ++ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00)); ++ smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80)); ++ break; ++ case FB_BLANK_HSYNC_SUSPEND: ++ /* Screen On: HSync: Off, VSync : On */ ++ smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20)); ++ smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0))); ++ smtc_seqw(0x6a, 0x0c); ++ smtc_seqw(0x6b, 0x02); ++ smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88)); ++ smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x10)); ++ smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0xD8)); ++ smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01))); ++ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00)); ++ smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80)); ++ break; ++ case FB_BLANK_POWERDOWN: ++ /* Screen On: HSync: Off, VSync : Off */ ++ smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20)); ++ smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0))); ++ smtc_seqw(0x6a, 0x0c); ++ smtc_seqw(0x6b, 0x02); ++ smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88)); ++ smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x30)); ++ smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0xD8)); ++ smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01))); ++ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00)); ++ smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80)); ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ ++static int smtc_setcolreg(unsigned regno, unsigned red, unsigned green, ++ unsigned blue, unsigned trans, struct fb_info *info) ++{ ++ struct smtcfb_info *sfb; ++ u32 val; ++ ++ sfb = info->par; ++ ++ if (regno > 255) ++ return 1; ++ ++ switch (sfb->fb.fix.visual) { ++ case FB_VISUAL_DIRECTCOLOR: ++ case FB_VISUAL_TRUECOLOR: ++ /* ++ * 16/32 bit true-colour, use pseudo-palette for 16 base color ++ */ ++ if (regno < 16) { ++ if (sfb->fb.var.bits_per_pixel == 16) { ++ u32 *pal = sfb->fb.pseudo_palette; ++ val = chan_to_field(red, &sfb->fb.var.red); ++ val |= chan_to_field(green, &sfb->fb.var.green); ++ val |= chan_to_field(blue, &sfb->fb.var.blue); ++#ifdef __BIG_ENDIAN ++ pal[regno] = ++ ((red & 0xf800) >> 8) | ++ ((green & 0xe000) >> 13) | ++ ((green & 0x1c00) << 3) | ++ ((blue & 0xf800) >> 3); ++#else ++ pal[regno] = val; ++#endif ++ } else { ++ u32 *pal = sfb->fb.pseudo_palette; ++ val = chan_to_field(red, &sfb->fb.var.red); ++ val |= chan_to_field(green, &sfb->fb.var.green); ++ val |= chan_to_field(blue, &sfb->fb.var.blue); ++#ifdef __BIG_ENDIAN ++ val = ++ (val & 0xff00ff00 >> 8) | ++ (val & 0x00ff00ff << 8); ++#endif ++ pal[regno] = val; ++ } ++ } ++ break; ++ ++ case FB_VISUAL_PSEUDOCOLOR: ++ /* color depth 8 bit */ ++ sm712_setpalette(regno, red, green, blue, info); ++ break; ++ ++ default: ++ return 1; /* unknown type */ ++ } ++ ++ return 0; ++ ++} ++ ++#ifdef __BIG_ENDIAN ++static ssize_t smtcfb_read(struct fb_info *info, char __user *buf, size_t ++ count, loff_t *ppos) ++{ ++ unsigned long p = *ppos; ++ ++ u32 *buffer, *dst; ++ u32 __iomem *src; ++ int c, i, cnt = 0, err = 0; ++ unsigned long total_size; ++ ++ if (!info || !info->screen_base) ++ return -ENODEV; ++ ++ if (info->state != FBINFO_STATE_RUNNING) ++ return -EPERM; ++ ++ total_size = info->screen_size; ++ ++ if (total_size == 0) ++ total_size = info->fix.smem_len; ++ ++ if (p >= total_size) ++ return 0; ++ ++ if (count >= total_size) ++ count = total_size; ++ ++ if (count + p > total_size) ++ count = total_size - p; ++ ++ buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL); ++ if (!buffer) ++ return -ENOMEM; ++ ++ src = (u32 __iomem *) (info->screen_base + p); ++ ++ if (info->fbops->fb_sync) ++ info->fbops->fb_sync(info); ++ ++ while (count) { ++ c = (count > PAGE_SIZE) ? PAGE_SIZE : count; ++ dst = buffer; ++ for (i = c >> 2; i--;) { ++ *dst = fb_readl(src++); ++ *dst = ++ (*dst & 0xff00ff00 >> 8) | ++ (*dst & 0x00ff00ff << 8); ++ dst++; ++ } ++ if (c & 3) { ++ u8 *dst8 = (u8 *) dst; ++ u8 __iomem *src8 = (u8 __iomem *) src; ++ ++ for (i = c & 3; i--;) { ++ if (i & 1) { ++ *dst8++ = fb_readb(++src8); ++ } else { ++ *dst8++ = fb_readb(--src8); ++ src8 += 2; ++ } ++ } ++ src = (u32 __iomem *) src8; ++ } ++ ++ if (copy_to_user(buf, buffer, c)) { ++ err = -EFAULT; ++ break; ++ } ++ *ppos += c; ++ buf += c; ++ cnt += c; ++ count -= c; ++ } ++ ++ kfree(buffer); ++ ++ return (err) ? err : cnt; ++} ++ ++static ssize_t ++smtcfb_write(struct fb_info *info, const char __user *buf, size_t count, ++ loff_t *ppos) ++{ ++ unsigned long p = *ppos; ++ ++ u32 *buffer, *src; ++ u32 __iomem *dst; ++ int c, i, cnt = 0, err = 0; ++ unsigned long total_size; ++ ++ if (!info || !info->screen_base) ++ return -ENODEV; ++ ++ if (info->state != FBINFO_STATE_RUNNING) ++ return -EPERM; ++ ++ total_size = info->screen_size; ++ ++ if (total_size == 0) ++ total_size = info->fix.smem_len; ++ ++ if (p > total_size) ++ return -EFBIG; ++ ++ if (count > total_size) { ++ err = -EFBIG; ++ count = total_size; ++ } ++ ++ if (count + p > total_size) { ++ if (!err) ++ err = -ENOSPC; ++ ++ count = total_size - p; ++ } ++ ++ buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL); ++ if (!buffer) ++ return -ENOMEM; ++ ++ dst = (u32 __iomem *) (info->screen_base + p); ++ ++ if (info->fbops->fb_sync) ++ info->fbops->fb_sync(info); ++ ++ while (count) { ++ c = (count > PAGE_SIZE) ? PAGE_SIZE : count; ++ src = buffer; ++ ++ if (copy_from_user(src, buf, c)) { ++ err = -EFAULT; ++ break; ++ } ++ ++ for (i = c >> 2; i--;) { ++ fb_writel((*src & 0xff00ff00 >> 8) | ++ (*src & 0x00ff00ff << 8), dst++); ++ src++; ++ } ++ if (c & 3) { ++ u8 *src8 = (u8 *) src; ++ u8 __iomem *dst8 = (u8 __iomem *) dst; ++ ++ for (i = c & 3; i--;) { ++ if (i & 1) { ++ fb_writeb(*src8++, ++dst8); ++ } else { ++ fb_writeb(*src8++, --dst8); ++ dst8 += 2; ++ } ++ } ++ dst = (u32 __iomem *) dst8; ++ } ++ ++ *ppos += c; ++ buf += c; ++ cnt += c; ++ count -= c; ++ } ++ ++ kfree(buffer); ++ ++ return (cnt) ? cnt : err; ++} ++#endif /* ! __BIG_ENDIAN */ ++ ++static void sm7xx_set_timing(struct smtcfb_info *sfb) ++{ ++ int i = 0, j = 0; ++ u32 m_nScreenStride; ++ ++ dev_dbg(&sfb->pdev->dev, ++ "sfb->width=%d sfb->height=%d " ++ "sfb->fb.var.bits_per_pixel=%d sfb->hz=%d\n", ++ sfb->width, sfb->height, sfb->fb.var.bits_per_pixel, sfb->hz); ++ ++ for (j = 0; j < numVGAModes; j++) { ++ if (VGAMode[j].mmSizeX == sfb->width && ++ VGAMode[j].mmSizeY == sfb->height && ++ VGAMode[j].bpp == sfb->fb.var.bits_per_pixel && ++ VGAMode[j].hz == sfb->hz) { ++ ++ dev_dbg(&sfb->pdev->dev, ++ "VGAMode[j].mmSizeX=%d VGAMode[j].mmSizeY=%d " ++ "VGAMode[j].bpp=%d VGAMode[j].hz=%d\n", ++ VGAMode[j].mmSizeX, VGAMode[j].mmSizeY, ++ VGAMode[j].bpp, VGAMode[j].hz); ++ ++ dev_dbg(&sfb->pdev->dev, "VGAMode index=%d\n", j); ++ ++ smtc_mmiowb(0x0, 0x3c6); ++ ++ smtc_seqw(0, 0x1); ++ ++ smtc_mmiowb(VGAMode[j].Init_MISC, 0x3c2); ++ ++ /* init SEQ register SR00 - SR04 */ ++ for (i = 0; i < SIZE_SR00_SR04; i++) ++ smtc_seqw(i, VGAMode[j].Init_SR00_SR04[i]); ++ ++ /* init SEQ register SR10 - SR24 */ ++ for (i = 0; i < SIZE_SR10_SR24; i++) ++ smtc_seqw(i + 0x10, ++ VGAMode[j].Init_SR10_SR24[i]); ++ ++ /* init SEQ register SR30 - SR75 */ ++ for (i = 0; i < SIZE_SR30_SR75; i++) ++ if ((i + 0x30) != 0x62 && ++ (i + 0x30) != 0x6a && ++ (i + 0x30) != 0x6b) ++ smtc_seqw(i + 0x30, ++ VGAMode[j].Init_SR30_SR75[i]); ++ ++ /* init SEQ register SR80 - SR93 */ ++ for (i = 0; i < SIZE_SR80_SR93; i++) ++ smtc_seqw(i + 0x80, ++ VGAMode[j].Init_SR80_SR93[i]); ++ ++ /* init SEQ register SRA0 - SRAF */ ++ for (i = 0; i < SIZE_SRA0_SRAF; i++) ++ smtc_seqw(i + 0xa0, ++ VGAMode[j].Init_SRA0_SRAF[i]); ++ ++ /* init Graphic register GR00 - GR08 */ ++ for (i = 0; i < SIZE_GR00_GR08; i++) ++ smtc_grphw(i, VGAMode[j].Init_GR00_GR08[i]); ++ ++ /* init Attribute register AR00 - AR14 */ ++ for (i = 0; i < SIZE_AR00_AR14; i++) ++ smtc_attrw(i, VGAMode[j].Init_AR00_AR14[i]); ++ ++ /* init CRTC register CR00 - CR18 */ ++ for (i = 0; i < SIZE_CR00_CR18; i++) ++ smtc_crtcw(i, VGAMode[j].Init_CR00_CR18[i]); ++ ++ /* init CRTC register CR30 - CR4D */ ++ for (i = 0; i < SIZE_CR30_CR4D; i++) ++ smtc_crtcw(i + 0x30, ++ VGAMode[j].Init_CR30_CR4D[i]); ++ ++ /* init CRTC register CR90 - CRA7 */ ++ for (i = 0; i < SIZE_CR90_CRA7; i++) ++ smtc_crtcw(i + 0x90, ++ VGAMode[j].Init_CR90_CRA7[i]); ++ } ++ } ++ smtc_mmiowb(0x67, 0x3c2); ++ ++ /* set VPR registers */ ++ writel(0x0, sfb->vp_regs + 0x0C); ++ writel(0x0, sfb->vp_regs + 0x40); ++ ++ /* set data width */ ++ m_nScreenStride = ++ (sfb->width * sfb->fb.var.bits_per_pixel) / 64; ++ switch (sfb->fb.var.bits_per_pixel) { ++ case 8: ++ writel(0x0, sfb->vp_regs + 0x0); ++ break; ++ case 16: ++ writel(0x00020000, sfb->vp_regs + 0x0); ++ break; ++ case 24: ++ writel(0x00040000, sfb->vp_regs + 0x0); ++ break; ++ case 32: ++ writel(0x00030000, sfb->vp_regs + 0x0); ++ break; ++ } ++ writel((u32) (((m_nScreenStride + 2) << 16) | m_nScreenStride), ++ sfb->vp_regs + 0x10); ++ ++} ++ ++static void smtc_set_timing(struct smtcfb_info *sfb) ++{ ++ switch (sfb->chip_id) { ++ case 0x710: ++ case 0x712: ++ case 0x720: ++ sm7xx_set_timing(sfb); ++ break; ++ } ++} ++ ++static void smtcfb_setmode(struct smtcfb_info *sfb) ++{ ++ switch (sfb->fb.var.bits_per_pixel) { ++ case 32: ++ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR; ++ sfb->fb.fix.line_length = sfb->fb.var.xres * 4; ++ sfb->fb.var.red.length = 8; ++ sfb->fb.var.green.length = 8; ++ sfb->fb.var.blue.length = 8; ++ sfb->fb.var.red.offset = 16; ++ sfb->fb.var.green.offset = 8; ++ sfb->fb.var.blue.offset = 0; ++ break; ++ case 24: ++ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR; ++ sfb->fb.fix.line_length = sfb->fb.var.xres * 3; ++ sfb->fb.var.red.length = 8; ++ sfb->fb.var.green.length = 8; ++ sfb->fb.var.blue.length = 8; ++ sfb->fb.var.red.offset = 16; ++ sfb->fb.var.green.offset = 8; ++ sfb->fb.var.blue.offset = 0; ++ break; ++ case 8: ++ sfb->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR; ++ sfb->fb.fix.line_length = sfb->fb.var.xres; ++ sfb->fb.var.red.length = 3; ++ sfb->fb.var.green.length = 3; ++ sfb->fb.var.blue.length = 2; ++ sfb->fb.var.red.offset = 5; ++ sfb->fb.var.green.offset = 2; ++ sfb->fb.var.blue.offset = 0; ++ break; ++ case 16: ++ default: ++ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR; ++ sfb->fb.fix.line_length = sfb->fb.var.xres * 2; ++ sfb->fb.var.red.length = 5; ++ sfb->fb.var.green.length = 6; ++ sfb->fb.var.blue.length = 5; ++ sfb->fb.var.red.offset = 11; ++ sfb->fb.var.green.offset = 5; ++ sfb->fb.var.blue.offset = 0; ++ break; ++ } ++ ++ sfb->width = sfb->fb.var.xres; ++ sfb->height = sfb->fb.var.yres; ++ sfb->hz = 60; ++ smtc_set_timing(sfb); ++} ++ ++static int smtc_check_var(struct fb_var_screeninfo *var, struct fb_info *info) ++{ ++ /* sanity checks */ ++ if (var->xres_virtual < var->xres) ++ var->xres_virtual = var->xres; ++ ++ if (var->yres_virtual < var->yres) ++ var->yres_virtual = var->yres; ++ ++ /* set valid default bpp */ ++ if ((var->bits_per_pixel != 8) && (var->bits_per_pixel != 16) && ++ (var->bits_per_pixel != 24) && (var->bits_per_pixel != 32)) ++ var->bits_per_pixel = 16; ++ ++ return 0; ++} ++ ++static int smtc_set_par(struct fb_info *info) ++{ ++ smtcfb_setmode(info->par); ++ ++ return 0; ++} ++ ++static struct fb_ops smtcfb_ops = { ++ .owner = THIS_MODULE, ++ .fb_check_var = smtc_check_var, ++ .fb_set_par = smtc_set_par, ++ .fb_setcolreg = smtc_setcolreg, ++ .fb_blank = smtc_blank, ++ .fb_fillrect = cfb_fillrect, ++ .fb_imageblit = cfb_imageblit, ++ .fb_copyarea = cfb_copyarea, ++#ifdef __BIG_ENDIAN ++ .fb_read = smtcfb_read, ++ .fb_write = smtcfb_write, ++#endif ++}; ++ ++/* ++ * alloc struct smtcfb_info and assign default values ++ */ ++static struct smtcfb_info *smtc_alloc_fb_info(struct pci_dev *pdev) ++{ ++ struct smtcfb_info *sfb; ++ ++ sfb = kzalloc(sizeof(*sfb), GFP_KERNEL); ++ ++ if (!sfb) ++ return NULL; ++ ++ sfb->pdev = pdev; ++ ++ sfb->fb.flags = FBINFO_FLAG_DEFAULT; ++ sfb->fb.fbops = &smtcfb_ops; ++ sfb->fb.fix = smtcfb_fix; ++ sfb->fb.var = smtcfb_var; ++ sfb->fb.pseudo_palette = sfb->colreg; ++ sfb->fb.par = sfb; ++ ++ return sfb; ++} ++ ++/* ++ * free struct smtcfb_info ++ */ ++static void smtc_free_fb_info(struct smtcfb_info *sfb) ++{ ++ kfree(sfb); ++} ++ ++/* ++ * Unmap in the memory mapped IO registers ++ */ ++ ++static void smtc_unmap_mmio(struct smtcfb_info *sfb) ++{ ++ if (sfb && smtc_RegBaseAddress) ++ smtc_RegBaseAddress = NULL; ++} ++ ++/* ++ * Map in the screen memory ++ */ ++ ++static int smtc_map_smem(struct smtcfb_info *sfb, ++ struct pci_dev *pdev, u_long smem_len) ++{ ++ ++ sfb->fb.fix.smem_start = pci_resource_start(pdev, 0); ++ ++#ifdef __BIG_ENDIAN ++ if (sfb->fb.var.bits_per_pixel == 32) ++ sfb->fb.fix.smem_start += 0x800000; ++#endif ++ ++ sfb->fb.fix.smem_len = smem_len; ++ ++ sfb->fb.screen_base = sfb->lfb; ++ ++ if (!sfb->fb.screen_base) { ++ dev_err(&pdev->dev, ++ "%s: unable to map screen memory\n", sfb->fb.fix.id); ++ return -ENOMEM; ++ } ++ ++ return 0; ++} ++ ++/* ++ * Unmap in the screen memory ++ * ++ */ ++static void smtc_unmap_smem(struct smtcfb_info *sfb) ++{ ++ if (sfb && sfb->fb.screen_base) { ++ iounmap(sfb->fb.screen_base); ++ sfb->fb.screen_base = NULL; ++ } ++} ++ ++/* ++ * We need to wake up the device and make sure its in linear memory mode. ++ */ ++static inline void sm7xx_init_hw(void) ++{ ++ outb_p(0x18, 0x3c4); ++ outb_p(0x11, 0x3c5); ++} ++ ++static int smtcfb_pci_probe(struct pci_dev *pdev, ++ const struct pci_device_id *ent) ++{ ++ struct smtcfb_info *sfb; ++ u_long smem_size = 0x00800000; /* default 8MB */ ++ int err; ++ unsigned long mmio_base; ++ ++ dev_info(&pdev->dev, "Silicon Motion display driver."); ++ ++ err = pci_enable_device(pdev); /* enable SMTC chip */ ++ if (err) ++ return err; ++ ++ sprintf(smtcfb_fix.id, "sm%Xfb", ent->device); ++ ++ sfb = smtc_alloc_fb_info(pdev); ++ ++ if (!sfb) { ++ err = -ENOMEM; ++ goto failed_free; ++ } ++ ++ sfb->chip_id = ent->device; ++ ++ pci_set_drvdata(pdev, sfb); ++ ++ sm7xx_init_hw(); ++ ++ /* get mode parameter from smtc_scr_info */ ++ if (smtc_scr_info.lfb_width != 0) { ++ sfb->fb.var.xres = smtc_scr_info.lfb_width; ++ sfb->fb.var.yres = smtc_scr_info.lfb_height; ++ sfb->fb.var.bits_per_pixel = smtc_scr_info.lfb_depth; ++ } else { ++ /* default resolution 1024x600 16bit mode */ ++ sfb->fb.var.xres = SCREEN_X_RES; ++ sfb->fb.var.yres = SCREEN_Y_RES; ++ sfb->fb.var.bits_per_pixel = SCREEN_BPP; ++ } ++ ++#ifdef __BIG_ENDIAN ++ if (sfb->fb.var.bits_per_pixel == 24) ++ sfb->fb.var.bits_per_pixel = (smtc_scr_info.lfb_depth = 32); ++#endif ++ /* Map address and memory detection */ ++ mmio_base = pci_resource_start(pdev, 0); ++ pci_read_config_byte(pdev, PCI_REVISION_ID, &sfb->chip_rev_id); ++ ++ switch (sfb->chip_id) { ++ case 0x710: ++ case 0x712: ++ sfb->fb.fix.mmio_start = mmio_base + 0x00400000; ++ sfb->fb.fix.mmio_len = 0x00400000; ++ smem_size = SM712_VIDEOMEMORYSIZE; ++#ifdef __BIG_ENDIAN ++ sfb->lfb = ioremap(mmio_base, 0x00c00000); ++#else ++ sfb->lfb = ioremap(mmio_base, 0x00800000); ++#endif ++ sfb->mmio = (smtc_RegBaseAddress = ++ sfb->lfb + 0x00700000); ++ sfb->dp_regs = sfb->lfb + 0x00408000; ++ sfb->vp_regs = sfb->lfb + 0x0040c000; ++#ifdef __BIG_ENDIAN ++ if (sfb->fb.var.bits_per_pixel == 32) { ++ sfb->lfb += 0x800000; ++ dev_info(&pdev->dev, "sfb->lfb=%p", sfb->lfb); ++ } ++#endif ++ if (!smtc_RegBaseAddress) { ++ dev_err(&pdev->dev, ++ "%s: unable to map memory mapped IO!", ++ sfb->fb.fix.id); ++ err = -ENOMEM; ++ goto failed_fb; ++ } ++ ++ /* set MCLK = 14.31818 * (0x16 / 0x2) */ ++ smtc_seqw(0x6a, 0x16); ++ smtc_seqw(0x6b, 0x02); ++ smtc_seqw(0x62, 0x3e); ++ /* enable PCI burst */ ++ smtc_seqw(0x17, 0x20); ++ /* enable word swap */ ++#ifdef __BIG_ENDIAN ++ if (sfb->fb.var.bits_per_pixel == 32) ++ smtc_seqw(0x17, 0x30); ++#endif ++ break; ++ case 0x720: ++ sfb->fb.fix.mmio_start = mmio_base; ++ sfb->fb.fix.mmio_len = 0x00200000; ++ smem_size = SM722_VIDEOMEMORYSIZE; ++ sfb->dp_regs = ioremap(mmio_base, 0x00a00000); ++ sfb->lfb = sfb->dp_regs + 0x00200000; ++ sfb->mmio = (smtc_RegBaseAddress = ++ sfb->dp_regs + 0x000c0000); ++ sfb->vp_regs = sfb->dp_regs + 0x800; ++ ++ smtc_seqw(0x62, 0xff); ++ smtc_seqw(0x6a, 0x0d); ++ smtc_seqw(0x6b, 0x02); ++ break; ++ default: ++ dev_err(&pdev->dev, ++ "No valid Silicon Motion display chip was detected!"); ++ ++ goto failed_fb; ++ } ++ ++ /* can support 32 bpp */ ++ if (15 == sfb->fb.var.bits_per_pixel) ++ sfb->fb.var.bits_per_pixel = 16; ++ ++ sfb->fb.var.xres_virtual = sfb->fb.var.xres; ++ sfb->fb.var.yres_virtual = sfb->fb.var.yres; ++ err = smtc_map_smem(sfb, pdev, smem_size); ++ if (err) ++ goto failed; ++ ++ smtcfb_setmode(sfb); ++ ++ err = register_framebuffer(&sfb->fb); ++ if (err < 0) ++ goto failed; ++ ++ dev_info(&pdev->dev, ++ "Silicon Motion SM%X Rev%X primary display mode %dx%d-%d Init Complete.", ++ sfb->chip_id, sfb->chip_rev_id, sfb->fb.var.xres, ++ sfb->fb.var.yres, sfb->fb.var.bits_per_pixel); ++ ++ return 0; ++ ++failed: ++ dev_err(&pdev->dev, "Silicon Motion, Inc. primary display init fail."); ++ ++ smtc_unmap_smem(sfb); ++ smtc_unmap_mmio(sfb); ++failed_fb: ++ smtc_free_fb_info(sfb); ++ ++failed_free: ++ pci_disable_device(pdev); ++ ++ return err; ++} ++ ++/* ++ * 0x710 (LynxEM) ++ * 0x712 (LynxEM+) ++ * 0x720 (Lynx3DM, Lynx3DM+) ++ */ ++static const struct pci_device_id smtcfb_pci_table[] = { ++ { PCI_DEVICE(0x126f, 0x710), }, ++ { PCI_DEVICE(0x126f, 0x712), }, ++ { PCI_DEVICE(0x126f, 0x720), }, ++ {0,} ++}; ++ ++static void smtcfb_pci_remove(struct pci_dev *pdev) ++{ ++ struct smtcfb_info *sfb; ++ ++ sfb = pci_get_drvdata(pdev); ++ smtc_unmap_smem(sfb); ++ smtc_unmap_mmio(sfb); ++ unregister_framebuffer(&sfb->fb); ++ smtc_free_fb_info(sfb); ++} ++ ++#ifdef CONFIG_PM ++static int smtcfb_pci_suspend(struct device *device) ++{ ++ struct pci_dev *pdev = to_pci_dev(device); ++ struct smtcfb_info *sfb; ++ ++ sfb = pci_get_drvdata(pdev); ++ ++ /* set the hw in sleep mode use external clock and self memory refresh ++ * so that we can turn off internal PLLs later on ++ */ ++ smtc_seqw(0x20, (smtc_seqr(0x20) | 0xc0)); ++ smtc_seqw(0x69, (smtc_seqr(0x69) & 0xf7)); ++ ++ console_lock(); ++ fb_set_suspend(&sfb->fb, 1); ++ console_unlock(); ++ ++ /* additionally turn off all function blocks including internal PLLs */ ++ smtc_seqw(0x21, 0xff); ++ ++ return 0; ++} ++ ++static int smtcfb_pci_resume(struct device *device) ++{ ++ struct pci_dev *pdev = to_pci_dev(device); ++ struct smtcfb_info *sfb; ++ ++ sfb = pci_get_drvdata(pdev); ++ ++ /* reinit hardware */ ++ sm7xx_init_hw(); ++ switch (sfb->chip_id) { ++ case 0x710: ++ case 0x712: ++ /* set MCLK = 14.31818 * (0x16 / 0x2) */ ++ smtc_seqw(0x6a, 0x16); ++ smtc_seqw(0x6b, 0x02); ++ smtc_seqw(0x62, 0x3e); ++ /* enable PCI burst */ ++ smtc_seqw(0x17, 0x20); ++#ifdef __BIG_ENDIAN ++ if (sfb->fb.var.bits_per_pixel == 32) ++ smtc_seqw(0x17, 0x30); ++#endif ++ break; ++ case 0x720: ++ smtc_seqw(0x62, 0xff); ++ smtc_seqw(0x6a, 0x0d); ++ smtc_seqw(0x6b, 0x02); ++ break; ++ } ++ ++ smtc_seqw(0x34, (smtc_seqr(0x34) | 0xc0)); ++ smtc_seqw(0x33, ((smtc_seqr(0x33) | 0x08) & 0xfb)); ++ ++ smtcfb_setmode(sfb); ++ ++ console_lock(); ++ fb_set_suspend(&sfb->fb, 0); ++ console_unlock(); ++ ++ return 0; ++} ++ ++static SIMPLE_DEV_PM_OPS(sm7xx_pm_ops, smtcfb_pci_suspend, smtcfb_pci_resume); ++#define SM7XX_PM_OPS (&sm7xx_pm_ops) ++ ++#else /* !CONFIG_PM */ ++ ++#define SM7XX_PM_OPS NULL ++ ++#endif /* !CONFIG_PM */ ++ ++static struct pci_driver smtcfb_driver = { ++ .name = "smtcfb", ++ .id_table = smtcfb_pci_table, ++ .probe = smtcfb_pci_probe, ++ .remove = smtcfb_pci_remove, ++ .driver.pm = SM7XX_PM_OPS, ++}; ++ ++module_pci_driver(smtcfb_driver); ++ ++MODULE_AUTHOR("Siliconmotion "); ++MODULE_DESCRIPTION("Framebuffer driver for SMI Graphic Cards"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c +index 3586460..15f66e5 100644 +--- a/drivers/usb/host/ohci-hcd.c ++++ b/drivers/usb/host/ohci-hcd.c +@@ -864,9 +864,13 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd) + } + + if (ints & OHCI_INTR_WDH) { +- spin_lock (&ohci->lock); +- dl_done_list (ohci); +- spin_unlock (&ohci->lock); ++ if (ohci->hcca->done_head == 0) { ++ ints &= ~OHCI_INTR_WDH; ++ } else { ++ spin_lock (&ohci->lock); ++ dl_done_list (ohci); ++ spin_unlock (&ohci->lock); ++ } + } + + if (quirk_zfmicro(ohci) && (ints & OHCI_INTR_SF)) { +diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c +index 2f3aceb..6647c3f 100644 +--- a/drivers/usb/host/pci-quirks.c ++++ b/drivers/usb/host/pci-quirks.c +@@ -454,6 +454,7 @@ void usb_amd_dev_put(void) + } + EXPORT_SYMBOL_GPL(usb_amd_dev_put); + ++#if defined(CONFIG_USB_UHCI_HCD) || defined(CONFIG_USB_UHCI_HCD_MODULE) + /* + * Make sure the controller is completely inactive, unable to + * generate interrupts or do DMA. +@@ -561,12 +562,16 @@ static void quirk_usb_handoff_uhci(struct pci_dev *pdev) + if (base) + uhci_check_and_reset_hc(pdev, base); + } ++#else ++#define quirk_usb_handoff_uhci(x) do { } while (0) ++#endif /* CONFIG_USB_UHCI_HCD* */ + + static int mmio_resource_enabled(struct pci_dev *pdev, int idx) + { + return pci_resource_start(pdev, idx) && mmio_enabled(pdev); + } + ++#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) + static void quirk_usb_handoff_ohci(struct pci_dev *pdev) + { + void __iomem *base; +@@ -633,7 +638,11 @@ static void quirk_usb_handoff_ohci(struct pci_dev *pdev) + /* Now the controller is safely in SUSPEND and nothing can wake it up */ + iounmap(base); + } ++#else ++#define quirk_usb_handoff_ohci(x) do { } while(0) ++#endif /* CONFIG_USB_OHCI_HCD* */ + ++#if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE) + static const struct dmi_system_id ehci_dmi_nohandoff_table[] = { + { + /* Pegatron Lucid (ExoPC) */ +@@ -806,6 +815,9 @@ static void quirk_usb_disable_ehci(struct pci_dev *pdev) + + iounmap(base); + } ++#else ++#define quirk_usb_disable_ehci(x) do { } while (0) ++#endif /* CONFIG_USB_EHCI_HCD* */ + + /* + * handshake - spin reading a register until handshake completes +@@ -945,6 +957,7 @@ void usb_disable_xhci_ports(struct pci_dev *xhci_pdev) + } + EXPORT_SYMBOL_GPL(usb_disable_xhci_ports); + ++#if defined(CONFIG_USB_XHCI_HCD) || defined(CONFIG_USB_XHCI_HCD_MODULE) + /** + * PCI Quirks for xHCI. + * +@@ -1052,6 +1065,9 @@ hc_init: + + iounmap(base); + } ++#else ++#define quirk_usb_handoff_xhci(x) do { } while (0) ++#endif /* CONFIG_USB_UHCI_HCD* */ + + static void quirk_usb_early_handoff(struct pci_dev *pdev) + { +diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c +index 9da566a..fffecfb 100644 +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -79,6 +79,9 @@ static void option_instat_callback(struct urb *urb); + #define OPTION_PRODUCT_ETNA_KOI_MODEM 0x7100 + #define OPTION_PRODUCT_GTM380_MODEM 0x7201 + ++#define HUAWO_VENDOR_ID 0x21F5 ++#define HUAWO_PRODUCT_E1621 0x2008 ++ + #define HUAWEI_VENDOR_ID 0x12D1 + #define HUAWEI_PRODUCT_E173 0x140C + #define HUAWEI_PRODUCT_E1750 0x1406 +@@ -610,6 +613,7 @@ static const struct usb_device_id option_ids[] = { + { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) }, + { USB_DEVICE(QUANTA_VENDOR_ID, 0xea42), + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, ++ { USB_DEVICE(HUAWO_VENDOR_ID, HUAWO_PRODUCT_E1621) }, /* QUANTA 6500 chips, Unicom extensive use of this card */ + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c05, USB_CLASS_COMM, 0x02, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c1f, USB_CLASS_COMM, 0x02, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) }, +diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig +index c7b4f0f..7e67f27 100644 +--- a/drivers/video/Kconfig ++++ b/drivers/video/Kconfig +@@ -35,6 +35,12 @@ config VGASTATE + tristate + default n + ++config VIDEO_OUTPUT_CONTROL ++ tristate "Lowlevel video output switch controls" ++ help ++ This framework adds support for low-level control of the video ++ output switch. ++ + config VIDEOMODE_HELPERS + bool + +diff --git a/drivers/video/Makefile b/drivers/video/Makefile +index 9ad3c17..3d869d9 100644 +--- a/drivers/video/Makefile ++++ b/drivers/video/Makefile +@@ -7,6 +7,8 @@ obj-y += backlight/ + + obj-y += fbdev/ + ++#video output switch sysfs driver ++obj-$(CONFIG_VIDEO_OUTPUT_CONTROL) += output.o + obj-$(CONFIG_VIDEOMODE_HELPERS) += display_timing.o videomode.o + ifeq ($(CONFIG_OF),y) + obj-$(CONFIG_VIDEOMODE_HELPERS) += of_display_timing.o of_videomode.o +diff --git a/drivers/video/output.c b/drivers/video/output.c +new file mode 100644 +index 0000000..1446c49 +--- /dev/null ++++ b/drivers/video/output.c +@@ -0,0 +1,133 @@ ++/* ++ * output.c - Display Output Switch driver ++ * ++ * Copyright (C) 2006 Luming Yu ++ * ++ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++ * ++ * 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. ++ * ++ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++ ++MODULE_DESCRIPTION("Display Output Switcher Lowlevel Control Abstraction"); ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Luming Yu "); ++ ++static ssize_t state_show(struct device *dev, struct device_attribute *attr, ++ char *buf) ++{ ++ ssize_t ret_size = 0; ++ struct output_device *od = to_output_device(dev); ++ if (od->props) ++ ret_size = sprintf(buf,"%.8x\n",od->props->get_status(od)); ++ return ret_size; ++} ++ ++static ssize_t state_store(struct device *dev, struct device_attribute *attr, ++ const char *buf,size_t count) ++{ ++ char *endp; ++ struct output_device *od = to_output_device(dev); ++ int request_state = simple_strtoul(buf,&endp,0); ++ size_t size = endp - buf; ++ ++ if (isspace(*endp)) ++ size++; ++ if (size != count) ++ return -EINVAL; ++ ++ if (od->props) { ++ od->request_state = request_state; ++ od->props->set_state(od); ++ } ++ return count; ++} ++static DEVICE_ATTR_RW(state); ++ ++static void video_output_release(struct device *dev) ++{ ++ struct output_device *od = to_output_device(dev); ++ kfree(od); ++} ++ ++static struct attribute *video_output_attrs[] = { ++ &dev_attr_state.attr, ++ NULL, ++}; ++ATTRIBUTE_GROUPS(video_output); ++ ++static struct class video_output_class = { ++ .name = "video_output", ++ .dev_release = video_output_release, ++ .dev_groups = video_output_groups, ++}; ++ ++struct output_device *video_output_register(const char *name, ++ struct device *dev, ++ void *devdata, ++ struct output_properties *op) ++{ ++ struct output_device *new_dev; ++ int ret_code = 0; ++ ++ new_dev = kzalloc(sizeof(struct output_device),GFP_KERNEL); ++ if (!new_dev) { ++ ret_code = -ENOMEM; ++ goto error_return; ++ } ++ new_dev->props = op; ++ new_dev->dev.class = &video_output_class; ++ new_dev->dev.parent = dev; ++ dev_set_name(&new_dev->dev, "%s", name); ++ dev_set_drvdata(&new_dev->dev, devdata); ++ ret_code = device_register(&new_dev->dev); ++ if (ret_code) { ++ kfree(new_dev); ++ goto error_return; ++ } ++ return new_dev; ++ ++error_return: ++ return ERR_PTR(ret_code); ++} ++EXPORT_SYMBOL(video_output_register); ++ ++void video_output_unregister(struct output_device *dev) ++{ ++ if (!dev) ++ return; ++ device_unregister(&dev->dev); ++} ++EXPORT_SYMBOL(video_output_unregister); ++ ++static void __exit video_output_class_exit(void) ++{ ++ class_unregister(&video_output_class); ++} ++ ++static int __init video_output_class_init(void) ++{ ++ return class_register(&video_output_class); ++} ++ ++postcore_initcall(video_output_class_init); ++module_exit(video_output_class_exit); +diff --git a/include/linux/sm501.h b/include/linux/sm501.h +index 02fde50..a8677f0 100644 +--- a/include/linux/sm501.h ++++ b/include/linux/sm501.h +@@ -27,6 +27,9 @@ extern unsigned long sm501_set_clock(struct device *dev, + extern unsigned long sm501_find_clock(struct device *dev, + int clksrc, unsigned long req_freq); + ++extern void sm501_configure_gpio(struct device *dev, ++ unsigned int gpio, unsigned char mode); ++ + /* sm501_misc_control + * + * Modify the SM501's MISC_CONTROL register +@@ -122,6 +125,7 @@ struct sm501_reg_init { + #define SM501_USE_AC97 (1<<7) + #define SM501_USE_I2S (1<<8) + #define SM501_USE_GPIO (1<<9) ++#define SM501_USE_PWM (1<<10) + + #define SM501_USE_ALL (0xffffffff) + +diff --git a/include/linux/video_output.h b/include/linux/video_output.h +new file mode 100644 +index 0000000..ed5cdeb +--- /dev/null ++++ b/include/linux/video_output.h +@@ -0,0 +1,57 @@ ++/* ++ * ++ * Copyright (C) 2006 Luming Yu ++ * ++ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++ * ++ * 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. ++ * ++ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++ */ ++#ifndef _LINUX_VIDEO_OUTPUT_H ++#define _LINUX_VIDEO_OUTPUT_H ++#include ++#include ++struct output_device; ++struct output_properties { ++ int (*set_state)(struct output_device *); ++ int (*get_status)(struct output_device *); ++}; ++struct output_device { ++ int request_state; ++ struct output_properties *props; ++ struct device dev; ++}; ++#define to_output_device(obj) container_of(obj, struct output_device, dev) ++#if defined(CONFIG_VIDEO_OUTPUT_CONTROL) || defined(CONFIG_VIDEO_OUTPUT_CONTROL_MODULE) ++struct output_device *video_output_register(const char *name, ++ struct device *dev, ++ void *devdata, ++ struct output_properties *op); ++void video_output_unregister(struct output_device *dev); ++#else ++static struct output_device *video_output_register(const char *name, ++ struct device *dev, ++ void *devdata, ++ struct output_properties *op) ++{ ++ return ERR_PTR(-ENODEV); ++} ++static void video_output_unregister(struct output_device *dev) ++{ ++ return; ++} ++#endif ++#endif +diff --git a/init/calibrate.c b/init/calibrate.c +index 520702d..e78762a 100644 +--- a/init/calibrate.c ++++ b/init/calibrate.c +@@ -21,6 +21,7 @@ static int __init lpj_setup(char *str) + + __setup("lpj=", lpj_setup); + ++#ifndef ARCH_HAS_PREPARED_LPJ + #ifdef ARCH_HAS_READ_CURRENT_TIMER + + /* This routine uses the read_current_timer() routine and gets the +@@ -171,6 +172,7 @@ static unsigned long calibrate_delay_direct(void) + return 0; + } + #endif ++#endif /* ARCH_HAS_PREPARED_LPJ */ + + /* + * This is the number of bits of precision for the loops_per_jiffy. Each +@@ -282,6 +284,7 @@ void calibrate_delay(void) + lpj = lpj_fine; + pr_info("Calibrating delay loop (skipped), " + "value calculated using timer frequency.. "); ++#ifndef ARCH_HAS_PREPARED_LPJ + } else if ((lpj = calibrate_delay_is_known())) { + ; + } else if ((lpj = calibrate_delay_direct()) != 0) { +@@ -292,6 +295,7 @@ void calibrate_delay(void) + if (!printed) + pr_info("Calibrating delay loop... "); + lpj = calibrate_delay_converge(); ++#endif /* ARCH_HAS_PREPARED_LPJ */ + } + per_cpu(cpu_loops_per_jiffy, this_cpu) = lpj; + if (!printed) +diff --git a/net/rfkill/core.c b/net/rfkill/core.c +index b3b16c0..e0a91100 100644 +--- a/net/rfkill/core.c ++++ b/net/rfkill/core.c +@@ -111,7 +111,7 @@ static LIST_HEAD(rfkill_list); /* list of registered rf switches */ + static DEFINE_MUTEX(rfkill_global_mutex); + static LIST_HEAD(rfkill_fds); /* list of open fds of /dev/rfkill */ + +-static unsigned int rfkill_default_state = 1; ++static unsigned int rfkill_default_state; /* default: 0 = radio off */ + module_param_named(default_state, rfkill_default_state, uint, 0444); + MODULE_PARM_DESC(default_state, + "Default initial state for all radio types, 0 = radio off"); +diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl +index 91280b8..6b147ae 100755 +--- a/scripts/recordmcount.pl ++++ b/scripts/recordmcount.pl +@@ -307,14 +307,33 @@ if ($arch eq "x86_64") { + $cc .= " -m64"; + $objcopy .= " -O elf64-sparc"; + } elsif ($arch eq "mips") { +- # To enable module support, we need to enable the -mlong-calls option +- # of gcc for module, after using this option, we can not get the real +- # offset of the calling to _mcount, but the offset of the lui +- # instruction or the addiu one. herein, we record the address of the +- # first one, and then we can replace this instruction by a branch +- # instruction to jump over the profiling function to filter the +- # indicated functions, or swith back to the lui instruction to trace +- # them, which means dynamic tracing. ++ # ++ # To disable tracing, just replace "jal _mcount" with nop; ++ # to enable tracing, replace back. so, the offset 14 is ++ # needed to be recorded. ++ # ++ # 10: 03e0082d move at,ra ++ # 14: 0c000000 jal 0 ++ # 14: R_MIPS_26 _mcount ++ # 14: R_MIPS_NONE *ABS* ++ # 14: R_MIPS_NONE *ABS* ++ # 18: 00020021 nop ++ # ++ # ++ # ++ # If no long call(-mlong-calls), the same to kernel. ++ # ++ # If the module space differs from the kernel space, long ++ # call is needed, as a result, the address of _mcount is ++ # needed to be recorded in a register and then jump from ++ # module space to kernel space via "jalr ". To ++ # disable tracing, "jalr " can be replaced by ++ # nop; to enable tracing, replace it back. Since the ++ # offset of "jalr " is not easy to be matched, ++ # the offset of the 1st _mcount below is recorded and to ++ # disable tracing, "lui v1, 0x0" is substituted with "b ++ # label", which jumps over "jalr "; to enable ++ # tracing, replace it back. + # + # c: 3c030000 lui v1,0x0 + # c: R_MIPS_HI16 _mcount +@@ -326,19 +345,12 @@ if ($arch eq "x86_64") { + # 10: R_MIPS_NONE *ABS* + # 14: 03e0082d move at,ra + # 18: 0060f809 jalr v1 ++ # label: + # +- # for the kernel: +- # +- # 10: 03e0082d move at,ra +- # 14: 0c000000 jal 0 +- # 14: R_MIPS_26 _mcount +- # 14: R_MIPS_NONE *ABS* +- # 14: R_MIPS_NONE *ABS* +- # 18: 00020021 nop + if ($is_module eq "0") { + $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_26\\s+_mcount\$"; + } else { +- $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_HI16\\s+_mcount\$"; ++ $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_(HI16|26)\\s+_mcount\$"; + } + $objdump .= " -Melf-trad".$endian."mips "; + +diff --git a/scripts/sstrip.sh b/scripts/sstrip.sh +new file mode 100755 +index 0000000..49b973a +--- /dev/null ++++ b/scripts/sstrip.sh +@@ -0,0 +1,59 @@ ++#!/bin/bash ++# sstrip.sh -- strip the section table of an elf file ++# ++# Copyright (C) 2010 Wu Zhangjin, wuzhangjin@gmail.com ++# Licensed under the GPLv2 ++# ++# Since the section table is useless for the embedded device, it can be ++# stripped out. ++# ++# Note: Some bootloader may check the section table but most of the time, it ++# may be not really used, If it really need the section table, it may need the ++# decompressed kernel image. ++ ++# Usage ++ ++function usage ++{ ++cat </dev/null` ++[ "xELF" != "x${FILE_TYPE}" ] && echo "$0: ${IMAGE} is not an ELF file" && exit -1 ++ ++[ "x${V}" == "x1" ] && orig_filesz=`wc -c ${IMAGE} | cut -d' ' -f1` ++ ++# Get the offset of the section table, here get the end of the program section ++filesz=$((`${OBJDUMP} -p ${IMAGE} | grep -m1 filesz | tr -s ' ' | cut -d' ' -f3`)) ++ ++# Truncate it via the dd tool ++dd if=/dev/null bs=1 of=${IMAGE} seek=${filesz} 2>/dev/null ++ ++# Clear the section table information in the ELF header ++# The last 6 bytes of the ELF header are the section table information ++echo -ne "\x00\x00\x00\x00\x00\x00" | dd of=${IMAGE} bs=1 seek=46 count=6 conv=notrunc 2>/dev/null ++ ++# Debug ++if [ "x${V}" == "x1" ]; then ++ echo "----------------------------------------------------------------" ++ echo "Strip the section table at ${filesz} of ${IMAGE}" ++ echo "----------------------------------------------------------------" ++ echo " sstrip: $0" ++ echo " objdump: ${OBJDUMP}" ++ echo "original size: ${orig_filesz}" ++ echo "current size: ${filesz}" ++ echo "reduced size: $((${orig_filesz} - ${filesz}))" ++fi diff --git a/libre/linux-libre-grsec/gnewsense-binutils-flag.patch b/libre/linux-libre-grsec/gnewsense-binutils-flag.patch new file mode 100644 index 000000000..5f2d44f99 --- /dev/null +++ b/libre/linux-libre-grsec/gnewsense-binutils-flag.patch @@ -0,0 +1,28 @@ +Our binutils somehow ended up with a -mfix-gs2f-kernel, rather than +-mfix-ls2f-kernel. Cope with it. + +Index: arch/mips/loongson/Platform +=================================================================== +--- arch/mips/loongson/Platform.orig 2010-10-25 19:09:49.000000000 +0000 ++++ arch/mips/loongson/Platform 2010-10-25 19:10:44.000000000 +0000 +@@ -10,6 +10,12 @@ + $(call cc-option,-march=loongson2f,-march=r4600) + # Enable the workarounds for Loongson2f + ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS ++ ifneq ($(call as-option,-Wa$(comma)-mfix-gs2f-kernel,),) ++ cflags-$(CONFIG_CPU_NOP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel ++ ifneq ($(CONFIG_CPU_NOP_WORKAROUNDS),$(CONFIG_CPU_JUMP_WORKAROUNDS)) ++ cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel ++ endif ++ else + ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-nop,),) + $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-nop) + else +@@ -20,6 +26,7 @@ + else + cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-jump + endif ++ endif + endif + + # diff --git a/libre/linux-libre-lts/3.14.14-a410a5e2b7-loongson-community.patch b/libre/linux-libre-lts/3.14.14-a410a5e2b7-loongson-community.patch new file mode 100644 index 000000000..c7a63c2e5 --- /dev/null +++ b/libre/linux-libre-lts/3.14.14-a410a5e2b7-loongson-community.patch @@ -0,0 +1,10869 @@ +diff --git a/Makefile b/Makefile +index 230c7f6..69dfbc4 100644 +--- a/Makefile ++++ b/Makefile +@@ -244,8 +244,8 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ + + HOSTCC = gcc + HOSTCXX = g++ +-HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer +-HOSTCXXFLAGS = -O2 ++HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O3 -fomit-frame-pointer ++HOSTCXXFLAGS = -O3 + + # Decide whether to build built-in, modular, or both. + # Normally, just do built-in. +@@ -582,7 +582,7 @@ all: vmlinux + ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE + KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,) + else +-KBUILD_CFLAGS += -O2 ++KBUILD_CFLAGS += -O3 + endif + + include $(srctree)/arch/$(SRCARCH)/Makefile +diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig +index 95fa1f1..82dc7e8 100644 +--- a/arch/mips/Kconfig ++++ b/arch/mips/Kconfig +@@ -278,7 +278,7 @@ config LASAT + + config MACH_LOONGSON + bool "Loongson family of machines" +- select SYS_SUPPORTS_ZBOOT ++ select SYS_SUPPORTS_ZBOOT_UART16550 + help + This enables the support of Loongson family of machines. + +@@ -885,6 +885,60 @@ config CSRC_IOASIC + config CSRC_R4K + bool + ++config MIPS_USER_RDTSC ++ bool "Emulate rdtsc instruction for MIPS" ++ depends on CSRC_R4K && MIPS32_O32 ++ default n ++ help ++ This optoin enables the Emulated rdtsc support for MIPS, which allows ++ the user-space applications read the R4k count directly. Currently, ++ this only support the CONFIG_MIPS32_O32 and R4K, but future, we may ++ add support for scall64-{n32,64}.S and scall32-32.S and for the count ++ registers provided by the other MIPS variants. ++ ++ This emulation based on the syscall instruction, by default, the ++ syscall is encoded as 0x0000000c, except the 0xc, the other parts can ++ be encoded as specific meaning. when a syscall instruction is issued, ++ through checking the encoding of the instruction, when the encoding ++ is the generic 0x000000c, we do the generic syscall work, if ++ something other is encoded in, we can do relevant things, except for ++ the light-weight things, such as read a register. herein, we read the ++ count register whenever there is something encoded in the syscall ++ instruction. In the future, we may be possible to abstract more ++ light-weight & frequently-used operations and add a ++ sys_call_table-like table to store the entries of some light-weight ++ operations and encode 1,2,3... into the syscall instruction and jump ++ to respective entry for diffrent numbers, as a result, we get ++ fast-syscall and which may speed up the user-space applications and ++ even be possibly improve the determinism. ++ ++ *Example* ++ ++ #include ++ #include ++ ++ /* ++ * Currently, our return value is only 32bit, In the long run, ++ * this should be uint64_t, just like clock_gettime(), but it ++ * should has high precision/low overhead than clock_gettime() ++ */ ++ uint32_t rdtsc(void) ++ { ++ /* ++ * Linux will store the value of the count register into ++ * the v0 register, which is just the return value of this ++ * function, so, please ignore the compiling warning. ++ */ ++ __asm__ __volatile__ ( ++ "syscall 1\n" ++ :::"$2"); ++ } ++ ++ int main(int argc, char *argv[]) ++ { ++ return printf("cycles: %u\n", rdtsc()); ++ } ++ + config CSRC_GIC + bool + +@@ -1492,6 +1546,15 @@ config CPU_LOONGSON2 + bool + select CPU_SUPPORTS_32BIT_KERNEL + select CPU_SUPPORTS_64BIT_KERNEL ++ select CPU_SUPPORTS_HIGHMEM if ! EMBEDDED ++ select ARCH_WANT_OPTIONAL_GPIOLIB ++ ++config CPU_LOONGSON1 ++ bool ++ select CPU_MIPS32 ++ select CPU_MIPSR2 ++ select CPU_HAS_PREFETCH ++ select CPU_SUPPORTS_32BIT_KERNEL + select CPU_SUPPORTS_HIGHMEM + select CPU_SUPPORTS_HUGEPAGES + +@@ -2110,7 +2173,7 @@ config SYS_SUPPORTS_MICROMIPS + + config ARCH_FLATMEM_ENABLE + def_bool y +- depends on !NUMA && !CPU_LOONGSON2 ++ depends on !NUMA && !(CPU_LOONGSON2 && HIBERNATION) + + config ARCH_DISCONTIGMEM_ENABLE + bool +diff --git a/arch/mips/Kconfig.debug b/arch/mips/Kconfig.debug +index b147e70..f32dfb0 100644 +--- a/arch/mips/Kconfig.debug ++++ b/arch/mips/Kconfig.debug +@@ -7,9 +7,9 @@ config TRACE_IRQFLAGS_SUPPORT + source "lib/Kconfig.debug" + + config EARLY_PRINTK +- bool "Early printk" if EXPERT ++ bool "Early printk" + depends on SYS_HAS_EARLY_PRINTK +- default y ++ default n + help + This option enables special console drivers which allow the kernel + to print messages very early in the bootup process. +diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile +index 61af6b6..8598044 100644 +--- a/arch/mips/boot/compressed/Makefile ++++ b/arch/mips/boot/compressed/Makefile +@@ -30,9 +30,10 @@ KBUILD_AFLAGS := $(LINUXINCLUDE) $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ + targets := head.o decompress.o string.o dbg.o uart-16550.o uart-alchemy.o + + # decompressor objects (linked with vmlinuz) +-vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o $(obj)/dbg.o ++vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o + + ifdef CONFIG_DEBUG_ZBOOT ++vmlinuzobjs-y += $(obj)/dbg.o + vmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o + vmlinuzobjs-$(CONFIG_MIPS_ALCHEMY) += $(obj)/uart-alchemy.o + endif +@@ -79,9 +80,18 @@ quiet_cmd_zld = LD $@ + cmd_zld = $(LD) $(LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T $< $(vmlinuzobjs-y) -o $@ + quiet_cmd_strip = STRIP $@ + cmd_strip = $(STRIP) -s $@ ++ifdef CONFIG_EMBEDDED ++quiet_cmd_sstrip = SSTRIP $@ ++ cmd_sstrip = $(srctree)/scripts/sstrip.sh $@ ++endif + vmlinuz: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr + $(call cmd,zld) + $(call cmd,strip) ++ $(call cmd,sstrip) ++ ++vmlinuz.unsstrip: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr ++ $(call cmd,zld) ++ $(call cmd,strip) + + # + # Some DECstations need all possible sections of an ECOFF executable +@@ -94,14 +104,14 @@ endif + hostprogs-y += ../elf2ecoff + + ifdef CONFIG_32BIT +- VMLINUZ = vmlinuz ++ VMLINUZ = vmlinuz.unsstrip + else + VMLINUZ = vmlinuz.32 + endif + + quiet_cmd_32 = OBJCOPY $@ + cmd_32 = $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@ +-vmlinuz.32: vmlinuz ++vmlinuz.32: vmlinuz.unsstrip + $(call cmd,32) + + quiet_cmd_ecoff = ECOFF $@ +@@ -110,11 +120,11 @@ vmlinuz.ecoff: $(obj)/../elf2ecoff $(VMLINUZ) + $(call cmd,ecoff) + + OBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary +-vmlinuz.bin: vmlinuz ++vmlinuz.bin: vmlinuz.unsstrip + $(call cmd,objcopy) + + OBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec +-vmlinuz.srec: vmlinuz ++vmlinuz.srec: vmlinuz.unsstrip + $(call cmd,objcopy) + +-clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec} ++clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec,unsstrip} +diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c +index c00c4dd..f4a656d 100644 +--- a/arch/mips/boot/compressed/decompress.c ++++ b/arch/mips/boot/compressed/decompress.c +@@ -27,8 +27,13 @@ unsigned long free_mem_end_ptr; + extern unsigned char __image_begin, __image_end; + + /* debug interfaces */ ++#ifdef CONFIG_DEBUG_ZBOOT + extern void puts(const char *s); + extern void puthex(unsigned long long val); ++#else ++#define puts(s) ++#define puthex(val) ++#endif + + void error(char *x) + { +diff --git a/arch/mips/boot/compressed/ld.script b/arch/mips/boot/compressed/ld.script +index 5a33409..de04ac9 100644 +--- a/arch/mips/boot/compressed/ld.script ++++ b/arch/mips/boot/compressed/ld.script +@@ -49,5 +49,6 @@ SECTIONS + *(.reginfo) + *(.comment) + *(.note) ++ *(.gnu.attributes) + } + } +diff --git a/arch/mips/include/asm/dma-mapping.h b/arch/mips/include/asm/dma-mapping.h +index 84238c5..28e0b03 100644 +--- a/arch/mips/include/asm/dma-mapping.h ++++ b/arch/mips/include/asm/dma-mapping.h +@@ -6,9 +6,7 @@ + #include + #include + +-#ifndef CONFIG_SGI_IP27 /* Kludge to fix 2.6.39 build for IP27 */ + #include +-#endif + + extern struct dma_map_ops *mips_dma_map_ops; + +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h +index a0ee0cb..c6df1c4 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h +@@ -299,7 +299,42 @@ extern void _wrmsr(u32 msr, u32 hi, u32 lo); + + /****************** NATIVE ***************************/ + /* GPIO : I/O SPACE; REG : 32BITS */ +-#define GPIOL_OUT_VAL 0x00 +-#define GPIOL_OUT_EN 0x04 ++#define GPIOL_OUT_VAL 0x00 ++#define GPIOL_OUT_EN 0x04 ++#define GPIOL_OUT_AUX1_SEL 0x10 ++/* SMB : I/O SPACE, REG : 8BITS WIDTH */ ++#define SMB_SDA 0x00 ++#define SMB_STS 0x01 ++#define SMB_STS_SLVSTP (1 << 7) ++#define SMB_STS_SDAST (1 << 6) ++#define SMB_STS_BER (1 << 5) ++#define SMB_STS_NEGACK (1 << 4) ++#define SMB_STS_STASTR (1 << 3) ++#define SMB_STS_NMATCH (1 << 2) ++#define SMB_STS_MASTER (1 << 1) ++#define SMB_STS_XMIT (1 << 0) ++#define SMB_CTRL_STS 0x02 ++#define SMB_CSTS_TGSTL (1 << 5) ++#define SMB_CSTS_TSDA (1 << 4) ++#define SMB_CSTS_GCMTCH (1 << 3) ++#define SMB_CSTS_MATCH (1 << 2) ++#define SMB_CSTS_BB (1 << 1) ++#define SMB_CSTS_BUSY (1 << 0) ++#define SMB_CTRL1 0x03 ++#define SMB_CTRL1_STASTRE (1 << 7) ++#define SMB_CTRL1_NMINTE (1 << 6) ++#define SMB_CTRL1_GCMEN (1 << 5) ++#define SMB_CTRL1_ACK (1 << 4) ++#define SMB_CTRL1_RSVD (1 << 3) ++#define SMB_CTRL1_INTEN (1 << 2) ++#define SMB_CTRL1_STOP (1 << 1) ++#define SMB_CTRL1_START (1 << 0) ++#define SMB_ADDR 0x04 ++#define SMB_ADDR_SAEN (1 << 7) ++#define SMB_CONTROLLER_ADDR (0xef << 0) ++#define SMB_CTRL2 0x05 ++#define SMB_FREQ (0x20 << 1) ++#define SMB_ENABLE (0x01 << 0) ++#define SMB_CTRL3 0x06 + + #endif /* _CS5536_H */ +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h +index 021d017..d058e46 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h +@@ -10,26 +10,45 @@ + + #ifdef CONFIG_CS5536_MFGPT + extern void setup_mfgpt0_timer(void); +-extern void disable_mfgpt0_counter(void); +-extern void enable_mfgpt0_counter(void); ++extern void disable_mfgpt_counter(void); ++extern void enable_mfgpt_counter(void); + #else + static inline void __maybe_unused setup_mfgpt0_timer(void) + { + } +-static inline void __maybe_unused disable_mfgpt0_counter(void) ++static inline void __maybe_unused disable_mfgpt_counter(void) + { + } +-static inline void __maybe_unused enable_mfgpt0_counter(void) ++static inline void __maybe_unused enable_mfgpt_counter(void) + { + } + #endif + +-#define MFGPT_TICK_RATE 14318000 +-#define COMPARE ((MFGPT_TICK_RATE + HZ/2) / HZ) ++#define MFGPT_CLK_RATE(c) ((14318000UL-32768)*c + 32768) ++#define MFGPT_TICK_RATE(c, scale) (MFGPT_CLK_RATE(c) / (1 << scale)) ++#define MFGPT_COMPARE(c, scale) ((MFGPT_TICK_RATE(c, scale)+HZ/2)/HZ) + +-#define MFGPT_BASE mfgpt_base +-#define MFGPT0_CMP2 (MFGPT_BASE + 2) +-#define MFGPT0_CNT (MFGPT_BASE + 4) +-#define MFGPT0_SETUP (MFGPT_BASE + 6) ++#define MFGPT_SETUP_ENABLE (1 << 15) ++#define MFGPT_SETUP_ACK (3 << 13) ++#define MFGPT_SETUP_SETUP (1 << 12) ++#define MFGPT_SETUP_CMP2EVT (3 << 8) ++#define MFGPT_SETUP_CMP1EVT (3 << 6) ++#define MFGPT_SETUP_CLOCK(c) (c << 4) ++#define MFGPT_SETUP_SCALE(scale) scale ++ ++#define MFGPT0_CMP1 mfgpt_base ++#define MFGPT0_CMP2 (mfgpt_base + 0x02) ++#define MFGPT0_CNT (mfgpt_base + 0x04) ++#define MFGPT0_SETUP (mfgpt_base + 0x06) ++ ++#define MFGPT1_CMP1 (mfgpt_base + 0x08) ++#define MFGPT1_CMP2 (mfgpt_base + 0x0A) ++#define MFGPT1_CNT (mfgpt_base + 0x0C) ++#define MFGPT1_SETUP (mfgpt_base + 0x0E) ++ ++#define MFGPT2_CMP1 (mfgpt_base + 0x10) ++#define MFGPT2_CMP2 (mfgpt_base + 0x12) ++#define MFGPT2_CNT (mfgpt_base + 0x14) ++#define MFGPT2_SETUP (mfgpt_base + 0x16) + + #endif /*!_CS5536_MFGPT_H */ +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h +index 8a7ecb4..ac01334 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h +@@ -13,6 +13,7 @@ + + #include + #include ++#include + + extern void cs5536_pci_conf_write4(int function, int reg, u32 value); + extern u32 cs5536_pci_conf_read4(int function, int reg); +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h +index 1f17c18..9bc368f0d 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h +@@ -17,15 +17,43 @@ typedef u32 (*cs5536_pci_vsm_read)(int reg); + extern void pci_##name##_write_reg(int reg, u32 value); \ + extern u32 pci_##name##_read_reg(int reg); + ++#define DEFINE_CS5536_MODULE(name) \ ++static void pci_##name##_write_reg(int reg, u32 value) {} \ ++static u32 pci_##name##_read_reg(int reg) { return 0; } ++ ++/* isa module */ ++#ifdef CONFIG_CS5536_ISA ++DECLARE_CS5536_MODULE(isa) ++#else ++DEFINE_CS5536_MODULE(isa) ++#endif ++ + /* ide module */ ++#ifdef CONFIG_CS5536_IDE + DECLARE_CS5536_MODULE(ide) ++#else ++DEFINE_CS5536_MODULE(ide) ++#endif ++ + /* acc module */ ++#ifdef CONFIG_CS5536_AUDIO + DECLARE_CS5536_MODULE(acc) ++#else ++DEFINE_CS5536_MODULE(acc) ++#endif ++ + /* ohci module */ ++#ifdef CONFIG_CS5536_OHCI + DECLARE_CS5536_MODULE(ohci) +-/* isa module */ +-DECLARE_CS5536_MODULE(isa) ++#else ++DEFINE_CS5536_MODULE(ohci) ++#endif ++ + /* ehci module */ ++#ifdef CONFIG_CS5536_EHCI + DECLARE_CS5536_MODULE(ehci) ++#else ++DEFINE_CS5536_MODULE(ehci) ++#endif + + #endif /* _CS5536_VSM_H */ +diff --git a/arch/mips/include/asm/mach-loongson/gpio.h b/arch/mips/include/asm/mach-loongson/gpio.h +index 211a7b7..f15db3c 100644 +--- a/arch/mips/include/asm/mach-loongson/gpio.h ++++ b/arch/mips/include/asm/mach-loongson/gpio.h +@@ -13,12 +13,16 @@ + #ifndef __STLS2F_GPIO_H + #define __STLS2F_GPIO_H + ++#ifdef CONFIG_GPIOLIB ++#define ARCH_NR_GPIOS 4 + #include + + extern void gpio_set_value(unsigned gpio, int value); + extern int gpio_get_value(unsigned gpio); + extern int gpio_cansleep(unsigned gpio); + ++#endif ++ + /* The chip can do interrupt + * but it has not been tested and doc not clear + */ +diff --git a/arch/mips/include/asm/mach-loongson/loongson.h b/arch/mips/include/asm/mach-loongson/loongson.h +index b286534..222d179 100644 +--- a/arch/mips/include/asm/mach-loongson/loongson.h ++++ b/arch/mips/include/asm/mach-loongson/loongson.h +@@ -32,17 +32,13 @@ extern void __init prom_init_memory(void); + extern void __init prom_init_cmdline(void); + extern void __init prom_init_machtype(void); + extern void __init prom_init_env(void); +-#ifdef CONFIG_LOONGSON_UART_BASE +-extern unsigned long _loongson_uart_base, loongson_uart_base; +-extern void prom_init_loongson_uart_base(void); +-#endif ++extern void __init prom_init_uart_base(void); + +-static inline void prom_init_uart_base(void) +-{ +-#ifdef CONFIG_LOONGSON_UART_BASE +- prom_init_loongson_uart_base(); +-#endif +-} ++/* ++ * Copy kernel command line from arcs_cmdline ++ */ ++#include ++extern char loongson_cmdline[COMMAND_LINE_SIZE]; + + /* irq operation functions */ + extern void bonito_irqdispatch(void); +@@ -249,6 +245,12 @@ extern struct cpufreq_frequency_table loongson2_clockmod_table[]; + + /* Chip Config */ + #define LOONGSON_CHIPCFG0 LOONGSON_REG(LOONGSON_REGBASE + 0x80) ++#define LOONGSON_GET_CPUFREQ() (LOONGSON_CHIPCFG0 & 7) ++ ++#define LOONGSON_SET_CPUFREQ(level) do { \ ++ LOONGSON_CHIPCFG0 = (LOONGSON_CHIPCFG0 & (~7)) | (level); \ ++} while (0) ++ + #endif + + /* +diff --git a/arch/mips/include/asm/mach-loongson/machine.h b/arch/mips/include/asm/mach-loongson/machine.h +index 3810d5c..d219499 100644 +--- a/arch/mips/include/asm/mach-loongson/machine.h ++++ b/arch/mips/include/asm/mach-loongson/machine.h +@@ -24,4 +24,10 @@ + + #endif + ++#ifdef CONFIG_DEXXON_GDIUM ++ ++#define LOONGSON_MACHTYPE MACH_DEXXON_GDIUM2F10 ++ ++#endif ++ + #endif /* __ASM_MACH_LOONGSON_MACHINE_H */ +diff --git a/arch/mips/include/asm/mach-loongson1/clock.h b/arch/mips/include/asm/mach-loongson1/clock.h +new file mode 100644 +index 0000000..dd1afdb +--- /dev/null ++++ b/arch/mips/include/asm/mach-loongson1/clock.h +@@ -0,0 +1,53 @@ ++#ifndef __ASM_MACH_LOONGSON1_CLOCK_H ++#define __ASM_MACH_LOONGSON1_CLOCK_H ++ ++#include ++#include ++#include ++#include ++ ++extern void (*cpu_wait) (void); ++ ++struct clk; ++ ++struct clk_ops { ++ void (*init) (struct clk *clk); ++ void (*enable) (struct clk *clk); ++ void (*disable) (struct clk *clk); ++ void (*recalc) (struct clk *clk); ++ int (*set_rate) (struct clk *clk, unsigned long rate, int algo_id); ++ long (*round_rate) (struct clk *clk, unsigned long rate); ++}; ++ ++struct clk { ++ struct list_head node; ++ const char *name; ++ int id; ++ struct module *owner; ++ ++ struct clk *parent; ++ struct clk_ops *ops; ++ ++ struct kref kref; ++ ++ unsigned long rate; ++ unsigned long flags; ++}; ++ ++#define CLK_ALWAYS_ENABLED (1 << 0) ++#define CLK_RATE_PROPAGATES (1 << 1) ++ ++/* Should be defined by processor-specific code */ ++void arch_init_clk_ops(struct clk_ops **, int type); ++ ++int clk_init(void); ++ ++int __clk_enable(struct clk *); ++void __clk_disable(struct clk *); ++ ++void clk_recalc_rate(struct clk *); ++ ++int clk_register(struct clk *); ++void clk_unregister(struct clk *); ++ ++#endif /* __ASM_MIPS_CLOCK_H */ +diff --git a/arch/mips/include/asm/mach-loongson1/regs-intc.h b/arch/mips/include/asm/mach-loongson1/regs-intc.h +new file mode 100644 +index 0000000..6d5db23 +--- /dev/null ++++ b/arch/mips/include/asm/mach-loongson1/regs-intc.h +@@ -0,0 +1,25 @@ ++/* ++ * Copyright (c) 2011 Zhang, Keguang ++ * ++ * Loongson1 Interrupt register definitions. ++ * ++ * 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. ++ */ ++ ++#ifndef __ASM_MACH_LOONGSON1_REGS_INTC_H ++#define __ASM_MACH_LOONGSON1_REGS_INTC_H ++ ++#define LS1X_INTC_REG(n, x) \ ++ (ioremap(LS1X_INTC_BASE + (n * 0x18) + (x), 4)) ++ ++#define LS1X_INTC_INTISR(n) LS1X_INTC_REG(n, 0x0) ++#define LS1X_INTC_INTIEN(n) LS1X_INTC_REG(n, 0x4) ++#define LS1X_INTC_INTSET(n) LS1X_INTC_REG(n, 0x8) ++#define LS1X_INTC_INTCLR(n) LS1X_INTC_REG(n, 0xc) ++#define LS1X_INTC_INTPOL(n) LS1X_INTC_REG(n, 0x10) ++#define LS1X_INTC_INTEDGE(n) LS1X_INTC_REG(n, 0x14) ++ ++#endif /* __ASM_MACH_LOONGSON1_REGS_INTC_H */ +diff --git a/arch/mips/include/asm/module.h b/arch/mips/include/asm/module.h +index 44b705d..c28a782 100644 +--- a/arch/mips/include/asm/module.h ++++ b/arch/mips/include/asm/module.h +@@ -126,6 +126,8 @@ search_module_dbetables(unsigned long addr) + #define MODULE_PROC_FAMILY "LOONGSON1 " + #elif defined CONFIG_CPU_LOONGSON2 + #define MODULE_PROC_FAMILY "LOONGSON2 " ++#elif defined CONFIG_CPU_LOONGSON1 ++#define MODULE_PROC_FAMILY "LOONGSON1 " + #elif defined CONFIG_CPU_CAVIUM_OCTEON + #define MODULE_PROC_FAMILY "OCTEON " + #elif defined CONFIG_CPU_XLR +diff --git a/arch/mips/include/asm/timex.h b/arch/mips/include/asm/timex.h +index c542475..74fef34 100644 +--- a/arch/mips/include/asm/timex.h ++++ b/arch/mips/include/asm/timex.h +@@ -10,6 +10,10 @@ + + #ifdef __KERNEL__ + ++#ifdef CONFIG_CSRC_R4K ++#define ARCH_HAS_PREPARED_LPJ ++#endif ++ + #include + #include + #include +diff --git a/arch/mips/include/uapi/asm/inst.h b/arch/mips/include/uapi/asm/inst.h +index f25181b..d243152 100644 +--- a/arch/mips/include/uapi/asm/inst.h ++++ b/arch/mips/include/uapi/asm/inst.h +@@ -62,6 +62,8 @@ enum spec_op { + enum spec2_op { + madd_op, maddu_op, mul_op, spec2_3_unused_op, + msub_op, msubu_op, /* more unused ops */ ++ loongson_madd_op = 0x18, loongson_msub_op, ++ loongson_nmadd_op, loongson_nmsub_op, + clz_op = 0x20, clo_op, + dclz_op = 0x24, dclo_op, + sdbpp_op = 0x3f +@@ -135,7 +137,7 @@ enum cop0_com_func { + */ + enum cop1_fmt { + s_fmt, d_fmt, e_fmt, q_fmt, +- w_fmt, l_fmt ++ w_fmt, l_fmt, ps_fmt + }; + + /* +@@ -164,7 +166,8 @@ enum cop1_sdw_func { + enum cop1x_func { + lwxc1_op = 0x00, ldxc1_op = 0x01, + swxc1_op = 0x08, sdxc1_op = 0x09, +- pfetch_op = 0x0f, madd_s_op = 0x20, ++ pfetch_op = 0x0f, ++ prefx_op = 0x17, madd_s_op = 0x20, + madd_d_op = 0x21, madd_e_op = 0x22, + msub_s_op = 0x28, msub_d_op = 0x29, + msub_e_op = 0x2a, nmadd_s_op = 0x30, +diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S +index 6788727..0f81805 100644 +--- a/arch/mips/kernel/scall64-o32.S ++++ b/arch/mips/kernel/scall64-o32.S +@@ -26,6 +26,18 @@ + + .align 5 + NESTED(handle_sys, PT_SIZE, sp) ++#ifdef CONFIG_MIPS_USER_RDTSC ++ MFC0 k0, CP0_EPC ++ lw k1, 0(k0) ++ sltiu k1, k1, 0x1c ++ bne k1, zero, 1f # Normal syscall code: 0x0c < 0x1c ++ nop ++ mfc0 v0, CP0_COUNT # Get TSC ++ PTR_ADDIU k0, 4 # ret from syscall ++ MTC0 k0, CP0_EPC ++ eret ++1: ++#endif /* CONFIG_MIPS_USER_RDTSC */ + .set noat + SAVE_SOME + TRACE_IRQS_ON_RELOAD +diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c +index dcb8e5d..45177bc 100644 +--- a/arch/mips/kernel/time.c ++++ b/arch/mips/kernel/time.c +@@ -120,6 +120,11 @@ static __init int cpu_has_mfc0_count_bug(void) + + void __init time_init(void) + { ++#ifdef CONFIG_HR_SCHED_CLOCK ++ if (!mips_clockevent_init() || !cpu_has_mfc0_count_bug()) ++ write_c0_count(0); ++#endif ++ + plat_time_init(); + + /* +diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile +index eeddc58..d7bec00 100644 +--- a/arch/mips/lib/Makefile ++++ b/arch/mips/lib/Makefile +@@ -2,10 +2,14 @@ + # Makefile for MIPS-specific library files.. + # + +-lib-y += bitops.o csum_partial.o delay.o memcpy.o memset.o \ ++lib-y += bitops.o csum_partial.o memcpy.o memset.o \ + mips-atomic.o strlen_user.o strncpy_user.o \ + strnlen_user.o uncached.o + ++ifndef CONFIG_CSRC_R4K ++lib-y += delay.o ++endif ++ + obj-y += iomap.o + obj-$(CONFIG_PCI) += iomap-pci.o + +diff --git a/arch/mips/loongson/Kconfig b/arch/mips/loongson/Kconfig +index 263beb9..d56d594 100644 +--- a/arch/mips/loongson/Kconfig ++++ b/arch/mips/loongson/Kconfig +@@ -32,12 +32,12 @@ config LEMOTE_FULOONG2E + + config LEMOTE_MACH2F + bool "Lemote Loongson 2F family machines" +- select ARCH_SPARSEMEM_ENABLE ++ select ARCH_SPARSEMEM_ENABLE if HIBERNATION + select BOARD_SCACHE + select BOOT_ELF32 + select CEVT_R4K if ! MIPS_EXTERNAL_TIMER + select CPU_HAS_WB +- select CS5536 ++ select CS5536 if PCI + select CSRC_R4K if ! MIPS_EXTERNAL_TIMER + select DMA_NONCOHERENT + select GENERIC_ISA_DMA_SUPPORT_BROKEN +@@ -45,23 +45,68 @@ config LEMOTE_MACH2F + select HW_HAS_PCI + select I8259 + select IRQ_CPU +- select ISA + select SYS_HAS_CPU_LOONGSON2F + select SYS_HAS_EARLY_PRINTK + select SYS_SUPPORTS_32BIT_KERNEL + select SYS_SUPPORTS_64BIT_KERNEL +- select SYS_SUPPORTS_HIGHMEM ++ select SYS_SUPPORTS_HIGHMEM if ! EMBEDDED + select SYS_SUPPORTS_LITTLE_ENDIAN +- select LOONGSON_MC146818 ++ select LOONGSON_MC146818 if RTC_DRV_CMOS + help + Lemote Loongson 2F family machines utilize the 2F revision of + Loongson processor and the AMD CS5536 south bridge. + + These family machines include fuloong2f mini PC, yeeloong2f notebook, + LingLoong allinone PC and so forth. ++ ++config DEXXON_GDIUM ++ bool "Dexxon Gdium Netbook" ++ select ARCH_SPARSEMEM_ENABLE ++ select BOARD_SCACHE ++ select BOOT_ELF32 ++ select CEVT_R4K if ! MIPS_EXTERNAL_TIMER ++ select CPU_HAS_WB ++ select CSRC_R4K if ! MIPS_EXTERNAL_TIMER ++ select DMA_NONCOHERENT ++ select GENERIC_ISA_DMA_SUPPORT_BROKEN ++ select HW_HAS_PCI ++ select I8259 ++ select IRQ_CPU ++ select ISA ++ select SYS_HAS_CPU_LOONGSON2F ++ select SYS_HAS_EARLY_PRINTK ++ select SYS_SUPPORTS_32BIT_KERNEL ++ select SYS_SUPPORTS_64BIT_KERNEL ++ select SYS_SUPPORTS_HIGHMEM ++ select SYS_SUPPORTS_LITTLE_ENDIAN ++ select ARCH_REQUIRE_GPIOLIB ++ select HAVE_PWM if MFD_SM501 ++ help ++ Dexxon gdium netbook based on Loongson 2F and SM502. + endchoice + + config CS5536 ++ select CS5536_IDE if (PATA_AMD || BLK_DEV_AMD74XX || PATA_CS5536) ++ select CS5536_OHCI if USB_OHCI_HCD ++ select CS5536_EHCI if USB_EHCI_HCD ++ select CS5536_AUDIO if SND_CS5535AUDIO ++ select CS5536_ISA ++ bool ++ ++config CS5536_ISA ++ select ISA ++ bool ++ ++config CS5536_IDE ++ bool ++ ++config CS5536_OHCI ++ bool ++ ++config CS5536_EHCI ++ bool ++ ++config CS5536_AUDIO + bool + + config CS5536_MFGPT +@@ -81,13 +126,25 @@ config LOONGSON_SUSPEND + default y + depends on CPU_SUPPORTS_CPUFREQ && SUSPEND + +-config LOONGSON_UART_BASE +- bool +- default y +- depends on EARLY_PRINTK || SERIAL_8250 +- + config LOONGSON_MC146818 + bool + default n + ++config GDIUM_PWM_CLOCK ++ tristate "Gdium PWM Timer" ++ default n ++ depends on HAVE_PWM && EXPERIMENTAL && BROKEN ++ select MIPS_EXTERNAL_TIMER ++ help ++ This options enables the experimental sm501-pwm based clock. With it, ++ you may be possible to use the loongson2f cpufreq driver. ++ ++config GDIUM_VERSION ++ int "Configure Gdium Version" ++ depends on DEXXON_GDIUM ++ default "3" ++ help ++ I have no information about how to determine which version your board ++ is, If the default config doesn't work for it, please change it to ++ smaller ones. + endif # MACH_LOONGSON +diff --git a/arch/mips/loongson/Makefile b/arch/mips/loongson/Makefile +index 0dc0055..4b69866 100644 +--- a/arch/mips/loongson/Makefile ++++ b/arch/mips/loongson/Makefile +@@ -15,3 +15,9 @@ obj-$(CONFIG_LEMOTE_FULOONG2E) += fuloong-2e/ + # + + obj-$(CONFIG_LEMOTE_MACH2F) += lemote-2f/ ++ ++# ++# Dexxon gdium netbook, based on loongson 2F and SM502 ++# ++ ++obj-$(CONFIG_DEXXON_GDIUM) += gdium/ +diff --git a/arch/mips/loongson/Platform b/arch/mips/loongson/Platform +index 29692e5..6be5dff 100644 +--- a/arch/mips/loongson/Platform ++++ b/arch/mips/loongson/Platform +@@ -30,3 +30,4 @@ platform-$(CONFIG_MACH_LOONGSON) += loongson/ + cflags-$(CONFIG_MACH_LOONGSON) += -I$(srctree)/arch/mips/include/asm/mach-loongson -mno-branch-likely + load-$(CONFIG_LEMOTE_FULOONG2E) += 0xffffffff80100000 + load-$(CONFIG_LEMOTE_MACH2F) += 0xffffffff80200000 ++load-$(CONFIG_DEXXON_GDIUM) += 0xffffffff80200000 +diff --git a/arch/mips/loongson/common/Makefile b/arch/mips/loongson/common/Makefile +index 9e4484c..73f1f9f 100644 +--- a/arch/mips/loongson/common/Makefile ++++ b/arch/mips/loongson/common/Makefile +@@ -12,7 +12,6 @@ obj-$(CONFIG_PCI) += pci.o + # + obj-$(CONFIG_EARLY_PRINTK) += early_printk.o + obj-$(CONFIG_SERIAL_8250) += serial.o +-obj-$(CONFIG_LOONGSON_UART_BASE) += uart_base.o + obj-$(CONFIG_LOONGSON_MC146818) += rtc.o + + # +diff --git a/arch/mips/loongson/common/cmdline.c b/arch/mips/loongson/common/cmdline.c +index 72fed00..96d5919 100644 +--- a/arch/mips/loongson/common/cmdline.c ++++ b/arch/mips/loongson/common/cmdline.c +@@ -17,10 +17,15 @@ + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ ++#include + #include + + #include + ++/* the kernel command line copied from arcs_cmdline */ ++char loongson_cmdline[COMMAND_LINE_SIZE]; ++EXPORT_SYMBOL(loongson_cmdline); ++ + void __init prom_init_cmdline(void) + { + int prom_argc; +@@ -45,4 +50,31 @@ void __init prom_init_cmdline(void) + } + + prom_init_machtype(); ++ ++ /* append machine specific command line */ ++ switch (mips_machtype) { ++ case MACH_LEMOTE_LL2F: ++ if ((strstr(arcs_cmdline, "video=")) == NULL) ++ strcat(arcs_cmdline, " video=sisfb:1360x768-16@60"); ++ break; ++ case MACH_LEMOTE_FL2F: ++ if ((strstr(arcs_cmdline, "ide_core.ignore_cable=")) == NULL) ++ strcat(arcs_cmdline, " ide_core.ignore_cable=0"); ++ break; ++ case MACH_LEMOTE_ML2F7: ++ /* Mengloong-2F has a 800x480 screen */ ++ if ((strstr(arcs_cmdline, "vga=")) == NULL) ++ strcat(arcs_cmdline, " vga=0x313"); ++ break; ++ case MACH_DEXXON_GDIUM2F10: ++ /* gdium has a 1024x600 screen */ ++ if ((strstr(arcs_cmdline, "video=")) == NULL) ++ strcat(arcs_cmdline, " video=sm501fb:1024x600@60"); ++ break; ++ default: ++ break; ++ } ++ ++ /* copy arcs_cmdline into loongson_cmdline */ ++ strncpy(loongson_cmdline, arcs_cmdline, COMMAND_LINE_SIZE); + } +diff --git a/arch/mips/loongson/common/cs5536/Makefile b/arch/mips/loongson/common/cs5536/Makefile +index f12e640..70f6057 100644 +--- a/arch/mips/loongson/common/cs5536/Makefile ++++ b/arch/mips/loongson/common/cs5536/Makefile +@@ -2,8 +2,13 @@ + # Makefile for CS5536 support. + # + +-obj-$(CONFIG_CS5536) += cs5536_pci.o cs5536_ide.o cs5536_acc.o cs5536_ohci.o \ +- cs5536_isa.o cs5536_ehci.o ++obj-$(CONFIG_CS5536) += cs5536_pci.o ++ ++obj-$(CONFIG_ISA) += cs5536_isa.o ++obj-$(CONFIG_CS5536_IDE) += cs5536_ide.o ++obj-$(CONFIG_CS5536_AUDIO) += cs5536_acc.o ++obj-$(CONFIG_CS5536_OHCI) += cs5536_ohci.o ++obj-$(CONFIG_CS5536_EHCI) += cs5536_ehci.o + + # + # Enable cs5536 mfgpt Timer +diff --git a/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c b/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c +index c639b9d..a7078ae 100644 +--- a/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c ++++ b/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c +@@ -7,6 +7,9 @@ + * Copyright (C) 2009 Lemote Inc. + * Author: Wu zhangjin, wuzhangjin@gmail.com + * ++ * Copyright (C) 2010 Lemote Inc. ++ * Author: Gang Liang, randomizedthinking@gmail.com ++ * + * Reference: AMD Geode(TM) CS5536 Companion Device Data Book + * + * This program is free software; you can redistribute it and/or modify it +@@ -15,11 +18,24 @@ + * option) any later version. + */ + ++/* ++ * The MFGPT base address is variable, i.e., it could change over time. In ++ * reality, it only changes once when setting up the PCI memory mapping (occurs ++ * about 0.2 second from boot). But because of this, we have to read in the ++ * mfgpt base address repeatly in the beginning of various routines, most ++ * noticeably, mfgpt1_read_cycle (for sched_clock), and mfgpt1_interrupt. ++ * ++ * The source of problem is that PMON and the current cs5536 set up pci ++ * register window differently (to be further confirmed). Can we set ++ * them the same so as to save the trouble here? ++ * ++ * Now an ugly hack is used to save a few CPU cycles... likely an ++ * over-optimization. Feel free to remove it. ++ */ ++ + #include + #include + #include +-#include +-#include + #include + #include + +@@ -27,108 +43,143 @@ + + #include + +-DEFINE_SPINLOCK(mfgpt_lock); +-EXPORT_SYMBOL(mfgpt_lock); ++static void mfgpt0_set_mode(enum clock_event_mode, struct clock_event_device*); ++static int mfgpt0_next_event(unsigned long, struct clock_event_device*); ++static irqreturn_t mfgpt0_interrupt(int irq, void *dev_id); ++static void mfgpt0_start_timer(u16 delta); + ++static cycle_t mfgpt1_read_cycle(struct clocksource *cs); ++ ++static enum clock_event_mode mfgpt0_mode = CLOCK_EVT_MODE_SHUTDOWN; + static u32 mfgpt_base; + +-/* +- * Initialize the MFGPT timer. +- * +- * This is also called after resume to bring the MFGPT into operation again. +- */ ++static struct clock_event_device mfgpt0_clockevent = { ++ .name = "mfgpt0", ++ .features = CLOCK_EVT_MODE_ONESHOT | CLOCK_EVT_FEAT_PERIODIC, ++ .set_mode = mfgpt0_set_mode, ++ .set_next_event = mfgpt0_next_event, ++ .rating = 220, ++ .irq = CS5536_MFGPT_INTR, ++}; ++ ++static struct irqaction irq5 = { ++ .handler = mfgpt0_interrupt, ++ .flags = IRQF_DISABLED | IRQF_NOBALANCING | IRQF_TIMER, ++ .name = "mfgpt0-timer" ++}; ++ ++static struct clocksource mfgpt1_clocksource = { ++ .name = "mfgpt1", ++ .rating = 210, ++ .read = mfgpt1_read_cycle, ++ .mask = CLOCKSOURCE_MASK(16), ++ .flags = CLOCK_SOURCE_IS_CONTINUOUS ++}; + +-/* disable counter */ +-void disable_mfgpt0_counter(void) ++static inline void enable_mfgpt0_counter(void) + { +- outw(inw(MFGPT0_SETUP) & 0x7fff, MFGPT0_SETUP); ++ u32 basehi; ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &basehi, &mfgpt_base); ++ ++ /* clockevent: 14M, divisor = 8 (scale=3), CMP2 event mode */ ++ outw(MFGPT_SETUP_ACK | MFGPT_SETUP_CMP2EVT | ++ MFGPT_SETUP_CLOCK(1) | MFGPT_SETUP_SCALE(3), MFGPT0_SETUP); ++ outw(0, MFGPT0_CNT); ++ outw(MFGPT_COMPARE(1, 3), MFGPT0_CMP2); ++ outw(0xFFFF, MFGPT0_SETUP); + } +-EXPORT_SYMBOL(disable_mfgpt0_counter); + +-/* enable counter, comparator2 to event mode, 14.318MHz clock */ +-void enable_mfgpt0_counter(void) ++static inline void enable_mfgpt1_counter(void) + { +- outw(0xe310, MFGPT0_SETUP); ++ u32 basehi; ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &basehi, &mfgpt_base); ++ ++ /* clocksource: 32K w/ divisor = 2 (scale=1) */ ++ outw(MFGPT_SETUP_ACK | MFGPT_SETUP_CLOCK(0) | ++ MFGPT_SETUP_SCALE(1), MFGPT1_SETUP); ++ ++ outw(0, MFGPT1_CNT); ++ outw(0xFFFF, MFGPT1_CMP2); /* CNT won't tick with no CMP set */ ++ outw(0xFFFF, MFGPT1_SETUP); + } +-EXPORT_SYMBOL(enable_mfgpt0_counter); + +-static void init_mfgpt_timer(enum clock_event_mode mode, +- struct clock_event_device *evt) ++void enable_mfgpt_counter(void) + { +- spin_lock(&mfgpt_lock); +- +- switch (mode) { +- case CLOCK_EVT_MODE_PERIODIC: +- outw(COMPARE, MFGPT0_CMP2); /* set comparator2 */ +- outw(0, MFGPT0_CNT); /* set counter to 0 */ +- enable_mfgpt0_counter(); +- break; +- +- case CLOCK_EVT_MODE_SHUTDOWN: +- case CLOCK_EVT_MODE_UNUSED: +- if (evt->mode == CLOCK_EVT_MODE_PERIODIC || +- evt->mode == CLOCK_EVT_MODE_ONESHOT) +- disable_mfgpt0_counter(); +- break; +- +- case CLOCK_EVT_MODE_ONESHOT: +- /* The oneshot mode have very high deviation, Not use it! */ +- break; +- +- case CLOCK_EVT_MODE_RESUME: +- /* Nothing to do here */ +- break; +- } +- spin_unlock(&mfgpt_lock); ++ /* TODO: add a mfgpt system hard reset here ++ * timers might not reset correctly when OS crashes ++ */ ++ ++ enable_mfgpt0_counter(); ++ enable_mfgpt1_counter(); + } ++EXPORT_SYMBOL(enable_mfgpt_counter); + +-static struct clock_event_device mfgpt_clockevent = { +- .name = "mfgpt", +- .features = CLOCK_EVT_FEAT_PERIODIC, +- .set_mode = init_mfgpt_timer, +- .irq = CS5536_MFGPT_INTR, +-}; ++void disable_mfgpt_counter(void) ++{ ++ outw(0x7FFF, MFGPT0_SETUP); ++ outw(0x7FFF, MFGPT1_SETUP); ++} ++EXPORT_SYMBOL(disable_mfgpt_counter); + +-static irqreturn_t timer_interrupt(int irq, void *dev_id) ++static void mfgpt0_start_timer(u16 delta) + { +- u32 basehi; ++ outw(0x7FFF, MFGPT0_SETUP); ++ outw(0, MFGPT0_CNT); ++ outw(delta, MFGPT0_CMP2); ++ outw(0xFFFF, MFGPT0_SETUP); ++} + +- /* +- * get MFGPT base address +- * +- * NOTE: do not remove me, it's need for the value of mfgpt_base is +- * variable +- */ ++static void mfgpt0_set_mode(enum clock_event_mode mode, ++ struct clock_event_device *evt) ++{ ++ outw(0x7FFF, MFGPT0_SETUP); ++ if (mode == CLOCK_EVT_MODE_PERIODIC) ++ mfgpt0_start_timer(MFGPT_COMPARE(1, 3)); ++ ++ mfgpt0_mode = mode; ++} ++ ++static int mfgpt0_next_event(unsigned long delta, ++ struct clock_event_device *evt) ++{ ++ mfgpt0_start_timer(delta); ++ return 0; ++} ++ ++static irqreturn_t mfgpt0_interrupt(int irq, void *dev_id) ++{ ++ u32 basehi; + _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &basehi, &mfgpt_base); + +- /* ack */ +- outw(inw(MFGPT0_SETUP) | 0x4000, MFGPT0_SETUP); ++ /* stop the timer and ack the interrupt */ ++ outw(0x7FFF, MFGPT0_SETUP); + +- mfgpt_clockevent.event_handler(&mfgpt_clockevent); ++ if (mfgpt0_mode == CLOCK_EVT_MODE_SHUTDOWN) ++ return IRQ_HANDLED; + ++ /* restart timer for periodic mode */ ++ if (mfgpt0_mode == CLOCK_EVT_MODE_PERIODIC) ++ outw(0xFFFF, MFGPT0_SETUP); ++ ++ mfgpt0_clockevent.event_handler(&mfgpt0_clockevent); + return IRQ_HANDLED; + } + +-static struct irqaction irq5 = { +- .handler = timer_interrupt, +- .flags = IRQF_NOBALANCING | IRQF_TIMER, +- .name = "timer" +-}; +- + /* + * Initialize the conversion factor and the min/max deltas of the clock event + * structure and register the clock event source with the framework. + */ + void __init setup_mfgpt0_timer(void) + { +- u32 basehi; +- struct clock_event_device *cd = &mfgpt_clockevent; ++ struct clock_event_device *cd = &mfgpt0_clockevent; + unsigned int cpu = smp_processor_id(); +- + cd->cpumask = cpumask_of(cpu); +- clockevent_set_clock(cd, MFGPT_TICK_RATE); +- cd->max_delta_ns = clockevent_delta2ns(0xffff, cd); +- cd->min_delta_ns = clockevent_delta2ns(0xf, cd); ++ ++ cd->shift = 22; ++ cd->mult = div_sc(MFGPT_TICK_RATE(1, 3), NSEC_PER_SEC, cd->shift); ++ ++ cd->min_delta_ns = clockevent_delta2ns(0xF, cd); ++ cd->max_delta_ns = clockevent_delta2ns(0xFFFF, cd); + + /* Enable MFGPT0 Comparator 2 Output to the Interrupt Mapper */ + _wrmsr(DIVIL_MSR_REG(MFGPT_IRQ), 0, 0x100); +@@ -136,79 +187,24 @@ void __init setup_mfgpt0_timer(void) + /* Enable Interrupt Gate 5 */ + _wrmsr(DIVIL_MSR_REG(PIC_ZSEL_LOW), 0, 0x50000); + +- /* get MFGPT base address */ +- _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &basehi, &mfgpt_base); +- ++ enable_mfgpt0_counter(); + clockevents_register_device(cd); +- + setup_irq(CS5536_MFGPT_INTR, &irq5); + } + +-/* +- * Since the MFGPT overflows every tick, its not very useful +- * to just read by itself. So use jiffies to emulate a free +- * running counter: +- */ +-static cycle_t mfgpt_read(struct clocksource *cs) ++static cycle_t mfgpt1_read_cycle(struct clocksource *cs) + { +- unsigned long flags; +- int count; +- u32 jifs; +- static int old_count; +- static u32 old_jifs; +- +- spin_lock_irqsave(&mfgpt_lock, flags); +- /* +- * Although our caller may have the read side of xtime_lock, +- * this is now a seqlock, and we are cheating in this routine +- * by having side effects on state that we cannot undo if +- * there is a collision on the seqlock and our caller has to +- * retry. (Namely, old_jifs and old_count.) So we must treat +- * jiffies as volatile despite the lock. We read jiffies +- * before latching the timer count to guarantee that although +- * the jiffies value might be older than the count (that is, +- * the counter may underflow between the last point where +- * jiffies was incremented and the point where we latch the +- * count), it cannot be newer. +- */ +- jifs = jiffies; +- /* read the count */ +- count = inw(MFGPT0_CNT); +- +- /* +- * It's possible for count to appear to go the wrong way for this +- * reason: +- * +- * The timer counter underflows, but we haven't handled the resulting +- * interrupt and incremented jiffies yet. +- * +- * Previous attempts to handle these cases intelligently were buggy, so +- * we just do the simple thing now. +- */ +- if (count < old_count && jifs == old_jifs) +- count = old_count; +- +- old_count = count; +- old_jifs = jifs; +- +- spin_unlock_irqrestore(&mfgpt_lock, flags); +- +- return (cycle_t) (jifs * COMPARE) + count; ++ return inw(MFGPT1_CNT); + } + +-static struct clocksource clocksource_mfgpt = { +- .name = "mfgpt", +- .rating = 120, /* Functional for real use, but not desired */ +- .read = mfgpt_read, +- .mask = CLOCKSOURCE_MASK(32), +-}; +- +-int __init init_mfgpt_clocksource(void) ++int __init init_mfgpt1_clocksource(void) + { + if (num_possible_cpus() > 1) /* MFGPT does not scale! */ + return 0; + +- return clocksource_register_hz(&clocksource_mfgpt, MFGPT_TICK_RATE); ++ enable_mfgpt1_counter(); ++ ++ return clocksource_register_hz(&mfgpt1_clocksource, MFGPT_TICK_RATE(0, 1)); + } + +-arch_initcall(init_mfgpt_clocksource); ++arch_initcall(init_mfgpt1_clocksource); +diff --git a/arch/mips/loongson/common/early_printk.c b/arch/mips/loongson/common/early_printk.c +index ced461b..89aecbf 100644 +--- a/arch/mips/loongson/common/early_printk.c ++++ b/arch/mips/loongson/common/early_printk.c +@@ -10,9 +10,13 @@ + * option) any later version. + */ + #include ++#include ++#include + + #include + ++unsigned long _loongson_uart_base; ++ + #define PORT(base, offset) (u8 *)(base + offset) + + static inline unsigned int serial_in(unsigned char *base, int offset) +@@ -39,3 +43,29 @@ void prom_putchar(char c) + + serial_out(uart_base, UART_TX, c); + } ++ ++void __init prom_init_uart_base(void) ++{ ++ unsigned long loongson_uart_base; ++ ++ switch (mips_machtype) { ++ case MACH_LEMOTE_FL2E: ++ loongson_uart_base = LOONGSON_PCIIO_BASE + 0x3f8; ++ break; ++ case MACH_LEMOTE_FL2F: ++ case MACH_LEMOTE_LL2F: ++ loongson_uart_base = LOONGSON_PCIIO_BASE + 0x2f8; ++ break; ++ case MACH_LEMOTE_ML2F7: ++ case MACH_LEMOTE_YL2F89: ++ case MACH_DEXXON_GDIUM2F10: ++ case MACH_LEMOTE_NAS: ++ default: ++ /* The CPU provided serial port */ ++ loongson_uart_base = LOONGSON_LIO1_BASE + 0x3f8; ++ break; ++ } ++ ++ _loongson_uart_base = ++ (unsigned long)ioremap_nocache(loongson_uart_base, 8); ++} +diff --git a/arch/mips/loongson/common/init.c b/arch/mips/loongson/common/init.c +index ae7af1f..3083978 100644 +--- a/arch/mips/loongson/common/init.c ++++ b/arch/mips/loongson/common/init.c +@@ -30,8 +30,10 @@ void __init prom_init(void) + prom_init_env(); + prom_init_memory(); + ++#ifdef CONFIG_EARLY_PRINTK + /*init the uart base address */ + prom_init_uart_base(); ++#endif + } + + void __init prom_free_prom_memory(void) +diff --git a/arch/mips/loongson/common/irq.c b/arch/mips/loongson/common/irq.c +index 687003b..d62fa77 100644 +--- a/arch/mips/loongson/common/irq.c ++++ b/arch/mips/loongson/common/irq.c +@@ -10,6 +10,10 @@ + #include + #include + ++#include ++#include ++#include ++ + #include + /* + * the first level int-handler will jump here if it is a bonito irq +@@ -48,20 +52,32 @@ asmlinkage void plat_irq_dispatch(void) + void __init arch_init_irq(void) + { + /* +- * Clear all of the interrupts while we change the able around a bit. +- * int-handler is not on bootstrap ++ * The vector addresses of the generic exceptions are in the cached ++ * address space. + */ +- clear_c0_status(ST0_IM | ST0_BEV); ++ clear_c0_status(ST0_BEV); + +- /* no steer */ ++ /* No steer */ + LOONGSON_INTSTEER = 0; + + /* +- * Mask out all interrupt by writing "1" to all bit position in +- * the interrupt reset reg. ++ * Clear all interrupts + */ + LOONGSON_INTENCLR = ~0; + ++ /* ++ * Sets the first-level interrupt dispatcher: ++ * ++ * 0-15: i8259 interrupt (If CONFIG_I8259 selected) ++ * 16-23: mips cpu interrupt ++ * 32-63: bonito irq ++ */ ++ mips_cpu_irq_init(); ++ bonito_irq_init(); ++#ifdef CONFIG_I8259 ++ init_i8259_irqs(); ++#endif ++ + /* machine specific irq init */ + mach_init_irq(); + } +diff --git a/arch/mips/loongson/common/mem.c b/arch/mips/loongson/common/mem.c +index 8626a42..7aea259 100644 +--- a/arch/mips/loongson/common/mem.c ++++ b/arch/mips/loongson/common/mem.c +@@ -14,39 +14,24 @@ + #include + #include + ++#define MB(x) ((x) << 20) ++ + void __init prom_init_memory(void) + { +- add_memory_region(0x0, (memsize << 20), BOOT_MEM_RAM); +- +- add_memory_region(memsize << 20, LOONGSON_PCI_MEM_START - (memsize << +- 20), BOOT_MEM_RESERVED); +- ++ add_memory_region(0x0, MB(memsize), BOOT_MEM_RAM); ++ add_memory_region(MB(memsize), LOONGSON_PCI_MEM_START - MB(memsize), BOOT_MEM_RESERVED); + #ifdef CONFIG_CPU_SUPPORTS_ADDRWINCFG +- { +- int bit; +- +- bit = fls(memsize + highmemsize); +- if (bit != ffs(memsize + highmemsize)) +- bit += 20; +- else +- bit = bit + 20 - 1; +- +- /* set cpu window3 to map CPU to DDR: 2G -> 2G */ +- LOONGSON_ADDRWIN_CPUTODDR(ADDRWIN_WIN3, 0x80000000ul, +- 0x80000000ul, (1 << bit)); +- mmiowb(); +- } +-#endif /* !CONFIG_CPU_SUPPORTS_ADDRWINCFG */ ++ /* set cpu window3 to map CPU to DDR: 2G -> 0G */ ++ LOONGSON_ADDRWIN_CPUTODDR(ADDRWIN_WIN3, 0x80000000ul, 0, MB(memsize + highmemsize)); ++ mmiowb(); ++#endif + + #ifdef CONFIG_64BIT + if (highmemsize > 0) +- add_memory_region(LOONGSON_HIGHMEM_START, +- highmemsize << 20, BOOT_MEM_RAM); +- ++ add_memory_region(LOONGSON_HIGHMEM_START, MB(highmemsize), BOOT_MEM_RAM); + add_memory_region(LOONGSON_PCI_MEM_END + 1, LOONGSON_HIGHMEM_START - +- LOONGSON_PCI_MEM_END - 1, BOOT_MEM_RESERVED); +- +-#endif /* !CONFIG_64BIT */ ++ LOONGSON_PCI_MEM_END - 1, BOOT_MEM_RESERVED); ++#endif + } + + /* override of arch/mips/mm/cache.c: __uncached_access */ +diff --git a/arch/mips/loongson/common/mtd.c b/arch/mips/loongson/common/mtd.c +new file mode 100644 +index 0000000..49a57a7 +--- /dev/null ++++ b/arch/mips/loongson/common/mtd.c +@@ -0,0 +1,91 @@ ++/* ++ * Driver for flushing/dumping ROM of PMON on loongson family machines ++ * ++ * Copyright (C) 2008-2009 Lemote Inc. ++ * Author: Yan Hua ++ * ++ * 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++ ++#define FLASH_PHYS_ADDR LOONGSON_BOOT_BASE ++#define FLASH_SIZE 0x080000 ++ ++#define FLASH_PARTITION0_ADDR 0x00000000 ++#define FLASH_PARTITION0_SIZE 0x00080000 ++ ++struct map_info flash_map = { ++ .name = "flash device", ++ .size = FLASH_SIZE, ++ .bankwidth = 1, ++}; ++ ++struct mtd_partition flash_parts[] = { ++ { ++ .name = "Bootloader", ++ .offset = FLASH_PARTITION0_ADDR, ++ .size = FLASH_PARTITION0_SIZE}, ++}; ++ ++#define PARTITION_COUNT ARRAY_SIZE(flash_parts) ++ ++static struct mtd_info *mymtd; ++ ++int __init init_flash(void) ++{ ++ printk(KERN_NOTICE "flash device: %x at %x\n", ++ FLASH_SIZE, FLASH_PHYS_ADDR); ++ ++ flash_map.phys = FLASH_PHYS_ADDR; ++ flash_map.virt = ioremap(FLASH_PHYS_ADDR, FLASH_SIZE); ++ ++ if (!flash_map.virt) { ++ printk(KERN_NOTICE "Failed to ioremap\n"); ++ return -EIO; ++ } ++ ++ simple_map_init(&flash_map); ++ ++ mymtd = do_map_probe("cfi_probe", &flash_map); ++ if (mymtd) { ++ add_mtd_partitions(mymtd, flash_parts, PARTITION_COUNT); ++ printk(KERN_NOTICE "pmon flash device initialized\n"); ++ return 0; ++ } ++ ++ iounmap((void *)flash_map.virt); ++ return -ENXIO; ++} ++ ++static void __exit cleanup_flash(void) ++{ ++ if (mymtd) { ++ del_mtd_partitions(mymtd); ++ map_destroy(mymtd); ++ } ++ if (flash_map.virt) { ++ iounmap((void *)flash_map.virt); ++ flash_map.virt = 0; ++ } ++} ++ ++module_init(init_flash); ++module_exit(cleanup_flash); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Yanhua "); ++MODULE_DESCRIPTION("MTD driver for pmon flushing/dumping"); +diff --git a/arch/mips/loongson/common/pci.c b/arch/mips/loongson/common/pci.c +index fa77844..a992931 100644 +--- a/arch/mips/loongson/common/pci.c ++++ b/arch/mips/loongson/common/pci.c +@@ -50,11 +50,11 @@ static void __init setup_pcimap(void) + LOONGSON_PCIMAP_WIN(0, 0); + + /* +- * PCI-DMA to local mapping: [2G,2G+256M] -> [0M,256M] ++ * PCI-DMA to local mapping: [2G,4G] -> [0M,2G] + */ + LOONGSON_PCIBASE0 = 0x80000000ul; /* base: 2G -> mmap: 0M */ +- /* size: 256M, burst transmission, pre-fetch enable, 64bit */ +- LOONGSON_PCI_HIT0_SEL_L = 0xc000000cul; ++ /* size: 2G, burst transmission, pre-fetch enable, 64bit */ ++ LOONGSON_PCI_HIT0_SEL_L = 0x8000000cul; + LOONGSON_PCI_HIT0_SEL_H = 0xfffffffful; + LOONGSON_PCI_HIT1_SEL_L = 0x00000006ul; /* set this BAR as invalid */ + LOONGSON_PCI_HIT1_SEL_H = 0x00000000ul; +diff --git a/arch/mips/loongson/common/serial.c b/arch/mips/loongson/common/serial.c +index 5f2b78a..c828600 100644 +--- a/arch/mips/loongson/common/serial.c ++++ b/arch/mips/loongson/common/serial.c +@@ -10,6 +10,7 @@ + * Author: Wu Zhangjin (wuzhangjin@gmail.com) + */ + ++#include + #include + #include + #include +@@ -19,58 +20,44 @@ + #include + #include + +-#define PORT(int) \ ++#define PORT(int, base_baud, io_type, port) \ + { \ + .irq = int, \ +- .uartclk = 1843200, \ +- .iotype = UPIO_PORT, \ ++ .uartclk = base_baud, \ ++ .iotype = io_type, \ + .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, \ + .regshift = 0, \ ++ .iobase = port, \ + } + +-#define PORT_M(int) \ +-{ \ +- .irq = MIPS_CPU_IRQ_BASE + (int), \ +- .uartclk = 3686400, \ +- .iotype = UPIO_MEM, \ +- .membase = (void __iomem *)NULL, \ +- .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, \ +- .regshift = 0, \ +-} +- +-static struct plat_serial8250_port uart8250_data[][2] = { +- [MACH_LOONGSON_UNKNOWN] {}, +- [MACH_LEMOTE_FL2E] {PORT(4), {} }, +- [MACH_LEMOTE_FL2F] {PORT(3), {} }, +- [MACH_LEMOTE_ML2F7] {PORT_M(3), {} }, +- [MACH_LEMOTE_YL2F89] {PORT_M(3), {} }, +- [MACH_DEXXON_GDIUM2F10] {PORT_M(3), {} }, +- [MACH_LEMOTE_NAS] {PORT_M(3), {} }, +- [MACH_LEMOTE_LL2F] {PORT(3), {} }, +- [MACH_LOONGSON_END] {}, ++static struct plat_serial8250_port uart8250_data[] = { ++ /* ttyS0: cpu_uart0 Yeeloong, Gdium, UNAS, ... */ ++ PORT((MIPS_CPU_IRQ_BASE + 3), 3686400, UPIO_MEM, 0x3f8), ++ /* ttyS1: sb_uart1 2E */ ++ PORT(4, 1843200, UPIO_PORT, 0x3f8), ++ /* ttyS2: sb_uart2 fuloong2f */ ++ PORT(3, 1843200, UPIO_PORT, 0x2f8), ++ {}, + }; + + static struct platform_device uart8250_device = { + .name = "serial8250", + .id = PLAT8250_DEV_PLATFORM, ++ .dev = { ++ .platform_data = uart8250_data, ++ }, + }; + + static int __init serial_init(void) + { +- unsigned char iotype; +- +- iotype = uart8250_data[mips_machtype][0].iotype; +- +- if (UPIO_MEM == iotype) +- uart8250_data[mips_machtype][0].membase = +- (void __iomem *)_loongson_uart_base; +- else if (UPIO_PORT == iotype) +- uart8250_data[mips_machtype][0].iobase = +- loongson_uart_base - LOONGSON_PCIIO_BASE; +- +- uart8250_device.dev.platform_data = uart8250_data[mips_machtype]; ++ uart8250_data[0].membase = (void __iomem *)ioremap_nocache( ++ LOONGSON_LIO1_BASE + uart8250_data[0].iobase, 8); + +- return platform_device_register(&uart8250_device); ++ platform_device_register(&uart8250_device); ++ return 0; + } + + device_initcall(serial_init); ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("liu shiwei "); ++MODULE_DESCRIPTION("loongson serial"); +diff --git a/arch/mips/loongson/common/time.c b/arch/mips/loongson/common/time.c +index 262a1f6..eebbeef 100644 +--- a/arch/mips/loongson/common/time.c ++++ b/arch/mips/loongson/common/time.c +@@ -10,6 +10,8 @@ + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ ++#include ++ + #include + #include + +@@ -24,8 +26,81 @@ void __init plat_time_init(void) + setup_mfgpt0_timer(); + } + ++#ifdef CONFIG_LOONGSON_MC146818 + void read_persistent_clock(struct timespec *ts) + { + ts->tv_sec = mc146818_get_cmos_time(); + ts->tv_nsec = 0; + } ++#else ++ ++/* If no CMOS RTC, use the one below */ ++ ++/* ++ * Cloned from drivers/rtc/hctosys.c ++ * ++ * If CONFIG_RTC_HCTOSYS=y is enabled, the system time can be set from the ++ * hardware clock(when boot and resuming from suspend), this may be also done ++ * (duplicately) by the timekeeper, which may need to be avoided(TODO). ++ * ++ * read_persistent_clock() may be useful in some places, e.g. there is not ++ * peristent clock in the system, we can use this to recover the system time. ++ * ++ * Note: The device indicated by CONFIG_RTC_HCTOSYS_DEVICE must be the one ++ * created by the RTC driver. Use Gdium as an example, We must disable the ++ * rt_cmos driver If we want to use the rtc_m41t80 driver for ++ * CONFIG_RTC_HCTOSYS_DEVICE is configured as /dev/rtc0, if rtc_cmos is ++ * enabled, rtc_cmos driver will be used, but it is not supported by Gdium. ++ * So, for Gdium, please ensure "# CONFIG_RTC_DRV_CMOS is not set" ++ */ ++ ++#ifdef CONFIG_RTC_HCTOSYS ++void read_persistent_clock(struct timespec *ts) ++{ ++ int err = -ENODEV; ++ struct rtc_time tm; ++ struct rtc_device *rtc; ++ ++ /* We can not access the RTC device before it is initialized ... */ ++ if (rtc_hctosys_ret != 0) { ++ ts->tv_sec = 0; ++ ts->tv_nsec = 0; ++ return; ++ } ++ ++ rtc = rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE); ++ ++ if (rtc == NULL) { ++ pr_err("%s: unable to open rtc device (%s)\n", ++ __FILE__, CONFIG_RTC_HCTOSYS_DEVICE); ++ goto err_open; ++ } ++ ++ err = rtc_read_time(rtc, &tm); ++ if (err) { ++ dev_err(rtc->dev.parent, ++ "hctosys: unable to read the hardware clock\n"); ++ goto err_read; ++ ++ } ++ ++ err = rtc_valid_tm(&tm); ++ if (err) { ++ dev_err(rtc->dev.parent, ++ "hctosys: invalid date/time\n"); ++ goto err_invalid; ++ } ++ ++ ts->tv_nsec = NSEC_PER_SEC >> 1, ++ rtc_tm_to_time(&tm, &ts->tv_sec); ++ ++err_invalid: ++err_read: ++ rtc_class_close(rtc); ++ ++err_open: ++ rtc_hctosys_ret = err; ++} ++#endif /* CONFIG_RTC_HCTOSYS */ ++ ++#endif /* !CONFIG_LOONGSON_MC146818 */ +diff --git a/arch/mips/loongson/common/uart_base.c b/arch/mips/loongson/common/uart_base.c +deleted file mode 100644 +index e192ad0..0000000 +--- a/arch/mips/loongson/common/uart_base.c ++++ /dev/null +@@ -1,45 +0,0 @@ +-/* +- * Copyright (C) 2009 Lemote Inc. +- * Author: Wu Zhangjin, wuzhangjin@gmail.com +- * +- * 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. +- */ +- +-#include +-#include +- +-#include +- +-/* ioremapped */ +-unsigned long _loongson_uart_base; +-EXPORT_SYMBOL(_loongson_uart_base); +-/* raw */ +-unsigned long loongson_uart_base; +-EXPORT_SYMBOL(loongson_uart_base); +- +-void prom_init_loongson_uart_base(void) +-{ +- switch (mips_machtype) { +- case MACH_LEMOTE_FL2E: +- loongson_uart_base = LOONGSON_PCIIO_BASE + 0x3f8; +- break; +- case MACH_LEMOTE_FL2F: +- case MACH_LEMOTE_LL2F: +- loongson_uart_base = LOONGSON_PCIIO_BASE + 0x2f8; +- break; +- case MACH_LEMOTE_ML2F7: +- case MACH_LEMOTE_YL2F89: +- case MACH_DEXXON_GDIUM2F10: +- case MACH_LEMOTE_NAS: +- default: +- /* The CPU provided serial port */ +- loongson_uart_base = LOONGSON_LIO1_BASE + 0x3f8; +- break; +- } +- +- _loongson_uart_base = +- (unsigned long)ioremap_nocache(loongson_uart_base, 8); +-} +diff --git a/arch/mips/loongson/fuloong-2e/irq.c b/arch/mips/loongson/fuloong-2e/irq.c +index ef5ec8f..232930e 100644 +--- a/arch/mips/loongson/fuloong-2e/irq.c ++++ b/arch/mips/loongson/fuloong-2e/irq.c +@@ -9,7 +9,6 @@ + */ + #include + +-#include + #include + + #include +@@ -57,11 +56,6 @@ void __init mach_init_irq(void) + LOONGSON_INTEDGE = LOONGSON_ICU_SYSTEMERR | LOONGSON_ICU_MASTERERR | + LOONGSON_ICU_RETRYERR | LOONGSON_ICU_MBOXES; + +- /* Sets the first-level interrupt dispatcher. */ +- mips_cpu_irq_init(); +- init_i8259_irqs(); +- bonito_irq_init(); +- + /* bonito irq at IP2 */ + setup_irq(MIPS_CPU_IRQ_BASE + 2, &cascade_irqaction); + /* 8259 irq at IP5 */ +diff --git a/arch/mips/loongson/gdium/Makefile b/arch/mips/loongson/gdium/Makefile +new file mode 100644 +index 0000000..f3f4f51 +--- /dev/null ++++ b/arch/mips/loongson/gdium/Makefile +@@ -0,0 +1,6 @@ ++# Makefile for gdium ++ ++obj-y += irq.o reset.o platform.o ++ ++obj-$(CONFIG_MFD_SM501) += sm501-pwm.o ++obj-$(CONFIG_GDIUM_PWM_CLOCK) += gdium-clock.o +diff --git a/arch/mips/loongson/gdium/gdium-clock.c b/arch/mips/loongson/gdium/gdium-clock.c +new file mode 100644 +index 0000000..fdbf42a +--- /dev/null ++++ b/arch/mips/loongson/gdium/gdium-clock.c +@@ -0,0 +1,234 @@ ++/* ++ * Doesn't work really well. When used, the clocksource is producing ++ * bad timings and the clockevent can't be used (don't have one shot feature ++ * thus can't switch on the fly and the pwm is initialised too late to be able ++ * to use it at boot time). ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define CLOCK_PWM 1 ++#define CLOCK_PWM_FREQ 1500000 /* Freq in Hz */ ++#define CLOCK_LATCH ((CLOCK_PWM_FREQ + HZ/2) / HZ) ++#define CLOCK_PWM_PERIOD (1000000000/CLOCK_PWM_FREQ) /* period ns */ ++#define CLOCK_PWM_DUTY 50 ++#define CLOCK_PWM_IRQ (MIPS_CPU_IRQ_BASE + 4) ++ ++static const char drv_name[] = "gdium-clock"; ++ ++static struct pwm_device *clock_pwm; ++ ++static DEFINE_SPINLOCK(clock_pwm_lock); ++static uint64_t clock_tick; ++ ++static irqreturn_t gdium_pwm_clock_interrupt(int irq, void *dev_id) ++{ ++ struct clock_event_device *cd = dev_id; ++ unsigned long flag; ++ ++ spin_lock_irqsave(&clock_pwm_lock, flag); ++ clock_tick++; ++ /* wait intn2 to finish */ ++ do { ++ LOONGSON_INTENCLR = (1 << 13); ++ } while (LOONGSON_INTISR & (1 << 13)); ++ spin_unlock_irqrestore(&clock_pwm_lock, flag); ++ ++ if (cd && cd->event_handler) ++ cd->event_handler(cd); ++ ++ return IRQ_HANDLED; ++} ++ ++static cycle_t gdium_pwm_clock_read(struct clocksource *cs) ++{ ++ unsigned long flag; ++ uint32_t jifs; ++ uint64_t ticks; ++ ++ spin_lock_irqsave(&clock_pwm_lock, flag); ++ jifs = jiffies; ++ ticks = clock_tick; ++ spin_unlock_irqrestore(&clock_pwm_lock, flag); ++ /* return (cycle_t)ticks; */ ++ return (cycle_t)(CLOCK_LATCH * jifs); ++} ++ ++static struct clocksource gdium_pwm_clock_clocksource = { ++ .name = "gdium_csrc", ++ .read = gdium_pwm_clock_read, ++ .mask = CLOCKSOURCE_MASK(64), ++ .flags = CLOCK_SOURCE_IS_CONTINUOUS | CLOCK_SOURCE_MUST_VERIFY, ++ .shift = 20, ++}; ++ ++/* Debug fs */ ++static int gdium_pwm_clock_show(struct seq_file *s, void *p) ++{ ++ unsigned long flag; ++ uint64_t ticks; ++ ++ spin_lock_irqsave(&clock_pwm_lock, flag); ++ ticks = clock_tick; ++ spin_unlock_irqrestore(&clock_pwm_lock, flag); ++ seq_printf(s, "%lld\n", ticks); ++ return 0; ++} ++ ++static int gdium_pwm_clock_open(struct inode *inode, struct file *file) ++{ ++ return single_open(file, gdium_pwm_clock_show, inode->i_private); ++} ++ ++static const struct file_operations gdium_pwm_clock_fops = { ++ .open = gdium_pwm_clock_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .owner = THIS_MODULE, ++}; ++static struct dentry *debugfs_file; ++ ++static void gdium_pwm_clock_set_mode(enum clock_event_mode mode, ++ struct clock_event_device *evt) ++{ ++ /* Nothing to do ... */ ++} ++ ++static struct clock_event_device gdium_pwm_clock_cevt = { ++ .name = "gdium_cevt", ++ .features = CLOCK_EVT_FEAT_PERIODIC, ++ /* .mult, .shift, .max_delta_ns and .min_delta_ns left uninitialized */ ++ .rating = 299, ++ .irq = CLOCK_PWM_IRQ, ++ .set_mode = gdium_pwm_clock_set_mode, ++}; ++ ++static struct platform_device_id platform_device_ids[] = { ++ { ++ .name = "gdium-pwmclk", ++ }, ++ {} ++}; ++MODULE_DEVICE_TABLE(platform, platform_device_ids); ++ ++static struct platform_driver gdium_pwm_clock_driver = { ++ .driver = { ++ .name = drv_name, ++ .owner = THIS_MODULE, ++ }, ++ .id_table = platform_device_ids, ++}; ++ ++static int gdium_pwm_clock_drvinit(void) ++{ ++ int ret; ++ struct clocksource *cs = &gdium_pwm_clock_clocksource; ++ struct clock_event_device *cd = &gdium_pwm_clock_cevt; ++ unsigned int cpu = smp_processor_id(); ++ ++ clock_tick = 0; ++ ++ clock_pwm = pwm_request(CLOCK_PWM, drv_name); ++ if (clock_pwm == NULL) { ++ pr_err("unable to request PWM for Gdium clock\n"); ++ return -EBUSY; ++ } ++ ret = pwm_config(clock_pwm, CLOCK_PWM_DUTY, CLOCK_PWM_PERIOD); ++ if (ret) { ++ pr_err("unable to configure PWM for Gdium clock\n"); ++ goto err_pwm_request; ++ } ++ ret = pwm_enable(clock_pwm); ++ if (ret) { ++ pr_err("unable to enable PWM for Gdium clock\n"); ++ goto err_pwm_request; ++ } ++ ++ cd->cpumask = cpumask_of(cpu); ++ ++ cd->shift = 22; ++ cd->mult = div_sc(CLOCK_PWM_FREQ, NSEC_PER_SEC, cd->shift); ++ cd->max_delta_ns = clockevent_delta2ns(0x7FFF, cd); ++ cd->min_delta_ns = clockevent_delta2ns(0xF, cd); ++ clockevents_register_device(&gdium_pwm_clock_cevt); ++ ++ /* SM501 PWM1 connected to intn2 <->ip4 */ ++ LOONGSON_INTPOL = (1 << 13); ++ LOONGSON_INTEDGE &= ~(1 << 13); ++ ret = request_irq(CLOCK_PWM_IRQ, gdium_pwm_clock_interrupt, IRQF_DISABLED, drv_name, &gdium_pwm_clock_cevt); ++ if (ret) { ++ pr_err("Can't claim irq\n"); ++ goto err_pwm_disable; ++ } ++ ++ cs->rating = 200; ++ cs->mult = clocksource_hz2mult(CLOCK_PWM_FREQ, cs->shift); ++ ret = clocksource_register(&gdium_pwm_clock_clocksource); ++ if (ret) { ++ pr_err("Can't register clocksource\n"); ++ goto err_irq; ++ } ++ pr_info("Clocksource registered with shift %d and mult %d\n", ++ cs->shift, cs->mult); ++ ++ debugfs_file = debugfs_create_file(drv_name, S_IFREG | S_IRUGO, ++ NULL, NULL, &gdium_pwm_clock_fops); ++ ++ return 0; ++ ++err_irq: ++ free_irq(CLOCK_PWM_IRQ, &gdium_pwm_clock_cevt); ++err_pwm_disable: ++ pwm_disable(clock_pwm); ++err_pwm_request: ++ pwm_free(clock_pwm); ++ return ret; ++} ++ ++static void gdium_pwm_clock_drvexit(void) ++{ ++ free_irq(CLOCK_PWM_IRQ, &gdium_pwm_clock_cevt); ++ pwm_disable(clock_pwm); ++ pwm_free(clock_pwm); ++} ++ ++ ++static int __devinit gdium_pwm_clock_init(void) ++{ ++ int ret = gdium_pwm_clock_drvinit(); ++ ++ if (ret) { ++ pr_err("Fail to register gdium clock driver\n"); ++ return ret; ++ } ++ ++ return platform_driver_register(&gdium_pwm_clock_driver); ++} ++ ++static void __exit gdium_pwm_clock_cleanup(void) ++{ ++ gdium_pwm_clock_drvexit(); ++ platform_driver_unregister(&gdium_pwm_clock_driver); ++} ++ ++module_init(gdium_pwm_clock_init); ++module_exit(gdium_pwm_clock_cleanup); ++ ++MODULE_AUTHOR("Arnaud Patard "); ++MODULE_DESCRIPTION("Gdium PWM clock driver"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("platform:gdium-pwmclk"); +diff --git a/arch/mips/loongson/gdium/irq.c b/arch/mips/loongson/gdium/irq.c +new file mode 100644 +index 0000000..2415d20 +--- /dev/null ++++ b/arch/mips/loongson/gdium/irq.c +@@ -0,0 +1,55 @@ ++/* ++ * Copyright (C) 2007 Lemote Inc. ++ * Author: Fuxin Zhang, zhangfx@lemote.com ++ * ++ * Copyright (c) 2010 yajin ++ * ++ * 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. ++ */ ++ ++#include ++#include ++ ++#include ++#include ++ ++#define LOONGSON_TIMER_IRQ (MIPS_CPU_IRQ_BASE + 7) /* cpu timer */ ++#define LOONGSON_NORTH_BRIDGE_IRQ (MIPS_CPU_IRQ_BASE + 6) /* bonito */ ++#define LOONGSON_UART_IRQ (MIPS_CPU_IRQ_BASE + 3) /* cpu serial port */ ++ ++void mach_irq_dispatch(unsigned int pending) ++{ ++ if (pending & CAUSEF_IP7) ++ do_IRQ(LOONGSON_TIMER_IRQ); ++ else if (pending & CAUSEF_IP6) { /* North Bridge, Perf counter */ ++ do_perfcnt_IRQ(); ++ bonito_irqdispatch(); ++ } else if (pending & CAUSEF_IP3) /* CPU UART */ ++ do_IRQ(LOONGSON_UART_IRQ); ++#if defined(CONFIG_GDIUM_PWM_CLOCK) || defined(CONFIG_GDIUM_PWM_CLOCK_MODULE) ++ else if (pending & CAUSEF_IP4) /* SM501 PWM clock */ ++ do_IRQ(MIPS_CPU_IRQ_BASE + 4); ++#endif ++ else ++ spurious_interrupt(); ++} ++ ++static irqreturn_t ip6_action(int cpl, void *dev_id) ++{ ++ return IRQ_HANDLED; ++} ++ ++struct irqaction ip6_irqaction = { ++ .handler = ip6_action, ++ .name = "cascade", ++ .flags = IRQF_SHARED, ++}; ++ ++void __init mach_init_irq(void) ++{ ++ /* setup north bridge irq (bonito) */ ++ setup_irq(LOONGSON_NORTH_BRIDGE_IRQ, &ip6_irqaction); ++} +diff --git a/arch/mips/loongson/gdium/platform.c b/arch/mips/loongson/gdium/platform.c +new file mode 100644 +index 0000000..ffafba4 +--- /dev/null ++++ b/arch/mips/loongson/gdium/platform.c +@@ -0,0 +1,135 @@ ++/* ++ * Copyright (c) 2009 Philippe Vachon ++ * ++ * 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define GDIUM_GPIO_BASE 224 ++ ++static struct i2c_board_info __initdata sm502dev_i2c_devices[] = { ++ { ++ I2C_BOARD_INFO("lm75", 0x48), ++ }, ++ { ++ I2C_BOARD_INFO("m41t83", 0x68), ++ }, ++ { ++ I2C_BOARD_INFO("gdium-laptop", 0x40), ++ }, ++}; ++ ++static int sm502dev_backlight_init(struct device *dev) ++{ ++ /* Add gpio request stuff here */ ++ return 0; ++} ++ ++static void sm502dev_backlight_exit(struct device *dev) ++{ ++ /* Add gpio free stuff here */ ++} ++ ++static struct platform_pwm_backlight_data backlight_data = { ++ .pwm_id = 0, ++ .max_brightness = 15, ++ .dft_brightness = 8, ++ .pwm_period_ns = 50000, /* 20 kHz */ ++ .init = sm502dev_backlight_init, ++ .exit = sm502dev_backlight_exit, ++}; ++ ++static struct platform_device backlight = { ++ .name = "pwm-backlight", ++ .dev = { ++ .platform_data = &backlight_data, ++ }, ++ .id = -1, ++}; ++ ++/* ++ * Warning this stunt is very dangerous ++ * as the sm501 gpio have dynamic numbers... ++ */ ++/* bus 0 is the one for the ST7, DS75 etc... */ ++static struct i2c_gpio_platform_data i2c_gpio0_data = { ++#if CONFIG_GDIUM_VERSION > 2 ++ .sda_pin = GDIUM_GPIO_BASE + 13, ++ .scl_pin = GDIUM_GPIO_BASE + 6, ++#else ++ .sda_pin = 192+15, ++ .scl_pin = 192+14, ++#endif ++ .udelay = 5, ++ .timeout = HZ / 10, ++ .sda_is_open_drain = 0, ++ .scl_is_open_drain = 0, ++}; ++ ++static struct platform_device i2c_gpio0_device = { ++ .name = "i2c-gpio", ++ .id = 0, ++ .dev = { .platform_data = &i2c_gpio0_data, }, ++}; ++ ++/* bus 1 is for the CRT/VGA external screen */ ++static struct i2c_gpio_platform_data i2c_gpio1_data = { ++ .sda_pin = GDIUM_GPIO_BASE + 10, ++ .scl_pin = GDIUM_GPIO_BASE + 9, ++ .udelay = 5, ++ .timeout = HZ / 10, ++ .sda_is_open_drain = 0, ++ .scl_is_open_drain = 0, ++}; ++ ++static struct platform_device i2c_gpio1_device = { ++ .name = "i2c-gpio", ++ .id = 1, ++ .dev = { .platform_data = &i2c_gpio1_data, }, ++}; ++ ++static struct platform_device gdium_clock = { ++ .name = "gdium-pwmclk", ++ .id = -1, ++}; ++ ++static struct platform_device *devices[] __initdata = { ++ &i2c_gpio0_device, ++ &i2c_gpio1_device, ++ &backlight, ++ &gdium_clock, ++}; ++ ++static int __init gdium_platform_devices_setup(void) ++{ ++ int ret; ++ ++ pr_info("Registering gdium platform devices\n"); ++ ++ ret = i2c_register_board_info(0, sm502dev_i2c_devices, ++ ARRAY_SIZE(sm502dev_i2c_devices)); ++ ++ if (ret != 0) { ++ pr_info("Error while registering platform devices: %d\n", ret); ++ return ret; ++ } ++ ++ platform_add_devices(devices, ARRAY_SIZE(devices)); ++ ++ return 0; ++} ++ ++/* ++ * some devices are on the pwm stuff which is behind the mfd which is ++ * behind the pci bus so arch_initcall can't work because too early ++ */ ++late_initcall(gdium_platform_devices_setup); +diff --git a/arch/mips/loongson/gdium/reset.c b/arch/mips/loongson/gdium/reset.c +new file mode 100644 +index 0000000..8289f95 +--- /dev/null ++++ b/arch/mips/loongson/gdium/reset.c +@@ -0,0 +1,22 @@ ++/* Board-specific reboot/shutdown routines ++ * ++ * Copyright (C) 2010 yajin ++ * ++ * 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. ++ */ ++#include ++ ++void mach_prepare_shutdown(void) ++{ ++ LOONGSON_GPIOIE &= ~(1<<1); ++ LOONGSON_GPIODATA |= (1<<1); ++} ++ ++void mach_prepare_reboot(void) ++{ ++ LOONGSON_GPIOIE &= ~(1<<2); ++ LOONGSON_GPIODATA &= ~(1<<2); ++} +diff --git a/arch/mips/loongson/gdium/sm501-pwm.c b/arch/mips/loongson/gdium/sm501-pwm.c +new file mode 100644 +index 0000000..5af3b23 +--- /dev/null ++++ b/arch/mips/loongson/gdium/sm501-pwm.c +@@ -0,0 +1,465 @@ ++/* ++ * SM501 PWM clock ++ * Copyright (C) 2009-2010 Arnaud Patard ++ * ++ * 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static const char drv_name[] = "sm501-pwm"; ++ ++#define INPUT_CLOCK 96 /* MHz */ ++#define PWM_COUNT 3 ++ ++#define SM501PWM_HIGH_COUNTER (1<<20) ++#define SM501PWM_LOW_COUNTER (1<<8) ++#define SM501PWM_CLOCK_DIVIDE (1>>4) ++#define SM501PWM_IP (1<<3) ++#define SM501PWM_I (1<<2) ++#define SM501PWM_E (1<<0) ++ ++struct pwm_device { ++ struct list_head node; ++ struct device *dev; ++ void __iomem *regs; ++ int duty_ns; ++ int period_ns; ++ char enabled; ++ void (*handler)(struct pwm_device *pwm); ++ ++ const char *label; ++ unsigned int use_count; ++ unsigned int pwm_id; ++}; ++ ++struct sm501pwm_info { ++ void __iomem *regs; ++ int irq; ++ struct resource *res; ++ struct device *dev; ++ struct dentry *debugfs; ++ ++ struct pwm_device pwm[3]; ++}; ++ ++int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) ++{ ++ unsigned int high, low, divider; ++ int divider1, divider2; ++ unsigned long long delay; ++ ++ if (!pwm || !pwm->regs || period_ns == 0 || duty_ns > period_ns) ++ return -EINVAL; ++ ++ /* Get delay ++ * We're loosing some precision but multiplying then dividing ++ * will overflow ++ */ ++ if (period_ns > 1000) { ++ delay = period_ns / 1000; ++ delay *= INPUT_CLOCK; ++ } else { ++ delay = period_ns * 96; ++ delay /= 1000; ++ } ++ ++ /* Get the number of clock low and high */ ++ high = delay * duty_ns / period_ns; ++ low = delay - high; ++ ++ /* Get divider to make 'low' and 'high' fit into 12 bits */ ++ /* No need to say that the divider must be >= 0 */ ++ divider1 = fls(low)-12; ++ divider2 = fls(high)-12; ++ ++ if (divider1 < 0) ++ divider1 = 0; ++ if (divider2 < 0) ++ divider2 = 0; ++ ++ divider = max(divider1, divider2); ++ ++ low >>= divider; ++ high >>= divider; ++ ++ pwm->duty_ns = duty_ns; ++ pwm->period_ns = period_ns; ++ ++ writel((high<<20)|(low<<8)|(divider<<4), pwm->regs); ++ return 0; ++} ++EXPORT_SYMBOL(pwm_config); ++ ++int pwm_enable(struct pwm_device *pwm) ++{ ++ u32 reg; ++ ++ if (!pwm) ++ return -EINVAL; ++ ++ switch (pwm->pwm_id) { ++ case 0: ++ sm501_configure_gpio(pwm->dev->parent, 29, 1); ++ break; ++ case 1: ++ sm501_configure_gpio(pwm->dev->parent, 30, 1); ++ break; ++ case 2: ++ sm501_configure_gpio(pwm->dev->parent, 31, 1); ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ reg = readl(pwm->regs); ++ reg |= (SM501PWM_IP | SM501PWM_E); ++ writel(reg, pwm->regs); ++ pwm->enabled = 1; ++ ++ return 0; ++} ++EXPORT_SYMBOL(pwm_enable); ++ ++void pwm_disable(struct pwm_device *pwm) ++{ ++ u32 reg; ++ ++ if (!pwm) ++ return; ++ ++ reg = readl(pwm->regs); ++ reg &= ~(SM501PWM_IP | SM501PWM_E); ++ writel(reg, pwm->regs); ++ ++ switch (pwm->pwm_id) { ++ case 0: ++ sm501_configure_gpio(pwm->dev->parent, 29, 0); ++ break; ++ case 1: ++ sm501_configure_gpio(pwm->dev->parent, 30, 0); ++ break; ++ case 2: ++ sm501_configure_gpio(pwm->dev->parent, 31, 0); ++ break; ++ default: ++ break; ++ } ++ pwm->enabled = 0; ++} ++EXPORT_SYMBOL(pwm_disable); ++ ++static DEFINE_MUTEX(pwm_lock); ++static LIST_HEAD(pwm_list); ++ ++struct pwm_device *pwm_request(int pwm_id, const char *label) ++{ ++ struct pwm_device *pwm; ++ int found = 0; ++ ++ mutex_lock(&pwm_lock); ++ ++ list_for_each_entry(pwm, &pwm_list, node) { ++ if (pwm->pwm_id == pwm_id && pwm->use_count == 0) { ++ pwm->use_count++; ++ pwm->label = label; ++ found = 1; ++ break; ++ } ++ } ++ ++ mutex_unlock(&pwm_lock); ++ ++ return (found) ? pwm : NULL; ++} ++EXPORT_SYMBOL(pwm_request); ++ ++void pwm_free(struct pwm_device *pwm) ++{ ++ mutex_lock(&pwm_lock); ++ ++ if (pwm->use_count) { ++ pwm->use_count--; ++ pwm->label = NULL; ++ } else ++ dev_warn(pwm->dev, "PWM device already freed\n"); ++ ++ mutex_unlock(&pwm_lock); ++} ++EXPORT_SYMBOL(pwm_free); ++ ++int pwm_int_enable(struct pwm_device *pwm) ++{ ++ unsigned long conf; ++ ++ if (!pwm || !pwm->regs || !pwm->handler) ++ return -EINVAL; ++ ++ conf = readl(pwm->regs); ++ conf |= SM501PWM_I; ++ writel(conf, pwm->regs); ++ return 0; ++} ++EXPORT_SYMBOL(pwm_int_enable); ++ ++int pwm_int_disable(struct pwm_device *pwm) ++{ ++ unsigned long conf; ++ ++ if (!pwm || !pwm->regs || !pwm->handler) ++ return -EINVAL; ++ ++ conf = readl(pwm->regs); ++ conf &= ~SM501PWM_I; ++ writel(conf, pwm->regs); ++ return 0; ++} ++EXPORT_SYMBOL(pwm_int_disable); ++ ++int pwm_set_handler(struct pwm_device *pwm, ++ void (*handler)(struct pwm_device *pwm)) ++{ ++ if (!pwm || !handler) ++ return -EINVAL; ++ pwm->handler = handler; ++ return 0; ++} ++EXPORT_SYMBOL(pwm_set_handler); ++ ++static irqreturn_t sm501pwm_irq(int irq, void *dev_id) ++{ ++ unsigned long value; ++ struct sm501pwm_info *info = (struct sm501pwm_info *)dev_id; ++ struct pwm_device *pwm; ++ int i; ++ ++ value = sm501_modify_reg(info->dev->parent, SM501_IRQ_STATUS, 0, 0); ++ ++ /* Check is the interrupt is for us */ ++ if (value & (1<<22)) { ++ for (i = 0 ; i < PWM_COUNT ; i++) { ++ /* ++ * Find which pwm triggered the interrupt ++ * and ack ++ */ ++ value = readl(info->regs + i*4); ++ if (value & SM501PWM_IP) ++ writel(value | SM501PWM_IP, info->regs + i*4); ++ ++ pwm = &info->pwm[i]; ++ if (pwm->handler) ++ pwm->handler(pwm); ++ } ++ return IRQ_HANDLED; ++ } ++ ++ return IRQ_NONE; ++} ++ ++static void add_pwm(int id, struct sm501pwm_info *info) ++{ ++ struct pwm_device *pwm = &info->pwm[id]; ++ ++ pwm->use_count = 0; ++ pwm->pwm_id = id; ++ pwm->dev = info->dev; ++ pwm->regs = info->regs + id * 4; ++ ++ mutex_lock(&pwm_lock); ++ list_add_tail(&pwm->node, &pwm_list); ++ mutex_unlock(&pwm_lock); ++} ++ ++static void del_pwm(int id, struct sm501pwm_info *info) ++{ ++ struct pwm_device *pwm = &info->pwm[id]; ++ ++ pwm->use_count = 0; ++ pwm->pwm_id = -1; ++ mutex_lock(&pwm_lock); ++ list_del(&pwm->node); ++ mutex_unlock(&pwm_lock); ++} ++ ++/* Debug fs */ ++static int sm501pwm_show(struct seq_file *s, void *p) ++{ ++ struct pwm_device *pwm; ++ ++ mutex_lock(&pwm_lock); ++ list_for_each_entry(pwm, &pwm_list, node) { ++ if (pwm->use_count) { ++ seq_printf(s, "pwm-%d (%12s) %d %d %s\n", ++ pwm->pwm_id, pwm->label, ++ pwm->duty_ns, pwm->period_ns, ++ pwm->enabled ? "on" : "off"); ++ seq_printf(s, " %08x\n", readl(pwm->regs)); ++ } ++ } ++ mutex_unlock(&pwm_lock); ++ ++ return 0; ++} ++ ++static int sm501pwm_open(struct inode *inode, struct file *file) ++{ ++ return single_open(file, sm501pwm_show, inode->i_private); ++} ++ ++static const struct file_operations sm501pwm_fops = { ++ .open = sm501pwm_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .owner = THIS_MODULE, ++}; ++ ++static int __init sm501pwm_probe(struct platform_device *pdev) ++{ ++ struct sm501pwm_info *info; ++ struct device *dev = &pdev->dev; ++ struct resource *res; ++ int ret = 0; ++ int res_len; ++ int i; ++ ++ info = kzalloc(sizeof(struct sm501pwm_info), GFP_KERNEL); ++ if (!info) { ++ dev_err(dev, "Allocation failure\n"); ++ ret = -ENOMEM; ++ goto err; ++ } ++ info->dev = dev; ++ platform_set_drvdata(pdev, info); ++ ++ /* Get irq number */ ++ info->irq = platform_get_irq(pdev, 0); ++ if (!info->irq) { ++ dev_err(dev, "no irq found\n"); ++ ret = -ENODEV; ++ goto err_alloc; ++ } ++ ++ /* Get regs address */ ++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (res == NULL) { ++ dev_err(dev, "No memory resource found\n"); ++ ret = -ENODEV; ++ goto err_alloc; ++ } ++ info->res = res; ++ res_len = (res->end - res->start)+1; ++ ++ if (!request_mem_region(res->start, res_len, drv_name)) { ++ dev_err(dev, "Can't request iomem resource\n"); ++ ret = -EBUSY; ++ goto err_alloc; ++ } ++ ++ info->regs = ioremap(res->start, res_len); ++ if (!info->regs) { ++ dev_err(dev, "ioremap failed\n"); ++ ret = -ENOMEM; ++ goto err_mem; ++ } ++ ++ ret = request_irq(info->irq, sm501pwm_irq, IRQF_SHARED, drv_name, info); ++ if (ret != 0) { ++ dev_err(dev, "can't get irq\n"); ++ goto err_map; ++ } ++ ++ ++ sm501_unit_power(info->dev->parent, SM501_GATE_GPIO, 1); ++ ++ for (i = 0; i < 3; i++) ++ add_pwm(i, info); ++ ++ dev_info(dev, "SM501 PWM Found at %lx irq %d\n", ++ (unsigned long)info->res->start, info->irq); ++ ++ info->debugfs = debugfs_create_file("pwm", S_IFREG | S_IRUGO, ++ NULL, info, &sm501pwm_fops); ++ ++ ++ return 0; ++ ++err_map: ++ iounmap(info->regs); ++ ++err_mem: ++ release_mem_region(res->start, res_len); ++ ++err_alloc: ++ kfree(info); ++ platform_set_drvdata(pdev, NULL); ++err: ++ return ret; ++} ++ ++static int sm501pwm_remove(struct platform_device *pdev) ++{ ++ struct sm501pwm_info *info = platform_get_drvdata(pdev); ++ int i; ++ ++ if (info->debugfs) ++ debugfs_remove(info->debugfs); ++ ++ for (i = 0; i < 3; i++) { ++ pwm_disable(&info->pwm[i]); ++ del_pwm(i, info); ++ } ++ ++ sm501_unit_power(info->dev->parent, SM501_GATE_GPIO, 0); ++ sm501_modify_reg(info->dev->parent, SM501_IRQ_STATUS, 0, 1<<22); ++ ++ free_irq(info->irq, info); ++ iounmap(info->regs); ++ release_mem_region(info->res->start, ++ (info->res->end - info->res->start)+1); ++ kfree(info); ++ platform_set_drvdata(pdev, NULL); ++ ++ return 0; ++} ++ ++static struct platform_driver sm501pwm_driver = { ++ .probe = sm501pwm_probe, ++ .remove = sm501pwm_remove, ++ .driver = { ++ .name = drv_name, ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++static int __devinit sm501pwm_init(void) ++{ ++ return platform_driver_register(&sm501pwm_driver); ++} ++ ++static void __exit sm501pwm_cleanup(void) ++{ ++ platform_driver_unregister(&sm501pwm_driver); ++} ++ ++module_init(sm501pwm_init); ++module_exit(sm501pwm_cleanup); ++ ++MODULE_AUTHOR("Arnaud Patard "); ++MODULE_DESCRIPTION("SM501 PWM driver"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("platform:sm501-pwm"); +diff --git a/arch/mips/loongson/lemote-2f/Makefile b/arch/mips/loongson/lemote-2f/Makefile +index 4f9eaa3..f945bd7a 100644 +--- a/arch/mips/loongson/lemote-2f/Makefile ++++ b/arch/mips/loongson/lemote-2f/Makefile +@@ -2,7 +2,7 @@ + # Makefile for lemote loongson2f family machines + # + +-obj-y += clock.o machtype.o irq.o reset.o ec_kb3310b.o ++obj-y += clock.o machtype.o irq.o reset.o ec_kb3310b.o platform.o + + # + # Suspend Support +diff --git a/arch/mips/loongson/lemote-2f/irq.c b/arch/mips/loongson/lemote-2f/irq.c +index 6f8682e..2d54037 100644 +--- a/arch/mips/loongson/lemote-2f/irq.c ++++ b/arch/mips/loongson/lemote-2f/irq.c +@@ -11,9 +11,7 @@ + #include + #include + +-#include + #include +-#include + + #include + #include +@@ -117,11 +115,6 @@ void __init mach_init_irq(void) + LOONGSON_INTPOL = LOONGSON_INT_BIT_INT0 | LOONGSON_INT_BIT_INT1; + LOONGSON_INTEDGE &= ~(LOONGSON_INT_BIT_INT0 | LOONGSON_INT_BIT_INT1); + +- /* Sets the first-level interrupt dispatcher. */ +- mips_cpu_irq_init(); +- init_i8259_irqs(); +- bonito_irq_init(); +- + /* setup north bridge irq (bonito) */ + setup_irq(LOONGSON_NORTH_BRIDGE_IRQ, &ip6_irqaction); + /* setup source bridge irq (i8259) */ +diff --git a/arch/mips/loongson/lemote-2f/platform.c b/arch/mips/loongson/lemote-2f/platform.c +new file mode 100644 +index 0000000..5316360 +--- /dev/null ++++ b/arch/mips/loongson/lemote-2f/platform.c +@@ -0,0 +1,48 @@ ++/* ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin, wuzhangjin@gmail.com ++ * ++ * 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. ++ */ ++ ++#include ++#include ++ ++#include ++ ++static struct platform_device yeeloong_pdev = { ++ .name = "yeeloong_laptop", ++ .id = -1, ++}; ++ ++static struct platform_device lynloong_pdev = { ++ .name = "lynloong_pc", ++ .id = -1, ++}; ++ ++static int __init lemote2f_platform_init(void) ++{ ++ struct platform_device *pdev = NULL; ++ ++ switch (mips_machtype) { ++ case MACH_LEMOTE_YL2F89: ++ pdev = &yeeloong_pdev; ++ break; ++ case MACH_LEMOTE_LL2F: ++ pdev = &lynloong_pdev; ++ break; ++ default: ++ break; ++ ++ } ++ ++ if (pdev != NULL) ++ return platform_device_register(pdev); ++ ++ return -ENODEV; ++} ++ ++arch_initcall(lemote2f_platform_init); +diff --git a/arch/mips/loongson/lemote-2f/pm.c b/arch/mips/loongson/lemote-2f/pm.c +index cac4d38..2b6e0ef 100644 +--- a/arch/mips/loongson/lemote-2f/pm.c ++++ b/arch/mips/loongson/lemote-2f/pm.c +@@ -140,10 +140,10 @@ int wakeup_loongson(void) + + void __weak mach_suspend(void) + { +- disable_mfgpt0_counter(); ++ disable_mfgpt_counter(); + } + + void __weak mach_resume(void) + { +- enable_mfgpt0_counter(); ++ enable_mfgpt_counter(); + } +diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c +index 0b4e2e3..60fad2c 100644 +--- a/arch/mips/math-emu/cp1emu.c ++++ b/arch/mips/math-emu/cp1emu.c +@@ -7,6 +7,9 @@ + * Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com + * Copyright (C) 2000 MIPS Technologies, Inc. + * ++ * Loongson instruction support ++ * Copyright (C) 2011 Mark H Weaver ++ * + * This program is free software; you can distribute it and/or modify it + * under the terms of the GNU General Public License (Version 2) as + * published by the Free Software Foundation. +@@ -58,6 +61,14 @@ + #endif + #define __mips 4 + ++#ifdef __loongson_fp ++#undef __loongson_fp ++#endif ++#if __mips >= 4 && __mips != 32 ++/* Include support for Loongson floating point instructions */ ++#define __loongson_fp 1 ++#endif ++ + /* Function which emulates a floating point instruction. */ + + static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *, +@@ -67,6 +78,10 @@ static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *, + static int fpux_emu(struct pt_regs *, + struct mips_fpu_struct *, mips_instruction, void *__user *); + #endif ++#ifdef __loongson_fp ++static int loongson_spec2_emu(struct pt_regs *, ++ struct mips_fpu_struct *, mips_instruction, void *__user *); ++#endif + + /* Further private data for which no space exists in mips_fpu_struct */ + +@@ -896,6 +911,14 @@ static inline int cop1_64bit(struct pt_regs *xcp) + #define DPFROMREG(dp, x) DIFROMREG((dp).bits, x) + #define DPTOREG(dp, x) DITOREG((dp).bits, x) + ++/* Support for Loongson paired single floating-point format */ ++#define PSIFROMREG(si1, si2, x) ({ u64 di; DIFROMREG(di, x); \ ++ (si1) = (u32)di; (si2) = (u32)(di >> 32); }) ++#define PSITOREG(si1, si2, x) DITOREG((si1) | ((u64)(si2) << 32), x) ++ ++#define PSPFROMREG(sp1, sp2, x) PSIFROMREG((sp1).bits, (sp2).bits, x) ++#define PSPTOREG(sp1, sp2, x) PSITOREG((sp1).bits, (sp2).bits, x) ++ + /* + * Emulate the single floating point instruction pointed at by EPC. + * Two instructions if the instruction is in a branch delay slot. +@@ -1291,6 +1314,15 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + #endif + ++#ifdef __loongson_fp ++ case spec2_op:{ ++ int sig = loongson_spec2_emu(xcp, ctx, ir, fault_addr); ++ if (sig) ++ return sig; ++ break; ++ } ++#endif ++ + default: + sigill: + return SIGILL; +@@ -1370,6 +1402,172 @@ DEF3OP(msub, dp, ieee754dp_mul, ieee754dp_sub, ); + DEF3OP(nmadd, dp, ieee754dp_mul, ieee754dp_add, ieee754dp_neg); + DEF3OP(nmsub, dp, ieee754dp_mul, ieee754dp_sub, ieee754dp_neg); + ++#ifdef __loongson_fp ++static int loongson_spec2_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, ++ mips_instruction ir, void *__user *fault_addr) ++{ ++ int rfmt; /* resulting format */ ++ unsigned rcsr = 0; /* resulting csr */ ++ union { ++ ieee754dp d; ++ struct { ++ ieee754sp s; ++ ieee754sp s2; ++ }; ++ } rv; /* resulting value */ ++ ++ /* XXX maybe add a counter for loongson spec2 fp instructions? */ ++ /* MIPS_FPU_EMU_INC_STATS(cp1xops); */ ++ ++ switch (rfmt = (MIPSInst_FFMT(ir) & 0xf)) { ++ case s_fmt:{ ++ ieee754sp(*handler) (ieee754sp, ieee754sp, ieee754sp); ++ ieee754sp fd, fs, ft; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ case loongson_madd_op: ++ handler = fpemu_sp_madd; ++ goto scoptop; ++ case loongson_msub_op: ++ handler = fpemu_sp_msub; ++ goto scoptop; ++ case loongson_nmadd_op: ++ handler = fpemu_sp_nmadd; ++ goto scoptop; ++ case loongson_nmsub_op: ++ handler = fpemu_sp_nmsub; ++ goto scoptop; ++ ++ scoptop: ++ SPFROMREG(fd, MIPSInst_FD(ir)); ++ SPFROMREG(fs, MIPSInst_FS(ir)); ++ SPFROMREG(ft, MIPSInst_FT(ir)); ++ rv.s = (*handler) (fd, fs, ft); ++ ++ copcsr: ++ if (ieee754_cxtest(IEEE754_INEXACT)) ++ rcsr |= FPU_CSR_INE_X | FPU_CSR_INE_S; ++ if (ieee754_cxtest(IEEE754_UNDERFLOW)) ++ rcsr |= FPU_CSR_UDF_X | FPU_CSR_UDF_S; ++ if (ieee754_cxtest(IEEE754_OVERFLOW)) ++ rcsr |= FPU_CSR_OVF_X | FPU_CSR_OVF_S; ++ if (ieee754_cxtest(IEEE754_INVALID_OPERATION)) ++ rcsr |= FPU_CSR_INV_X | FPU_CSR_INV_S; ++ ++ break; ++ ++ default: ++ return SIGILL; ++ } ++ break; ++ } ++ ++ case d_fmt:{ ++ ieee754dp(*handler) (ieee754dp, ieee754dp, ieee754dp); ++ ieee754dp fd, fs, ft; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ case loongson_madd_op: ++ handler = fpemu_dp_madd; ++ goto dcoptop; ++ case loongson_msub_op: ++ handler = fpemu_dp_msub; ++ goto dcoptop; ++ case loongson_nmadd_op: ++ handler = fpemu_dp_nmadd; ++ goto dcoptop; ++ case loongson_nmsub_op: ++ handler = fpemu_dp_nmsub; ++ goto dcoptop; ++ ++ dcoptop: ++ DPFROMREG(fd, MIPSInst_FD(ir)); ++ DPFROMREG(fs, MIPSInst_FS(ir)); ++ DPFROMREG(ft, MIPSInst_FT(ir)); ++ rv.d = (*handler) (fd, fs, ft); ++ goto copcsr; ++ ++ default: ++ return SIGILL; ++ } ++ break; ++ } ++ ++ case ps_fmt:{ ++ ieee754sp(*handler) (ieee754sp, ieee754sp, ieee754sp); ++ struct _ieee754_csr ieee754_csr_save; ++ ieee754sp fd1, fs1, ft1; ++ ieee754sp fd2, fs2, ft2; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ case loongson_madd_op: ++ handler = fpemu_sp_madd; ++ goto pscoptop; ++ case loongson_msub_op: ++ handler = fpemu_sp_msub; ++ goto pscoptop; ++ case loongson_nmadd_op: ++ handler = fpemu_sp_nmadd; ++ goto pscoptop; ++ case loongson_nmsub_op: ++ handler = fpemu_sp_nmsub; ++ goto pscoptop; ++ ++ pscoptop: ++ PSPFROMREG(fd1, fd2, MIPSInst_FD(ir)); ++ PSPFROMREG(fs1, fs2, MIPSInst_FS(ir)); ++ PSPFROMREG(ft1, ft2, MIPSInst_FT(ir)); ++ rv.s = (*handler) (fd1, fs1, ft1); ++ ieee754_csr_save = ieee754_csr; ++ rv.s2 = (*handler) (fd2, fs2, ft2); ++ ieee754_csr.cx |= ieee754_csr_save.cx; ++ ieee754_csr.sx |= ieee754_csr_save.sx; ++ goto copcsr; ++ ++ default: ++ return SIGILL; ++ } ++ break; ++ } ++ ++ default: ++ return SIGILL; ++ } ++ ++ /* ++ * Update the fpu CSR register for this operation. ++ * If an exception is required, generate a tidy SIGFPE exception, ++ * without updating the result register. ++ * Note: cause exception bits do not accumulate, they are rewritten ++ * for each op; only the flag/sticky bits accumulate. ++ */ ++ ctx->fcr31 = (ctx->fcr31 & ~FPU_CSR_ALL_X) | rcsr; ++ if ((ctx->fcr31 >> 5) & ctx->fcr31 & FPU_CSR_ALL_E) { ++ /*printk ("SIGFPE: fpu csr = %08x\n",ctx->fcr31); */ ++ return SIGFPE; ++ } ++ ++ /* ++ * Now we can safely write the result back to the register file. ++ */ ++ switch (rfmt) { ++ case d_fmt: ++ DPTOREG(rv.d, MIPSInst_FD(ir)); ++ break; ++ case s_fmt: ++ SPTOREG(rv.s, MIPSInst_FD(ir)); ++ break; ++ case ps_fmt: ++ PSPTOREG(rv.s, rv.s2, MIPSInst_FD(ir)); ++ break; ++ default: ++ return SIGILL; ++ } ++ ++ return 0; ++} ++#endif ++ + static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + mips_instruction ir, void *__user *fault_addr) + { +@@ -1463,7 +1661,7 @@ static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + + default: +- return SIGILL; ++ goto SIGILL_unless_prefx_op; + } + break; + } +@@ -1533,7 +1731,7 @@ static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + goto copcsr; + + default: +- return SIGILL; ++ goto SIGILL_unless_prefx_op; + } + break; + } +@@ -1546,6 +1744,11 @@ static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + + default: ++ SIGILL_unless_prefx_op: ++ if (MIPSInst_FUNC(ir) == prefx_op) { ++ /* ignore prefx operation */ ++ break; ++ } + return SIGILL; + } + +@@ -1566,7 +1769,12 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + unsigned cond; + union { + ieee754dp d; +- ieee754sp s; ++ struct { ++ ieee754sp s; ++#ifdef __loongson_fp ++ ieee754sp s2; /* for Loongson paired singles */ ++#endif ++ }; + int w; + #ifdef __mips64 + s64 l; +@@ -1638,7 +1846,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + case fmov_op: + /* an easy one */ + SPFROMREG(rv.s, MIPSInst_FS(ir)); +- goto copcsr; ++ break; + + /* binary op on handler */ + scopbop: +@@ -1825,7 +2033,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + case fmov_op: + /* an easy one */ + DPFROMREG(rv.d, MIPSInst_FS(ir)); +- goto copcsr; ++ break; + + /* binary op on handler */ + dcopbop:{ +@@ -1936,6 +2144,83 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + } + ++#ifdef __loongson_fp ++ case ps_fmt:{ /* 6 */ ++ /* Support for Loongson paired single fp instructions */ ++ union { ++ ieee754sp(*b) (ieee754sp, ieee754sp); ++ ieee754sp(*u) (ieee754sp); ++ } handler; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ /* binary ops */ ++ case fadd_op: ++ handler.b = ieee754sp_add; ++ goto pscopbop; ++ case fsub_op: ++ handler.b = ieee754sp_sub; ++ goto pscopbop; ++ case fmul_op: ++ handler.b = ieee754sp_mul; ++ goto pscopbop; ++ ++ /* unary ops */ ++ case fabs_op: ++ handler.u = ieee754sp_abs; ++ goto pscopuop; ++ case fneg_op: ++ handler.u = ieee754sp_neg; ++ goto pscopuop; ++ case fmov_op: ++ /* an easy one */ ++ PSPFROMREG(rv.s, rv.s2, MIPSInst_FS(ir)); ++ break; ++ ++ pscopbop: /* paired binary op handler */ ++ { ++ struct _ieee754_csr ieee754_csr_save; ++ ieee754sp fs1, ft1; ++ ieee754sp fs2, ft2; ++ ++ PSPFROMREG(fs1, fs2, MIPSInst_FS(ir)); ++ PSPFROMREG(ft1, ft2, MIPSInst_FT(ir)); ++ rv.s = (*handler.b) (fs1, ft1); ++ ieee754_csr_save = ieee754_csr; ++ rv.s2 = (*handler.b) (fs2, ft2); ++ ieee754_csr.cx |= ieee754_csr_save.cx; ++ ieee754_csr.sx |= ieee754_csr_save.sx; ++ goto copcsr; ++ } ++ pscopuop: /* paired unary op handler */ ++ { ++ struct _ieee754_csr ieee754_csr_save; ++ ieee754sp fs1; ++ ieee754sp fs2; ++ ++ PSPFROMREG(fs1, fs2, MIPSInst_FS(ir)); ++ rv.s = (*handler.u) (fs1); ++ ieee754_csr_save = ieee754_csr; ++ rv.s2 = (*handler.u) (fs2); ++ ieee754_csr.cx |= ieee754_csr_save.cx; ++ ieee754_csr.sx |= ieee754_csr_save.sx; ++ goto copcsr; ++ } ++ break; ++ ++ default: ++ if (MIPSInst_FUNC(ir) >= fcmp_op) { ++ /* Loongson fp hardware handles all ++ cases of fp compare insns, so we ++ shouldn't have to */ ++ printk ("Loongson paired-single fp compare" ++ " unimplemented in cp1emu.c\n"); ++ } ++ return SIGILL; ++ } ++ break; ++ } ++#endif ++ + case w_fmt:{ + ieee754sp fs; + +@@ -2025,6 +2310,11 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + DITOREG(rv.l, MIPSInst_FD(ir)); + break; + #endif ++#ifdef __loongson_fp ++ case ps_fmt: ++ PSPTOREG(rv.s, rv.s2, MIPSInst_FD(ir)); ++ break; ++#endif + default: + return SIGILL; + } +diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c +index 44b6dff..e782fae 100644 +--- a/arch/mips/mm/dma-default.c ++++ b/arch/mips/mm/dma-default.c +@@ -336,7 +336,7 @@ int mips_dma_supported(struct device *dev, u64 mask) + return plat_dma_supported(dev, mask); + } + +-void dma_cache_sync(struct device *dev, void *vaddr, size_t size, ++void mips_dma_cache_sync(struct device *dev, void *vaddr, size_t size, + enum dma_data_direction direction) + { + BUG_ON(direction == DMA_NONE); +@@ -345,8 +345,6 @@ void dma_cache_sync(struct device *dev, void *vaddr, size_t size, + __dma_sync_virtual(vaddr, size, direction); + } + +-EXPORT_SYMBOL(dma_cache_sync); +- + static struct dma_map_ops mips_default_dma_map_ops = { + .alloc = mips_dma_alloc_coherent, + .free = mips_dma_free_coherent, +diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile +index 137f2a6..b9845dc 100644 +--- a/arch/mips/pci/Makefile ++++ b/arch/mips/pci/Makefile +@@ -29,6 +29,7 @@ obj-$(CONFIG_LASAT) += pci-lasat.o + obj-$(CONFIG_MIPS_COBALT) += fixup-cobalt.o + obj-$(CONFIG_LEMOTE_FULOONG2E) += fixup-fuloong2e.o ops-loongson2.o + obj-$(CONFIG_LEMOTE_MACH2F) += fixup-lemote2f.o ops-loongson2.o ++obj-$(CONFIG_DEXXON_GDIUM) += fixup-gdium.o ops-loongson2.o + obj-$(CONFIG_MIPS_MALTA) += fixup-malta.o pci-malta.o + obj-$(CONFIG_PMC_MSP7120_GW) += fixup-pmcmsp.o ops-pmcmsp.o + obj-$(CONFIG_PMC_MSP7120_EVAL) += fixup-pmcmsp.o ops-pmcmsp.o +diff --git a/arch/mips/pci/fixup-gdium.c b/arch/mips/pci/fixup-gdium.c +new file mode 100644 +index 0000000..b296220 +--- /dev/null ++++ b/arch/mips/pci/fixup-gdium.c +@@ -0,0 +1,90 @@ ++/* ++ * Copyright (C) 2010 yajin ++ * ++ * 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. ++ */ ++ ++#include ++#include ++ ++#include ++/* ++ * http://www.pcidatabase.com ++ * GDIUM has different PCI mapping ++ * slot 13 (0x1814/0x0301) -> RaLink rt2561 Wireless-G PCI ++ * slog 14 (0x126f/0x0501) -> sm501 ++ * slot 15 (0x1033/0x0035) -> NEC Dual OHCI controllers ++ * plus Single EHCI controller ++ * slot 16 (0x10ec/0x8139) -> Realtek 8139c ++ * slot 17 (0x1033/0x00e0) -> NEC USB 2.0 Host Controller ++ */ ++ ++#undef INT_IRQA ++#undef INT_IRQB ++#undef INT_IRQC ++#undef INT_IRQD ++#define INT_IRQA 36 ++#define INT_IRQB 37 ++#define INT_IRQC 38 ++#define INT_IRQD 39 ++ ++int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) ++{ ++ int irq = 0; ++ ++ switch (slot) { ++ case 13: ++ irq = INT_IRQC + ((pin - 1) & 3); ++ break; ++ case 14: ++ irq = INT_IRQA; ++ break; ++ case 15: ++#if CONFIG_GDIUM_VERSION > 2 ++ irq = INT_IRQB; ++#else ++ irq = INT_IRQA + ((pin - 1) & 3); ++#endif ++ break; ++ case 16: ++ irq = INT_IRQD; ++ break; ++#if CONFIG_GDIUM_VERSION > 2 ++ case 17: ++ irq = INT_IRQC; ++ break; ++#endif ++ default: ++ pr_info(" strange pci slot number %d on gdium.\n", slot); ++ break; ++ } ++ return irq; ++} ++ ++/* Do platform specific device initialization at pci_enable_device() time */ ++int pcibios_plat_dev_init(struct pci_dev *dev) ++{ ++ return 0; ++} ++ ++/* Fixups for the USB host controllers */ ++static void __init gdium_usb_host_fixup(struct pci_dev *dev) ++{ ++ unsigned int val; ++ pci_read_config_dword(dev, 0xe0, &val); ++#if CONFIG_GDIUM_VERSION > 2 ++ pci_write_config_dword(dev, 0xe0, (val & ~3) | 0x3); ++#else ++ pci_write_config_dword(dev, 0xe0, (val & ~7) | 0x5); ++ pci_write_config_dword(dev, 0xe4, 1<<5); ++#endif ++} ++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_USB, ++ gdium_usb_host_fixup); ++#if CONFIG_GDIUM_VERSION > 2 ++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_CT_65550, ++ gdium_usb_host_fixup); ++#endif +diff --git a/arch/mips/power/hibernate.S b/arch/mips/power/hibernate.S +index 32a7c82..7e0277a 100644 +--- a/arch/mips/power/hibernate.S ++++ b/arch/mips/power/hibernate.S +@@ -43,7 +43,6 @@ LEAF(swsusp_arch_resume) + bne t1, t3, 1b + PTR_L t0, PBE_NEXT(t0) + bnez t0, 0b +- jal local_flush_tlb_all /* Avoid TLB mismatch after kernel resume */ + PTR_LA t0, saved_regs + PTR_L ra, PT_R31(t0) + PTR_L sp, PT_R29(t0) +diff --git a/drivers/ata/pata_cs5536.c b/drivers/ata/pata_cs5536.c +index 0448860..fa7cfab 100644 +--- a/drivers/ata/pata_cs5536.c ++++ b/drivers/ata/pata_cs5536.c +@@ -46,8 +46,6 @@ static int use_msr; + module_param_named(msr, use_msr, int, 0644); + MODULE_PARM_DESC(msr, "Force using MSR to configure IDE function (Default: 0)"); + #else +-#undef rdmsr /* avoid accidental MSR usage on, e.g. x86-64 */ +-#undef wrmsr + #define rdmsr(x, y, z) do { } while (0) + #define wrmsr(x, y, z) do { } while (0) + #define use_msr 0 +diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig +index f722001..5af02de 100644 +--- a/drivers/hid/Kconfig ++++ b/drivers/hid/Kconfig +@@ -786,6 +786,13 @@ config HID_ZYDACRON + ---help--- + Support for Zydacron remote control. + ++config HID_GDIUM ++ bool "Gdium Fn keys support" if EMBEDDED ++ depends on USB_HID && DEXXON_GDIUM ++ default !EMBEDDED ++ ---help--- ++ Support for Functions keys available on Gdiums. ++ + config HID_SENSOR_HUB + tristate "HID Sensors framework support" + depends on HID +diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile +index 30e4431..e41ca68 100644 +--- a/drivers/hid/Makefile ++++ b/drivers/hid/Makefile +@@ -115,6 +115,7 @@ obj-$(CONFIG_HID_ZEROPLUS) += hid-zpff.o + obj-$(CONFIG_HID_ZYDACRON) += hid-zydacron.o + obj-$(CONFIG_HID_WACOM) += hid-wacom.o + obj-$(CONFIG_HID_WALTOP) += hid-waltop.o ++obj-$(CONFIG_HID_GDIUM) += hid-gdium.o + obj-$(CONFIG_HID_WIIMOTE) += hid-wiimote.o + obj-$(CONFIG_HID_SENSOR_HUB) += hid-sensor-hub.o + +diff --git a/drivers/hid/hid-gdium.c b/drivers/hid/hid-gdium.c +new file mode 100644 +index 0000000..67cc095 +--- /dev/null ++++ b/drivers/hid/hid-gdium.c +@@ -0,0 +1,210 @@ ++/* ++ * hid-gdium -- Gdium laptop function keys ++ * ++ * Arnaud Patard ++ * ++ * Based on hid-apple.c ++ * ++ * 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. ++ */ ++ ++ ++#include ++#include ++#include ++#include ++ ++#include "hid-ids.h" ++ ++#define GDIUM_FN_ON 1 ++ ++static int fnmode = GDIUM_FN_ON; ++module_param(fnmode, int, 0644); ++MODULE_PARM_DESC(fnmode, "Mode of fn key on Gdium (0 = disabled, 1 = Enabled)"); ++ ++struct gdium_data { ++ unsigned int fn_on; ++}; ++ ++ ++struct gdium_key_translation { ++ u16 from; ++ u16 to; ++}; ++ ++static struct gdium_key_translation gdium_fn_keys[] = { ++ { KEY_F1, KEY_CAMERA }, ++ { KEY_F2, KEY_CONNECT }, ++ { KEY_F3, KEY_MUTE }, ++ { KEY_F4, KEY_VOLUMEUP}, ++ { KEY_F5, KEY_VOLUMEDOWN }, ++ { KEY_F6, KEY_SWITCHVIDEOMODE }, ++ { KEY_F7, KEY_F19 }, /* F7+12. Have to use existant keycodes */ ++ { KEY_F8, KEY_BRIGHTNESSUP }, ++ { KEY_F9, KEY_BRIGHTNESSDOWN }, ++ { KEY_F10, KEY_SLEEP }, ++ { KEY_F11, KEY_PROG1 }, ++ { KEY_F12, KEY_PROG2 }, ++ { KEY_UP, KEY_PAGEUP }, ++ { KEY_DOWN, KEY_PAGEDOWN }, ++ { KEY_INSERT, KEY_NUMLOCK }, ++ { KEY_DELETE, KEY_SCROLLLOCK }, ++ { KEY_T, KEY_STOPCD }, ++ { KEY_F, KEY_PREVIOUSSONG }, ++ { KEY_H, KEY_NEXTSONG }, ++ { KEY_G, KEY_PLAYPAUSE }, ++ { } ++}; ++ ++static struct gdium_key_translation *gdium_find_translation( ++ struct gdium_key_translation *table, u16 from) ++{ ++ struct gdium_key_translation *trans; ++ ++ /* Look for the translation */ ++ for (trans = table; trans->from; trans++) ++ if (trans->from == from) ++ return trans; ++ return NULL; ++} ++ ++static int hidinput_gdium_event(struct hid_device *hid, struct input_dev *input, ++ struct hid_usage *usage, __s32 value) ++{ ++ struct gdium_data *data = hid_get_drvdata(hid); ++ struct gdium_key_translation *trans; ++ int do_translate; ++ ++ if (usage->type != EV_KEY) ++ return 0; ++ ++ if ((usage->code == KEY_FN)) { ++ data->fn_on = !!value; ++ input_event(input, usage->type, usage->code, value); ++ return 1; ++ } ++ ++ if (fnmode) { ++ trans = gdium_find_translation(gdium_fn_keys, usage->code); ++ if (trans) { ++ do_translate = data->fn_on; ++ if (do_translate) { ++ input_event(input, usage->type, trans->to, value); ++ return 1; ++ } ++ } ++ } ++ ++ return 0; ++} ++ ++static int gdium_input_event(struct hid_device *hdev, struct hid_field *field, ++ struct hid_usage *usage, __s32 value) ++{ ++ if (!(hdev->claimed & HID_CLAIMED_INPUT) || !field->hidinput || !usage->type) ++ return 0; ++ ++ if (hidinput_gdium_event(hdev, field->hidinput->input, usage, value)) ++ return 1; ++ ++ return 0; ++} ++ ++ ++static void gdium_input_setup(struct input_dev *input) ++{ ++ struct gdium_key_translation *trans; ++ ++ set_bit(KEY_NUMLOCK, input->keybit); ++ ++ /* Enable all needed keys */ ++ for (trans = gdium_fn_keys; trans->from; trans++) ++ set_bit(trans->to, input->keybit); ++} ++ ++static int gdium_input_mapping(struct hid_device *hdev, struct hid_input *hi, ++ struct hid_field *field, struct hid_usage *usage, ++ unsigned long **bit, int *max) ++{ ++ if (((usage->hid & HID_USAGE_PAGE) == HID_UP_KEYBOARD) ++ && ((usage->hid & HID_USAGE) == 0x82)) { ++ hid_map_usage_clear(hi, usage, bit, max, EV_KEY, KEY_FN); ++ gdium_input_setup(hi->input); ++ return 1; ++ } ++ return 0; ++} ++ ++static int gdium_input_probe(struct hid_device *hdev, const struct hid_device_id *id) ++{ ++ struct gdium_data *data; ++ int ret; ++ ++ data = kzalloc(sizeof(*data), GFP_KERNEL); ++ if (!data) { ++ dev_err(&hdev->dev, "can't alloc gdium keyboard data\n"); ++ return -ENOMEM; ++ } ++ ++ hid_set_drvdata(hdev, data); ++ ++ ret = hid_parse(hdev); ++ if (ret) { ++ dev_err(&hdev->dev, "parse failed\n"); ++ goto err_free; ++ } ++ ++ ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); ++ if (ret) { ++ dev_err(&hdev->dev, "hw start failed\n"); ++ goto err_free; ++ } ++ ++ return 0; ++err_free: ++ kfree(data); ++ return ret; ++} ++static void gdium_input_remove(struct hid_device *hdev) ++{ ++ hid_hw_stop(hdev); ++ kfree(hid_get_drvdata(hdev)); ++} ++ ++static const struct hid_device_id gdium_input_devices[] = { ++ { HID_USB_DEVICE(USB_VENDOR_ID_GDIUM, USB_DEVICE_ID_GDIUM) }, ++ {} ++}; ++MODULE_DEVICE_TABLE(hid, gdium_input_devices); ++ ++static struct hid_driver gdium_input_driver = { ++ .name = "gdium-fnkeys", ++ .id_table = gdium_input_devices, ++ .probe = gdium_input_probe, ++ .remove = gdium_input_remove, ++ .event = gdium_input_event, ++ .input_mapping = gdium_input_mapping, ++}; ++ ++static int gdium_input_init(void) ++{ ++ int ret; ++ ++ ret = hid_register_driver(&gdium_input_driver); ++ if (ret) ++ pr_err("can't register gdium keyboard driver\n"); ++ ++ return ret; ++} ++static void gdium_input_exit(void) ++{ ++ hid_unregister_driver(&gdium_input_driver); ++} ++ ++module_init(gdium_input_init); ++module_exit(gdium_input_exit); ++MODULE_LICENSE("GPL"); ++ +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h +index 6e12cd0..1ce18ed 100644 +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -956,6 +956,9 @@ + #define USB_VENDOR_ID_ZYTRONIC 0x14c8 + #define USB_DEVICE_ID_ZYTRONIC_ZXY100 0x0005 + ++#define USB_VENDOR_ID_GDIUM 0x04B4 ++#define USB_DEVICE_ID_GDIUM 0xe001 ++ + #define USB_VENDOR_ID_PRIMAX 0x0461 + #define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05 + +diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig +index c5eec02..9e4eb1d 100644 +--- a/drivers/i2c/busses/Kconfig ++++ b/drivers/i2c/busses/Kconfig +@@ -1002,7 +1002,7 @@ config SCx200_I2C_SDA + + config SCx200_ACB + tristate "Geode ACCESS.bus support" +- depends on X86_32 && PCI ++ depends on PCI + help + Enable the use of the ACCESS.bus controllers on the Geode SCx200 and + SC1100 processors and the CS5535 and CS5536 Geode companion devices. +diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c +index 376f2dc..b576801 100644 +--- a/drivers/ide/ide-iops.c ++++ b/drivers/ide/ide-iops.c +@@ -27,6 +27,10 @@ + #include + #include + ++#ifdef CONFIG_LEMOTE_MACH2F ++#include ++#endif ++ + void SELECT_MASK(ide_drive_t *drive, int mask) + { + const struct ide_port_ops *port_ops = drive->hwif->port_ops; +@@ -300,6 +304,11 @@ void ide_check_nien_quirk_list(ide_drive_t *drive) + { + const char **list, *m = (char *)&drive->id[ATA_ID_PROD]; + ++#ifdef CONFIG_LEMOTE_MACH2F ++ if (mips_machtype != MACH_LEMOTE_YL2F89) ++ return; ++#endif ++ + for (list = nien_quirk_list; *list != NULL; list++) + if (strstr(m, *list) != NULL) { + drive->dev_flags |= IDE_DFLAG_NIEN_QUIRK; +diff --git a/drivers/mfd/sm501.c b/drivers/mfd/sm501.c +index e7dc441..124e8c3 100644 +--- a/drivers/mfd/sm501.c ++++ b/drivers/mfd/sm501.c +@@ -58,7 +58,7 @@ struct sm501_gpio { + struct sm501_gpio { + /* no gpio support, empty definition for sm501_devdata. */ + }; +-#endif ++#endif /* CONFIG_MFD_SM501_GPIO */ + + struct sm501_devdata { + spinlock_t reg_lock; +@@ -1135,6 +1135,22 @@ static inline int sm501_gpio_isregistered(struct sm501_devdata *sm) + { + return sm->gpio.registered; + } ++ ++void sm501_configure_gpio(struct device *dev, unsigned int gpio, unsigned ++ char mode) ++{ ++ unsigned long set, reg, offset = gpio; ++ ++ if (offset >= 32) { ++ reg = SM501_GPIO63_32_CONTROL; ++ offset = gpio - 32; ++ } else ++ reg = SM501_GPIO31_0_CONTROL; ++ ++ set = mode ? 1 << offset : 0; ++ ++ sm501_modify_reg(dev, reg, set, 0); ++} + #else + static inline int sm501_register_gpio(struct sm501_devdata *sm) + { +@@ -1154,7 +1170,13 @@ static inline int sm501_gpio_isregistered(struct sm501_devdata *sm) + { + return 0; + } +-#endif ++ ++void sm501_configure_gpio(struct device *dev, unsigned int gpio, ++ unsigned char mode) ++{ ++} ++#endif /* CONFIG_MFD_SM501_GPIO */ ++EXPORT_SYMBOL_GPL(sm501_configure_gpio); + + static int sm501_register_gpio_i2c_instance(struct sm501_devdata *sm, + struct sm501_platdata_gpio_i2c *iic) +@@ -1209,6 +1231,20 @@ static int sm501_register_gpio_i2c(struct sm501_devdata *sm, + return 0; + } + ++/* register sm501 PWM device */ ++static int sm501_register_pwm(struct sm501_devdata *sm) ++{ ++ struct platform_device *pdev; ++ ++ pdev = sm501_create_subdev(sm, "sm501-pwm", 2, 0); ++ if (!pdev) ++ return -ENOMEM; ++ sm501_create_subio(sm, &pdev->resource[0], 0x10020, 0xC); ++ sm501_create_irq(sm, &pdev->resource[1]); ++ ++ return sm501_register_device(sm, pdev); ++} ++ + /* sm501_dbg_regs + * + * Debug attribute to attach to parent device to show core registers +@@ -1367,6 +1403,8 @@ static int sm501_init_dev(struct sm501_devdata *sm) + sm501_register_uart(sm, idata->devices); + if (idata->devices & SM501_USE_GPIO) + sm501_register_gpio(sm); ++ if (idata->devices & SM501_USE_PWM) ++ sm501_register_pwm(sm); + } + + if (pdata && pdata->gpio_i2c != NULL && pdata->gpio_i2c_nr > 0) { +@@ -1553,10 +1591,15 @@ static struct sm501_initdata sm501_pci_initdata = { + .devices = SM501_USE_ALL, + + /* Errata AB-3 says that 72MHz is the fastest available +- * for 33MHZ PCI with proper bus-mastering operation */ +- ++ * for 33MHZ PCI with proper bus-mastering operation ++ * For gdium, it works under 84&112M clock freq.*/ ++#ifdef CONFIG_DEXXON_GDIUM ++ .mclk = 84 * MHZ, ++ .m1xclk = 112 * MHZ, ++#else + .mclk = 72 * MHZ, + .m1xclk = 144 * MHZ, ++#endif + }; + + static struct sm501_platdata_fbsub sm501_pdata_fbsub = { +diff --git a/drivers/net/titan_ge.c b/drivers/net/titan_ge.c +new file mode 100644 +index 0000000..dc137bf8 +--- /dev/null ++++ b/drivers/net/titan_ge.c +@@ -0,0 +1,2069 @@ ++/* ++ * drivers/net/titan_ge.c - Driver for Titan ethernet ports ++ * ++ * Copyright (C) 2003 PMC-Sierra Inc. ++ * Author : Manish Lachwani (lachwani@pmc-sierra.com) ++ * ++ * 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. ++ */ ++ ++/* ++ * The MAC unit of the Titan consists of the following: ++ * ++ * -> XDMA Engine to move data to from the memory to the MAC packet FIFO ++ * -> FIFO is where the incoming and outgoing data is placed ++ * -> TRTG is the unit that pulls the data from the FIFO for Tx and pushes ++ * the data into the FIFO for Rx ++ * -> TMAC is the outgoing MAC interface and RMAC is the incoming. ++ * -> AFX is the address filtering block ++ * -> GMII block to communicate with the PHY ++ * ++ * Rx will look like the following: ++ * GMII --> RMAC --> AFX --> TRTG --> Rx FIFO --> XDMA --> CPU memory ++ * ++ * Tx will look like the following: ++ * CPU memory --> XDMA --> Tx FIFO --> TRTG --> TMAC --> GMII ++ * ++ * The Titan driver has support for the following performance features: ++ * -> Rx side checksumming ++ * -> Jumbo Frames ++ * -> Interrupt Coalscing ++ * -> Rx NAPI ++ * -> SKB Recycling ++ * -> Transmit/Receive descriptors in SRAM ++ * -> Fast routing for IP forwarding ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* For MII specifc registers, titan_mdio.h should be included */ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "titan_ge.h" ++#include "titan_mdio.h" ++ ++/* Static Function Declarations */ ++static int titan_ge_eth_open(struct net_device *); ++static void titan_ge_eth_stop(struct net_device *); ++static struct net_device_stats *titan_ge_get_stats(struct net_device *); ++static int titan_ge_init_rx_desc_ring(titan_ge_port_info *, int, int, ++ unsigned long, unsigned long, ++ unsigned long); ++static int titan_ge_init_tx_desc_ring(titan_ge_port_info *, int, ++ unsigned long, unsigned long); ++ ++static int titan_ge_open(struct net_device *); ++static int titan_ge_start_xmit(struct sk_buff *, struct net_device *); ++static int titan_ge_stop(struct net_device *); ++ ++static unsigned long titan_ge_tx_coal(unsigned long, int); ++ ++static void titan_ge_port_reset(unsigned int); ++static int titan_ge_free_tx_queue(titan_ge_port_info *); ++static int titan_ge_rx_task(struct net_device *, titan_ge_port_info *); ++static int titan_ge_port_start(struct net_device *, titan_ge_port_info *); ++ ++static int titan_ge_return_tx_desc(titan_ge_port_info *, int); ++ ++/* ++ * Some configuration for the FIFO and the XDMA channel needs ++ * to be done only once for all the ports. This flag controls ++ * that ++ */ ++static unsigned long config_done; ++ ++/* ++ * One time out of memory flag ++ */ ++static unsigned int oom_flag; ++ ++static int titan_ge_poll(struct net_device *netdev, int *budget); ++ ++static int titan_ge_receive_queue(struct net_device *, unsigned int); ++ ++static struct platform_device *titan_ge_device[3]; ++ ++/* MAC Address */ ++extern unsigned char titan_ge_mac_addr_base[6]; ++ ++unsigned long titan_ge_base; ++static unsigned long titan_ge_sram; ++ ++static char titan_string[] = "titan"; ++ ++/* ++ * The Titan GE has two alignment requirements: ++ * -> skb->data to be cacheline aligned (32 byte) ++ * -> IP header alignment to 16 bytes ++ * ++ * The latter is not implemented. So, that results in an extra copy on ++ * the Rx. This is a big performance hog. For the former case, the ++ * dev_alloc_skb() has been replaced with titan_ge_alloc_skb(). The size ++ * requested is calculated: ++ * ++ * Ethernet Frame Size : 1518 ++ * Ethernet Header : 14 ++ * Future Titan change for IP header alignment : 2 ++ * ++ * Hence, we allocate (1518 + 14 + 2+ 64) = 1580 bytes. For IP header ++ * alignment, we use skb_reserve(). ++ */ ++ ++#define ALIGNED_RX_SKB_ADDR(addr) \ ++ ((((unsigned long)(addr) + (64UL - 1UL)) \ ++ & ~(64UL - 1UL)) - (unsigned long)(addr)) ++ ++#define titan_ge_alloc_skb(__length, __gfp_flags) \ ++({ struct sk_buff *__skb; \ ++ __skb = alloc_skb((__length) + 64, (__gfp_flags)); \ ++ if(__skb) { \ ++ int __offset = (int) ALIGNED_RX_SKB_ADDR(__skb->data); \ ++ if(__offset) \ ++ skb_reserve(__skb, __offset); \ ++ } \ ++ __skb; \ ++}) ++ ++/* ++ * Configure the GMII block of the Titan based on what the PHY tells us ++ */ ++static void titan_ge_gmii_config(int port_num) ++{ ++ unsigned int reg_data = 0, phy_reg; ++ int err; ++ ++ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg); ++ ++ if (err == TITAN_GE_MDIO_ERROR) { ++ printk(KERN_ERR ++ "Could not read PHY control register 0x11 \n"); ++ printk(KERN_ERR ++ "Setting speed to 1000 Mbps and Duplex to Full \n"); ++ ++ return; ++ } ++ ++ err = titan_ge_mdio_write(port_num, TITAN_GE_MDIO_PHY_IE, 0); ++ ++ if (phy_reg & 0x8000) { ++ if (phy_reg & 0x2000) { ++ /* Full Duplex and 1000 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x201); ++ } else { ++ /* Half Duplex and 1000 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x2201); ++ } ++ } ++ if (phy_reg & 0x4000) { ++ if (phy_reg & 0x2000) { ++ /* Full Duplex and 100 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x100); ++ } else { ++ /* Half Duplex and 100 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x2100); ++ } ++ } ++ reg_data = TITAN_GE_READ(TITAN_GE_GMII_CONFIG_GENERAL + ++ (port_num << 12)); ++ reg_data |= 0x3; ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_GENERAL + ++ (port_num << 12)), reg_data); ++} ++ ++/* ++ * Enable the TMAC if it is not ++ */ ++static void titan_ge_enable_tx(unsigned int port_num) ++{ ++ unsigned long reg_data; ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)); ++ if (!(reg_data & 0x8000)) { ++ printk("TMAC disabled for port %d!! \n", port_num); ++ ++ reg_data |= 0x0001; /* Enable TMAC */ ++ reg_data |= 0x4000; /* CRC Check Enable */ ++ reg_data |= 0x2000; /* Padding enable */ ++ reg_data |= 0x0800; /* CRC Add enable */ ++ reg_data |= 0x0080; /* PAUSE frame */ ++ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ } ++} ++ ++/* ++ * Tx Timeout function ++ */ ++static void titan_ge_tx_timeout(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ printk(KERN_INFO "%s: TX timeout ", netdev->name); ++ printk(KERN_INFO "Resetting card \n"); ++ ++ /* Do the reset outside of interrupt context */ ++ schedule_work(&titan_ge_eth->tx_timeout_task); ++} ++ ++/* ++ * Update the AFX tables for UC and MC for slice 0 only ++ */ ++static void titan_ge_update_afx(titan_ge_port_info * titan_ge_eth) ++{ ++ int port = titan_ge_eth->port_num; ++ unsigned int i; ++ volatile unsigned long reg_data = 0; ++ u8 p_addr[6]; ++ ++ memcpy(p_addr, titan_ge_eth->port_mac_addr, 6); ++ ++ /* Set the MAC address here for TMAC and RMAC */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((0x112c | (port << 12)), 0x1); ++ /* Configure the eight address filters */ ++ for (i = 0; i < 8; i++) { ++ /* Select each of the eight filters */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 + ++ (port << 12)), i); ++ ++ /* Configure the match */ ++ reg_data = 0x9; /* Forward Enable Bit */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 + ++ (port << 12)), reg_data); ++ ++ /* Finally, AFX Exact Match Address Registers */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_HIGH + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ ++ /* VLAN id set to 0 */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_VID + ++ (port << 12)), 0); ++ } ++} ++ ++/* ++ * Actual Routine to reset the adapter when the timeout occurred ++ */ ++static void titan_ge_tx_timeout_task(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ int port = titan_ge_eth->port_num; ++ ++ printk("Titan GE: Transmit timed out. Resetting ... \n"); ++ ++ /* Dump debug info */ ++ printk(KERN_ERR "TRTG cause : %x \n", ++ TITAN_GE_READ(0x100c + (port << 12))); ++ ++ /* Fix this for the other ports */ ++ printk(KERN_ERR "FIFO cause : %x \n", TITAN_GE_READ(0x482c)); ++ printk(KERN_ERR "IE cause : %x \n", TITAN_GE_READ(0x0040)); ++ printk(KERN_ERR "XDMA GDI ERROR : %x \n", ++ TITAN_GE_READ(0x5008 + (port << 8))); ++ printk(KERN_ERR "CHANNEL ERROR: %x \n", ++ TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT ++ + (port << 8))); ++ ++ netif_device_detach(netdev); ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ titan_ge_port_start(netdev, titan_ge_eth); ++ netif_device_attach(netdev); ++} ++ ++/* ++ * Change the MTU of the Ethernet Device ++ */ ++static int titan_ge_change_mtu(struct net_device *netdev, int new_mtu) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned long flags; ++ ++ if ((new_mtu > 9500) || (new_mtu < 64)) ++ return -EINVAL; ++ ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ netdev->mtu = new_mtu; ++ ++ /* Now we have to reopen the interface so that SKBs with the new ++ * size will be allocated */ ++ ++ if (netif_running(netdev)) { ++ titan_ge_eth_stop(netdev); ++ ++ if (titan_ge_eth_open(netdev) != TITAN_OK) { ++ printk(KERN_ERR ++ "%s: Fatal error on opening device\n", ++ netdev->name); ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ return -1; ++ } ++ } ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ return 0; ++} ++ ++/* ++ * Titan Gbe Interrupt Handler. All the three ports send interrupt to one line ++ * only. Once an interrupt is triggered, figure out the port and then check ++ * the channel. ++ */ ++static irqreturn_t titan_ge_int_handler(int irq, void *dev_id) ++{ ++ struct net_device *netdev = (struct net_device *) dev_id; ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int reg_data; ++ unsigned int eth_int_cause_error = 0, is; ++ unsigned long eth_int_cause1; ++ int err = 0; ++#ifdef CONFIG_SMP ++ unsigned long eth_int_cause2; ++#endif ++ ++ /* Ack the CPU interrupt */ ++ switch (port_num) { ++ case 0: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS1); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR1, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS1); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR1, is); ++#endif ++ break; ++ ++ case 1: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS0); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR0, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS0); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR0, is); ++#endif ++ break; ++ ++ case 2: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS4); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR4, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS4); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR4, is); ++#endif ++ } ++ ++ eth_int_cause1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A); ++#ifdef CONFIG_SMP ++ eth_int_cause2 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_B); ++#endif ++ ++ /* Spurious interrupt */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 == 0) && (eth_int_cause2 == 0)) { ++#else ++ if (eth_int_cause1 == 0) { ++#endif ++ eth_int_cause_error = TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT + ++ (port_num << 8)); ++ ++ if (eth_int_cause_error == 0) ++ return IRQ_NONE; ++ } ++ ++ /* Handle Tx first. No need to ack interrupts */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 & 0x20202) || ++ (eth_int_cause2 & 0x20202) ) ++#else ++ if (eth_int_cause1 & 0x20202) ++#endif ++ titan_ge_free_tx_queue(titan_ge_eth); ++ ++ /* Handle the Rx next */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 & 0x10101) || ++ (eth_int_cause2 & 0x10101)) { ++#else ++ if (eth_int_cause1 & 0x10101) { ++#endif ++ if (netif_rx_schedule_prep(netdev)) { ++ unsigned int ack; ++ ++ ack = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ /* Disable Tx and Rx both */ ++ if (port_num == 0) ++ ack &= ~(0x3); ++ if (port_num == 1) ++ ack &= ~(0x300); ++ ++ if (port_num == 2) ++ ack &= ~(0x30000); ++ ++ /* Interrupts have been disabled */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, ack); ++ ++ __netif_rx_schedule(netdev); ++ } ++ } ++ ++ /* Handle error interrupts */ ++ if (eth_int_cause_error && (eth_int_cause_error != 0x2)) { ++ printk(KERN_ERR ++ "XDMA Channel Error : %x on port %d\n", ++ eth_int_cause_error, port_num); ++ ++ printk(KERN_ERR ++ "XDMA GDI Hardware error : %x on port %d\n", ++ TITAN_GE_READ(0x5008 + (port_num << 8)), port_num); ++ ++ printk(KERN_ERR ++ "XDMA currently has %d Rx descriptors \n", ++ TITAN_GE_READ(0x5048 + (port_num << 8))); ++ ++ printk(KERN_ERR ++ "XDMA currently has prefetcted %d Rx descriptors \n", ++ TITAN_GE_READ(0x505c + (port_num << 8))); ++ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT + ++ (port_num << 8)), eth_int_cause_error); ++ } ++ ++ /* ++ * PHY interrupt to inform abt the changes. Reading the ++ * PHY Status register will clear the interrupt ++ */ ++ if ((!(eth_int_cause1 & 0x30303)) && ++ (eth_int_cause_error == 0)) { ++ err = ++ titan_ge_mdio_read(port_num, ++ TITAN_GE_MDIO_PHY_IS, ®_data); ++ ++ if (reg_data & 0x0400) { ++ /* Link status change */ ++ titan_ge_mdio_read(port_num, ++ TITAN_GE_MDIO_PHY_STATUS, ®_data); ++ if (!(reg_data & 0x0400)) { ++ /* Link is down */ ++ netif_carrier_off(netdev); ++ netif_stop_queue(netdev); ++ } else { ++ /* Link is up */ ++ netif_carrier_on(netdev); ++ netif_wake_queue(netdev); ++ ++ /* Enable the queue */ ++ titan_ge_enable_tx(port_num); ++ } ++ } ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++/* ++ * Multicast and Promiscuous mode set. The ++ * set_multi entry point is called whenever the ++ * multicast address list or the network interface ++ * flags are updated. ++ */ ++static void titan_ge_set_multi(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned long reg_data; ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 + ++ (port_num << 12)); ++ ++ if (netdev->flags & IFF_PROMISC) { ++ reg_data |= 0x2; ++ } ++ else if (netdev->flags & IFF_ALLMULTI) { ++ reg_data |= 0x01; ++ reg_data |= 0x400; /* Use the 64-bit Multicast Hash bin */ ++ } ++ else { ++ reg_data = 0x2; ++ } ++ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 + ++ (port_num << 12)), reg_data); ++ if (reg_data & 0x01) { ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_LOW + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDLOW + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDHI + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_HI + ++ (port_num << 12)), 0xffff); ++ } ++} ++ ++/* ++ * Open the network device ++ */ ++static int titan_ge_open(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int irq = TITAN_ETH_PORT_IRQ - port_num; ++ int retval; ++ ++ retval = request_irq(irq, titan_ge_int_handler, ++ SA_INTERRUPT | SA_SAMPLE_RANDOM , netdev->name, netdev); ++ ++ if (retval != 0) { ++ printk(KERN_ERR "Cannot assign IRQ number to TITAN GE \n"); ++ return -1; ++ } ++ ++ netdev->irq = irq; ++ printk(KERN_INFO "Assigned IRQ %d to port %d\n", irq, port_num); ++ ++ spin_lock_irq(&(titan_ge_eth->lock)); ++ ++ if (titan_ge_eth_open(netdev) != TITAN_OK) { ++ spin_unlock_irq(&(titan_ge_eth->lock)); ++ printk("%s: Error opening interface \n", netdev->name); ++ free_irq(netdev->irq, netdev); ++ return -EBUSY; ++ } ++ ++ spin_unlock_irq(&(titan_ge_eth->lock)); ++ ++ return 0; ++} ++ ++/* ++ * Allocate the SKBs for the Rx ring. Also used ++ * for refilling the queue ++ */ ++static int titan_ge_rx_task(struct net_device *netdev, ++ titan_ge_port_info *titan_ge_port) ++{ ++ struct device *device = &titan_ge_device[titan_ge_port->port_num]->dev; ++ volatile titan_ge_rx_desc *rx_desc; ++ struct sk_buff *skb; ++ int rx_used_desc; ++ int count = 0; ++ ++ while (titan_ge_port->rx_ring_skbs < titan_ge_port->rx_ring_size) { ++ ++ /* First try to get the skb from the recycler */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ skb = titan_ge_alloc_skb(TITAN_GE_JUMBO_BUFSIZE, GFP_ATOMIC); ++#else ++ skb = titan_ge_alloc_skb(TITAN_GE_STD_BUFSIZE, GFP_ATOMIC); ++#endif ++ if (unlikely(!skb)) { ++ /* OOM, set the flag */ ++ printk("OOM \n"); ++ oom_flag = 1; ++ break; ++ } ++ count++; ++ skb->dev = netdev; ++ ++ titan_ge_port->rx_ring_skbs++; ++ ++ rx_used_desc = titan_ge_port->rx_used_desc_q; ++ rx_desc = &(titan_ge_port->rx_desc_area[rx_used_desc]); ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ rx_desc->buffer_addr = dma_map_single(device, skb->data, ++ TITAN_GE_JUMBO_BUFSIZE - 2, DMA_FROM_DEVICE); ++#else ++ rx_desc->buffer_addr = dma_map_single(device, skb->data, ++ TITAN_GE_STD_BUFSIZE - 2, DMA_FROM_DEVICE); ++#endif ++ ++ titan_ge_port->rx_skb[rx_used_desc] = skb; ++ rx_desc->cmd_sts = TITAN_GE_RX_BUFFER_OWNED; ++ ++ titan_ge_port->rx_used_desc_q = ++ (rx_used_desc + 1) % TITAN_GE_RX_QUEUE; ++ } ++ ++ return count; ++} ++ ++/* ++ * Actual init of the Tital GE port. There is one register for ++ * the channel configuration ++ */ ++static void titan_port_init(struct net_device *netdev, ++ titan_ge_port_info * titan_ge_eth) ++{ ++ unsigned long reg_data; ++ ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ ++ /* First reset the TMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data |= 0x80000000; ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ udelay(30); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data &= ~(0xc0000000); ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ /* Now reset the RMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data |= 0x00080000; ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ udelay(30); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data &= ~(0x000c0000); ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++} ++ ++/* ++ * Start the port. All the hardware specific configuration ++ * for the XDMA, Tx FIFO, Rx FIFO, TMAC, RMAC, TRTG and AFX ++ * go here ++ */ ++static int titan_ge_port_start(struct net_device *netdev, ++ titan_ge_port_info * titan_port) ++{ ++ volatile unsigned long reg_data, reg_data1; ++ int port_num = titan_port->port_num; ++ int count = 0; ++ unsigned long reg_data_1; ++ ++ if (config_done == 0) { ++ reg_data = TITAN_GE_READ(0x0004); ++ reg_data |= 0x100; ++ TITAN_GE_WRITE(0x0004, reg_data); ++ ++ reg_data &= ~(0x100); ++ TITAN_GE_WRITE(0x0004, reg_data); ++ ++ /* Turn on GMII/MII mode and turn off TBI mode */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TSB_CTRL_1); ++ reg_data |= 0x00000700; ++ reg_data &= ~(0x00800000); /* Fencing */ ++ ++ TITAN_GE_WRITE(0x000c, 0x00001100); ++ ++ TITAN_GE_WRITE(TITAN_GE_TSB_CTRL_1, reg_data); ++ ++ /* Set the CPU Resource Limit register */ ++ TITAN_GE_WRITE(0x00f8, 0x8); ++ ++ /* Be conservative when using the BIU buffers */ ++ TITAN_GE_WRITE(0x0068, 0x4); ++ } ++ ++ titan_port->tx_threshold = 0; ++ titan_port->rx_threshold = 0; ++ ++ /* We need to write the descriptors for Tx and Rx */ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_TX_DESC + (port_num << 8)), ++ (unsigned long) titan_port->tx_dma); ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_RX_DESC + (port_num << 8)), ++ (unsigned long) titan_port->rx_dma); ++ ++ if (config_done == 0) { ++ /* Step 1: XDMA config */ ++ reg_data = TITAN_GE_READ(TITAN_GE_XDMA_CONFIG); ++ reg_data &= ~(0x80000000); /* clear reset */ ++ reg_data |= 0x1 << 29; /* sparse tx descriptor spacing */ ++ reg_data |= 0x1 << 28; /* sparse rx descriptor spacing */ ++ reg_data |= (0x1 << 23) | (0x1 << 24); /* Descriptor Coherency */ ++ reg_data |= (0x1 << 21) | (0x1 << 22); /* Data Coherency */ ++ TITAN_GE_WRITE(TITAN_GE_XDMA_CONFIG, reg_data); ++ } ++ ++ /* IR register for the XDMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8)); ++ reg_data |= 0x80068000; /* No Rx_OOD */ ++ TITAN_GE_WRITE((TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8)), reg_data); ++ ++ /* Start the Tx and Rx XDMA controller */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + (port_num << 8)); ++ reg_data &= 0x4fffffff; /* Clear tx reset */ ++ reg_data &= 0xfff4ffff; /* Clear rx reset */ ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ reg_data |= 0xa0 | 0x30030000; ++#else ++ reg_data |= 0x40 | 0x20030000; ++#endif ++ ++#ifndef CONFIG_SMP ++ reg_data &= ~(0x10); ++ reg_data |= 0x0f; /* All of the packet */ ++#endif ++ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + (port_num << 8)), reg_data); ++ ++ /* Rx desc count */ ++ count = titan_ge_rx_task(netdev, titan_port); ++ TITAN_GE_WRITE((0x5048 + (port_num << 8)), count); ++ count = TITAN_GE_READ(0x5048 + (port_num << 8)); ++ ++ udelay(30); ++ ++ /* ++ * Step 2: Configure the SDQPF, i.e. FIFO ++ */ ++ if (config_done == 0) { ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL); ++ reg_data = 0x1; ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ reg_data &= ~(0x1); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL); ++ reg_data = 0x1; ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ reg_data &= ~(0x1); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ } ++ /* ++ * Enable RX FIFO 0, 4 and 8 ++ */ ++ if (port_num == 0) { ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10); ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4844); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x4844, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_0); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ reg_data |= (0xff << 10); ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4944); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x4944, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ } ++ ++ if (port_num == 1) { ++ reg_data = TITAN_GE_READ(0x4870); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (0xff + 1); ++ ++ TITAN_GE_WRITE(0x4870, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4874); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x4874, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4870, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x494c); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x494c, reg_data); ++ reg_data |= (0xff << 10) | (0xff + 1); ++ TITAN_GE_WRITE(0x494c, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4950); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x4950, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x494c, reg_data); ++ } ++ ++ /* ++ * Titan 1.2 revision does support port #2 ++ */ ++ if (port_num == 2) { ++ /* ++ * Put the descriptors in the SRAM ++ */ ++ reg_data = TITAN_GE_READ(0x48a0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x48a4); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x48a4, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x4958); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ TITAN_GE_WRITE(0x4958, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x495c); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x495c, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ } ++ ++ if (port_num == 2) { ++ reg_data = TITAN_GE_READ(0x48a0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x48a4); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x48a4, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x4958); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ TITAN_GE_WRITE(0x4958, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x495c); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x495c, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ } ++ ++ /* ++ * Step 3: TRTG block enable ++ */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TRTG_CONFIG + (port_num << 12)); ++ ++ /* ++ * This is the 1.2 revision of the chip. It has fix for the ++ * IP header alignment. Now, the IP header begins at an ++ * aligned address and this wont need an extra copy in the ++ * driver. This performance drawback existed in the previous ++ * versions of the silicon ++ */ ++ reg_data_1 = TITAN_GE_READ(0x103c + (port_num << 12)); ++ reg_data_1 |= 0x40000000; ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ reg_data_1 |= 0x04000000; ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ mdelay(5); ++ ++ reg_data_1 &= ~(0x04000000); ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ mdelay(5); ++ ++ reg_data |= 0x0001; ++ TITAN_GE_WRITE((TITAN_GE_TRTG_CONFIG + (port_num << 12)), reg_data); ++ ++ /* ++ * Step 4: Start the Tx activity ++ */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_2 + (port_num << 12)), 0xe197); ++#ifdef TITAN_GE_JUMBO_FRAMES ++ TITAN_GE_WRITE((0x1258 + (port_num << 12)), 0x4000); ++#endif ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)); ++ reg_data |= 0x0001; /* Enable TMAC */ ++ reg_data |= 0x6c70; /* PAUSE also set */ ++ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ udelay(30); ++ ++ /* Destination Address drop bit */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_2 + (port_num << 12)); ++ reg_data |= 0x218; /* DA_DROP bit and pause */ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_2 + (port_num << 12)), reg_data); ++ ++ TITAN_GE_WRITE((0x1218 + (port_num << 12)), 0x3); ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ TITAN_GE_WRITE((0x1208 + (port_num << 12)), 0x4000); ++#endif ++ /* Start the Rx activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)); ++ reg_data |= 0x0001; /* RMAC Enable */ ++ reg_data |= 0x0010; /* CRC Check enable */ ++ reg_data |= 0x0040; /* Min Frame check enable */ ++ reg_data |= 0x4400; /* Max Frame check enable */ ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ udelay(30); ++ ++ /* ++ * Enable the Interrupts for Tx and Rx ++ */ ++ reg_data1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ ++ if (port_num == 0) { ++ reg_data1 |= 0x3; ++#ifdef CONFIG_SMP ++ TITAN_GE_WRITE(0x0038, 0x003); ++#else ++ TITAN_GE_WRITE(0x0038, 0x303); ++#endif ++ } ++ ++ if (port_num == 1) { ++ reg_data1 |= 0x300; ++ } ++ ++ if (port_num == 2) ++ reg_data1 |= 0x30000; ++ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data1); ++ TITAN_GE_WRITE(0x003c, 0x300); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(0x0024, 0x04000024); /* IRQ vector */ ++ TITAN_GE_WRITE(0x0020, 0x000fb000); /* INTMSG base */ ++ } ++ ++ /* Priority */ ++ reg_data = TITAN_GE_READ(0x1038 + (port_num << 12)); ++ reg_data &= ~(0x00f00000); ++ TITAN_GE_WRITE((0x1038 + (port_num << 12)), reg_data); ++ ++ /* Step 5: GMII config */ ++ titan_ge_gmii_config(port_num); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(0x1a80, 0); ++ config_done = 1; ++ } ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Function to queue the packet for the Ethernet device ++ */ ++static void titan_ge_tx_queue(titan_ge_port_info * titan_ge_eth, ++ struct sk_buff * skb) ++{ ++ struct device *device = &titan_ge_device[titan_ge_eth->port_num]->dev; ++ unsigned int curr_desc = titan_ge_eth->tx_curr_desc_q; ++ volatile titan_ge_tx_desc *tx_curr; ++ int port_num = titan_ge_eth->port_num; ++ ++ tx_curr = &(titan_ge_eth->tx_desc_area[curr_desc]); ++ tx_curr->buffer_addr = ++ dma_map_single(device, skb->data, skb_headlen(skb), ++ DMA_TO_DEVICE); ++ ++ titan_ge_eth->tx_skb[curr_desc] = (struct sk_buff *) skb; ++ tx_curr->buffer_len = skb_headlen(skb); ++ ++ /* Last descriptor enables interrupt and changes ownership */ ++ tx_curr->cmd_sts = 0x1 | (1 << 15) | (1 << 5); ++ ++ /* Kick the XDMA to start the transfer from memory to the FIFO */ ++ TITAN_GE_WRITE((0x5044 + (port_num << 8)), 0x1); ++ ++ /* Current descriptor updated */ ++ titan_ge_eth->tx_curr_desc_q = (curr_desc + 1) % TITAN_GE_TX_QUEUE; ++ ++ /* Prefetch the next descriptor */ ++ prefetch((const void *) ++ &titan_ge_eth->tx_desc_area[titan_ge_eth->tx_curr_desc_q]); ++} ++ ++/* ++ * Actually does the open of the Ethernet device ++ */ ++static int titan_ge_eth_open(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ struct device *device = &titan_ge_device[port_num]->dev; ++ unsigned long reg_data; ++ unsigned int phy_reg; ++ int err = 0; ++ ++ /* Stop the Rx activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ /* Clear the port interrupts */ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT + (port_num << 8)), 0x0); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0); ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_B, 0); ++ } ++ ++ /* Set the MAC Address */ ++ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6); ++ ++ if (config_done == 0) ++ titan_port_init(netdev, titan_ge_eth); ++ ++ titan_ge_update_afx(titan_ge_eth); ++ ++ /* Allocate the Tx ring now */ ++ titan_ge_eth->tx_ring_skbs = 0; ++ titan_ge_eth->tx_ring_size = TITAN_GE_TX_QUEUE; ++ ++ /* Allocate space in the SRAM for the descriptors */ ++ titan_ge_eth->tx_desc_area = (titan_ge_tx_desc *) ++ (titan_ge_sram + TITAN_TX_RING_BYTES * port_num); ++ titan_ge_eth->tx_dma = TITAN_SRAM_BASE + TITAN_TX_RING_BYTES * port_num; ++ ++ if (!titan_ge_eth->tx_desc_area) { ++ printk(KERN_ERR ++ "%s: Cannot allocate Tx Ring (size %d bytes) for port %d\n", ++ netdev->name, TITAN_TX_RING_BYTES, port_num); ++ return -ENOMEM; ++ } ++ ++ memset(titan_ge_eth->tx_desc_area, 0, titan_ge_eth->tx_desc_area_size); ++ ++ /* Now initialize the Tx descriptor ring */ ++ titan_ge_init_tx_desc_ring(titan_ge_eth, ++ titan_ge_eth->tx_ring_size, ++ (unsigned long) titan_ge_eth->tx_desc_area, ++ (unsigned long) titan_ge_eth->tx_dma); ++ ++ /* Allocate the Rx ring now */ ++ titan_ge_eth->rx_ring_size = TITAN_GE_RX_QUEUE; ++ titan_ge_eth->rx_ring_skbs = 0; ++ ++ titan_ge_eth->rx_desc_area = ++ (titan_ge_rx_desc *)(titan_ge_sram + 0x1000 + TITAN_RX_RING_BYTES * port_num); ++ ++ titan_ge_eth->rx_dma = TITAN_SRAM_BASE + 0x1000 + TITAN_RX_RING_BYTES * port_num; ++ ++ if (!titan_ge_eth->rx_desc_area) { ++ printk(KERN_ERR "%s: Cannot allocate Rx Ring (size %d bytes)\n", ++ netdev->name, TITAN_RX_RING_BYTES); ++ ++ printk(KERN_ERR "%s: Freeing previously allocated TX queues...", ++ netdev->name); ++ ++ dma_free_coherent(device, titan_ge_eth->tx_desc_area_size, ++ (void *) titan_ge_eth->tx_desc_area, ++ titan_ge_eth->tx_dma); ++ ++ return -ENOMEM; ++ } ++ ++ memset(titan_ge_eth->rx_desc_area, 0, titan_ge_eth->rx_desc_area_size); ++ ++ /* Now initialize the Rx ring */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ if ((titan_ge_init_rx_desc_ring ++ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_JUMBO_BUFSIZE, ++ (unsigned long) titan_ge_eth->rx_desc_area, 0, ++ (unsigned long) titan_ge_eth->rx_dma)) == 0) ++#else ++ if ((titan_ge_init_rx_desc_ring ++ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_STD_BUFSIZE, ++ (unsigned long) titan_ge_eth->rx_desc_area, 0, ++ (unsigned long) titan_ge_eth->rx_dma)) == 0) ++#endif ++ panic("%s: Error initializing RX Ring\n", netdev->name); ++ ++ /* Fill the Rx ring with the SKBs */ ++ titan_ge_port_start(netdev, titan_ge_eth); ++ ++ /* ++ * Check if Interrupt Coalscing needs to be turned on. The ++ * values specified in the register is multiplied by ++ * (8 x 64 nanoseconds) to determine when an interrupt should ++ * be sent to the CPU. ++ */ ++ ++ if (TITAN_GE_TX_COAL) { ++ titan_ge_eth->tx_int_coal = ++ titan_ge_tx_coal(TITAN_GE_TX_COAL, port_num); ++ } ++ ++ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg); ++ if (err == TITAN_GE_MDIO_ERROR) { ++ printk(KERN_ERR ++ "Could not read PHY control register 0x11 \n"); ++ return TITAN_ERROR; ++ } ++ if (!(phy_reg & 0x0400)) { ++ netif_carrier_off(netdev); ++ netif_stop_queue(netdev); ++ return TITAN_ERROR; ++ } else { ++ netif_carrier_on(netdev); ++ netif_start_queue(netdev); ++ } ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Queue the packet for Tx. Currently no support for zero copy, ++ * checksum offload and Scatter Gather. The chip does support ++ * Scatter Gather only. But, that wont help here since zero copy ++ * requires support for Tx checksumming also. ++ */ ++int titan_ge_start_xmit(struct sk_buff *skb, struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned long flags; ++ struct net_device_stats *stats; ++//printk("titan_ge_start_xmit\n"); ++ ++ stats = &titan_ge_eth->stats; ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ if ((TITAN_GE_TX_QUEUE - titan_ge_eth->tx_ring_skbs) <= ++ (skb_shinfo(skb)->nr_frags + 1)) { ++ netif_stop_queue(netdev); ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ printk(KERN_ERR "Tx OOD \n"); ++ return 1; ++ } ++ ++ titan_ge_tx_queue(titan_ge_eth, skb); ++ titan_ge_eth->tx_ring_skbs++; ++ ++ if (TITAN_GE_TX_QUEUE <= (titan_ge_eth->tx_ring_skbs + 4)) { ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ titan_ge_free_tx_queue(titan_ge_eth); ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ } ++ ++ stats->tx_bytes += skb->len; ++ stats->tx_packets++; ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ netdev->trans_start = jiffies; ++ ++ return 0; ++} ++ ++/* ++ * Actually does the Rx. Rx side checksumming supported. ++ */ ++static int titan_ge_rx(struct net_device *netdev, int port_num, ++ titan_ge_port_info * titan_ge_port, ++ titan_ge_packet * packet) ++{ ++ int rx_curr_desc, rx_used_desc; ++ volatile titan_ge_rx_desc *rx_desc; ++ ++ rx_curr_desc = titan_ge_port->rx_curr_desc_q; ++ rx_used_desc = titan_ge_port->rx_used_desc_q; ++ ++ if (((rx_curr_desc + 1) % TITAN_GE_RX_QUEUE) == rx_used_desc) ++ return TITAN_ERROR; ++ ++ rx_desc = &(titan_ge_port->rx_desc_area[rx_curr_desc]); ++ ++ if (rx_desc->cmd_sts & TITAN_GE_RX_BUFFER_OWNED) ++ return TITAN_ERROR; ++ ++ packet->skb = titan_ge_port->rx_skb[rx_curr_desc]; ++ packet->len = (rx_desc->cmd_sts & 0x7fff); ++ ++ /* ++ * At this point, we dont know if the checksumming ++ * actually helps relieve CPU. So, keep it for ++ * port 0 only ++ */ ++ packet->checksum = ntohs((rx_desc->buffer & 0xffff0000) >> 16); ++ packet->cmd_sts = rx_desc->cmd_sts; ++ ++ titan_ge_port->rx_curr_desc_q = (rx_curr_desc + 1) % TITAN_GE_RX_QUEUE; ++ ++ /* Prefetch the next descriptor */ ++ prefetch((const void *) ++ &titan_ge_port->rx_desc_area[titan_ge_port->rx_curr_desc_q + 1]); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Free the Tx queue of the used SKBs ++ */ ++static int titan_ge_free_tx_queue(titan_ge_port_info *titan_ge_eth) ++{ ++ unsigned long flags; ++ ++ /* Take the lock */ ++ spin_lock_irqsave(&(titan_ge_eth->lock), flags); ++ ++ while (titan_ge_return_tx_desc(titan_ge_eth, titan_ge_eth->port_num) == 0) ++ if (titan_ge_eth->tx_ring_skbs != 1) ++ titan_ge_eth->tx_ring_skbs--; ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Threshold beyond which we do the cleaning of ++ * Tx queue and new allocation for the Rx ++ * queue ++ */ ++#define TX_THRESHOLD 4 ++#define RX_THRESHOLD 10 ++ ++/* ++ * Receive the packets and send it to the kernel. ++ */ ++static int titan_ge_receive_queue(struct net_device *netdev, unsigned int max) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ titan_ge_packet packet; ++ struct net_device_stats *stats; ++ struct sk_buff *skb; ++ unsigned long received_packets = 0; ++ unsigned int ack; ++ ++ stats = &titan_ge_eth->stats; ++ ++ while ((--max) ++ && (titan_ge_rx(netdev, port_num, titan_ge_eth, &packet) == TITAN_OK)) { ++ skb = (struct sk_buff *) packet.skb; ++ ++ titan_ge_eth->rx_ring_skbs--; ++ ++ if (--titan_ge_eth->rx_work_limit < 0) ++ break; ++ received_packets++; ++ ++ stats->rx_packets++; ++ stats->rx_bytes += packet.len; ++ ++ if ((packet.cmd_sts & TITAN_GE_RX_PERR) || ++ (packet.cmd_sts & TITAN_GE_RX_OVERFLOW_ERROR) || ++ (packet.cmd_sts & TITAN_GE_RX_TRUNC) || ++ (packet.cmd_sts & TITAN_GE_RX_CRC_ERROR)) { ++ stats->rx_dropped++; ++ dev_kfree_skb_any(skb); ++ ++ continue; ++ } ++ /* ++ * Either support fast path or slow path. Decision ++ * making can really slow down the performance. The ++ * idea is to cut down the number of checks and improve ++ * the fastpath. ++ */ ++ ++ skb_put(skb, packet.len - 2); ++ ++ /* ++ * Increment data pointer by two since thats where ++ * the MAC starts ++ */ ++ skb_reserve(skb, 2); ++ skb->protocol = eth_type_trans(skb, netdev); ++ netif_receive_skb(skb); ++ ++ if (titan_ge_eth->rx_threshold > RX_THRESHOLD) { ++ ack = titan_ge_rx_task(netdev, titan_ge_eth); ++ TITAN_GE_WRITE((0x5048 + (port_num << 8)), ack); ++ titan_ge_eth->rx_threshold = 0; ++ } else ++ titan_ge_eth->rx_threshold++; ++ ++ if (titan_ge_eth->tx_threshold > TX_THRESHOLD) { ++ titan_ge_eth->tx_threshold = 0; ++ titan_ge_free_tx_queue(titan_ge_eth); ++ } ++ else ++ titan_ge_eth->tx_threshold++; ++ ++ } ++ return received_packets; ++} ++ ++ ++/* ++ * Enable the Rx side interrupts ++ */ ++static void titan_ge_enable_int(unsigned int port_num, ++ titan_ge_port_info *titan_ge_eth, ++ struct net_device *netdev) ++{ ++ unsigned long reg_data = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ ++ if (port_num == 0) ++ reg_data |= 0x3; ++ if (port_num == 1) ++ reg_data |= 0x300; ++ if (port_num == 2) ++ reg_data |= 0x30000; ++ ++ /* Re-enable interrupts */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data); ++} ++ ++/* ++ * Main function to handle the polling for Rx side NAPI. ++ * Receive interrupts have been disabled at this point. ++ * The poll schedules the transmit followed by receive. ++ */ ++static int titan_ge_poll(struct net_device *netdev, int *budget) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ int port_num = titan_ge_eth->port_num; ++ int work_done = 0; ++ unsigned long flags, status; ++ ++ titan_ge_eth->rx_work_limit = *budget; ++ if (titan_ge_eth->rx_work_limit > netdev->quota) ++ titan_ge_eth->rx_work_limit = netdev->quota; ++ ++ do { ++ /* Do the transmit cleaning work here */ ++ titan_ge_free_tx_queue(titan_ge_eth); ++ ++ /* Ack the Rx interrupts */ ++ if (port_num == 0) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x3); ++ if (port_num == 1) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x300); ++ if (port_num == 2) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x30000); ++ ++ work_done += titan_ge_receive_queue(netdev, 0); ++ ++ /* Out of quota and there is work to be done */ ++ if (titan_ge_eth->rx_work_limit < 0) ++ goto not_done; ++ ++ /* Receive alloc_skb could lead to OOM */ ++ if (oom_flag == 1) { ++ oom_flag = 0; ++ goto oom; ++ } ++ ++ status = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A); ++ } while (status & 0x30300); ++ ++ /* If we are here, then no more interrupts to process */ ++ goto done; ++ ++not_done: ++ *budget -= work_done; ++ netdev->quota -= work_done; ++ return 1; ++ ++oom: ++ printk(KERN_ERR "OOM \n"); ++ netif_rx_complete(netdev); ++ return 0; ++ ++done: ++ /* ++ * No more packets on the poll list. Turn the interrupts ++ * back on and we should be able to catch the new ++ * packets in the interrupt handler ++ */ ++ if (!work_done) ++ work_done = 1; ++ ++ *budget -= work_done; ++ netdev->quota -= work_done; ++ ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ /* Remove us from the poll list */ ++ netif_rx_complete(netdev); ++ ++ /* Re-enable interrupts */ ++ titan_ge_enable_int(port_num, titan_ge_eth, netdev); ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ return 0; ++} ++ ++/* ++ * Close the network device ++ */ ++int titan_ge_stop(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ spin_lock_irq(&(titan_ge_eth->lock)); ++ titan_ge_eth_stop(netdev); ++ free_irq(netdev->irq, netdev); ++ spin_unlock_irq(&titan_ge_eth->lock); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Free the Tx ring ++ */ ++static void titan_ge_free_tx_rings(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int curr; ++ unsigned long reg_data; ++ ++ /* Stop the Tx DMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)); ++ reg_data |= 0xc0000000; ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)), reg_data); ++ ++ /* Disable the TMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ for (curr = 0; ++ (titan_ge_eth->tx_ring_skbs) && (curr < TITAN_GE_TX_QUEUE); ++ curr++) { ++ if (titan_ge_eth->tx_skb[curr]) { ++ dev_kfree_skb(titan_ge_eth->tx_skb[curr]); ++ titan_ge_eth->tx_ring_skbs--; ++ } ++ } ++ ++ if (titan_ge_eth->tx_ring_skbs != 0) ++ printk ++ ("%s: Error on Tx descriptor free - could not free %d" ++ " descriptors\n", netdev->name, ++ titan_ge_eth->tx_ring_skbs); ++ ++#ifndef TITAN_RX_RING_IN_SRAM ++ dma_free_coherent(&titan_ge_device[port_num]->dev, ++ titan_ge_eth->tx_desc_area_size, ++ (void *) titan_ge_eth->tx_desc_area, ++ titan_ge_eth->tx_dma); ++#endif ++} ++ ++/* ++ * Free the Rx ring ++ */ ++static void titan_ge_free_rx_rings(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int curr; ++ unsigned long reg_data; ++ ++ /* Stop the Rx DMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)); ++ reg_data |= 0x000c0000; ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)), reg_data); ++ ++ /* Disable the RMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ for (curr = 0; ++ titan_ge_eth->rx_ring_skbs && (curr < TITAN_GE_RX_QUEUE); ++ curr++) { ++ if (titan_ge_eth->rx_skb[curr]) { ++ dev_kfree_skb(titan_ge_eth->rx_skb[curr]); ++ titan_ge_eth->rx_ring_skbs--; ++ } ++ } ++ ++ if (titan_ge_eth->rx_ring_skbs != 0) ++ printk(KERN_ERR ++ "%s: Error in freeing Rx Ring. %d skb's still" ++ " stuck in RX Ring - ignoring them\n", netdev->name, ++ titan_ge_eth->rx_ring_skbs); ++ ++#ifndef TITAN_RX_RING_IN_SRAM ++ dma_free_coherent(&titan_ge_device[port_num]->dev, ++ titan_ge_eth->rx_desc_area_size, ++ (void *) titan_ge_eth->rx_desc_area, ++ titan_ge_eth->rx_dma); ++#endif ++} ++ ++/* ++ * Actually does the stop of the Ethernet device ++ */ ++static void titan_ge_eth_stop(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ netif_stop_queue(netdev); ++ ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ ++ titan_ge_free_tx_rings(netdev); ++ titan_ge_free_rx_rings(netdev); ++ ++ /* Disable the Tx and Rx Interrupts for all channels */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, 0x0); ++} ++ ++/* ++ * Update the MAC address. Note that we have to write the ++ * address in three station registers, 16 bits each. And this ++ * has to be done for TMAC and RMAC ++ */ ++static void titan_ge_update_mac_address(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ u8 p_addr[6]; ++ ++ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6); ++ memcpy(p_addr, netdev->dev_addr, 6); ++ ++ /* Update the Address Filtering Match tables */ ++ titan_ge_update_afx(titan_ge_eth); ++ ++ printk("Station MAC : %d %d %d %d %d %d \n", ++ p_addr[5], p_addr[4], p_addr[3], ++ p_addr[2], p_addr[1], p_addr[0]); ++ ++ /* Set the MAC address here for TMAC and RMAC */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port_num << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port_num << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port_num << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port_num << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port_num << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port_num << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++} ++ ++/* ++ * Set the MAC address of the Ethernet device ++ */ ++static int titan_ge_set_mac_address(struct net_device *dev, void *addr) ++{ ++ titan_ge_port_info *tp = netdev_priv(dev); ++ struct sockaddr *sa = addr; ++ ++ memcpy(dev->dev_addr, sa->sa_data, dev->addr_len); ++ ++ spin_lock_irq(&tp->lock); ++ titan_ge_update_mac_address(dev); ++ spin_unlock_irq(&tp->lock); ++ ++ return 0; ++} ++ ++/* ++ * Get the Ethernet device stats ++ */ ++static struct net_device_stats *titan_ge_get_stats(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ return &titan_ge_eth->stats; ++} ++ ++/* ++ * Initialize the Rx descriptor ring for the Titan Ge ++ */ ++static int titan_ge_init_rx_desc_ring(titan_ge_port_info * titan_eth_port, ++ int rx_desc_num, ++ int rx_buff_size, ++ unsigned long rx_desc_base_addr, ++ unsigned long rx_buff_base_addr, ++ unsigned long rx_dma) ++{ ++ volatile titan_ge_rx_desc *rx_desc; ++ unsigned long buffer_addr; ++ int index; ++ unsigned long titan_ge_rx_desc_bus = rx_dma; ++ ++ buffer_addr = rx_buff_base_addr; ++ rx_desc = (titan_ge_rx_desc *) rx_desc_base_addr; ++ ++ /* Check alignment */ ++ if (rx_buff_base_addr & 0xF) ++ return 0; ++ ++ /* Check Rx buffer size */ ++ if ((rx_buff_size < 8) || (rx_buff_size > TITAN_GE_MAX_RX_BUFFER)) ++ return 0; ++ ++ /* 64-bit alignment ++ if ((rx_buff_base_addr + rx_buff_size) & 0x7) ++ return 0; */ ++ ++ /* Initialize the Rx desc ring */ ++ for (index = 0; index < rx_desc_num; index++) { ++ titan_ge_rx_desc_bus += sizeof(titan_ge_rx_desc); ++ rx_desc[index].cmd_sts = 0; ++ rx_desc[index].buffer_addr = buffer_addr; ++ titan_eth_port->rx_skb[index] = NULL; ++ buffer_addr += rx_buff_size; ++ } ++ ++ titan_eth_port->rx_curr_desc_q = 0; ++ titan_eth_port->rx_used_desc_q = 0; ++ ++ titan_eth_port->rx_desc_area = (titan_ge_rx_desc *) rx_desc_base_addr; ++ titan_eth_port->rx_desc_area_size = ++ rx_desc_num * sizeof(titan_ge_rx_desc); ++ ++ titan_eth_port->rx_dma = rx_dma; ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Initialize the Tx descriptor ring. Descriptors in the SRAM ++ */ ++static int titan_ge_init_tx_desc_ring(titan_ge_port_info * titan_ge_port, ++ int tx_desc_num, ++ unsigned long tx_desc_base_addr, ++ unsigned long tx_dma) ++{ ++ titan_ge_tx_desc *tx_desc; ++ int index; ++ unsigned long titan_ge_tx_desc_bus = tx_dma; ++ ++ if (tx_desc_base_addr & 0xF) ++ return 0; ++ ++ tx_desc = (titan_ge_tx_desc *) tx_desc_base_addr; ++ ++ for (index = 0; index < tx_desc_num; index++) { ++ titan_ge_port->tx_dma_array[index] = ++ (dma_addr_t) titan_ge_tx_desc_bus; ++ titan_ge_tx_desc_bus += sizeof(titan_ge_tx_desc); ++ tx_desc[index].cmd_sts = 0x0000; ++ tx_desc[index].buffer_len = 0; ++ tx_desc[index].buffer_addr = 0x00000000; ++ titan_ge_port->tx_skb[index] = NULL; ++ } ++ ++ titan_ge_port->tx_curr_desc_q = 0; ++ titan_ge_port->tx_used_desc_q = 0; ++ ++ titan_ge_port->tx_desc_area = (titan_ge_tx_desc *) tx_desc_base_addr; ++ titan_ge_port->tx_desc_area_size = ++ tx_desc_num * sizeof(titan_ge_tx_desc); ++ ++ titan_ge_port->tx_dma = tx_dma; ++ return TITAN_OK; ++} ++ ++/* ++ * Initialize the device as an Ethernet device ++ */ ++static int __init titan_ge_probe(struct device *device) ++{ ++ titan_ge_port_info *titan_ge_eth; ++ struct net_device *netdev; ++ int port = to_platform_device(device)->id; ++ int err; ++ ++ netdev = alloc_etherdev(sizeof(titan_ge_port_info)); ++ if (!netdev) { ++ err = -ENODEV; ++ goto out; ++ } ++ ++ netdev->open = titan_ge_open; ++ netdev->stop = titan_ge_stop; ++ netdev->hard_start_xmit = titan_ge_start_xmit; ++ netdev->get_stats = titan_ge_get_stats; ++ netdev->set_multicast_list = titan_ge_set_multi; ++ netdev->set_mac_address = titan_ge_set_mac_address; ++ ++ /* Tx timeout */ ++ netdev->tx_timeout = titan_ge_tx_timeout; ++ netdev->watchdog_timeo = 2 * HZ; ++ ++ /* Set these to very high values */ ++ netdev->poll = titan_ge_poll; ++ netdev->weight = 64; ++ ++ netdev->tx_queue_len = TITAN_GE_TX_QUEUE; ++ netif_carrier_off(netdev); ++ netdev->base_addr = 0; ++ ++ netdev->change_mtu = titan_ge_change_mtu; ++ ++ titan_ge_eth = netdev_priv(netdev); ++ /* Allocation of memory for the driver structures */ ++ ++ titan_ge_eth->port_num = port; ++ ++ /* Configure the Tx timeout handler */ ++ INIT_WORK(&titan_ge_eth->tx_timeout_task, ++ (void (*)(void *)) titan_ge_tx_timeout_task, netdev); ++ ++ spin_lock_init(&titan_ge_eth->lock); ++ ++ /* set MAC addresses */ ++ memcpy(netdev->dev_addr, titan_ge_mac_addr_base, 6); ++ netdev->dev_addr[5] += port; ++ ++ err = register_netdev(netdev); ++ ++ if (err) ++ goto out_free_netdev; ++ ++ printk(KERN_NOTICE ++ "%s: port %d with MAC address %02x:%02x:%02x:%02x:%02x:%02x\n", ++ netdev->name, port, netdev->dev_addr[0], ++ netdev->dev_addr[1], netdev->dev_addr[2], ++ netdev->dev_addr[3], netdev->dev_addr[4], ++ netdev->dev_addr[5]); ++ ++ printk(KERN_NOTICE "Rx NAPI supported, Tx Coalescing ON \n"); ++ ++ return 0; ++ ++out_free_netdev: ++ kfree(netdev); ++ ++out: ++ return err; ++} ++ ++static void __devexit titan_device_remove(struct device *device) ++{ ++} ++ ++/* ++ * Reset the Ethernet port ++ */ ++static void titan_ge_port_reset(unsigned int port_num) ++{ ++ unsigned int reg_data; ++ ++ /* Stop the Tx port activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x0001); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ /* Stop the Rx port activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x0001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ return; ++} ++ ++/* ++ * Return the Tx desc after use by the XDMA ++ */ ++static int titan_ge_return_tx_desc(titan_ge_port_info * titan_ge_eth, int port) ++{ ++ int tx_desc_used; ++ struct sk_buff *skb; ++ ++ tx_desc_used = titan_ge_eth->tx_used_desc_q; ++ ++ /* return right away */ ++ if (tx_desc_used == titan_ge_eth->tx_curr_desc_q) ++ return TITAN_ERROR; ++ ++ /* Now the critical stuff */ ++ skb = titan_ge_eth->tx_skb[tx_desc_used]; ++ ++ dev_kfree_skb_any(skb); ++ ++ titan_ge_eth->tx_skb[tx_desc_used] = NULL; ++ titan_ge_eth->tx_used_desc_q = ++ (tx_desc_used + 1) % TITAN_GE_TX_QUEUE; ++ ++ return 0; ++} ++ ++/* ++ * Coalescing for the Tx path ++ */ ++static unsigned long titan_ge_tx_coal(unsigned long delay, int port) ++{ ++ unsigned long rx_delay; ++ ++ rx_delay = TITAN_GE_READ(TITAN_GE_INT_COALESCING); ++ delay = (delay << 16) | rx_delay; ++ ++ TITAN_GE_WRITE(TITAN_GE_INT_COALESCING, delay); ++ TITAN_GE_WRITE(0x5038, delay); ++ ++ return delay; ++} ++ ++static struct device_driver titan_soc_driver = { ++ .name = titan_string, ++ .bus = &platform_bus_type, ++ .probe = titan_ge_probe, ++ .remove = __devexit_p(titan_device_remove), ++}; ++ ++static void titan_platform_release (struct device *device) ++{ ++ struct platform_device *pldev; ++ ++ /* free device */ ++ pldev = to_platform_device (device); ++ kfree (pldev); ++} ++ ++/* ++ * Register the Titan GE with the kernel ++ */ ++static int __init titan_ge_init_module(void) ++{ ++ struct platform_device *pldev; ++ unsigned int version, device; ++ int i; ++ ++ printk(KERN_NOTICE ++ "PMC-Sierra TITAN 10/100/1000 Ethernet Driver \n"); ++ ++ titan_ge_base = (unsigned long) ioremap(TITAN_GE_BASE, TITAN_GE_SIZE); ++ if (!titan_ge_base) { ++ printk("Mapping Titan GE failed\n"); ++ goto out; ++ } ++ ++ device = TITAN_GE_READ(TITAN_GE_DEVICE_ID); ++ version = (device & 0x000f0000) >> 16; ++ device &= 0x0000ffff; ++ ++ printk(KERN_NOTICE "Device Id : %x, Version : %x \n", device, version); ++ ++#ifdef TITAN_RX_RING_IN_SRAM ++ titan_ge_sram = (unsigned long) ioremap(TITAN_SRAM_BASE, ++ TITAN_SRAM_SIZE); ++ if (!titan_ge_sram) { ++ printk("Mapping Titan SRAM failed\n"); ++ goto out_unmap_ge; ++ } ++#endif ++ ++ if (driver_register(&titan_soc_driver)) { ++ printk(KERN_ERR "Driver registration failed\n"); ++ goto out_unmap_sram; ++ } ++ ++ for (i = 0; i < 3; i++) { ++ titan_ge_device[i] = NULL; ++ ++ if (!(pldev = kmalloc (sizeof (*pldev), GFP_KERNEL))) ++ continue; ++ ++ memset (pldev, 0, sizeof (*pldev)); ++ pldev->name = titan_string; ++ pldev->id = i; ++ pldev->dev.release = titan_platform_release; ++ titan_ge_device[i] = pldev; ++ ++ if (platform_device_register (pldev)) { ++ kfree (pldev); ++ titan_ge_device[i] = NULL; ++ continue; ++ } ++ ++ if (!pldev->dev.driver) { ++ /* ++ * The driver was not bound to this device, there was ++ * no hardware at this address. Unregister it, as the ++ * release fuction will take care of freeing the ++ * allocated structure ++ */ ++ titan_ge_device[i] = NULL; ++ platform_device_unregister (pldev); ++ } ++ } ++ ++ return 0; ++ ++out_unmap_sram: ++ iounmap((void *)titan_ge_sram); ++ ++out_unmap_ge: ++ iounmap((void *)titan_ge_base); ++ ++out: ++ return -ENOMEM; ++} ++ ++/* ++ * Unregister the Titan GE from the kernel ++ */ ++static void __exit titan_ge_cleanup_module(void) ++{ ++ int i; ++ ++ driver_unregister(&titan_soc_driver); ++ ++ for (i = 0; i < 3; i++) { ++ if (titan_ge_device[i]) { ++ platform_device_unregister (titan_ge_device[i]); ++ titan_ge_device[i] = NULL; ++ } ++ } ++ ++ iounmap((void *)titan_ge_sram); ++ iounmap((void *)titan_ge_base); ++} ++ ++MODULE_AUTHOR("Manish Lachwani "); ++MODULE_DESCRIPTION("Titan GE Ethernet driver"); ++MODULE_LICENSE("GPL"); ++ ++module_init(titan_ge_init_module); ++module_exit(titan_ge_cleanup_module); +diff --git a/drivers/net/titan_ge.h b/drivers/net/titan_ge.h +new file mode 100644 +index 0000000..3719f78 +--- /dev/null ++++ b/drivers/net/titan_ge.h +@@ -0,0 +1,415 @@ ++#ifndef _TITAN_GE_H_ ++#define _TITAN_GE_H_ ++ ++#include ++#include ++#include ++#include ++ ++/* ++ * These functions should be later moved to a more generic location since there ++ * will be others accessing it also ++ */ ++ ++/* ++ * This is the way it works: LKB5 Base is at 0x0128. TITAN_BASE is defined in ++ * include/asm/titan_dep.h. TITAN_GE_BASE is the value in the TITAN_GE_LKB5 ++ * register. ++ */ ++ ++#define TITAN_GE_BASE 0xfe000000UL ++#define TITAN_GE_SIZE 0x10000UL ++ ++extern unsigned long titan_ge_base; ++ ++#define TITAN_GE_WRITE(offset, data) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) = (data) ++ ++#define TITAN_GE_READ(offset) *(volatile u32 *)(titan_ge_base + (offset)) ++ ++#ifndef msec_delay ++#define msec_delay(x) do { if(in_interrupt()) { \ ++ /* Don't mdelay in interrupt context! */ \ ++ BUG(); \ ++ } else { \ ++ set_current_state(TASK_UNINTERRUPTIBLE); \ ++ schedule_timeout((x * HZ)/1000); \ ++ } } while(0) ++#endif ++ ++#define TITAN_GE_PORT_0 ++ ++#define TITAN_SRAM_BASE ((OCD_READ(RM9000x2_OCD_LKB13) & ~1) << 4) ++#define TITAN_SRAM_SIZE 0x2000UL ++ ++/* ++ * We may need these constants ++ */ ++#define TITAN_BIT0 0x00000001 ++#define TITAN_BIT1 0x00000002 ++#define TITAN_BIT2 0x00000004 ++#define TITAN_BIT3 0x00000008 ++#define TITAN_BIT4 0x00000010 ++#define TITAN_BIT5 0x00000020 ++#define TITAN_BIT6 0x00000040 ++#define TITAN_BIT7 0x00000080 ++#define TITAN_BIT8 0x00000100 ++#define TITAN_BIT9 0x00000200 ++#define TITAN_BIT10 0x00000400 ++#define TITAN_BIT11 0x00000800 ++#define TITAN_BIT12 0x00001000 ++#define TITAN_BIT13 0x00002000 ++#define TITAN_BIT14 0x00004000 ++#define TITAN_BIT15 0x00008000 ++#define TITAN_BIT16 0x00010000 ++#define TITAN_BIT17 0x00020000 ++#define TITAN_BIT18 0x00040000 ++#define TITAN_BIT19 0x00080000 ++#define TITAN_BIT20 0x00100000 ++#define TITAN_BIT21 0x00200000 ++#define TITAN_BIT22 0x00400000 ++#define TITAN_BIT23 0x00800000 ++#define TITAN_BIT24 0x01000000 ++#define TITAN_BIT25 0x02000000 ++#define TITAN_BIT26 0x04000000 ++#define TITAN_BIT27 0x08000000 ++#define TITAN_BIT28 0x10000000 ++#define TITAN_BIT29 0x20000000 ++#define TITAN_BIT30 0x40000000 ++#define TITAN_BIT31 0x80000000 ++ ++/* Flow Control */ ++#define TITAN_GE_FC_NONE 0x0 ++#define TITAN_GE_FC_FULL 0x1 ++#define TITAN_GE_FC_TX_PAUSE 0x2 ++#define TITAN_GE_FC_RX_PAUSE 0x3 ++ ++/* Duplex Settings */ ++#define TITAN_GE_FULL_DUPLEX 0x1 ++#define TITAN_GE_HALF_DUPLEX 0x2 ++ ++/* Speed settings */ ++#define TITAN_GE_SPEED_1000 0x1 ++#define TITAN_GE_SPEED_100 0x2 ++#define TITAN_GE_SPEED_10 0x3 ++ ++/* Debugging info only */ ++#undef TITAN_DEBUG ++ ++/* Keep the rings in the Titan's SSRAM */ ++#define TITAN_RX_RING_IN_SRAM ++ ++#ifdef CONFIG_64BIT ++#define TITAN_GE_IE_MASK 0xfffffffffb001b64 ++#define TITAN_GE_IE_STATUS 0xfffffffffb001b60 ++#else ++#define TITAN_GE_IE_MASK 0xfb001b64 ++#define TITAN_GE_IE_STATUS 0xfb001b60 ++#endif ++ ++/* Support for Jumbo Frames */ ++#undef TITAN_GE_JUMBO_FRAMES ++ ++/* Rx buffer size */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++#define TITAN_GE_JUMBO_BUFSIZE 9080 ++#else ++#define TITAN_GE_STD_BUFSIZE 1580 ++#endif ++ ++/* ++ * Tx and Rx Interrupt Coalescing parameter. These values are ++ * for 1 Ghz processor. Rx coalescing can be taken care of ++ * by NAPI. NAPI is adaptive and hence useful. Tx coalescing ++ * is not adaptive. Hence, these values need to be adjusted ++ * based on load, CPU speed etc. ++ */ ++#define TITAN_GE_RX_COAL 150 ++#define TITAN_GE_TX_COAL 300 ++ ++#if defined(__BIG_ENDIAN) ++ ++/* Define the Rx descriptor */ ++typedef struct eth_rx_desc { ++ u32 reserved; /* Unused */ ++ u32 buffer_addr; /* CPU buffer address */ ++ u32 cmd_sts; /* Command and Status */ ++ u32 buffer; /* XDMA buffer address */ ++} titan_ge_rx_desc; ++ ++/* Define the Tx descriptor */ ++typedef struct eth_tx_desc { ++ u16 cmd_sts; /* Command, Status and Buffer count */ ++ u16 buffer_len; /* Length of the buffer */ ++ u32 buffer_addr; /* Physical address of the buffer */ ++} titan_ge_tx_desc; ++ ++#elif defined(__LITTLE_ENDIAN) ++ ++/* Define the Rx descriptor */ ++typedef struct eth_rx_desc { ++ u32 buffer_addr; /* CPU buffer address */ ++ u32 reserved; /* Unused */ ++ u32 buffer; /* XDMA buffer address */ ++ u32 cmd_sts; /* Command and Status */ ++} titan_ge_rx_desc; ++ ++/* Define the Tx descriptor */ ++typedef struct eth_tx_desc { ++ u32 buffer_addr; /* Physical address of the buffer */ ++ u16 buffer_len; /* Length of the buffer */ ++ u16 cmd_sts; /* Command, Status and Buffer count */ ++} titan_ge_tx_desc; ++#endif ++ ++/* Default Tx Queue Size */ ++#define TITAN_GE_TX_QUEUE 128 ++#define TITAN_TX_RING_BYTES (TITAN_GE_TX_QUEUE * sizeof(struct eth_tx_desc)) ++ ++/* Default Rx Queue Size */ ++#define TITAN_GE_RX_QUEUE 64 ++#define TITAN_RX_RING_BYTES (TITAN_GE_RX_QUEUE * sizeof(struct eth_rx_desc)) ++ ++/* Packet Structure */ ++typedef struct _pkt_info { ++ unsigned int len; ++ unsigned int cmd_sts; ++ unsigned int buffer; ++ struct sk_buff *skb; ++ unsigned int checksum; ++} titan_ge_packet; ++ ++ ++#define PHYS_CNT 3 ++ ++/* Titan Port specific data structure */ ++typedef struct _eth_port_ctrl { ++ unsigned int port_num; ++ u8 port_mac_addr[6]; ++ ++ /* Rx descriptor pointers */ ++ int rx_curr_desc_q, rx_used_desc_q; ++ ++ /* Tx descriptor pointers */ ++ int tx_curr_desc_q, tx_used_desc_q; ++ ++ /* Rx descriptor area */ ++ volatile titan_ge_rx_desc *rx_desc_area; ++ unsigned int rx_desc_area_size; ++ struct sk_buff* rx_skb[TITAN_GE_RX_QUEUE]; ++ ++ /* Tx Descriptor area */ ++ volatile titan_ge_tx_desc *tx_desc_area; ++ unsigned int tx_desc_area_size; ++ struct sk_buff* tx_skb[TITAN_GE_TX_QUEUE]; ++ ++ /* Timeout task */ ++ struct work_struct tx_timeout_task; ++ ++ /* DMA structures and handles */ ++ dma_addr_t tx_dma; ++ dma_addr_t rx_dma; ++ dma_addr_t tx_dma_array[TITAN_GE_TX_QUEUE]; ++ ++ /* Device lock */ ++ spinlock_t lock; ++ ++ unsigned int tx_ring_skbs; ++ unsigned int rx_ring_size; ++ unsigned int tx_ring_size; ++ unsigned int rx_ring_skbs; ++ ++ struct net_device_stats stats; ++ ++ /* Tx and Rx coalescing */ ++ unsigned long rx_int_coal; ++ unsigned long tx_int_coal; ++ ++ /* Threshold for replenishing the Rx and Tx rings */ ++ unsigned int tx_threshold; ++ unsigned int rx_threshold; ++ ++ /* NAPI work limit */ ++ unsigned int rx_work_limit; ++} titan_ge_port_info; ++ ++/* Titan specific constants */ ++#define TITAN_ETH_PORT_IRQ 3 ++ ++/* Max Rx buffer */ ++#define TITAN_GE_MAX_RX_BUFFER 65536 ++ ++/* Tx and Rx Error */ ++#define TITAN_GE_ERROR ++ ++/* Rx Descriptor Command and Status */ ++ ++#define TITAN_GE_RX_CRC_ERROR TITAN_BIT27 /* crc error */ ++#define TITAN_GE_RX_OVERFLOW_ERROR TITAN_BIT15 /* overflow */ ++#define TITAN_GE_RX_BUFFER_OWNED TITAN_BIT21 /* buffer ownership */ ++#define TITAN_GE_RX_STP TITAN_BIT31 /* start of packet */ ++#define TITAN_GE_RX_BAM TITAN_BIT30 /* broadcast address match */ ++#define TITAN_GE_RX_PAM TITAN_BIT28 /* physical address match */ ++#define TITAN_GE_RX_LAFM TITAN_BIT29 /* logical address filter match */ ++#define TITAN_GE_RX_VLAN TITAN_BIT26 /* virtual lans */ ++#define TITAN_GE_RX_PERR TITAN_BIT19 /* packet error */ ++#define TITAN_GE_RX_TRUNC TITAN_BIT20 /* packet size greater than 32 buffers */ ++ ++/* Tx Descriptor Command */ ++#define TITAN_GE_TX_BUFFER_OWNED TITAN_BIT5 /* buffer ownership */ ++#define TITAN_GE_TX_ENABLE_INTERRUPT TITAN_BIT15 /* Interrupt Enable */ ++ ++/* Return Status */ ++#define TITAN_OK 0x1 /* Good Status */ ++#define TITAN_ERROR 0x2 /* Error Status */ ++ ++/* MIB specific register offset */ ++#define TITAN_GE_MSTATX_STATS_BASE_LOW 0x0800 /* MSTATX COUNTL[15:0] */ ++#define TITAN_GE_MSTATX_STATS_BASE_MID 0x0804 /* MSTATX COUNTM[15:0] */ ++#define TITAN_GE_MSTATX_STATS_BASE_HI 0x0808 /* MSTATX COUNTH[7:0] */ ++#define TITAN_GE_MSTATX_CONTROL 0x0828 /* MSTATX Control */ ++#define TITAN_GE_MSTATX_VARIABLE_SELECT 0x082C /* MSTATX Variable Select */ ++ ++/* MIB counter offsets, add to the TITAN_GE_MSTATX_STATS_BASE_XXX */ ++#define TITAN_GE_MSTATX_RXFRAMESOK 0x0040 ++#define TITAN_GE_MSTATX_RXOCTETSOK 0x0050 ++#define TITAN_GE_MSTATX_RXFRAMES 0x0060 ++#define TITAN_GE_MSTATX_RXOCTETS 0x0070 ++#define TITAN_GE_MSTATX_RXUNICASTFRAMESOK 0x0080 ++#define TITAN_GE_MSTATX_RXBROADCASTFRAMESOK 0x0090 ++#define TITAN_GE_MSTATX_RXMULTICASTFRAMESOK 0x00A0 ++#define TITAN_GE_MSTATX_RXTAGGEDFRAMESOK 0x00B0 ++#define TITAN_GE_MSTATX_RXMACPAUSECONTROLFRAMESOK 0x00C0 ++#define TITAN_GE_MSTATX_RXMACCONTROLFRAMESOK 0x00D0 ++#define TITAN_GE_MSTATX_RXFCSERROR 0x00E0 ++#define TITAN_GE_MSTATX_RXALIGNMENTERROR 0x00F0 ++#define TITAN_GE_MSTATX_RXSYMBOLERROR 0x0100 ++#define TITAN_GE_MSTATX_RXLAYER1ERROR 0x0110 ++#define TITAN_GE_MSTATX_RXINRANGELENGTHERROR 0x0120 ++#define TITAN_GE_MSTATX_RXLONGLENGTHERROR 0x0130 ++#define TITAN_GE_MSTATX_RXLONGLENGTHCRCERROR 0x0140 ++#define TITAN_GE_MSTATX_RXSHORTLENGTHERROR 0x0150 ++#define TITAN_GE_MSTATX_RXSHORTLLENGTHCRCERROR 0x0160 ++#define TITAN_GE_MSTATX_RXFRAMES64OCTETS 0x0170 ++#define TITAN_GE_MSTATX_RXFRAMES65TO127OCTETS 0x0180 ++#define TITAN_GE_MSTATX_RXFRAMES128TO255OCTETS 0x0190 ++#define TITAN_GE_MSTATX_RXFRAMES256TO511OCTETS 0x01A0 ++#define TITAN_GE_MSTATX_RXFRAMES512TO1023OCTETS 0x01B0 ++#define TITAN_GE_MSTATX_RXFRAMES1024TO1518OCTETS 0x01C0 ++#define TITAN_GE_MSTATX_RXFRAMES1519TOMAXSIZE 0x01D0 ++#define TITAN_GE_MSTATX_RXSTATIONADDRESSFILTERED 0x01E0 ++#define TITAN_GE_MSTATX_RXVARIABLE 0x01F0 ++#define TITAN_GE_MSTATX_GENERICADDRESSFILTERED 0x0200 ++#define TITAN_GE_MSTATX_UNICASTFILTERED 0x0210 ++#define TITAN_GE_MSTATX_MULTICASTFILTERED 0x0220 ++#define TITAN_GE_MSTATX_BROADCASTFILTERED 0x0230 ++#define TITAN_GE_MSTATX_HASHFILTERED 0x0240 ++#define TITAN_GE_MSTATX_TXFRAMESOK 0x0250 ++#define TITAN_GE_MSTATX_TXOCTETSOK 0x0260 ++#define TITAN_GE_MSTATX_TXOCTETS 0x0270 ++#define TITAN_GE_MSTATX_TXTAGGEDFRAMESOK 0x0280 ++#define TITAN_GE_MSTATX_TXMACPAUSECONTROLFRAMESOK 0x0290 ++#define TITAN_GE_MSTATX_TXFCSERROR 0x02A0 ++#define TITAN_GE_MSTATX_TXSHORTLENGTHERROR 0x02B0 ++#define TITAN_GE_MSTATX_TXLONGLENGTHERROR 0x02C0 ++#define TITAN_GE_MSTATX_TXSYSTEMERROR 0x02D0 ++#define TITAN_GE_MSTATX_TXMACERROR 0x02E0 ++#define TITAN_GE_MSTATX_TXCARRIERSENSEERROR 0x02F0 ++#define TITAN_GE_MSTATX_TXSQETESTERROR 0x0300 ++#define TITAN_GE_MSTATX_TXUNICASTFRAMESOK 0x0310 ++#define TITAN_GE_MSTATX_TXBROADCASTFRAMESOK 0x0320 ++#define TITAN_GE_MSTATX_TXMULTICASTFRAMESOK 0x0330 ++#define TITAN_GE_MSTATX_TXUNICASTFRAMESATTEMPTED 0x0340 ++#define TITAN_GE_MSTATX_TXBROADCASTFRAMESATTEMPTED 0x0350 ++#define TITAN_GE_MSTATX_TXMULTICASTFRAMESATTEMPTED 0x0360 ++#define TITAN_GE_MSTATX_TXFRAMES64OCTETS 0x0370 ++#define TITAN_GE_MSTATX_TXFRAMES65TO127OCTETS 0x0380 ++#define TITAN_GE_MSTATX_TXFRAMES128TO255OCTETS 0x0390 ++#define TITAN_GE_MSTATX_TXFRAMES256TO511OCTETS 0x03A0 ++#define TITAN_GE_MSTATX_TXFRAMES512TO1023OCTETS 0x03B0 ++#define TITAN_GE_MSTATX_TXFRAMES1024TO1518OCTETS 0x03C0 ++#define TITAN_GE_MSTATX_TXFRAMES1519TOMAXSIZE 0x03D0 ++#define TITAN_GE_MSTATX_TXVARIABLE 0x03E0 ++#define TITAN_GE_MSTATX_RXSYSTEMERROR 0x03F0 ++#define TITAN_GE_MSTATX_SINGLECOLLISION 0x0400 ++#define TITAN_GE_MSTATX_MULTIPLECOLLISION 0x0410 ++#define TITAN_GE_MSTATX_DEFERREDXMISSIONS 0x0420 ++#define TITAN_GE_MSTATX_LATECOLLISIONS 0x0430 ++#define TITAN_GE_MSTATX_ABORTEDDUETOXSCOLLS 0x0440 ++ ++/* Interrupt specific defines */ ++#define TITAN_GE_DEVICE_ID 0x0000 /* Device ID */ ++#define TITAN_GE_RESET 0x0004 /* Reset reg */ ++#define TITAN_GE_TSB_CTRL_0 0x000C /* TSB Control reg 0 */ ++#define TITAN_GE_TSB_CTRL_1 0x0010 /* TSB Control reg 1 */ ++#define TITAN_GE_INTR_GRP0_STATUS 0x0040 /* General Interrupt Group 0 Status */ ++#define TITAN_GE_INTR_XDMA_CORE_A 0x0048 /* XDMA Channel Interrupt Status, Core A*/ ++#define TITAN_GE_INTR_XDMA_CORE_B 0x004C /* XDMA Channel Interrupt Status, Core B*/ ++#define TITAN_GE_INTR_XDMA_IE 0x0058 /* XDMA Channel Interrupt Enable */ ++#define TITAN_GE_SDQPF_ECC_INTR 0x480C /* SDQPF ECC Interrupt Status */ ++#define TITAN_GE_SDQPF_RXFIFO_CTL 0x4828 /* SDQPF RxFifo Control and Interrupt Enb*/ ++#define TITAN_GE_SDQPF_RXFIFO_INTR 0x482C /* SDQPF RxFifo Interrupt Status */ ++#define TITAN_GE_SDQPF_TXFIFO_CTL 0x4928 /* SDQPF TxFifo Control and Interrupt Enb*/ ++#define TITAN_GE_SDQPF_TXFIFO_INTR 0x492C /* SDQPF TxFifo Interrupt Status */ ++#define TITAN_GE_SDQPF_RXFIFO_0 0x4840 /* SDQPF RxFIFO Enable */ ++#define TITAN_GE_SDQPF_TXFIFO_0 0x4940 /* SDQPF TxFIFO Enable */ ++#define TITAN_GE_XDMA_CONFIG 0x5000 /* XDMA Global Configuration */ ++#define TITAN_GE_XDMA_INTR_SUMMARY 0x5010 /* XDMA Interrupt Summary */ ++#define TITAN_GE_XDMA_BUFADDRPRE 0x5018 /* XDMA Buffer Address Prefix */ ++#define TITAN_GE_XDMA_DESCADDRPRE 0x501C /* XDMA Descriptor Address Prefix */ ++#define TITAN_GE_XDMA_PORTWEIGHT 0x502C /* XDMA Port Weight Configuration */ ++ ++/* Rx MAC defines */ ++#define TITAN_GE_RMAC_CONFIG_1 0x1200 /* RMAC Configuration 1 */ ++#define TITAN_GE_RMAC_CONFIG_2 0x1204 /* RMAC Configuration 2 */ ++#define TITAN_GE_RMAC_MAX_FRAME_LEN 0x1208 /* RMAC Max Frame Length */ ++#define TITAN_GE_RMAC_STATION_HI 0x120C /* Rx Station Address High */ ++#define TITAN_GE_RMAC_STATION_MID 0x1210 /* Rx Station Address Middle */ ++#define TITAN_GE_RMAC_STATION_LOW 0x1214 /* Rx Station Address Low */ ++#define TITAN_GE_RMAC_LINK_CONFIG 0x1218 /* RMAC Link Configuration */ ++ ++/* Tx MAC defines */ ++#define TITAN_GE_TMAC_CONFIG_1 0x1240 /* TMAC Configuration 1 */ ++#define TITAN_GE_TMAC_CONFIG_2 0x1244 /* TMAC Configuration 2 */ ++#define TITAN_GE_TMAC_IPG 0x1248 /* TMAC Inter-Packet Gap */ ++#define TITAN_GE_TMAC_STATION_HI 0x124C /* Tx Station Address High */ ++#define TITAN_GE_TMAC_STATION_MID 0x1250 /* Tx Station Address Middle */ ++#define TITAN_GE_TMAC_STATION_LOW 0x1254 /* Tx Station Address Low */ ++#define TITAN_GE_TMAC_MAX_FRAME_LEN 0x1258 /* TMAC Max Frame Length */ ++#define TITAN_GE_TMAC_MIN_FRAME_LEN 0x125C /* TMAC Min Frame Length */ ++#define TITAN_GE_TMAC_PAUSE_FRAME_TIME 0x1260 /* TMAC Pause Frame Time */ ++#define TITAN_GE_TMAC_PAUSE_FRAME_INTERVAL 0x1264 /* TMAC Pause Frame Interval */ ++ ++/* GMII register */ ++#define TITAN_GE_GMII_INTERRUPT_STATUS 0x1348 /* GMII Interrupt Status */ ++#define TITAN_GE_GMII_CONFIG_GENERAL 0x134C /* GMII Configuration General */ ++#define TITAN_GE_GMII_CONFIG_MODE 0x1350 /* GMII Configuration Mode */ ++ ++/* Tx and Rx XDMA defines */ ++#define TITAN_GE_INT_COALESCING 0x5030 /* Interrupt Coalescing */ ++#define TITAN_GE_CHANNEL0_CONFIG 0x5040 /* Channel 0 XDMA config */ ++#define TITAN_GE_CHANNEL0_INTERRUPT 0x504c /* Channel 0 Interrupt Status */ ++#define TITAN_GE_GDI_INTERRUPT_ENABLE 0x5050 /* IE for the GDI Errors */ ++#define TITAN_GE_CHANNEL0_PACKET 0x5060 /* Channel 0 Packet count */ ++#define TITAN_GE_CHANNEL0_BYTE 0x5064 /* Channel 0 Byte count */ ++#define TITAN_GE_CHANNEL0_TX_DESC 0x5054 /* Channel 0 Tx first desc */ ++#define TITAN_GE_CHANNEL0_RX_DESC 0x5058 /* Channel 0 Rx first desc */ ++ ++/* AFX (Address Filter Exact) register offsets for Slice 0 */ ++#define TITAN_GE_AFX_EXACT_MATCH_LOW 0x1100 /* AFX Exact Match Address Low*/ ++#define TITAN_GE_AFX_EXACT_MATCH_MID 0x1104 /* AFX Exact Match Address Mid*/ ++#define TITAN_GE_AFX_EXACT_MATCH_HIGH 0x1108 /* AFX Exact Match Address Hi */ ++#define TITAN_GE_AFX_EXACT_MATCH_VID 0x110C /* AFX Exact Match VID */ ++#define TITAN_GE_AFX_MULTICAST_HASH_LOW 0x1110 /* AFX Multicast HASH Low */ ++#define TITAN_GE_AFX_MULTICAST_HASH_MIDLOW 0x1114 /* AFX Multicast HASH MidLow */ ++#define TITAN_GE_AFX_MULTICAST_HASH_MIDHI 0x1118 /* AFX Multicast HASH MidHi */ ++#define TITAN_GE_AFX_MULTICAST_HASH_HI 0x111C /* AFX Multicast HASH Hi */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 0x1120 /* AFX Address Filter Ctrl 0 */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 0x1124 /* AFX Address Filter Ctrl 1 */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 0x1128 /* AFX Address Filter Ctrl 2 */ ++ ++/* Traffic Groomer block */ ++#define TITAN_GE_TRTG_CONFIG 0x1000 /* TRTG Config */ ++ ++#endif /* _TITAN_GE_H_ */ ++ +diff --git a/drivers/net/titan_mdio.c b/drivers/net/titan_mdio.c +new file mode 100644 +index 0000000..8a8785b +--- /dev/null ++++ b/drivers/net/titan_mdio.c +@@ -0,0 +1,217 @@ ++/* ++ * drivers/net/titan_mdio.c - Driver for Titan ethernet ports ++ * ++ * Copyright (C) 2003 PMC-Sierra Inc. ++ * Author : Manish Lachwani (lachwani@pmc-sierra.com) ++ * ++ * 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. ++ * ++ * Management Data IO (MDIO) driver for the Titan GMII. Interacts with the Marvel PHY ++ * on the Titan. No support for the TBI as yet. ++ * ++ */ ++ ++#include "titan_mdio.h" ++ ++#define MDIO_DEBUG ++ ++/* ++ * Local constants ++ */ ++#define MAX_CLKA 1023 ++#define MAX_PHY_DEV 31 ++#define MAX_PHY_REG 31 ++#define WRITEADDRS_OPCODE 0x0 ++#define READ_OPCODE 0x2 ++#define WRITE_OPCODE 0x1 ++#define MAX_MDIO_POLL 100 ++ ++/* ++ * Titan MDIO and SCMB registers ++ */ ++#define TITAN_GE_SCMB_CONTROL 0x01c0 /* SCMB Control */ ++#define TITAN_GE_SCMB_CLKA 0x01c4 /* SCMB Clock A */ ++#define TITAN_GE_MDIO_COMMAND 0x01d0 /* MDIO Command */ ++#define TITAN_GE_MDIO_DEVICE_PORT_ADDRESS 0x01d4 /* MDIO Device and Port addrs */ ++#define TITAN_GE_MDIO_DATA 0x01d8 /* MDIO Data */ ++#define TITAN_GE_MDIO_INTERRUPTS 0x01dC /* MDIO Interrupts */ ++ ++/* ++ * Function to poll the MDIO ++ */ ++static int titan_ge_mdio_poll(void) ++{ ++ int i, val; ++ ++ for (i = 0; i < MAX_MDIO_POLL; i++) { ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ ++ if (!(val & 0x8000)) ++ return TITAN_GE_MDIO_GOOD; ++ } ++ ++ return TITAN_GE_MDIO_ERROR; ++} ++ ++ ++/* ++ * Initialize and configure the MDIO ++ */ ++int titan_ge_mdio_setup(titan_ge_mdio_config *titan_mdio) ++{ ++ unsigned long val; ++ ++ /* Reset the SCMB and program into MDIO mode*/ ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x9000); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x1000); ++ ++ /* CLK A */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_SCMB_CLKA); ++ val = ( (val & ~(0x03ff)) | (titan_mdio->clka & 0x03ff)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CLKA, val); ++ ++ /* Preamble Suppresion */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0001)) | (titan_mdio->mdio_spre & 0x0001)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ /* MDIO mode */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x4000)) | (titan_mdio->mdio_mode & 0x4000)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Set the PHY address in indirect mode ++ */ ++int titan_ge_mdio_inaddrs(int dev_addr, int reg_addr) ++{ ++ volatile unsigned long val; ++ ++ /* Setup the PHY device */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ /* Write the new address */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (WRITEADDRS_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Read the MDIO register. This is what the individual parametes mean: ++ * ++ * dev_addr : PHY ID ++ * reg_addr : register offset ++ * ++ * See the spec for the Titan MAC. We operate in the Direct Mode. ++ */ ++ ++#define MAX_RETRIES 2 ++ ++int titan_ge_mdio_read(int dev_addr, int reg_addr, unsigned int *pdata) ++{ ++ volatile unsigned long val; ++ int retries = 0; ++ ++ /* Setup the PHY device */ ++ ++again: ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ val |= 0x4000; ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ udelay(30); ++ ++ /* Issue the read command */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (READ_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ udelay(30); ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ *pdata = (unsigned int)TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DATA); ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS); ++ ++ udelay(30); ++ ++ if (val & 0x2) { ++ if (retries == MAX_RETRIES) ++ return TITAN_GE_MDIO_ERROR; ++ else { ++ retries++; ++ goto again; ++ } ++ } ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Write to the MDIO register ++ * ++ * dev_addr : PHY ID ++ * reg_addr : register that needs to be written to ++ * ++ */ ++int titan_ge_mdio_write(int dev_addr, int reg_addr, unsigned int data) ++{ ++ volatile unsigned long val; ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ /* Setup the PHY device */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ val |= 0x4000; ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ udelay(30); ++ ++ /* Setup the data to write */ ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DATA, data); ++ ++ udelay(30); ++ ++ /* Issue the write command */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (WRITE_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ udelay(30); ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS); ++ if (val & 0x2) ++ return TITAN_GE_MDIO_ERROR; ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ +diff --git a/drivers/net/titan_mdio.h b/drivers/net/titan_mdio.h +new file mode 100644 +index 0000000..5d23344 +--- /dev/null ++++ b/drivers/net/titan_mdio.h +@@ -0,0 +1,56 @@ ++/* ++ * MDIO used to interact with the PHY when using GMII/MII ++ */ ++#ifndef _TITAN_MDIO_H ++#define _TITAN_MDIO_H ++ ++#include ++#include ++#include ++#include "titan_ge.h" ++ ++ ++#define TITAN_GE_MDIO_ERROR (-9000) ++#define TITAN_GE_MDIO_GOOD 0 ++ ++#define TITAN_GE_MDIO_BASE titan_ge_base ++ ++#define TITAN_GE_MDIO_READ(offset) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) ++ ++#define TITAN_GE_MDIO_WRITE(offset, data) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) = (data) ++ ++ ++/* GMII specific registers */ ++#define TITAN_GE_MARVEL_PHY_ID 0x00 ++#define TITAN_PHY_AUTONEG_ADV 0x04 ++#define TITAN_PHY_LP_ABILITY 0x05 ++#define TITAN_GE_MDIO_MII_CTRL 0x09 ++#define TITAN_GE_MDIO_MII_EXTENDED 0x0f ++#define TITAN_GE_MDIO_PHY_CTRL 0x10 ++#define TITAN_GE_MDIO_PHY_STATUS 0x11 ++#define TITAN_GE_MDIO_PHY_IE 0x12 ++#define TITAN_GE_MDIO_PHY_IS 0x13 ++#define TITAN_GE_MDIO_PHY_LED 0x18 ++#define TITAN_GE_MDIO_PHY_LED_OVER 0x19 ++#define PHY_ANEG_TIME_WAIT 45 /* 45 seconds wait time */ ++ ++/* ++ * MDIO Config Structure ++ */ ++typedef struct { ++ unsigned int clka; ++ int mdio_spre; ++ int mdio_mode; ++} titan_ge_mdio_config; ++ ++/* ++ * Function Prototypes ++ */ ++int titan_ge_mdio_setup(titan_ge_mdio_config *); ++int titan_ge_mdio_inaddrs(int, int); ++int titan_ge_mdio_read(int, int, unsigned int *); ++int titan_ge_mdio_write(int, int, unsigned int); ++ ++#endif /* _TITAN_MDIO_H */ +diff --git a/drivers/net/wireless/rtl818x/rtl8187/rfkill.c b/drivers/net/wireless/rtl818x/rtl8187/rfkill.c +index 3411671..4d252c1 100644 +--- a/drivers/net/wireless/rtl818x/rtl8187/rfkill.c ++++ b/drivers/net/wireless/rtl818x/rtl8187/rfkill.c +@@ -22,6 +22,10 @@ + + static bool rtl8187_is_radio_enabled(struct rtl8187_priv *priv) + { ++#ifdef CONFIG_LEMOTE_MACH2F ++ /* Allow users to activate rfkill through only the /sys interface */ ++ return 1; ++#else + u8 gpio; + + gpio = rtl818x_ioread8(priv, &priv->map->GPIO0); +@@ -29,6 +33,7 @@ static bool rtl8187_is_radio_enabled(struct rtl8187_priv *priv) + gpio = rtl818x_ioread8(priv, &priv->map->GPIO1); + + return gpio & priv->rfkill_mask; ++#endif + } + + void rtl8187_rfkill_init(struct ieee80211_hw *hw) +diff --git a/drivers/platform/Kconfig b/drivers/platform/Kconfig +index 09fde58..eacabd1 100644 +--- a/drivers/platform/Kconfig ++++ b/drivers/platform/Kconfig +@@ -4,5 +4,8 @@ endif + if GOLDFISH + source "drivers/platform/goldfish/Kconfig" + endif ++if MIPS ++source "drivers/platform/mips/Kconfig" ++endif + + source "drivers/platform/chrome/Kconfig" +diff --git a/drivers/platform/Makefile b/drivers/platform/Makefile +index 3656b7b..ca26925 100644 +--- a/drivers/platform/Makefile ++++ b/drivers/platform/Makefile +@@ -3,6 +3,7 @@ + # + + obj-$(CONFIG_X86) += x86/ ++obj-$(CONFIG_MIPS) += mips/ + obj-$(CONFIG_OLPC) += olpc/ + obj-$(CONFIG_GOLDFISH) += goldfish/ + obj-$(CONFIG_CHROME_PLATFORMS) += chrome/ +diff --git a/drivers/platform/mips/Kconfig b/drivers/platform/mips/Kconfig +new file mode 100644 +index 0000000..722d690 +--- /dev/null ++++ b/drivers/platform/mips/Kconfig +@@ -0,0 +1,60 @@ ++# ++# MIPS Platform Specific Drivers ++# ++ ++menuconfig MIPS_PLATFORM_DEVICES ++ bool "MIPS Platform Specific Device Drivers" ++ default y ++ help ++ Say Y here to get to see options for device drivers of various ++ MIPS platforms, including vendor-specific netbook/laptop/pc extension ++ drivers. This option alone does not add any kernel code. ++ ++ If you say N, all options in this submenu will be skipped and disabled. ++ ++if MIPS_PLATFORM_DEVICES ++ ++config LEMOTE_YEELOONG2F ++ tristate "Lemote YeeLoong Laptop" ++ depends on LEMOTE_MACH2F ++ select BACKLIGHT_LCD_SUPPORT ++ select LCD_CLASS_DEVICE ++ select BACKLIGHT_CLASS_DEVICE ++ select POWER_SUPPLY ++ select HWMON ++ select VIDEO_OUTPUT_CONTROL ++ select INPUT_SPARSEKMAP ++ select INPUT_EVDEV ++ depends on INPUT ++ default m ++ help ++ YeeLoong netbook is a mini laptop made by Lemote, which is basically ++ compatible to FuLoong2F mini PC, but it has an extra Embedded ++ Controller(kb3310b) for battery, hotkey, backlight, temperature and ++ fan management. ++ ++config LEMOTE_LYNLOONG2F ++ tristate "Lemote LynLoong PC" ++ depends on LEMOTE_MACH2F ++ select BACKLIGHT_LCD_SUPPORT ++ select BACKLIGHT_CLASS_DEVICE ++ select VIDEO_OUTPUT_CONTROL ++ default m ++ help ++ LynLoong PC is an AllINONE machine made by Lemote, which is basically ++ compatible to FuLoong2F Mini PC, the only difference is that it has a ++ size-fixed screen: 1360x768 with sisfb video driver. and also, it has ++ its own specific suspend support. ++ ++config GDIUM_LAPTOP ++ tristate "GDIUM laptop extras" ++ depends on DEXXON_GDIUM ++ select POWER_SUPPLY ++ select I2C ++ select INPUT_POLLDEV ++ default m ++ help ++ This mini-driver drives the ST7 chipset present in the Gdium laptops. ++ This gives battery support, wlan rfkill. ++ ++endif # MIPS_PLATFORM_DEVICES +diff --git a/drivers/platform/mips/Makefile b/drivers/platform/mips/Makefile +new file mode 100644 +index 0000000..f013e78 +--- /dev/null ++++ b/drivers/platform/mips/Makefile +@@ -0,0 +1,9 @@ ++# ++# Makefile for MIPS Platform-Specific Drivers ++# ++ ++obj-$(CONFIG_LEMOTE_YEELOONG2F) += yeeloong_laptop.o # yeeloong_ecrom.o ++CFLAGS_yeeloong_laptop.o = -I$(srctree)/arch/mips/loongson/lemote-2f ++ ++obj-$(CONFIG_LEMOTE_LYNLOONG2F) += lynloong_pc.o ++obj-$(CONFIG_GDIUM_LAPTOP) += gdium_laptop.o +diff --git a/drivers/platform/mips/gdium_laptop.c b/drivers/platform/mips/gdium_laptop.c +new file mode 100644 +index 0000000..41a65ad +--- /dev/null ++++ b/drivers/platform/mips/gdium_laptop.c +@@ -0,0 +1,927 @@ ++/* ++ * gdium_laptop -- Gdium laptop extras ++ * ++ * Arnaud Patard ++ * ++ * 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. ++ * ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* For input device */ ++#define SCAN_INTERVAL 150 ++ ++/* For battery status */ ++#define BAT_SCAN_INTERVAL 500 ++ ++#define EC_FIRM_VERSION 0 ++ ++#if CONFIG_GDIUM_VERSION > 2 ++#define EC_REG_BASE 1 ++#else ++#define EC_REG_BASE 0 ++#endif ++ ++#define EC_STATUS (EC_REG_BASE+0) ++#define EC_STATUS_LID (1<<0) ++#define EC_STATUS_PWRBUT (1<<1) ++#define EC_STATUS_BATID (1<<2) /* this bit has no real meaning on v2. */ ++ /* Same as EC_STATUS_ADAPT */ ++ /* but on v3 it's BATID which mean bat present */ ++#define EC_STATUS_SYS_POWER (1<<3) ++#define EC_STATUS_WLAN (1<<4) ++#define EC_STATUS_ADAPT (1<<5) ++ ++#define EC_CTRL (EC_REG_BASE+1) ++#define EC_CTRL_DDR_CLK (1<<0) ++#define EC_CTRL_CHARGE_LED (1<<1) ++#define EC_CTRL_BEEP (1<<2) ++#define EC_CTRL_SUSB (1<<3) /* memory power */ ++#define EC_CTRL_TRICKLE (1<<4) ++#define EC_CTRL_WLAN_EN (1<<5) ++#define EC_CTRL_SUSC (1<<6) /* main power */ ++#define EC_CTRL_CHARGE_EN (1<<7) ++ ++#define EC_BAT_LOW (EC_REG_BASE+2) ++#define EC_BAT_HIGH (EC_REG_BASE+3) ++ ++#define EC_SIGN (EC_REG_BASE+4) ++#define EC_SIGN_OS 0xAE /* write 0xae to control pm stuff */ ++#define EC_SIGN_EC 0x00 /* write 0x00 to let the st7 manage pm stuff */ ++ ++#if 0 ++#define EC_TEST (EC_REG_BASE+5) /* Depending on firmware version this register */ ++ /* may be the programmation register so don't play */ ++ /* with it */ ++#endif ++ ++#define BAT_VOLT_PRESENT 500000 /* Min voltage to consider battery present uV */ ++#define BAT_MIN 7000000 /* Min battery voltage in uV */ ++#define BAT_MIN_MV 7000 /* Min battery voltage in mV */ ++#define BAT_TRICKLE_EN 8000000 /* Charging at 1.4A before 8.0V and then charging at 0.25A */ ++#define BAT_MAX 7950000 /* Max battery voltage ~8V in V */ ++#define BAT_MAX_MV 7950 /* Max battery voltage ~8V in V */ ++#define BAT_READ_ERROR 300000 /* battery read error of 0.3V */ ++#define BAT_READ_ERROR_MV 300 /* battery read error of 0.3V */ ++ ++#define SM502_WLAN_ON (224+16)/* SM502 GPIO16 may be used on gdium v2 (v3?) as wlan_on */ ++ /* when R422 is connected */ ++ ++static unsigned char verbose; ++static unsigned char gpio16; ++static unsigned char ec; ++module_param(verbose, byte, S_IRUGO | S_IWUSR); ++MODULE_PARM_DESC(verbose, "Add some debugging messages"); ++module_param(gpio16, byte, S_IRUGO); ++MODULE_PARM_DESC(gpio16, "Enable wlan_on signal on SM502"); ++module_param(ec, byte, S_IRUGO); ++MODULE_PARM_DESC(ec, "Let the ST7 handle the battery (default OS)"); ++ ++struct gdium_laptop_data { ++ struct i2c_client *client; ++ struct input_polled_dev *input_polldev; ++ struct dentry *debugfs; ++ struct mutex mutex; ++ struct platform_device *bat_pdev; ++ struct power_supply gdium_ac; ++ struct power_supply gdium_battery; ++ struct workqueue_struct *workqueue; ++ struct delayed_work work; ++ char charge_cmd; ++ /* important registers value */ ++ char status; ++ char ctrl; ++ /* mV */ ++ int battery_level; ++ char version; ++}; ++ ++/**********************************************************************/ ++/* Low level I2C functions */ ++/* All are supposed to be called with mutex held */ ++/**********************************************************************/ ++/* ++ * Return battery voltage in mV ++ * >= 0 battery voltage ++ * < 0 error ++ */ ++static s32 ec_read_battery(struct i2c_client *client) ++{ ++ unsigned char bat_low, bat_high; ++ s32 data; ++ unsigned int ret; ++ ++ /* ++ * a = battery high ++ * b = battery low ++ * bat = a << 2 | b & 0x03; ++ * battery voltage = (bat / 1024) * 5 * 2 ++ */ ++ data = i2c_smbus_read_byte_data(client, EC_BAT_LOW); ++ if (data < 0) { ++ dev_err(&client->dev, "ec_read_bat: read bat_low failed\n"); ++ return data; ++ } ++ bat_low = data & 0xff; ++ if (verbose) ++ dev_info(&client->dev, "bat_low %x\n", bat_low); ++ ++ data = i2c_smbus_read_byte_data(client, EC_BAT_HIGH); ++ if (data < 0) { ++ dev_err(&client->dev, "ec_read_bat: read bat_high failed\n"); ++ return data; ++ } ++ bat_high = data & 0xff; ++ if (verbose) ++ dev_info(&client->dev, "bat_high %x\n", bat_high); ++ ++ ret = (bat_high << 2) | (bat_low & 3); ++ /* ++ * mV ++ */ ++ ret = (ret * 5 * 2) * 1000 / 1024; ++ ++ return ret; ++} ++ ++static s32 ec_read_version(struct i2c_client *client) ++{ ++#if CONFIG_GDIUM_VERSION > 2 ++ return i2c_smbus_read_byte_data(client, EC_FIRM_VERSION); ++#else ++ return 0; ++#endif ++} ++ ++static s32 ec_read_status(struct i2c_client *client) ++{ ++ return i2c_smbus_read_byte_data(client, EC_STATUS); ++} ++ ++static s32 ec_read_ctrl(struct i2c_client *client) ++{ ++ return i2c_smbus_read_byte_data(client, EC_CTRL); ++} ++ ++static s32 ec_write_ctrl(struct i2c_client *client, unsigned char newvalue) ++{ ++ return i2c_smbus_write_byte_data(client, EC_CTRL, newvalue); ++} ++ ++static s32 ec_read_sign(struct i2c_client *client) ++{ ++ return i2c_smbus_read_byte_data(client, EC_SIGN); ++} ++ ++static s32 ec_write_sign(struct i2c_client *client, unsigned char sign) ++{ ++ unsigned char value; ++ s32 ret; ++ ++ ret = i2c_smbus_write_byte_data(client, EC_SIGN, sign); ++ if (ret < 0) { ++ dev_err(&client->dev, "ec_set_control: write failed\n"); ++ return ret; ++ } ++ ++ value = ec_read_sign(client); ++ if (value != sign) { ++ dev_err(&client->dev, "Failed to set control to %s\n", ++ sign == EC_SIGN_OS ? "OS" : "EC"); ++ return -EIO; ++ } ++ ++ return 0; ++} ++ ++#if 0 ++static int ec_power_off(struct i2c_client *client) ++{ ++ char value; ++ int ret; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) { ++ dev_err(&client->dev, "ec_power_off: read failed\n"); ++ return value; ++ } ++ value &= ~(EC_CTRL_SUSB | EC_CTRL_SUSC); ++ ret = ec_write_ctrl(client, value); ++ if (ret < 0) { ++ dev_err(&client->dev, "ec_power_off: write failed\n"); ++ return ret; ++ } ++ ++ return 0; ++} ++#endif ++ ++static s32 ec_wlan_status(struct i2c_client *client) ++{ ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ return (value & EC_CTRL_WLAN_EN) ? 1 : 0; ++} ++ ++static s32 ec_wlan_en(struct i2c_client *client, int on) ++{ ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ value &= ~EC_CTRL_WLAN_EN; ++ if (on) ++ value |= EC_CTRL_WLAN_EN; ++ ++ return ec_write_ctrl(client, value&0xff); ++} ++ ++#if 0 ++static s32 ec_led_status(struct i2c_client *client) ++{ ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ return (value & EC_CTRL_CHARGE_LED) ? 1 : 0; ++} ++#endif ++ ++/* Changing the charging led status has never worked */ ++static s32 ec_led_en(struct i2c_client *client, int on) ++{ ++#if 0 ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ value &= ~EC_CTRL_CHARGE_LED; ++ if (on) ++ value |= EC_CTRL_CHARGE_LED; ++ return ec_write_ctrl(client, value&0xff); ++#else ++ return 0; ++#endif ++} ++ ++static s32 ec_charge_en(struct i2c_client *client, int on, int trickle) ++{ ++ s32 value; ++ s32 set = 0; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ if (on) ++ set |= EC_CTRL_CHARGE_EN; ++ if (trickle) ++ set |= EC_CTRL_TRICKLE; ++ ++ /* Be clever : don't change values if you don't need to */ ++ if ((value & (EC_CTRL_CHARGE_EN | EC_CTRL_TRICKLE)) == set) ++ return 0; ++ ++ value &= ~(EC_CTRL_CHARGE_EN | EC_CTRL_TRICKLE); ++ value |= set; ++ ec_led_en(client, on); ++ return ec_write_ctrl(client, (unsigned char)(value&0xff)); ++ ++} ++ ++/**********************************************************************/ ++/* Input functions */ ++/**********************************************************************/ ++struct gdium_keys { ++ int last_state; ++ int key_code; ++ int mask; ++ int type; ++}; ++ ++static struct gdium_keys gkeys[] = { ++ { ++ .key_code = KEY_WLAN, ++ .mask = EC_STATUS_WLAN, ++ .type = EV_KEY, ++ }, ++ { ++ .key_code = KEY_POWER, ++ .mask = EC_STATUS_PWRBUT, ++ .type = EV_KEY, /*EV_PWR,*/ ++ }, ++ { ++ .key_code = SW_LID, ++ .mask = EC_STATUS_LID, ++ .type = EV_SW, ++ }, ++}; ++ ++static void gdium_laptop_keys_poll(struct input_polled_dev *dev) ++{ ++ int state, i; ++ struct gdium_laptop_data *data = dev->private; ++ struct i2c_client *client = data->client; ++ struct input_dev *input = dev->input; ++ s32 status; ++ ++ mutex_lock(&data->mutex); ++ status = ec_read_status(client); ++ mutex_unlock(&data->mutex); ++ ++ if (status < 0) { ++ /* ++ * Don't know exactly which version of the firmware ++ * has this bug but when the power button is pressed ++ * there are i2c read errors :( ++ */ ++ if ((data->version >= 0x13) && !gkeys[1].last_state) { ++ input_event(input, EV_KEY, KEY_POWER, 1); ++ input_sync(input); ++ gkeys[1].last_state = 1; ++ } ++ return; ++ } ++ ++ for (i = 0; i < ARRAY_SIZE(gkeys); i++) { ++ state = status & gkeys[i].mask; ++ if (state != gkeys[i].last_state) { ++ gkeys[i].last_state = state; ++ /* for power key, we want power & key press/release event */ ++ if (gkeys[i].type == EV_PWR) { ++ input_event(input, EV_KEY, gkeys[i].key_code, !!state); ++ input_sync(input); ++ } ++ /* Disable wifi on key press but not key release */ ++ /* ++ * On firmware >= 0x13 the EC_STATUS_WLAN has it's ++ * original meaning of Wifi status and no more the ++ * wifi button status so we have to ignore the event ++ * on theses versions ++ */ ++ if (state && (gkeys[i].key_code == KEY_WLAN) && (data->version < 0x13)) { ++ mutex_lock(&data->mutex); ++ ec_wlan_en(client, !ec_wlan_status(client)); ++ if (gpio16) ++ gpio_set_value(SM502_WLAN_ON, !ec_wlan_status(client)); ++ mutex_unlock(&data->mutex); ++ } ++ ++ input_event(input, gkeys[i].type, gkeys[i].key_code, !!state); ++ input_sync(input); ++ } ++ } ++} ++ ++static int gdium_laptop_input_init(struct gdium_laptop_data *data) ++{ ++ struct i2c_client *client = data->client; ++ struct input_dev *input; ++ int ret, i; ++ ++ data->input_polldev = input_allocate_polled_device(); ++ if (!data->input_polldev) { ++ ret = -ENOMEM; ++ goto err; ++ } ++ ++ input = data->input_polldev->input; ++ input->evbit[0] = BIT(EV_KEY) | BIT_MASK(EV_PWR) | BIT_MASK(EV_SW); ++ data->input_polldev->poll = gdium_laptop_keys_poll; ++ data->input_polldev->poll_interval = SCAN_INTERVAL; ++ data->input_polldev->private = data; ++ input->name = "gdium-keys"; ++ input->dev.parent = &client->dev; ++ ++ input->id.bustype = BUS_HOST; ++ input->id.vendor = 0x0001; ++ input->id.product = 0x0001; ++ input->id.version = 0x0100; ++ ++ for (i = 0; i < ARRAY_SIZE(gkeys); i++) ++ input_set_capability(input, gkeys[i].type, gkeys[i].key_code); ++ ++ ret = input_register_polled_device(data->input_polldev); ++ if (ret) { ++ dev_err(&client->dev, "Unable to register button device\n"); ++ goto err_poll_dev; ++ } ++ ++ return 0; ++ ++err_poll_dev: ++ input_free_polled_device(data->input_polldev); ++err: ++ return ret; ++} ++ ++static void gdium_laptop_input_exit(struct gdium_laptop_data *data) ++{ ++ input_unregister_polled_device(data->input_polldev); ++ input_free_polled_device(data->input_polldev); ++} ++ ++/**********************************************************************/ ++/* Battery management */ ++/**********************************************************************/ ++static int gdium_ac_get_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ char status; ++ struct gdium_laptop_data *data = container_of(psy, struct gdium_laptop_data, gdium_ac); ++ int ret = 0; ++ ++ if (!data) { ++ pr_err("gdium-ac: gdium_laptop_data not found\n"); ++ return -EINVAL; ++ } ++ ++ status = data->status; ++ switch (psp) { ++ case POWER_SUPPLY_PROP_ONLINE: ++ val->intval = !!(status & EC_STATUS_ADAPT); ++ break; ++ default: ++ ret = -EINVAL; ++ break; ++ } ++ ++ return ret; ++} ++ ++#undef RET ++#define RET (val->intval) ++ ++static int gdium_battery_get_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ char status, ctrl; ++ struct gdium_laptop_data *data = container_of(psy, struct gdium_laptop_data, gdium_battery); ++ int percentage_capacity = 0, charge_now = 0, time_to_empty = 0; ++ int ret = 0, tmp; ++ ++ if (!data) { ++ pr_err("gdium-battery: gdium_laptop_data not found\n"); ++ return -EINVAL; ++ } ++ ++ status = data->status; ++ ctrl = data->ctrl; ++ switch (psp) { ++ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: ++ /* uAh */ ++ RET = 5000000; ++ break; ++ case POWER_SUPPLY_PROP_CURRENT_NOW: ++ case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW: ++ /* This formula is gotten by gnuplot with the statistic data */ ++ time_to_empty = (data->battery_level - BAT_MIN_MV + BAT_READ_ERROR_MV) * 113 - 29870; ++ if (psp == POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW) { ++ /* seconds */ ++ RET = time_to_empty / 10; ++ break; ++ } ++ /* fall through */ ++ case POWER_SUPPLY_PROP_CHARGE_NOW: ++ case POWER_SUPPLY_PROP_CAPACITY: { ++ tmp = data->battery_level * 1000; ++ /* > BAT_MIN to avoid negative values */ ++ percentage_capacity = 0; ++ if ((status & EC_STATUS_BATID) && (tmp > BAT_MIN)) ++ percentage_capacity = (tmp-BAT_MIN)*100/(BAT_MAX-BAT_MIN); ++ ++ if (percentage_capacity > 100) ++ percentage_capacity = 100; ++ ++ if (psp == POWER_SUPPLY_PROP_CAPACITY) { ++ RET = percentage_capacity; ++ break; ++ } ++ charge_now = 50000 * percentage_capacity; ++ if (psp == POWER_SUPPLY_PROP_CHARGE_NOW) { ++ /* uAh */ ++ RET = charge_now; ++ break; ++ } ++ } /* fall through */ ++ case POWER_SUPPLY_PROP_STATUS: { ++ if (status & EC_STATUS_ADAPT) ++ if (ctrl & EC_CTRL_CHARGE_EN) ++ RET = POWER_SUPPLY_STATUS_CHARGING; ++ else ++ RET = POWER_SUPPLY_STATUS_NOT_CHARGING; ++ else ++ RET = POWER_SUPPLY_STATUS_DISCHARGING; ++ ++ if (psp == POWER_SUPPLY_PROP_STATUS) ++ break; ++ /* mAh -> µA */ ++ switch (RET) { ++ case POWER_SUPPLY_STATUS_CHARGING: ++ RET = -(data->charge_cmd == 2) ? 1400000 : 250000; ++ break; ++ case POWER_SUPPLY_STATUS_DISCHARGING: ++ RET = charge_now / time_to_empty * 36000; ++ break; ++ case POWER_SUPPLY_STATUS_NOT_CHARGING: ++ default: ++ RET = 0; ++ break; ++ } ++ } break; ++ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: ++ RET = BAT_MAX+BAT_READ_ERROR; ++ break; ++ case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: ++ RET = BAT_MIN-BAT_READ_ERROR; ++ break; ++ case POWER_SUPPLY_PROP_VOLTAGE_NOW: ++ /* mV -> uV */ ++ RET = data->battery_level * 1000; ++ break; ++ case POWER_SUPPLY_PROP_PRESENT: ++#if CONFIG_GDIUM_VERSION > 2 ++ RET = !!(status & EC_STATUS_BATID); ++#else ++ RET = !!(data->battery_level > BAT_VOLT_PRESENT); ++#endif ++ break; ++ case POWER_SUPPLY_PROP_CAPACITY_LEVEL: ++ tmp = data->battery_level * 1000; ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; ++ if (status & EC_STATUS_BATID) { ++ if (tmp >= BAT_MAX) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_HIGH; ++ if (tmp >= BAT_MAX+BAT_READ_ERROR) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_FULL; ++ } else if (tmp <= BAT_MIN+BAT_READ_ERROR) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_LOW; ++ if (tmp <= BAT_MIN) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; ++ } else ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; ++ } ++ break; ++ case POWER_SUPPLY_PROP_CHARGE_TYPE: ++ if (ctrl & EC_CTRL_TRICKLE) ++ RET = POWER_SUPPLY_CHARGE_TYPE_TRICKLE; ++ else if (ctrl & EC_CTRL_CHARGE_EN) ++ RET = POWER_SUPPLY_CHARGE_TYPE_FAST; ++ else ++ RET = POWER_SUPPLY_CHARGE_TYPE_NONE; ++ break; ++ case POWER_SUPPLY_PROP_CURRENT_MAX: ++ /* 1.4A ? */ ++ RET = 1400000; ++ break; ++ default: ++ break; ++ } ++ ++ return ret; ++} ++#undef RET ++ ++static enum power_supply_property gdium_ac_props[] = { ++ POWER_SUPPLY_PROP_ONLINE, ++}; ++ ++static enum power_supply_property gdium_battery_props[] = { ++ POWER_SUPPLY_PROP_STATUS, ++ POWER_SUPPLY_PROP_PRESENT, ++ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_NOW, ++ POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, ++ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, ++ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, ++ POWER_SUPPLY_PROP_VOLTAGE_NOW, ++ POWER_SUPPLY_PROP_CURRENT_MAX, ++ POWER_SUPPLY_PROP_CURRENT_NOW, ++ POWER_SUPPLY_PROP_CAPACITY, ++ POWER_SUPPLY_PROP_CAPACITY_LEVEL, ++ POWER_SUPPLY_PROP_CHARGE_TYPE, ++}; ++ ++static void gdium_laptop_battery_work(struct work_struct *work) ++{ ++ struct gdium_laptop_data *data = container_of(work, struct gdium_laptop_data, work.work); ++ struct i2c_client *client; ++ int ret; ++ char old_status, old_charge_cmd; ++ char present; ++ s32 status; ++ ++ mutex_lock(&data->mutex); ++ client = data->client; ++ status = ec_read_status(client); ++ ret = ec_read_battery(client); ++ ++ if ((status < 0) || (ret < 0)) ++ goto i2c_read_error; ++ ++ old_status = data->status; ++ old_charge_cmd = data->charge_cmd; ++ data->status = status; ++ ++ /* ++ * Charge only if : ++ * - battery present ++ * - ac adapter plugged in ++ * - battery not fully charged ++ */ ++#if CONFIG_GDIUM_VERSION > 2 ++ present = !!(data->status & EC_STATUS_BATID); ++#else ++ present = !!(ret > BAT_VOLT_PRESENT); ++#endif ++ data->battery_level = 0; ++ if (present) { ++ data->battery_level = (unsigned int)ret; ++ if (data->status & EC_STATUS_ADAPT) ++ data->battery_level -= BAT_READ_ERROR_MV; ++ } ++ ++ data->charge_cmd = 0; ++ if ((data->status & EC_STATUS_ADAPT) && present && (data->battery_level <= BAT_MAX_MV)) ++ data->charge_cmd = (ret < BAT_TRICKLE_EN) ? 2 : 3; ++ ++ ec_charge_en(client, (data->charge_cmd >> 1) & 1, data->charge_cmd & 1); ++ ++ /* ++ * data->ctrl must be set _after_ calling ec_charge_en as this will change the ++ * control register content ++ */ ++ data->ctrl = ec_read_ctrl(client); ++ ++ if ((data->status & EC_STATUS_ADAPT) != (old_status & EC_STATUS_ADAPT)) { ++ power_supply_changed(&data->gdium_ac); ++ /* Send charging/discharging state change */ ++ power_supply_changed(&data->gdium_battery); ++ } else if ((data->status & EC_STATUS_ADAPT) && ++ ((old_charge_cmd&2) != (data->charge_cmd&2))) ++ power_supply_changed(&data->gdium_battery); ++ ++i2c_read_error: ++ mutex_unlock(&data->mutex); ++ queue_delayed_work(data->workqueue, &data->work, msecs_to_jiffies(BAT_SCAN_INTERVAL)); ++} ++ ++static int gdium_laptop_battery_init(struct gdium_laptop_data *data) ++{ ++ int ret; ++ ++ data->bat_pdev = platform_device_register_simple("gdium-battery", 0, NULL, 0); ++ if (IS_ERR(data->bat_pdev)) ++ return PTR_ERR(data->bat_pdev); ++ ++ data->gdium_battery.name = data->bat_pdev->name; ++ data->gdium_battery.properties = gdium_battery_props; ++ data->gdium_battery.num_properties = ARRAY_SIZE(gdium_battery_props); ++ data->gdium_battery.get_property = gdium_battery_get_props; ++ data->gdium_battery.use_for_apm = 1; ++ ++ ret = power_supply_register(&data->bat_pdev->dev, &data->gdium_battery); ++ if (ret) ++ goto err_platform; ++ ++ data->gdium_ac.name = "gdium-ac"; ++ data->gdium_ac.type = POWER_SUPPLY_TYPE_MAINS; ++ data->gdium_ac.properties = gdium_ac_props; ++ data->gdium_ac.num_properties = ARRAY_SIZE(gdium_ac_props); ++ data->gdium_ac.get_property = gdium_ac_get_props; ++/* data->gdium_ac.use_for_apm_ac = 1, */ ++ ++ ret = power_supply_register(&data->bat_pdev->dev, &data->gdium_ac); ++ if (ret) ++ goto err_battery; ++ ++ if (!ec) { ++ INIT_DELAYED_WORK(&data->work, gdium_laptop_battery_work); ++ data->workqueue = create_singlethread_workqueue("gdium-battery-work"); ++ if (!data->workqueue) { ++ ret = -ESRCH; ++ goto err_work; ++ } ++ queue_delayed_work(data->workqueue, &data->work, msecs_to_jiffies(BAT_SCAN_INTERVAL)); ++ } ++ ++ return 0; ++ ++err_work: ++err_battery: ++ power_supply_unregister(&data->gdium_battery); ++err_platform: ++ platform_device_unregister(data->bat_pdev); ++ ++ return ret; ++} ++static void gdium_laptop_battery_exit(struct gdium_laptop_data *data) ++{ ++ if (!ec) { ++ cancel_rearming_delayed_workqueue(data->workqueue, &data->work); ++ destroy_workqueue(data->workqueue); ++ } ++ power_supply_unregister(&data->gdium_battery); ++ power_supply_unregister(&data->gdium_ac); ++ platform_device_unregister(data->bat_pdev); ++} ++ ++/* Debug fs */ ++static int gdium_laptop_regs_show(struct seq_file *s, void *p) ++{ ++ struct gdium_laptop_data *data = s->private; ++ struct i2c_client *client = data->client; ++ ++ mutex_lock(&data->mutex); ++ seq_printf(s, "Version : 0x%02x\n", (unsigned char)ec_read_version(client)); ++ seq_printf(s, "Status : 0x%02x\n", (unsigned char)ec_read_status(client)); ++ seq_printf(s, "Ctrl : 0x%02x\n", (unsigned char)ec_read_ctrl(client)); ++ seq_printf(s, "Sign : 0x%02x\n", (unsigned char)ec_read_sign(client)); ++ seq_printf(s, "Bat Lo : 0x%02x\n", (unsigned char)i2c_smbus_read_byte_data(client, EC_BAT_LOW)); ++ seq_printf(s, "Bat Hi : 0x%02x\n", (unsigned char)i2c_smbus_read_byte_data(client, EC_BAT_HIGH)); ++ seq_printf(s, "Battery : %d uV\n", (unsigned int)ec_read_battery(client) * 1000); ++ seq_printf(s, "Charge cmd : %s %s\n", data->charge_cmd & 2 ? "C" : " ", data->charge_cmd & 1 ? "T" : " "); ++ ++ mutex_unlock(&data->mutex); ++ return 0; ++} ++ ++static int gdium_laptop_regs_open(struct inode *inode, ++ struct file *file) ++{ ++ return single_open(file, gdium_laptop_regs_show, inode->i_private); ++} ++ ++static const struct file_operations gdium_laptop_regs_fops = { ++ .open = gdium_laptop_regs_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .owner = THIS_MODULE, ++}; ++ ++ ++static int gdium_laptop_probe(struct i2c_client *client, const struct i2c_device_id *id) ++{ ++ struct gdium_laptop_data *data; ++ int ret; ++ ++ if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { ++ dev_err(&client->dev, ++ "%s: no smbus_byte support !\n", __func__); ++ return -ENODEV; ++ } ++ ++ data = kzalloc(sizeof(struct gdium_laptop_data), GFP_KERNEL); ++ if (!data) ++ return -ENOMEM; ++ ++ i2c_set_clientdata(client, data); ++ data->client = client; ++ mutex_init(&data->mutex); ++ ++ ret = ec_read_version(client); ++ if (ret < 0) ++ goto err_alloc; ++ ++ data->version = (unsigned char)ret; ++ ++ ret = gdium_laptop_input_init(data); ++ if (ret) ++ goto err_alloc; ++ ++ ret = gdium_laptop_battery_init(data); ++ if (ret) ++ goto err_input; ++ ++ ++ if (!ec) { ++ ret = ec_write_sign(client, EC_SIGN_OS); ++ if (ret) ++ goto err_sign; ++ } ++ ++ if (gpio16) { ++ ret = gpio_request(SM502_WLAN_ON, "wlan-on"); ++ if (ret < 0) ++ goto err_sign; ++ gpio_set_value(SM502_WLAN_ON, ec_wlan_status(client)); ++ gpio_direction_output(SM502_WLAN_ON, 1); ++ } ++ ++ dev_info(&client->dev, "Found firmware 0x%02x\n", data->version); ++ data->debugfs = debugfs_create_file("gdium_laptop", S_IFREG | S_IRUGO, ++ NULL, data, &gdium_laptop_regs_fops); ++ ++ return 0; ++ ++err_sign: ++ gdium_laptop_battery_exit(data); ++err_input: ++ gdium_laptop_input_exit(data); ++err_alloc: ++ kfree(data); ++ return ret; ++} ++ ++static int gdium_laptop_remove(struct i2c_client *client) ++{ ++ struct gdium_laptop_data *data = i2c_get_clientdata(client); ++ ++ if (gpio16) ++ gpio_free(SM502_WLAN_ON); ++ ec_write_sign(client, EC_SIGN_EC); ++ if (data->debugfs) ++ debugfs_remove(data->debugfs); ++ ++ gdium_laptop_battery_exit(data); ++ gdium_laptop_input_exit(data); ++ ++ kfree(data); ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++static int gdium_laptop_suspend(struct i2c_client *client, pm_message_t msg) ++{ ++ struct gdium_laptop_data *data = i2c_get_clientdata(client); ++ ++ if (!ec) ++ cancel_rearming_delayed_workqueue(data->workqueue, &data->work); ++ return 0; ++} ++ ++static int gdium_laptop_resume(struct i2c_client *client) ++{ ++ struct gdium_laptop_data *data = i2c_get_clientdata(client); ++ ++ if (!ec) ++ queue_delayed_work(data->workqueue, &data->work, msecs_to_jiffies(BAT_SCAN_INTERVAL)); ++ return 0; ++} ++#else ++#define gdium_laptop_suspend NULL ++#define gdium_laptop_resume NULL ++#endif ++static const struct i2c_device_id gdium_id[] = { ++ { "gdium-laptop" }, ++ {}, ++}; ++MODULE_DEVICE_TABLE(i2c, gdium_id); ++ ++static struct i2c_driver gdium_laptop_driver = { ++ .driver = { ++ .name = "gdium-laptop", ++ .owner = THIS_MODULE, ++ }, ++ .probe = gdium_laptop_probe, ++ .remove = gdium_laptop_remove, ++ .shutdown = gdium_laptop_remove, ++ .suspend = gdium_laptop_suspend, ++ .resume = gdium_laptop_resume, ++ .id_table = gdium_id, ++}; ++ ++static int __init gdium_laptop_init(void) ++{ ++ return i2c_add_driver(&gdium_laptop_driver); ++} ++ ++static void __exit gdium_laptop_exit(void) ++{ ++ i2c_del_driver(&gdium_laptop_driver); ++} ++ ++module_init(gdium_laptop_init); ++module_exit(gdium_laptop_exit); ++ ++MODULE_AUTHOR("Arnaud Patard "); ++MODULE_DESCRIPTION("Gdium laptop extras"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/mips/lynloong_pc.c b/drivers/platform/mips/lynloong_pc.c +new file mode 100644 +index 0000000..68f29e4 +--- /dev/null ++++ b/drivers/platform/mips/lynloong_pc.c +@@ -0,0 +1,515 @@ ++/* ++ * Driver for LynLoong PC extras ++ * ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin , Xiang Yu ++ * ++ * 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 /* for backlight subdriver */ ++#include ++#include /* for video output subdriver */ ++#include /* for suspend support */ ++ ++#include ++#include ++ ++#include ++ ++static u32 gpio_base, mfgpt_base; ++ ++static void set_gpio_reg_high(int gpio, int reg) ++{ ++ u32 val; ++ ++ val = inl(gpio_base + reg); ++ val |= (1 << gpio); ++ val &= ~(1 << (16 + gpio)); ++ outl(val, gpio_base + reg); ++ mmiowb(); ++} ++ ++static void set_gpio_reg_low(int gpio, int reg) ++{ ++ u32 val; ++ ++ val = inl(gpio_base + reg); ++ val |= (1 << (16 + gpio)); ++ val &= ~(1 << gpio); ++ outl(val, gpio_base + reg); ++ mmiowb(); ++} ++ ++static void set_gpio_output_low(int gpio) ++{ ++ set_gpio_reg_high(gpio, GPIOL_OUT_EN); ++ set_gpio_reg_low(gpio, GPIOL_OUT_VAL); ++} ++ ++static void set_gpio_output_high(int gpio) ++{ ++ set_gpio_reg_high(gpio, GPIOL_OUT_EN); ++ set_gpio_reg_high(gpio, GPIOL_OUT_VAL); ++} ++ ++/* backlight subdriver */ ++ ++#define MAX_BRIGHTNESS 100 ++#define DEFAULT_BRIGHTNESS 50 ++#define MIN_BRIGHTNESS 0 ++static unsigned int level; ++ ++DEFINE_SPINLOCK(backlight_lock); ++/* Tune the brightness */ ++static void setup_mfgpt2(void) ++{ ++ unsigned long flags; ++ ++ spin_lock_irqsave(&backlight_lock, flags); ++ ++ /* Set MFGPT2 comparator 1,2 */ ++ outw(MAX_BRIGHTNESS-level, MFGPT2_CMP1); ++ outw(MAX_BRIGHTNESS, MFGPT2_CMP2); ++ /* Clear MFGPT2 UP COUNTER */ ++ outw(0, MFGPT2_CNT); ++ /* Enable counter, compare mode, 32k */ ++ outw(0x8280, MFGPT2_SETUP); ++ ++ spin_unlock_irqrestore(&backlight_lock, flags); ++} ++ ++static int lynloong_set_brightness(struct backlight_device *bd) ++{ ++ level = (bd->props.fb_blank == FB_BLANK_UNBLANK && ++ bd->props.power == FB_BLANK_UNBLANK) ? ++ bd->props.brightness : 0; ++ ++ if (level > MAX_BRIGHTNESS) ++ level = MAX_BRIGHTNESS; ++ else if (level < MIN_BRIGHTNESS) ++ level = MIN_BRIGHTNESS; ++ ++ setup_mfgpt2(); ++ ++ return 0; ++} ++ ++static int lynloong_get_brightness(struct backlight_device *bd) ++{ ++ return level; ++} ++ ++static struct backlight_ops backlight_ops = { ++ .get_brightness = lynloong_get_brightness, ++ .update_status = lynloong_set_brightness, ++}; ++ ++static struct backlight_device *lynloong_backlight_dev; ++ ++static int lynloong_backlight_init(void) ++{ ++ int ret; ++ u32 hi; ++ struct backlight_properties props; ++ ++ /* Get gpio_base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &gpio_base); ++ /* Get mfgpt_base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &hi, &mfgpt_base); ++ /* Get gpio_base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &gpio_base); ++ ++ /* Select for mfgpt */ ++ set_gpio_reg_high(7, GPIOL_OUT_AUX1_SEL); ++ /* Enable brightness controlling */ ++ set_gpio_output_high(7); ++ ++ memset(&props, 0, sizeof(struct backlight_properties)); ++ props.max_brightness = MAX_BRIGHTNESS; ++ props.type = BACKLIGHT_PLATFORM; ++ lynloong_backlight_dev = backlight_device_register("backlight0", NULL, ++ NULL, &backlight_ops, &props); ++ ++ if (IS_ERR(lynloong_backlight_dev)) { ++ ret = PTR_ERR(lynloong_backlight_dev); ++ return ret; ++ } ++ ++ lynloong_backlight_dev->props.brightness = DEFAULT_BRIGHTNESS; ++ backlight_update_status(lynloong_backlight_dev); ++ ++ return 0; ++} ++ ++static void lynloong_backlight_exit(void) ++{ ++ if (lynloong_backlight_dev) { ++ backlight_device_unregister(lynloong_backlight_dev); ++ lynloong_backlight_dev = NULL; ++ } ++ /* Disable brightness controlling */ ++ set_gpio_output_low(7); ++} ++ ++/* video output driver */ ++static int vo_status = 1; ++ ++static int lcd_video_output_get(struct output_device *od) ++{ ++ return vo_status; ++} ++ ++static int lcd_video_output_set(struct output_device *od) ++{ ++ int i; ++ unsigned long status; ++ ++ status = !!od->request_state; ++ ++ if (status == 0) { ++ /* Set the current status as off */ ++ vo_status = 0; ++ /* Turn off the backlight */ ++ set_gpio_output_low(11); ++ for (i = 0; i < 0x500; i++) ++ delay(); ++ /* Turn off the LCD */ ++ set_gpio_output_high(8); ++ } else { ++ /* Turn on the LCD */ ++ set_gpio_output_low(8); ++ for (i = 0; i < 0x500; i++) ++ delay(); ++ /* Turn on the backlight */ ++ set_gpio_output_high(11); ++ /* Set the current status as on */ ++ vo_status = 1; ++ } ++ ++ return 0; ++} ++ ++static struct output_properties lcd_output_properties = { ++ .set_state = lcd_video_output_set, ++ .get_status = lcd_video_output_get, ++}; ++ ++static struct output_device *lcd_output_dev; ++ ++static void lynloong_lcd_vo_set(int status) ++{ ++ lcd_output_dev->request_state = status; ++ lcd_video_output_set(lcd_output_dev); ++} ++ ++static int lynloong_vo_init(void) ++{ ++ int ret; ++ ++ /* Register video output device: lcd */ ++ lcd_output_dev = video_output_register("LCD", NULL, NULL, ++ &lcd_output_properties); ++ ++ if (IS_ERR(lcd_output_dev)) { ++ ret = PTR_ERR(lcd_output_dev); ++ lcd_output_dev = NULL; ++ return ret; ++ } ++ /* Ensure LCD is on by default */ ++ lynloong_lcd_vo_set(1); ++ ++ return 0; ++} ++ ++static void lynloong_vo_exit(void) ++{ ++ if (lcd_output_dev) { ++ video_output_unregister(lcd_output_dev); ++ lcd_output_dev = NULL; ++ } ++} ++ ++/* suspend support */ ++ ++#ifdef CONFIG_PM ++ ++static u32 smb_base; ++ ++/* I2C operations */ ++ ++static int i2c_wait(void) ++{ ++ char c; ++ int i; ++ ++ udelay(1000); ++ for (i = 0; i < 20; i++) { ++ c = inb(smb_base | SMB_STS); ++ if (c & (SMB_STS_BER | SMB_STS_NEGACK)) ++ return -1; ++ if (c & SMB_STS_SDAST) ++ return 0; ++ udelay(100); ++ } ++ return -2; ++} ++ ++static void i2c_read_single(int addr, int regNo, char *value) ++{ ++ unsigned char c; ++ ++ /* Start condition */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_START, smb_base | SMB_CTRL1); ++ i2c_wait(); ++ ++ /* Send slave address */ ++ outb(addr & 0xfe, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Acknowledge smbus */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_ACK, smb_base | SMB_CTRL1); ++ ++ /* Send register index */ ++ outb(regNo, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Acknowledge smbus */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_ACK, smb_base | SMB_CTRL1); ++ ++ /* Start condition again */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_START, smb_base | SMB_CTRL1); ++ i2c_wait(); ++ ++ /* Send salve address again */ ++ outb(1 | addr, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Acknowledge smbus */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_ACK, smb_base | SMB_CTRL1); ++ ++ /* Read data */ ++ *value = inb(smb_base | SMB_SDA); ++ ++ /* Stop condition */ ++ outb(SMB_CTRL1_STOP, smb_base | SMB_CTRL1); ++ i2c_wait(); ++} ++ ++static void i2c_write_single(int addr, int regNo, char value) ++{ ++ unsigned char c; ++ ++ /* Start condition */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_START, smb_base | SMB_CTRL1); ++ i2c_wait(); ++ /* Send slave address */ ++ outb(addr & 0xfe, smb_base | SMB_SDA); ++ i2c_wait();; ++ ++ /* Send register index */ ++ outb(regNo, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Write data */ ++ outb(value, smb_base | SMB_SDA); ++ i2c_wait(); ++ /* Stop condition */ ++ outb(SMB_CTRL1_STOP, smb_base | SMB_CTRL1); ++ i2c_wait(); ++} ++ ++static void stop_clock(int clk_reg, int clk_sel) ++{ ++ u8 value; ++ ++ i2c_read_single(0xd3, clk_reg, &value); ++ value &= ~(1 << clk_sel); ++ i2c_write_single(0xd2, clk_reg, value); ++} ++ ++static void enable_clock(int clk_reg, int clk_sel) ++{ ++ u8 value; ++ ++ i2c_read_single(0xd3, clk_reg, &value); ++ value |= (1 << clk_sel); ++ i2c_write_single(0xd2, clk_reg, value); ++} ++ ++static char cached_clk_freq; ++static char cached_pci_fixed_freq; ++ ++static void decrease_clk_freq(void) ++{ ++ char value; ++ ++ i2c_read_single(0xd3, 1, &value); ++ cached_clk_freq = value; ++ ++ /* Select frequency by software */ ++ value |= (1 << 1); ++ /* CPU, 3V66, PCI : 100, 66, 33(1) */ ++ value |= (1 << 2); ++ i2c_write_single(0xd2, 1, value); ++ ++ /* Cache the pci frequency */ ++ i2c_read_single(0xd3, 14, &value); ++ cached_pci_fixed_freq = value; ++ ++ /* Enable PCI fix mode */ ++ value |= (1 << 5); ++ /* 3V66, PCI : 64MHz, 32MHz */ ++ value |= (1 << 3); ++ i2c_write_single(0xd2, 14, value); ++ ++} ++ ++static void resume_clk_freq(void) ++{ ++ i2c_write_single(0xd2, 1, cached_clk_freq); ++ i2c_write_single(0xd2, 14, cached_pci_fixed_freq); ++} ++ ++static void stop_clocks(void) ++{ ++ /* CPU Clock Register */ ++ stop_clock(2, 5); /* not used */ ++ stop_clock(2, 6); /* not used */ ++ stop_clock(2, 7); /* not used */ ++ ++ /* PCI Clock Register */ ++ stop_clock(3, 1); /* 8100 */ ++ stop_clock(3, 5); /* SIS */ ++ stop_clock(3, 0); /* not used */ ++ stop_clock(3, 6); /* not used */ ++ ++ /* PCI 48M Clock Register */ ++ stop_clock(4, 6); /* USB grounding */ ++ stop_clock(4, 5); /* REF(5536_14M) */ ++ ++ /* 3V66 Control Register */ ++ stop_clock(5, 0); /* VCH_CLK..., grounding */ ++} ++ ++static void enable_clocks(void) ++{ ++ enable_clock(3, 1); /* 8100 */ ++ enable_clock(3, 5); /* SIS */ ++ ++ enable_clock(4, 6); ++ enable_clock(4, 5); /* REF(5536_14M) */ ++ ++ enable_clock(5, 0); /* VCH_CLOCK, grounding */ ++} ++ ++static int lynloong_suspend(struct device *dev) ++{ ++ /* Disable AMP */ ++ set_gpio_output_high(6); ++ /* Turn off LCD */ ++ lynloong_lcd_vo_set(0); ++ ++ /* Stop the clocks of some devices */ ++ stop_clocks(); ++ ++ /* Decrease the external clock frequency */ ++ decrease_clk_freq(); ++ ++ return 0; ++} ++ ++static int lynloong_resume(struct device *dev) ++{ ++ /* Turn on the LCD */ ++ lynloong_lcd_vo_set(1); ++ ++ /* Resume clock frequency, enable the relative clocks */ ++ resume_clk_freq(); ++ enable_clocks(); ++ ++ /* Enable AMP */ ++ set_gpio_output_low(6); ++ ++ return 0; ++} ++ ++static const SIMPLE_DEV_PM_OPS(lynloong_pm_ops, lynloong_suspend, ++ lynloong_resume); ++#endif /* !CONFIG_PM */ ++ ++static struct platform_device_id platform_device_ids[] = { ++ { ++ .name = "lynloong_pc", ++ }, ++ {} ++}; ++ ++MODULE_DEVICE_TABLE(platform, platform_device_ids); ++ ++static struct platform_driver platform_driver = { ++ .driver = { ++ .name = "lynloong_pc", ++ .owner = THIS_MODULE, ++#ifdef CONFIG_PM ++ .pm = &lynloong_pm_ops, ++#endif ++ }, ++ .id_table = platform_device_ids, ++}; ++ ++static int __init lynloong_init(void) ++{ ++ int ret; ++ ++ pr_info("LynLoong platform specific driver loaded.\n"); ++ ++ /* Register platform stuff */ ++ ret = platform_driver_register(&platform_driver); ++ if (ret) { ++ pr_err("Failed to register LynLoong platform driver.\n"); ++ return ret; ++ } ++ ++ ret = lynloong_backlight_init(); ++ if (ret) { ++ pr_err("Failed to register LynLoong backlight driver.\n"); ++ return ret; ++ } ++ ++ ret = lynloong_vo_init(); ++ if (ret) { ++ pr_err("Failed to register LynLoong backlight driver.\n"); ++ lynloong_vo_exit(); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static void __exit lynloong_exit(void) ++{ ++ lynloong_vo_exit(); ++ lynloong_backlight_exit(); ++ platform_driver_unregister(&platform_driver); ++ ++ pr_info("LynLoong platform specific driver unloaded.\n"); ++} ++ ++module_init(lynloong_init); ++module_exit(lynloong_exit); ++ ++MODULE_AUTHOR("Wu Zhangjin ; Xiang Yu "); ++MODULE_DESCRIPTION("LynLoong PC driver"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/mips/yeeloong_ecrom.c b/drivers/platform/mips/yeeloong_ecrom.c +new file mode 100644 +index 0000000..1bfe4cf +--- /dev/null ++++ b/drivers/platform/mips/yeeloong_ecrom.c +@@ -0,0 +1,944 @@ ++/* ++ * Driver for flushing/dumping ROM of EC on YeeLoong laptop ++ * ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: liujl ++ * ++ * NOTE : ++ * The EC resources accessing and programming are supported. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define EC_MISC_DEV "ec_misc" ++#define EC_IOC_MAGIC 'E' ++ ++/* ec registers range */ ++#define EC_MAX_REGADDR 0xFFFF ++#define EC_MIN_REGADDR 0xF000 ++#define EC_RAM_ADDR 0xF800 ++ ++/* version burned address */ ++#define VER_ADDR 0xf7a1 ++#define VER_MAX_SIZE 7 ++#define EC_ROM_MAX_SIZE 0x10000 ++ ++/* ec internal register */ ++#define REG_POWER_MODE 0xF710 ++#define FLAG_NORMAL_MODE 0x00 ++#define FLAG_IDLE_MODE 0x01 ++#define FLAG_RESET_MODE 0x02 ++ ++/* ec update program flag */ ++#define PROGRAM_FLAG_NONE 0x00 ++#define PROGRAM_FLAG_IE 0x01 ++#define PROGRAM_FLAG_ROM 0x02 ++ ++/* XBI relative registers */ ++#define REG_XBISEG0 0xFEA0 ++#define REG_XBISEG1 0xFEA1 ++#define REG_XBIRSV2 0xFEA2 ++#define REG_XBIRSV3 0xFEA3 ++#define REG_XBIRSV4 0xFEA4 ++#define REG_XBICFG 0xFEA5 ++#define REG_XBICS 0xFEA6 ++#define REG_XBIWE 0xFEA7 ++#define REG_XBISPIA0 0xFEA8 ++#define REG_XBISPIA1 0xFEA9 ++#define REG_XBISPIA2 0xFEAA ++#define REG_XBISPIDAT 0xFEAB ++#define REG_XBISPICMD 0xFEAC ++#define REG_XBISPICFG 0xFEAD ++#define REG_XBISPIDATR 0xFEAE ++#define REG_XBISPICFG2 0xFEAF ++ ++/* commands definition for REG_XBISPICMD */ ++#define SPICMD_WRITE_STATUS 0x01 ++#define SPICMD_BYTE_PROGRAM 0x02 ++#define SPICMD_READ_BYTE 0x03 ++#define SPICMD_WRITE_DISABLE 0x04 ++#define SPICMD_READ_STATUS 0x05 ++#define SPICMD_WRITE_ENABLE 0x06 ++#define SPICMD_HIGH_SPEED_READ 0x0B ++#define SPICMD_POWER_DOWN 0xB9 ++#define SPICMD_SST_EWSR 0x50 ++#define SPICMD_SST_SEC_ERASE 0x20 ++#define SPICMD_SST_BLK_ERASE 0x52 ++#define SPICMD_SST_CHIP_ERASE 0x60 ++#define SPICMD_FRDO 0x3B ++#define SPICMD_SEC_ERASE 0xD7 ++#define SPICMD_BLK_ERASE 0xD8 ++#define SPICMD_CHIP_ERASE 0xC7 ++ ++/* bits definition for REG_XBISPICFG */ ++#define SPICFG_AUTO_CHECK 0x01 ++#define SPICFG_SPI_BUSY 0x02 ++#define SPICFG_DUMMY_READ 0x04 ++#define SPICFG_EN_SPICMD 0x08 ++#define SPICFG_LOW_SPICS 0x10 ++#define SPICFG_EN_SHORT_READ 0x20 ++#define SPICFG_EN_OFFSET_READ 0x40 ++#define SPICFG_EN_FAST_READ 0x80 ++ ++/* watchdog timer registers */ ++#define REG_WDTCFG 0xfe80 ++#define REG_WDTPF 0xfe81 ++#define REG_WDT 0xfe82 ++ ++/* lpc configure register */ ++#define REG_LPCCFG 0xfe95 ++ ++/* 8051 reg */ ++#define REG_PXCFG 0xff14 ++ ++/* Fan register in KB3310 */ ++#define REG_ECFAN_SPEED_LEVEL 0xf4e4 ++#define REG_ECFAN_SWITCH 0xf4d2 ++ ++/* the ec flash rom id number */ ++#define EC_ROM_PRODUCT_ID_SPANSION 0x01 ++#define EC_ROM_PRODUCT_ID_MXIC 0xC2 ++#define EC_ROM_PRODUCT_ID_AMIC 0x37 ++#define EC_ROM_PRODUCT_ID_EONIC 0x1C ++ ++/* misc ioctl operations */ ++#define IOCTL_RDREG _IOR(EC_IOC_MAGIC, 1, int) ++#define IOCTL_WRREG _IOW(EC_IOC_MAGIC, 2, int) ++#define IOCTL_READ_EC _IOR(EC_IOC_MAGIC, 3, int) ++#define IOCTL_PROGRAM_IE _IOW(EC_IOC_MAGIC, 4, int) ++#define IOCTL_PROGRAM_EC _IOW(EC_IOC_MAGIC, 5, int) ++ ++/* start address for programming of EC content or IE */ ++/* ec running code start address */ ++#define EC_START_ADDR 0x00000000 ++/* ec information element storing address */ ++#define IE_START_ADDR 0x00020000 ++ ++/* EC state */ ++#define EC_STATE_IDLE 0x00 /* ec in idle state */ ++#define EC_STATE_BUSY 0x01 /* ec in busy state */ ++ ++/* timeout value for programming */ ++#define EC_FLASH_TIMEOUT 0x1000 /* ec program timeout */ ++/* command checkout timeout including cmd to port or state flag check */ ++#define EC_CMD_TIMEOUT 0x1000 ++#define EC_SPICMD_STANDARD_TIMEOUT (4 * 1000) /* unit : us */ ++#define EC_MAX_DELAY_UNIT (10) /* every time for polling */ ++#define SPI_FINISH_WAIT_TIME 10 ++/* EC content max size */ ++#define EC_CONTENT_MAX_SIZE (64 * 1024) ++#define IE_CONTENT_MAX_SIZE (0x100000 - IE_START_ADDR) ++ ++/* the register operation access struct */ ++struct ec_reg { ++ u32 addr; /* the address of kb3310 registers */ ++ u8 val; /* the register value */ ++}; ++ ++struct ec_info { ++ u32 start_addr; ++ u32 size; ++ u8 *buf; ++}; ++ ++/* open for using rom protection action */ ++#define EC_ROM_PROTECTION ++ ++/* enable the chip reset mode */ ++static int ec_init_reset_mode(void) ++{ ++ int timeout; ++ unsigned char status = 0; ++ int ret = 0; ++ ++ /* make chip goto reset mode */ ++ ret = ec_query_seq(CMD_INIT_RESET_MODE); ++ if (ret < 0) { ++ printk(KERN_ERR "ec init reset mode failed.\n"); ++ goto out; ++ } ++ ++ /* make the action take active */ ++ timeout = EC_CMD_TIMEOUT; ++ status = ec_read(REG_POWER_MODE) & FLAG_RESET_MODE; ++ while (timeout--) { ++ if (status) { ++ udelay(EC_REG_DELAY); ++ break; ++ } ++ status = ec_read(REG_POWER_MODE) & FLAG_RESET_MODE; ++ udelay(EC_REG_DELAY); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR "ec rom fixup : can't check reset status.\n"); ++ ret = -EINVAL; ++ } else ++ printk(KERN_INFO "(%d/%d)reset 0xf710 : 0x%x\n", timeout, ++ EC_CMD_TIMEOUT - timeout, status); ++ ++ /* set MCU to reset mode */ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_PXCFG); ++ status |= (1 << 0); ++ ec_write(REG_PXCFG, status); ++ udelay(EC_REG_DELAY); ++ ++ /* disable FWH/LPC */ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_LPCCFG); ++ status &= ~(1 << 7); ++ ec_write(REG_LPCCFG, status); ++ udelay(EC_REG_DELAY); ++ ++ printk(KERN_INFO "entering reset mode ok..............\n"); ++ ++ out: ++ return ret; ++} ++ ++/* make ec exit from reset mode */ ++static void ec_exit_reset_mode(void) ++{ ++ unsigned char regval; ++ ++ udelay(EC_REG_DELAY); ++ regval = ec_read(REG_LPCCFG); ++ regval |= (1 << 7); ++ ec_write(REG_LPCCFG, regval); ++ regval = ec_read(REG_PXCFG); ++ regval &= ~(1 << 0); ++ ec_write(REG_PXCFG, regval); ++ printk(KERN_INFO "exit reset mode ok..................\n"); ++ ++ return; ++} ++ ++/* make ec disable WDD */ ++static void ec_disable_WDD(void) ++{ ++ unsigned char status; ++ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_WDTCFG); ++ ec_write(REG_WDTPF, 0x03); ++ ec_write(REG_WDTCFG, (status & 0x80) | 0x48); ++ printk(KERN_INFO "Disable WDD ok..................\n"); ++ ++ return; ++} ++ ++/* make ec enable WDD */ ++static void ec_enable_WDD(void) ++{ ++ unsigned char status; ++ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_WDTCFG); ++ ec_write(REG_WDT, 0x28); /* set WDT 5sec(0x28) */ ++ ec_write(REG_WDTCFG, (status & 0x80) | 0x03); ++ printk(KERN_INFO "Enable WDD ok..................\n"); ++ ++ return; ++} ++ ++/* make ec goto idle mode */ ++static int ec_init_idle_mode(void) ++{ ++ int timeout; ++ unsigned char status = 0; ++ int ret = 0; ++ ++ ec_query_seq(CMD_INIT_IDLE_MODE); ++ ++ /* make the action take active */ ++ timeout = EC_CMD_TIMEOUT; ++ status = ec_read(REG_POWER_MODE) & FLAG_IDLE_MODE; ++ while (timeout--) { ++ if (status) { ++ udelay(EC_REG_DELAY); ++ break; ++ } ++ status = ec_read(REG_POWER_MODE) & FLAG_IDLE_MODE; ++ udelay(EC_REG_DELAY); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR "ec rom fixup : can't check out the status.\n"); ++ ret = -EINVAL; ++ } else ++ printk(KERN_INFO "(%d/%d)0xf710 : 0x%x\n", timeout, ++ EC_CMD_TIMEOUT - timeout, ec_read(REG_POWER_MODE)); ++ ++ printk(KERN_INFO "entering idle mode ok...................\n"); ++ ++ return ret; ++} ++ ++/* make ec exit from idle mode */ ++static int ec_exit_idle_mode(void) ++{ ++ ++ ec_query_seq(CMD_EXIT_IDLE_MODE); ++ ++ printk(KERN_INFO "exit idle mode ok...................\n"); ++ ++ return 0; ++} ++ ++static int ec_instruction_cycle(void) ++{ ++ unsigned long timeout; ++ int ret = 0; ++ ++ timeout = EC_FLASH_TIMEOUT; ++ while (timeout-- >= 0) { ++ if (!(ec_read(REG_XBISPICFG) & SPICFG_SPI_BUSY)) ++ break; ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR ++ "EC_INSTRUCTION_CYCLE : timeout for check flag.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ out: ++ return ret; ++} ++ ++/* To see if the ec is in busy state or not. */ ++static inline int ec_flash_busy(unsigned long timeout) ++{ ++ /* assurance the first command be going to rom */ ++ if (ec_instruction_cycle() < 0) ++ return EC_STATE_BUSY; ++#if 1 ++ timeout = timeout / EC_MAX_DELAY_UNIT; ++ while (timeout-- > 0) { ++ /* check the rom's status of busy flag */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (ec_instruction_cycle() < 0) ++ return EC_STATE_BUSY; ++ if ((ec_read(REG_XBISPIDAT) & 0x01) == 0x00) ++ return EC_STATE_IDLE; ++ udelay(EC_MAX_DELAY_UNIT); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR ++ "EC_FLASH_BUSY : timeout for check rom flag.\n"); ++ return EC_STATE_BUSY; ++ } ++#else ++ /* check the rom's status of busy flag */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (ec_instruction_cycle() < 0) ++ return EC_STATE_BUSY; ++ ++ timeout = timeout / EC_MAX_DELAY_UNIT; ++ while (timeout-- > 0) { ++ if ((ec_read(REG_XBISPIDAT) & 0x01) == 0x00) ++ return EC_STATE_IDLE; ++ udelay(EC_MAX_DELAY_UNIT); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR ++ "EC_FLASH_BUSY : timeout for check rom flag.\n"); ++ return EC_STATE_BUSY; ++ } ++#endif ++ ++ return EC_STATE_IDLE; ++} ++ ++static int rom_instruction_cycle(unsigned char cmd) ++{ ++ unsigned long timeout = 0; ++ ++ switch (cmd) { ++ case SPICMD_READ_STATUS: ++ case SPICMD_WRITE_ENABLE: ++ case SPICMD_WRITE_DISABLE: ++ case SPICMD_READ_BYTE: ++ case SPICMD_HIGH_SPEED_READ: ++ timeout = 0; ++ break; ++ case SPICMD_WRITE_STATUS: ++ timeout = 300 * 1000; ++ break; ++ case SPICMD_BYTE_PROGRAM: ++ timeout = 5 * 1000; ++ break; ++ case SPICMD_SST_SEC_ERASE: ++ case SPICMD_SEC_ERASE: ++ timeout = 1000 * 1000; ++ break; ++ case SPICMD_SST_BLK_ERASE: ++ case SPICMD_BLK_ERASE: ++ timeout = 3 * 1000 * 1000; ++ break; ++ case SPICMD_SST_CHIP_ERASE: ++ case SPICMD_CHIP_ERASE: ++ timeout = 20 * 1000 * 1000; ++ break; ++ default: ++ timeout = EC_SPICMD_STANDARD_TIMEOUT; ++ } ++ if (timeout == 0) ++ return ec_instruction_cycle(); ++ if (timeout < EC_SPICMD_STANDARD_TIMEOUT) ++ timeout = EC_SPICMD_STANDARD_TIMEOUT; ++ ++ return ec_flash_busy(timeout); ++} ++ ++/* delay for start/stop action */ ++static void delay_spi(int n) ++{ ++ while (n--) ++ inb(EC_IO_PORT_HIGH); ++} ++ ++/* start the action to spi rom function */ ++static void ec_start_spi(void) ++{ ++ unsigned char val; ++ ++ delay_spi(SPI_FINISH_WAIT_TIME); ++ val = ec_read(REG_XBISPICFG) | SPICFG_EN_SPICMD | SPICFG_AUTO_CHECK; ++ ec_write(REG_XBISPICFG, val); ++ delay_spi(SPI_FINISH_WAIT_TIME); ++} ++ ++/* stop the action to spi rom function */ ++static void ec_stop_spi(void) ++{ ++ unsigned char val; ++ ++ delay_spi(SPI_FINISH_WAIT_TIME); ++ val = ++ ec_read(REG_XBISPICFG) & (~(SPICFG_EN_SPICMD | SPICFG_AUTO_CHECK)); ++ ec_write(REG_XBISPICFG, val); ++ delay_spi(SPI_FINISH_WAIT_TIME); ++} ++ ++/* read one byte from xbi interface */ ++static int ec_read_byte(unsigned int addr, unsigned char *byte) ++{ ++ int ret = 0; ++ ++ /* enable spicmd writing. */ ++ ec_start_spi(); ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR "EC_READ_BYTE : SPICMD_WRITE_ENABLE failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* write the address */ ++ ec_write(REG_XBISPIA2, (addr & 0xff0000) >> 16); ++ ec_write(REG_XBISPIA1, (addr & 0x00ff00) >> 8); ++ ec_write(REG_XBISPIA0, (addr & 0x0000ff) >> 0); ++ /* start action */ ++ ec_write(REG_XBISPICMD, SPICMD_HIGH_SPEED_READ); ++ if (rom_instruction_cycle(SPICMD_HIGH_SPEED_READ) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_READ_BYTE : SPICMD_HIGH_SPEED_READ failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ *byte = ec_read(REG_XBISPIDAT); ++ ++ out: ++ /* disable spicmd writing. */ ++ ec_stop_spi(); ++ ++ return ret; ++} ++ ++/* write one byte to ec rom */ ++static int ec_write_byte(unsigned int addr, unsigned char byte) ++{ ++ int ret = 0; ++ ++ /* enable spicmd writing. */ ++ ec_start_spi(); ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_WRITE_BYTE : SPICMD_WRITE_ENABLE failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* write the address */ ++ ec_write(REG_XBISPIA2, (addr & 0xff0000) >> 16); ++ ec_write(REG_XBISPIA1, (addr & 0x00ff00) >> 8); ++ ec_write(REG_XBISPIA0, (addr & 0x0000ff) >> 0); ++ ec_write(REG_XBISPIDAT, byte); ++ /* start action */ ++ ec_write(REG_XBISPICMD, SPICMD_BYTE_PROGRAM); ++ if (rom_instruction_cycle(SPICMD_BYTE_PROGRAM) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_WRITE_BYTE : SPICMD_BYTE_PROGRAM failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ out: ++ /* disable spicmd writing. */ ++ ec_stop_spi(); ++ ++ return ret; ++} ++ ++/* unprotect SPI ROM */ ++/* EC_ROM_unprotect function code */ ++static int EC_ROM_unprotect(void) ++{ ++ unsigned char status; ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_UNIT_ERASE : SPICMD_WRITE_ENABLE failed.\n"); ++ return 1; ++ } ++ ++ /* unprotect the status register of rom */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (rom_instruction_cycle(SPICMD_READ_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR "EC_UNIT_ERASE : SPICMD_READ_STATUS failed.\n"); ++ return 1; ++ } ++ status = ec_read(REG_XBISPIDAT); ++ ec_write(REG_XBISPIDAT, status & 0x02); ++ if (ec_instruction_cycle() < 0) { ++ printk(KERN_ERR "EC_UNIT_ERASE : write status value failed.\n"); ++ return 1; ++ } ++ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_STATUS); ++ if (rom_instruction_cycle(SPICMD_WRITE_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_UNIT_ERASE : SPICMD_WRITE_STATUS failed.\n"); ++ return 1; ++ } ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_UNIT_ERASE : SPICMD_WRITE_ENABLE failed.\n"); ++ return 1; ++ } ++ ++ return 0; ++} ++ ++/* erase one block or chip or sector as needed */ ++static int ec_unit_erase(unsigned char erase_cmd, unsigned int addr) ++{ ++ unsigned char status; ++ int ret = 0, i = 0; ++ int unprotect_count = 3; ++ int check_flag = 0; ++ ++ /* enable spicmd writing. */ ++ ec_start_spi(); ++ ++#ifdef EC_ROM_PROTECTION ++ /* added for re-check SPICMD_READ_STATUS */ ++ while (unprotect_count-- > 0) { ++ if (EC_ROM_unprotect()) { ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* first time:500ms --> 5.5sec -->10.5sec */ ++ for (i = 0; i < ((2 - unprotect_count) * 100 + 10); i++) ++ udelay(50000); ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (rom_instruction_cycle(SPICMD_READ_STATUS) ++ == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_READ_STATUS failed.\n"); ++ } else { ++ status = ec_read(REG_XBISPIDAT); ++ printk(KERN_INFO "Read unprotect status : 0x%x\n", ++ status); ++ if ((status & 0x1C) == 0x00) { ++ printk(KERN_INFO ++ "Read unprotect status OK1 : 0x%x\n", ++ status & 0x1C); ++ check_flag = 1; ++ break; ++ } ++ } ++ } ++ ++ if (!check_flag) { ++ printk(KERN_INFO "SPI ROM unprotect fail.\n"); ++ return 1; ++ } ++#endif ++ ++ /* block address fill */ ++ if (erase_cmd == SPICMD_BLK_ERASE) { ++ ec_write(REG_XBISPIA2, (addr & 0x00ff0000) >> 16); ++ ec_write(REG_XBISPIA1, (addr & 0x0000ff00) >> 8); ++ ec_write(REG_XBISPIA0, (addr & 0x000000ff) >> 0); ++ } ++ ++ /* erase the whole chip first */ ++ ec_write(REG_XBISPICMD, erase_cmd); ++ if (rom_instruction_cycle(erase_cmd) == EC_STATE_BUSY) { ++ printk(KERN_ERR "EC_UNIT_ERASE : erase failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ out: ++ /* disable spicmd writing. */ ++ ec_stop_spi(); ++ ++ return ret; ++} ++ ++/* update the whole rom content with H/W mode ++ * PLEASE USING ec_unit_erase() FIRSTLY ++ */ ++static int ec_program_rom(struct ec_info *info, int flag) ++{ ++ unsigned int addr = 0; ++ unsigned long size = 0; ++ unsigned char *ptr = NULL; ++ unsigned char data; ++ unsigned char val = 0; ++ int ret = 0; ++ int i, j; ++ unsigned char status; ++ ++ /* modify for program serial No. ++ * set IE_START_ADDR & use idle mode, ++ * disable WDD ++ */ ++ if (flag == PROGRAM_FLAG_ROM) { ++ ret = ec_init_reset_mode(); ++ addr = info->start_addr + EC_START_ADDR; ++ printk(KERN_INFO "PROGRAM_FLAG_ROM..............\n"); ++ } else if (flag == PROGRAM_FLAG_IE) { ++ ret = ec_init_idle_mode(); ++ ec_disable_WDD(); ++ addr = info->start_addr + IE_START_ADDR; ++ printk(KERN_INFO "PROGRAM_FLAG_IE..............\n"); ++ } else { ++ return 0; ++ } ++ ++ if (ret < 0) { ++ if (flag == PROGRAM_FLAG_IE) ++ ec_enable_WDD(); ++ return ret; ++ } ++ ++ size = info->size; ++ ptr = info->buf; ++ printk(KERN_INFO "starting update ec ROM..............\n"); ++ ++ ret = ec_unit_erase(SPICMD_BLK_ERASE, addr); ++ if (ret) { ++ printk(KERN_ERR "program ec : erase block failed.\n"); ++ goto out; ++ } ++ printk(KERN_ERR "program ec : erase block OK.\n"); ++ ++ i = 0; ++ while (i < size) { ++ data = *(ptr + i); ++ ec_write_byte(addr, data); ++ ec_read_byte(addr, &val); ++ if (val != data) { ++ ec_write_byte(addr, data); ++ ec_read_byte(addr, &val); ++ if (val != data) { ++ printk(KERN_INFO ++ "EC : Second flash program failed at:\t"); ++ printk(KERN_INFO ++ "addr : 0x%x, source : 0x%x, dest: 0x%x\n", ++ addr, data, val); ++ printk(KERN_INFO "This should not happen... STOP\n"); ++ break; ++ } ++ } ++ i++; ++ addr++; ++ } ++ ++#ifdef EC_ROM_PROTECTION ++ /* we should start spi access firstly */ ++ ec_start_spi(); ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_WRITE_ENABLE failed.\n"); ++ goto out1; ++ } ++ ++ /* protect the status register of rom */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (rom_instruction_cycle(SPICMD_READ_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_READ_STATUS failed.\n"); ++ goto out1; ++ } ++ status = ec_read(REG_XBISPIDAT); ++ ++ ec_write(REG_XBISPIDAT, status | 0x1C); ++ if (ec_instruction_cycle() < 0) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : write status value failed.\n"); ++ goto out1; ++ } ++ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_STATUS); ++ if (rom_instruction_cycle(SPICMD_WRITE_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_WRITE_STATUS failed.\n"); ++ goto out1; ++ } ++#endif ++ ++ /* disable the write action to spi rom */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_DISABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_DISABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_WRITE_DISABLE failed.\n"); ++ goto out1; ++ } ++ ++ out1: ++ /* we should stop spi access firstly */ ++ ec_stop_spi(); ++ out: ++ /* for security */ ++ for (j = 0; j < 2000; j++) ++ udelay(1000); ++ ++ /* modify for program serial No. ++ * after program No exit idle mode ++ * and enable WDD ++ */ ++ if (flag == PROGRAM_FLAG_ROM) { ++ /* exit from the reset mode */ ++ ec_exit_reset_mode(); ++ } else { ++ /* ec exit from idle mode */ ++ ret = ec_exit_idle_mode(); ++ ec_enable_WDD(); ++ if (ret < 0) ++ return ret; ++ } ++ ++ return 0; ++} ++ ++/* ioctl */ ++static int misc_ioctl(struct inode *inode, struct file *filp, u_int cmd, ++ u_long arg) ++{ ++ struct ec_info ecinfo; ++ void __user *ptr = (void __user *)arg; ++ struct ec_reg *ecreg = (struct ec_reg *)(filp->private_data); ++ int ret = 0; ++ ++ switch (cmd) { ++ case IOCTL_RDREG: ++ ret = copy_from_user(ecreg, ptr, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "reg read : copy from user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecreg->addr > EC_MAX_REGADDR) ++ || (ecreg->addr < EC_MIN_REGADDR)) { ++ printk(KERN_ERR ++ "reg read : out of register address range.\n"); ++ return -EINVAL; ++ } ++ ecreg->val = ec_read(ecreg->addr); ++ ret = copy_to_user(ptr, ecreg, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "reg read : copy to user error.\n"); ++ return -EFAULT; ++ } ++ break; ++ case IOCTL_WRREG: ++ ret = copy_from_user(ecreg, ptr, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "reg write : copy from user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecreg->addr > EC_MAX_REGADDR) ++ || (ecreg->addr < EC_MIN_REGADDR)) { ++ printk(KERN_ERR ++ "reg write : out of register address range.\n"); ++ return -EINVAL; ++ } ++ ec_write(ecreg->addr, ecreg->val); ++ break; ++ case IOCTL_READ_EC: ++ ret = copy_from_user(ecreg, ptr, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "spi read : copy from user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecreg->addr > EC_RAM_ADDR) ++ && (ecreg->addr < EC_MAX_REGADDR)) { ++ printk(KERN_ERR ++ "spi read : out of register address range.\n"); ++ return -EINVAL; ++ } ++ ec_read_byte(ecreg->addr, &(ecreg->val)); ++ ret = copy_to_user(ptr, ecreg, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "spi read : copy to user error.\n"); ++ return -EFAULT; ++ } ++ break; ++ case IOCTL_PROGRAM_IE: ++ ecinfo.start_addr = EC_START_ADDR; ++ ecinfo.size = EC_CONTENT_MAX_SIZE; ++ ecinfo.buf = (u8 *) kmalloc(ecinfo.size, GFP_KERNEL); ++ if (ecinfo.buf == NULL) { ++ printk(KERN_ERR "program ie : kmalloc failed.\n"); ++ return -ENOMEM; ++ } ++ ret = copy_from_user(ecinfo.buf, (u8 *) ptr, ecinfo.size); ++ if (ret) { ++ printk(KERN_ERR "program ie : copy from user error.\n"); ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ return -EFAULT; ++ } ++ ++ /* use ec_program_rom to write serial No */ ++ ec_program_rom(&ecinfo, PROGRAM_FLAG_IE); ++ ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ break; ++ case IOCTL_PROGRAM_EC: ++ ecinfo.start_addr = EC_START_ADDR; ++ if (get_user((ecinfo.size), (u32 *) ptr)) { ++ printk(KERN_ERR "program ec : get user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecinfo.size) > EC_CONTENT_MAX_SIZE) { ++ printk(KERN_ERR "program ec : size out of limited.\n"); ++ return -EINVAL; ++ } ++ ecinfo.buf = (u8 *) kmalloc(ecinfo.size, GFP_KERNEL); ++ if (ecinfo.buf == NULL) { ++ printk(KERN_ERR "program ec : kmalloc failed.\n"); ++ return -ENOMEM; ++ } ++ ret = copy_from_user(ecinfo.buf, ((u8 *) ptr + 4), ecinfo.size); ++ if (ret) { ++ printk(KERN_ERR "program ec : copy from user error.\n"); ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ return -EFAULT; ++ } ++ ++ ec_program_rom(&ecinfo, PROGRAM_FLAG_ROM); ++ ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ break; ++ ++ default: ++ break; ++ } ++ ++ return 0; ++} ++ ++static long misc_compat_ioctl(struct file *file, unsigned int cmd, ++ unsigned long arg) ++{ ++ return misc_ioctl(file->f_dentry->d_inode, file, cmd, arg); ++} ++ ++static int misc_open(struct inode *inode, struct file *filp) ++{ ++ struct ec_reg *ecreg = NULL; ++ ecreg = kmalloc(sizeof(struct ec_reg), GFP_KERNEL); ++ if (ecreg) ++ filp->private_data = ecreg; ++ ++ return ecreg ? 0 : -ENOMEM; ++} ++ ++static int misc_release(struct inode *inode, struct file *filp) ++{ ++ struct ec_reg *ecreg = (struct ec_reg *)(filp->private_data); ++ ++ filp->private_data = NULL; ++ kfree(ecreg); ++ ++ return 0; ++} ++ ++static const struct file_operations ecmisc_fops = { ++ .open = misc_open, ++ .release = misc_release, ++ .read = NULL, ++ .write = NULL, ++#ifdef CONFIG_64BIT ++ .compat_ioctl = misc_compat_ioctl, ++#else ++ .ioctl = misc_ioctl, ++#endif ++}; ++ ++static struct miscdevice ecmisc_device = { ++ .minor = MISC_DYNAMIC_MINOR, ++ .name = EC_MISC_DEV, ++ .fops = &ecmisc_fops ++}; ++ ++static int __init ecmisc_init(void) ++{ ++ int ret; ++ ++ printk(KERN_INFO "EC misc device init.\n"); ++ ret = misc_register(&ecmisc_device); ++ ++ return ret; ++} ++ ++static void __exit ecmisc_exit(void) ++{ ++ printk(KERN_INFO "EC misc device exit.\n"); ++ misc_deregister(&ecmisc_device); ++} ++ ++module_init(ecmisc_init); ++module_exit(ecmisc_exit); ++ ++MODULE_AUTHOR("liujl "); ++MODULE_DESCRIPTION("Driver for flushing/dumping ROM of EC on YeeLoong laptop"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/mips/yeeloong_laptop.c b/drivers/platform/mips/yeeloong_laptop.c +new file mode 100644 +index 0000000..c285a67 +--- /dev/null ++++ b/drivers/platform/mips/yeeloong_laptop.c +@@ -0,0 +1,1360 @@ ++/* ++ * Driver for YeeLoong laptop extras ++ * ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin , Liu Junliang ++ * ++ * 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 /* for backlight subdriver */ ++#include ++#include /* for hwmon subdriver */ ++#include ++#include /* for video output subdriver */ ++#include /* for lcd output subdriver */ ++#include /* for hotkey subdriver */ ++#include ++#include ++#include ++#include /* for AC & Battery subdriver */ ++#include /* for register_reboot_notifier */ ++#include /* for register_pm_notifier */ ++ ++#include ++ ++#include /* for loongson_cmdline */ ++#include ++ ++#define ON 1 ++#define OFF 0 ++#define EVENT_START EVENT_LID ++ ++/* common function */ ++#define EC_VER_LEN 64 ++ ++static int ec_version_before(char *version) ++{ ++ char *p, ec_ver[EC_VER_LEN]; ++ ++ p = strstr(loongson_cmdline, "EC_VER="); ++ if (!p) ++ memset(ec_ver, 0, EC_VER_LEN); ++ else { ++ strncpy(ec_ver, p, EC_VER_LEN); ++ p = strstr(ec_ver, " "); ++ if (p) ++ *p = '\0'; ++ } ++ ++ return (strncasecmp(ec_ver, version, 64) < 0); ++} ++ ++/* backlight subdriver */ ++#define MIN_BRIGHTNESS 1 ++#define MAX_BRIGHTNESS 8 ++ ++static int yeeloong_set_brightness(struct backlight_device *bd) ++{ ++ unsigned char level; ++ static unsigned char old_level; ++ ++ level = (bd->props.fb_blank == FB_BLANK_UNBLANK && ++ bd->props.power == FB_BLANK_UNBLANK) ? ++ bd->props.brightness : 0; ++ ++ level = clamp_val(level, MIN_BRIGHTNESS, MAX_BRIGHTNESS); ++ ++ /* Avoid to modify the brightness when EC is tuning it */ ++ if (old_level != level) { ++ if (ec_read(REG_DISPLAY_BRIGHTNESS) == old_level) ++ ec_write(REG_DISPLAY_BRIGHTNESS, level); ++ old_level = level; ++ } ++ ++ return 0; ++} ++ ++static int yeeloong_get_brightness(struct backlight_device *bd) ++{ ++ return ec_read(REG_DISPLAY_BRIGHTNESS); ++} ++ ++static struct backlight_ops backlight_ops = { ++ .get_brightness = yeeloong_get_brightness, ++ .update_status = yeeloong_set_brightness, ++}; ++ ++static struct backlight_device *yeeloong_backlight_dev; ++ ++static int yeeloong_backlight_init(void) ++{ ++ int ret; ++ struct backlight_properties props; ++ ++ memset(&props, 0, sizeof(struct backlight_properties)); ++ props.max_brightness = MAX_BRIGHTNESS; ++ props.type = BACKLIGHT_PLATFORM; ++ yeeloong_backlight_dev = backlight_device_register("backlight0", NULL, ++ NULL, &backlight_ops, &props); ++ ++ if (IS_ERR(yeeloong_backlight_dev)) { ++ ret = PTR_ERR(yeeloong_backlight_dev); ++ yeeloong_backlight_dev = NULL; ++ return ret; ++ } ++ ++ yeeloong_backlight_dev->props.brightness = ++ yeeloong_get_brightness(yeeloong_backlight_dev); ++ backlight_update_status(yeeloong_backlight_dev); ++ ++ return 0; ++} ++ ++static void yeeloong_backlight_exit(void) ++{ ++ if (yeeloong_backlight_dev) { ++ backlight_device_unregister(yeeloong_backlight_dev); ++ yeeloong_backlight_dev = NULL; ++ } ++} ++ ++/* AC & Battery subdriver */ ++ ++static struct power_supply yeeloong_ac, yeeloong_bat; ++ ++#define RET (val->intval) ++ ++#define BAT_CAP_CRITICAL 5 ++#define BAT_CAP_HIGH 95 ++ ++#define get_bat(type) \ ++ ec_read(REG_BAT_##type) ++ ++#define get_bat_l(type) \ ++ ((get_bat(type##_HIGH) << 8) | get_bat(type##_LOW)) ++ ++static int yeeloong_get_ac_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ if (psp == POWER_SUPPLY_PROP_ONLINE) ++ RET = !!(get_bat(POWER) & BIT_BAT_POWER_ACIN); ++ ++ return 0; ++} ++ ++static enum power_supply_property yeeloong_ac_props[] = { ++ POWER_SUPPLY_PROP_ONLINE, ++}; ++ ++static struct power_supply yeeloong_ac = { ++ .name = "yeeloong-ac", ++ .type = POWER_SUPPLY_TYPE_MAINS, ++ .properties = yeeloong_ac_props, ++ .num_properties = ARRAY_SIZE(yeeloong_ac_props), ++ .get_property = yeeloong_get_ac_props, ++}; ++ ++static inline bool is_bat_in(void) ++{ ++ return !!(get_bat(STATUS) & BIT_BAT_STATUS_IN); ++} ++ ++static int get_bat_temp(void) ++{ ++ return get_bat_l(TEMPERATURE) * 10; ++} ++ ++static int get_bat_current(void) ++{ ++ return -(s16)get_bat_l(CURRENT); ++} ++ ++static int get_bat_voltage(void) ++{ ++ return get_bat_l(VOLTAGE); ++} ++ ++static char *get_manufacturer(void) ++{ ++ return (get_bat(VENDOR) == FLAG_BAT_VENDOR_SANYO) ? "SANYO" : "SIMPLO"; ++} ++ ++static int get_relative_cap(void) ++{ ++ /* ++ * When the relative capacity becomes 2, the hardware is observed to ++ * have been turned off forcely. so, we must tune it be suitable to ++ * make the software do related actions. ++ */ ++ int tmp = get_bat_l(RELATIVE_CAP); ++ ++ if (tmp <= (BAT_CAP_CRITICAL * 2)) ++ tmp -= 3; ++ ++ return tmp; ++} ++ ++static int yeeloong_get_bat_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ switch (psp) { ++ /* Fixed information */ ++ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: ++ /* mV -> µV */ ++ RET = get_bat_l(DESIGN_VOL) * 1000; ++ break; ++ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: ++ /* mAh->µAh */ ++ RET = get_bat_l(DESIGN_CAP) * 1000; ++ break; ++ case POWER_SUPPLY_PROP_CHARGE_FULL: ++ /* µAh */ ++ RET = get_bat_l(FULLCHG_CAP) * 1000; ++ break; ++ case POWER_SUPPLY_PROP_MANUFACTURER: ++ val->strval = get_manufacturer(); ++ break; ++ /* Dynamic information */ ++ case POWER_SUPPLY_PROP_PRESENT: ++ RET = is_bat_in(); ++ break; ++ case POWER_SUPPLY_PROP_CURRENT_NOW: ++ /* mA -> µA */ ++ RET = is_bat_in() ? get_bat_current() * 1000 : 0; ++ break; ++ case POWER_SUPPLY_PROP_VOLTAGE_NOW: ++ /* mV -> µV */ ++ RET = is_bat_in() ? get_bat_voltage() * 1000 : 0; ++ break; ++ case POWER_SUPPLY_PROP_TEMP: ++ /* Celcius */ ++ RET = is_bat_in() ? get_bat_temp() : 0; ++ break; ++ case POWER_SUPPLY_PROP_CAPACITY: ++ RET = is_bat_in() ? get_relative_cap() : 0; ++ break; ++ case POWER_SUPPLY_PROP_CAPACITY_LEVEL: { ++ int status; ++ ++ if (!is_bat_in()) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; ++ break; ++ } ++ ++ status = get_bat(STATUS); ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; ++ ++ if (unlikely(status & BIT_BAT_STATUS_DESTROY)) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; ++ break; ++ } ++ ++ if (status & BIT_BAT_STATUS_FULL) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_FULL; ++ else { ++ int curr_cap = get_relative_cap(); ++ ++ if (status & BIT_BAT_STATUS_LOW) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_LOW; ++ if (curr_cap <= BAT_CAP_CRITICAL) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; ++ } else if (curr_cap >= BAT_CAP_HIGH) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_HIGH; ++ } ++ } break; ++ case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW: ++ /* seconds */ ++ RET = is_bat_in() ? (get_relative_cap() - 3) * 54 + 142 : 0; ++ break; ++ case POWER_SUPPLY_PROP_STATUS: { ++ int charge = get_bat(CHARGE); ++ ++ RET = POWER_SUPPLY_STATUS_UNKNOWN; ++ if (charge & FLAG_BAT_CHARGE_DISCHARGE) ++ RET = POWER_SUPPLY_STATUS_DISCHARGING; ++ else if (charge & FLAG_BAT_CHARGE_CHARGE) ++ RET = POWER_SUPPLY_STATUS_CHARGING; ++ } break; ++ case POWER_SUPPLY_PROP_HEALTH: { ++ int status; ++ ++ if (!is_bat_in()) { ++ RET = POWER_SUPPLY_HEALTH_UNKNOWN; ++ break; ++ } ++ ++ status = get_bat(STATUS); ++ RET = POWER_SUPPLY_HEALTH_GOOD; ++ ++ if (status & (BIT_BAT_STATUS_DESTROY | ++ BIT_BAT_STATUS_LOW)) ++ RET = POWER_SUPPLY_HEALTH_DEAD; ++ if (get_bat(CHARGE_STATUS) & ++ BIT_BAT_CHARGE_STATUS_OVERTEMP) ++ RET = POWER_SUPPLY_HEALTH_OVERHEAT; ++ } break; ++ case POWER_SUPPLY_PROP_CHARGE_NOW: /* 1/100(%)*1000 µAh */ ++ RET = get_relative_cap() * get_bat_l(FULLCHG_CAP) * 10; ++ break; ++ default: ++ return -EINVAL; ++ } ++ return 0; ++} ++#undef RET ++ ++static enum power_supply_property yeeloong_bat_props[] = { ++ POWER_SUPPLY_PROP_STATUS, ++ POWER_SUPPLY_PROP_PRESENT, ++ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_FULL, ++ POWER_SUPPLY_PROP_CHARGE_NOW, ++ POWER_SUPPLY_PROP_CURRENT_NOW, ++ POWER_SUPPLY_PROP_VOLTAGE_NOW, ++ POWER_SUPPLY_PROP_HEALTH, ++ POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, ++ POWER_SUPPLY_PROP_CAPACITY, ++ POWER_SUPPLY_PROP_CAPACITY_LEVEL, ++ POWER_SUPPLY_PROP_TEMP, ++ POWER_SUPPLY_PROP_MANUFACTURER, ++}; ++ ++static struct power_supply yeeloong_bat = { ++ .name = "yeeloong-bat", ++ .type = POWER_SUPPLY_TYPE_BATTERY, ++ .properties = yeeloong_bat_props, ++ .num_properties = ARRAY_SIZE(yeeloong_bat_props), ++ .get_property = yeeloong_get_bat_props, ++}; ++ ++static int ac_bat_initialized; ++ ++static int yeeloong_bat_init(void) ++{ ++ int ret; ++ ++ ret = power_supply_register(NULL, &yeeloong_ac); ++ if (ret) ++ return ret; ++ ret = power_supply_register(NULL, &yeeloong_bat); ++ if (ret) { ++ power_supply_unregister(&yeeloong_ac); ++ return ret; ++ } ++ ac_bat_initialized = 1; ++ ++ return 0; ++} ++ ++static void yeeloong_bat_exit(void) ++{ ++ ac_bat_initialized = 0; ++ ++ power_supply_unregister(&yeeloong_ac); ++ power_supply_unregister(&yeeloong_bat); ++} ++/* hwmon subdriver */ ++ ++#define MIN_FAN_SPEED 0 ++#define MAX_FAN_SPEED 3 ++ ++#define get_fan(type) \ ++ ec_read(REG_FAN_##type) ++ ++#define set_fan(type, val) \ ++ ec_write(REG_FAN_##type, val) ++ ++static inline int get_fan_speed_level(void) ++{ ++ return get_fan(SPEED_LEVEL); ++} ++static inline void set_fan_speed_level(int speed) ++{ ++ set_fan(SPEED_LEVEL, speed); ++} ++ ++static inline int get_fan_mode(void) ++{ ++ return get_fan(AUTO_MAN_SWITCH); ++} ++static inline void set_fan_mode(int mode) ++{ ++ set_fan(AUTO_MAN_SWITCH, mode); ++} ++ ++/* ++ * 3 different modes: Full speed(0); manual mode(1); auto mode(2) ++ */ ++static int get_fan_pwm_enable(void) ++{ ++ return (get_fan_mode() == BIT_FAN_AUTO) ? 2 : ++ (get_fan_speed_level() == MAX_FAN_SPEED) ? 0 : 1; ++} ++ ++static void set_fan_pwm_enable(int mode) ++{ ++ set_fan_mode((mode == 2) ? BIT_FAN_AUTO : BIT_FAN_MANUAL); ++ if (mode == 0) ++ set_fan_speed_level(MAX_FAN_SPEED); ++} ++ ++static int get_fan_pwm(void) ++{ ++ return get_fan_speed_level(); ++} ++ ++static void set_fan_pwm(int value) ++{ ++ if (get_fan_mode() != BIT_FAN_MANUAL) ++ return; ++ ++ value = clamp_val(value, MIN_FAN_SPEED, MAX_FAN_SPEED); ++ ++ /* We must ensure the fan is on */ ++ if (value > 0) ++ set_fan(CONTROL, ON); ++ ++ set_fan_speed_level(value); ++} ++ ++static inline int get_fan_speed(void) ++{ ++ return ((get_fan(SPEED_HIGH) & 0x0f) << 8) | get_fan(SPEED_LOW); ++} ++ ++static int get_fan_rpm(void) ++{ ++ return FAN_SPEED_DIVIDER / get_fan_speed(); ++} ++ ++static int get_cpu_temp(void) ++{ ++ return (s8)ec_read(REG_TEMPERATURE_VALUE) * 1000; ++} ++ ++static int get_cpu_temp_max(void) ++{ ++ return 60 * 1000; ++} ++ ++static int get_bat_temp_alarm(void) ++{ ++ return !!(get_bat(CHARGE_STATUS) & BIT_BAT_CHARGE_STATUS_OVERTEMP); ++} ++ ++static ssize_t store_sys_hwmon(void (*set) (int), const char *buf, size_t count) ++{ ++ int ret; ++ unsigned long value; ++ ++ if (!count) ++ return 0; ++ ++ ret = strict_strtoul(buf, 10, &value); ++ if (ret) ++ return ret; ++ ++ set(value); ++ ++ return count; ++} ++ ++static ssize_t show_sys_hwmon(int (*get) (void), char *buf) ++{ ++ return sprintf(buf, "%d\n", get()); ++} ++ ++#define CREATE_SENSOR_ATTR(_name, _mode, _set, _get) \ ++ static ssize_t show_##_name(struct device *dev, \ ++ struct device_attribute *attr, \ ++ char *buf) \ ++ { \ ++ return show_sys_hwmon(_set, buf); \ ++ } \ ++ static ssize_t store_##_name(struct device *dev, \ ++ struct device_attribute *attr, \ ++ const char *buf, size_t count) \ ++ { \ ++ return store_sys_hwmon(_get, buf, count); \ ++ } \ ++ static SENSOR_DEVICE_ATTR(_name, _mode, show_##_name, store_##_name, 0); ++ ++CREATE_SENSOR_ATTR(fan1_input, S_IRUGO, get_fan_rpm, NULL); ++CREATE_SENSOR_ATTR(pwm1, S_IRUGO | S_IWUSR, get_fan_pwm, set_fan_pwm); ++CREATE_SENSOR_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, get_fan_pwm_enable, ++ set_fan_pwm_enable); ++CREATE_SENSOR_ATTR(temp1_input, S_IRUGO, get_cpu_temp, NULL); ++CREATE_SENSOR_ATTR(temp1_max, S_IRUGO, get_cpu_temp_max, NULL); ++CREATE_SENSOR_ATTR(temp2_input, S_IRUGO, get_bat_temp, NULL); ++CREATE_SENSOR_ATTR(temp2_max_alarm, S_IRUGO, get_bat_temp_alarm, NULL); ++CREATE_SENSOR_ATTR(curr1_input, S_IRUGO, get_bat_current, NULL); ++CREATE_SENSOR_ATTR(in1_input, S_IRUGO, get_bat_voltage, NULL); ++ ++static ssize_t ++show_name(struct device *dev, struct device_attribute *attr, char *buf) ++{ ++ return sprintf(buf, "yeeloong\n"); ++} ++ ++static SENSOR_DEVICE_ATTR(name, S_IRUGO, show_name, NULL, 0); ++ ++static struct attribute *hwmon_attributes[] = { ++ &sensor_dev_attr_pwm1.dev_attr.attr, ++ &sensor_dev_attr_pwm1_enable.dev_attr.attr, ++ &sensor_dev_attr_fan1_input.dev_attr.attr, ++ &sensor_dev_attr_temp1_input.dev_attr.attr, ++ &sensor_dev_attr_temp1_max.dev_attr.attr, ++ &sensor_dev_attr_temp2_input.dev_attr.attr, ++ &sensor_dev_attr_temp2_max_alarm.dev_attr.attr, ++ &sensor_dev_attr_curr1_input.dev_attr.attr, ++ &sensor_dev_attr_in1_input.dev_attr.attr, ++ &sensor_dev_attr_name.dev_attr.attr, ++ NULL ++}; ++ ++static struct attribute_group hwmon_attribute_group = { ++ .attrs = hwmon_attributes ++}; ++ ++static struct device *yeeloong_hwmon_dev; ++ ++static int yeeloong_hwmon_init(void) ++{ ++ int ret; ++ ++ yeeloong_hwmon_dev = hwmon_device_register(NULL); ++ if (IS_ERR(yeeloong_hwmon_dev)) { ++ yeeloong_hwmon_dev = NULL; ++ return PTR_ERR(yeeloong_hwmon_dev); ++ } ++ ret = sysfs_create_group(&yeeloong_hwmon_dev->kobj, ++ &hwmon_attribute_group); ++ if (ret) { ++ hwmon_device_unregister(yeeloong_hwmon_dev); ++ yeeloong_hwmon_dev = NULL; ++ return ret; ++ } ++ /* ensure fan is set to auto mode */ ++ set_fan_pwm_enable(2); ++ ++ return 0; ++} ++ ++static void yeeloong_hwmon_exit(void) ++{ ++ if (yeeloong_hwmon_dev) { ++ sysfs_remove_group(&yeeloong_hwmon_dev->kobj, ++ &hwmon_attribute_group); ++ hwmon_device_unregister(yeeloong_hwmon_dev); ++ yeeloong_hwmon_dev = NULL; ++ } ++} ++ ++/* video output subdriver */ ++ ++#define LCD 0 ++#define CRT 1 ++#define VOD_NUM 2 /* The total number of video output device*/ ++ ++static struct output_device *vod[VOD_NUM]; ++ ++static int vor[] = {REG_DISPLAY_LCD, REG_CRT_DETECT}; ++ ++static int get_vo_dev(struct output_device *od) ++{ ++ int i, dev; ++ ++ dev = -1; ++ for (i = 0; i < VOD_NUM; i++) ++ if (od == vod[i]) ++ dev = i; ++ ++ return dev; ++} ++ ++static int vo_get_status(int dev) ++{ ++ return ec_read(vor[dev]); ++} ++ ++static int yeeloong_vo_get_status(struct output_device *od) ++{ ++ int vd; ++ ++ vd = get_vo_dev(od); ++ if (vd != -1) ++ return vo_get_status(vd); ++ ++ return -ENODEV; ++} ++ ++static void vo_set_state(int dev, int state) ++{ ++ int addr; ++ unsigned long value; ++ ++ switch (dev) { ++ case LCD: ++ addr = 0x31; ++ break; ++ case CRT: ++ addr = 0x21; ++ break; ++ default: ++ /* return directly if the wrong video output device */ ++ return; ++ } ++ ++ outb(addr, 0x3c4); ++ value = inb(0x3c5); ++ ++ switch (dev) { ++ case LCD: ++ value |= (state ? 0x03 : 0x02); ++ break; ++ case CRT: ++ if (state) ++ clear_bit(7, &value); ++ else ++ set_bit(7, &value); ++ break; ++ default: ++ break; ++ } ++ ++ outb(addr, 0x3c4); ++ outb(value, 0x3c5); ++ ++ if (dev == LCD) ++ ec_write(REG_BACKLIGHT_CTRL, state); ++} ++ ++static int yeeloong_vo_set_state(struct output_device *od) ++{ ++ int vd; ++ ++ vd = get_vo_dev(od); ++ if (vd == -1) ++ return -ENODEV; ++ ++ if (vd == CRT && !vo_get_status(vd)) ++ return 0; ++ ++ vo_set_state(vd, !!od->request_state); ++ ++ return 0; ++} ++ ++static struct output_properties vop = { ++ .set_state = yeeloong_vo_set_state, ++ .get_status = yeeloong_vo_get_status, ++}; ++ ++static int yeeloong_vo_init(void) ++{ ++ int ret, i; ++ char dev_name[VOD_NUM][4] = {"LCD", "CRT"}; ++ ++ /* Register video output device: lcd, crt */ ++ for (i = 0; i < VOD_NUM; i++) { ++ vod[i] = video_output_register(dev_name[i], NULL, NULL, &vop); ++ if (IS_ERR(vod[i])) { ++ if (i != 0) ++ video_output_unregister(vod[i-1]); ++ ret = PTR_ERR(vod[i]); ++ vod[i] = NULL; ++ return ret; ++ } ++ } ++ /* Ensure LCD is on by default */ ++ vo_set_state(LCD, ON); ++ ++ /* ++ * Turn off CRT by default, and will be enabled when the CRT ++ * connectting event reported by SCI ++ */ ++ vo_set_state(CRT, OFF); ++ ++ return 0; ++} ++ ++static void yeeloong_vo_exit(void) ++{ ++ int i; ++ ++ for (i = 0; i < VOD_NUM; i++) { ++ if (vod[i]) { ++ video_output_unregister(vod[i]); ++ vod[i] = NULL; ++ } ++ } ++} ++ ++/* lcd subdriver */ ++ ++struct lcd_device *lcd[VOD_NUM]; ++ ++static int get_lcd_dev(struct lcd_device *ld) ++{ ++ int i, dev; ++ ++ dev = -1; ++ for (i = 0; i < VOD_NUM; i++) ++ if (ld == lcd[i]) ++ dev = i; ++ ++ return dev; ++} ++ ++static int yeeloong_lcd_set_power(struct lcd_device *ld, int power) ++{ ++ int dev = get_lcd_dev(ld); ++ ++ if (power == FB_BLANK_UNBLANK) ++ vo_set_state(dev, ON); ++ if (power == FB_BLANK_POWERDOWN) ++ vo_set_state(dev, OFF); ++ ++ return 0; ++} ++ ++static int yeeloong_lcd_get_power(struct lcd_device *ld) ++{ ++ return vo_get_status(get_lcd_dev(ld)); ++} ++ ++static struct lcd_ops lcd_ops = { ++ .set_power = yeeloong_lcd_set_power, ++ .get_power = yeeloong_lcd_get_power, ++}; ++ ++static int yeeloong_lcd_init(void) ++{ ++ int ret, i; ++ char dev_name[VOD_NUM][4] = {"LCD", "CRT"}; ++ ++ /* Register video output device: lcd, crt */ ++ for (i = 0; i < VOD_NUM; i++) { ++ lcd[i] = lcd_device_register(dev_name[i], NULL, NULL, &lcd_ops); ++ if (IS_ERR(lcd[i])) { ++ if (i != 0) ++ lcd_device_unregister(lcd[i-1]); ++ ret = PTR_ERR(lcd[i]); ++ lcd[i] = NULL; ++ return ret; ++ } ++ } ++#if 0 ++ /* This has been done by the vide output driver */ ++ ++ /* Ensure LCD is on by default */ ++ vo_set_state(LCD, ON); ++ ++ /* ++ * Turn off CRT by default, and will be enabled when the CRT ++ * connectting event reported by SCI ++ */ ++ vo_set_state(CRT, OFF); ++#endif ++ return 0; ++} ++ ++static void yeeloong_lcd_exit(void) ++{ ++ int i; ++ ++ for (i = 0; i < VOD_NUM; i++) { ++ if (lcd[i]) { ++ lcd_device_unregister(lcd[i]); ++ lcd[i] = NULL; ++ } ++ } ++} ++ ++/* hotkey subdriver */ ++ ++static struct input_dev *yeeloong_hotkey_dev; ++ ++static atomic_t reboot_flag, sleep_flag; ++#define in_sleep() (&sleep_flag) ++#define in_reboot() (&reboot_flag) ++ ++static const struct key_entry yeeloong_keymap[] = { ++ {KE_SW, EVENT_LID, { SW_LID } }, ++ {KE_KEY, EVENT_CAMERA, { KEY_CAMERA } }, /* Fn + ESC */ ++ {KE_KEY, EVENT_SLEEP, { KEY_SLEEP } }, /* Fn + F1 */ ++ {KE_KEY, EVENT_BLACK_SCREEN, { KEY_DISPLAYTOGGLE } }, /* Fn + F2 */ ++ {KE_KEY, EVENT_DISPLAY_TOGGLE, { KEY_SWITCHVIDEOMODE } }, /* Fn + F3 */ ++ {KE_KEY, EVENT_AUDIO_MUTE, { KEY_MUTE } }, /* Fn + F4 */ ++ {KE_KEY, EVENT_WLAN, { KEY_WLAN } }, /* Fn + F5 */ ++ {KE_KEY, EVENT_DISPLAY_BRIGHTNESS, { KEY_BRIGHTNESSUP } }, /* Fn + up */ ++ {KE_KEY, EVENT_DISPLAY_BRIGHTNESS, { KEY_BRIGHTNESSDOWN } }, /* Fn + down */ ++ {KE_KEY, EVENT_AUDIO_VOLUME, { KEY_VOLUMEUP } }, /* Fn + right */ ++ {KE_KEY, EVENT_AUDIO_VOLUME, { KEY_VOLUMEDOWN } }, /* Fn + left */ ++ {KE_END, 0} ++}; ++ ++static int is_fake_event(u16 keycode) ++{ ++ switch (keycode) { ++ case KEY_SLEEP: ++ case SW_LID: ++ return atomic_read(in_sleep()) | atomic_read(in_reboot()); ++ break; ++ default: ++ break; ++ } ++ return 0; ++} ++ ++static struct key_entry *get_event_key_entry(int event, int status) ++{ ++ struct key_entry *ke; ++ static int old_brightness_status = -1; ++ static int old_volume_status = -1; ++ ++ ke = sparse_keymap_entry_from_scancode(yeeloong_hotkey_dev, event); ++ if (!ke) ++ return NULL; ++ ++ switch (event) { ++ case EVENT_DISPLAY_BRIGHTNESS: ++ /* current status > old one, means up */ ++ if ((status < old_brightness_status) || (0 == status)) ++ ke++; ++ old_brightness_status = status; ++ break; ++ case EVENT_AUDIO_VOLUME: ++ if ((status < old_volume_status) || (0 == status)) ++ ke++; ++ old_volume_status = status; ++ break; ++ default: ++ break; ++ } ++ ++ return ke; ++} ++ ++static int report_lid_switch(int status) ++{ ++ static int old_status; ++ ++ /* ++ * LID is a switch button, so, two continuous same status should be ++ * ignored ++ */ ++ if (old_status != status) { ++ input_report_switch(yeeloong_hotkey_dev, SW_LID, !status); ++ input_sync(yeeloong_hotkey_dev); ++ } ++ old_status = status; ++ ++ return status; ++} ++ ++static int crt_detect_handler(int status) ++{ ++ /* ++ * When CRT is inserted, enable its output and disable the LCD output, ++ * otherwise, do reversely. ++ */ ++ vo_set_state(CRT, status); ++ vo_set_state(LCD, !status); ++ ++ return status; ++} ++ ++static int displaytoggle_handler(int status) ++{ ++ /* EC(>=PQ1D26) does this job for us, we can not do it again, ++ * otherwise, the brightness will not resume to the normal level! */ ++ if (ec_version_before("EC_VER=PQ1D26")) ++ vo_set_state(LCD, status); ++ ++ return status; ++} ++ ++static int mypow(int x, int y) ++{ ++ int i, j = x; ++ ++ for (i = 1; i < y; i++) ++ j *= j; ++ ++ return j; ++} ++ ++static int switchvideomode_handler(int status) ++{ ++ /* Default status: CRT|LCD = 0|1 = 1 */ ++ static int bin_state = 1; ++ int i; ++ ++ /* ++ * Only enable switch video output button ++ * when CRT is connected ++ */ ++ if (!vo_get_status(CRT)) ++ return 0; ++ /* ++ * 2. no CRT connected: LCD on, CRT off ++ * 3. BOTH on ++ * 0. BOTH off ++ * 1. LCD off, CRT on ++ */ ++ ++ bin_state++; ++ if (bin_state > mypow(2, VOD_NUM) - 1) ++ bin_state = 0; ++ ++ for (i = 0; i < VOD_NUM; i++) ++ vo_set_state(i, bin_state & (1 << i)); ++ ++ return bin_state; ++} ++ ++static int camera_handler(int status) ++{ ++ int value; ++ ++ value = ec_read(REG_CAMERA_CONTROL); ++ ec_write(REG_CAMERA_CONTROL, value | (1 << 1)); ++ ++ return status; ++} ++ ++static int usb2_handler(int status) ++{ ++ pr_emerg("USB2 Over Current occurred\n"); ++ ++ return status; ++} ++ ++static int usb0_handler(int status) ++{ ++ pr_emerg("USB0 Over Current occurred\n"); ++ ++ return status; ++} ++ ++static int ac_bat_handler(int status) ++{ ++ if (ac_bat_initialized) { ++ power_supply_changed(&yeeloong_ac); ++ power_supply_changed(&yeeloong_bat); ++ } ++ ++ return status; ++} ++ ++struct sci_event { ++ int reg; ++ sci_handler handler; ++}; ++ ++static const struct sci_event se[] = { ++ [EVENT_AC_BAT] = {0, ac_bat_handler}, ++ [EVENT_AUDIO_MUTE] = {REG_AUDIO_MUTE, NULL}, ++ [EVENT_AUDIO_VOLUME] = {REG_AUDIO_VOLUME, NULL}, ++ [EVENT_CRT_DETECT] = {REG_CRT_DETECT, crt_detect_handler}, ++ [EVENT_CAMERA] = {REG_CAMERA_STATUS, camera_handler}, ++ [EVENT_BLACK_SCREEN] = {REG_DISPLAY_LCD, displaytoggle_handler}, ++ [EVENT_DISPLAY_BRIGHTNESS] = {REG_DISPLAY_BRIGHTNESS, NULL}, ++ [EVENT_LID] = {REG_LID_DETECT, NULL}, ++ [EVENT_DISPLAY_TOGGLE] = {0, switchvideomode_handler}, ++ [EVENT_USB_OC0] = {REG_USB2_FLAG, usb0_handler}, ++ [EVENT_USB_OC2] = {REG_USB2_FLAG, usb2_handler}, ++ [EVENT_WLAN] = {REG_WLAN, NULL}, ++}; ++ ++static void do_event_action(int event) ++{ ++ int status = -1; ++ struct key_entry *ke; ++ struct sci_event *sep; ++ ++ sep = (struct sci_event *)&se[event]; ++ ++ if (sep->reg != 0) ++ status = ec_read(sep->reg); ++ ++ if (status == -1) { ++ /* ec_read hasn't been called, status is invalid */ ++ return; ++ } ++ ++ if (sep->handler != NULL) ++ status = sep->handler(status); ++ ++ pr_debug("%s: event: %d status: %d\n", __func__, event, status); ++ ++ /* Report current key to user-space */ ++ ke = get_event_key_entry(event, status); ++ ++ /* ++ * Ignore the LID and SLEEP event when we are already in sleep or ++ * reboot state, this will avoid the recursive pm operations. but note: ++ * the report_lid_switch() called in arch/mips/loongson/lemote-2f/pm.c ++ * is necessary, because it is used to wake the system from sleep ++ * state. In the future, perhaps SW_LID should works like SLEEP, no ++ * need to function as a SWITCH, just report the state when the LID is ++ * closed is enough, this event can tell the software to "SLEEP", no ++ * need to tell the softwares when we are resuming from "SLEEP". ++ */ ++ if (ke && !is_fake_event(ke->keycode)) { ++ if (ke->keycode == SW_LID) ++ report_lid_switch(status); ++ else ++ sparse_keymap_report_entry(yeeloong_hotkey_dev, ke, 1, ++ true); ++ } ++} ++ ++/* ++ * SCI(system control interrupt) main interrupt routine ++ * ++ * We will do the query and get event number together so the interrupt routine ++ * should be longer than 120us now at least 3ms elpase for it. ++ */ ++static irqreturn_t sci_irq_handler(int irq, void *dev_id) ++{ ++ int ret, event; ++ ++ if (SCI_IRQ_NUM != irq) ++ return IRQ_NONE; ++ ++ /* Query the event number */ ++ ret = ec_query_event_num(); ++ if (ret < 0) ++ return IRQ_NONE; ++ ++ event = ec_get_event_num(); ++ if (event < EVENT_START || event > EVENT_END) ++ return IRQ_NONE; ++ ++ /* Execute corresponding actions */ ++ do_event_action(event); ++ ++ return IRQ_HANDLED; ++} ++ ++/* ++ * Config and init some msr and gpio register properly. ++ */ ++static int sci_irq_init(void) ++{ ++ u32 hi, lo; ++ u32 gpio_base; ++ unsigned long flags; ++ int ret; ++ ++ /* Get gpio base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &lo); ++ gpio_base = lo & 0xff00; ++ ++ /* Filter the former kb3310 interrupt for security */ ++ ret = ec_query_event_num(); ++ if (ret) ++ return ret; ++ ++ /* For filtering next number interrupt */ ++ udelay(10000); ++ ++ /* Set gpio native registers and msrs for GPIO27 SCI EVENT PIN ++ * gpio : ++ * input, pull-up, no-invert, event-count and value 0, ++ * no-filter, no edge mode ++ * gpio27 map to Virtual gpio0 ++ * msr : ++ * no primary and lpc ++ * Unrestricted Z input to IG10 from Virtual gpio 0. ++ */ ++ local_irq_save(flags); ++ _rdmsr(0x80000024, &hi, &lo); ++ lo &= ~(1 << 10); ++ _wrmsr(0x80000024, hi, lo); ++ _rdmsr(0x80000025, &hi, &lo); ++ lo &= ~(1 << 10); ++ _wrmsr(0x80000025, hi, lo); ++ _rdmsr(0x80000023, &hi, &lo); ++ lo |= (0x0a << 0); ++ _wrmsr(0x80000023, hi, lo); ++ local_irq_restore(flags); ++ ++ /* Set gpio27 as sci interrupt ++ * ++ * input, pull-up, no-fliter, no-negedge, invert ++ * the sci event is just about 120us ++ */ ++ asm(".set noreorder\n"); ++ /* input enable */ ++ outl(0x00000800, (gpio_base | 0xA0)); ++ /* revert the input */ ++ outl(0x00000800, (gpio_base | 0xA4)); ++ /* event-int enable */ ++ outl(0x00000800, (gpio_base | 0xB8)); ++ asm(".set reorder\n"); ++ ++ return 0; ++} ++ ++static int notify_reboot(struct notifier_block *nb, unsigned long event, void *buf) ++{ ++ switch (event) { ++ case SYS_RESTART: ++ case SYS_HALT: ++ case SYS_POWER_OFF: ++ atomic_set(in_reboot(), 1); ++ break; ++ default: ++ return NOTIFY_DONE; ++ } ++ ++ return NOTIFY_OK; ++} ++ ++static int notify_pm(struct notifier_block *nb, unsigned long event, void *buf) ++{ ++ switch (event) { ++ case PM_HIBERNATION_PREPARE: ++ case PM_SUSPEND_PREPARE: ++ atomic_inc(in_sleep()); ++ break; ++ case PM_POST_HIBERNATION: ++ case PM_POST_SUSPEND: ++ case PM_RESTORE_PREPARE: /* do we need this ?? */ ++ atomic_dec(in_sleep()); ++ break; ++ default: ++ return NOTIFY_DONE; ++ } ++ ++ pr_debug("%s: event = %lu, in_sleep() = %d\n", __func__, event, ++ atomic_read(in_sleep())); ++ ++ return NOTIFY_OK; ++} ++ ++static struct notifier_block reboot_notifier = { ++ .notifier_call = notify_reboot, ++}; ++ ++static struct notifier_block pm_notifier = { ++ .notifier_call = notify_pm, ++}; ++ ++static int yeeloong_hotkey_init(void) ++{ ++ int ret = 0; ++ ++ ret = register_reboot_notifier(&reboot_notifier); ++ if (ret) { ++ pr_err("Can't register reboot notifier\n"); ++ goto end; ++ } ++ ++ ret = register_pm_notifier(&pm_notifier); ++ if (ret) { ++ pr_err("Can't register pm notifier\n"); ++ goto free_reboot_notifier; ++ } ++ ++ ret = sci_irq_init(); ++ if (ret) { ++ pr_err("Can't init SCI interrupt\n"); ++ goto free_pm_notifier; ++ } ++ ++ ret = request_threaded_irq(SCI_IRQ_NUM, NULL, &sci_irq_handler, ++ IRQF_ONESHOT, "sci", NULL); ++ if (ret) { ++ pr_err("Can't thread SCI interrupt handler\n"); ++ goto free_pm_notifier; ++ } ++ ++ yeeloong_hotkey_dev = input_allocate_device(); ++ ++ if (!yeeloong_hotkey_dev) { ++ ret = -ENOMEM; ++ goto free_irq; ++ } ++ ++ yeeloong_hotkey_dev->name = "HotKeys"; ++ yeeloong_hotkey_dev->phys = "button/input0"; ++ yeeloong_hotkey_dev->id.bustype = BUS_HOST; ++ yeeloong_hotkey_dev->dev.parent = NULL; ++ ++ ret = sparse_keymap_setup(yeeloong_hotkey_dev, yeeloong_keymap, NULL); ++ if (ret) { ++ pr_err("Failed to setup input device keymap\n"); ++ goto free_dev; ++ } ++ ++ ret = input_register_device(yeeloong_hotkey_dev); ++ if (ret) ++ goto free_keymap; ++ ++ /* Update the current status of LID */ ++ report_lid_switch(ON); ++ ++#ifdef CONFIG_LOONGSON_SUSPEND ++ /* Install the real yeeloong_report_lid_status for pm.c */ ++ yeeloong_report_lid_status = report_lid_switch; ++#endif ++ return 0; ++ ++free_keymap: ++ sparse_keymap_free(yeeloong_hotkey_dev); ++free_dev: ++ input_free_device(yeeloong_hotkey_dev); ++free_irq: ++ free_irq(SCI_IRQ_NUM, NULL); ++free_pm_notifier: ++ unregister_pm_notifier(&pm_notifier); ++free_reboot_notifier: ++ unregister_reboot_notifier(&reboot_notifier); ++end: ++ return ret; ++} ++ ++static void yeeloong_hotkey_exit(void) ++{ ++ /* Free irq */ ++ free_irq(SCI_IRQ_NUM, NULL); ++ ++#ifdef CONFIG_LOONGSON_SUSPEND ++ /* Uninstall yeeloong_report_lid_status for pm.c */ ++ if (yeeloong_report_lid_status == report_lid_switch) ++ yeeloong_report_lid_status = NULL; ++#endif ++ ++ if (yeeloong_hotkey_dev) { ++ sparse_keymap_free(yeeloong_hotkey_dev); ++ input_unregister_device(yeeloong_hotkey_dev); ++ yeeloong_hotkey_dev = NULL; ++ } ++} ++ ++#ifdef CONFIG_PM ++static void usb_ports_set(int status) ++{ ++ status = !!status; ++ ++ ec_write(REG_USB0_FLAG, status); ++ ec_write(REG_USB1_FLAG, status); ++ ec_write(REG_USB2_FLAG, status); ++} ++ ++static int yeeloong_suspend(struct device *dev) ++ ++{ ++ if (ec_version_before("EC_VER=PQ1D27")) ++ vo_set_state(LCD, OFF); ++ vo_set_state(CRT, OFF); ++ usb_ports_set(OFF); ++ ++ return 0; ++} ++ ++static int yeeloong_resume(struct device *dev) ++{ ++ int ret; ++ ++ if (ec_version_before("EC_VER=PQ1D27")) ++ vo_set_state(LCD, ON); ++ vo_set_state(CRT, ON); ++ usb_ports_set(ON); ++ ++ ret = sci_irq_init(); ++ if (ret) ++ return -EFAULT; ++ ++ return 0; ++} ++ ++static const SIMPLE_DEV_PM_OPS(yeeloong_pm_ops, yeeloong_suspend, ++ yeeloong_resume); ++#endif ++ ++static struct platform_device_id platform_device_ids[] = { ++ { ++ .name = "yeeloong_laptop", ++ }, ++ {} ++}; ++ ++MODULE_DEVICE_TABLE(platform, platform_device_ids); ++ ++static struct platform_driver platform_driver = { ++ .driver = { ++ .name = "yeeloong_laptop", ++ .owner = THIS_MODULE, ++#ifdef CONFIG_PM ++ .pm = &yeeloong_pm_ops, ++#endif ++ }, ++ .id_table = platform_device_ids, ++}; ++ ++static int __init yeeloong_init(void) ++{ ++ int ret; ++ ++ pr_info("YeeLoong Laptop platform specific driver loaded.\n"); ++ ++ /* Register platform stuff */ ++ ret = platform_driver_register(&platform_driver); ++ if (ret) { ++ pr_err("Failed to register YeeLoong platform driver.\n"); ++ return ret; ++ } ++ ++#define yeeloong_init_drv(drv, alias) do { \ ++ pr_info("Registered YeeLoong " alias " driver.\n"); \ ++ ret = yeeloong_ ## drv ## _init(); \ ++ if (ret) { \ ++ pr_err("Failed to register YeeLoong " alias " driver.\n"); \ ++ yeeloong_ ## drv ## _exit(); \ ++ return ret; \ ++ } \ ++} while (0) ++ ++ yeeloong_init_drv(backlight, "backlight"); ++ yeeloong_init_drv(bat, "battery and AC"); ++ yeeloong_init_drv(hwmon, "hardware monitor"); ++ yeeloong_init_drv(vo, "video output"); ++ yeeloong_init_drv(lcd, "lcd output"); ++ yeeloong_init_drv(hotkey, "hotkey input"); ++ ++ return 0; ++} ++ ++static void __exit yeeloong_exit(void) ++{ ++ yeeloong_hotkey_exit(); ++ yeeloong_lcd_exit(); ++ yeeloong_vo_exit(); ++ yeeloong_hwmon_exit(); ++ yeeloong_bat_exit(); ++ yeeloong_backlight_exit(); ++ platform_driver_unregister(&platform_driver); ++ ++ pr_info("YeeLoong platform specific driver unloaded.\n"); ++} ++ ++module_init(yeeloong_init); ++module_exit(yeeloong_exit); ++ ++MODULE_AUTHOR("Wu Zhangjin ; Liu Junliang "); ++MODULE_DESCRIPTION("YeeLoong laptop driver"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig +index db933de..1232c4b 100644 +--- a/drivers/rtc/Kconfig ++++ b/drivers/rtc/Kconfig +@@ -649,6 +649,7 @@ comment "Platform RTC drivers" + config RTC_DRV_CMOS + tristate "PC-style 'CMOS'" + depends on X86 || ARM || M32R || PPC || MIPS || SPARC64 ++ depends on !DEXXON_GDIUM + default y if X86 + help + Say "yes" here to get direct support for the real time clock +diff --git a/drivers/staging/sm7xxfb/sm7xxfb.c b/drivers/staging/sm7xxfb/sm7xxfb.c +index 6176d98..e40ce80 100644 +--- a/drivers/staging/sm7xxfb/sm7xxfb.c ++++ b/drivers/staging/sm7xxfb/sm7xxfb.c +@@ -101,6 +101,7 @@ static struct vesa_mode vesa_mode_table[] = { + {"0x307", 1280, 1024, 8}, + + {"0x311", 640, 480, 16}, ++ {"0x313", 800, 480, 16}, + {"0x314", 800, 600, 16}, + {"0x317", 1024, 768, 16}, + {"0x31A", 1280, 1024, 16}, +diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c +index 3586460..15f66e5 100644 +--- a/drivers/usb/host/ohci-hcd.c ++++ b/drivers/usb/host/ohci-hcd.c +@@ -864,9 +864,13 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd) + } + + if (ints & OHCI_INTR_WDH) { +- spin_lock (&ohci->lock); +- dl_done_list (ohci); +- spin_unlock (&ohci->lock); ++ if (ohci->hcca->done_head == 0) { ++ ints &= ~OHCI_INTR_WDH; ++ } else { ++ spin_lock (&ohci->lock); ++ dl_done_list (ohci); ++ spin_unlock (&ohci->lock); ++ } + } + + if (quirk_zfmicro(ohci) && (ints & OHCI_INTR_SF)) { +diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c +index 2f3aceb..6647c3f 100644 +--- a/drivers/usb/host/pci-quirks.c ++++ b/drivers/usb/host/pci-quirks.c +@@ -454,6 +454,7 @@ void usb_amd_dev_put(void) + } + EXPORT_SYMBOL_GPL(usb_amd_dev_put); + ++#if defined(CONFIG_USB_UHCI_HCD) || defined(CONFIG_USB_UHCI_HCD_MODULE) + /* + * Make sure the controller is completely inactive, unable to + * generate interrupts or do DMA. +@@ -561,12 +562,16 @@ static void quirk_usb_handoff_uhci(struct pci_dev *pdev) + if (base) + uhci_check_and_reset_hc(pdev, base); + } ++#else ++#define quirk_usb_handoff_uhci(x) do { } while (0) ++#endif /* CONFIG_USB_UHCI_HCD* */ + + static int mmio_resource_enabled(struct pci_dev *pdev, int idx) + { + return pci_resource_start(pdev, idx) && mmio_enabled(pdev); + } + ++#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) + static void quirk_usb_handoff_ohci(struct pci_dev *pdev) + { + void __iomem *base; +@@ -633,7 +638,11 @@ static void quirk_usb_handoff_ohci(struct pci_dev *pdev) + /* Now the controller is safely in SUSPEND and nothing can wake it up */ + iounmap(base); + } ++#else ++#define quirk_usb_handoff_ohci(x) do { } while(0) ++#endif /* CONFIG_USB_OHCI_HCD* */ + ++#if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE) + static const struct dmi_system_id ehci_dmi_nohandoff_table[] = { + { + /* Pegatron Lucid (ExoPC) */ +@@ -806,6 +815,9 @@ static void quirk_usb_disable_ehci(struct pci_dev *pdev) + + iounmap(base); + } ++#else ++#define quirk_usb_disable_ehci(x) do { } while (0) ++#endif /* CONFIG_USB_EHCI_HCD* */ + + /* + * handshake - spin reading a register until handshake completes +@@ -945,6 +957,7 @@ void usb_disable_xhci_ports(struct pci_dev *xhci_pdev) + } + EXPORT_SYMBOL_GPL(usb_disable_xhci_ports); + ++#if defined(CONFIG_USB_XHCI_HCD) || defined(CONFIG_USB_XHCI_HCD_MODULE) + /** + * PCI Quirks for xHCI. + * +@@ -1052,6 +1065,9 @@ hc_init: + + iounmap(base); + } ++#else ++#define quirk_usb_handoff_xhci(x) do { } while (0) ++#endif /* CONFIG_USB_UHCI_HCD* */ + + static void quirk_usb_early_handoff(struct pci_dev *pdev) + { +diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c +index 9da566a..fffecfb 100644 +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -79,6 +79,9 @@ static void option_instat_callback(struct urb *urb); + #define OPTION_PRODUCT_ETNA_KOI_MODEM 0x7100 + #define OPTION_PRODUCT_GTM380_MODEM 0x7201 + ++#define HUAWO_VENDOR_ID 0x21F5 ++#define HUAWO_PRODUCT_E1621 0x2008 ++ + #define HUAWEI_VENDOR_ID 0x12D1 + #define HUAWEI_PRODUCT_E173 0x140C + #define HUAWEI_PRODUCT_E1750 0x1406 +@@ -610,6 +613,7 @@ static const struct usb_device_id option_ids[] = { + { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) }, + { USB_DEVICE(QUANTA_VENDOR_ID, 0xea42), + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, ++ { USB_DEVICE(HUAWO_VENDOR_ID, HUAWO_PRODUCT_E1621) }, /* QUANTA 6500 chips, Unicom extensive use of this card */ + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c05, USB_CLASS_COMM, 0x02, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c1f, USB_CLASS_COMM, 0x02, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) }, +diff --git a/include/linux/sm501.h b/include/linux/sm501.h +index 02fde50..a8677f0 100644 +--- a/include/linux/sm501.h ++++ b/include/linux/sm501.h +@@ -27,6 +27,9 @@ extern unsigned long sm501_set_clock(struct device *dev, + extern unsigned long sm501_find_clock(struct device *dev, + int clksrc, unsigned long req_freq); + ++extern void sm501_configure_gpio(struct device *dev, ++ unsigned int gpio, unsigned char mode); ++ + /* sm501_misc_control + * + * Modify the SM501's MISC_CONTROL register +@@ -122,6 +125,7 @@ struct sm501_reg_init { + #define SM501_USE_AC97 (1<<7) + #define SM501_USE_I2S (1<<8) + #define SM501_USE_GPIO (1<<9) ++#define SM501_USE_PWM (1<<10) + + #define SM501_USE_ALL (0xffffffff) + +diff --git a/init/calibrate.c b/init/calibrate.c +index 520702d..e78762a 100644 +--- a/init/calibrate.c ++++ b/init/calibrate.c +@@ -21,6 +21,7 @@ static int __init lpj_setup(char *str) + + __setup("lpj=", lpj_setup); + ++#ifndef ARCH_HAS_PREPARED_LPJ + #ifdef ARCH_HAS_READ_CURRENT_TIMER + + /* This routine uses the read_current_timer() routine and gets the +@@ -171,6 +172,7 @@ static unsigned long calibrate_delay_direct(void) + return 0; + } + #endif ++#endif /* ARCH_HAS_PREPARED_LPJ */ + + /* + * This is the number of bits of precision for the loops_per_jiffy. Each +@@ -282,6 +284,7 @@ void calibrate_delay(void) + lpj = lpj_fine; + pr_info("Calibrating delay loop (skipped), " + "value calculated using timer frequency.. "); ++#ifndef ARCH_HAS_PREPARED_LPJ + } else if ((lpj = calibrate_delay_is_known())) { + ; + } else if ((lpj = calibrate_delay_direct()) != 0) { +@@ -292,6 +295,7 @@ void calibrate_delay(void) + if (!printed) + pr_info("Calibrating delay loop... "); + lpj = calibrate_delay_converge(); ++#endif /* ARCH_HAS_PREPARED_LPJ */ + } + per_cpu(cpu_loops_per_jiffy, this_cpu) = lpj; + if (!printed) +diff --git a/net/rfkill/core.c b/net/rfkill/core.c +index ed7e0b4..6cb1ae8 100644 +--- a/net/rfkill/core.c ++++ b/net/rfkill/core.c +@@ -111,7 +111,7 @@ static LIST_HEAD(rfkill_list); /* list of registered rf switches */ + static DEFINE_MUTEX(rfkill_global_mutex); + static LIST_HEAD(rfkill_fds); /* list of open fds of /dev/rfkill */ + +-static unsigned int rfkill_default_state = 1; ++static unsigned int rfkill_default_state; /* default: 0 = radio off */ + module_param_named(default_state, rfkill_default_state, uint, 0444); + MODULE_PARM_DESC(default_state, + "Default initial state for all radio types, 0 = radio off"); +diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl +index 91280b8..6b147ae 100755 +--- a/scripts/recordmcount.pl ++++ b/scripts/recordmcount.pl +@@ -307,14 +307,33 @@ if ($arch eq "x86_64") { + $cc .= " -m64"; + $objcopy .= " -O elf64-sparc"; + } elsif ($arch eq "mips") { +- # To enable module support, we need to enable the -mlong-calls option +- # of gcc for module, after using this option, we can not get the real +- # offset of the calling to _mcount, but the offset of the lui +- # instruction or the addiu one. herein, we record the address of the +- # first one, and then we can replace this instruction by a branch +- # instruction to jump over the profiling function to filter the +- # indicated functions, or swith back to the lui instruction to trace +- # them, which means dynamic tracing. ++ # ++ # To disable tracing, just replace "jal _mcount" with nop; ++ # to enable tracing, replace back. so, the offset 14 is ++ # needed to be recorded. ++ # ++ # 10: 03e0082d move at,ra ++ # 14: 0c000000 jal 0 ++ # 14: R_MIPS_26 _mcount ++ # 14: R_MIPS_NONE *ABS* ++ # 14: R_MIPS_NONE *ABS* ++ # 18: 00020021 nop ++ # ++ # ++ # ++ # If no long call(-mlong-calls), the same to kernel. ++ # ++ # If the module space differs from the kernel space, long ++ # call is needed, as a result, the address of _mcount is ++ # needed to be recorded in a register and then jump from ++ # module space to kernel space via "jalr ". To ++ # disable tracing, "jalr " can be replaced by ++ # nop; to enable tracing, replace it back. Since the ++ # offset of "jalr " is not easy to be matched, ++ # the offset of the 1st _mcount below is recorded and to ++ # disable tracing, "lui v1, 0x0" is substituted with "b ++ # label", which jumps over "jalr "; to enable ++ # tracing, replace it back. + # + # c: 3c030000 lui v1,0x0 + # c: R_MIPS_HI16 _mcount +@@ -326,19 +345,12 @@ if ($arch eq "x86_64") { + # 10: R_MIPS_NONE *ABS* + # 14: 03e0082d move at,ra + # 18: 0060f809 jalr v1 ++ # label: + # +- # for the kernel: +- # +- # 10: 03e0082d move at,ra +- # 14: 0c000000 jal 0 +- # 14: R_MIPS_26 _mcount +- # 14: R_MIPS_NONE *ABS* +- # 14: R_MIPS_NONE *ABS* +- # 18: 00020021 nop + if ($is_module eq "0") { + $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_26\\s+_mcount\$"; + } else { +- $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_HI16\\s+_mcount\$"; ++ $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_(HI16|26)\\s+_mcount\$"; + } + $objdump .= " -Melf-trad".$endian."mips "; + +diff --git a/scripts/sstrip.sh b/scripts/sstrip.sh +new file mode 100755 +index 0000000..49b973a +--- /dev/null ++++ b/scripts/sstrip.sh +@@ -0,0 +1,59 @@ ++#!/bin/bash ++# sstrip.sh -- strip the section table of an elf file ++# ++# Copyright (C) 2010 Wu Zhangjin, wuzhangjin@gmail.com ++# Licensed under the GPLv2 ++# ++# Since the section table is useless for the embedded device, it can be ++# stripped out. ++# ++# Note: Some bootloader may check the section table but most of the time, it ++# may be not really used, If it really need the section table, it may need the ++# decompressed kernel image. ++ ++# Usage ++ ++function usage ++{ ++cat </dev/null` ++[ "xELF" != "x${FILE_TYPE}" ] && echo "$0: ${IMAGE} is not an ELF file" && exit -1 ++ ++[ "x${V}" == "x1" ] && orig_filesz=`wc -c ${IMAGE} | cut -d' ' -f1` ++ ++# Get the offset of the section table, here get the end of the program section ++filesz=$((`${OBJDUMP} -p ${IMAGE} | grep -m1 filesz | tr -s ' ' | cut -d' ' -f3`)) ++ ++# Truncate it via the dd tool ++dd if=/dev/null bs=1 of=${IMAGE} seek=${filesz} 2>/dev/null ++ ++# Clear the section table information in the ELF header ++# The last 6 bytes of the ELF header are the section table information ++echo -ne "\x00\x00\x00\x00\x00\x00" | dd of=${IMAGE} bs=1 seek=46 count=6 conv=notrunc 2>/dev/null ++ ++# Debug ++if [ "x${V}" == "x1" ]; then ++ echo "----------------------------------------------------------------" ++ echo "Strip the section table at ${filesz} of ${IMAGE}" ++ echo "----------------------------------------------------------------" ++ echo " sstrip: $0" ++ echo " objdump: ${OBJDUMP}" ++ echo "original size: ${orig_filesz}" ++ echo "current size: ${filesz}" ++ echo "reduced size: $((${orig_filesz} - ${filesz}))" ++fi diff --git a/libre/linux-libre-lts/gnewsense-binutils-flag.patch b/libre/linux-libre-lts/gnewsense-binutils-flag.patch new file mode 100644 index 000000000..5f2d44f99 --- /dev/null +++ b/libre/linux-libre-lts/gnewsense-binutils-flag.patch @@ -0,0 +1,28 @@ +Our binutils somehow ended up with a -mfix-gs2f-kernel, rather than +-mfix-ls2f-kernel. Cope with it. + +Index: arch/mips/loongson/Platform +=================================================================== +--- arch/mips/loongson/Platform.orig 2010-10-25 19:09:49.000000000 +0000 ++++ arch/mips/loongson/Platform 2010-10-25 19:10:44.000000000 +0000 +@@ -10,6 +10,12 @@ + $(call cc-option,-march=loongson2f,-march=r4600) + # Enable the workarounds for Loongson2f + ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS ++ ifneq ($(call as-option,-Wa$(comma)-mfix-gs2f-kernel,),) ++ cflags-$(CONFIG_CPU_NOP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel ++ ifneq ($(CONFIG_CPU_NOP_WORKAROUNDS),$(CONFIG_CPU_JUMP_WORKAROUNDS)) ++ cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel ++ endif ++ else + ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-nop,),) + $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-nop) + else +@@ -20,6 +26,7 @@ + else + cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-jump + endif ++ endif + endif + + # diff --git a/libre/linux-libre/3.16-7981337ad0-loongson-community.patch b/libre/linux-libre/3.16-7981337ad0-loongson-community.patch new file mode 100644 index 000000000..0c6be8023 --- /dev/null +++ b/libre/linux-libre/3.16-7981337ad0-loongson-community.patch @@ -0,0 +1,11731 @@ +diff --git a/Makefile b/Makefile +index d0901b4..d6f54c7 100644 +--- a/Makefile ++++ b/Makefile +@@ -303,8 +303,8 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ + + HOSTCC = gcc + HOSTCXX = g++ +-HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer +-HOSTCXXFLAGS = -O2 ++HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O3 -fomit-frame-pointer ++HOSTCXXFLAGS = -O3 + + ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1) + HOSTCFLAGS += -Wno-unused-value -Wno-unused-parameter \ +@@ -618,7 +618,7 @@ KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,) + ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE + KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,) + else +-KBUILD_CFLAGS += -O2 ++KBUILD_CFLAGS += -O3 + endif + + ifdef CONFIG_READABLE_ASM +diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig +index 4e238e6..4e71740 100644 +--- a/arch/mips/Kconfig ++++ b/arch/mips/Kconfig +@@ -285,7 +285,7 @@ config LASAT + + config MACH_LOONGSON + bool "Loongson family of machines" +- select SYS_SUPPORTS_ZBOOT ++ select SYS_SUPPORTS_ZBOOT_UART16550 + help + This enables the support of Loongson family of machines. + +@@ -919,6 +919,60 @@ config CSRC_IOASIC + config CSRC_R4K + bool + ++config MIPS_USER_RDTSC ++ bool "Emulate rdtsc instruction for MIPS" ++ depends on CSRC_R4K && MIPS32_O32 ++ default n ++ help ++ This optoin enables the Emulated rdtsc support for MIPS, which allows ++ the user-space applications read the R4k count directly. Currently, ++ this only support the CONFIG_MIPS32_O32 and R4K, but future, we may ++ add support for scall64-{n32,64}.S and scall32-32.S and for the count ++ registers provided by the other MIPS variants. ++ ++ This emulation based on the syscall instruction, by default, the ++ syscall is encoded as 0x0000000c, except the 0xc, the other parts can ++ be encoded as specific meaning. when a syscall instruction is issued, ++ through checking the encoding of the instruction, when the encoding ++ is the generic 0x000000c, we do the generic syscall work, if ++ something other is encoded in, we can do relevant things, except for ++ the light-weight things, such as read a register. herein, we read the ++ count register whenever there is something encoded in the syscall ++ instruction. In the future, we may be possible to abstract more ++ light-weight & frequently-used operations and add a ++ sys_call_table-like table to store the entries of some light-weight ++ operations and encode 1,2,3... into the syscall instruction and jump ++ to respective entry for diffrent numbers, as a result, we get ++ fast-syscall and which may speed up the user-space applications and ++ even be possibly improve the determinism. ++ ++ *Example* ++ ++ #include ++ #include ++ ++ /* ++ * Currently, our return value is only 32bit, In the long run, ++ * this should be uint64_t, just like clock_gettime(), but it ++ * should has high precision/low overhead than clock_gettime() ++ */ ++ uint32_t rdtsc(void) ++ { ++ /* ++ * Linux will store the value of the count register into ++ * the v0 register, which is just the return value of this ++ * function, so, please ignore the compiling warning. ++ */ ++ __asm__ __volatile__ ( ++ "syscall 1\n" ++ :::"$2"); ++ } ++ ++ int main(int argc, char *argv[]) ++ { ++ return printf("cycles: %u\n", rdtsc()); ++ } ++ + config CSRC_GIC + select MIPS_CM + bool +@@ -1557,6 +1611,15 @@ config CPU_LOONGSON2 + bool + select CPU_SUPPORTS_32BIT_KERNEL + select CPU_SUPPORTS_64BIT_KERNEL ++ select CPU_SUPPORTS_HIGHMEM if ! EMBEDDED ++ select ARCH_WANT_OPTIONAL_GPIOLIB ++ ++config CPU_LOONGSON1 ++ bool ++ select CPU_MIPS32 ++ select CPU_MIPSR2 ++ select CPU_HAS_PREFETCH ++ select CPU_SUPPORTS_32BIT_KERNEL + select CPU_SUPPORTS_HIGHMEM + select CPU_SUPPORTS_HUGEPAGES + +@@ -2201,7 +2264,7 @@ config CPU_SUPPORTS_MSA + + config ARCH_FLATMEM_ENABLE + def_bool y +- depends on !NUMA && !CPU_LOONGSON2 ++ depends on !NUMA && !(CPU_LOONGSON2 && HIBERNATION) + + config ARCH_DISCONTIGMEM_ENABLE + bool +diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile +index 61af6b6..8598044 100644 +--- a/arch/mips/boot/compressed/Makefile ++++ b/arch/mips/boot/compressed/Makefile +@@ -30,9 +30,10 @@ KBUILD_AFLAGS := $(LINUXINCLUDE) $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ + targets := head.o decompress.o string.o dbg.o uart-16550.o uart-alchemy.o + + # decompressor objects (linked with vmlinuz) +-vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o $(obj)/dbg.o ++vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o + + ifdef CONFIG_DEBUG_ZBOOT ++vmlinuzobjs-y += $(obj)/dbg.o + vmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o + vmlinuzobjs-$(CONFIG_MIPS_ALCHEMY) += $(obj)/uart-alchemy.o + endif +@@ -79,9 +80,18 @@ quiet_cmd_zld = LD $@ + cmd_zld = $(LD) $(LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T $< $(vmlinuzobjs-y) -o $@ + quiet_cmd_strip = STRIP $@ + cmd_strip = $(STRIP) -s $@ ++ifdef CONFIG_EMBEDDED ++quiet_cmd_sstrip = SSTRIP $@ ++ cmd_sstrip = $(srctree)/scripts/sstrip.sh $@ ++endif + vmlinuz: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr + $(call cmd,zld) + $(call cmd,strip) ++ $(call cmd,sstrip) ++ ++vmlinuz.unsstrip: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr ++ $(call cmd,zld) ++ $(call cmd,strip) + + # + # Some DECstations need all possible sections of an ECOFF executable +@@ -94,14 +104,14 @@ endif + hostprogs-y += ../elf2ecoff + + ifdef CONFIG_32BIT +- VMLINUZ = vmlinuz ++ VMLINUZ = vmlinuz.unsstrip + else + VMLINUZ = vmlinuz.32 + endif + + quiet_cmd_32 = OBJCOPY $@ + cmd_32 = $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@ +-vmlinuz.32: vmlinuz ++vmlinuz.32: vmlinuz.unsstrip + $(call cmd,32) + + quiet_cmd_ecoff = ECOFF $@ +@@ -110,11 +120,11 @@ vmlinuz.ecoff: $(obj)/../elf2ecoff $(VMLINUZ) + $(call cmd,ecoff) + + OBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary +-vmlinuz.bin: vmlinuz ++vmlinuz.bin: vmlinuz.unsstrip + $(call cmd,objcopy) + + OBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec +-vmlinuz.srec: vmlinuz ++vmlinuz.srec: vmlinuz.unsstrip + $(call cmd,objcopy) + +-clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec} ++clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec,unsstrip} +diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c +index c00c4dd..f4a656d 100644 +--- a/arch/mips/boot/compressed/decompress.c ++++ b/arch/mips/boot/compressed/decompress.c +@@ -27,8 +27,13 @@ unsigned long free_mem_end_ptr; + extern unsigned char __image_begin, __image_end; + + /* debug interfaces */ ++#ifdef CONFIG_DEBUG_ZBOOT + extern void puts(const char *s); + extern void puthex(unsigned long long val); ++#else ++#define puts(s) ++#define puthex(val) ++#endif + + void error(char *x) + { +diff --git a/arch/mips/boot/compressed/ld.script b/arch/mips/boot/compressed/ld.script +index 5a33409..de04ac9 100644 +--- a/arch/mips/boot/compressed/ld.script ++++ b/arch/mips/boot/compressed/ld.script +@@ -49,5 +49,6 @@ SECTIONS + *(.reginfo) + *(.comment) + *(.note) ++ *(.gnu.attributes) + } + } +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h +index a0ee0cb..4e18add 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h +@@ -301,5 +301,40 @@ extern void _wrmsr(u32 msr, u32 hi, u32 lo); + /* GPIO : I/O SPACE; REG : 32BITS */ + #define GPIOL_OUT_VAL 0x00 + #define GPIOL_OUT_EN 0x04 ++#define GPIOL_OUT_AUX1_SEL 0x10 ++/* SMB : I/O SPACE, REG : 8BITS WIDTH */ ++#define SMB_SDA 0x00 ++#define SMB_STS 0x01 ++#define SMB_STS_SLVSTP (1 << 7) ++#define SMB_STS_SDAST (1 << 6) ++#define SMB_STS_BER (1 << 5) ++#define SMB_STS_NEGACK (1 << 4) ++#define SMB_STS_STASTR (1 << 3) ++#define SMB_STS_NMATCH (1 << 2) ++#define SMB_STS_MASTER (1 << 1) ++#define SMB_STS_XMIT (1 << 0) ++#define SMB_CTRL_STS 0x02 ++#define SMB_CSTS_TGSTL (1 << 5) ++#define SMB_CSTS_TSDA (1 << 4) ++#define SMB_CSTS_GCMTCH (1 << 3) ++#define SMB_CSTS_MATCH (1 << 2) ++#define SMB_CSTS_BB (1 << 1) ++#define SMB_CSTS_BUSY (1 << 0) ++#define SMB_CTRL1 0x03 ++#define SMB_CTRL1_STASTRE (1 << 7) ++#define SMB_CTRL1_NMINTE (1 << 6) ++#define SMB_CTRL1_GCMEN (1 << 5) ++#define SMB_CTRL1_ACK (1 << 4) ++#define SMB_CTRL1_RSVD (1 << 3) ++#define SMB_CTRL1_INTEN (1 << 2) ++#define SMB_CTRL1_STOP (1 << 1) ++#define SMB_CTRL1_START (1 << 0) ++#define SMB_ADDR 0x04 ++#define SMB_ADDR_SAEN (1 << 7) ++#define SMB_CONTROLLER_ADDR (0xef << 0) ++#define SMB_CTRL2 0x05 ++#define SMB_FREQ (0x20 << 1) ++#define SMB_ENABLE (0x01 << 0) ++#define SMB_CTRL3 0x06 + + #endif /* _CS5536_H */ +diff --git a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h +index 021d017..50aafca 100644 +--- a/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h ++++ b/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h +@@ -28,8 +28,19 @@ static inline void __maybe_unused enable_mfgpt0_counter(void) + #define COMPARE ((MFGPT_TICK_RATE + HZ/2) / HZ) + + #define MFGPT_BASE mfgpt_base ++#define MFGPT0_CMP1 (MFGPT_BASE + 0) + #define MFGPT0_CMP2 (MFGPT_BASE + 2) + #define MFGPT0_CNT (MFGPT_BASE + 4) + #define MFGPT0_SETUP (MFGPT_BASE + 6) + ++#define MFGPT1_CMP1 (MFGPT_BASE + 0x08) ++#define MFGPT1_CMP2 (MFGPT_BASE + 0x0A) ++#define MFGPT1_CNT (MFGPT_BASE + 0x0C) ++#define MFGPT1_SETUP (MFGPT_BASE + 0x0E) ++ ++#define MFGPT2_CMP1 (MFGPT_BASE + 0x10) ++#define MFGPT2_CMP2 (MFGPT_BASE + 0x12) ++#define MFGPT2_CNT (MFGPT_BASE + 0x14) ++#define MFGPT2_SETUP (MFGPT_BASE + 0x16) ++ + #endif /*!_CS5536_MFGPT_H */ +diff --git a/arch/mips/include/asm/mach-loongson/loongson.h b/arch/mips/include/asm/mach-loongson/loongson.h +index f3fd1eb..3fdfe84 100644 +--- a/arch/mips/include/asm/mach-loongson/loongson.h ++++ b/arch/mips/include/asm/mach-loongson/loongson.h +@@ -46,6 +46,12 @@ static inline void prom_init_uart_base(void) + #endif + } + ++/* ++ * Copy kernel command line from arcs_cmdline ++ */ ++#include ++extern char loongson_cmdline[COMMAND_LINE_SIZE]; ++ + /* irq operation functions */ + extern void bonito_irqdispatch(void); + extern void __init bonito_irq_init(void); +diff --git a/arch/mips/include/asm/mach-loongson/machine.h b/arch/mips/include/asm/mach-loongson/machine.h +index 1b1f592..2f6eb79 100644 +--- a/arch/mips/include/asm/mach-loongson/machine.h ++++ b/arch/mips/include/asm/mach-loongson/machine.h +@@ -24,6 +24,12 @@ + + #endif + ++#ifdef CONFIG_DEXXON_GDIUM ++ ++#define LOONGSON_MACHTYPE MACH_DEXXON_GDIUM2F10 ++ ++#endif ++ + #ifdef CONFIG_LEMOTE_MACH3A + + #define LOONGSON_MACHTYPE MACH_LEMOTE_A1101 +diff --git a/arch/mips/include/asm/mach-loongson1/clock.h b/arch/mips/include/asm/mach-loongson1/clock.h +new file mode 100644 +index 0000000..dd1afdb +--- /dev/null ++++ b/arch/mips/include/asm/mach-loongson1/clock.h +@@ -0,0 +1,53 @@ ++#ifndef __ASM_MACH_LOONGSON1_CLOCK_H ++#define __ASM_MACH_LOONGSON1_CLOCK_H ++ ++#include ++#include ++#include ++#include ++ ++extern void (*cpu_wait) (void); ++ ++struct clk; ++ ++struct clk_ops { ++ void (*init) (struct clk *clk); ++ void (*enable) (struct clk *clk); ++ void (*disable) (struct clk *clk); ++ void (*recalc) (struct clk *clk); ++ int (*set_rate) (struct clk *clk, unsigned long rate, int algo_id); ++ long (*round_rate) (struct clk *clk, unsigned long rate); ++}; ++ ++struct clk { ++ struct list_head node; ++ const char *name; ++ int id; ++ struct module *owner; ++ ++ struct clk *parent; ++ struct clk_ops *ops; ++ ++ struct kref kref; ++ ++ unsigned long rate; ++ unsigned long flags; ++}; ++ ++#define CLK_ALWAYS_ENABLED (1 << 0) ++#define CLK_RATE_PROPAGATES (1 << 1) ++ ++/* Should be defined by processor-specific code */ ++void arch_init_clk_ops(struct clk_ops **, int type); ++ ++int clk_init(void); ++ ++int __clk_enable(struct clk *); ++void __clk_disable(struct clk *); ++ ++void clk_recalc_rate(struct clk *); ++ ++int clk_register(struct clk *); ++void clk_unregister(struct clk *); ++ ++#endif /* __ASM_MIPS_CLOCK_H */ +diff --git a/arch/mips/include/asm/mach-loongson1/regs-intc.h b/arch/mips/include/asm/mach-loongson1/regs-intc.h +new file mode 100644 +index 0000000..6d5db23 +--- /dev/null ++++ b/arch/mips/include/asm/mach-loongson1/regs-intc.h +@@ -0,0 +1,25 @@ ++/* ++ * Copyright (c) 2011 Zhang, Keguang ++ * ++ * Loongson1 Interrupt register definitions. ++ * ++ * 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. ++ */ ++ ++#ifndef __ASM_MACH_LOONGSON1_REGS_INTC_H ++#define __ASM_MACH_LOONGSON1_REGS_INTC_H ++ ++#define LS1X_INTC_REG(n, x) \ ++ (ioremap(LS1X_INTC_BASE + (n * 0x18) + (x), 4)) ++ ++#define LS1X_INTC_INTISR(n) LS1X_INTC_REG(n, 0x0) ++#define LS1X_INTC_INTIEN(n) LS1X_INTC_REG(n, 0x4) ++#define LS1X_INTC_INTSET(n) LS1X_INTC_REG(n, 0x8) ++#define LS1X_INTC_INTCLR(n) LS1X_INTC_REG(n, 0xc) ++#define LS1X_INTC_INTPOL(n) LS1X_INTC_REG(n, 0x10) ++#define LS1X_INTC_INTEDGE(n) LS1X_INTC_REG(n, 0x14) ++ ++#endif /* __ASM_MACH_LOONGSON1_REGS_INTC_H */ +diff --git a/arch/mips/include/asm/timex.h b/arch/mips/include/asm/timex.h +index b05bb70..44c9a69 100644 +--- a/arch/mips/include/asm/timex.h ++++ b/arch/mips/include/asm/timex.h +@@ -11,6 +11,10 @@ + + #ifdef __KERNEL__ + ++#ifdef CONFIG_CSRC_R4K ++#define ARCH_HAS_PREPARED_LPJ ++#endif ++ + #include + + #include +diff --git a/arch/mips/include/uapi/asm/inst.h b/arch/mips/include/uapi/asm/inst.h +index 4bfdb9d..f57d892 100644 +--- a/arch/mips/include/uapi/asm/inst.h ++++ b/arch/mips/include/uapi/asm/inst.h +@@ -65,6 +65,8 @@ enum spec_op { + enum spec2_op { + madd_op, maddu_op, mul_op, spec2_3_unused_op, + msub_op, msubu_op, /* more unused ops */ ++ loongson_madd_op = 0x18, loongson_msub_op, ++ loongson_nmadd_op, loongson_nmsub_op, + clz_op = 0x20, clo_op, + dclz_op = 0x24, dclo_op, + sdbpp_op = 0x3f +@@ -146,7 +148,7 @@ enum cop0_com_func { + */ + enum cop1_fmt { + s_fmt, d_fmt, e_fmt, q_fmt, +- w_fmt, l_fmt ++ w_fmt, l_fmt, ps_fmt + }; + + /* +@@ -175,7 +177,8 @@ enum cop1_sdw_func { + enum cop1x_func { + lwxc1_op = 0x00, ldxc1_op = 0x01, + swxc1_op = 0x08, sdxc1_op = 0x09, +- pfetch_op = 0x0f, madd_s_op = 0x20, ++ pfetch_op = 0x0f, ++ prefx_op = 0x17, madd_s_op = 0x20, + madd_d_op = 0x21, madd_e_op = 0x22, + msub_s_op = 0x28, msub_d_op = 0x29, + msub_e_op = 0x2a, nmadd_s_op = 0x30, +diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S +index f1343cc..1320561 100644 +--- a/arch/mips/kernel/scall64-o32.S ++++ b/arch/mips/kernel/scall64-o32.S +@@ -26,6 +26,18 @@ + + .align 5 + NESTED(handle_sys, PT_SIZE, sp) ++#ifdef CONFIG_MIPS_USER_RDTSC ++ MFC0 k0, CP0_EPC ++ lw k1, 0(k0) ++ sltiu k1, k1, 0x1c ++ bne k1, zero, 1f # Normal syscall code: 0x0c < 0x1c ++ nop ++ mfc0 v0, CP0_COUNT # Get TSC ++ PTR_ADDIU k0, 4 # ret from syscall ++ MTC0 k0, CP0_EPC ++ eret ++1: ++#endif /* CONFIG_MIPS_USER_RDTSC */ + .set noat + SAVE_SOME + TRACE_IRQS_ON_RELOAD +diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c +index 8d01709..9cd25da 100644 +--- a/arch/mips/kernel/time.c ++++ b/arch/mips/kernel/time.c +@@ -119,6 +119,11 @@ static __init int cpu_has_mfc0_count_bug(void) + + void __init time_init(void) + { ++#ifdef CONFIG_HR_SCHED_CLOCK ++ if (!mips_clockevent_init() || !cpu_has_mfc0_count_bug()) ++ write_c0_count(0); ++#endif ++ + plat_time_init(); + + /* +diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile +index eeddc58..d7bec00 100644 +--- a/arch/mips/lib/Makefile ++++ b/arch/mips/lib/Makefile +@@ -2,10 +2,14 @@ + # Makefile for MIPS-specific library files.. + # + +-lib-y += bitops.o csum_partial.o delay.o memcpy.o memset.o \ ++lib-y += bitops.o csum_partial.o memcpy.o memset.o \ + mips-atomic.o strlen_user.o strncpy_user.o \ + strnlen_user.o uncached.o + ++ifndef CONFIG_CSRC_R4K ++lib-y += delay.o ++endif ++ + obj-y += iomap.o + obj-$(CONFIG_PCI) += iomap-pci.o + +diff --git a/arch/mips/loongson/Kconfig b/arch/mips/loongson/Kconfig +index e6a86cc..df57920 100644 +--- a/arch/mips/loongson/Kconfig ++++ b/arch/mips/loongson/Kconfig +@@ -32,12 +32,12 @@ config LEMOTE_FULOONG2E + + config LEMOTE_MACH2F + bool "Lemote Loongson 2F family machines" +- select ARCH_SPARSEMEM_ENABLE ++ select ARCH_SPARSEMEM_ENABLE if HIBERNATION + select BOARD_SCACHE + select BOOT_ELF32 + select CEVT_R4K if ! MIPS_EXTERNAL_TIMER + select CPU_HAS_WB +- select CS5536 ++ select CS5536 if PCI + select CSRC_R4K if ! MIPS_EXTERNAL_TIMER + select DMA_NONCOHERENT + select GENERIC_ISA_DMA_SUPPORT_BROKEN +@@ -45,14 +45,13 @@ config LEMOTE_MACH2F + select HW_HAS_PCI + select I8259 + select IRQ_CPU +- select ISA + select SYS_HAS_CPU_LOONGSON2F + select SYS_HAS_EARLY_PRINTK + select SYS_SUPPORTS_32BIT_KERNEL + select SYS_SUPPORTS_64BIT_KERNEL +- select SYS_SUPPORTS_HIGHMEM ++ select SYS_SUPPORTS_HIGHMEM if ! EMBEDDED + select SYS_SUPPORTS_LITTLE_ENDIAN +- select LOONGSON_MC146818 ++ select LOONGSON_MC146818 if RTC_DRV_CMOS + help + Lemote Loongson 2F family machines utilize the 2F revision of + Loongson processor and the AMD CS5536 south bridge. +@@ -60,6 +59,31 @@ config LEMOTE_MACH2F + These family machines include fuloong2f mini PC, yeeloong2f notebook, + LingLoong allinone PC and so forth. + ++config DEXXON_GDIUM ++ bool "Dexxon Gdium Netbook" ++ select ARCH_SPARSEMEM_ENABLE ++ select BOARD_SCACHE ++ select BOOT_ELF32 ++ select CEVT_R4K if ! MIPS_EXTERNAL_TIMER ++ select CPU_HAS_WB ++ select CSRC_R4K if ! MIPS_EXTERNAL_TIMER ++ select DMA_NONCOHERENT ++ select GENERIC_ISA_DMA_SUPPORT_BROKEN ++ select HW_HAS_PCI ++ select I8259 ++ select IRQ_CPU ++ select ISA ++ select SYS_HAS_CPU_LOONGSON2F ++ select SYS_HAS_EARLY_PRINTK ++ select SYS_SUPPORTS_32BIT_KERNEL ++ select SYS_SUPPORTS_64BIT_KERNEL ++ select SYS_SUPPORTS_HIGHMEM ++ select SYS_SUPPORTS_LITTLE_ENDIAN ++ select ARCH_REQUIRE_GPIOLIB ++ select HAVE_PWM if MFD_SM501 ++ help ++ Dexxon gdium netbook based on Loongson 2F and SM502. ++ + config LEMOTE_MACH3A + bool "Lemote Loongson 3A family machines" + select ARCH_SPARSEMEM_ENABLE +@@ -134,6 +158,24 @@ config LOONGSON_MC146818 + bool + default n + ++config GDIUM_PWM_CLOCK ++ tristate "Gdium PWM Timer" ++ default n ++ depends on HAVE_PWM && EXPERIMENTAL && BROKEN ++ select MIPS_EXTERNAL_TIMER ++ help ++ This options enables the experimental sm501-pwm based clock. With it, ++ you may be possible to use the loongson2f cpufreq driver. ++ ++config GDIUM_VERSION ++ int "Configure Gdium Version" ++ depends on DEXXON_GDIUM ++ default "3" ++ help ++ I have no information about how to determine which version your board ++ is, If the default config doesn't work for it, please change it to ++ smaller ones. ++ + config LEFI_FIRMWARE_INTERFACE + bool + +diff --git a/arch/mips/loongson/Makefile b/arch/mips/loongson/Makefile +index 7429994..63214c8 100644 +--- a/arch/mips/loongson/Makefile ++++ b/arch/mips/loongson/Makefile +@@ -17,6 +17,12 @@ obj-$(CONFIG_LEMOTE_FULOONG2E) += fuloong-2e/ + obj-$(CONFIG_LEMOTE_MACH2F) += lemote-2f/ + + # ++# Dexxon gdium netbook, based on loongson 2F and SM502 ++# ++ ++obj-$(CONFIG_DEXXON_GDIUM) += gdium/ ++ ++# + # All Loongson-3 family machines + # + +diff --git a/arch/mips/loongson/Platform b/arch/mips/loongson/Platform +index 6205372..32dd006 100644 +--- a/arch/mips/loongson/Platform ++++ b/arch/mips/loongson/Platform +@@ -30,4 +30,5 @@ platform-$(CONFIG_MACH_LOONGSON) += loongson/ + cflags-$(CONFIG_MACH_LOONGSON) += -I$(srctree)/arch/mips/include/asm/mach-loongson -mno-branch-likely + load-$(CONFIG_LEMOTE_FULOONG2E) += 0xffffffff80100000 + load-$(CONFIG_LEMOTE_MACH2F) += 0xffffffff80200000 ++load-$(CONFIG_DEXXON_GDIUM) += 0xffffffff80200000 + load-$(CONFIG_CPU_LOONGSON3) += 0xffffffff80200000 +diff --git a/arch/mips/loongson/common/cmdline.c b/arch/mips/loongson/common/cmdline.c +index 72fed00..96d5919 100644 +--- a/arch/mips/loongson/common/cmdline.c ++++ b/arch/mips/loongson/common/cmdline.c +@@ -17,10 +17,15 @@ + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ ++#include + #include + + #include + ++/* the kernel command line copied from arcs_cmdline */ ++char loongson_cmdline[COMMAND_LINE_SIZE]; ++EXPORT_SYMBOL(loongson_cmdline); ++ + void __init prom_init_cmdline(void) + { + int prom_argc; +@@ -45,4 +50,31 @@ void __init prom_init_cmdline(void) + } + + prom_init_machtype(); ++ ++ /* append machine specific command line */ ++ switch (mips_machtype) { ++ case MACH_LEMOTE_LL2F: ++ if ((strstr(arcs_cmdline, "video=")) == NULL) ++ strcat(arcs_cmdline, " video=sisfb:1360x768-16@60"); ++ break; ++ case MACH_LEMOTE_FL2F: ++ if ((strstr(arcs_cmdline, "ide_core.ignore_cable=")) == NULL) ++ strcat(arcs_cmdline, " ide_core.ignore_cable=0"); ++ break; ++ case MACH_LEMOTE_ML2F7: ++ /* Mengloong-2F has a 800x480 screen */ ++ if ((strstr(arcs_cmdline, "vga=")) == NULL) ++ strcat(arcs_cmdline, " vga=0x313"); ++ break; ++ case MACH_DEXXON_GDIUM2F10: ++ /* gdium has a 1024x600 screen */ ++ if ((strstr(arcs_cmdline, "video=")) == NULL) ++ strcat(arcs_cmdline, " video=sm501fb:1024x600@60"); ++ break; ++ default: ++ break; ++ } ++ ++ /* copy arcs_cmdline into loongson_cmdline */ ++ strncpy(loongson_cmdline, arcs_cmdline, COMMAND_LINE_SIZE); + } +diff --git a/arch/mips/loongson/gdium/Makefile b/arch/mips/loongson/gdium/Makefile +new file mode 100644 +index 0000000..f3f4f51 +--- /dev/null ++++ b/arch/mips/loongson/gdium/Makefile +@@ -0,0 +1,6 @@ ++# Makefile for gdium ++ ++obj-y += irq.o reset.o platform.o ++ ++obj-$(CONFIG_MFD_SM501) += sm501-pwm.o ++obj-$(CONFIG_GDIUM_PWM_CLOCK) += gdium-clock.o +diff --git a/arch/mips/loongson/gdium/gdium-clock.c b/arch/mips/loongson/gdium/gdium-clock.c +new file mode 100644 +index 0000000..fdbf42a +--- /dev/null ++++ b/arch/mips/loongson/gdium/gdium-clock.c +@@ -0,0 +1,234 @@ ++/* ++ * Doesn't work really well. When used, the clocksource is producing ++ * bad timings and the clockevent can't be used (don't have one shot feature ++ * thus can't switch on the fly and the pwm is initialised too late to be able ++ * to use it at boot time). ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define CLOCK_PWM 1 ++#define CLOCK_PWM_FREQ 1500000 /* Freq in Hz */ ++#define CLOCK_LATCH ((CLOCK_PWM_FREQ + HZ/2) / HZ) ++#define CLOCK_PWM_PERIOD (1000000000/CLOCK_PWM_FREQ) /* period ns */ ++#define CLOCK_PWM_DUTY 50 ++#define CLOCK_PWM_IRQ (MIPS_CPU_IRQ_BASE + 4) ++ ++static const char drv_name[] = "gdium-clock"; ++ ++static struct pwm_device *clock_pwm; ++ ++static DEFINE_SPINLOCK(clock_pwm_lock); ++static uint64_t clock_tick; ++ ++static irqreturn_t gdium_pwm_clock_interrupt(int irq, void *dev_id) ++{ ++ struct clock_event_device *cd = dev_id; ++ unsigned long flag; ++ ++ spin_lock_irqsave(&clock_pwm_lock, flag); ++ clock_tick++; ++ /* wait intn2 to finish */ ++ do { ++ LOONGSON_INTENCLR = (1 << 13); ++ } while (LOONGSON_INTISR & (1 << 13)); ++ spin_unlock_irqrestore(&clock_pwm_lock, flag); ++ ++ if (cd && cd->event_handler) ++ cd->event_handler(cd); ++ ++ return IRQ_HANDLED; ++} ++ ++static cycle_t gdium_pwm_clock_read(struct clocksource *cs) ++{ ++ unsigned long flag; ++ uint32_t jifs; ++ uint64_t ticks; ++ ++ spin_lock_irqsave(&clock_pwm_lock, flag); ++ jifs = jiffies; ++ ticks = clock_tick; ++ spin_unlock_irqrestore(&clock_pwm_lock, flag); ++ /* return (cycle_t)ticks; */ ++ return (cycle_t)(CLOCK_LATCH * jifs); ++} ++ ++static struct clocksource gdium_pwm_clock_clocksource = { ++ .name = "gdium_csrc", ++ .read = gdium_pwm_clock_read, ++ .mask = CLOCKSOURCE_MASK(64), ++ .flags = CLOCK_SOURCE_IS_CONTINUOUS | CLOCK_SOURCE_MUST_VERIFY, ++ .shift = 20, ++}; ++ ++/* Debug fs */ ++static int gdium_pwm_clock_show(struct seq_file *s, void *p) ++{ ++ unsigned long flag; ++ uint64_t ticks; ++ ++ spin_lock_irqsave(&clock_pwm_lock, flag); ++ ticks = clock_tick; ++ spin_unlock_irqrestore(&clock_pwm_lock, flag); ++ seq_printf(s, "%lld\n", ticks); ++ return 0; ++} ++ ++static int gdium_pwm_clock_open(struct inode *inode, struct file *file) ++{ ++ return single_open(file, gdium_pwm_clock_show, inode->i_private); ++} ++ ++static const struct file_operations gdium_pwm_clock_fops = { ++ .open = gdium_pwm_clock_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .owner = THIS_MODULE, ++}; ++static struct dentry *debugfs_file; ++ ++static void gdium_pwm_clock_set_mode(enum clock_event_mode mode, ++ struct clock_event_device *evt) ++{ ++ /* Nothing to do ... */ ++} ++ ++static struct clock_event_device gdium_pwm_clock_cevt = { ++ .name = "gdium_cevt", ++ .features = CLOCK_EVT_FEAT_PERIODIC, ++ /* .mult, .shift, .max_delta_ns and .min_delta_ns left uninitialized */ ++ .rating = 299, ++ .irq = CLOCK_PWM_IRQ, ++ .set_mode = gdium_pwm_clock_set_mode, ++}; ++ ++static struct platform_device_id platform_device_ids[] = { ++ { ++ .name = "gdium-pwmclk", ++ }, ++ {} ++}; ++MODULE_DEVICE_TABLE(platform, platform_device_ids); ++ ++static struct platform_driver gdium_pwm_clock_driver = { ++ .driver = { ++ .name = drv_name, ++ .owner = THIS_MODULE, ++ }, ++ .id_table = platform_device_ids, ++}; ++ ++static int gdium_pwm_clock_drvinit(void) ++{ ++ int ret; ++ struct clocksource *cs = &gdium_pwm_clock_clocksource; ++ struct clock_event_device *cd = &gdium_pwm_clock_cevt; ++ unsigned int cpu = smp_processor_id(); ++ ++ clock_tick = 0; ++ ++ clock_pwm = pwm_request(CLOCK_PWM, drv_name); ++ if (clock_pwm == NULL) { ++ pr_err("unable to request PWM for Gdium clock\n"); ++ return -EBUSY; ++ } ++ ret = pwm_config(clock_pwm, CLOCK_PWM_DUTY, CLOCK_PWM_PERIOD); ++ if (ret) { ++ pr_err("unable to configure PWM for Gdium clock\n"); ++ goto err_pwm_request; ++ } ++ ret = pwm_enable(clock_pwm); ++ if (ret) { ++ pr_err("unable to enable PWM for Gdium clock\n"); ++ goto err_pwm_request; ++ } ++ ++ cd->cpumask = cpumask_of(cpu); ++ ++ cd->shift = 22; ++ cd->mult = div_sc(CLOCK_PWM_FREQ, NSEC_PER_SEC, cd->shift); ++ cd->max_delta_ns = clockevent_delta2ns(0x7FFF, cd); ++ cd->min_delta_ns = clockevent_delta2ns(0xF, cd); ++ clockevents_register_device(&gdium_pwm_clock_cevt); ++ ++ /* SM501 PWM1 connected to intn2 <->ip4 */ ++ LOONGSON_INTPOL = (1 << 13); ++ LOONGSON_INTEDGE &= ~(1 << 13); ++ ret = request_irq(CLOCK_PWM_IRQ, gdium_pwm_clock_interrupt, IRQF_DISABLED, drv_name, &gdium_pwm_clock_cevt); ++ if (ret) { ++ pr_err("Can't claim irq\n"); ++ goto err_pwm_disable; ++ } ++ ++ cs->rating = 200; ++ cs->mult = clocksource_hz2mult(CLOCK_PWM_FREQ, cs->shift); ++ ret = clocksource_register(&gdium_pwm_clock_clocksource); ++ if (ret) { ++ pr_err("Can't register clocksource\n"); ++ goto err_irq; ++ } ++ pr_info("Clocksource registered with shift %d and mult %d\n", ++ cs->shift, cs->mult); ++ ++ debugfs_file = debugfs_create_file(drv_name, S_IFREG | S_IRUGO, ++ NULL, NULL, &gdium_pwm_clock_fops); ++ ++ return 0; ++ ++err_irq: ++ free_irq(CLOCK_PWM_IRQ, &gdium_pwm_clock_cevt); ++err_pwm_disable: ++ pwm_disable(clock_pwm); ++err_pwm_request: ++ pwm_free(clock_pwm); ++ return ret; ++} ++ ++static void gdium_pwm_clock_drvexit(void) ++{ ++ free_irq(CLOCK_PWM_IRQ, &gdium_pwm_clock_cevt); ++ pwm_disable(clock_pwm); ++ pwm_free(clock_pwm); ++} ++ ++ ++static int __devinit gdium_pwm_clock_init(void) ++{ ++ int ret = gdium_pwm_clock_drvinit(); ++ ++ if (ret) { ++ pr_err("Fail to register gdium clock driver\n"); ++ return ret; ++ } ++ ++ return platform_driver_register(&gdium_pwm_clock_driver); ++} ++ ++static void __exit gdium_pwm_clock_cleanup(void) ++{ ++ gdium_pwm_clock_drvexit(); ++ platform_driver_unregister(&gdium_pwm_clock_driver); ++} ++ ++module_init(gdium_pwm_clock_init); ++module_exit(gdium_pwm_clock_cleanup); ++ ++MODULE_AUTHOR("Arnaud Patard "); ++MODULE_DESCRIPTION("Gdium PWM clock driver"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("platform:gdium-pwmclk"); +diff --git a/arch/mips/loongson/gdium/irq.c b/arch/mips/loongson/gdium/irq.c +new file mode 100644 +index 0000000..2415d20 +--- /dev/null ++++ b/arch/mips/loongson/gdium/irq.c +@@ -0,0 +1,55 @@ ++/* ++ * Copyright (C) 2007 Lemote Inc. ++ * Author: Fuxin Zhang, zhangfx@lemote.com ++ * ++ * Copyright (c) 2010 yajin ++ * ++ * 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. ++ */ ++ ++#include ++#include ++ ++#include ++#include ++ ++#define LOONGSON_TIMER_IRQ (MIPS_CPU_IRQ_BASE + 7) /* cpu timer */ ++#define LOONGSON_NORTH_BRIDGE_IRQ (MIPS_CPU_IRQ_BASE + 6) /* bonito */ ++#define LOONGSON_UART_IRQ (MIPS_CPU_IRQ_BASE + 3) /* cpu serial port */ ++ ++void mach_irq_dispatch(unsigned int pending) ++{ ++ if (pending & CAUSEF_IP7) ++ do_IRQ(LOONGSON_TIMER_IRQ); ++ else if (pending & CAUSEF_IP6) { /* North Bridge, Perf counter */ ++ do_perfcnt_IRQ(); ++ bonito_irqdispatch(); ++ } else if (pending & CAUSEF_IP3) /* CPU UART */ ++ do_IRQ(LOONGSON_UART_IRQ); ++#if defined(CONFIG_GDIUM_PWM_CLOCK) || defined(CONFIG_GDIUM_PWM_CLOCK_MODULE) ++ else if (pending & CAUSEF_IP4) /* SM501 PWM clock */ ++ do_IRQ(MIPS_CPU_IRQ_BASE + 4); ++#endif ++ else ++ spurious_interrupt(); ++} ++ ++static irqreturn_t ip6_action(int cpl, void *dev_id) ++{ ++ return IRQ_HANDLED; ++} ++ ++struct irqaction ip6_irqaction = { ++ .handler = ip6_action, ++ .name = "cascade", ++ .flags = IRQF_SHARED, ++}; ++ ++void __init mach_init_irq(void) ++{ ++ /* setup north bridge irq (bonito) */ ++ setup_irq(LOONGSON_NORTH_BRIDGE_IRQ, &ip6_irqaction); ++} +diff --git a/arch/mips/loongson/gdium/platform.c b/arch/mips/loongson/gdium/platform.c +new file mode 100644 +index 0000000..ffafba4 +--- /dev/null ++++ b/arch/mips/loongson/gdium/platform.c +@@ -0,0 +1,135 @@ ++/* ++ * Copyright (c) 2009 Philippe Vachon ++ * ++ * 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define GDIUM_GPIO_BASE 224 ++ ++static struct i2c_board_info __initdata sm502dev_i2c_devices[] = { ++ { ++ I2C_BOARD_INFO("lm75", 0x48), ++ }, ++ { ++ I2C_BOARD_INFO("m41t83", 0x68), ++ }, ++ { ++ I2C_BOARD_INFO("gdium-laptop", 0x40), ++ }, ++}; ++ ++static int sm502dev_backlight_init(struct device *dev) ++{ ++ /* Add gpio request stuff here */ ++ return 0; ++} ++ ++static void sm502dev_backlight_exit(struct device *dev) ++{ ++ /* Add gpio free stuff here */ ++} ++ ++static struct platform_pwm_backlight_data backlight_data = { ++ .pwm_id = 0, ++ .max_brightness = 15, ++ .dft_brightness = 8, ++ .pwm_period_ns = 50000, /* 20 kHz */ ++ .init = sm502dev_backlight_init, ++ .exit = sm502dev_backlight_exit, ++}; ++ ++static struct platform_device backlight = { ++ .name = "pwm-backlight", ++ .dev = { ++ .platform_data = &backlight_data, ++ }, ++ .id = -1, ++}; ++ ++/* ++ * Warning this stunt is very dangerous ++ * as the sm501 gpio have dynamic numbers... ++ */ ++/* bus 0 is the one for the ST7, DS75 etc... */ ++static struct i2c_gpio_platform_data i2c_gpio0_data = { ++#if CONFIG_GDIUM_VERSION > 2 ++ .sda_pin = GDIUM_GPIO_BASE + 13, ++ .scl_pin = GDIUM_GPIO_BASE + 6, ++#else ++ .sda_pin = 192+15, ++ .scl_pin = 192+14, ++#endif ++ .udelay = 5, ++ .timeout = HZ / 10, ++ .sda_is_open_drain = 0, ++ .scl_is_open_drain = 0, ++}; ++ ++static struct platform_device i2c_gpio0_device = { ++ .name = "i2c-gpio", ++ .id = 0, ++ .dev = { .platform_data = &i2c_gpio0_data, }, ++}; ++ ++/* bus 1 is for the CRT/VGA external screen */ ++static struct i2c_gpio_platform_data i2c_gpio1_data = { ++ .sda_pin = GDIUM_GPIO_BASE + 10, ++ .scl_pin = GDIUM_GPIO_BASE + 9, ++ .udelay = 5, ++ .timeout = HZ / 10, ++ .sda_is_open_drain = 0, ++ .scl_is_open_drain = 0, ++}; ++ ++static struct platform_device i2c_gpio1_device = { ++ .name = "i2c-gpio", ++ .id = 1, ++ .dev = { .platform_data = &i2c_gpio1_data, }, ++}; ++ ++static struct platform_device gdium_clock = { ++ .name = "gdium-pwmclk", ++ .id = -1, ++}; ++ ++static struct platform_device *devices[] __initdata = { ++ &i2c_gpio0_device, ++ &i2c_gpio1_device, ++ &backlight, ++ &gdium_clock, ++}; ++ ++static int __init gdium_platform_devices_setup(void) ++{ ++ int ret; ++ ++ pr_info("Registering gdium platform devices\n"); ++ ++ ret = i2c_register_board_info(0, sm502dev_i2c_devices, ++ ARRAY_SIZE(sm502dev_i2c_devices)); ++ ++ if (ret != 0) { ++ pr_info("Error while registering platform devices: %d\n", ret); ++ return ret; ++ } ++ ++ platform_add_devices(devices, ARRAY_SIZE(devices)); ++ ++ return 0; ++} ++ ++/* ++ * some devices are on the pwm stuff which is behind the mfd which is ++ * behind the pci bus so arch_initcall can't work because too early ++ */ ++late_initcall(gdium_platform_devices_setup); +diff --git a/arch/mips/loongson/gdium/reset.c b/arch/mips/loongson/gdium/reset.c +new file mode 100644 +index 0000000..8289f95 +--- /dev/null ++++ b/arch/mips/loongson/gdium/reset.c +@@ -0,0 +1,22 @@ ++/* Board-specific reboot/shutdown routines ++ * ++ * Copyright (C) 2010 yajin ++ * ++ * 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. ++ */ ++#include ++ ++void mach_prepare_shutdown(void) ++{ ++ LOONGSON_GPIOIE &= ~(1<<1); ++ LOONGSON_GPIODATA |= (1<<1); ++} ++ ++void mach_prepare_reboot(void) ++{ ++ LOONGSON_GPIOIE &= ~(1<<2); ++ LOONGSON_GPIODATA &= ~(1<<2); ++} +diff --git a/arch/mips/loongson/gdium/sm501-pwm.c b/arch/mips/loongson/gdium/sm501-pwm.c +new file mode 100644 +index 0000000..5af3b23 +--- /dev/null ++++ b/arch/mips/loongson/gdium/sm501-pwm.c +@@ -0,0 +1,465 @@ ++/* ++ * SM501 PWM clock ++ * Copyright (C) 2009-2010 Arnaud Patard ++ * ++ * 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static const char drv_name[] = "sm501-pwm"; ++ ++#define INPUT_CLOCK 96 /* MHz */ ++#define PWM_COUNT 3 ++ ++#define SM501PWM_HIGH_COUNTER (1<<20) ++#define SM501PWM_LOW_COUNTER (1<<8) ++#define SM501PWM_CLOCK_DIVIDE (1>>4) ++#define SM501PWM_IP (1<<3) ++#define SM501PWM_I (1<<2) ++#define SM501PWM_E (1<<0) ++ ++struct pwm_device { ++ struct list_head node; ++ struct device *dev; ++ void __iomem *regs; ++ int duty_ns; ++ int period_ns; ++ char enabled; ++ void (*handler)(struct pwm_device *pwm); ++ ++ const char *label; ++ unsigned int use_count; ++ unsigned int pwm_id; ++}; ++ ++struct sm501pwm_info { ++ void __iomem *regs; ++ int irq; ++ struct resource *res; ++ struct device *dev; ++ struct dentry *debugfs; ++ ++ struct pwm_device pwm[3]; ++}; ++ ++int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) ++{ ++ unsigned int high, low, divider; ++ int divider1, divider2; ++ unsigned long long delay; ++ ++ if (!pwm || !pwm->regs || period_ns == 0 || duty_ns > period_ns) ++ return -EINVAL; ++ ++ /* Get delay ++ * We're loosing some precision but multiplying then dividing ++ * will overflow ++ */ ++ if (period_ns > 1000) { ++ delay = period_ns / 1000; ++ delay *= INPUT_CLOCK; ++ } else { ++ delay = period_ns * 96; ++ delay /= 1000; ++ } ++ ++ /* Get the number of clock low and high */ ++ high = delay * duty_ns / period_ns; ++ low = delay - high; ++ ++ /* Get divider to make 'low' and 'high' fit into 12 bits */ ++ /* No need to say that the divider must be >= 0 */ ++ divider1 = fls(low)-12; ++ divider2 = fls(high)-12; ++ ++ if (divider1 < 0) ++ divider1 = 0; ++ if (divider2 < 0) ++ divider2 = 0; ++ ++ divider = max(divider1, divider2); ++ ++ low >>= divider; ++ high >>= divider; ++ ++ pwm->duty_ns = duty_ns; ++ pwm->period_ns = period_ns; ++ ++ writel((high<<20)|(low<<8)|(divider<<4), pwm->regs); ++ return 0; ++} ++EXPORT_SYMBOL(pwm_config); ++ ++int pwm_enable(struct pwm_device *pwm) ++{ ++ u32 reg; ++ ++ if (!pwm) ++ return -EINVAL; ++ ++ switch (pwm->pwm_id) { ++ case 0: ++ sm501_configure_gpio(pwm->dev->parent, 29, 1); ++ break; ++ case 1: ++ sm501_configure_gpio(pwm->dev->parent, 30, 1); ++ break; ++ case 2: ++ sm501_configure_gpio(pwm->dev->parent, 31, 1); ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ reg = readl(pwm->regs); ++ reg |= (SM501PWM_IP | SM501PWM_E); ++ writel(reg, pwm->regs); ++ pwm->enabled = 1; ++ ++ return 0; ++} ++EXPORT_SYMBOL(pwm_enable); ++ ++void pwm_disable(struct pwm_device *pwm) ++{ ++ u32 reg; ++ ++ if (!pwm) ++ return; ++ ++ reg = readl(pwm->regs); ++ reg &= ~(SM501PWM_IP | SM501PWM_E); ++ writel(reg, pwm->regs); ++ ++ switch (pwm->pwm_id) { ++ case 0: ++ sm501_configure_gpio(pwm->dev->parent, 29, 0); ++ break; ++ case 1: ++ sm501_configure_gpio(pwm->dev->parent, 30, 0); ++ break; ++ case 2: ++ sm501_configure_gpio(pwm->dev->parent, 31, 0); ++ break; ++ default: ++ break; ++ } ++ pwm->enabled = 0; ++} ++EXPORT_SYMBOL(pwm_disable); ++ ++static DEFINE_MUTEX(pwm_lock); ++static LIST_HEAD(pwm_list); ++ ++struct pwm_device *pwm_request(int pwm_id, const char *label) ++{ ++ struct pwm_device *pwm; ++ int found = 0; ++ ++ mutex_lock(&pwm_lock); ++ ++ list_for_each_entry(pwm, &pwm_list, node) { ++ if (pwm->pwm_id == pwm_id && pwm->use_count == 0) { ++ pwm->use_count++; ++ pwm->label = label; ++ found = 1; ++ break; ++ } ++ } ++ ++ mutex_unlock(&pwm_lock); ++ ++ return (found) ? pwm : NULL; ++} ++EXPORT_SYMBOL(pwm_request); ++ ++void pwm_free(struct pwm_device *pwm) ++{ ++ mutex_lock(&pwm_lock); ++ ++ if (pwm->use_count) { ++ pwm->use_count--; ++ pwm->label = NULL; ++ } else ++ dev_warn(pwm->dev, "PWM device already freed\n"); ++ ++ mutex_unlock(&pwm_lock); ++} ++EXPORT_SYMBOL(pwm_free); ++ ++int pwm_int_enable(struct pwm_device *pwm) ++{ ++ unsigned long conf; ++ ++ if (!pwm || !pwm->regs || !pwm->handler) ++ return -EINVAL; ++ ++ conf = readl(pwm->regs); ++ conf |= SM501PWM_I; ++ writel(conf, pwm->regs); ++ return 0; ++} ++EXPORT_SYMBOL(pwm_int_enable); ++ ++int pwm_int_disable(struct pwm_device *pwm) ++{ ++ unsigned long conf; ++ ++ if (!pwm || !pwm->regs || !pwm->handler) ++ return -EINVAL; ++ ++ conf = readl(pwm->regs); ++ conf &= ~SM501PWM_I; ++ writel(conf, pwm->regs); ++ return 0; ++} ++EXPORT_SYMBOL(pwm_int_disable); ++ ++int pwm_set_handler(struct pwm_device *pwm, ++ void (*handler)(struct pwm_device *pwm)) ++{ ++ if (!pwm || !handler) ++ return -EINVAL; ++ pwm->handler = handler; ++ return 0; ++} ++EXPORT_SYMBOL(pwm_set_handler); ++ ++static irqreturn_t sm501pwm_irq(int irq, void *dev_id) ++{ ++ unsigned long value; ++ struct sm501pwm_info *info = (struct sm501pwm_info *)dev_id; ++ struct pwm_device *pwm; ++ int i; ++ ++ value = sm501_modify_reg(info->dev->parent, SM501_IRQ_STATUS, 0, 0); ++ ++ /* Check is the interrupt is for us */ ++ if (value & (1<<22)) { ++ for (i = 0 ; i < PWM_COUNT ; i++) { ++ /* ++ * Find which pwm triggered the interrupt ++ * and ack ++ */ ++ value = readl(info->regs + i*4); ++ if (value & SM501PWM_IP) ++ writel(value | SM501PWM_IP, info->regs + i*4); ++ ++ pwm = &info->pwm[i]; ++ if (pwm->handler) ++ pwm->handler(pwm); ++ } ++ return IRQ_HANDLED; ++ } ++ ++ return IRQ_NONE; ++} ++ ++static void add_pwm(int id, struct sm501pwm_info *info) ++{ ++ struct pwm_device *pwm = &info->pwm[id]; ++ ++ pwm->use_count = 0; ++ pwm->pwm_id = id; ++ pwm->dev = info->dev; ++ pwm->regs = info->regs + id * 4; ++ ++ mutex_lock(&pwm_lock); ++ list_add_tail(&pwm->node, &pwm_list); ++ mutex_unlock(&pwm_lock); ++} ++ ++static void del_pwm(int id, struct sm501pwm_info *info) ++{ ++ struct pwm_device *pwm = &info->pwm[id]; ++ ++ pwm->use_count = 0; ++ pwm->pwm_id = -1; ++ mutex_lock(&pwm_lock); ++ list_del(&pwm->node); ++ mutex_unlock(&pwm_lock); ++} ++ ++/* Debug fs */ ++static int sm501pwm_show(struct seq_file *s, void *p) ++{ ++ struct pwm_device *pwm; ++ ++ mutex_lock(&pwm_lock); ++ list_for_each_entry(pwm, &pwm_list, node) { ++ if (pwm->use_count) { ++ seq_printf(s, "pwm-%d (%12s) %d %d %s\n", ++ pwm->pwm_id, pwm->label, ++ pwm->duty_ns, pwm->period_ns, ++ pwm->enabled ? "on" : "off"); ++ seq_printf(s, " %08x\n", readl(pwm->regs)); ++ } ++ } ++ mutex_unlock(&pwm_lock); ++ ++ return 0; ++} ++ ++static int sm501pwm_open(struct inode *inode, struct file *file) ++{ ++ return single_open(file, sm501pwm_show, inode->i_private); ++} ++ ++static const struct file_operations sm501pwm_fops = { ++ .open = sm501pwm_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .owner = THIS_MODULE, ++}; ++ ++static int __init sm501pwm_probe(struct platform_device *pdev) ++{ ++ struct sm501pwm_info *info; ++ struct device *dev = &pdev->dev; ++ struct resource *res; ++ int ret = 0; ++ int res_len; ++ int i; ++ ++ info = kzalloc(sizeof(struct sm501pwm_info), GFP_KERNEL); ++ if (!info) { ++ dev_err(dev, "Allocation failure\n"); ++ ret = -ENOMEM; ++ goto err; ++ } ++ info->dev = dev; ++ platform_set_drvdata(pdev, info); ++ ++ /* Get irq number */ ++ info->irq = platform_get_irq(pdev, 0); ++ if (!info->irq) { ++ dev_err(dev, "no irq found\n"); ++ ret = -ENODEV; ++ goto err_alloc; ++ } ++ ++ /* Get regs address */ ++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (res == NULL) { ++ dev_err(dev, "No memory resource found\n"); ++ ret = -ENODEV; ++ goto err_alloc; ++ } ++ info->res = res; ++ res_len = (res->end - res->start)+1; ++ ++ if (!request_mem_region(res->start, res_len, drv_name)) { ++ dev_err(dev, "Can't request iomem resource\n"); ++ ret = -EBUSY; ++ goto err_alloc; ++ } ++ ++ info->regs = ioremap(res->start, res_len); ++ if (!info->regs) { ++ dev_err(dev, "ioremap failed\n"); ++ ret = -ENOMEM; ++ goto err_mem; ++ } ++ ++ ret = request_irq(info->irq, sm501pwm_irq, IRQF_SHARED, drv_name, info); ++ if (ret != 0) { ++ dev_err(dev, "can't get irq\n"); ++ goto err_map; ++ } ++ ++ ++ sm501_unit_power(info->dev->parent, SM501_GATE_GPIO, 1); ++ ++ for (i = 0; i < 3; i++) ++ add_pwm(i, info); ++ ++ dev_info(dev, "SM501 PWM Found at %lx irq %d\n", ++ (unsigned long)info->res->start, info->irq); ++ ++ info->debugfs = debugfs_create_file("pwm", S_IFREG | S_IRUGO, ++ NULL, info, &sm501pwm_fops); ++ ++ ++ return 0; ++ ++err_map: ++ iounmap(info->regs); ++ ++err_mem: ++ release_mem_region(res->start, res_len); ++ ++err_alloc: ++ kfree(info); ++ platform_set_drvdata(pdev, NULL); ++err: ++ return ret; ++} ++ ++static int sm501pwm_remove(struct platform_device *pdev) ++{ ++ struct sm501pwm_info *info = platform_get_drvdata(pdev); ++ int i; ++ ++ if (info->debugfs) ++ debugfs_remove(info->debugfs); ++ ++ for (i = 0; i < 3; i++) { ++ pwm_disable(&info->pwm[i]); ++ del_pwm(i, info); ++ } ++ ++ sm501_unit_power(info->dev->parent, SM501_GATE_GPIO, 0); ++ sm501_modify_reg(info->dev->parent, SM501_IRQ_STATUS, 0, 1<<22); ++ ++ free_irq(info->irq, info); ++ iounmap(info->regs); ++ release_mem_region(info->res->start, ++ (info->res->end - info->res->start)+1); ++ kfree(info); ++ platform_set_drvdata(pdev, NULL); ++ ++ return 0; ++} ++ ++static struct platform_driver sm501pwm_driver = { ++ .probe = sm501pwm_probe, ++ .remove = sm501pwm_remove, ++ .driver = { ++ .name = drv_name, ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++static int __devinit sm501pwm_init(void) ++{ ++ return platform_driver_register(&sm501pwm_driver); ++} ++ ++static void __exit sm501pwm_cleanup(void) ++{ ++ platform_driver_unregister(&sm501pwm_driver); ++} ++ ++module_init(sm501pwm_init); ++module_exit(sm501pwm_cleanup); ++ ++MODULE_AUTHOR("Arnaud Patard "); ++MODULE_DESCRIPTION("SM501 PWM driver"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("platform:sm501-pwm"); +diff --git a/arch/mips/loongson/lemote-2f/Makefile b/arch/mips/loongson/lemote-2f/Makefile +index 4f9eaa3..f945bd7a 100644 +--- a/arch/mips/loongson/lemote-2f/Makefile ++++ b/arch/mips/loongson/lemote-2f/Makefile +@@ -2,7 +2,7 @@ + # Makefile for lemote loongson2f family machines + # + +-obj-y += clock.o machtype.o irq.o reset.o ec_kb3310b.o ++obj-y += clock.o machtype.o irq.o reset.o ec_kb3310b.o platform.o + + # + # Suspend Support +diff --git a/arch/mips/loongson/lemote-2f/platform.c b/arch/mips/loongson/lemote-2f/platform.c +new file mode 100644 +index 0000000..5316360 +--- /dev/null ++++ b/arch/mips/loongson/lemote-2f/platform.c +@@ -0,0 +1,48 @@ ++/* ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin, wuzhangjin@gmail.com ++ * ++ * 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. ++ */ ++ ++#include ++#include ++ ++#include ++ ++static struct platform_device yeeloong_pdev = { ++ .name = "yeeloong_laptop", ++ .id = -1, ++}; ++ ++static struct platform_device lynloong_pdev = { ++ .name = "lynloong_pc", ++ .id = -1, ++}; ++ ++static int __init lemote2f_platform_init(void) ++{ ++ struct platform_device *pdev = NULL; ++ ++ switch (mips_machtype) { ++ case MACH_LEMOTE_YL2F89: ++ pdev = &yeeloong_pdev; ++ break; ++ case MACH_LEMOTE_LL2F: ++ pdev = &lynloong_pdev; ++ break; ++ default: ++ break; ++ ++ } ++ ++ if (pdev != NULL) ++ return platform_device_register(pdev); ++ ++ return -ENODEV; ++} ++ ++arch_initcall(lemote2f_platform_init); +diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c +index 736c17a..d6b6cac 100644 +--- a/arch/mips/math-emu/cp1emu.c ++++ b/arch/mips/math-emu/cp1emu.c +@@ -7,6 +7,9 @@ + * Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com + * Copyright (C) 2000 MIPS Technologies, Inc. + * ++ * Loongson instruction support ++ * Copyright (C) 2011 Mark H Weaver ++ * + * This program is free software; you can distribute it and/or modify it + * under the terms of the GNU General Public License (Version 2) as + * published by the Free Software Foundation. +@@ -59,6 +62,11 @@ static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *, + static int fpux_emu(struct pt_regs *, + struct mips_fpu_struct *, mips_instruction, void *__user *); + ++#ifdef CONFIG_MACH_LOONGSON ++static int loongson_spec2_emu(struct pt_regs *, ++ struct mips_fpu_struct *, mips_instruction, void *__user *); ++#endif ++ + /* Control registers */ + + #define FPCREG_RID 0 /* $0 = revision id */ +@@ -694,6 +702,14 @@ do { \ + #define DPFROMREG(dp, x) DIFROMREG((dp).bits, x) + #define DPTOREG(dp, x) DITOREG((dp).bits, x) + ++/* Support for Loongson paired single floating-point format */ ++#define PSIFROMREG(si1, si2, x) ({ u64 di; DIFROMREG(di, x); \ ++ (si1) = (u32)di; (si2) = (u32)(di >> 32); }) ++#define PSITOREG(si1, si2, x) DITOREG((si1) | ((u64)(si2) << 32), x) ++ ++#define PSPFROMREG(sp1, sp2, x) PSIFROMREG((sp1).bits, (sp2).bits, x) ++#define PSPTOREG(sp1, sp2, x) PSITOREG((sp1).bits, (sp2).bits, x) ++ + /* + * Emulate the single floating point instruction pointed at by EPC. + * Two instructions if the instruction is in a branch delay slot. +@@ -1087,6 +1103,16 @@ emul: + xcp->regs[MIPSInst_RD(ir)] = + xcp->regs[MIPSInst_RS(ir)]; + break; ++ ++#ifdef CONFIG_MACH_LOONGSON ++ case spec2_op:{ ++ int sig = loongson_spec2_emu(xcp, ctx, ir, fault_addr); ++ if (sig) ++ return sig; ++ break; ++ } ++#endif ++ + default: + sigill: + return SIGILL; +@@ -1164,6 +1190,172 @@ DEF3OP(msub, dp, ieee754dp_mul, ieee754dp_sub, ); + DEF3OP(nmadd, dp, ieee754dp_mul, ieee754dp_add, ieee754dp_neg); + DEF3OP(nmsub, dp, ieee754dp_mul, ieee754dp_sub, ieee754dp_neg); + ++#ifdef CONFIG_MACH_LOONGSON ++static int loongson_spec2_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, ++ mips_instruction ir, void *__user *fault_addr) ++{ ++ int rfmt; /* resulting format */ ++ unsigned rcsr = 0; /* resulting csr */ ++ union { ++ union ieee754dp d; ++ struct { ++ union ieee754sp s; ++ union ieee754sp s2; ++ }; ++ } rv; /* resulting value */ ++ ++ /* XXX maybe add a counter for loongson spec2 fp instructions? */ ++ /* MIPS_FPU_EMU_INC_STATS(cp1xops); */ ++ ++ switch (rfmt = (MIPSInst_FFMT(ir) & 0xf)) { ++ case s_fmt:{ ++ union ieee754sp(*handler) (union ieee754sp, union ieee754sp, union ieee754sp); ++ union ieee754sp fd, fs, ft; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ case loongson_madd_op: ++ handler = fpemu_sp_madd; ++ goto scoptop; ++ case loongson_msub_op: ++ handler = fpemu_sp_msub; ++ goto scoptop; ++ case loongson_nmadd_op: ++ handler = fpemu_sp_nmadd; ++ goto scoptop; ++ case loongson_nmsub_op: ++ handler = fpemu_sp_nmsub; ++ goto scoptop; ++ ++ scoptop: ++ SPFROMREG(fd, MIPSInst_FD(ir)); ++ SPFROMREG(fs, MIPSInst_FS(ir)); ++ SPFROMREG(ft, MIPSInst_FT(ir)); ++ rv.s = (*handler) (fd, fs, ft); ++ ++ copcsr: ++ if (ieee754_cxtest(IEEE754_INEXACT)) ++ rcsr |= FPU_CSR_INE_X | FPU_CSR_INE_S; ++ if (ieee754_cxtest(IEEE754_UNDERFLOW)) ++ rcsr |= FPU_CSR_UDF_X | FPU_CSR_UDF_S; ++ if (ieee754_cxtest(IEEE754_OVERFLOW)) ++ rcsr |= FPU_CSR_OVF_X | FPU_CSR_OVF_S; ++ if (ieee754_cxtest(IEEE754_INVALID_OPERATION)) ++ rcsr |= FPU_CSR_INV_X | FPU_CSR_INV_S; ++ ++ break; ++ ++ default: ++ return SIGILL; ++ } ++ break; ++ } ++ ++ case d_fmt:{ ++ union ieee754dp(*handler) (union ieee754dp, union ieee754dp, union ieee754dp); ++ union ieee754dp fd, fs, ft; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ case loongson_madd_op: ++ handler = fpemu_dp_madd; ++ goto dcoptop; ++ case loongson_msub_op: ++ handler = fpemu_dp_msub; ++ goto dcoptop; ++ case loongson_nmadd_op: ++ handler = fpemu_dp_nmadd; ++ goto dcoptop; ++ case loongson_nmsub_op: ++ handler = fpemu_dp_nmsub; ++ goto dcoptop; ++ ++ dcoptop: ++ DPFROMREG(fd, MIPSInst_FD(ir)); ++ DPFROMREG(fs, MIPSInst_FS(ir)); ++ DPFROMREG(ft, MIPSInst_FT(ir)); ++ rv.d = (*handler) (fd, fs, ft); ++ goto copcsr; ++ ++ default: ++ return SIGILL; ++ } ++ break; ++ } ++ ++ case ps_fmt:{ ++ union ieee754sp(*handler) (union ieee754sp, union ieee754sp, union ieee754sp); ++ struct _ieee754_csr ieee754_csr_save; ++ union ieee754sp fd1, fs1, ft1; ++ union ieee754sp fd2, fs2, ft2; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ case loongson_madd_op: ++ handler = fpemu_sp_madd; ++ goto pscoptop; ++ case loongson_msub_op: ++ handler = fpemu_sp_msub; ++ goto pscoptop; ++ case loongson_nmadd_op: ++ handler = fpemu_sp_nmadd; ++ goto pscoptop; ++ case loongson_nmsub_op: ++ handler = fpemu_sp_nmsub; ++ goto pscoptop; ++ ++ pscoptop: ++ PSPFROMREG(fd1, fd2, MIPSInst_FD(ir)); ++ PSPFROMREG(fs1, fs2, MIPSInst_FS(ir)); ++ PSPFROMREG(ft1, ft2, MIPSInst_FT(ir)); ++ rv.s = (*handler) (fd1, fs1, ft1); ++ ieee754_csr_save = ieee754_csr; ++ rv.s2 = (*handler) (fd2, fs2, ft2); ++ ieee754_csr.cx |= ieee754_csr_save.cx; ++ ieee754_csr.sx |= ieee754_csr_save.sx; ++ goto copcsr; ++ ++ default: ++ return SIGILL; ++ } ++ break; ++ } ++ ++ default: ++ return SIGILL; ++ } ++ ++ /* ++ * Update the fpu CSR register for this operation. ++ * If an exception is required, generate a tidy SIGFPE exception, ++ * without updating the result register. ++ * Note: cause exception bits do not accumulate, they are rewritten ++ * for each op; only the flag/sticky bits accumulate. ++ */ ++ ctx->fcr31 = (ctx->fcr31 & ~FPU_CSR_ALL_X) | rcsr; ++ if ((ctx->fcr31 >> 5) & ctx->fcr31 & FPU_CSR_ALL_E) { ++ /*printk ("SIGFPE: fpu csr = %08x\n",ctx->fcr31); */ ++ return SIGFPE; ++ } ++ ++ /* ++ * Now we can safely write the result back to the register file. ++ */ ++ switch (rfmt) { ++ case d_fmt: ++ DPTOREG(rv.d, MIPSInst_FD(ir)); ++ break; ++ case s_fmt: ++ SPTOREG(rv.s, MIPSInst_FD(ir)); ++ break; ++ case ps_fmt: ++ PSPTOREG(rv.s, rv.s2, MIPSInst_FD(ir)); ++ break; ++ default: ++ return SIGILL; ++ } ++ ++ return 0; ++} ++#endif ++ + static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + mips_instruction ir, void *__user *fault_addr) + { +@@ -1265,7 +1457,7 @@ static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + + default: +- return SIGILL; ++ goto SIGILL_unless_prefx_op; + } + break; + } +@@ -1335,7 +1527,7 @@ static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + goto copcsr; + + default: +- return SIGILL; ++ goto SIGILL_unless_prefx_op; + } + break; + } +@@ -1348,6 +1540,11 @@ static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + break; + + default: ++ SIGILL_unless_prefx_op: ++ if (MIPSInst_FUNC(ir) == prefx_op) { ++ /* ignore prefx operation */ ++ break; ++ } + return SIGILL; + } + +@@ -1369,7 +1566,12 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + unsigned cond; + union { + union ieee754dp d; +- union ieee754sp s; ++ struct { ++ union ieee754sp s; ++#ifdef CONFIG_MACH_LOONGSON ++ union ieee754sp s2; /* for Loongson paired singles */ ++#endif ++ }; + int w; + s64 l; + } rv; /* resulting value */ +@@ -1466,7 +1668,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, + case fmov_op: + /* an easy one */ + SPFROMREG(rv.s, MIPSInst_FS(ir)); +- goto copcsr; ++ break; + + /* binary op on handler */ + scopbop: +@@ -1663,7 +1865,7 @@ copcsr: + case fmov_op: + /* an easy one */ + DPFROMREG(rv.d, MIPSInst_FS(ir)); +- goto copcsr; ++ break; + + /* binary op on handler */ + dcopbop: +@@ -1780,6 +1982,83 @@ dcopuop: + break; + } + ++#ifdef CONFIG_MACH_LOONGSON ++ case ps_fmt:{ /* 6 */ ++ /* Support for Loongson paired single fp instructions */ ++ union { ++ union ieee754sp(*b) (union ieee754sp, union ieee754sp); ++ union ieee754sp(*u) (union ieee754sp); ++ } handler; ++ ++ switch (MIPSInst_FUNC(ir)) { ++ /* binary ops */ ++ case fadd_op: ++ handler.b = ieee754sp_add; ++ goto pscopbop; ++ case fsub_op: ++ handler.b = ieee754sp_sub; ++ goto pscopbop; ++ case fmul_op: ++ handler.b = ieee754sp_mul; ++ goto pscopbop; ++ ++ /* unary ops */ ++ case fabs_op: ++ handler.u = ieee754sp_abs; ++ goto pscopuop; ++ case fneg_op: ++ handler.u = ieee754sp_neg; ++ goto pscopuop; ++ case fmov_op: ++ /* an easy one */ ++ PSPFROMREG(rv.s, rv.s2, MIPSInst_FS(ir)); ++ break; ++ ++ pscopbop: /* paired binary op handler */ ++ { ++ struct _ieee754_csr ieee754_csr_save; ++ union ieee754sp fs1, ft1; ++ union ieee754sp fs2, ft2; ++ ++ PSPFROMREG(fs1, fs2, MIPSInst_FS(ir)); ++ PSPFROMREG(ft1, ft2, MIPSInst_FT(ir)); ++ rv.s = (*handler.b) (fs1, ft1); ++ ieee754_csr_save = ieee754_csr; ++ rv.s2 = (*handler.b) (fs2, ft2); ++ ieee754_csr.cx |= ieee754_csr_save.cx; ++ ieee754_csr.sx |= ieee754_csr_save.sx; ++ goto copcsr; ++ } ++ pscopuop: /* paired unary op handler */ ++ { ++ struct _ieee754_csr ieee754_csr_save; ++ union ieee754sp fs1; ++ union ieee754sp fs2; ++ ++ PSPFROMREG(fs1, fs2, MIPSInst_FS(ir)); ++ rv.s = (*handler.u) (fs1); ++ ieee754_csr_save = ieee754_csr; ++ rv.s2 = (*handler.u) (fs2); ++ ieee754_csr.cx |= ieee754_csr_save.cx; ++ ieee754_csr.sx |= ieee754_csr_save.sx; ++ goto copcsr; ++ } ++ break; ++ ++ default: ++ if (MIPSInst_FUNC(ir) >= fcmp_op) { ++ /* Loongson fp hardware handles all ++ cases of fp compare insns, so we ++ shouldn't have to */ ++ printk ("Loongson paired-single fp compare" ++ " unimplemented in cp1emu.c\n"); ++ } ++ return SIGILL; ++ } ++ break; ++ } ++#endif ++ + case l_fmt: + + if (!cpu_has_mips_3_4_5 && !cpu_has_mips64) +@@ -1851,6 +2130,11 @@ dcopuop: + + DITOREG(rv.l, MIPSInst_FD(ir)); + break; ++#ifdef CONFIG_MACH_LOONGSON ++ case ps_fmt: ++ PSPTOREG(rv.s, rv.s2, MIPSInst_FD(ir)); ++ break; ++#endif + default: + return SIGILL; + } +diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile +index ff8a553..a747755 100644 +--- a/arch/mips/pci/Makefile ++++ b/arch/mips/pci/Makefile +@@ -29,6 +29,7 @@ obj-$(CONFIG_LASAT) += pci-lasat.o + obj-$(CONFIG_MIPS_COBALT) += fixup-cobalt.o + obj-$(CONFIG_LEMOTE_FULOONG2E) += fixup-fuloong2e.o ops-loongson2.o + obj-$(CONFIG_LEMOTE_MACH2F) += fixup-lemote2f.o ops-loongson2.o ++obj-$(CONFIG_DEXXON_GDIUM) += fixup-gdium.o ops-loongson2.o + obj-$(CONFIG_LEMOTE_MACH3A) += fixup-loongson3.o ops-loongson3.o + obj-$(CONFIG_MIPS_MALTA) += fixup-malta.o pci-malta.o + obj-$(CONFIG_PMC_MSP7120_GW) += fixup-pmcmsp.o ops-pmcmsp.o +diff --git a/arch/mips/pci/fixup-gdium.c b/arch/mips/pci/fixup-gdium.c +new file mode 100644 +index 0000000..b296220 +--- /dev/null ++++ b/arch/mips/pci/fixup-gdium.c +@@ -0,0 +1,90 @@ ++/* ++ * Copyright (C) 2010 yajin ++ * ++ * 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. ++ */ ++ ++#include ++#include ++ ++#include ++/* ++ * http://www.pcidatabase.com ++ * GDIUM has different PCI mapping ++ * slot 13 (0x1814/0x0301) -> RaLink rt2561 Wireless-G PCI ++ * slog 14 (0x126f/0x0501) -> sm501 ++ * slot 15 (0x1033/0x0035) -> NEC Dual OHCI controllers ++ * plus Single EHCI controller ++ * slot 16 (0x10ec/0x8139) -> Realtek 8139c ++ * slot 17 (0x1033/0x00e0) -> NEC USB 2.0 Host Controller ++ */ ++ ++#undef INT_IRQA ++#undef INT_IRQB ++#undef INT_IRQC ++#undef INT_IRQD ++#define INT_IRQA 36 ++#define INT_IRQB 37 ++#define INT_IRQC 38 ++#define INT_IRQD 39 ++ ++int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) ++{ ++ int irq = 0; ++ ++ switch (slot) { ++ case 13: ++ irq = INT_IRQC + ((pin - 1) & 3); ++ break; ++ case 14: ++ irq = INT_IRQA; ++ break; ++ case 15: ++#if CONFIG_GDIUM_VERSION > 2 ++ irq = INT_IRQB; ++#else ++ irq = INT_IRQA + ((pin - 1) & 3); ++#endif ++ break; ++ case 16: ++ irq = INT_IRQD; ++ break; ++#if CONFIG_GDIUM_VERSION > 2 ++ case 17: ++ irq = INT_IRQC; ++ break; ++#endif ++ default: ++ pr_info(" strange pci slot number %d on gdium.\n", slot); ++ break; ++ } ++ return irq; ++} ++ ++/* Do platform specific device initialization at pci_enable_device() time */ ++int pcibios_plat_dev_init(struct pci_dev *dev) ++{ ++ return 0; ++} ++ ++/* Fixups for the USB host controllers */ ++static void __init gdium_usb_host_fixup(struct pci_dev *dev) ++{ ++ unsigned int val; ++ pci_read_config_dword(dev, 0xe0, &val); ++#if CONFIG_GDIUM_VERSION > 2 ++ pci_write_config_dword(dev, 0xe0, (val & ~3) | 0x3); ++#else ++ pci_write_config_dword(dev, 0xe0, (val & ~7) | 0x5); ++ pci_write_config_dword(dev, 0xe4, 1<<5); ++#endif ++} ++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_USB, ++ gdium_usb_host_fixup); ++#if CONFIG_GDIUM_VERSION > 2 ++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_CT_65550, ++ gdium_usb_host_fixup); ++#endif +diff --git a/arch/mips/power/hibernate.S b/arch/mips/power/hibernate.S +index 32a7c82..7e0277a 100644 +--- a/arch/mips/power/hibernate.S ++++ b/arch/mips/power/hibernate.S +@@ -43,7 +43,6 @@ LEAF(swsusp_arch_resume) + bne t1, t3, 1b + PTR_L t0, PBE_NEXT(t0) + bnez t0, 0b +- jal local_flush_tlb_all /* Avoid TLB mismatch after kernel resume */ + PTR_LA t0, saved_regs + PTR_L ra, PT_R31(t0) + PTR_L sp, PT_R29(t0) +diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig +index 5e79c6a..3f08f0d 100644 +--- a/drivers/hid/Kconfig ++++ b/drivers/hid/Kconfig +@@ -808,6 +808,13 @@ config HID_ZYDACRON + ---help--- + Support for Zydacron remote control. + ++config HID_GDIUM ++ bool "Gdium Fn keys support" if EMBEDDED ++ depends on USB_HID && DEXXON_GDIUM ++ default !EMBEDDED ++ ---help--- ++ Support for Functions keys available on Gdiums. ++ + config HID_SENSOR_HUB + tristate "HID Sensors framework support" + depends on HID && HAS_IOMEM +diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile +index a6fa6ba..cf8793ef 100644 +--- a/drivers/hid/Makefile ++++ b/drivers/hid/Makefile +@@ -117,6 +117,7 @@ obj-$(CONFIG_HID_ZEROPLUS) += hid-zpff.o + obj-$(CONFIG_HID_ZYDACRON) += hid-zydacron.o + obj-$(CONFIG_HID_WACOM) += hid-wacom.o + obj-$(CONFIG_HID_WALTOP) += hid-waltop.o ++obj-$(CONFIG_HID_GDIUM) += hid-gdium.o + obj-$(CONFIG_HID_WIIMOTE) += hid-wiimote.o + obj-$(CONFIG_HID_SENSOR_HUB) += hid-sensor-hub.o + +diff --git a/drivers/hid/hid-gdium.c b/drivers/hid/hid-gdium.c +new file mode 100644 +index 0000000..67cc095 +--- /dev/null ++++ b/drivers/hid/hid-gdium.c +@@ -0,0 +1,210 @@ ++/* ++ * hid-gdium -- Gdium laptop function keys ++ * ++ * Arnaud Patard ++ * ++ * Based on hid-apple.c ++ * ++ * 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. ++ */ ++ ++ ++#include ++#include ++#include ++#include ++ ++#include "hid-ids.h" ++ ++#define GDIUM_FN_ON 1 ++ ++static int fnmode = GDIUM_FN_ON; ++module_param(fnmode, int, 0644); ++MODULE_PARM_DESC(fnmode, "Mode of fn key on Gdium (0 = disabled, 1 = Enabled)"); ++ ++struct gdium_data { ++ unsigned int fn_on; ++}; ++ ++ ++struct gdium_key_translation { ++ u16 from; ++ u16 to; ++}; ++ ++static struct gdium_key_translation gdium_fn_keys[] = { ++ { KEY_F1, KEY_CAMERA }, ++ { KEY_F2, KEY_CONNECT }, ++ { KEY_F3, KEY_MUTE }, ++ { KEY_F4, KEY_VOLUMEUP}, ++ { KEY_F5, KEY_VOLUMEDOWN }, ++ { KEY_F6, KEY_SWITCHVIDEOMODE }, ++ { KEY_F7, KEY_F19 }, /* F7+12. Have to use existant keycodes */ ++ { KEY_F8, KEY_BRIGHTNESSUP }, ++ { KEY_F9, KEY_BRIGHTNESSDOWN }, ++ { KEY_F10, KEY_SLEEP }, ++ { KEY_F11, KEY_PROG1 }, ++ { KEY_F12, KEY_PROG2 }, ++ { KEY_UP, KEY_PAGEUP }, ++ { KEY_DOWN, KEY_PAGEDOWN }, ++ { KEY_INSERT, KEY_NUMLOCK }, ++ { KEY_DELETE, KEY_SCROLLLOCK }, ++ { KEY_T, KEY_STOPCD }, ++ { KEY_F, KEY_PREVIOUSSONG }, ++ { KEY_H, KEY_NEXTSONG }, ++ { KEY_G, KEY_PLAYPAUSE }, ++ { } ++}; ++ ++static struct gdium_key_translation *gdium_find_translation( ++ struct gdium_key_translation *table, u16 from) ++{ ++ struct gdium_key_translation *trans; ++ ++ /* Look for the translation */ ++ for (trans = table; trans->from; trans++) ++ if (trans->from == from) ++ return trans; ++ return NULL; ++} ++ ++static int hidinput_gdium_event(struct hid_device *hid, struct input_dev *input, ++ struct hid_usage *usage, __s32 value) ++{ ++ struct gdium_data *data = hid_get_drvdata(hid); ++ struct gdium_key_translation *trans; ++ int do_translate; ++ ++ if (usage->type != EV_KEY) ++ return 0; ++ ++ if ((usage->code == KEY_FN)) { ++ data->fn_on = !!value; ++ input_event(input, usage->type, usage->code, value); ++ return 1; ++ } ++ ++ if (fnmode) { ++ trans = gdium_find_translation(gdium_fn_keys, usage->code); ++ if (trans) { ++ do_translate = data->fn_on; ++ if (do_translate) { ++ input_event(input, usage->type, trans->to, value); ++ return 1; ++ } ++ } ++ } ++ ++ return 0; ++} ++ ++static int gdium_input_event(struct hid_device *hdev, struct hid_field *field, ++ struct hid_usage *usage, __s32 value) ++{ ++ if (!(hdev->claimed & HID_CLAIMED_INPUT) || !field->hidinput || !usage->type) ++ return 0; ++ ++ if (hidinput_gdium_event(hdev, field->hidinput->input, usage, value)) ++ return 1; ++ ++ return 0; ++} ++ ++ ++static void gdium_input_setup(struct input_dev *input) ++{ ++ struct gdium_key_translation *trans; ++ ++ set_bit(KEY_NUMLOCK, input->keybit); ++ ++ /* Enable all needed keys */ ++ for (trans = gdium_fn_keys; trans->from; trans++) ++ set_bit(trans->to, input->keybit); ++} ++ ++static int gdium_input_mapping(struct hid_device *hdev, struct hid_input *hi, ++ struct hid_field *field, struct hid_usage *usage, ++ unsigned long **bit, int *max) ++{ ++ if (((usage->hid & HID_USAGE_PAGE) == HID_UP_KEYBOARD) ++ && ((usage->hid & HID_USAGE) == 0x82)) { ++ hid_map_usage_clear(hi, usage, bit, max, EV_KEY, KEY_FN); ++ gdium_input_setup(hi->input); ++ return 1; ++ } ++ return 0; ++} ++ ++static int gdium_input_probe(struct hid_device *hdev, const struct hid_device_id *id) ++{ ++ struct gdium_data *data; ++ int ret; ++ ++ data = kzalloc(sizeof(*data), GFP_KERNEL); ++ if (!data) { ++ dev_err(&hdev->dev, "can't alloc gdium keyboard data\n"); ++ return -ENOMEM; ++ } ++ ++ hid_set_drvdata(hdev, data); ++ ++ ret = hid_parse(hdev); ++ if (ret) { ++ dev_err(&hdev->dev, "parse failed\n"); ++ goto err_free; ++ } ++ ++ ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); ++ if (ret) { ++ dev_err(&hdev->dev, "hw start failed\n"); ++ goto err_free; ++ } ++ ++ return 0; ++err_free: ++ kfree(data); ++ return ret; ++} ++static void gdium_input_remove(struct hid_device *hdev) ++{ ++ hid_hw_stop(hdev); ++ kfree(hid_get_drvdata(hdev)); ++} ++ ++static const struct hid_device_id gdium_input_devices[] = { ++ { HID_USB_DEVICE(USB_VENDOR_ID_GDIUM, USB_DEVICE_ID_GDIUM) }, ++ {} ++}; ++MODULE_DEVICE_TABLE(hid, gdium_input_devices); ++ ++static struct hid_driver gdium_input_driver = { ++ .name = "gdium-fnkeys", ++ .id_table = gdium_input_devices, ++ .probe = gdium_input_probe, ++ .remove = gdium_input_remove, ++ .event = gdium_input_event, ++ .input_mapping = gdium_input_mapping, ++}; ++ ++static int gdium_input_init(void) ++{ ++ int ret; ++ ++ ret = hid_register_driver(&gdium_input_driver); ++ if (ret) ++ pr_err("can't register gdium keyboard driver\n"); ++ ++ return ret; ++} ++static void gdium_input_exit(void) ++{ ++ hid_unregister_driver(&gdium_input_driver); ++} ++ ++module_init(gdium_input_init); ++module_exit(gdium_input_exit); ++MODULE_LICENSE("GPL"); ++ +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h +index 48b66bb..f5b5e46 100644 +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -980,6 +980,9 @@ + #define USB_VENDOR_ID_ZYTRONIC 0x14c8 + #define USB_DEVICE_ID_ZYTRONIC_ZXY100 0x0005 + ++#define USB_VENDOR_ID_GDIUM 0x04B4 ++#define USB_DEVICE_ID_GDIUM 0xe001 ++ + #define USB_VENDOR_ID_PRIMAX 0x0461 + #define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05 + +diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c +index 376f2dc..b576801 100644 +--- a/drivers/ide/ide-iops.c ++++ b/drivers/ide/ide-iops.c +@@ -27,6 +27,10 @@ + #include + #include + ++#ifdef CONFIG_LEMOTE_MACH2F ++#include ++#endif ++ + void SELECT_MASK(ide_drive_t *drive, int mask) + { + const struct ide_port_ops *port_ops = drive->hwif->port_ops; +@@ -300,6 +304,11 @@ void ide_check_nien_quirk_list(ide_drive_t *drive) + { + const char **list, *m = (char *)&drive->id[ATA_ID_PROD]; + ++#ifdef CONFIG_LEMOTE_MACH2F ++ if (mips_machtype != MACH_LEMOTE_YL2F89) ++ return; ++#endif ++ + for (list = nien_quirk_list; *list != NULL; list++) + if (strstr(m, *list) != NULL) { + drive->dev_flags |= IDE_DFLAG_NIEN_QUIRK; +diff --git a/drivers/mfd/sm501.c b/drivers/mfd/sm501.c +index 81e6d09..929365e 100644 +--- a/drivers/mfd/sm501.c ++++ b/drivers/mfd/sm501.c +@@ -58,7 +58,7 @@ struct sm501_gpio { + struct sm501_gpio { + /* no gpio support, empty definition for sm501_devdata. */ + }; +-#endif ++#endif /* CONFIG_MFD_SM501_GPIO */ + + struct sm501_devdata { + spinlock_t reg_lock; +@@ -1135,6 +1135,22 @@ static inline int sm501_gpio_isregistered(struct sm501_devdata *sm) + { + return sm->gpio.registered; + } ++ ++void sm501_configure_gpio(struct device *dev, unsigned int gpio, unsigned ++ char mode) ++{ ++ unsigned long set, reg, offset = gpio; ++ ++ if (offset >= 32) { ++ reg = SM501_GPIO63_32_CONTROL; ++ offset = gpio - 32; ++ } else ++ reg = SM501_GPIO31_0_CONTROL; ++ ++ set = mode ? 1 << offset : 0; ++ ++ sm501_modify_reg(dev, reg, set, 0); ++} + #else + static inline int sm501_register_gpio(struct sm501_devdata *sm) + { +@@ -1154,7 +1170,13 @@ static inline int sm501_gpio_isregistered(struct sm501_devdata *sm) + { + return 0; + } +-#endif ++ ++void sm501_configure_gpio(struct device *dev, unsigned int gpio, ++ unsigned char mode) ++{ ++} ++#endif /* CONFIG_MFD_SM501_GPIO */ ++EXPORT_SYMBOL_GPL(sm501_configure_gpio); + + static int sm501_register_gpio_i2c_instance(struct sm501_devdata *sm, + struct sm501_platdata_gpio_i2c *iic) +@@ -1209,6 +1231,20 @@ static int sm501_register_gpio_i2c(struct sm501_devdata *sm, + return 0; + } + ++/* register sm501 PWM device */ ++static int sm501_register_pwm(struct sm501_devdata *sm) ++{ ++ struct platform_device *pdev; ++ ++ pdev = sm501_create_subdev(sm, "sm501-pwm", 2, 0); ++ if (!pdev) ++ return -ENOMEM; ++ sm501_create_subio(sm, &pdev->resource[0], 0x10020, 0xC); ++ sm501_create_irq(sm, &pdev->resource[1]); ++ ++ return sm501_register_device(sm, pdev); ++} ++ + /* sm501_dbg_regs + * + * Debug attribute to attach to parent device to show core registers +@@ -1367,6 +1403,8 @@ static int sm501_init_dev(struct sm501_devdata *sm) + sm501_register_uart(sm, idata->devices); + if (idata->devices & SM501_USE_GPIO) + sm501_register_gpio(sm); ++ if (idata->devices & SM501_USE_PWM) ++ sm501_register_pwm(sm); + } + + if (pdata && pdata->gpio_i2c != NULL && pdata->gpio_i2c_nr > 0) { +@@ -1553,10 +1591,15 @@ static struct sm501_initdata sm501_pci_initdata = { + .devices = SM501_USE_ALL, + + /* Errata AB-3 says that 72MHz is the fastest available +- * for 33MHZ PCI with proper bus-mastering operation */ +- ++ * for 33MHZ PCI with proper bus-mastering operation ++ * For gdium, it works under 84&112M clock freq.*/ ++#ifdef CONFIG_DEXXON_GDIUM ++ .mclk = 84 * MHZ, ++ .m1xclk = 112 * MHZ, ++#else + .mclk = 72 * MHZ, + .m1xclk = 144 * MHZ, ++#endif + }; + + static struct sm501_platdata_fbsub sm501_pdata_fbsub = { +diff --git a/drivers/net/titan_ge.c b/drivers/net/titan_ge.c +new file mode 100644 +index 0000000..dc137bf8 +--- /dev/null ++++ b/drivers/net/titan_ge.c +@@ -0,0 +1,2069 @@ ++/* ++ * drivers/net/titan_ge.c - Driver for Titan ethernet ports ++ * ++ * Copyright (C) 2003 PMC-Sierra Inc. ++ * Author : Manish Lachwani (lachwani@pmc-sierra.com) ++ * ++ * 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. ++ */ ++ ++/* ++ * The MAC unit of the Titan consists of the following: ++ * ++ * -> XDMA Engine to move data to from the memory to the MAC packet FIFO ++ * -> FIFO is where the incoming and outgoing data is placed ++ * -> TRTG is the unit that pulls the data from the FIFO for Tx and pushes ++ * the data into the FIFO for Rx ++ * -> TMAC is the outgoing MAC interface and RMAC is the incoming. ++ * -> AFX is the address filtering block ++ * -> GMII block to communicate with the PHY ++ * ++ * Rx will look like the following: ++ * GMII --> RMAC --> AFX --> TRTG --> Rx FIFO --> XDMA --> CPU memory ++ * ++ * Tx will look like the following: ++ * CPU memory --> XDMA --> Tx FIFO --> TRTG --> TMAC --> GMII ++ * ++ * The Titan driver has support for the following performance features: ++ * -> Rx side checksumming ++ * -> Jumbo Frames ++ * -> Interrupt Coalscing ++ * -> Rx NAPI ++ * -> SKB Recycling ++ * -> Transmit/Receive descriptors in SRAM ++ * -> Fast routing for IP forwarding ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* For MII specifc registers, titan_mdio.h should be included */ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "titan_ge.h" ++#include "titan_mdio.h" ++ ++/* Static Function Declarations */ ++static int titan_ge_eth_open(struct net_device *); ++static void titan_ge_eth_stop(struct net_device *); ++static struct net_device_stats *titan_ge_get_stats(struct net_device *); ++static int titan_ge_init_rx_desc_ring(titan_ge_port_info *, int, int, ++ unsigned long, unsigned long, ++ unsigned long); ++static int titan_ge_init_tx_desc_ring(titan_ge_port_info *, int, ++ unsigned long, unsigned long); ++ ++static int titan_ge_open(struct net_device *); ++static int titan_ge_start_xmit(struct sk_buff *, struct net_device *); ++static int titan_ge_stop(struct net_device *); ++ ++static unsigned long titan_ge_tx_coal(unsigned long, int); ++ ++static void titan_ge_port_reset(unsigned int); ++static int titan_ge_free_tx_queue(titan_ge_port_info *); ++static int titan_ge_rx_task(struct net_device *, titan_ge_port_info *); ++static int titan_ge_port_start(struct net_device *, titan_ge_port_info *); ++ ++static int titan_ge_return_tx_desc(titan_ge_port_info *, int); ++ ++/* ++ * Some configuration for the FIFO and the XDMA channel needs ++ * to be done only once for all the ports. This flag controls ++ * that ++ */ ++static unsigned long config_done; ++ ++/* ++ * One time out of memory flag ++ */ ++static unsigned int oom_flag; ++ ++static int titan_ge_poll(struct net_device *netdev, int *budget); ++ ++static int titan_ge_receive_queue(struct net_device *, unsigned int); ++ ++static struct platform_device *titan_ge_device[3]; ++ ++/* MAC Address */ ++extern unsigned char titan_ge_mac_addr_base[6]; ++ ++unsigned long titan_ge_base; ++static unsigned long titan_ge_sram; ++ ++static char titan_string[] = "titan"; ++ ++/* ++ * The Titan GE has two alignment requirements: ++ * -> skb->data to be cacheline aligned (32 byte) ++ * -> IP header alignment to 16 bytes ++ * ++ * The latter is not implemented. So, that results in an extra copy on ++ * the Rx. This is a big performance hog. For the former case, the ++ * dev_alloc_skb() has been replaced with titan_ge_alloc_skb(). The size ++ * requested is calculated: ++ * ++ * Ethernet Frame Size : 1518 ++ * Ethernet Header : 14 ++ * Future Titan change for IP header alignment : 2 ++ * ++ * Hence, we allocate (1518 + 14 + 2+ 64) = 1580 bytes. For IP header ++ * alignment, we use skb_reserve(). ++ */ ++ ++#define ALIGNED_RX_SKB_ADDR(addr) \ ++ ((((unsigned long)(addr) + (64UL - 1UL)) \ ++ & ~(64UL - 1UL)) - (unsigned long)(addr)) ++ ++#define titan_ge_alloc_skb(__length, __gfp_flags) \ ++({ struct sk_buff *__skb; \ ++ __skb = alloc_skb((__length) + 64, (__gfp_flags)); \ ++ if(__skb) { \ ++ int __offset = (int) ALIGNED_RX_SKB_ADDR(__skb->data); \ ++ if(__offset) \ ++ skb_reserve(__skb, __offset); \ ++ } \ ++ __skb; \ ++}) ++ ++/* ++ * Configure the GMII block of the Titan based on what the PHY tells us ++ */ ++static void titan_ge_gmii_config(int port_num) ++{ ++ unsigned int reg_data = 0, phy_reg; ++ int err; ++ ++ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg); ++ ++ if (err == TITAN_GE_MDIO_ERROR) { ++ printk(KERN_ERR ++ "Could not read PHY control register 0x11 \n"); ++ printk(KERN_ERR ++ "Setting speed to 1000 Mbps and Duplex to Full \n"); ++ ++ return; ++ } ++ ++ err = titan_ge_mdio_write(port_num, TITAN_GE_MDIO_PHY_IE, 0); ++ ++ if (phy_reg & 0x8000) { ++ if (phy_reg & 0x2000) { ++ /* Full Duplex and 1000 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x201); ++ } else { ++ /* Half Duplex and 1000 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x2201); ++ } ++ } ++ if (phy_reg & 0x4000) { ++ if (phy_reg & 0x2000) { ++ /* Full Duplex and 100 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x100); ++ } else { ++ /* Half Duplex and 100 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x2100); ++ } ++ } ++ reg_data = TITAN_GE_READ(TITAN_GE_GMII_CONFIG_GENERAL + ++ (port_num << 12)); ++ reg_data |= 0x3; ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_GENERAL + ++ (port_num << 12)), reg_data); ++} ++ ++/* ++ * Enable the TMAC if it is not ++ */ ++static void titan_ge_enable_tx(unsigned int port_num) ++{ ++ unsigned long reg_data; ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)); ++ if (!(reg_data & 0x8000)) { ++ printk("TMAC disabled for port %d!! \n", port_num); ++ ++ reg_data |= 0x0001; /* Enable TMAC */ ++ reg_data |= 0x4000; /* CRC Check Enable */ ++ reg_data |= 0x2000; /* Padding enable */ ++ reg_data |= 0x0800; /* CRC Add enable */ ++ reg_data |= 0x0080; /* PAUSE frame */ ++ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ } ++} ++ ++/* ++ * Tx Timeout function ++ */ ++static void titan_ge_tx_timeout(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ printk(KERN_INFO "%s: TX timeout ", netdev->name); ++ printk(KERN_INFO "Resetting card \n"); ++ ++ /* Do the reset outside of interrupt context */ ++ schedule_work(&titan_ge_eth->tx_timeout_task); ++} ++ ++/* ++ * Update the AFX tables for UC and MC for slice 0 only ++ */ ++static void titan_ge_update_afx(titan_ge_port_info * titan_ge_eth) ++{ ++ int port = titan_ge_eth->port_num; ++ unsigned int i; ++ volatile unsigned long reg_data = 0; ++ u8 p_addr[6]; ++ ++ memcpy(p_addr, titan_ge_eth->port_mac_addr, 6); ++ ++ /* Set the MAC address here for TMAC and RMAC */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((0x112c | (port << 12)), 0x1); ++ /* Configure the eight address filters */ ++ for (i = 0; i < 8; i++) { ++ /* Select each of the eight filters */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 + ++ (port << 12)), i); ++ ++ /* Configure the match */ ++ reg_data = 0x9; /* Forward Enable Bit */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 + ++ (port << 12)), reg_data); ++ ++ /* Finally, AFX Exact Match Address Registers */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_HIGH + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ ++ /* VLAN id set to 0 */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_VID + ++ (port << 12)), 0); ++ } ++} ++ ++/* ++ * Actual Routine to reset the adapter when the timeout occurred ++ */ ++static void titan_ge_tx_timeout_task(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ int port = titan_ge_eth->port_num; ++ ++ printk("Titan GE: Transmit timed out. Resetting ... \n"); ++ ++ /* Dump debug info */ ++ printk(KERN_ERR "TRTG cause : %x \n", ++ TITAN_GE_READ(0x100c + (port << 12))); ++ ++ /* Fix this for the other ports */ ++ printk(KERN_ERR "FIFO cause : %x \n", TITAN_GE_READ(0x482c)); ++ printk(KERN_ERR "IE cause : %x \n", TITAN_GE_READ(0x0040)); ++ printk(KERN_ERR "XDMA GDI ERROR : %x \n", ++ TITAN_GE_READ(0x5008 + (port << 8))); ++ printk(KERN_ERR "CHANNEL ERROR: %x \n", ++ TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT ++ + (port << 8))); ++ ++ netif_device_detach(netdev); ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ titan_ge_port_start(netdev, titan_ge_eth); ++ netif_device_attach(netdev); ++} ++ ++/* ++ * Change the MTU of the Ethernet Device ++ */ ++static int titan_ge_change_mtu(struct net_device *netdev, int new_mtu) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned long flags; ++ ++ if ((new_mtu > 9500) || (new_mtu < 64)) ++ return -EINVAL; ++ ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ netdev->mtu = new_mtu; ++ ++ /* Now we have to reopen the interface so that SKBs with the new ++ * size will be allocated */ ++ ++ if (netif_running(netdev)) { ++ titan_ge_eth_stop(netdev); ++ ++ if (titan_ge_eth_open(netdev) != TITAN_OK) { ++ printk(KERN_ERR ++ "%s: Fatal error on opening device\n", ++ netdev->name); ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ return -1; ++ } ++ } ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ return 0; ++} ++ ++/* ++ * Titan Gbe Interrupt Handler. All the three ports send interrupt to one line ++ * only. Once an interrupt is triggered, figure out the port and then check ++ * the channel. ++ */ ++static irqreturn_t titan_ge_int_handler(int irq, void *dev_id) ++{ ++ struct net_device *netdev = (struct net_device *) dev_id; ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int reg_data; ++ unsigned int eth_int_cause_error = 0, is; ++ unsigned long eth_int_cause1; ++ int err = 0; ++#ifdef CONFIG_SMP ++ unsigned long eth_int_cause2; ++#endif ++ ++ /* Ack the CPU interrupt */ ++ switch (port_num) { ++ case 0: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS1); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR1, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS1); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR1, is); ++#endif ++ break; ++ ++ case 1: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS0); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR0, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS0); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR0, is); ++#endif ++ break; ++ ++ case 2: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS4); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR4, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS4); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR4, is); ++#endif ++ } ++ ++ eth_int_cause1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A); ++#ifdef CONFIG_SMP ++ eth_int_cause2 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_B); ++#endif ++ ++ /* Spurious interrupt */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 == 0) && (eth_int_cause2 == 0)) { ++#else ++ if (eth_int_cause1 == 0) { ++#endif ++ eth_int_cause_error = TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT + ++ (port_num << 8)); ++ ++ if (eth_int_cause_error == 0) ++ return IRQ_NONE; ++ } ++ ++ /* Handle Tx first. No need to ack interrupts */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 & 0x20202) || ++ (eth_int_cause2 & 0x20202) ) ++#else ++ if (eth_int_cause1 & 0x20202) ++#endif ++ titan_ge_free_tx_queue(titan_ge_eth); ++ ++ /* Handle the Rx next */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 & 0x10101) || ++ (eth_int_cause2 & 0x10101)) { ++#else ++ if (eth_int_cause1 & 0x10101) { ++#endif ++ if (netif_rx_schedule_prep(netdev)) { ++ unsigned int ack; ++ ++ ack = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ /* Disable Tx and Rx both */ ++ if (port_num == 0) ++ ack &= ~(0x3); ++ if (port_num == 1) ++ ack &= ~(0x300); ++ ++ if (port_num == 2) ++ ack &= ~(0x30000); ++ ++ /* Interrupts have been disabled */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, ack); ++ ++ __netif_rx_schedule(netdev); ++ } ++ } ++ ++ /* Handle error interrupts */ ++ if (eth_int_cause_error && (eth_int_cause_error != 0x2)) { ++ printk(KERN_ERR ++ "XDMA Channel Error : %x on port %d\n", ++ eth_int_cause_error, port_num); ++ ++ printk(KERN_ERR ++ "XDMA GDI Hardware error : %x on port %d\n", ++ TITAN_GE_READ(0x5008 + (port_num << 8)), port_num); ++ ++ printk(KERN_ERR ++ "XDMA currently has %d Rx descriptors \n", ++ TITAN_GE_READ(0x5048 + (port_num << 8))); ++ ++ printk(KERN_ERR ++ "XDMA currently has prefetcted %d Rx descriptors \n", ++ TITAN_GE_READ(0x505c + (port_num << 8))); ++ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT + ++ (port_num << 8)), eth_int_cause_error); ++ } ++ ++ /* ++ * PHY interrupt to inform abt the changes. Reading the ++ * PHY Status register will clear the interrupt ++ */ ++ if ((!(eth_int_cause1 & 0x30303)) && ++ (eth_int_cause_error == 0)) { ++ err = ++ titan_ge_mdio_read(port_num, ++ TITAN_GE_MDIO_PHY_IS, ®_data); ++ ++ if (reg_data & 0x0400) { ++ /* Link status change */ ++ titan_ge_mdio_read(port_num, ++ TITAN_GE_MDIO_PHY_STATUS, ®_data); ++ if (!(reg_data & 0x0400)) { ++ /* Link is down */ ++ netif_carrier_off(netdev); ++ netif_stop_queue(netdev); ++ } else { ++ /* Link is up */ ++ netif_carrier_on(netdev); ++ netif_wake_queue(netdev); ++ ++ /* Enable the queue */ ++ titan_ge_enable_tx(port_num); ++ } ++ } ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++/* ++ * Multicast and Promiscuous mode set. The ++ * set_multi entry point is called whenever the ++ * multicast address list or the network interface ++ * flags are updated. ++ */ ++static void titan_ge_set_multi(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned long reg_data; ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 + ++ (port_num << 12)); ++ ++ if (netdev->flags & IFF_PROMISC) { ++ reg_data |= 0x2; ++ } ++ else if (netdev->flags & IFF_ALLMULTI) { ++ reg_data |= 0x01; ++ reg_data |= 0x400; /* Use the 64-bit Multicast Hash bin */ ++ } ++ else { ++ reg_data = 0x2; ++ } ++ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 + ++ (port_num << 12)), reg_data); ++ if (reg_data & 0x01) { ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_LOW + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDLOW + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDHI + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_HI + ++ (port_num << 12)), 0xffff); ++ } ++} ++ ++/* ++ * Open the network device ++ */ ++static int titan_ge_open(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int irq = TITAN_ETH_PORT_IRQ - port_num; ++ int retval; ++ ++ retval = request_irq(irq, titan_ge_int_handler, ++ SA_INTERRUPT | SA_SAMPLE_RANDOM , netdev->name, netdev); ++ ++ if (retval != 0) { ++ printk(KERN_ERR "Cannot assign IRQ number to TITAN GE \n"); ++ return -1; ++ } ++ ++ netdev->irq = irq; ++ printk(KERN_INFO "Assigned IRQ %d to port %d\n", irq, port_num); ++ ++ spin_lock_irq(&(titan_ge_eth->lock)); ++ ++ if (titan_ge_eth_open(netdev) != TITAN_OK) { ++ spin_unlock_irq(&(titan_ge_eth->lock)); ++ printk("%s: Error opening interface \n", netdev->name); ++ free_irq(netdev->irq, netdev); ++ return -EBUSY; ++ } ++ ++ spin_unlock_irq(&(titan_ge_eth->lock)); ++ ++ return 0; ++} ++ ++/* ++ * Allocate the SKBs for the Rx ring. Also used ++ * for refilling the queue ++ */ ++static int titan_ge_rx_task(struct net_device *netdev, ++ titan_ge_port_info *titan_ge_port) ++{ ++ struct device *device = &titan_ge_device[titan_ge_port->port_num]->dev; ++ volatile titan_ge_rx_desc *rx_desc; ++ struct sk_buff *skb; ++ int rx_used_desc; ++ int count = 0; ++ ++ while (titan_ge_port->rx_ring_skbs < titan_ge_port->rx_ring_size) { ++ ++ /* First try to get the skb from the recycler */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ skb = titan_ge_alloc_skb(TITAN_GE_JUMBO_BUFSIZE, GFP_ATOMIC); ++#else ++ skb = titan_ge_alloc_skb(TITAN_GE_STD_BUFSIZE, GFP_ATOMIC); ++#endif ++ if (unlikely(!skb)) { ++ /* OOM, set the flag */ ++ printk("OOM \n"); ++ oom_flag = 1; ++ break; ++ } ++ count++; ++ skb->dev = netdev; ++ ++ titan_ge_port->rx_ring_skbs++; ++ ++ rx_used_desc = titan_ge_port->rx_used_desc_q; ++ rx_desc = &(titan_ge_port->rx_desc_area[rx_used_desc]); ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ rx_desc->buffer_addr = dma_map_single(device, skb->data, ++ TITAN_GE_JUMBO_BUFSIZE - 2, DMA_FROM_DEVICE); ++#else ++ rx_desc->buffer_addr = dma_map_single(device, skb->data, ++ TITAN_GE_STD_BUFSIZE - 2, DMA_FROM_DEVICE); ++#endif ++ ++ titan_ge_port->rx_skb[rx_used_desc] = skb; ++ rx_desc->cmd_sts = TITAN_GE_RX_BUFFER_OWNED; ++ ++ titan_ge_port->rx_used_desc_q = ++ (rx_used_desc + 1) % TITAN_GE_RX_QUEUE; ++ } ++ ++ return count; ++} ++ ++/* ++ * Actual init of the Tital GE port. There is one register for ++ * the channel configuration ++ */ ++static void titan_port_init(struct net_device *netdev, ++ titan_ge_port_info * titan_ge_eth) ++{ ++ unsigned long reg_data; ++ ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ ++ /* First reset the TMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data |= 0x80000000; ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ udelay(30); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data &= ~(0xc0000000); ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ /* Now reset the RMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data |= 0x00080000; ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ udelay(30); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data &= ~(0x000c0000); ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++} ++ ++/* ++ * Start the port. All the hardware specific configuration ++ * for the XDMA, Tx FIFO, Rx FIFO, TMAC, RMAC, TRTG and AFX ++ * go here ++ */ ++static int titan_ge_port_start(struct net_device *netdev, ++ titan_ge_port_info * titan_port) ++{ ++ volatile unsigned long reg_data, reg_data1; ++ int port_num = titan_port->port_num; ++ int count = 0; ++ unsigned long reg_data_1; ++ ++ if (config_done == 0) { ++ reg_data = TITAN_GE_READ(0x0004); ++ reg_data |= 0x100; ++ TITAN_GE_WRITE(0x0004, reg_data); ++ ++ reg_data &= ~(0x100); ++ TITAN_GE_WRITE(0x0004, reg_data); ++ ++ /* Turn on GMII/MII mode and turn off TBI mode */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TSB_CTRL_1); ++ reg_data |= 0x00000700; ++ reg_data &= ~(0x00800000); /* Fencing */ ++ ++ TITAN_GE_WRITE(0x000c, 0x00001100); ++ ++ TITAN_GE_WRITE(TITAN_GE_TSB_CTRL_1, reg_data); ++ ++ /* Set the CPU Resource Limit register */ ++ TITAN_GE_WRITE(0x00f8, 0x8); ++ ++ /* Be conservative when using the BIU buffers */ ++ TITAN_GE_WRITE(0x0068, 0x4); ++ } ++ ++ titan_port->tx_threshold = 0; ++ titan_port->rx_threshold = 0; ++ ++ /* We need to write the descriptors for Tx and Rx */ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_TX_DESC + (port_num << 8)), ++ (unsigned long) titan_port->tx_dma); ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_RX_DESC + (port_num << 8)), ++ (unsigned long) titan_port->rx_dma); ++ ++ if (config_done == 0) { ++ /* Step 1: XDMA config */ ++ reg_data = TITAN_GE_READ(TITAN_GE_XDMA_CONFIG); ++ reg_data &= ~(0x80000000); /* clear reset */ ++ reg_data |= 0x1 << 29; /* sparse tx descriptor spacing */ ++ reg_data |= 0x1 << 28; /* sparse rx descriptor spacing */ ++ reg_data |= (0x1 << 23) | (0x1 << 24); /* Descriptor Coherency */ ++ reg_data |= (0x1 << 21) | (0x1 << 22); /* Data Coherency */ ++ TITAN_GE_WRITE(TITAN_GE_XDMA_CONFIG, reg_data); ++ } ++ ++ /* IR register for the XDMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8)); ++ reg_data |= 0x80068000; /* No Rx_OOD */ ++ TITAN_GE_WRITE((TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8)), reg_data); ++ ++ /* Start the Tx and Rx XDMA controller */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + (port_num << 8)); ++ reg_data &= 0x4fffffff; /* Clear tx reset */ ++ reg_data &= 0xfff4ffff; /* Clear rx reset */ ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ reg_data |= 0xa0 | 0x30030000; ++#else ++ reg_data |= 0x40 | 0x20030000; ++#endif ++ ++#ifndef CONFIG_SMP ++ reg_data &= ~(0x10); ++ reg_data |= 0x0f; /* All of the packet */ ++#endif ++ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + (port_num << 8)), reg_data); ++ ++ /* Rx desc count */ ++ count = titan_ge_rx_task(netdev, titan_port); ++ TITAN_GE_WRITE((0x5048 + (port_num << 8)), count); ++ count = TITAN_GE_READ(0x5048 + (port_num << 8)); ++ ++ udelay(30); ++ ++ /* ++ * Step 2: Configure the SDQPF, i.e. FIFO ++ */ ++ if (config_done == 0) { ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL); ++ reg_data = 0x1; ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ reg_data &= ~(0x1); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL); ++ reg_data = 0x1; ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ reg_data &= ~(0x1); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ } ++ /* ++ * Enable RX FIFO 0, 4 and 8 ++ */ ++ if (port_num == 0) { ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10); ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4844); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x4844, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_0); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ reg_data |= (0xff << 10); ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4944); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x4944, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ } ++ ++ if (port_num == 1) { ++ reg_data = TITAN_GE_READ(0x4870); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (0xff + 1); ++ ++ TITAN_GE_WRITE(0x4870, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4874); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x4874, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4870, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x494c); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x494c, reg_data); ++ reg_data |= (0xff << 10) | (0xff + 1); ++ TITAN_GE_WRITE(0x494c, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4950); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x4950, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x494c, reg_data); ++ } ++ ++ /* ++ * Titan 1.2 revision does support port #2 ++ */ ++ if (port_num == 2) { ++ /* ++ * Put the descriptors in the SRAM ++ */ ++ reg_data = TITAN_GE_READ(0x48a0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x48a4); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x48a4, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x4958); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ TITAN_GE_WRITE(0x4958, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x495c); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x495c, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ } ++ ++ if (port_num == 2) { ++ reg_data = TITAN_GE_READ(0x48a0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x48a4); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x48a4, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x4958); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ TITAN_GE_WRITE(0x4958, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x495c); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x495c, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ } ++ ++ /* ++ * Step 3: TRTG block enable ++ */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TRTG_CONFIG + (port_num << 12)); ++ ++ /* ++ * This is the 1.2 revision of the chip. It has fix for the ++ * IP header alignment. Now, the IP header begins at an ++ * aligned address and this wont need an extra copy in the ++ * driver. This performance drawback existed in the previous ++ * versions of the silicon ++ */ ++ reg_data_1 = TITAN_GE_READ(0x103c + (port_num << 12)); ++ reg_data_1 |= 0x40000000; ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ reg_data_1 |= 0x04000000; ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ mdelay(5); ++ ++ reg_data_1 &= ~(0x04000000); ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ mdelay(5); ++ ++ reg_data |= 0x0001; ++ TITAN_GE_WRITE((TITAN_GE_TRTG_CONFIG + (port_num << 12)), reg_data); ++ ++ /* ++ * Step 4: Start the Tx activity ++ */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_2 + (port_num << 12)), 0xe197); ++#ifdef TITAN_GE_JUMBO_FRAMES ++ TITAN_GE_WRITE((0x1258 + (port_num << 12)), 0x4000); ++#endif ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)); ++ reg_data |= 0x0001; /* Enable TMAC */ ++ reg_data |= 0x6c70; /* PAUSE also set */ ++ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ udelay(30); ++ ++ /* Destination Address drop bit */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_2 + (port_num << 12)); ++ reg_data |= 0x218; /* DA_DROP bit and pause */ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_2 + (port_num << 12)), reg_data); ++ ++ TITAN_GE_WRITE((0x1218 + (port_num << 12)), 0x3); ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ TITAN_GE_WRITE((0x1208 + (port_num << 12)), 0x4000); ++#endif ++ /* Start the Rx activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)); ++ reg_data |= 0x0001; /* RMAC Enable */ ++ reg_data |= 0x0010; /* CRC Check enable */ ++ reg_data |= 0x0040; /* Min Frame check enable */ ++ reg_data |= 0x4400; /* Max Frame check enable */ ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ udelay(30); ++ ++ /* ++ * Enable the Interrupts for Tx and Rx ++ */ ++ reg_data1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ ++ if (port_num == 0) { ++ reg_data1 |= 0x3; ++#ifdef CONFIG_SMP ++ TITAN_GE_WRITE(0x0038, 0x003); ++#else ++ TITAN_GE_WRITE(0x0038, 0x303); ++#endif ++ } ++ ++ if (port_num == 1) { ++ reg_data1 |= 0x300; ++ } ++ ++ if (port_num == 2) ++ reg_data1 |= 0x30000; ++ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data1); ++ TITAN_GE_WRITE(0x003c, 0x300); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(0x0024, 0x04000024); /* IRQ vector */ ++ TITAN_GE_WRITE(0x0020, 0x000fb000); /* INTMSG base */ ++ } ++ ++ /* Priority */ ++ reg_data = TITAN_GE_READ(0x1038 + (port_num << 12)); ++ reg_data &= ~(0x00f00000); ++ TITAN_GE_WRITE((0x1038 + (port_num << 12)), reg_data); ++ ++ /* Step 5: GMII config */ ++ titan_ge_gmii_config(port_num); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(0x1a80, 0); ++ config_done = 1; ++ } ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Function to queue the packet for the Ethernet device ++ */ ++static void titan_ge_tx_queue(titan_ge_port_info * titan_ge_eth, ++ struct sk_buff * skb) ++{ ++ struct device *device = &titan_ge_device[titan_ge_eth->port_num]->dev; ++ unsigned int curr_desc = titan_ge_eth->tx_curr_desc_q; ++ volatile titan_ge_tx_desc *tx_curr; ++ int port_num = titan_ge_eth->port_num; ++ ++ tx_curr = &(titan_ge_eth->tx_desc_area[curr_desc]); ++ tx_curr->buffer_addr = ++ dma_map_single(device, skb->data, skb_headlen(skb), ++ DMA_TO_DEVICE); ++ ++ titan_ge_eth->tx_skb[curr_desc] = (struct sk_buff *) skb; ++ tx_curr->buffer_len = skb_headlen(skb); ++ ++ /* Last descriptor enables interrupt and changes ownership */ ++ tx_curr->cmd_sts = 0x1 | (1 << 15) | (1 << 5); ++ ++ /* Kick the XDMA to start the transfer from memory to the FIFO */ ++ TITAN_GE_WRITE((0x5044 + (port_num << 8)), 0x1); ++ ++ /* Current descriptor updated */ ++ titan_ge_eth->tx_curr_desc_q = (curr_desc + 1) % TITAN_GE_TX_QUEUE; ++ ++ /* Prefetch the next descriptor */ ++ prefetch((const void *) ++ &titan_ge_eth->tx_desc_area[titan_ge_eth->tx_curr_desc_q]); ++} ++ ++/* ++ * Actually does the open of the Ethernet device ++ */ ++static int titan_ge_eth_open(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ struct device *device = &titan_ge_device[port_num]->dev; ++ unsigned long reg_data; ++ unsigned int phy_reg; ++ int err = 0; ++ ++ /* Stop the Rx activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ /* Clear the port interrupts */ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT + (port_num << 8)), 0x0); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0); ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_B, 0); ++ } ++ ++ /* Set the MAC Address */ ++ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6); ++ ++ if (config_done == 0) ++ titan_port_init(netdev, titan_ge_eth); ++ ++ titan_ge_update_afx(titan_ge_eth); ++ ++ /* Allocate the Tx ring now */ ++ titan_ge_eth->tx_ring_skbs = 0; ++ titan_ge_eth->tx_ring_size = TITAN_GE_TX_QUEUE; ++ ++ /* Allocate space in the SRAM for the descriptors */ ++ titan_ge_eth->tx_desc_area = (titan_ge_tx_desc *) ++ (titan_ge_sram + TITAN_TX_RING_BYTES * port_num); ++ titan_ge_eth->tx_dma = TITAN_SRAM_BASE + TITAN_TX_RING_BYTES * port_num; ++ ++ if (!titan_ge_eth->tx_desc_area) { ++ printk(KERN_ERR ++ "%s: Cannot allocate Tx Ring (size %d bytes) for port %d\n", ++ netdev->name, TITAN_TX_RING_BYTES, port_num); ++ return -ENOMEM; ++ } ++ ++ memset(titan_ge_eth->tx_desc_area, 0, titan_ge_eth->tx_desc_area_size); ++ ++ /* Now initialize the Tx descriptor ring */ ++ titan_ge_init_tx_desc_ring(titan_ge_eth, ++ titan_ge_eth->tx_ring_size, ++ (unsigned long) titan_ge_eth->tx_desc_area, ++ (unsigned long) titan_ge_eth->tx_dma); ++ ++ /* Allocate the Rx ring now */ ++ titan_ge_eth->rx_ring_size = TITAN_GE_RX_QUEUE; ++ titan_ge_eth->rx_ring_skbs = 0; ++ ++ titan_ge_eth->rx_desc_area = ++ (titan_ge_rx_desc *)(titan_ge_sram + 0x1000 + TITAN_RX_RING_BYTES * port_num); ++ ++ titan_ge_eth->rx_dma = TITAN_SRAM_BASE + 0x1000 + TITAN_RX_RING_BYTES * port_num; ++ ++ if (!titan_ge_eth->rx_desc_area) { ++ printk(KERN_ERR "%s: Cannot allocate Rx Ring (size %d bytes)\n", ++ netdev->name, TITAN_RX_RING_BYTES); ++ ++ printk(KERN_ERR "%s: Freeing previously allocated TX queues...", ++ netdev->name); ++ ++ dma_free_coherent(device, titan_ge_eth->tx_desc_area_size, ++ (void *) titan_ge_eth->tx_desc_area, ++ titan_ge_eth->tx_dma); ++ ++ return -ENOMEM; ++ } ++ ++ memset(titan_ge_eth->rx_desc_area, 0, titan_ge_eth->rx_desc_area_size); ++ ++ /* Now initialize the Rx ring */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ if ((titan_ge_init_rx_desc_ring ++ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_JUMBO_BUFSIZE, ++ (unsigned long) titan_ge_eth->rx_desc_area, 0, ++ (unsigned long) titan_ge_eth->rx_dma)) == 0) ++#else ++ if ((titan_ge_init_rx_desc_ring ++ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_STD_BUFSIZE, ++ (unsigned long) titan_ge_eth->rx_desc_area, 0, ++ (unsigned long) titan_ge_eth->rx_dma)) == 0) ++#endif ++ panic("%s: Error initializing RX Ring\n", netdev->name); ++ ++ /* Fill the Rx ring with the SKBs */ ++ titan_ge_port_start(netdev, titan_ge_eth); ++ ++ /* ++ * Check if Interrupt Coalscing needs to be turned on. The ++ * values specified in the register is multiplied by ++ * (8 x 64 nanoseconds) to determine when an interrupt should ++ * be sent to the CPU. ++ */ ++ ++ if (TITAN_GE_TX_COAL) { ++ titan_ge_eth->tx_int_coal = ++ titan_ge_tx_coal(TITAN_GE_TX_COAL, port_num); ++ } ++ ++ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg); ++ if (err == TITAN_GE_MDIO_ERROR) { ++ printk(KERN_ERR ++ "Could not read PHY control register 0x11 \n"); ++ return TITAN_ERROR; ++ } ++ if (!(phy_reg & 0x0400)) { ++ netif_carrier_off(netdev); ++ netif_stop_queue(netdev); ++ return TITAN_ERROR; ++ } else { ++ netif_carrier_on(netdev); ++ netif_start_queue(netdev); ++ } ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Queue the packet for Tx. Currently no support for zero copy, ++ * checksum offload and Scatter Gather. The chip does support ++ * Scatter Gather only. But, that wont help here since zero copy ++ * requires support for Tx checksumming also. ++ */ ++int titan_ge_start_xmit(struct sk_buff *skb, struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned long flags; ++ struct net_device_stats *stats; ++//printk("titan_ge_start_xmit\n"); ++ ++ stats = &titan_ge_eth->stats; ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ if ((TITAN_GE_TX_QUEUE - titan_ge_eth->tx_ring_skbs) <= ++ (skb_shinfo(skb)->nr_frags + 1)) { ++ netif_stop_queue(netdev); ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ printk(KERN_ERR "Tx OOD \n"); ++ return 1; ++ } ++ ++ titan_ge_tx_queue(titan_ge_eth, skb); ++ titan_ge_eth->tx_ring_skbs++; ++ ++ if (TITAN_GE_TX_QUEUE <= (titan_ge_eth->tx_ring_skbs + 4)) { ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ titan_ge_free_tx_queue(titan_ge_eth); ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ } ++ ++ stats->tx_bytes += skb->len; ++ stats->tx_packets++; ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ netdev->trans_start = jiffies; ++ ++ return 0; ++} ++ ++/* ++ * Actually does the Rx. Rx side checksumming supported. ++ */ ++static int titan_ge_rx(struct net_device *netdev, int port_num, ++ titan_ge_port_info * titan_ge_port, ++ titan_ge_packet * packet) ++{ ++ int rx_curr_desc, rx_used_desc; ++ volatile titan_ge_rx_desc *rx_desc; ++ ++ rx_curr_desc = titan_ge_port->rx_curr_desc_q; ++ rx_used_desc = titan_ge_port->rx_used_desc_q; ++ ++ if (((rx_curr_desc + 1) % TITAN_GE_RX_QUEUE) == rx_used_desc) ++ return TITAN_ERROR; ++ ++ rx_desc = &(titan_ge_port->rx_desc_area[rx_curr_desc]); ++ ++ if (rx_desc->cmd_sts & TITAN_GE_RX_BUFFER_OWNED) ++ return TITAN_ERROR; ++ ++ packet->skb = titan_ge_port->rx_skb[rx_curr_desc]; ++ packet->len = (rx_desc->cmd_sts & 0x7fff); ++ ++ /* ++ * At this point, we dont know if the checksumming ++ * actually helps relieve CPU. So, keep it for ++ * port 0 only ++ */ ++ packet->checksum = ntohs((rx_desc->buffer & 0xffff0000) >> 16); ++ packet->cmd_sts = rx_desc->cmd_sts; ++ ++ titan_ge_port->rx_curr_desc_q = (rx_curr_desc + 1) % TITAN_GE_RX_QUEUE; ++ ++ /* Prefetch the next descriptor */ ++ prefetch((const void *) ++ &titan_ge_port->rx_desc_area[titan_ge_port->rx_curr_desc_q + 1]); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Free the Tx queue of the used SKBs ++ */ ++static int titan_ge_free_tx_queue(titan_ge_port_info *titan_ge_eth) ++{ ++ unsigned long flags; ++ ++ /* Take the lock */ ++ spin_lock_irqsave(&(titan_ge_eth->lock), flags); ++ ++ while (titan_ge_return_tx_desc(titan_ge_eth, titan_ge_eth->port_num) == 0) ++ if (titan_ge_eth->tx_ring_skbs != 1) ++ titan_ge_eth->tx_ring_skbs--; ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Threshold beyond which we do the cleaning of ++ * Tx queue and new allocation for the Rx ++ * queue ++ */ ++#define TX_THRESHOLD 4 ++#define RX_THRESHOLD 10 ++ ++/* ++ * Receive the packets and send it to the kernel. ++ */ ++static int titan_ge_receive_queue(struct net_device *netdev, unsigned int max) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ titan_ge_packet packet; ++ struct net_device_stats *stats; ++ struct sk_buff *skb; ++ unsigned long received_packets = 0; ++ unsigned int ack; ++ ++ stats = &titan_ge_eth->stats; ++ ++ while ((--max) ++ && (titan_ge_rx(netdev, port_num, titan_ge_eth, &packet) == TITAN_OK)) { ++ skb = (struct sk_buff *) packet.skb; ++ ++ titan_ge_eth->rx_ring_skbs--; ++ ++ if (--titan_ge_eth->rx_work_limit < 0) ++ break; ++ received_packets++; ++ ++ stats->rx_packets++; ++ stats->rx_bytes += packet.len; ++ ++ if ((packet.cmd_sts & TITAN_GE_RX_PERR) || ++ (packet.cmd_sts & TITAN_GE_RX_OVERFLOW_ERROR) || ++ (packet.cmd_sts & TITAN_GE_RX_TRUNC) || ++ (packet.cmd_sts & TITAN_GE_RX_CRC_ERROR)) { ++ stats->rx_dropped++; ++ dev_kfree_skb_any(skb); ++ ++ continue; ++ } ++ /* ++ * Either support fast path or slow path. Decision ++ * making can really slow down the performance. The ++ * idea is to cut down the number of checks and improve ++ * the fastpath. ++ */ ++ ++ skb_put(skb, packet.len - 2); ++ ++ /* ++ * Increment data pointer by two since thats where ++ * the MAC starts ++ */ ++ skb_reserve(skb, 2); ++ skb->protocol = eth_type_trans(skb, netdev); ++ netif_receive_skb(skb); ++ ++ if (titan_ge_eth->rx_threshold > RX_THRESHOLD) { ++ ack = titan_ge_rx_task(netdev, titan_ge_eth); ++ TITAN_GE_WRITE((0x5048 + (port_num << 8)), ack); ++ titan_ge_eth->rx_threshold = 0; ++ } else ++ titan_ge_eth->rx_threshold++; ++ ++ if (titan_ge_eth->tx_threshold > TX_THRESHOLD) { ++ titan_ge_eth->tx_threshold = 0; ++ titan_ge_free_tx_queue(titan_ge_eth); ++ } ++ else ++ titan_ge_eth->tx_threshold++; ++ ++ } ++ return received_packets; ++} ++ ++ ++/* ++ * Enable the Rx side interrupts ++ */ ++static void titan_ge_enable_int(unsigned int port_num, ++ titan_ge_port_info *titan_ge_eth, ++ struct net_device *netdev) ++{ ++ unsigned long reg_data = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ ++ if (port_num == 0) ++ reg_data |= 0x3; ++ if (port_num == 1) ++ reg_data |= 0x300; ++ if (port_num == 2) ++ reg_data |= 0x30000; ++ ++ /* Re-enable interrupts */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data); ++} ++ ++/* ++ * Main function to handle the polling for Rx side NAPI. ++ * Receive interrupts have been disabled at this point. ++ * The poll schedules the transmit followed by receive. ++ */ ++static int titan_ge_poll(struct net_device *netdev, int *budget) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ int port_num = titan_ge_eth->port_num; ++ int work_done = 0; ++ unsigned long flags, status; ++ ++ titan_ge_eth->rx_work_limit = *budget; ++ if (titan_ge_eth->rx_work_limit > netdev->quota) ++ titan_ge_eth->rx_work_limit = netdev->quota; ++ ++ do { ++ /* Do the transmit cleaning work here */ ++ titan_ge_free_tx_queue(titan_ge_eth); ++ ++ /* Ack the Rx interrupts */ ++ if (port_num == 0) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x3); ++ if (port_num == 1) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x300); ++ if (port_num == 2) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x30000); ++ ++ work_done += titan_ge_receive_queue(netdev, 0); ++ ++ /* Out of quota and there is work to be done */ ++ if (titan_ge_eth->rx_work_limit < 0) ++ goto not_done; ++ ++ /* Receive alloc_skb could lead to OOM */ ++ if (oom_flag == 1) { ++ oom_flag = 0; ++ goto oom; ++ } ++ ++ status = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A); ++ } while (status & 0x30300); ++ ++ /* If we are here, then no more interrupts to process */ ++ goto done; ++ ++not_done: ++ *budget -= work_done; ++ netdev->quota -= work_done; ++ return 1; ++ ++oom: ++ printk(KERN_ERR "OOM \n"); ++ netif_rx_complete(netdev); ++ return 0; ++ ++done: ++ /* ++ * No more packets on the poll list. Turn the interrupts ++ * back on and we should be able to catch the new ++ * packets in the interrupt handler ++ */ ++ if (!work_done) ++ work_done = 1; ++ ++ *budget -= work_done; ++ netdev->quota -= work_done; ++ ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ /* Remove us from the poll list */ ++ netif_rx_complete(netdev); ++ ++ /* Re-enable interrupts */ ++ titan_ge_enable_int(port_num, titan_ge_eth, netdev); ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ return 0; ++} ++ ++/* ++ * Close the network device ++ */ ++int titan_ge_stop(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ spin_lock_irq(&(titan_ge_eth->lock)); ++ titan_ge_eth_stop(netdev); ++ free_irq(netdev->irq, netdev); ++ spin_unlock_irq(&titan_ge_eth->lock); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Free the Tx ring ++ */ ++static void titan_ge_free_tx_rings(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int curr; ++ unsigned long reg_data; ++ ++ /* Stop the Tx DMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)); ++ reg_data |= 0xc0000000; ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)), reg_data); ++ ++ /* Disable the TMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ for (curr = 0; ++ (titan_ge_eth->tx_ring_skbs) && (curr < TITAN_GE_TX_QUEUE); ++ curr++) { ++ if (titan_ge_eth->tx_skb[curr]) { ++ dev_kfree_skb(titan_ge_eth->tx_skb[curr]); ++ titan_ge_eth->tx_ring_skbs--; ++ } ++ } ++ ++ if (titan_ge_eth->tx_ring_skbs != 0) ++ printk ++ ("%s: Error on Tx descriptor free - could not free %d" ++ " descriptors\n", netdev->name, ++ titan_ge_eth->tx_ring_skbs); ++ ++#ifndef TITAN_RX_RING_IN_SRAM ++ dma_free_coherent(&titan_ge_device[port_num]->dev, ++ titan_ge_eth->tx_desc_area_size, ++ (void *) titan_ge_eth->tx_desc_area, ++ titan_ge_eth->tx_dma); ++#endif ++} ++ ++/* ++ * Free the Rx ring ++ */ ++static void titan_ge_free_rx_rings(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int curr; ++ unsigned long reg_data; ++ ++ /* Stop the Rx DMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)); ++ reg_data |= 0x000c0000; ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)), reg_data); ++ ++ /* Disable the RMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ for (curr = 0; ++ titan_ge_eth->rx_ring_skbs && (curr < TITAN_GE_RX_QUEUE); ++ curr++) { ++ if (titan_ge_eth->rx_skb[curr]) { ++ dev_kfree_skb(titan_ge_eth->rx_skb[curr]); ++ titan_ge_eth->rx_ring_skbs--; ++ } ++ } ++ ++ if (titan_ge_eth->rx_ring_skbs != 0) ++ printk(KERN_ERR ++ "%s: Error in freeing Rx Ring. %d skb's still" ++ " stuck in RX Ring - ignoring them\n", netdev->name, ++ titan_ge_eth->rx_ring_skbs); ++ ++#ifndef TITAN_RX_RING_IN_SRAM ++ dma_free_coherent(&titan_ge_device[port_num]->dev, ++ titan_ge_eth->rx_desc_area_size, ++ (void *) titan_ge_eth->rx_desc_area, ++ titan_ge_eth->rx_dma); ++#endif ++} ++ ++/* ++ * Actually does the stop of the Ethernet device ++ */ ++static void titan_ge_eth_stop(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ netif_stop_queue(netdev); ++ ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ ++ titan_ge_free_tx_rings(netdev); ++ titan_ge_free_rx_rings(netdev); ++ ++ /* Disable the Tx and Rx Interrupts for all channels */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, 0x0); ++} ++ ++/* ++ * Update the MAC address. Note that we have to write the ++ * address in three station registers, 16 bits each. And this ++ * has to be done for TMAC and RMAC ++ */ ++static void titan_ge_update_mac_address(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ u8 p_addr[6]; ++ ++ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6); ++ memcpy(p_addr, netdev->dev_addr, 6); ++ ++ /* Update the Address Filtering Match tables */ ++ titan_ge_update_afx(titan_ge_eth); ++ ++ printk("Station MAC : %d %d %d %d %d %d \n", ++ p_addr[5], p_addr[4], p_addr[3], ++ p_addr[2], p_addr[1], p_addr[0]); ++ ++ /* Set the MAC address here for TMAC and RMAC */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port_num << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port_num << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port_num << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port_num << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port_num << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port_num << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++} ++ ++/* ++ * Set the MAC address of the Ethernet device ++ */ ++static int titan_ge_set_mac_address(struct net_device *dev, void *addr) ++{ ++ titan_ge_port_info *tp = netdev_priv(dev); ++ struct sockaddr *sa = addr; ++ ++ memcpy(dev->dev_addr, sa->sa_data, dev->addr_len); ++ ++ spin_lock_irq(&tp->lock); ++ titan_ge_update_mac_address(dev); ++ spin_unlock_irq(&tp->lock); ++ ++ return 0; ++} ++ ++/* ++ * Get the Ethernet device stats ++ */ ++static struct net_device_stats *titan_ge_get_stats(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ return &titan_ge_eth->stats; ++} ++ ++/* ++ * Initialize the Rx descriptor ring for the Titan Ge ++ */ ++static int titan_ge_init_rx_desc_ring(titan_ge_port_info * titan_eth_port, ++ int rx_desc_num, ++ int rx_buff_size, ++ unsigned long rx_desc_base_addr, ++ unsigned long rx_buff_base_addr, ++ unsigned long rx_dma) ++{ ++ volatile titan_ge_rx_desc *rx_desc; ++ unsigned long buffer_addr; ++ int index; ++ unsigned long titan_ge_rx_desc_bus = rx_dma; ++ ++ buffer_addr = rx_buff_base_addr; ++ rx_desc = (titan_ge_rx_desc *) rx_desc_base_addr; ++ ++ /* Check alignment */ ++ if (rx_buff_base_addr & 0xF) ++ return 0; ++ ++ /* Check Rx buffer size */ ++ if ((rx_buff_size < 8) || (rx_buff_size > TITAN_GE_MAX_RX_BUFFER)) ++ return 0; ++ ++ /* 64-bit alignment ++ if ((rx_buff_base_addr + rx_buff_size) & 0x7) ++ return 0; */ ++ ++ /* Initialize the Rx desc ring */ ++ for (index = 0; index < rx_desc_num; index++) { ++ titan_ge_rx_desc_bus += sizeof(titan_ge_rx_desc); ++ rx_desc[index].cmd_sts = 0; ++ rx_desc[index].buffer_addr = buffer_addr; ++ titan_eth_port->rx_skb[index] = NULL; ++ buffer_addr += rx_buff_size; ++ } ++ ++ titan_eth_port->rx_curr_desc_q = 0; ++ titan_eth_port->rx_used_desc_q = 0; ++ ++ titan_eth_port->rx_desc_area = (titan_ge_rx_desc *) rx_desc_base_addr; ++ titan_eth_port->rx_desc_area_size = ++ rx_desc_num * sizeof(titan_ge_rx_desc); ++ ++ titan_eth_port->rx_dma = rx_dma; ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Initialize the Tx descriptor ring. Descriptors in the SRAM ++ */ ++static int titan_ge_init_tx_desc_ring(titan_ge_port_info * titan_ge_port, ++ int tx_desc_num, ++ unsigned long tx_desc_base_addr, ++ unsigned long tx_dma) ++{ ++ titan_ge_tx_desc *tx_desc; ++ int index; ++ unsigned long titan_ge_tx_desc_bus = tx_dma; ++ ++ if (tx_desc_base_addr & 0xF) ++ return 0; ++ ++ tx_desc = (titan_ge_tx_desc *) tx_desc_base_addr; ++ ++ for (index = 0; index < tx_desc_num; index++) { ++ titan_ge_port->tx_dma_array[index] = ++ (dma_addr_t) titan_ge_tx_desc_bus; ++ titan_ge_tx_desc_bus += sizeof(titan_ge_tx_desc); ++ tx_desc[index].cmd_sts = 0x0000; ++ tx_desc[index].buffer_len = 0; ++ tx_desc[index].buffer_addr = 0x00000000; ++ titan_ge_port->tx_skb[index] = NULL; ++ } ++ ++ titan_ge_port->tx_curr_desc_q = 0; ++ titan_ge_port->tx_used_desc_q = 0; ++ ++ titan_ge_port->tx_desc_area = (titan_ge_tx_desc *) tx_desc_base_addr; ++ titan_ge_port->tx_desc_area_size = ++ tx_desc_num * sizeof(titan_ge_tx_desc); ++ ++ titan_ge_port->tx_dma = tx_dma; ++ return TITAN_OK; ++} ++ ++/* ++ * Initialize the device as an Ethernet device ++ */ ++static int __init titan_ge_probe(struct device *device) ++{ ++ titan_ge_port_info *titan_ge_eth; ++ struct net_device *netdev; ++ int port = to_platform_device(device)->id; ++ int err; ++ ++ netdev = alloc_etherdev(sizeof(titan_ge_port_info)); ++ if (!netdev) { ++ err = -ENODEV; ++ goto out; ++ } ++ ++ netdev->open = titan_ge_open; ++ netdev->stop = titan_ge_stop; ++ netdev->hard_start_xmit = titan_ge_start_xmit; ++ netdev->get_stats = titan_ge_get_stats; ++ netdev->set_multicast_list = titan_ge_set_multi; ++ netdev->set_mac_address = titan_ge_set_mac_address; ++ ++ /* Tx timeout */ ++ netdev->tx_timeout = titan_ge_tx_timeout; ++ netdev->watchdog_timeo = 2 * HZ; ++ ++ /* Set these to very high values */ ++ netdev->poll = titan_ge_poll; ++ netdev->weight = 64; ++ ++ netdev->tx_queue_len = TITAN_GE_TX_QUEUE; ++ netif_carrier_off(netdev); ++ netdev->base_addr = 0; ++ ++ netdev->change_mtu = titan_ge_change_mtu; ++ ++ titan_ge_eth = netdev_priv(netdev); ++ /* Allocation of memory for the driver structures */ ++ ++ titan_ge_eth->port_num = port; ++ ++ /* Configure the Tx timeout handler */ ++ INIT_WORK(&titan_ge_eth->tx_timeout_task, ++ (void (*)(void *)) titan_ge_tx_timeout_task, netdev); ++ ++ spin_lock_init(&titan_ge_eth->lock); ++ ++ /* set MAC addresses */ ++ memcpy(netdev->dev_addr, titan_ge_mac_addr_base, 6); ++ netdev->dev_addr[5] += port; ++ ++ err = register_netdev(netdev); ++ ++ if (err) ++ goto out_free_netdev; ++ ++ printk(KERN_NOTICE ++ "%s: port %d with MAC address %02x:%02x:%02x:%02x:%02x:%02x\n", ++ netdev->name, port, netdev->dev_addr[0], ++ netdev->dev_addr[1], netdev->dev_addr[2], ++ netdev->dev_addr[3], netdev->dev_addr[4], ++ netdev->dev_addr[5]); ++ ++ printk(KERN_NOTICE "Rx NAPI supported, Tx Coalescing ON \n"); ++ ++ return 0; ++ ++out_free_netdev: ++ kfree(netdev); ++ ++out: ++ return err; ++} ++ ++static void __devexit titan_device_remove(struct device *device) ++{ ++} ++ ++/* ++ * Reset the Ethernet port ++ */ ++static void titan_ge_port_reset(unsigned int port_num) ++{ ++ unsigned int reg_data; ++ ++ /* Stop the Tx port activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x0001); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ /* Stop the Rx port activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x0001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ return; ++} ++ ++/* ++ * Return the Tx desc after use by the XDMA ++ */ ++static int titan_ge_return_tx_desc(titan_ge_port_info * titan_ge_eth, int port) ++{ ++ int tx_desc_used; ++ struct sk_buff *skb; ++ ++ tx_desc_used = titan_ge_eth->tx_used_desc_q; ++ ++ /* return right away */ ++ if (tx_desc_used == titan_ge_eth->tx_curr_desc_q) ++ return TITAN_ERROR; ++ ++ /* Now the critical stuff */ ++ skb = titan_ge_eth->tx_skb[tx_desc_used]; ++ ++ dev_kfree_skb_any(skb); ++ ++ titan_ge_eth->tx_skb[tx_desc_used] = NULL; ++ titan_ge_eth->tx_used_desc_q = ++ (tx_desc_used + 1) % TITAN_GE_TX_QUEUE; ++ ++ return 0; ++} ++ ++/* ++ * Coalescing for the Tx path ++ */ ++static unsigned long titan_ge_tx_coal(unsigned long delay, int port) ++{ ++ unsigned long rx_delay; ++ ++ rx_delay = TITAN_GE_READ(TITAN_GE_INT_COALESCING); ++ delay = (delay << 16) | rx_delay; ++ ++ TITAN_GE_WRITE(TITAN_GE_INT_COALESCING, delay); ++ TITAN_GE_WRITE(0x5038, delay); ++ ++ return delay; ++} ++ ++static struct device_driver titan_soc_driver = { ++ .name = titan_string, ++ .bus = &platform_bus_type, ++ .probe = titan_ge_probe, ++ .remove = __devexit_p(titan_device_remove), ++}; ++ ++static void titan_platform_release (struct device *device) ++{ ++ struct platform_device *pldev; ++ ++ /* free device */ ++ pldev = to_platform_device (device); ++ kfree (pldev); ++} ++ ++/* ++ * Register the Titan GE with the kernel ++ */ ++static int __init titan_ge_init_module(void) ++{ ++ struct platform_device *pldev; ++ unsigned int version, device; ++ int i; ++ ++ printk(KERN_NOTICE ++ "PMC-Sierra TITAN 10/100/1000 Ethernet Driver \n"); ++ ++ titan_ge_base = (unsigned long) ioremap(TITAN_GE_BASE, TITAN_GE_SIZE); ++ if (!titan_ge_base) { ++ printk("Mapping Titan GE failed\n"); ++ goto out; ++ } ++ ++ device = TITAN_GE_READ(TITAN_GE_DEVICE_ID); ++ version = (device & 0x000f0000) >> 16; ++ device &= 0x0000ffff; ++ ++ printk(KERN_NOTICE "Device Id : %x, Version : %x \n", device, version); ++ ++#ifdef TITAN_RX_RING_IN_SRAM ++ titan_ge_sram = (unsigned long) ioremap(TITAN_SRAM_BASE, ++ TITAN_SRAM_SIZE); ++ if (!titan_ge_sram) { ++ printk("Mapping Titan SRAM failed\n"); ++ goto out_unmap_ge; ++ } ++#endif ++ ++ if (driver_register(&titan_soc_driver)) { ++ printk(KERN_ERR "Driver registration failed\n"); ++ goto out_unmap_sram; ++ } ++ ++ for (i = 0; i < 3; i++) { ++ titan_ge_device[i] = NULL; ++ ++ if (!(pldev = kmalloc (sizeof (*pldev), GFP_KERNEL))) ++ continue; ++ ++ memset (pldev, 0, sizeof (*pldev)); ++ pldev->name = titan_string; ++ pldev->id = i; ++ pldev->dev.release = titan_platform_release; ++ titan_ge_device[i] = pldev; ++ ++ if (platform_device_register (pldev)) { ++ kfree (pldev); ++ titan_ge_device[i] = NULL; ++ continue; ++ } ++ ++ if (!pldev->dev.driver) { ++ /* ++ * The driver was not bound to this device, there was ++ * no hardware at this address. Unregister it, as the ++ * release fuction will take care of freeing the ++ * allocated structure ++ */ ++ titan_ge_device[i] = NULL; ++ platform_device_unregister (pldev); ++ } ++ } ++ ++ return 0; ++ ++out_unmap_sram: ++ iounmap((void *)titan_ge_sram); ++ ++out_unmap_ge: ++ iounmap((void *)titan_ge_base); ++ ++out: ++ return -ENOMEM; ++} ++ ++/* ++ * Unregister the Titan GE from the kernel ++ */ ++static void __exit titan_ge_cleanup_module(void) ++{ ++ int i; ++ ++ driver_unregister(&titan_soc_driver); ++ ++ for (i = 0; i < 3; i++) { ++ if (titan_ge_device[i]) { ++ platform_device_unregister (titan_ge_device[i]); ++ titan_ge_device[i] = NULL; ++ } ++ } ++ ++ iounmap((void *)titan_ge_sram); ++ iounmap((void *)titan_ge_base); ++} ++ ++MODULE_AUTHOR("Manish Lachwani "); ++MODULE_DESCRIPTION("Titan GE Ethernet driver"); ++MODULE_LICENSE("GPL"); ++ ++module_init(titan_ge_init_module); ++module_exit(titan_ge_cleanup_module); +diff --git a/drivers/net/titan_ge.h b/drivers/net/titan_ge.h +new file mode 100644 +index 0000000..3719f78 +--- /dev/null ++++ b/drivers/net/titan_ge.h +@@ -0,0 +1,415 @@ ++#ifndef _TITAN_GE_H_ ++#define _TITAN_GE_H_ ++ ++#include ++#include ++#include ++#include ++ ++/* ++ * These functions should be later moved to a more generic location since there ++ * will be others accessing it also ++ */ ++ ++/* ++ * This is the way it works: LKB5 Base is at 0x0128. TITAN_BASE is defined in ++ * include/asm/titan_dep.h. TITAN_GE_BASE is the value in the TITAN_GE_LKB5 ++ * register. ++ */ ++ ++#define TITAN_GE_BASE 0xfe000000UL ++#define TITAN_GE_SIZE 0x10000UL ++ ++extern unsigned long titan_ge_base; ++ ++#define TITAN_GE_WRITE(offset, data) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) = (data) ++ ++#define TITAN_GE_READ(offset) *(volatile u32 *)(titan_ge_base + (offset)) ++ ++#ifndef msec_delay ++#define msec_delay(x) do { if(in_interrupt()) { \ ++ /* Don't mdelay in interrupt context! */ \ ++ BUG(); \ ++ } else { \ ++ set_current_state(TASK_UNINTERRUPTIBLE); \ ++ schedule_timeout((x * HZ)/1000); \ ++ } } while(0) ++#endif ++ ++#define TITAN_GE_PORT_0 ++ ++#define TITAN_SRAM_BASE ((OCD_READ(RM9000x2_OCD_LKB13) & ~1) << 4) ++#define TITAN_SRAM_SIZE 0x2000UL ++ ++/* ++ * We may need these constants ++ */ ++#define TITAN_BIT0 0x00000001 ++#define TITAN_BIT1 0x00000002 ++#define TITAN_BIT2 0x00000004 ++#define TITAN_BIT3 0x00000008 ++#define TITAN_BIT4 0x00000010 ++#define TITAN_BIT5 0x00000020 ++#define TITAN_BIT6 0x00000040 ++#define TITAN_BIT7 0x00000080 ++#define TITAN_BIT8 0x00000100 ++#define TITAN_BIT9 0x00000200 ++#define TITAN_BIT10 0x00000400 ++#define TITAN_BIT11 0x00000800 ++#define TITAN_BIT12 0x00001000 ++#define TITAN_BIT13 0x00002000 ++#define TITAN_BIT14 0x00004000 ++#define TITAN_BIT15 0x00008000 ++#define TITAN_BIT16 0x00010000 ++#define TITAN_BIT17 0x00020000 ++#define TITAN_BIT18 0x00040000 ++#define TITAN_BIT19 0x00080000 ++#define TITAN_BIT20 0x00100000 ++#define TITAN_BIT21 0x00200000 ++#define TITAN_BIT22 0x00400000 ++#define TITAN_BIT23 0x00800000 ++#define TITAN_BIT24 0x01000000 ++#define TITAN_BIT25 0x02000000 ++#define TITAN_BIT26 0x04000000 ++#define TITAN_BIT27 0x08000000 ++#define TITAN_BIT28 0x10000000 ++#define TITAN_BIT29 0x20000000 ++#define TITAN_BIT30 0x40000000 ++#define TITAN_BIT31 0x80000000 ++ ++/* Flow Control */ ++#define TITAN_GE_FC_NONE 0x0 ++#define TITAN_GE_FC_FULL 0x1 ++#define TITAN_GE_FC_TX_PAUSE 0x2 ++#define TITAN_GE_FC_RX_PAUSE 0x3 ++ ++/* Duplex Settings */ ++#define TITAN_GE_FULL_DUPLEX 0x1 ++#define TITAN_GE_HALF_DUPLEX 0x2 ++ ++/* Speed settings */ ++#define TITAN_GE_SPEED_1000 0x1 ++#define TITAN_GE_SPEED_100 0x2 ++#define TITAN_GE_SPEED_10 0x3 ++ ++/* Debugging info only */ ++#undef TITAN_DEBUG ++ ++/* Keep the rings in the Titan's SSRAM */ ++#define TITAN_RX_RING_IN_SRAM ++ ++#ifdef CONFIG_64BIT ++#define TITAN_GE_IE_MASK 0xfffffffffb001b64 ++#define TITAN_GE_IE_STATUS 0xfffffffffb001b60 ++#else ++#define TITAN_GE_IE_MASK 0xfb001b64 ++#define TITAN_GE_IE_STATUS 0xfb001b60 ++#endif ++ ++/* Support for Jumbo Frames */ ++#undef TITAN_GE_JUMBO_FRAMES ++ ++/* Rx buffer size */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++#define TITAN_GE_JUMBO_BUFSIZE 9080 ++#else ++#define TITAN_GE_STD_BUFSIZE 1580 ++#endif ++ ++/* ++ * Tx and Rx Interrupt Coalescing parameter. These values are ++ * for 1 Ghz processor. Rx coalescing can be taken care of ++ * by NAPI. NAPI is adaptive and hence useful. Tx coalescing ++ * is not adaptive. Hence, these values need to be adjusted ++ * based on load, CPU speed etc. ++ */ ++#define TITAN_GE_RX_COAL 150 ++#define TITAN_GE_TX_COAL 300 ++ ++#if defined(__BIG_ENDIAN) ++ ++/* Define the Rx descriptor */ ++typedef struct eth_rx_desc { ++ u32 reserved; /* Unused */ ++ u32 buffer_addr; /* CPU buffer address */ ++ u32 cmd_sts; /* Command and Status */ ++ u32 buffer; /* XDMA buffer address */ ++} titan_ge_rx_desc; ++ ++/* Define the Tx descriptor */ ++typedef struct eth_tx_desc { ++ u16 cmd_sts; /* Command, Status and Buffer count */ ++ u16 buffer_len; /* Length of the buffer */ ++ u32 buffer_addr; /* Physical address of the buffer */ ++} titan_ge_tx_desc; ++ ++#elif defined(__LITTLE_ENDIAN) ++ ++/* Define the Rx descriptor */ ++typedef struct eth_rx_desc { ++ u32 buffer_addr; /* CPU buffer address */ ++ u32 reserved; /* Unused */ ++ u32 buffer; /* XDMA buffer address */ ++ u32 cmd_sts; /* Command and Status */ ++} titan_ge_rx_desc; ++ ++/* Define the Tx descriptor */ ++typedef struct eth_tx_desc { ++ u32 buffer_addr; /* Physical address of the buffer */ ++ u16 buffer_len; /* Length of the buffer */ ++ u16 cmd_sts; /* Command, Status and Buffer count */ ++} titan_ge_tx_desc; ++#endif ++ ++/* Default Tx Queue Size */ ++#define TITAN_GE_TX_QUEUE 128 ++#define TITAN_TX_RING_BYTES (TITAN_GE_TX_QUEUE * sizeof(struct eth_tx_desc)) ++ ++/* Default Rx Queue Size */ ++#define TITAN_GE_RX_QUEUE 64 ++#define TITAN_RX_RING_BYTES (TITAN_GE_RX_QUEUE * sizeof(struct eth_rx_desc)) ++ ++/* Packet Structure */ ++typedef struct _pkt_info { ++ unsigned int len; ++ unsigned int cmd_sts; ++ unsigned int buffer; ++ struct sk_buff *skb; ++ unsigned int checksum; ++} titan_ge_packet; ++ ++ ++#define PHYS_CNT 3 ++ ++/* Titan Port specific data structure */ ++typedef struct _eth_port_ctrl { ++ unsigned int port_num; ++ u8 port_mac_addr[6]; ++ ++ /* Rx descriptor pointers */ ++ int rx_curr_desc_q, rx_used_desc_q; ++ ++ /* Tx descriptor pointers */ ++ int tx_curr_desc_q, tx_used_desc_q; ++ ++ /* Rx descriptor area */ ++ volatile titan_ge_rx_desc *rx_desc_area; ++ unsigned int rx_desc_area_size; ++ struct sk_buff* rx_skb[TITAN_GE_RX_QUEUE]; ++ ++ /* Tx Descriptor area */ ++ volatile titan_ge_tx_desc *tx_desc_area; ++ unsigned int tx_desc_area_size; ++ struct sk_buff* tx_skb[TITAN_GE_TX_QUEUE]; ++ ++ /* Timeout task */ ++ struct work_struct tx_timeout_task; ++ ++ /* DMA structures and handles */ ++ dma_addr_t tx_dma; ++ dma_addr_t rx_dma; ++ dma_addr_t tx_dma_array[TITAN_GE_TX_QUEUE]; ++ ++ /* Device lock */ ++ spinlock_t lock; ++ ++ unsigned int tx_ring_skbs; ++ unsigned int rx_ring_size; ++ unsigned int tx_ring_size; ++ unsigned int rx_ring_skbs; ++ ++ struct net_device_stats stats; ++ ++ /* Tx and Rx coalescing */ ++ unsigned long rx_int_coal; ++ unsigned long tx_int_coal; ++ ++ /* Threshold for replenishing the Rx and Tx rings */ ++ unsigned int tx_threshold; ++ unsigned int rx_threshold; ++ ++ /* NAPI work limit */ ++ unsigned int rx_work_limit; ++} titan_ge_port_info; ++ ++/* Titan specific constants */ ++#define TITAN_ETH_PORT_IRQ 3 ++ ++/* Max Rx buffer */ ++#define TITAN_GE_MAX_RX_BUFFER 65536 ++ ++/* Tx and Rx Error */ ++#define TITAN_GE_ERROR ++ ++/* Rx Descriptor Command and Status */ ++ ++#define TITAN_GE_RX_CRC_ERROR TITAN_BIT27 /* crc error */ ++#define TITAN_GE_RX_OVERFLOW_ERROR TITAN_BIT15 /* overflow */ ++#define TITAN_GE_RX_BUFFER_OWNED TITAN_BIT21 /* buffer ownership */ ++#define TITAN_GE_RX_STP TITAN_BIT31 /* start of packet */ ++#define TITAN_GE_RX_BAM TITAN_BIT30 /* broadcast address match */ ++#define TITAN_GE_RX_PAM TITAN_BIT28 /* physical address match */ ++#define TITAN_GE_RX_LAFM TITAN_BIT29 /* logical address filter match */ ++#define TITAN_GE_RX_VLAN TITAN_BIT26 /* virtual lans */ ++#define TITAN_GE_RX_PERR TITAN_BIT19 /* packet error */ ++#define TITAN_GE_RX_TRUNC TITAN_BIT20 /* packet size greater than 32 buffers */ ++ ++/* Tx Descriptor Command */ ++#define TITAN_GE_TX_BUFFER_OWNED TITAN_BIT5 /* buffer ownership */ ++#define TITAN_GE_TX_ENABLE_INTERRUPT TITAN_BIT15 /* Interrupt Enable */ ++ ++/* Return Status */ ++#define TITAN_OK 0x1 /* Good Status */ ++#define TITAN_ERROR 0x2 /* Error Status */ ++ ++/* MIB specific register offset */ ++#define TITAN_GE_MSTATX_STATS_BASE_LOW 0x0800 /* MSTATX COUNTL[15:0] */ ++#define TITAN_GE_MSTATX_STATS_BASE_MID 0x0804 /* MSTATX COUNTM[15:0] */ ++#define TITAN_GE_MSTATX_STATS_BASE_HI 0x0808 /* MSTATX COUNTH[7:0] */ ++#define TITAN_GE_MSTATX_CONTROL 0x0828 /* MSTATX Control */ ++#define TITAN_GE_MSTATX_VARIABLE_SELECT 0x082C /* MSTATX Variable Select */ ++ ++/* MIB counter offsets, add to the TITAN_GE_MSTATX_STATS_BASE_XXX */ ++#define TITAN_GE_MSTATX_RXFRAMESOK 0x0040 ++#define TITAN_GE_MSTATX_RXOCTETSOK 0x0050 ++#define TITAN_GE_MSTATX_RXFRAMES 0x0060 ++#define TITAN_GE_MSTATX_RXOCTETS 0x0070 ++#define TITAN_GE_MSTATX_RXUNICASTFRAMESOK 0x0080 ++#define TITAN_GE_MSTATX_RXBROADCASTFRAMESOK 0x0090 ++#define TITAN_GE_MSTATX_RXMULTICASTFRAMESOK 0x00A0 ++#define TITAN_GE_MSTATX_RXTAGGEDFRAMESOK 0x00B0 ++#define TITAN_GE_MSTATX_RXMACPAUSECONTROLFRAMESOK 0x00C0 ++#define TITAN_GE_MSTATX_RXMACCONTROLFRAMESOK 0x00D0 ++#define TITAN_GE_MSTATX_RXFCSERROR 0x00E0 ++#define TITAN_GE_MSTATX_RXALIGNMENTERROR 0x00F0 ++#define TITAN_GE_MSTATX_RXSYMBOLERROR 0x0100 ++#define TITAN_GE_MSTATX_RXLAYER1ERROR 0x0110 ++#define TITAN_GE_MSTATX_RXINRANGELENGTHERROR 0x0120 ++#define TITAN_GE_MSTATX_RXLONGLENGTHERROR 0x0130 ++#define TITAN_GE_MSTATX_RXLONGLENGTHCRCERROR 0x0140 ++#define TITAN_GE_MSTATX_RXSHORTLENGTHERROR 0x0150 ++#define TITAN_GE_MSTATX_RXSHORTLLENGTHCRCERROR 0x0160 ++#define TITAN_GE_MSTATX_RXFRAMES64OCTETS 0x0170 ++#define TITAN_GE_MSTATX_RXFRAMES65TO127OCTETS 0x0180 ++#define TITAN_GE_MSTATX_RXFRAMES128TO255OCTETS 0x0190 ++#define TITAN_GE_MSTATX_RXFRAMES256TO511OCTETS 0x01A0 ++#define TITAN_GE_MSTATX_RXFRAMES512TO1023OCTETS 0x01B0 ++#define TITAN_GE_MSTATX_RXFRAMES1024TO1518OCTETS 0x01C0 ++#define TITAN_GE_MSTATX_RXFRAMES1519TOMAXSIZE 0x01D0 ++#define TITAN_GE_MSTATX_RXSTATIONADDRESSFILTERED 0x01E0 ++#define TITAN_GE_MSTATX_RXVARIABLE 0x01F0 ++#define TITAN_GE_MSTATX_GENERICADDRESSFILTERED 0x0200 ++#define TITAN_GE_MSTATX_UNICASTFILTERED 0x0210 ++#define TITAN_GE_MSTATX_MULTICASTFILTERED 0x0220 ++#define TITAN_GE_MSTATX_BROADCASTFILTERED 0x0230 ++#define TITAN_GE_MSTATX_HASHFILTERED 0x0240 ++#define TITAN_GE_MSTATX_TXFRAMESOK 0x0250 ++#define TITAN_GE_MSTATX_TXOCTETSOK 0x0260 ++#define TITAN_GE_MSTATX_TXOCTETS 0x0270 ++#define TITAN_GE_MSTATX_TXTAGGEDFRAMESOK 0x0280 ++#define TITAN_GE_MSTATX_TXMACPAUSECONTROLFRAMESOK 0x0290 ++#define TITAN_GE_MSTATX_TXFCSERROR 0x02A0 ++#define TITAN_GE_MSTATX_TXSHORTLENGTHERROR 0x02B0 ++#define TITAN_GE_MSTATX_TXLONGLENGTHERROR 0x02C0 ++#define TITAN_GE_MSTATX_TXSYSTEMERROR 0x02D0 ++#define TITAN_GE_MSTATX_TXMACERROR 0x02E0 ++#define TITAN_GE_MSTATX_TXCARRIERSENSEERROR 0x02F0 ++#define TITAN_GE_MSTATX_TXSQETESTERROR 0x0300 ++#define TITAN_GE_MSTATX_TXUNICASTFRAMESOK 0x0310 ++#define TITAN_GE_MSTATX_TXBROADCASTFRAMESOK 0x0320 ++#define TITAN_GE_MSTATX_TXMULTICASTFRAMESOK 0x0330 ++#define TITAN_GE_MSTATX_TXUNICASTFRAMESATTEMPTED 0x0340 ++#define TITAN_GE_MSTATX_TXBROADCASTFRAMESATTEMPTED 0x0350 ++#define TITAN_GE_MSTATX_TXMULTICASTFRAMESATTEMPTED 0x0360 ++#define TITAN_GE_MSTATX_TXFRAMES64OCTETS 0x0370 ++#define TITAN_GE_MSTATX_TXFRAMES65TO127OCTETS 0x0380 ++#define TITAN_GE_MSTATX_TXFRAMES128TO255OCTETS 0x0390 ++#define TITAN_GE_MSTATX_TXFRAMES256TO511OCTETS 0x03A0 ++#define TITAN_GE_MSTATX_TXFRAMES512TO1023OCTETS 0x03B0 ++#define TITAN_GE_MSTATX_TXFRAMES1024TO1518OCTETS 0x03C0 ++#define TITAN_GE_MSTATX_TXFRAMES1519TOMAXSIZE 0x03D0 ++#define TITAN_GE_MSTATX_TXVARIABLE 0x03E0 ++#define TITAN_GE_MSTATX_RXSYSTEMERROR 0x03F0 ++#define TITAN_GE_MSTATX_SINGLECOLLISION 0x0400 ++#define TITAN_GE_MSTATX_MULTIPLECOLLISION 0x0410 ++#define TITAN_GE_MSTATX_DEFERREDXMISSIONS 0x0420 ++#define TITAN_GE_MSTATX_LATECOLLISIONS 0x0430 ++#define TITAN_GE_MSTATX_ABORTEDDUETOXSCOLLS 0x0440 ++ ++/* Interrupt specific defines */ ++#define TITAN_GE_DEVICE_ID 0x0000 /* Device ID */ ++#define TITAN_GE_RESET 0x0004 /* Reset reg */ ++#define TITAN_GE_TSB_CTRL_0 0x000C /* TSB Control reg 0 */ ++#define TITAN_GE_TSB_CTRL_1 0x0010 /* TSB Control reg 1 */ ++#define TITAN_GE_INTR_GRP0_STATUS 0x0040 /* General Interrupt Group 0 Status */ ++#define TITAN_GE_INTR_XDMA_CORE_A 0x0048 /* XDMA Channel Interrupt Status, Core A*/ ++#define TITAN_GE_INTR_XDMA_CORE_B 0x004C /* XDMA Channel Interrupt Status, Core B*/ ++#define TITAN_GE_INTR_XDMA_IE 0x0058 /* XDMA Channel Interrupt Enable */ ++#define TITAN_GE_SDQPF_ECC_INTR 0x480C /* SDQPF ECC Interrupt Status */ ++#define TITAN_GE_SDQPF_RXFIFO_CTL 0x4828 /* SDQPF RxFifo Control and Interrupt Enb*/ ++#define TITAN_GE_SDQPF_RXFIFO_INTR 0x482C /* SDQPF RxFifo Interrupt Status */ ++#define TITAN_GE_SDQPF_TXFIFO_CTL 0x4928 /* SDQPF TxFifo Control and Interrupt Enb*/ ++#define TITAN_GE_SDQPF_TXFIFO_INTR 0x492C /* SDQPF TxFifo Interrupt Status */ ++#define TITAN_GE_SDQPF_RXFIFO_0 0x4840 /* SDQPF RxFIFO Enable */ ++#define TITAN_GE_SDQPF_TXFIFO_0 0x4940 /* SDQPF TxFIFO Enable */ ++#define TITAN_GE_XDMA_CONFIG 0x5000 /* XDMA Global Configuration */ ++#define TITAN_GE_XDMA_INTR_SUMMARY 0x5010 /* XDMA Interrupt Summary */ ++#define TITAN_GE_XDMA_BUFADDRPRE 0x5018 /* XDMA Buffer Address Prefix */ ++#define TITAN_GE_XDMA_DESCADDRPRE 0x501C /* XDMA Descriptor Address Prefix */ ++#define TITAN_GE_XDMA_PORTWEIGHT 0x502C /* XDMA Port Weight Configuration */ ++ ++/* Rx MAC defines */ ++#define TITAN_GE_RMAC_CONFIG_1 0x1200 /* RMAC Configuration 1 */ ++#define TITAN_GE_RMAC_CONFIG_2 0x1204 /* RMAC Configuration 2 */ ++#define TITAN_GE_RMAC_MAX_FRAME_LEN 0x1208 /* RMAC Max Frame Length */ ++#define TITAN_GE_RMAC_STATION_HI 0x120C /* Rx Station Address High */ ++#define TITAN_GE_RMAC_STATION_MID 0x1210 /* Rx Station Address Middle */ ++#define TITAN_GE_RMAC_STATION_LOW 0x1214 /* Rx Station Address Low */ ++#define TITAN_GE_RMAC_LINK_CONFIG 0x1218 /* RMAC Link Configuration */ ++ ++/* Tx MAC defines */ ++#define TITAN_GE_TMAC_CONFIG_1 0x1240 /* TMAC Configuration 1 */ ++#define TITAN_GE_TMAC_CONFIG_2 0x1244 /* TMAC Configuration 2 */ ++#define TITAN_GE_TMAC_IPG 0x1248 /* TMAC Inter-Packet Gap */ ++#define TITAN_GE_TMAC_STATION_HI 0x124C /* Tx Station Address High */ ++#define TITAN_GE_TMAC_STATION_MID 0x1250 /* Tx Station Address Middle */ ++#define TITAN_GE_TMAC_STATION_LOW 0x1254 /* Tx Station Address Low */ ++#define TITAN_GE_TMAC_MAX_FRAME_LEN 0x1258 /* TMAC Max Frame Length */ ++#define TITAN_GE_TMAC_MIN_FRAME_LEN 0x125C /* TMAC Min Frame Length */ ++#define TITAN_GE_TMAC_PAUSE_FRAME_TIME 0x1260 /* TMAC Pause Frame Time */ ++#define TITAN_GE_TMAC_PAUSE_FRAME_INTERVAL 0x1264 /* TMAC Pause Frame Interval */ ++ ++/* GMII register */ ++#define TITAN_GE_GMII_INTERRUPT_STATUS 0x1348 /* GMII Interrupt Status */ ++#define TITAN_GE_GMII_CONFIG_GENERAL 0x134C /* GMII Configuration General */ ++#define TITAN_GE_GMII_CONFIG_MODE 0x1350 /* GMII Configuration Mode */ ++ ++/* Tx and Rx XDMA defines */ ++#define TITAN_GE_INT_COALESCING 0x5030 /* Interrupt Coalescing */ ++#define TITAN_GE_CHANNEL0_CONFIG 0x5040 /* Channel 0 XDMA config */ ++#define TITAN_GE_CHANNEL0_INTERRUPT 0x504c /* Channel 0 Interrupt Status */ ++#define TITAN_GE_GDI_INTERRUPT_ENABLE 0x5050 /* IE for the GDI Errors */ ++#define TITAN_GE_CHANNEL0_PACKET 0x5060 /* Channel 0 Packet count */ ++#define TITAN_GE_CHANNEL0_BYTE 0x5064 /* Channel 0 Byte count */ ++#define TITAN_GE_CHANNEL0_TX_DESC 0x5054 /* Channel 0 Tx first desc */ ++#define TITAN_GE_CHANNEL0_RX_DESC 0x5058 /* Channel 0 Rx first desc */ ++ ++/* AFX (Address Filter Exact) register offsets for Slice 0 */ ++#define TITAN_GE_AFX_EXACT_MATCH_LOW 0x1100 /* AFX Exact Match Address Low*/ ++#define TITAN_GE_AFX_EXACT_MATCH_MID 0x1104 /* AFX Exact Match Address Mid*/ ++#define TITAN_GE_AFX_EXACT_MATCH_HIGH 0x1108 /* AFX Exact Match Address Hi */ ++#define TITAN_GE_AFX_EXACT_MATCH_VID 0x110C /* AFX Exact Match VID */ ++#define TITAN_GE_AFX_MULTICAST_HASH_LOW 0x1110 /* AFX Multicast HASH Low */ ++#define TITAN_GE_AFX_MULTICAST_HASH_MIDLOW 0x1114 /* AFX Multicast HASH MidLow */ ++#define TITAN_GE_AFX_MULTICAST_HASH_MIDHI 0x1118 /* AFX Multicast HASH MidHi */ ++#define TITAN_GE_AFX_MULTICAST_HASH_HI 0x111C /* AFX Multicast HASH Hi */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 0x1120 /* AFX Address Filter Ctrl 0 */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 0x1124 /* AFX Address Filter Ctrl 1 */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 0x1128 /* AFX Address Filter Ctrl 2 */ ++ ++/* Traffic Groomer block */ ++#define TITAN_GE_TRTG_CONFIG 0x1000 /* TRTG Config */ ++ ++#endif /* _TITAN_GE_H_ */ ++ +diff --git a/drivers/net/titan_mdio.c b/drivers/net/titan_mdio.c +new file mode 100644 +index 0000000..8a8785b +--- /dev/null ++++ b/drivers/net/titan_mdio.c +@@ -0,0 +1,217 @@ ++/* ++ * drivers/net/titan_mdio.c - Driver for Titan ethernet ports ++ * ++ * Copyright (C) 2003 PMC-Sierra Inc. ++ * Author : Manish Lachwani (lachwani@pmc-sierra.com) ++ * ++ * 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. ++ * ++ * Management Data IO (MDIO) driver for the Titan GMII. Interacts with the Marvel PHY ++ * on the Titan. No support for the TBI as yet. ++ * ++ */ ++ ++#include "titan_mdio.h" ++ ++#define MDIO_DEBUG ++ ++/* ++ * Local constants ++ */ ++#define MAX_CLKA 1023 ++#define MAX_PHY_DEV 31 ++#define MAX_PHY_REG 31 ++#define WRITEADDRS_OPCODE 0x0 ++#define READ_OPCODE 0x2 ++#define WRITE_OPCODE 0x1 ++#define MAX_MDIO_POLL 100 ++ ++/* ++ * Titan MDIO and SCMB registers ++ */ ++#define TITAN_GE_SCMB_CONTROL 0x01c0 /* SCMB Control */ ++#define TITAN_GE_SCMB_CLKA 0x01c4 /* SCMB Clock A */ ++#define TITAN_GE_MDIO_COMMAND 0x01d0 /* MDIO Command */ ++#define TITAN_GE_MDIO_DEVICE_PORT_ADDRESS 0x01d4 /* MDIO Device and Port addrs */ ++#define TITAN_GE_MDIO_DATA 0x01d8 /* MDIO Data */ ++#define TITAN_GE_MDIO_INTERRUPTS 0x01dC /* MDIO Interrupts */ ++ ++/* ++ * Function to poll the MDIO ++ */ ++static int titan_ge_mdio_poll(void) ++{ ++ int i, val; ++ ++ for (i = 0; i < MAX_MDIO_POLL; i++) { ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ ++ if (!(val & 0x8000)) ++ return TITAN_GE_MDIO_GOOD; ++ } ++ ++ return TITAN_GE_MDIO_ERROR; ++} ++ ++ ++/* ++ * Initialize and configure the MDIO ++ */ ++int titan_ge_mdio_setup(titan_ge_mdio_config *titan_mdio) ++{ ++ unsigned long val; ++ ++ /* Reset the SCMB and program into MDIO mode*/ ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x9000); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x1000); ++ ++ /* CLK A */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_SCMB_CLKA); ++ val = ( (val & ~(0x03ff)) | (titan_mdio->clka & 0x03ff)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CLKA, val); ++ ++ /* Preamble Suppresion */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0001)) | (titan_mdio->mdio_spre & 0x0001)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ /* MDIO mode */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x4000)) | (titan_mdio->mdio_mode & 0x4000)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Set the PHY address in indirect mode ++ */ ++int titan_ge_mdio_inaddrs(int dev_addr, int reg_addr) ++{ ++ volatile unsigned long val; ++ ++ /* Setup the PHY device */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ /* Write the new address */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (WRITEADDRS_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Read the MDIO register. This is what the individual parametes mean: ++ * ++ * dev_addr : PHY ID ++ * reg_addr : register offset ++ * ++ * See the spec for the Titan MAC. We operate in the Direct Mode. ++ */ ++ ++#define MAX_RETRIES 2 ++ ++int titan_ge_mdio_read(int dev_addr, int reg_addr, unsigned int *pdata) ++{ ++ volatile unsigned long val; ++ int retries = 0; ++ ++ /* Setup the PHY device */ ++ ++again: ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ val |= 0x4000; ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ udelay(30); ++ ++ /* Issue the read command */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (READ_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ udelay(30); ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ *pdata = (unsigned int)TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DATA); ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS); ++ ++ udelay(30); ++ ++ if (val & 0x2) { ++ if (retries == MAX_RETRIES) ++ return TITAN_GE_MDIO_ERROR; ++ else { ++ retries++; ++ goto again; ++ } ++ } ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Write to the MDIO register ++ * ++ * dev_addr : PHY ID ++ * reg_addr : register that needs to be written to ++ * ++ */ ++int titan_ge_mdio_write(int dev_addr, int reg_addr, unsigned int data) ++{ ++ volatile unsigned long val; ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ /* Setup the PHY device */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ val |= 0x4000; ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ udelay(30); ++ ++ /* Setup the data to write */ ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DATA, data); ++ ++ udelay(30); ++ ++ /* Issue the write command */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (WRITE_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ udelay(30); ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS); ++ if (val & 0x2) ++ return TITAN_GE_MDIO_ERROR; ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ +diff --git a/drivers/net/titan_mdio.h b/drivers/net/titan_mdio.h +new file mode 100644 +index 0000000..5d23344 +--- /dev/null ++++ b/drivers/net/titan_mdio.h +@@ -0,0 +1,56 @@ ++/* ++ * MDIO used to interact with the PHY when using GMII/MII ++ */ ++#ifndef _TITAN_MDIO_H ++#define _TITAN_MDIO_H ++ ++#include ++#include ++#include ++#include "titan_ge.h" ++ ++ ++#define TITAN_GE_MDIO_ERROR (-9000) ++#define TITAN_GE_MDIO_GOOD 0 ++ ++#define TITAN_GE_MDIO_BASE titan_ge_base ++ ++#define TITAN_GE_MDIO_READ(offset) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) ++ ++#define TITAN_GE_MDIO_WRITE(offset, data) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) = (data) ++ ++ ++/* GMII specific registers */ ++#define TITAN_GE_MARVEL_PHY_ID 0x00 ++#define TITAN_PHY_AUTONEG_ADV 0x04 ++#define TITAN_PHY_LP_ABILITY 0x05 ++#define TITAN_GE_MDIO_MII_CTRL 0x09 ++#define TITAN_GE_MDIO_MII_EXTENDED 0x0f ++#define TITAN_GE_MDIO_PHY_CTRL 0x10 ++#define TITAN_GE_MDIO_PHY_STATUS 0x11 ++#define TITAN_GE_MDIO_PHY_IE 0x12 ++#define TITAN_GE_MDIO_PHY_IS 0x13 ++#define TITAN_GE_MDIO_PHY_LED 0x18 ++#define TITAN_GE_MDIO_PHY_LED_OVER 0x19 ++#define PHY_ANEG_TIME_WAIT 45 /* 45 seconds wait time */ ++ ++/* ++ * MDIO Config Structure ++ */ ++typedef struct { ++ unsigned int clka; ++ int mdio_spre; ++ int mdio_mode; ++} titan_ge_mdio_config; ++ ++/* ++ * Function Prototypes ++ */ ++int titan_ge_mdio_setup(titan_ge_mdio_config *); ++int titan_ge_mdio_inaddrs(int, int); ++int titan_ge_mdio_read(int, int, unsigned int *); ++int titan_ge_mdio_write(int, int, unsigned int); ++ ++#endif /* _TITAN_MDIO_H */ +diff --git a/drivers/net/wireless/rtl818x/rtl8187/rfkill.c b/drivers/net/wireless/rtl818x/rtl8187/rfkill.c +index 3411671..4d252c1 100644 +--- a/drivers/net/wireless/rtl818x/rtl8187/rfkill.c ++++ b/drivers/net/wireless/rtl818x/rtl8187/rfkill.c +@@ -22,6 +22,10 @@ + + static bool rtl8187_is_radio_enabled(struct rtl8187_priv *priv) + { ++#ifdef CONFIG_LEMOTE_MACH2F ++ /* Allow users to activate rfkill through only the /sys interface */ ++ return 1; ++#else + u8 gpio; + + gpio = rtl818x_ioread8(priv, &priv->map->GPIO0); +@@ -29,6 +33,7 @@ static bool rtl8187_is_radio_enabled(struct rtl8187_priv *priv) + gpio = rtl818x_ioread8(priv, &priv->map->GPIO1); + + return gpio & priv->rfkill_mask; ++#endif + } + + void rtl8187_rfkill_init(struct ieee80211_hw *hw) +diff --git a/drivers/platform/Kconfig b/drivers/platform/Kconfig +index 09fde58..eacabd1 100644 +--- a/drivers/platform/Kconfig ++++ b/drivers/platform/Kconfig +@@ -4,5 +4,8 @@ endif + if GOLDFISH + source "drivers/platform/goldfish/Kconfig" + endif ++if MIPS ++source "drivers/platform/mips/Kconfig" ++endif + + source "drivers/platform/chrome/Kconfig" +diff --git a/drivers/platform/Makefile b/drivers/platform/Makefile +index 3656b7b..ca26925 100644 +--- a/drivers/platform/Makefile ++++ b/drivers/platform/Makefile +@@ -3,6 +3,7 @@ + # + + obj-$(CONFIG_X86) += x86/ ++obj-$(CONFIG_MIPS) += mips/ + obj-$(CONFIG_OLPC) += olpc/ + obj-$(CONFIG_GOLDFISH) += goldfish/ + obj-$(CONFIG_CHROME_PLATFORMS) += chrome/ +diff --git a/drivers/platform/mips/Kconfig b/drivers/platform/mips/Kconfig +new file mode 100644 +index 0000000..722d690 +--- /dev/null ++++ b/drivers/platform/mips/Kconfig +@@ -0,0 +1,60 @@ ++# ++# MIPS Platform Specific Drivers ++# ++ ++menuconfig MIPS_PLATFORM_DEVICES ++ bool "MIPS Platform Specific Device Drivers" ++ default y ++ help ++ Say Y here to get to see options for device drivers of various ++ MIPS platforms, including vendor-specific netbook/laptop/pc extension ++ drivers. This option alone does not add any kernel code. ++ ++ If you say N, all options in this submenu will be skipped and disabled. ++ ++if MIPS_PLATFORM_DEVICES ++ ++config LEMOTE_YEELOONG2F ++ tristate "Lemote YeeLoong Laptop" ++ depends on LEMOTE_MACH2F ++ select BACKLIGHT_LCD_SUPPORT ++ select LCD_CLASS_DEVICE ++ select BACKLIGHT_CLASS_DEVICE ++ select POWER_SUPPLY ++ select HWMON ++ select VIDEO_OUTPUT_CONTROL ++ select INPUT_SPARSEKMAP ++ select INPUT_EVDEV ++ depends on INPUT ++ default m ++ help ++ YeeLoong netbook is a mini laptop made by Lemote, which is basically ++ compatible to FuLoong2F mini PC, but it has an extra Embedded ++ Controller(kb3310b) for battery, hotkey, backlight, temperature and ++ fan management. ++ ++config LEMOTE_LYNLOONG2F ++ tristate "Lemote LynLoong PC" ++ depends on LEMOTE_MACH2F ++ select BACKLIGHT_LCD_SUPPORT ++ select BACKLIGHT_CLASS_DEVICE ++ select VIDEO_OUTPUT_CONTROL ++ default m ++ help ++ LynLoong PC is an AllINONE machine made by Lemote, which is basically ++ compatible to FuLoong2F Mini PC, the only difference is that it has a ++ size-fixed screen: 1360x768 with sisfb video driver. and also, it has ++ its own specific suspend support. ++ ++config GDIUM_LAPTOP ++ tristate "GDIUM laptop extras" ++ depends on DEXXON_GDIUM ++ select POWER_SUPPLY ++ select I2C ++ select INPUT_POLLDEV ++ default m ++ help ++ This mini-driver drives the ST7 chipset present in the Gdium laptops. ++ This gives battery support, wlan rfkill. ++ ++endif # MIPS_PLATFORM_DEVICES +diff --git a/drivers/platform/mips/Makefile b/drivers/platform/mips/Makefile +new file mode 100644 +index 0000000..f013e78 +--- /dev/null ++++ b/drivers/platform/mips/Makefile +@@ -0,0 +1,9 @@ ++# ++# Makefile for MIPS Platform-Specific Drivers ++# ++ ++obj-$(CONFIG_LEMOTE_YEELOONG2F) += yeeloong_laptop.o # yeeloong_ecrom.o ++CFLAGS_yeeloong_laptop.o = -I$(srctree)/arch/mips/loongson/lemote-2f ++ ++obj-$(CONFIG_LEMOTE_LYNLOONG2F) += lynloong_pc.o ++obj-$(CONFIG_GDIUM_LAPTOP) += gdium_laptop.o +diff --git a/drivers/platform/mips/gdium_laptop.c b/drivers/platform/mips/gdium_laptop.c +new file mode 100644 +index 0000000..41a65ad +--- /dev/null ++++ b/drivers/platform/mips/gdium_laptop.c +@@ -0,0 +1,927 @@ ++/* ++ * gdium_laptop -- Gdium laptop extras ++ * ++ * Arnaud Patard ++ * ++ * 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. ++ * ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* For input device */ ++#define SCAN_INTERVAL 150 ++ ++/* For battery status */ ++#define BAT_SCAN_INTERVAL 500 ++ ++#define EC_FIRM_VERSION 0 ++ ++#if CONFIG_GDIUM_VERSION > 2 ++#define EC_REG_BASE 1 ++#else ++#define EC_REG_BASE 0 ++#endif ++ ++#define EC_STATUS (EC_REG_BASE+0) ++#define EC_STATUS_LID (1<<0) ++#define EC_STATUS_PWRBUT (1<<1) ++#define EC_STATUS_BATID (1<<2) /* this bit has no real meaning on v2. */ ++ /* Same as EC_STATUS_ADAPT */ ++ /* but on v3 it's BATID which mean bat present */ ++#define EC_STATUS_SYS_POWER (1<<3) ++#define EC_STATUS_WLAN (1<<4) ++#define EC_STATUS_ADAPT (1<<5) ++ ++#define EC_CTRL (EC_REG_BASE+1) ++#define EC_CTRL_DDR_CLK (1<<0) ++#define EC_CTRL_CHARGE_LED (1<<1) ++#define EC_CTRL_BEEP (1<<2) ++#define EC_CTRL_SUSB (1<<3) /* memory power */ ++#define EC_CTRL_TRICKLE (1<<4) ++#define EC_CTRL_WLAN_EN (1<<5) ++#define EC_CTRL_SUSC (1<<6) /* main power */ ++#define EC_CTRL_CHARGE_EN (1<<7) ++ ++#define EC_BAT_LOW (EC_REG_BASE+2) ++#define EC_BAT_HIGH (EC_REG_BASE+3) ++ ++#define EC_SIGN (EC_REG_BASE+4) ++#define EC_SIGN_OS 0xAE /* write 0xae to control pm stuff */ ++#define EC_SIGN_EC 0x00 /* write 0x00 to let the st7 manage pm stuff */ ++ ++#if 0 ++#define EC_TEST (EC_REG_BASE+5) /* Depending on firmware version this register */ ++ /* may be the programmation register so don't play */ ++ /* with it */ ++#endif ++ ++#define BAT_VOLT_PRESENT 500000 /* Min voltage to consider battery present uV */ ++#define BAT_MIN 7000000 /* Min battery voltage in uV */ ++#define BAT_MIN_MV 7000 /* Min battery voltage in mV */ ++#define BAT_TRICKLE_EN 8000000 /* Charging at 1.4A before 8.0V and then charging at 0.25A */ ++#define BAT_MAX 7950000 /* Max battery voltage ~8V in V */ ++#define BAT_MAX_MV 7950 /* Max battery voltage ~8V in V */ ++#define BAT_READ_ERROR 300000 /* battery read error of 0.3V */ ++#define BAT_READ_ERROR_MV 300 /* battery read error of 0.3V */ ++ ++#define SM502_WLAN_ON (224+16)/* SM502 GPIO16 may be used on gdium v2 (v3?) as wlan_on */ ++ /* when R422 is connected */ ++ ++static unsigned char verbose; ++static unsigned char gpio16; ++static unsigned char ec; ++module_param(verbose, byte, S_IRUGO | S_IWUSR); ++MODULE_PARM_DESC(verbose, "Add some debugging messages"); ++module_param(gpio16, byte, S_IRUGO); ++MODULE_PARM_DESC(gpio16, "Enable wlan_on signal on SM502"); ++module_param(ec, byte, S_IRUGO); ++MODULE_PARM_DESC(ec, "Let the ST7 handle the battery (default OS)"); ++ ++struct gdium_laptop_data { ++ struct i2c_client *client; ++ struct input_polled_dev *input_polldev; ++ struct dentry *debugfs; ++ struct mutex mutex; ++ struct platform_device *bat_pdev; ++ struct power_supply gdium_ac; ++ struct power_supply gdium_battery; ++ struct workqueue_struct *workqueue; ++ struct delayed_work work; ++ char charge_cmd; ++ /* important registers value */ ++ char status; ++ char ctrl; ++ /* mV */ ++ int battery_level; ++ char version; ++}; ++ ++/**********************************************************************/ ++/* Low level I2C functions */ ++/* All are supposed to be called with mutex held */ ++/**********************************************************************/ ++/* ++ * Return battery voltage in mV ++ * >= 0 battery voltage ++ * < 0 error ++ */ ++static s32 ec_read_battery(struct i2c_client *client) ++{ ++ unsigned char bat_low, bat_high; ++ s32 data; ++ unsigned int ret; ++ ++ /* ++ * a = battery high ++ * b = battery low ++ * bat = a << 2 | b & 0x03; ++ * battery voltage = (bat / 1024) * 5 * 2 ++ */ ++ data = i2c_smbus_read_byte_data(client, EC_BAT_LOW); ++ if (data < 0) { ++ dev_err(&client->dev, "ec_read_bat: read bat_low failed\n"); ++ return data; ++ } ++ bat_low = data & 0xff; ++ if (verbose) ++ dev_info(&client->dev, "bat_low %x\n", bat_low); ++ ++ data = i2c_smbus_read_byte_data(client, EC_BAT_HIGH); ++ if (data < 0) { ++ dev_err(&client->dev, "ec_read_bat: read bat_high failed\n"); ++ return data; ++ } ++ bat_high = data & 0xff; ++ if (verbose) ++ dev_info(&client->dev, "bat_high %x\n", bat_high); ++ ++ ret = (bat_high << 2) | (bat_low & 3); ++ /* ++ * mV ++ */ ++ ret = (ret * 5 * 2) * 1000 / 1024; ++ ++ return ret; ++} ++ ++static s32 ec_read_version(struct i2c_client *client) ++{ ++#if CONFIG_GDIUM_VERSION > 2 ++ return i2c_smbus_read_byte_data(client, EC_FIRM_VERSION); ++#else ++ return 0; ++#endif ++} ++ ++static s32 ec_read_status(struct i2c_client *client) ++{ ++ return i2c_smbus_read_byte_data(client, EC_STATUS); ++} ++ ++static s32 ec_read_ctrl(struct i2c_client *client) ++{ ++ return i2c_smbus_read_byte_data(client, EC_CTRL); ++} ++ ++static s32 ec_write_ctrl(struct i2c_client *client, unsigned char newvalue) ++{ ++ return i2c_smbus_write_byte_data(client, EC_CTRL, newvalue); ++} ++ ++static s32 ec_read_sign(struct i2c_client *client) ++{ ++ return i2c_smbus_read_byte_data(client, EC_SIGN); ++} ++ ++static s32 ec_write_sign(struct i2c_client *client, unsigned char sign) ++{ ++ unsigned char value; ++ s32 ret; ++ ++ ret = i2c_smbus_write_byte_data(client, EC_SIGN, sign); ++ if (ret < 0) { ++ dev_err(&client->dev, "ec_set_control: write failed\n"); ++ return ret; ++ } ++ ++ value = ec_read_sign(client); ++ if (value != sign) { ++ dev_err(&client->dev, "Failed to set control to %s\n", ++ sign == EC_SIGN_OS ? "OS" : "EC"); ++ return -EIO; ++ } ++ ++ return 0; ++} ++ ++#if 0 ++static int ec_power_off(struct i2c_client *client) ++{ ++ char value; ++ int ret; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) { ++ dev_err(&client->dev, "ec_power_off: read failed\n"); ++ return value; ++ } ++ value &= ~(EC_CTRL_SUSB | EC_CTRL_SUSC); ++ ret = ec_write_ctrl(client, value); ++ if (ret < 0) { ++ dev_err(&client->dev, "ec_power_off: write failed\n"); ++ return ret; ++ } ++ ++ return 0; ++} ++#endif ++ ++static s32 ec_wlan_status(struct i2c_client *client) ++{ ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ return (value & EC_CTRL_WLAN_EN) ? 1 : 0; ++} ++ ++static s32 ec_wlan_en(struct i2c_client *client, int on) ++{ ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ value &= ~EC_CTRL_WLAN_EN; ++ if (on) ++ value |= EC_CTRL_WLAN_EN; ++ ++ return ec_write_ctrl(client, value&0xff); ++} ++ ++#if 0 ++static s32 ec_led_status(struct i2c_client *client) ++{ ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ return (value & EC_CTRL_CHARGE_LED) ? 1 : 0; ++} ++#endif ++ ++/* Changing the charging led status has never worked */ ++static s32 ec_led_en(struct i2c_client *client, int on) ++{ ++#if 0 ++ s32 value; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ value &= ~EC_CTRL_CHARGE_LED; ++ if (on) ++ value |= EC_CTRL_CHARGE_LED; ++ return ec_write_ctrl(client, value&0xff); ++#else ++ return 0; ++#endif ++} ++ ++static s32 ec_charge_en(struct i2c_client *client, int on, int trickle) ++{ ++ s32 value; ++ s32 set = 0; ++ ++ value = ec_read_ctrl(client); ++ if (value < 0) ++ return value; ++ ++ if (on) ++ set |= EC_CTRL_CHARGE_EN; ++ if (trickle) ++ set |= EC_CTRL_TRICKLE; ++ ++ /* Be clever : don't change values if you don't need to */ ++ if ((value & (EC_CTRL_CHARGE_EN | EC_CTRL_TRICKLE)) == set) ++ return 0; ++ ++ value &= ~(EC_CTRL_CHARGE_EN | EC_CTRL_TRICKLE); ++ value |= set; ++ ec_led_en(client, on); ++ return ec_write_ctrl(client, (unsigned char)(value&0xff)); ++ ++} ++ ++/**********************************************************************/ ++/* Input functions */ ++/**********************************************************************/ ++struct gdium_keys { ++ int last_state; ++ int key_code; ++ int mask; ++ int type; ++}; ++ ++static struct gdium_keys gkeys[] = { ++ { ++ .key_code = KEY_WLAN, ++ .mask = EC_STATUS_WLAN, ++ .type = EV_KEY, ++ }, ++ { ++ .key_code = KEY_POWER, ++ .mask = EC_STATUS_PWRBUT, ++ .type = EV_KEY, /*EV_PWR,*/ ++ }, ++ { ++ .key_code = SW_LID, ++ .mask = EC_STATUS_LID, ++ .type = EV_SW, ++ }, ++}; ++ ++static void gdium_laptop_keys_poll(struct input_polled_dev *dev) ++{ ++ int state, i; ++ struct gdium_laptop_data *data = dev->private; ++ struct i2c_client *client = data->client; ++ struct input_dev *input = dev->input; ++ s32 status; ++ ++ mutex_lock(&data->mutex); ++ status = ec_read_status(client); ++ mutex_unlock(&data->mutex); ++ ++ if (status < 0) { ++ /* ++ * Don't know exactly which version of the firmware ++ * has this bug but when the power button is pressed ++ * there are i2c read errors :( ++ */ ++ if ((data->version >= 0x13) && !gkeys[1].last_state) { ++ input_event(input, EV_KEY, KEY_POWER, 1); ++ input_sync(input); ++ gkeys[1].last_state = 1; ++ } ++ return; ++ } ++ ++ for (i = 0; i < ARRAY_SIZE(gkeys); i++) { ++ state = status & gkeys[i].mask; ++ if (state != gkeys[i].last_state) { ++ gkeys[i].last_state = state; ++ /* for power key, we want power & key press/release event */ ++ if (gkeys[i].type == EV_PWR) { ++ input_event(input, EV_KEY, gkeys[i].key_code, !!state); ++ input_sync(input); ++ } ++ /* Disable wifi on key press but not key release */ ++ /* ++ * On firmware >= 0x13 the EC_STATUS_WLAN has it's ++ * original meaning of Wifi status and no more the ++ * wifi button status so we have to ignore the event ++ * on theses versions ++ */ ++ if (state && (gkeys[i].key_code == KEY_WLAN) && (data->version < 0x13)) { ++ mutex_lock(&data->mutex); ++ ec_wlan_en(client, !ec_wlan_status(client)); ++ if (gpio16) ++ gpio_set_value(SM502_WLAN_ON, !ec_wlan_status(client)); ++ mutex_unlock(&data->mutex); ++ } ++ ++ input_event(input, gkeys[i].type, gkeys[i].key_code, !!state); ++ input_sync(input); ++ } ++ } ++} ++ ++static int gdium_laptop_input_init(struct gdium_laptop_data *data) ++{ ++ struct i2c_client *client = data->client; ++ struct input_dev *input; ++ int ret, i; ++ ++ data->input_polldev = input_allocate_polled_device(); ++ if (!data->input_polldev) { ++ ret = -ENOMEM; ++ goto err; ++ } ++ ++ input = data->input_polldev->input; ++ input->evbit[0] = BIT(EV_KEY) | BIT_MASK(EV_PWR) | BIT_MASK(EV_SW); ++ data->input_polldev->poll = gdium_laptop_keys_poll; ++ data->input_polldev->poll_interval = SCAN_INTERVAL; ++ data->input_polldev->private = data; ++ input->name = "gdium-keys"; ++ input->dev.parent = &client->dev; ++ ++ input->id.bustype = BUS_HOST; ++ input->id.vendor = 0x0001; ++ input->id.product = 0x0001; ++ input->id.version = 0x0100; ++ ++ for (i = 0; i < ARRAY_SIZE(gkeys); i++) ++ input_set_capability(input, gkeys[i].type, gkeys[i].key_code); ++ ++ ret = input_register_polled_device(data->input_polldev); ++ if (ret) { ++ dev_err(&client->dev, "Unable to register button device\n"); ++ goto err_poll_dev; ++ } ++ ++ return 0; ++ ++err_poll_dev: ++ input_free_polled_device(data->input_polldev); ++err: ++ return ret; ++} ++ ++static void gdium_laptop_input_exit(struct gdium_laptop_data *data) ++{ ++ input_unregister_polled_device(data->input_polldev); ++ input_free_polled_device(data->input_polldev); ++} ++ ++/**********************************************************************/ ++/* Battery management */ ++/**********************************************************************/ ++static int gdium_ac_get_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ char status; ++ struct gdium_laptop_data *data = container_of(psy, struct gdium_laptop_data, gdium_ac); ++ int ret = 0; ++ ++ if (!data) { ++ pr_err("gdium-ac: gdium_laptop_data not found\n"); ++ return -EINVAL; ++ } ++ ++ status = data->status; ++ switch (psp) { ++ case POWER_SUPPLY_PROP_ONLINE: ++ val->intval = !!(status & EC_STATUS_ADAPT); ++ break; ++ default: ++ ret = -EINVAL; ++ break; ++ } ++ ++ return ret; ++} ++ ++#undef RET ++#define RET (val->intval) ++ ++static int gdium_battery_get_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ char status, ctrl; ++ struct gdium_laptop_data *data = container_of(psy, struct gdium_laptop_data, gdium_battery); ++ int percentage_capacity = 0, charge_now = 0, time_to_empty = 0; ++ int ret = 0, tmp; ++ ++ if (!data) { ++ pr_err("gdium-battery: gdium_laptop_data not found\n"); ++ return -EINVAL; ++ } ++ ++ status = data->status; ++ ctrl = data->ctrl; ++ switch (psp) { ++ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: ++ /* uAh */ ++ RET = 5000000; ++ break; ++ case POWER_SUPPLY_PROP_CURRENT_NOW: ++ case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW: ++ /* This formula is gotten by gnuplot with the statistic data */ ++ time_to_empty = (data->battery_level - BAT_MIN_MV + BAT_READ_ERROR_MV) * 113 - 29870; ++ if (psp == POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW) { ++ /* seconds */ ++ RET = time_to_empty / 10; ++ break; ++ } ++ /* fall through */ ++ case POWER_SUPPLY_PROP_CHARGE_NOW: ++ case POWER_SUPPLY_PROP_CAPACITY: { ++ tmp = data->battery_level * 1000; ++ /* > BAT_MIN to avoid negative values */ ++ percentage_capacity = 0; ++ if ((status & EC_STATUS_BATID) && (tmp > BAT_MIN)) ++ percentage_capacity = (tmp-BAT_MIN)*100/(BAT_MAX-BAT_MIN); ++ ++ if (percentage_capacity > 100) ++ percentage_capacity = 100; ++ ++ if (psp == POWER_SUPPLY_PROP_CAPACITY) { ++ RET = percentage_capacity; ++ break; ++ } ++ charge_now = 50000 * percentage_capacity; ++ if (psp == POWER_SUPPLY_PROP_CHARGE_NOW) { ++ /* uAh */ ++ RET = charge_now; ++ break; ++ } ++ } /* fall through */ ++ case POWER_SUPPLY_PROP_STATUS: { ++ if (status & EC_STATUS_ADAPT) ++ if (ctrl & EC_CTRL_CHARGE_EN) ++ RET = POWER_SUPPLY_STATUS_CHARGING; ++ else ++ RET = POWER_SUPPLY_STATUS_NOT_CHARGING; ++ else ++ RET = POWER_SUPPLY_STATUS_DISCHARGING; ++ ++ if (psp == POWER_SUPPLY_PROP_STATUS) ++ break; ++ /* mAh -> µA */ ++ switch (RET) { ++ case POWER_SUPPLY_STATUS_CHARGING: ++ RET = -(data->charge_cmd == 2) ? 1400000 : 250000; ++ break; ++ case POWER_SUPPLY_STATUS_DISCHARGING: ++ RET = charge_now / time_to_empty * 36000; ++ break; ++ case POWER_SUPPLY_STATUS_NOT_CHARGING: ++ default: ++ RET = 0; ++ break; ++ } ++ } break; ++ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: ++ RET = BAT_MAX+BAT_READ_ERROR; ++ break; ++ case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: ++ RET = BAT_MIN-BAT_READ_ERROR; ++ break; ++ case POWER_SUPPLY_PROP_VOLTAGE_NOW: ++ /* mV -> uV */ ++ RET = data->battery_level * 1000; ++ break; ++ case POWER_SUPPLY_PROP_PRESENT: ++#if CONFIG_GDIUM_VERSION > 2 ++ RET = !!(status & EC_STATUS_BATID); ++#else ++ RET = !!(data->battery_level > BAT_VOLT_PRESENT); ++#endif ++ break; ++ case POWER_SUPPLY_PROP_CAPACITY_LEVEL: ++ tmp = data->battery_level * 1000; ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; ++ if (status & EC_STATUS_BATID) { ++ if (tmp >= BAT_MAX) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_HIGH; ++ if (tmp >= BAT_MAX+BAT_READ_ERROR) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_FULL; ++ } else if (tmp <= BAT_MIN+BAT_READ_ERROR) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_LOW; ++ if (tmp <= BAT_MIN) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; ++ } else ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; ++ } ++ break; ++ case POWER_SUPPLY_PROP_CHARGE_TYPE: ++ if (ctrl & EC_CTRL_TRICKLE) ++ RET = POWER_SUPPLY_CHARGE_TYPE_TRICKLE; ++ else if (ctrl & EC_CTRL_CHARGE_EN) ++ RET = POWER_SUPPLY_CHARGE_TYPE_FAST; ++ else ++ RET = POWER_SUPPLY_CHARGE_TYPE_NONE; ++ break; ++ case POWER_SUPPLY_PROP_CURRENT_MAX: ++ /* 1.4A ? */ ++ RET = 1400000; ++ break; ++ default: ++ break; ++ } ++ ++ return ret; ++} ++#undef RET ++ ++static enum power_supply_property gdium_ac_props[] = { ++ POWER_SUPPLY_PROP_ONLINE, ++}; ++ ++static enum power_supply_property gdium_battery_props[] = { ++ POWER_SUPPLY_PROP_STATUS, ++ POWER_SUPPLY_PROP_PRESENT, ++ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_NOW, ++ POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, ++ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, ++ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, ++ POWER_SUPPLY_PROP_VOLTAGE_NOW, ++ POWER_SUPPLY_PROP_CURRENT_MAX, ++ POWER_SUPPLY_PROP_CURRENT_NOW, ++ POWER_SUPPLY_PROP_CAPACITY, ++ POWER_SUPPLY_PROP_CAPACITY_LEVEL, ++ POWER_SUPPLY_PROP_CHARGE_TYPE, ++}; ++ ++static void gdium_laptop_battery_work(struct work_struct *work) ++{ ++ struct gdium_laptop_data *data = container_of(work, struct gdium_laptop_data, work.work); ++ struct i2c_client *client; ++ int ret; ++ char old_status, old_charge_cmd; ++ char present; ++ s32 status; ++ ++ mutex_lock(&data->mutex); ++ client = data->client; ++ status = ec_read_status(client); ++ ret = ec_read_battery(client); ++ ++ if ((status < 0) || (ret < 0)) ++ goto i2c_read_error; ++ ++ old_status = data->status; ++ old_charge_cmd = data->charge_cmd; ++ data->status = status; ++ ++ /* ++ * Charge only if : ++ * - battery present ++ * - ac adapter plugged in ++ * - battery not fully charged ++ */ ++#if CONFIG_GDIUM_VERSION > 2 ++ present = !!(data->status & EC_STATUS_BATID); ++#else ++ present = !!(ret > BAT_VOLT_PRESENT); ++#endif ++ data->battery_level = 0; ++ if (present) { ++ data->battery_level = (unsigned int)ret; ++ if (data->status & EC_STATUS_ADAPT) ++ data->battery_level -= BAT_READ_ERROR_MV; ++ } ++ ++ data->charge_cmd = 0; ++ if ((data->status & EC_STATUS_ADAPT) && present && (data->battery_level <= BAT_MAX_MV)) ++ data->charge_cmd = (ret < BAT_TRICKLE_EN) ? 2 : 3; ++ ++ ec_charge_en(client, (data->charge_cmd >> 1) & 1, data->charge_cmd & 1); ++ ++ /* ++ * data->ctrl must be set _after_ calling ec_charge_en as this will change the ++ * control register content ++ */ ++ data->ctrl = ec_read_ctrl(client); ++ ++ if ((data->status & EC_STATUS_ADAPT) != (old_status & EC_STATUS_ADAPT)) { ++ power_supply_changed(&data->gdium_ac); ++ /* Send charging/discharging state change */ ++ power_supply_changed(&data->gdium_battery); ++ } else if ((data->status & EC_STATUS_ADAPT) && ++ ((old_charge_cmd&2) != (data->charge_cmd&2))) ++ power_supply_changed(&data->gdium_battery); ++ ++i2c_read_error: ++ mutex_unlock(&data->mutex); ++ queue_delayed_work(data->workqueue, &data->work, msecs_to_jiffies(BAT_SCAN_INTERVAL)); ++} ++ ++static int gdium_laptop_battery_init(struct gdium_laptop_data *data) ++{ ++ int ret; ++ ++ data->bat_pdev = platform_device_register_simple("gdium-battery", 0, NULL, 0); ++ if (IS_ERR(data->bat_pdev)) ++ return PTR_ERR(data->bat_pdev); ++ ++ data->gdium_battery.name = data->bat_pdev->name; ++ data->gdium_battery.properties = gdium_battery_props; ++ data->gdium_battery.num_properties = ARRAY_SIZE(gdium_battery_props); ++ data->gdium_battery.get_property = gdium_battery_get_props; ++ data->gdium_battery.use_for_apm = 1; ++ ++ ret = power_supply_register(&data->bat_pdev->dev, &data->gdium_battery); ++ if (ret) ++ goto err_platform; ++ ++ data->gdium_ac.name = "gdium-ac"; ++ data->gdium_ac.type = POWER_SUPPLY_TYPE_MAINS; ++ data->gdium_ac.properties = gdium_ac_props; ++ data->gdium_ac.num_properties = ARRAY_SIZE(gdium_ac_props); ++ data->gdium_ac.get_property = gdium_ac_get_props; ++/* data->gdium_ac.use_for_apm_ac = 1, */ ++ ++ ret = power_supply_register(&data->bat_pdev->dev, &data->gdium_ac); ++ if (ret) ++ goto err_battery; ++ ++ if (!ec) { ++ INIT_DELAYED_WORK(&data->work, gdium_laptop_battery_work); ++ data->workqueue = create_singlethread_workqueue("gdium-battery-work"); ++ if (!data->workqueue) { ++ ret = -ESRCH; ++ goto err_work; ++ } ++ queue_delayed_work(data->workqueue, &data->work, msecs_to_jiffies(BAT_SCAN_INTERVAL)); ++ } ++ ++ return 0; ++ ++err_work: ++err_battery: ++ power_supply_unregister(&data->gdium_battery); ++err_platform: ++ platform_device_unregister(data->bat_pdev); ++ ++ return ret; ++} ++static void gdium_laptop_battery_exit(struct gdium_laptop_data *data) ++{ ++ if (!ec) { ++ cancel_rearming_delayed_workqueue(data->workqueue, &data->work); ++ destroy_workqueue(data->workqueue); ++ } ++ power_supply_unregister(&data->gdium_battery); ++ power_supply_unregister(&data->gdium_ac); ++ platform_device_unregister(data->bat_pdev); ++} ++ ++/* Debug fs */ ++static int gdium_laptop_regs_show(struct seq_file *s, void *p) ++{ ++ struct gdium_laptop_data *data = s->private; ++ struct i2c_client *client = data->client; ++ ++ mutex_lock(&data->mutex); ++ seq_printf(s, "Version : 0x%02x\n", (unsigned char)ec_read_version(client)); ++ seq_printf(s, "Status : 0x%02x\n", (unsigned char)ec_read_status(client)); ++ seq_printf(s, "Ctrl : 0x%02x\n", (unsigned char)ec_read_ctrl(client)); ++ seq_printf(s, "Sign : 0x%02x\n", (unsigned char)ec_read_sign(client)); ++ seq_printf(s, "Bat Lo : 0x%02x\n", (unsigned char)i2c_smbus_read_byte_data(client, EC_BAT_LOW)); ++ seq_printf(s, "Bat Hi : 0x%02x\n", (unsigned char)i2c_smbus_read_byte_data(client, EC_BAT_HIGH)); ++ seq_printf(s, "Battery : %d uV\n", (unsigned int)ec_read_battery(client) * 1000); ++ seq_printf(s, "Charge cmd : %s %s\n", data->charge_cmd & 2 ? "C" : " ", data->charge_cmd & 1 ? "T" : " "); ++ ++ mutex_unlock(&data->mutex); ++ return 0; ++} ++ ++static int gdium_laptop_regs_open(struct inode *inode, ++ struct file *file) ++{ ++ return single_open(file, gdium_laptop_regs_show, inode->i_private); ++} ++ ++static const struct file_operations gdium_laptop_regs_fops = { ++ .open = gdium_laptop_regs_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .owner = THIS_MODULE, ++}; ++ ++ ++static int gdium_laptop_probe(struct i2c_client *client, const struct i2c_device_id *id) ++{ ++ struct gdium_laptop_data *data; ++ int ret; ++ ++ if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { ++ dev_err(&client->dev, ++ "%s: no smbus_byte support !\n", __func__); ++ return -ENODEV; ++ } ++ ++ data = kzalloc(sizeof(struct gdium_laptop_data), GFP_KERNEL); ++ if (!data) ++ return -ENOMEM; ++ ++ i2c_set_clientdata(client, data); ++ data->client = client; ++ mutex_init(&data->mutex); ++ ++ ret = ec_read_version(client); ++ if (ret < 0) ++ goto err_alloc; ++ ++ data->version = (unsigned char)ret; ++ ++ ret = gdium_laptop_input_init(data); ++ if (ret) ++ goto err_alloc; ++ ++ ret = gdium_laptop_battery_init(data); ++ if (ret) ++ goto err_input; ++ ++ ++ if (!ec) { ++ ret = ec_write_sign(client, EC_SIGN_OS); ++ if (ret) ++ goto err_sign; ++ } ++ ++ if (gpio16) { ++ ret = gpio_request(SM502_WLAN_ON, "wlan-on"); ++ if (ret < 0) ++ goto err_sign; ++ gpio_set_value(SM502_WLAN_ON, ec_wlan_status(client)); ++ gpio_direction_output(SM502_WLAN_ON, 1); ++ } ++ ++ dev_info(&client->dev, "Found firmware 0x%02x\n", data->version); ++ data->debugfs = debugfs_create_file("gdium_laptop", S_IFREG | S_IRUGO, ++ NULL, data, &gdium_laptop_regs_fops); ++ ++ return 0; ++ ++err_sign: ++ gdium_laptop_battery_exit(data); ++err_input: ++ gdium_laptop_input_exit(data); ++err_alloc: ++ kfree(data); ++ return ret; ++} ++ ++static int gdium_laptop_remove(struct i2c_client *client) ++{ ++ struct gdium_laptop_data *data = i2c_get_clientdata(client); ++ ++ if (gpio16) ++ gpio_free(SM502_WLAN_ON); ++ ec_write_sign(client, EC_SIGN_EC); ++ if (data->debugfs) ++ debugfs_remove(data->debugfs); ++ ++ gdium_laptop_battery_exit(data); ++ gdium_laptop_input_exit(data); ++ ++ kfree(data); ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++static int gdium_laptop_suspend(struct i2c_client *client, pm_message_t msg) ++{ ++ struct gdium_laptop_data *data = i2c_get_clientdata(client); ++ ++ if (!ec) ++ cancel_rearming_delayed_workqueue(data->workqueue, &data->work); ++ return 0; ++} ++ ++static int gdium_laptop_resume(struct i2c_client *client) ++{ ++ struct gdium_laptop_data *data = i2c_get_clientdata(client); ++ ++ if (!ec) ++ queue_delayed_work(data->workqueue, &data->work, msecs_to_jiffies(BAT_SCAN_INTERVAL)); ++ return 0; ++} ++#else ++#define gdium_laptop_suspend NULL ++#define gdium_laptop_resume NULL ++#endif ++static const struct i2c_device_id gdium_id[] = { ++ { "gdium-laptop" }, ++ {}, ++}; ++MODULE_DEVICE_TABLE(i2c, gdium_id); ++ ++static struct i2c_driver gdium_laptop_driver = { ++ .driver = { ++ .name = "gdium-laptop", ++ .owner = THIS_MODULE, ++ }, ++ .probe = gdium_laptop_probe, ++ .remove = gdium_laptop_remove, ++ .shutdown = gdium_laptop_remove, ++ .suspend = gdium_laptop_suspend, ++ .resume = gdium_laptop_resume, ++ .id_table = gdium_id, ++}; ++ ++static int __init gdium_laptop_init(void) ++{ ++ return i2c_add_driver(&gdium_laptop_driver); ++} ++ ++static void __exit gdium_laptop_exit(void) ++{ ++ i2c_del_driver(&gdium_laptop_driver); ++} ++ ++module_init(gdium_laptop_init); ++module_exit(gdium_laptop_exit); ++ ++MODULE_AUTHOR("Arnaud Patard "); ++MODULE_DESCRIPTION("Gdium laptop extras"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/mips/lynloong_pc.c b/drivers/platform/mips/lynloong_pc.c +new file mode 100644 +index 0000000..68f29e4 +--- /dev/null ++++ b/drivers/platform/mips/lynloong_pc.c +@@ -0,0 +1,515 @@ ++/* ++ * Driver for LynLoong PC extras ++ * ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin , Xiang Yu ++ * ++ * 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 /* for backlight subdriver */ ++#include ++#include /* for video output subdriver */ ++#include /* for suspend support */ ++ ++#include ++#include ++ ++#include ++ ++static u32 gpio_base, mfgpt_base; ++ ++static void set_gpio_reg_high(int gpio, int reg) ++{ ++ u32 val; ++ ++ val = inl(gpio_base + reg); ++ val |= (1 << gpio); ++ val &= ~(1 << (16 + gpio)); ++ outl(val, gpio_base + reg); ++ mmiowb(); ++} ++ ++static void set_gpio_reg_low(int gpio, int reg) ++{ ++ u32 val; ++ ++ val = inl(gpio_base + reg); ++ val |= (1 << (16 + gpio)); ++ val &= ~(1 << gpio); ++ outl(val, gpio_base + reg); ++ mmiowb(); ++} ++ ++static void set_gpio_output_low(int gpio) ++{ ++ set_gpio_reg_high(gpio, GPIOL_OUT_EN); ++ set_gpio_reg_low(gpio, GPIOL_OUT_VAL); ++} ++ ++static void set_gpio_output_high(int gpio) ++{ ++ set_gpio_reg_high(gpio, GPIOL_OUT_EN); ++ set_gpio_reg_high(gpio, GPIOL_OUT_VAL); ++} ++ ++/* backlight subdriver */ ++ ++#define MAX_BRIGHTNESS 100 ++#define DEFAULT_BRIGHTNESS 50 ++#define MIN_BRIGHTNESS 0 ++static unsigned int level; ++ ++DEFINE_SPINLOCK(backlight_lock); ++/* Tune the brightness */ ++static void setup_mfgpt2(void) ++{ ++ unsigned long flags; ++ ++ spin_lock_irqsave(&backlight_lock, flags); ++ ++ /* Set MFGPT2 comparator 1,2 */ ++ outw(MAX_BRIGHTNESS-level, MFGPT2_CMP1); ++ outw(MAX_BRIGHTNESS, MFGPT2_CMP2); ++ /* Clear MFGPT2 UP COUNTER */ ++ outw(0, MFGPT2_CNT); ++ /* Enable counter, compare mode, 32k */ ++ outw(0x8280, MFGPT2_SETUP); ++ ++ spin_unlock_irqrestore(&backlight_lock, flags); ++} ++ ++static int lynloong_set_brightness(struct backlight_device *bd) ++{ ++ level = (bd->props.fb_blank == FB_BLANK_UNBLANK && ++ bd->props.power == FB_BLANK_UNBLANK) ? ++ bd->props.brightness : 0; ++ ++ if (level > MAX_BRIGHTNESS) ++ level = MAX_BRIGHTNESS; ++ else if (level < MIN_BRIGHTNESS) ++ level = MIN_BRIGHTNESS; ++ ++ setup_mfgpt2(); ++ ++ return 0; ++} ++ ++static int lynloong_get_brightness(struct backlight_device *bd) ++{ ++ return level; ++} ++ ++static struct backlight_ops backlight_ops = { ++ .get_brightness = lynloong_get_brightness, ++ .update_status = lynloong_set_brightness, ++}; ++ ++static struct backlight_device *lynloong_backlight_dev; ++ ++static int lynloong_backlight_init(void) ++{ ++ int ret; ++ u32 hi; ++ struct backlight_properties props; ++ ++ /* Get gpio_base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &gpio_base); ++ /* Get mfgpt_base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), &hi, &mfgpt_base); ++ /* Get gpio_base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &gpio_base); ++ ++ /* Select for mfgpt */ ++ set_gpio_reg_high(7, GPIOL_OUT_AUX1_SEL); ++ /* Enable brightness controlling */ ++ set_gpio_output_high(7); ++ ++ memset(&props, 0, sizeof(struct backlight_properties)); ++ props.max_brightness = MAX_BRIGHTNESS; ++ props.type = BACKLIGHT_PLATFORM; ++ lynloong_backlight_dev = backlight_device_register("backlight0", NULL, ++ NULL, &backlight_ops, &props); ++ ++ if (IS_ERR(lynloong_backlight_dev)) { ++ ret = PTR_ERR(lynloong_backlight_dev); ++ return ret; ++ } ++ ++ lynloong_backlight_dev->props.brightness = DEFAULT_BRIGHTNESS; ++ backlight_update_status(lynloong_backlight_dev); ++ ++ return 0; ++} ++ ++static void lynloong_backlight_exit(void) ++{ ++ if (lynloong_backlight_dev) { ++ backlight_device_unregister(lynloong_backlight_dev); ++ lynloong_backlight_dev = NULL; ++ } ++ /* Disable brightness controlling */ ++ set_gpio_output_low(7); ++} ++ ++/* video output driver */ ++static int vo_status = 1; ++ ++static int lcd_video_output_get(struct output_device *od) ++{ ++ return vo_status; ++} ++ ++static int lcd_video_output_set(struct output_device *od) ++{ ++ int i; ++ unsigned long status; ++ ++ status = !!od->request_state; ++ ++ if (status == 0) { ++ /* Set the current status as off */ ++ vo_status = 0; ++ /* Turn off the backlight */ ++ set_gpio_output_low(11); ++ for (i = 0; i < 0x500; i++) ++ delay(); ++ /* Turn off the LCD */ ++ set_gpio_output_high(8); ++ } else { ++ /* Turn on the LCD */ ++ set_gpio_output_low(8); ++ for (i = 0; i < 0x500; i++) ++ delay(); ++ /* Turn on the backlight */ ++ set_gpio_output_high(11); ++ /* Set the current status as on */ ++ vo_status = 1; ++ } ++ ++ return 0; ++} ++ ++static struct output_properties lcd_output_properties = { ++ .set_state = lcd_video_output_set, ++ .get_status = lcd_video_output_get, ++}; ++ ++static struct output_device *lcd_output_dev; ++ ++static void lynloong_lcd_vo_set(int status) ++{ ++ lcd_output_dev->request_state = status; ++ lcd_video_output_set(lcd_output_dev); ++} ++ ++static int lynloong_vo_init(void) ++{ ++ int ret; ++ ++ /* Register video output device: lcd */ ++ lcd_output_dev = video_output_register("LCD", NULL, NULL, ++ &lcd_output_properties); ++ ++ if (IS_ERR(lcd_output_dev)) { ++ ret = PTR_ERR(lcd_output_dev); ++ lcd_output_dev = NULL; ++ return ret; ++ } ++ /* Ensure LCD is on by default */ ++ lynloong_lcd_vo_set(1); ++ ++ return 0; ++} ++ ++static void lynloong_vo_exit(void) ++{ ++ if (lcd_output_dev) { ++ video_output_unregister(lcd_output_dev); ++ lcd_output_dev = NULL; ++ } ++} ++ ++/* suspend support */ ++ ++#ifdef CONFIG_PM ++ ++static u32 smb_base; ++ ++/* I2C operations */ ++ ++static int i2c_wait(void) ++{ ++ char c; ++ int i; ++ ++ udelay(1000); ++ for (i = 0; i < 20; i++) { ++ c = inb(smb_base | SMB_STS); ++ if (c & (SMB_STS_BER | SMB_STS_NEGACK)) ++ return -1; ++ if (c & SMB_STS_SDAST) ++ return 0; ++ udelay(100); ++ } ++ return -2; ++} ++ ++static void i2c_read_single(int addr, int regNo, char *value) ++{ ++ unsigned char c; ++ ++ /* Start condition */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_START, smb_base | SMB_CTRL1); ++ i2c_wait(); ++ ++ /* Send slave address */ ++ outb(addr & 0xfe, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Acknowledge smbus */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_ACK, smb_base | SMB_CTRL1); ++ ++ /* Send register index */ ++ outb(regNo, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Acknowledge smbus */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_ACK, smb_base | SMB_CTRL1); ++ ++ /* Start condition again */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_START, smb_base | SMB_CTRL1); ++ i2c_wait(); ++ ++ /* Send salve address again */ ++ outb(1 | addr, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Acknowledge smbus */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_ACK, smb_base | SMB_CTRL1); ++ ++ /* Read data */ ++ *value = inb(smb_base | SMB_SDA); ++ ++ /* Stop condition */ ++ outb(SMB_CTRL1_STOP, smb_base | SMB_CTRL1); ++ i2c_wait(); ++} ++ ++static void i2c_write_single(int addr, int regNo, char value) ++{ ++ unsigned char c; ++ ++ /* Start condition */ ++ c = inb(smb_base | SMB_CTRL1); ++ outb(c | SMB_CTRL1_START, smb_base | SMB_CTRL1); ++ i2c_wait(); ++ /* Send slave address */ ++ outb(addr & 0xfe, smb_base | SMB_SDA); ++ i2c_wait();; ++ ++ /* Send register index */ ++ outb(regNo, smb_base | SMB_SDA); ++ i2c_wait(); ++ ++ /* Write data */ ++ outb(value, smb_base | SMB_SDA); ++ i2c_wait(); ++ /* Stop condition */ ++ outb(SMB_CTRL1_STOP, smb_base | SMB_CTRL1); ++ i2c_wait(); ++} ++ ++static void stop_clock(int clk_reg, int clk_sel) ++{ ++ u8 value; ++ ++ i2c_read_single(0xd3, clk_reg, &value); ++ value &= ~(1 << clk_sel); ++ i2c_write_single(0xd2, clk_reg, value); ++} ++ ++static void enable_clock(int clk_reg, int clk_sel) ++{ ++ u8 value; ++ ++ i2c_read_single(0xd3, clk_reg, &value); ++ value |= (1 << clk_sel); ++ i2c_write_single(0xd2, clk_reg, value); ++} ++ ++static char cached_clk_freq; ++static char cached_pci_fixed_freq; ++ ++static void decrease_clk_freq(void) ++{ ++ char value; ++ ++ i2c_read_single(0xd3, 1, &value); ++ cached_clk_freq = value; ++ ++ /* Select frequency by software */ ++ value |= (1 << 1); ++ /* CPU, 3V66, PCI : 100, 66, 33(1) */ ++ value |= (1 << 2); ++ i2c_write_single(0xd2, 1, value); ++ ++ /* Cache the pci frequency */ ++ i2c_read_single(0xd3, 14, &value); ++ cached_pci_fixed_freq = value; ++ ++ /* Enable PCI fix mode */ ++ value |= (1 << 5); ++ /* 3V66, PCI : 64MHz, 32MHz */ ++ value |= (1 << 3); ++ i2c_write_single(0xd2, 14, value); ++ ++} ++ ++static void resume_clk_freq(void) ++{ ++ i2c_write_single(0xd2, 1, cached_clk_freq); ++ i2c_write_single(0xd2, 14, cached_pci_fixed_freq); ++} ++ ++static void stop_clocks(void) ++{ ++ /* CPU Clock Register */ ++ stop_clock(2, 5); /* not used */ ++ stop_clock(2, 6); /* not used */ ++ stop_clock(2, 7); /* not used */ ++ ++ /* PCI Clock Register */ ++ stop_clock(3, 1); /* 8100 */ ++ stop_clock(3, 5); /* SIS */ ++ stop_clock(3, 0); /* not used */ ++ stop_clock(3, 6); /* not used */ ++ ++ /* PCI 48M Clock Register */ ++ stop_clock(4, 6); /* USB grounding */ ++ stop_clock(4, 5); /* REF(5536_14M) */ ++ ++ /* 3V66 Control Register */ ++ stop_clock(5, 0); /* VCH_CLK..., grounding */ ++} ++ ++static void enable_clocks(void) ++{ ++ enable_clock(3, 1); /* 8100 */ ++ enable_clock(3, 5); /* SIS */ ++ ++ enable_clock(4, 6); ++ enable_clock(4, 5); /* REF(5536_14M) */ ++ ++ enable_clock(5, 0); /* VCH_CLOCK, grounding */ ++} ++ ++static int lynloong_suspend(struct device *dev) ++{ ++ /* Disable AMP */ ++ set_gpio_output_high(6); ++ /* Turn off LCD */ ++ lynloong_lcd_vo_set(0); ++ ++ /* Stop the clocks of some devices */ ++ stop_clocks(); ++ ++ /* Decrease the external clock frequency */ ++ decrease_clk_freq(); ++ ++ return 0; ++} ++ ++static int lynloong_resume(struct device *dev) ++{ ++ /* Turn on the LCD */ ++ lynloong_lcd_vo_set(1); ++ ++ /* Resume clock frequency, enable the relative clocks */ ++ resume_clk_freq(); ++ enable_clocks(); ++ ++ /* Enable AMP */ ++ set_gpio_output_low(6); ++ ++ return 0; ++} ++ ++static const SIMPLE_DEV_PM_OPS(lynloong_pm_ops, lynloong_suspend, ++ lynloong_resume); ++#endif /* !CONFIG_PM */ ++ ++static struct platform_device_id platform_device_ids[] = { ++ { ++ .name = "lynloong_pc", ++ }, ++ {} ++}; ++ ++MODULE_DEVICE_TABLE(platform, platform_device_ids); ++ ++static struct platform_driver platform_driver = { ++ .driver = { ++ .name = "lynloong_pc", ++ .owner = THIS_MODULE, ++#ifdef CONFIG_PM ++ .pm = &lynloong_pm_ops, ++#endif ++ }, ++ .id_table = platform_device_ids, ++}; ++ ++static int __init lynloong_init(void) ++{ ++ int ret; ++ ++ pr_info("LynLoong platform specific driver loaded.\n"); ++ ++ /* Register platform stuff */ ++ ret = platform_driver_register(&platform_driver); ++ if (ret) { ++ pr_err("Failed to register LynLoong platform driver.\n"); ++ return ret; ++ } ++ ++ ret = lynloong_backlight_init(); ++ if (ret) { ++ pr_err("Failed to register LynLoong backlight driver.\n"); ++ return ret; ++ } ++ ++ ret = lynloong_vo_init(); ++ if (ret) { ++ pr_err("Failed to register LynLoong backlight driver.\n"); ++ lynloong_vo_exit(); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static void __exit lynloong_exit(void) ++{ ++ lynloong_vo_exit(); ++ lynloong_backlight_exit(); ++ platform_driver_unregister(&platform_driver); ++ ++ pr_info("LynLoong platform specific driver unloaded.\n"); ++} ++ ++module_init(lynloong_init); ++module_exit(lynloong_exit); ++ ++MODULE_AUTHOR("Wu Zhangjin ; Xiang Yu "); ++MODULE_DESCRIPTION("LynLoong PC driver"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/mips/yeeloong_ecrom.c b/drivers/platform/mips/yeeloong_ecrom.c +new file mode 100644 +index 0000000..1bfe4cf +--- /dev/null ++++ b/drivers/platform/mips/yeeloong_ecrom.c +@@ -0,0 +1,944 @@ ++/* ++ * Driver for flushing/dumping ROM of EC on YeeLoong laptop ++ * ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: liujl ++ * ++ * NOTE : ++ * The EC resources accessing and programming are supported. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define EC_MISC_DEV "ec_misc" ++#define EC_IOC_MAGIC 'E' ++ ++/* ec registers range */ ++#define EC_MAX_REGADDR 0xFFFF ++#define EC_MIN_REGADDR 0xF000 ++#define EC_RAM_ADDR 0xF800 ++ ++/* version burned address */ ++#define VER_ADDR 0xf7a1 ++#define VER_MAX_SIZE 7 ++#define EC_ROM_MAX_SIZE 0x10000 ++ ++/* ec internal register */ ++#define REG_POWER_MODE 0xF710 ++#define FLAG_NORMAL_MODE 0x00 ++#define FLAG_IDLE_MODE 0x01 ++#define FLAG_RESET_MODE 0x02 ++ ++/* ec update program flag */ ++#define PROGRAM_FLAG_NONE 0x00 ++#define PROGRAM_FLAG_IE 0x01 ++#define PROGRAM_FLAG_ROM 0x02 ++ ++/* XBI relative registers */ ++#define REG_XBISEG0 0xFEA0 ++#define REG_XBISEG1 0xFEA1 ++#define REG_XBIRSV2 0xFEA2 ++#define REG_XBIRSV3 0xFEA3 ++#define REG_XBIRSV4 0xFEA4 ++#define REG_XBICFG 0xFEA5 ++#define REG_XBICS 0xFEA6 ++#define REG_XBIWE 0xFEA7 ++#define REG_XBISPIA0 0xFEA8 ++#define REG_XBISPIA1 0xFEA9 ++#define REG_XBISPIA2 0xFEAA ++#define REG_XBISPIDAT 0xFEAB ++#define REG_XBISPICMD 0xFEAC ++#define REG_XBISPICFG 0xFEAD ++#define REG_XBISPIDATR 0xFEAE ++#define REG_XBISPICFG2 0xFEAF ++ ++/* commands definition for REG_XBISPICMD */ ++#define SPICMD_WRITE_STATUS 0x01 ++#define SPICMD_BYTE_PROGRAM 0x02 ++#define SPICMD_READ_BYTE 0x03 ++#define SPICMD_WRITE_DISABLE 0x04 ++#define SPICMD_READ_STATUS 0x05 ++#define SPICMD_WRITE_ENABLE 0x06 ++#define SPICMD_HIGH_SPEED_READ 0x0B ++#define SPICMD_POWER_DOWN 0xB9 ++#define SPICMD_SST_EWSR 0x50 ++#define SPICMD_SST_SEC_ERASE 0x20 ++#define SPICMD_SST_BLK_ERASE 0x52 ++#define SPICMD_SST_CHIP_ERASE 0x60 ++#define SPICMD_FRDO 0x3B ++#define SPICMD_SEC_ERASE 0xD7 ++#define SPICMD_BLK_ERASE 0xD8 ++#define SPICMD_CHIP_ERASE 0xC7 ++ ++/* bits definition for REG_XBISPICFG */ ++#define SPICFG_AUTO_CHECK 0x01 ++#define SPICFG_SPI_BUSY 0x02 ++#define SPICFG_DUMMY_READ 0x04 ++#define SPICFG_EN_SPICMD 0x08 ++#define SPICFG_LOW_SPICS 0x10 ++#define SPICFG_EN_SHORT_READ 0x20 ++#define SPICFG_EN_OFFSET_READ 0x40 ++#define SPICFG_EN_FAST_READ 0x80 ++ ++/* watchdog timer registers */ ++#define REG_WDTCFG 0xfe80 ++#define REG_WDTPF 0xfe81 ++#define REG_WDT 0xfe82 ++ ++/* lpc configure register */ ++#define REG_LPCCFG 0xfe95 ++ ++/* 8051 reg */ ++#define REG_PXCFG 0xff14 ++ ++/* Fan register in KB3310 */ ++#define REG_ECFAN_SPEED_LEVEL 0xf4e4 ++#define REG_ECFAN_SWITCH 0xf4d2 ++ ++/* the ec flash rom id number */ ++#define EC_ROM_PRODUCT_ID_SPANSION 0x01 ++#define EC_ROM_PRODUCT_ID_MXIC 0xC2 ++#define EC_ROM_PRODUCT_ID_AMIC 0x37 ++#define EC_ROM_PRODUCT_ID_EONIC 0x1C ++ ++/* misc ioctl operations */ ++#define IOCTL_RDREG _IOR(EC_IOC_MAGIC, 1, int) ++#define IOCTL_WRREG _IOW(EC_IOC_MAGIC, 2, int) ++#define IOCTL_READ_EC _IOR(EC_IOC_MAGIC, 3, int) ++#define IOCTL_PROGRAM_IE _IOW(EC_IOC_MAGIC, 4, int) ++#define IOCTL_PROGRAM_EC _IOW(EC_IOC_MAGIC, 5, int) ++ ++/* start address for programming of EC content or IE */ ++/* ec running code start address */ ++#define EC_START_ADDR 0x00000000 ++/* ec information element storing address */ ++#define IE_START_ADDR 0x00020000 ++ ++/* EC state */ ++#define EC_STATE_IDLE 0x00 /* ec in idle state */ ++#define EC_STATE_BUSY 0x01 /* ec in busy state */ ++ ++/* timeout value for programming */ ++#define EC_FLASH_TIMEOUT 0x1000 /* ec program timeout */ ++/* command checkout timeout including cmd to port or state flag check */ ++#define EC_CMD_TIMEOUT 0x1000 ++#define EC_SPICMD_STANDARD_TIMEOUT (4 * 1000) /* unit : us */ ++#define EC_MAX_DELAY_UNIT (10) /* every time for polling */ ++#define SPI_FINISH_WAIT_TIME 10 ++/* EC content max size */ ++#define EC_CONTENT_MAX_SIZE (64 * 1024) ++#define IE_CONTENT_MAX_SIZE (0x100000 - IE_START_ADDR) ++ ++/* the register operation access struct */ ++struct ec_reg { ++ u32 addr; /* the address of kb3310 registers */ ++ u8 val; /* the register value */ ++}; ++ ++struct ec_info { ++ u32 start_addr; ++ u32 size; ++ u8 *buf; ++}; ++ ++/* open for using rom protection action */ ++#define EC_ROM_PROTECTION ++ ++/* enable the chip reset mode */ ++static int ec_init_reset_mode(void) ++{ ++ int timeout; ++ unsigned char status = 0; ++ int ret = 0; ++ ++ /* make chip goto reset mode */ ++ ret = ec_query_seq(CMD_INIT_RESET_MODE); ++ if (ret < 0) { ++ printk(KERN_ERR "ec init reset mode failed.\n"); ++ goto out; ++ } ++ ++ /* make the action take active */ ++ timeout = EC_CMD_TIMEOUT; ++ status = ec_read(REG_POWER_MODE) & FLAG_RESET_MODE; ++ while (timeout--) { ++ if (status) { ++ udelay(EC_REG_DELAY); ++ break; ++ } ++ status = ec_read(REG_POWER_MODE) & FLAG_RESET_MODE; ++ udelay(EC_REG_DELAY); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR "ec rom fixup : can't check reset status.\n"); ++ ret = -EINVAL; ++ } else ++ printk(KERN_INFO "(%d/%d)reset 0xf710 : 0x%x\n", timeout, ++ EC_CMD_TIMEOUT - timeout, status); ++ ++ /* set MCU to reset mode */ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_PXCFG); ++ status |= (1 << 0); ++ ec_write(REG_PXCFG, status); ++ udelay(EC_REG_DELAY); ++ ++ /* disable FWH/LPC */ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_LPCCFG); ++ status &= ~(1 << 7); ++ ec_write(REG_LPCCFG, status); ++ udelay(EC_REG_DELAY); ++ ++ printk(KERN_INFO "entering reset mode ok..............\n"); ++ ++ out: ++ return ret; ++} ++ ++/* make ec exit from reset mode */ ++static void ec_exit_reset_mode(void) ++{ ++ unsigned char regval; ++ ++ udelay(EC_REG_DELAY); ++ regval = ec_read(REG_LPCCFG); ++ regval |= (1 << 7); ++ ec_write(REG_LPCCFG, regval); ++ regval = ec_read(REG_PXCFG); ++ regval &= ~(1 << 0); ++ ec_write(REG_PXCFG, regval); ++ printk(KERN_INFO "exit reset mode ok..................\n"); ++ ++ return; ++} ++ ++/* make ec disable WDD */ ++static void ec_disable_WDD(void) ++{ ++ unsigned char status; ++ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_WDTCFG); ++ ec_write(REG_WDTPF, 0x03); ++ ec_write(REG_WDTCFG, (status & 0x80) | 0x48); ++ printk(KERN_INFO "Disable WDD ok..................\n"); ++ ++ return; ++} ++ ++/* make ec enable WDD */ ++static void ec_enable_WDD(void) ++{ ++ unsigned char status; ++ ++ udelay(EC_REG_DELAY); ++ status = ec_read(REG_WDTCFG); ++ ec_write(REG_WDT, 0x28); /* set WDT 5sec(0x28) */ ++ ec_write(REG_WDTCFG, (status & 0x80) | 0x03); ++ printk(KERN_INFO "Enable WDD ok..................\n"); ++ ++ return; ++} ++ ++/* make ec goto idle mode */ ++static int ec_init_idle_mode(void) ++{ ++ int timeout; ++ unsigned char status = 0; ++ int ret = 0; ++ ++ ec_query_seq(CMD_INIT_IDLE_MODE); ++ ++ /* make the action take active */ ++ timeout = EC_CMD_TIMEOUT; ++ status = ec_read(REG_POWER_MODE) & FLAG_IDLE_MODE; ++ while (timeout--) { ++ if (status) { ++ udelay(EC_REG_DELAY); ++ break; ++ } ++ status = ec_read(REG_POWER_MODE) & FLAG_IDLE_MODE; ++ udelay(EC_REG_DELAY); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR "ec rom fixup : can't check out the status.\n"); ++ ret = -EINVAL; ++ } else ++ printk(KERN_INFO "(%d/%d)0xf710 : 0x%x\n", timeout, ++ EC_CMD_TIMEOUT - timeout, ec_read(REG_POWER_MODE)); ++ ++ printk(KERN_INFO "entering idle mode ok...................\n"); ++ ++ return ret; ++} ++ ++/* make ec exit from idle mode */ ++static int ec_exit_idle_mode(void) ++{ ++ ++ ec_query_seq(CMD_EXIT_IDLE_MODE); ++ ++ printk(KERN_INFO "exit idle mode ok...................\n"); ++ ++ return 0; ++} ++ ++static int ec_instruction_cycle(void) ++{ ++ unsigned long timeout; ++ int ret = 0; ++ ++ timeout = EC_FLASH_TIMEOUT; ++ while (timeout-- >= 0) { ++ if (!(ec_read(REG_XBISPICFG) & SPICFG_SPI_BUSY)) ++ break; ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR ++ "EC_INSTRUCTION_CYCLE : timeout for check flag.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ out: ++ return ret; ++} ++ ++/* To see if the ec is in busy state or not. */ ++static inline int ec_flash_busy(unsigned long timeout) ++{ ++ /* assurance the first command be going to rom */ ++ if (ec_instruction_cycle() < 0) ++ return EC_STATE_BUSY; ++#if 1 ++ timeout = timeout / EC_MAX_DELAY_UNIT; ++ while (timeout-- > 0) { ++ /* check the rom's status of busy flag */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (ec_instruction_cycle() < 0) ++ return EC_STATE_BUSY; ++ if ((ec_read(REG_XBISPIDAT) & 0x01) == 0x00) ++ return EC_STATE_IDLE; ++ udelay(EC_MAX_DELAY_UNIT); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR ++ "EC_FLASH_BUSY : timeout for check rom flag.\n"); ++ return EC_STATE_BUSY; ++ } ++#else ++ /* check the rom's status of busy flag */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (ec_instruction_cycle() < 0) ++ return EC_STATE_BUSY; ++ ++ timeout = timeout / EC_MAX_DELAY_UNIT; ++ while (timeout-- > 0) { ++ if ((ec_read(REG_XBISPIDAT) & 0x01) == 0x00) ++ return EC_STATE_IDLE; ++ udelay(EC_MAX_DELAY_UNIT); ++ } ++ if (timeout <= 0) { ++ printk(KERN_ERR ++ "EC_FLASH_BUSY : timeout for check rom flag.\n"); ++ return EC_STATE_BUSY; ++ } ++#endif ++ ++ return EC_STATE_IDLE; ++} ++ ++static int rom_instruction_cycle(unsigned char cmd) ++{ ++ unsigned long timeout = 0; ++ ++ switch (cmd) { ++ case SPICMD_READ_STATUS: ++ case SPICMD_WRITE_ENABLE: ++ case SPICMD_WRITE_DISABLE: ++ case SPICMD_READ_BYTE: ++ case SPICMD_HIGH_SPEED_READ: ++ timeout = 0; ++ break; ++ case SPICMD_WRITE_STATUS: ++ timeout = 300 * 1000; ++ break; ++ case SPICMD_BYTE_PROGRAM: ++ timeout = 5 * 1000; ++ break; ++ case SPICMD_SST_SEC_ERASE: ++ case SPICMD_SEC_ERASE: ++ timeout = 1000 * 1000; ++ break; ++ case SPICMD_SST_BLK_ERASE: ++ case SPICMD_BLK_ERASE: ++ timeout = 3 * 1000 * 1000; ++ break; ++ case SPICMD_SST_CHIP_ERASE: ++ case SPICMD_CHIP_ERASE: ++ timeout = 20 * 1000 * 1000; ++ break; ++ default: ++ timeout = EC_SPICMD_STANDARD_TIMEOUT; ++ } ++ if (timeout == 0) ++ return ec_instruction_cycle(); ++ if (timeout < EC_SPICMD_STANDARD_TIMEOUT) ++ timeout = EC_SPICMD_STANDARD_TIMEOUT; ++ ++ return ec_flash_busy(timeout); ++} ++ ++/* delay for start/stop action */ ++static void delay_spi(int n) ++{ ++ while (n--) ++ inb(EC_IO_PORT_HIGH); ++} ++ ++/* start the action to spi rom function */ ++static void ec_start_spi(void) ++{ ++ unsigned char val; ++ ++ delay_spi(SPI_FINISH_WAIT_TIME); ++ val = ec_read(REG_XBISPICFG) | SPICFG_EN_SPICMD | SPICFG_AUTO_CHECK; ++ ec_write(REG_XBISPICFG, val); ++ delay_spi(SPI_FINISH_WAIT_TIME); ++} ++ ++/* stop the action to spi rom function */ ++static void ec_stop_spi(void) ++{ ++ unsigned char val; ++ ++ delay_spi(SPI_FINISH_WAIT_TIME); ++ val = ++ ec_read(REG_XBISPICFG) & (~(SPICFG_EN_SPICMD | SPICFG_AUTO_CHECK)); ++ ec_write(REG_XBISPICFG, val); ++ delay_spi(SPI_FINISH_WAIT_TIME); ++} ++ ++/* read one byte from xbi interface */ ++static int ec_read_byte(unsigned int addr, unsigned char *byte) ++{ ++ int ret = 0; ++ ++ /* enable spicmd writing. */ ++ ec_start_spi(); ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR "EC_READ_BYTE : SPICMD_WRITE_ENABLE failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* write the address */ ++ ec_write(REG_XBISPIA2, (addr & 0xff0000) >> 16); ++ ec_write(REG_XBISPIA1, (addr & 0x00ff00) >> 8); ++ ec_write(REG_XBISPIA0, (addr & 0x0000ff) >> 0); ++ /* start action */ ++ ec_write(REG_XBISPICMD, SPICMD_HIGH_SPEED_READ); ++ if (rom_instruction_cycle(SPICMD_HIGH_SPEED_READ) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_READ_BYTE : SPICMD_HIGH_SPEED_READ failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ *byte = ec_read(REG_XBISPIDAT); ++ ++ out: ++ /* disable spicmd writing. */ ++ ec_stop_spi(); ++ ++ return ret; ++} ++ ++/* write one byte to ec rom */ ++static int ec_write_byte(unsigned int addr, unsigned char byte) ++{ ++ int ret = 0; ++ ++ /* enable spicmd writing. */ ++ ec_start_spi(); ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_WRITE_BYTE : SPICMD_WRITE_ENABLE failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* write the address */ ++ ec_write(REG_XBISPIA2, (addr & 0xff0000) >> 16); ++ ec_write(REG_XBISPIA1, (addr & 0x00ff00) >> 8); ++ ec_write(REG_XBISPIA0, (addr & 0x0000ff) >> 0); ++ ec_write(REG_XBISPIDAT, byte); ++ /* start action */ ++ ec_write(REG_XBISPICMD, SPICMD_BYTE_PROGRAM); ++ if (rom_instruction_cycle(SPICMD_BYTE_PROGRAM) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_WRITE_BYTE : SPICMD_BYTE_PROGRAM failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ out: ++ /* disable spicmd writing. */ ++ ec_stop_spi(); ++ ++ return ret; ++} ++ ++/* unprotect SPI ROM */ ++/* EC_ROM_unprotect function code */ ++static int EC_ROM_unprotect(void) ++{ ++ unsigned char status; ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_UNIT_ERASE : SPICMD_WRITE_ENABLE failed.\n"); ++ return 1; ++ } ++ ++ /* unprotect the status register of rom */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (rom_instruction_cycle(SPICMD_READ_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR "EC_UNIT_ERASE : SPICMD_READ_STATUS failed.\n"); ++ return 1; ++ } ++ status = ec_read(REG_XBISPIDAT); ++ ec_write(REG_XBISPIDAT, status & 0x02); ++ if (ec_instruction_cycle() < 0) { ++ printk(KERN_ERR "EC_UNIT_ERASE : write status value failed.\n"); ++ return 1; ++ } ++ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_STATUS); ++ if (rom_instruction_cycle(SPICMD_WRITE_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_UNIT_ERASE : SPICMD_WRITE_STATUS failed.\n"); ++ return 1; ++ } ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_UNIT_ERASE : SPICMD_WRITE_ENABLE failed.\n"); ++ return 1; ++ } ++ ++ return 0; ++} ++ ++/* erase one block or chip or sector as needed */ ++static int ec_unit_erase(unsigned char erase_cmd, unsigned int addr) ++{ ++ unsigned char status; ++ int ret = 0, i = 0; ++ int unprotect_count = 3; ++ int check_flag = 0; ++ ++ /* enable spicmd writing. */ ++ ec_start_spi(); ++ ++#ifdef EC_ROM_PROTECTION ++ /* added for re-check SPICMD_READ_STATUS */ ++ while (unprotect_count-- > 0) { ++ if (EC_ROM_unprotect()) { ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* first time:500ms --> 5.5sec -->10.5sec */ ++ for (i = 0; i < ((2 - unprotect_count) * 100 + 10); i++) ++ udelay(50000); ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (rom_instruction_cycle(SPICMD_READ_STATUS) ++ == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_READ_STATUS failed.\n"); ++ } else { ++ status = ec_read(REG_XBISPIDAT); ++ printk(KERN_INFO "Read unprotect status : 0x%x\n", ++ status); ++ if ((status & 0x1C) == 0x00) { ++ printk(KERN_INFO ++ "Read unprotect status OK1 : 0x%x\n", ++ status & 0x1C); ++ check_flag = 1; ++ break; ++ } ++ } ++ } ++ ++ if (!check_flag) { ++ printk(KERN_INFO "SPI ROM unprotect fail.\n"); ++ return 1; ++ } ++#endif ++ ++ /* block address fill */ ++ if (erase_cmd == SPICMD_BLK_ERASE) { ++ ec_write(REG_XBISPIA2, (addr & 0x00ff0000) >> 16); ++ ec_write(REG_XBISPIA1, (addr & 0x0000ff00) >> 8); ++ ec_write(REG_XBISPIA0, (addr & 0x000000ff) >> 0); ++ } ++ ++ /* erase the whole chip first */ ++ ec_write(REG_XBISPICMD, erase_cmd); ++ if (rom_instruction_cycle(erase_cmd) == EC_STATE_BUSY) { ++ printk(KERN_ERR "EC_UNIT_ERASE : erase failed.\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ out: ++ /* disable spicmd writing. */ ++ ec_stop_spi(); ++ ++ return ret; ++} ++ ++/* update the whole rom content with H/W mode ++ * PLEASE USING ec_unit_erase() FIRSTLY ++ */ ++static int ec_program_rom(struct ec_info *info, int flag) ++{ ++ unsigned int addr = 0; ++ unsigned long size = 0; ++ unsigned char *ptr = NULL; ++ unsigned char data; ++ unsigned char val = 0; ++ int ret = 0; ++ int i, j; ++ unsigned char status; ++ ++ /* modify for program serial No. ++ * set IE_START_ADDR & use idle mode, ++ * disable WDD ++ */ ++ if (flag == PROGRAM_FLAG_ROM) { ++ ret = ec_init_reset_mode(); ++ addr = info->start_addr + EC_START_ADDR; ++ printk(KERN_INFO "PROGRAM_FLAG_ROM..............\n"); ++ } else if (flag == PROGRAM_FLAG_IE) { ++ ret = ec_init_idle_mode(); ++ ec_disable_WDD(); ++ addr = info->start_addr + IE_START_ADDR; ++ printk(KERN_INFO "PROGRAM_FLAG_IE..............\n"); ++ } else { ++ return 0; ++ } ++ ++ if (ret < 0) { ++ if (flag == PROGRAM_FLAG_IE) ++ ec_enable_WDD(); ++ return ret; ++ } ++ ++ size = info->size; ++ ptr = info->buf; ++ printk(KERN_INFO "starting update ec ROM..............\n"); ++ ++ ret = ec_unit_erase(SPICMD_BLK_ERASE, addr); ++ if (ret) { ++ printk(KERN_ERR "program ec : erase block failed.\n"); ++ goto out; ++ } ++ printk(KERN_ERR "program ec : erase block OK.\n"); ++ ++ i = 0; ++ while (i < size) { ++ data = *(ptr + i); ++ ec_write_byte(addr, data); ++ ec_read_byte(addr, &val); ++ if (val != data) { ++ ec_write_byte(addr, data); ++ ec_read_byte(addr, &val); ++ if (val != data) { ++ printk(KERN_INFO ++ "EC : Second flash program failed at:\t"); ++ printk(KERN_INFO ++ "addr : 0x%x, source : 0x%x, dest: 0x%x\n", ++ addr, data, val); ++ printk(KERN_INFO "This should not happen... STOP\n"); ++ break; ++ } ++ } ++ i++; ++ addr++; ++ } ++ ++#ifdef EC_ROM_PROTECTION ++ /* we should start spi access firstly */ ++ ec_start_spi(); ++ ++ /* enable write spi flash */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_WRITE_ENABLE failed.\n"); ++ goto out1; ++ } ++ ++ /* protect the status register of rom */ ++ ec_write(REG_XBISPICMD, SPICMD_READ_STATUS); ++ if (rom_instruction_cycle(SPICMD_READ_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_READ_STATUS failed.\n"); ++ goto out1; ++ } ++ status = ec_read(REG_XBISPIDAT); ++ ++ ec_write(REG_XBISPIDAT, status | 0x1C); ++ if (ec_instruction_cycle() < 0) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : write status value failed.\n"); ++ goto out1; ++ } ++ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_STATUS); ++ if (rom_instruction_cycle(SPICMD_WRITE_STATUS) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_WRITE_STATUS failed.\n"); ++ goto out1; ++ } ++#endif ++ ++ /* disable the write action to spi rom */ ++ ec_write(REG_XBISPICMD, SPICMD_WRITE_DISABLE); ++ if (rom_instruction_cycle(SPICMD_WRITE_DISABLE) == EC_STATE_BUSY) { ++ printk(KERN_ERR ++ "EC_PROGRAM_ROM : SPICMD_WRITE_DISABLE failed.\n"); ++ goto out1; ++ } ++ ++ out1: ++ /* we should stop spi access firstly */ ++ ec_stop_spi(); ++ out: ++ /* for security */ ++ for (j = 0; j < 2000; j++) ++ udelay(1000); ++ ++ /* modify for program serial No. ++ * after program No exit idle mode ++ * and enable WDD ++ */ ++ if (flag == PROGRAM_FLAG_ROM) { ++ /* exit from the reset mode */ ++ ec_exit_reset_mode(); ++ } else { ++ /* ec exit from idle mode */ ++ ret = ec_exit_idle_mode(); ++ ec_enable_WDD(); ++ if (ret < 0) ++ return ret; ++ } ++ ++ return 0; ++} ++ ++/* ioctl */ ++static int misc_ioctl(struct inode *inode, struct file *filp, u_int cmd, ++ u_long arg) ++{ ++ struct ec_info ecinfo; ++ void __user *ptr = (void __user *)arg; ++ struct ec_reg *ecreg = (struct ec_reg *)(filp->private_data); ++ int ret = 0; ++ ++ switch (cmd) { ++ case IOCTL_RDREG: ++ ret = copy_from_user(ecreg, ptr, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "reg read : copy from user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecreg->addr > EC_MAX_REGADDR) ++ || (ecreg->addr < EC_MIN_REGADDR)) { ++ printk(KERN_ERR ++ "reg read : out of register address range.\n"); ++ return -EINVAL; ++ } ++ ecreg->val = ec_read(ecreg->addr); ++ ret = copy_to_user(ptr, ecreg, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "reg read : copy to user error.\n"); ++ return -EFAULT; ++ } ++ break; ++ case IOCTL_WRREG: ++ ret = copy_from_user(ecreg, ptr, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "reg write : copy from user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecreg->addr > EC_MAX_REGADDR) ++ || (ecreg->addr < EC_MIN_REGADDR)) { ++ printk(KERN_ERR ++ "reg write : out of register address range.\n"); ++ return -EINVAL; ++ } ++ ec_write(ecreg->addr, ecreg->val); ++ break; ++ case IOCTL_READ_EC: ++ ret = copy_from_user(ecreg, ptr, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "spi read : copy from user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecreg->addr > EC_RAM_ADDR) ++ && (ecreg->addr < EC_MAX_REGADDR)) { ++ printk(KERN_ERR ++ "spi read : out of register address range.\n"); ++ return -EINVAL; ++ } ++ ec_read_byte(ecreg->addr, &(ecreg->val)); ++ ret = copy_to_user(ptr, ecreg, sizeof(struct ec_reg)); ++ if (ret) { ++ printk(KERN_ERR "spi read : copy to user error.\n"); ++ return -EFAULT; ++ } ++ break; ++ case IOCTL_PROGRAM_IE: ++ ecinfo.start_addr = EC_START_ADDR; ++ ecinfo.size = EC_CONTENT_MAX_SIZE; ++ ecinfo.buf = (u8 *) kmalloc(ecinfo.size, GFP_KERNEL); ++ if (ecinfo.buf == NULL) { ++ printk(KERN_ERR "program ie : kmalloc failed.\n"); ++ return -ENOMEM; ++ } ++ ret = copy_from_user(ecinfo.buf, (u8 *) ptr, ecinfo.size); ++ if (ret) { ++ printk(KERN_ERR "program ie : copy from user error.\n"); ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ return -EFAULT; ++ } ++ ++ /* use ec_program_rom to write serial No */ ++ ec_program_rom(&ecinfo, PROGRAM_FLAG_IE); ++ ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ break; ++ case IOCTL_PROGRAM_EC: ++ ecinfo.start_addr = EC_START_ADDR; ++ if (get_user((ecinfo.size), (u32 *) ptr)) { ++ printk(KERN_ERR "program ec : get user error.\n"); ++ return -EFAULT; ++ } ++ if ((ecinfo.size) > EC_CONTENT_MAX_SIZE) { ++ printk(KERN_ERR "program ec : size out of limited.\n"); ++ return -EINVAL; ++ } ++ ecinfo.buf = (u8 *) kmalloc(ecinfo.size, GFP_KERNEL); ++ if (ecinfo.buf == NULL) { ++ printk(KERN_ERR "program ec : kmalloc failed.\n"); ++ return -ENOMEM; ++ } ++ ret = copy_from_user(ecinfo.buf, ((u8 *) ptr + 4), ecinfo.size); ++ if (ret) { ++ printk(KERN_ERR "program ec : copy from user error.\n"); ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ return -EFAULT; ++ } ++ ++ ec_program_rom(&ecinfo, PROGRAM_FLAG_ROM); ++ ++ kfree(ecinfo.buf); ++ ecinfo.buf = NULL; ++ break; ++ ++ default: ++ break; ++ } ++ ++ return 0; ++} ++ ++static long misc_compat_ioctl(struct file *file, unsigned int cmd, ++ unsigned long arg) ++{ ++ return misc_ioctl(file->f_dentry->d_inode, file, cmd, arg); ++} ++ ++static int misc_open(struct inode *inode, struct file *filp) ++{ ++ struct ec_reg *ecreg = NULL; ++ ecreg = kmalloc(sizeof(struct ec_reg), GFP_KERNEL); ++ if (ecreg) ++ filp->private_data = ecreg; ++ ++ return ecreg ? 0 : -ENOMEM; ++} ++ ++static int misc_release(struct inode *inode, struct file *filp) ++{ ++ struct ec_reg *ecreg = (struct ec_reg *)(filp->private_data); ++ ++ filp->private_data = NULL; ++ kfree(ecreg); ++ ++ return 0; ++} ++ ++static const struct file_operations ecmisc_fops = { ++ .open = misc_open, ++ .release = misc_release, ++ .read = NULL, ++ .write = NULL, ++#ifdef CONFIG_64BIT ++ .compat_ioctl = misc_compat_ioctl, ++#else ++ .ioctl = misc_ioctl, ++#endif ++}; ++ ++static struct miscdevice ecmisc_device = { ++ .minor = MISC_DYNAMIC_MINOR, ++ .name = EC_MISC_DEV, ++ .fops = &ecmisc_fops ++}; ++ ++static int __init ecmisc_init(void) ++{ ++ int ret; ++ ++ printk(KERN_INFO "EC misc device init.\n"); ++ ret = misc_register(&ecmisc_device); ++ ++ return ret; ++} ++ ++static void __exit ecmisc_exit(void) ++{ ++ printk(KERN_INFO "EC misc device exit.\n"); ++ misc_deregister(&ecmisc_device); ++} ++ ++module_init(ecmisc_init); ++module_exit(ecmisc_exit); ++ ++MODULE_AUTHOR("liujl "); ++MODULE_DESCRIPTION("Driver for flushing/dumping ROM of EC on YeeLoong laptop"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/mips/yeeloong_laptop.c b/drivers/platform/mips/yeeloong_laptop.c +new file mode 100644 +index 0000000..c285a67 +--- /dev/null ++++ b/drivers/platform/mips/yeeloong_laptop.c +@@ -0,0 +1,1360 @@ ++/* ++ * Driver for YeeLoong laptop extras ++ * ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin , Liu Junliang ++ * ++ * 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 /* for backlight subdriver */ ++#include ++#include /* for hwmon subdriver */ ++#include ++#include /* for video output subdriver */ ++#include /* for lcd output subdriver */ ++#include /* for hotkey subdriver */ ++#include ++#include ++#include ++#include /* for AC & Battery subdriver */ ++#include /* for register_reboot_notifier */ ++#include /* for register_pm_notifier */ ++ ++#include ++ ++#include /* for loongson_cmdline */ ++#include ++ ++#define ON 1 ++#define OFF 0 ++#define EVENT_START EVENT_LID ++ ++/* common function */ ++#define EC_VER_LEN 64 ++ ++static int ec_version_before(char *version) ++{ ++ char *p, ec_ver[EC_VER_LEN]; ++ ++ p = strstr(loongson_cmdline, "EC_VER="); ++ if (!p) ++ memset(ec_ver, 0, EC_VER_LEN); ++ else { ++ strncpy(ec_ver, p, EC_VER_LEN); ++ p = strstr(ec_ver, " "); ++ if (p) ++ *p = '\0'; ++ } ++ ++ return (strncasecmp(ec_ver, version, 64) < 0); ++} ++ ++/* backlight subdriver */ ++#define MIN_BRIGHTNESS 1 ++#define MAX_BRIGHTNESS 8 ++ ++static int yeeloong_set_brightness(struct backlight_device *bd) ++{ ++ unsigned char level; ++ static unsigned char old_level; ++ ++ level = (bd->props.fb_blank == FB_BLANK_UNBLANK && ++ bd->props.power == FB_BLANK_UNBLANK) ? ++ bd->props.brightness : 0; ++ ++ level = clamp_val(level, MIN_BRIGHTNESS, MAX_BRIGHTNESS); ++ ++ /* Avoid to modify the brightness when EC is tuning it */ ++ if (old_level != level) { ++ if (ec_read(REG_DISPLAY_BRIGHTNESS) == old_level) ++ ec_write(REG_DISPLAY_BRIGHTNESS, level); ++ old_level = level; ++ } ++ ++ return 0; ++} ++ ++static int yeeloong_get_brightness(struct backlight_device *bd) ++{ ++ return ec_read(REG_DISPLAY_BRIGHTNESS); ++} ++ ++static struct backlight_ops backlight_ops = { ++ .get_brightness = yeeloong_get_brightness, ++ .update_status = yeeloong_set_brightness, ++}; ++ ++static struct backlight_device *yeeloong_backlight_dev; ++ ++static int yeeloong_backlight_init(void) ++{ ++ int ret; ++ struct backlight_properties props; ++ ++ memset(&props, 0, sizeof(struct backlight_properties)); ++ props.max_brightness = MAX_BRIGHTNESS; ++ props.type = BACKLIGHT_PLATFORM; ++ yeeloong_backlight_dev = backlight_device_register("backlight0", NULL, ++ NULL, &backlight_ops, &props); ++ ++ if (IS_ERR(yeeloong_backlight_dev)) { ++ ret = PTR_ERR(yeeloong_backlight_dev); ++ yeeloong_backlight_dev = NULL; ++ return ret; ++ } ++ ++ yeeloong_backlight_dev->props.brightness = ++ yeeloong_get_brightness(yeeloong_backlight_dev); ++ backlight_update_status(yeeloong_backlight_dev); ++ ++ return 0; ++} ++ ++static void yeeloong_backlight_exit(void) ++{ ++ if (yeeloong_backlight_dev) { ++ backlight_device_unregister(yeeloong_backlight_dev); ++ yeeloong_backlight_dev = NULL; ++ } ++} ++ ++/* AC & Battery subdriver */ ++ ++static struct power_supply yeeloong_ac, yeeloong_bat; ++ ++#define RET (val->intval) ++ ++#define BAT_CAP_CRITICAL 5 ++#define BAT_CAP_HIGH 95 ++ ++#define get_bat(type) \ ++ ec_read(REG_BAT_##type) ++ ++#define get_bat_l(type) \ ++ ((get_bat(type##_HIGH) << 8) | get_bat(type##_LOW)) ++ ++static int yeeloong_get_ac_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ if (psp == POWER_SUPPLY_PROP_ONLINE) ++ RET = !!(get_bat(POWER) & BIT_BAT_POWER_ACIN); ++ ++ return 0; ++} ++ ++static enum power_supply_property yeeloong_ac_props[] = { ++ POWER_SUPPLY_PROP_ONLINE, ++}; ++ ++static struct power_supply yeeloong_ac = { ++ .name = "yeeloong-ac", ++ .type = POWER_SUPPLY_TYPE_MAINS, ++ .properties = yeeloong_ac_props, ++ .num_properties = ARRAY_SIZE(yeeloong_ac_props), ++ .get_property = yeeloong_get_ac_props, ++}; ++ ++static inline bool is_bat_in(void) ++{ ++ return !!(get_bat(STATUS) & BIT_BAT_STATUS_IN); ++} ++ ++static int get_bat_temp(void) ++{ ++ return get_bat_l(TEMPERATURE) * 10; ++} ++ ++static int get_bat_current(void) ++{ ++ return -(s16)get_bat_l(CURRENT); ++} ++ ++static int get_bat_voltage(void) ++{ ++ return get_bat_l(VOLTAGE); ++} ++ ++static char *get_manufacturer(void) ++{ ++ return (get_bat(VENDOR) == FLAG_BAT_VENDOR_SANYO) ? "SANYO" : "SIMPLO"; ++} ++ ++static int get_relative_cap(void) ++{ ++ /* ++ * When the relative capacity becomes 2, the hardware is observed to ++ * have been turned off forcely. so, we must tune it be suitable to ++ * make the software do related actions. ++ */ ++ int tmp = get_bat_l(RELATIVE_CAP); ++ ++ if (tmp <= (BAT_CAP_CRITICAL * 2)) ++ tmp -= 3; ++ ++ return tmp; ++} ++ ++static int yeeloong_get_bat_props(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ switch (psp) { ++ /* Fixed information */ ++ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: ++ /* mV -> µV */ ++ RET = get_bat_l(DESIGN_VOL) * 1000; ++ break; ++ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: ++ /* mAh->µAh */ ++ RET = get_bat_l(DESIGN_CAP) * 1000; ++ break; ++ case POWER_SUPPLY_PROP_CHARGE_FULL: ++ /* µAh */ ++ RET = get_bat_l(FULLCHG_CAP) * 1000; ++ break; ++ case POWER_SUPPLY_PROP_MANUFACTURER: ++ val->strval = get_manufacturer(); ++ break; ++ /* Dynamic information */ ++ case POWER_SUPPLY_PROP_PRESENT: ++ RET = is_bat_in(); ++ break; ++ case POWER_SUPPLY_PROP_CURRENT_NOW: ++ /* mA -> µA */ ++ RET = is_bat_in() ? get_bat_current() * 1000 : 0; ++ break; ++ case POWER_SUPPLY_PROP_VOLTAGE_NOW: ++ /* mV -> µV */ ++ RET = is_bat_in() ? get_bat_voltage() * 1000 : 0; ++ break; ++ case POWER_SUPPLY_PROP_TEMP: ++ /* Celcius */ ++ RET = is_bat_in() ? get_bat_temp() : 0; ++ break; ++ case POWER_SUPPLY_PROP_CAPACITY: ++ RET = is_bat_in() ? get_relative_cap() : 0; ++ break; ++ case POWER_SUPPLY_PROP_CAPACITY_LEVEL: { ++ int status; ++ ++ if (!is_bat_in()) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; ++ break; ++ } ++ ++ status = get_bat(STATUS); ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; ++ ++ if (unlikely(status & BIT_BAT_STATUS_DESTROY)) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; ++ break; ++ } ++ ++ if (status & BIT_BAT_STATUS_FULL) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_FULL; ++ else { ++ int curr_cap = get_relative_cap(); ++ ++ if (status & BIT_BAT_STATUS_LOW) { ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_LOW; ++ if (curr_cap <= BAT_CAP_CRITICAL) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; ++ } else if (curr_cap >= BAT_CAP_HIGH) ++ RET = POWER_SUPPLY_CAPACITY_LEVEL_HIGH; ++ } ++ } break; ++ case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW: ++ /* seconds */ ++ RET = is_bat_in() ? (get_relative_cap() - 3) * 54 + 142 : 0; ++ break; ++ case POWER_SUPPLY_PROP_STATUS: { ++ int charge = get_bat(CHARGE); ++ ++ RET = POWER_SUPPLY_STATUS_UNKNOWN; ++ if (charge & FLAG_BAT_CHARGE_DISCHARGE) ++ RET = POWER_SUPPLY_STATUS_DISCHARGING; ++ else if (charge & FLAG_BAT_CHARGE_CHARGE) ++ RET = POWER_SUPPLY_STATUS_CHARGING; ++ } break; ++ case POWER_SUPPLY_PROP_HEALTH: { ++ int status; ++ ++ if (!is_bat_in()) { ++ RET = POWER_SUPPLY_HEALTH_UNKNOWN; ++ break; ++ } ++ ++ status = get_bat(STATUS); ++ RET = POWER_SUPPLY_HEALTH_GOOD; ++ ++ if (status & (BIT_BAT_STATUS_DESTROY | ++ BIT_BAT_STATUS_LOW)) ++ RET = POWER_SUPPLY_HEALTH_DEAD; ++ if (get_bat(CHARGE_STATUS) & ++ BIT_BAT_CHARGE_STATUS_OVERTEMP) ++ RET = POWER_SUPPLY_HEALTH_OVERHEAT; ++ } break; ++ case POWER_SUPPLY_PROP_CHARGE_NOW: /* 1/100(%)*1000 µAh */ ++ RET = get_relative_cap() * get_bat_l(FULLCHG_CAP) * 10; ++ break; ++ default: ++ return -EINVAL; ++ } ++ return 0; ++} ++#undef RET ++ ++static enum power_supply_property yeeloong_bat_props[] = { ++ POWER_SUPPLY_PROP_STATUS, ++ POWER_SUPPLY_PROP_PRESENT, ++ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_FULL, ++ POWER_SUPPLY_PROP_CHARGE_NOW, ++ POWER_SUPPLY_PROP_CURRENT_NOW, ++ POWER_SUPPLY_PROP_VOLTAGE_NOW, ++ POWER_SUPPLY_PROP_HEALTH, ++ POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, ++ POWER_SUPPLY_PROP_CAPACITY, ++ POWER_SUPPLY_PROP_CAPACITY_LEVEL, ++ POWER_SUPPLY_PROP_TEMP, ++ POWER_SUPPLY_PROP_MANUFACTURER, ++}; ++ ++static struct power_supply yeeloong_bat = { ++ .name = "yeeloong-bat", ++ .type = POWER_SUPPLY_TYPE_BATTERY, ++ .properties = yeeloong_bat_props, ++ .num_properties = ARRAY_SIZE(yeeloong_bat_props), ++ .get_property = yeeloong_get_bat_props, ++}; ++ ++static int ac_bat_initialized; ++ ++static int yeeloong_bat_init(void) ++{ ++ int ret; ++ ++ ret = power_supply_register(NULL, &yeeloong_ac); ++ if (ret) ++ return ret; ++ ret = power_supply_register(NULL, &yeeloong_bat); ++ if (ret) { ++ power_supply_unregister(&yeeloong_ac); ++ return ret; ++ } ++ ac_bat_initialized = 1; ++ ++ return 0; ++} ++ ++static void yeeloong_bat_exit(void) ++{ ++ ac_bat_initialized = 0; ++ ++ power_supply_unregister(&yeeloong_ac); ++ power_supply_unregister(&yeeloong_bat); ++} ++/* hwmon subdriver */ ++ ++#define MIN_FAN_SPEED 0 ++#define MAX_FAN_SPEED 3 ++ ++#define get_fan(type) \ ++ ec_read(REG_FAN_##type) ++ ++#define set_fan(type, val) \ ++ ec_write(REG_FAN_##type, val) ++ ++static inline int get_fan_speed_level(void) ++{ ++ return get_fan(SPEED_LEVEL); ++} ++static inline void set_fan_speed_level(int speed) ++{ ++ set_fan(SPEED_LEVEL, speed); ++} ++ ++static inline int get_fan_mode(void) ++{ ++ return get_fan(AUTO_MAN_SWITCH); ++} ++static inline void set_fan_mode(int mode) ++{ ++ set_fan(AUTO_MAN_SWITCH, mode); ++} ++ ++/* ++ * 3 different modes: Full speed(0); manual mode(1); auto mode(2) ++ */ ++static int get_fan_pwm_enable(void) ++{ ++ return (get_fan_mode() == BIT_FAN_AUTO) ? 2 : ++ (get_fan_speed_level() == MAX_FAN_SPEED) ? 0 : 1; ++} ++ ++static void set_fan_pwm_enable(int mode) ++{ ++ set_fan_mode((mode == 2) ? BIT_FAN_AUTO : BIT_FAN_MANUAL); ++ if (mode == 0) ++ set_fan_speed_level(MAX_FAN_SPEED); ++} ++ ++static int get_fan_pwm(void) ++{ ++ return get_fan_speed_level(); ++} ++ ++static void set_fan_pwm(int value) ++{ ++ if (get_fan_mode() != BIT_FAN_MANUAL) ++ return; ++ ++ value = clamp_val(value, MIN_FAN_SPEED, MAX_FAN_SPEED); ++ ++ /* We must ensure the fan is on */ ++ if (value > 0) ++ set_fan(CONTROL, ON); ++ ++ set_fan_speed_level(value); ++} ++ ++static inline int get_fan_speed(void) ++{ ++ return ((get_fan(SPEED_HIGH) & 0x0f) << 8) | get_fan(SPEED_LOW); ++} ++ ++static int get_fan_rpm(void) ++{ ++ return FAN_SPEED_DIVIDER / get_fan_speed(); ++} ++ ++static int get_cpu_temp(void) ++{ ++ return (s8)ec_read(REG_TEMPERATURE_VALUE) * 1000; ++} ++ ++static int get_cpu_temp_max(void) ++{ ++ return 60 * 1000; ++} ++ ++static int get_bat_temp_alarm(void) ++{ ++ return !!(get_bat(CHARGE_STATUS) & BIT_BAT_CHARGE_STATUS_OVERTEMP); ++} ++ ++static ssize_t store_sys_hwmon(void (*set) (int), const char *buf, size_t count) ++{ ++ int ret; ++ unsigned long value; ++ ++ if (!count) ++ return 0; ++ ++ ret = strict_strtoul(buf, 10, &value); ++ if (ret) ++ return ret; ++ ++ set(value); ++ ++ return count; ++} ++ ++static ssize_t show_sys_hwmon(int (*get) (void), char *buf) ++{ ++ return sprintf(buf, "%d\n", get()); ++} ++ ++#define CREATE_SENSOR_ATTR(_name, _mode, _set, _get) \ ++ static ssize_t show_##_name(struct device *dev, \ ++ struct device_attribute *attr, \ ++ char *buf) \ ++ { \ ++ return show_sys_hwmon(_set, buf); \ ++ } \ ++ static ssize_t store_##_name(struct device *dev, \ ++ struct device_attribute *attr, \ ++ const char *buf, size_t count) \ ++ { \ ++ return store_sys_hwmon(_get, buf, count); \ ++ } \ ++ static SENSOR_DEVICE_ATTR(_name, _mode, show_##_name, store_##_name, 0); ++ ++CREATE_SENSOR_ATTR(fan1_input, S_IRUGO, get_fan_rpm, NULL); ++CREATE_SENSOR_ATTR(pwm1, S_IRUGO | S_IWUSR, get_fan_pwm, set_fan_pwm); ++CREATE_SENSOR_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, get_fan_pwm_enable, ++ set_fan_pwm_enable); ++CREATE_SENSOR_ATTR(temp1_input, S_IRUGO, get_cpu_temp, NULL); ++CREATE_SENSOR_ATTR(temp1_max, S_IRUGO, get_cpu_temp_max, NULL); ++CREATE_SENSOR_ATTR(temp2_input, S_IRUGO, get_bat_temp, NULL); ++CREATE_SENSOR_ATTR(temp2_max_alarm, S_IRUGO, get_bat_temp_alarm, NULL); ++CREATE_SENSOR_ATTR(curr1_input, S_IRUGO, get_bat_current, NULL); ++CREATE_SENSOR_ATTR(in1_input, S_IRUGO, get_bat_voltage, NULL); ++ ++static ssize_t ++show_name(struct device *dev, struct device_attribute *attr, char *buf) ++{ ++ return sprintf(buf, "yeeloong\n"); ++} ++ ++static SENSOR_DEVICE_ATTR(name, S_IRUGO, show_name, NULL, 0); ++ ++static struct attribute *hwmon_attributes[] = { ++ &sensor_dev_attr_pwm1.dev_attr.attr, ++ &sensor_dev_attr_pwm1_enable.dev_attr.attr, ++ &sensor_dev_attr_fan1_input.dev_attr.attr, ++ &sensor_dev_attr_temp1_input.dev_attr.attr, ++ &sensor_dev_attr_temp1_max.dev_attr.attr, ++ &sensor_dev_attr_temp2_input.dev_attr.attr, ++ &sensor_dev_attr_temp2_max_alarm.dev_attr.attr, ++ &sensor_dev_attr_curr1_input.dev_attr.attr, ++ &sensor_dev_attr_in1_input.dev_attr.attr, ++ &sensor_dev_attr_name.dev_attr.attr, ++ NULL ++}; ++ ++static struct attribute_group hwmon_attribute_group = { ++ .attrs = hwmon_attributes ++}; ++ ++static struct device *yeeloong_hwmon_dev; ++ ++static int yeeloong_hwmon_init(void) ++{ ++ int ret; ++ ++ yeeloong_hwmon_dev = hwmon_device_register(NULL); ++ if (IS_ERR(yeeloong_hwmon_dev)) { ++ yeeloong_hwmon_dev = NULL; ++ return PTR_ERR(yeeloong_hwmon_dev); ++ } ++ ret = sysfs_create_group(&yeeloong_hwmon_dev->kobj, ++ &hwmon_attribute_group); ++ if (ret) { ++ hwmon_device_unregister(yeeloong_hwmon_dev); ++ yeeloong_hwmon_dev = NULL; ++ return ret; ++ } ++ /* ensure fan is set to auto mode */ ++ set_fan_pwm_enable(2); ++ ++ return 0; ++} ++ ++static void yeeloong_hwmon_exit(void) ++{ ++ if (yeeloong_hwmon_dev) { ++ sysfs_remove_group(&yeeloong_hwmon_dev->kobj, ++ &hwmon_attribute_group); ++ hwmon_device_unregister(yeeloong_hwmon_dev); ++ yeeloong_hwmon_dev = NULL; ++ } ++} ++ ++/* video output subdriver */ ++ ++#define LCD 0 ++#define CRT 1 ++#define VOD_NUM 2 /* The total number of video output device*/ ++ ++static struct output_device *vod[VOD_NUM]; ++ ++static int vor[] = {REG_DISPLAY_LCD, REG_CRT_DETECT}; ++ ++static int get_vo_dev(struct output_device *od) ++{ ++ int i, dev; ++ ++ dev = -1; ++ for (i = 0; i < VOD_NUM; i++) ++ if (od == vod[i]) ++ dev = i; ++ ++ return dev; ++} ++ ++static int vo_get_status(int dev) ++{ ++ return ec_read(vor[dev]); ++} ++ ++static int yeeloong_vo_get_status(struct output_device *od) ++{ ++ int vd; ++ ++ vd = get_vo_dev(od); ++ if (vd != -1) ++ return vo_get_status(vd); ++ ++ return -ENODEV; ++} ++ ++static void vo_set_state(int dev, int state) ++{ ++ int addr; ++ unsigned long value; ++ ++ switch (dev) { ++ case LCD: ++ addr = 0x31; ++ break; ++ case CRT: ++ addr = 0x21; ++ break; ++ default: ++ /* return directly if the wrong video output device */ ++ return; ++ } ++ ++ outb(addr, 0x3c4); ++ value = inb(0x3c5); ++ ++ switch (dev) { ++ case LCD: ++ value |= (state ? 0x03 : 0x02); ++ break; ++ case CRT: ++ if (state) ++ clear_bit(7, &value); ++ else ++ set_bit(7, &value); ++ break; ++ default: ++ break; ++ } ++ ++ outb(addr, 0x3c4); ++ outb(value, 0x3c5); ++ ++ if (dev == LCD) ++ ec_write(REG_BACKLIGHT_CTRL, state); ++} ++ ++static int yeeloong_vo_set_state(struct output_device *od) ++{ ++ int vd; ++ ++ vd = get_vo_dev(od); ++ if (vd == -1) ++ return -ENODEV; ++ ++ if (vd == CRT && !vo_get_status(vd)) ++ return 0; ++ ++ vo_set_state(vd, !!od->request_state); ++ ++ return 0; ++} ++ ++static struct output_properties vop = { ++ .set_state = yeeloong_vo_set_state, ++ .get_status = yeeloong_vo_get_status, ++}; ++ ++static int yeeloong_vo_init(void) ++{ ++ int ret, i; ++ char dev_name[VOD_NUM][4] = {"LCD", "CRT"}; ++ ++ /* Register video output device: lcd, crt */ ++ for (i = 0; i < VOD_NUM; i++) { ++ vod[i] = video_output_register(dev_name[i], NULL, NULL, &vop); ++ if (IS_ERR(vod[i])) { ++ if (i != 0) ++ video_output_unregister(vod[i-1]); ++ ret = PTR_ERR(vod[i]); ++ vod[i] = NULL; ++ return ret; ++ } ++ } ++ /* Ensure LCD is on by default */ ++ vo_set_state(LCD, ON); ++ ++ /* ++ * Turn off CRT by default, and will be enabled when the CRT ++ * connectting event reported by SCI ++ */ ++ vo_set_state(CRT, OFF); ++ ++ return 0; ++} ++ ++static void yeeloong_vo_exit(void) ++{ ++ int i; ++ ++ for (i = 0; i < VOD_NUM; i++) { ++ if (vod[i]) { ++ video_output_unregister(vod[i]); ++ vod[i] = NULL; ++ } ++ } ++} ++ ++/* lcd subdriver */ ++ ++struct lcd_device *lcd[VOD_NUM]; ++ ++static int get_lcd_dev(struct lcd_device *ld) ++{ ++ int i, dev; ++ ++ dev = -1; ++ for (i = 0; i < VOD_NUM; i++) ++ if (ld == lcd[i]) ++ dev = i; ++ ++ return dev; ++} ++ ++static int yeeloong_lcd_set_power(struct lcd_device *ld, int power) ++{ ++ int dev = get_lcd_dev(ld); ++ ++ if (power == FB_BLANK_UNBLANK) ++ vo_set_state(dev, ON); ++ if (power == FB_BLANK_POWERDOWN) ++ vo_set_state(dev, OFF); ++ ++ return 0; ++} ++ ++static int yeeloong_lcd_get_power(struct lcd_device *ld) ++{ ++ return vo_get_status(get_lcd_dev(ld)); ++} ++ ++static struct lcd_ops lcd_ops = { ++ .set_power = yeeloong_lcd_set_power, ++ .get_power = yeeloong_lcd_get_power, ++}; ++ ++static int yeeloong_lcd_init(void) ++{ ++ int ret, i; ++ char dev_name[VOD_NUM][4] = {"LCD", "CRT"}; ++ ++ /* Register video output device: lcd, crt */ ++ for (i = 0; i < VOD_NUM; i++) { ++ lcd[i] = lcd_device_register(dev_name[i], NULL, NULL, &lcd_ops); ++ if (IS_ERR(lcd[i])) { ++ if (i != 0) ++ lcd_device_unregister(lcd[i-1]); ++ ret = PTR_ERR(lcd[i]); ++ lcd[i] = NULL; ++ return ret; ++ } ++ } ++#if 0 ++ /* This has been done by the vide output driver */ ++ ++ /* Ensure LCD is on by default */ ++ vo_set_state(LCD, ON); ++ ++ /* ++ * Turn off CRT by default, and will be enabled when the CRT ++ * connectting event reported by SCI ++ */ ++ vo_set_state(CRT, OFF); ++#endif ++ return 0; ++} ++ ++static void yeeloong_lcd_exit(void) ++{ ++ int i; ++ ++ for (i = 0; i < VOD_NUM; i++) { ++ if (lcd[i]) { ++ lcd_device_unregister(lcd[i]); ++ lcd[i] = NULL; ++ } ++ } ++} ++ ++/* hotkey subdriver */ ++ ++static struct input_dev *yeeloong_hotkey_dev; ++ ++static atomic_t reboot_flag, sleep_flag; ++#define in_sleep() (&sleep_flag) ++#define in_reboot() (&reboot_flag) ++ ++static const struct key_entry yeeloong_keymap[] = { ++ {KE_SW, EVENT_LID, { SW_LID } }, ++ {KE_KEY, EVENT_CAMERA, { KEY_CAMERA } }, /* Fn + ESC */ ++ {KE_KEY, EVENT_SLEEP, { KEY_SLEEP } }, /* Fn + F1 */ ++ {KE_KEY, EVENT_BLACK_SCREEN, { KEY_DISPLAYTOGGLE } }, /* Fn + F2 */ ++ {KE_KEY, EVENT_DISPLAY_TOGGLE, { KEY_SWITCHVIDEOMODE } }, /* Fn + F3 */ ++ {KE_KEY, EVENT_AUDIO_MUTE, { KEY_MUTE } }, /* Fn + F4 */ ++ {KE_KEY, EVENT_WLAN, { KEY_WLAN } }, /* Fn + F5 */ ++ {KE_KEY, EVENT_DISPLAY_BRIGHTNESS, { KEY_BRIGHTNESSUP } }, /* Fn + up */ ++ {KE_KEY, EVENT_DISPLAY_BRIGHTNESS, { KEY_BRIGHTNESSDOWN } }, /* Fn + down */ ++ {KE_KEY, EVENT_AUDIO_VOLUME, { KEY_VOLUMEUP } }, /* Fn + right */ ++ {KE_KEY, EVENT_AUDIO_VOLUME, { KEY_VOLUMEDOWN } }, /* Fn + left */ ++ {KE_END, 0} ++}; ++ ++static int is_fake_event(u16 keycode) ++{ ++ switch (keycode) { ++ case KEY_SLEEP: ++ case SW_LID: ++ return atomic_read(in_sleep()) | atomic_read(in_reboot()); ++ break; ++ default: ++ break; ++ } ++ return 0; ++} ++ ++static struct key_entry *get_event_key_entry(int event, int status) ++{ ++ struct key_entry *ke; ++ static int old_brightness_status = -1; ++ static int old_volume_status = -1; ++ ++ ke = sparse_keymap_entry_from_scancode(yeeloong_hotkey_dev, event); ++ if (!ke) ++ return NULL; ++ ++ switch (event) { ++ case EVENT_DISPLAY_BRIGHTNESS: ++ /* current status > old one, means up */ ++ if ((status < old_brightness_status) || (0 == status)) ++ ke++; ++ old_brightness_status = status; ++ break; ++ case EVENT_AUDIO_VOLUME: ++ if ((status < old_volume_status) || (0 == status)) ++ ke++; ++ old_volume_status = status; ++ break; ++ default: ++ break; ++ } ++ ++ return ke; ++} ++ ++static int report_lid_switch(int status) ++{ ++ static int old_status; ++ ++ /* ++ * LID is a switch button, so, two continuous same status should be ++ * ignored ++ */ ++ if (old_status != status) { ++ input_report_switch(yeeloong_hotkey_dev, SW_LID, !status); ++ input_sync(yeeloong_hotkey_dev); ++ } ++ old_status = status; ++ ++ return status; ++} ++ ++static int crt_detect_handler(int status) ++{ ++ /* ++ * When CRT is inserted, enable its output and disable the LCD output, ++ * otherwise, do reversely. ++ */ ++ vo_set_state(CRT, status); ++ vo_set_state(LCD, !status); ++ ++ return status; ++} ++ ++static int displaytoggle_handler(int status) ++{ ++ /* EC(>=PQ1D26) does this job for us, we can not do it again, ++ * otherwise, the brightness will not resume to the normal level! */ ++ if (ec_version_before("EC_VER=PQ1D26")) ++ vo_set_state(LCD, status); ++ ++ return status; ++} ++ ++static int mypow(int x, int y) ++{ ++ int i, j = x; ++ ++ for (i = 1; i < y; i++) ++ j *= j; ++ ++ return j; ++} ++ ++static int switchvideomode_handler(int status) ++{ ++ /* Default status: CRT|LCD = 0|1 = 1 */ ++ static int bin_state = 1; ++ int i; ++ ++ /* ++ * Only enable switch video output button ++ * when CRT is connected ++ */ ++ if (!vo_get_status(CRT)) ++ return 0; ++ /* ++ * 2. no CRT connected: LCD on, CRT off ++ * 3. BOTH on ++ * 0. BOTH off ++ * 1. LCD off, CRT on ++ */ ++ ++ bin_state++; ++ if (bin_state > mypow(2, VOD_NUM) - 1) ++ bin_state = 0; ++ ++ for (i = 0; i < VOD_NUM; i++) ++ vo_set_state(i, bin_state & (1 << i)); ++ ++ return bin_state; ++} ++ ++static int camera_handler(int status) ++{ ++ int value; ++ ++ value = ec_read(REG_CAMERA_CONTROL); ++ ec_write(REG_CAMERA_CONTROL, value | (1 << 1)); ++ ++ return status; ++} ++ ++static int usb2_handler(int status) ++{ ++ pr_emerg("USB2 Over Current occurred\n"); ++ ++ return status; ++} ++ ++static int usb0_handler(int status) ++{ ++ pr_emerg("USB0 Over Current occurred\n"); ++ ++ return status; ++} ++ ++static int ac_bat_handler(int status) ++{ ++ if (ac_bat_initialized) { ++ power_supply_changed(&yeeloong_ac); ++ power_supply_changed(&yeeloong_bat); ++ } ++ ++ return status; ++} ++ ++struct sci_event { ++ int reg; ++ sci_handler handler; ++}; ++ ++static const struct sci_event se[] = { ++ [EVENT_AC_BAT] = {0, ac_bat_handler}, ++ [EVENT_AUDIO_MUTE] = {REG_AUDIO_MUTE, NULL}, ++ [EVENT_AUDIO_VOLUME] = {REG_AUDIO_VOLUME, NULL}, ++ [EVENT_CRT_DETECT] = {REG_CRT_DETECT, crt_detect_handler}, ++ [EVENT_CAMERA] = {REG_CAMERA_STATUS, camera_handler}, ++ [EVENT_BLACK_SCREEN] = {REG_DISPLAY_LCD, displaytoggle_handler}, ++ [EVENT_DISPLAY_BRIGHTNESS] = {REG_DISPLAY_BRIGHTNESS, NULL}, ++ [EVENT_LID] = {REG_LID_DETECT, NULL}, ++ [EVENT_DISPLAY_TOGGLE] = {0, switchvideomode_handler}, ++ [EVENT_USB_OC0] = {REG_USB2_FLAG, usb0_handler}, ++ [EVENT_USB_OC2] = {REG_USB2_FLAG, usb2_handler}, ++ [EVENT_WLAN] = {REG_WLAN, NULL}, ++}; ++ ++static void do_event_action(int event) ++{ ++ int status = -1; ++ struct key_entry *ke; ++ struct sci_event *sep; ++ ++ sep = (struct sci_event *)&se[event]; ++ ++ if (sep->reg != 0) ++ status = ec_read(sep->reg); ++ ++ if (status == -1) { ++ /* ec_read hasn't been called, status is invalid */ ++ return; ++ } ++ ++ if (sep->handler != NULL) ++ status = sep->handler(status); ++ ++ pr_debug("%s: event: %d status: %d\n", __func__, event, status); ++ ++ /* Report current key to user-space */ ++ ke = get_event_key_entry(event, status); ++ ++ /* ++ * Ignore the LID and SLEEP event when we are already in sleep or ++ * reboot state, this will avoid the recursive pm operations. but note: ++ * the report_lid_switch() called in arch/mips/loongson/lemote-2f/pm.c ++ * is necessary, because it is used to wake the system from sleep ++ * state. In the future, perhaps SW_LID should works like SLEEP, no ++ * need to function as a SWITCH, just report the state when the LID is ++ * closed is enough, this event can tell the software to "SLEEP", no ++ * need to tell the softwares when we are resuming from "SLEEP". ++ */ ++ if (ke && !is_fake_event(ke->keycode)) { ++ if (ke->keycode == SW_LID) ++ report_lid_switch(status); ++ else ++ sparse_keymap_report_entry(yeeloong_hotkey_dev, ke, 1, ++ true); ++ } ++} ++ ++/* ++ * SCI(system control interrupt) main interrupt routine ++ * ++ * We will do the query and get event number together so the interrupt routine ++ * should be longer than 120us now at least 3ms elpase for it. ++ */ ++static irqreturn_t sci_irq_handler(int irq, void *dev_id) ++{ ++ int ret, event; ++ ++ if (SCI_IRQ_NUM != irq) ++ return IRQ_NONE; ++ ++ /* Query the event number */ ++ ret = ec_query_event_num(); ++ if (ret < 0) ++ return IRQ_NONE; ++ ++ event = ec_get_event_num(); ++ if (event < EVENT_START || event > EVENT_END) ++ return IRQ_NONE; ++ ++ /* Execute corresponding actions */ ++ do_event_action(event); ++ ++ return IRQ_HANDLED; ++} ++ ++/* ++ * Config and init some msr and gpio register properly. ++ */ ++static int sci_irq_init(void) ++{ ++ u32 hi, lo; ++ u32 gpio_base; ++ unsigned long flags; ++ int ret; ++ ++ /* Get gpio base */ ++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &lo); ++ gpio_base = lo & 0xff00; ++ ++ /* Filter the former kb3310 interrupt for security */ ++ ret = ec_query_event_num(); ++ if (ret) ++ return ret; ++ ++ /* For filtering next number interrupt */ ++ udelay(10000); ++ ++ /* Set gpio native registers and msrs for GPIO27 SCI EVENT PIN ++ * gpio : ++ * input, pull-up, no-invert, event-count and value 0, ++ * no-filter, no edge mode ++ * gpio27 map to Virtual gpio0 ++ * msr : ++ * no primary and lpc ++ * Unrestricted Z input to IG10 from Virtual gpio 0. ++ */ ++ local_irq_save(flags); ++ _rdmsr(0x80000024, &hi, &lo); ++ lo &= ~(1 << 10); ++ _wrmsr(0x80000024, hi, lo); ++ _rdmsr(0x80000025, &hi, &lo); ++ lo &= ~(1 << 10); ++ _wrmsr(0x80000025, hi, lo); ++ _rdmsr(0x80000023, &hi, &lo); ++ lo |= (0x0a << 0); ++ _wrmsr(0x80000023, hi, lo); ++ local_irq_restore(flags); ++ ++ /* Set gpio27 as sci interrupt ++ * ++ * input, pull-up, no-fliter, no-negedge, invert ++ * the sci event is just about 120us ++ */ ++ asm(".set noreorder\n"); ++ /* input enable */ ++ outl(0x00000800, (gpio_base | 0xA0)); ++ /* revert the input */ ++ outl(0x00000800, (gpio_base | 0xA4)); ++ /* event-int enable */ ++ outl(0x00000800, (gpio_base | 0xB8)); ++ asm(".set reorder\n"); ++ ++ return 0; ++} ++ ++static int notify_reboot(struct notifier_block *nb, unsigned long event, void *buf) ++{ ++ switch (event) { ++ case SYS_RESTART: ++ case SYS_HALT: ++ case SYS_POWER_OFF: ++ atomic_set(in_reboot(), 1); ++ break; ++ default: ++ return NOTIFY_DONE; ++ } ++ ++ return NOTIFY_OK; ++} ++ ++static int notify_pm(struct notifier_block *nb, unsigned long event, void *buf) ++{ ++ switch (event) { ++ case PM_HIBERNATION_PREPARE: ++ case PM_SUSPEND_PREPARE: ++ atomic_inc(in_sleep()); ++ break; ++ case PM_POST_HIBERNATION: ++ case PM_POST_SUSPEND: ++ case PM_RESTORE_PREPARE: /* do we need this ?? */ ++ atomic_dec(in_sleep()); ++ break; ++ default: ++ return NOTIFY_DONE; ++ } ++ ++ pr_debug("%s: event = %lu, in_sleep() = %d\n", __func__, event, ++ atomic_read(in_sleep())); ++ ++ return NOTIFY_OK; ++} ++ ++static struct notifier_block reboot_notifier = { ++ .notifier_call = notify_reboot, ++}; ++ ++static struct notifier_block pm_notifier = { ++ .notifier_call = notify_pm, ++}; ++ ++static int yeeloong_hotkey_init(void) ++{ ++ int ret = 0; ++ ++ ret = register_reboot_notifier(&reboot_notifier); ++ if (ret) { ++ pr_err("Can't register reboot notifier\n"); ++ goto end; ++ } ++ ++ ret = register_pm_notifier(&pm_notifier); ++ if (ret) { ++ pr_err("Can't register pm notifier\n"); ++ goto free_reboot_notifier; ++ } ++ ++ ret = sci_irq_init(); ++ if (ret) { ++ pr_err("Can't init SCI interrupt\n"); ++ goto free_pm_notifier; ++ } ++ ++ ret = request_threaded_irq(SCI_IRQ_NUM, NULL, &sci_irq_handler, ++ IRQF_ONESHOT, "sci", NULL); ++ if (ret) { ++ pr_err("Can't thread SCI interrupt handler\n"); ++ goto free_pm_notifier; ++ } ++ ++ yeeloong_hotkey_dev = input_allocate_device(); ++ ++ if (!yeeloong_hotkey_dev) { ++ ret = -ENOMEM; ++ goto free_irq; ++ } ++ ++ yeeloong_hotkey_dev->name = "HotKeys"; ++ yeeloong_hotkey_dev->phys = "button/input0"; ++ yeeloong_hotkey_dev->id.bustype = BUS_HOST; ++ yeeloong_hotkey_dev->dev.parent = NULL; ++ ++ ret = sparse_keymap_setup(yeeloong_hotkey_dev, yeeloong_keymap, NULL); ++ if (ret) { ++ pr_err("Failed to setup input device keymap\n"); ++ goto free_dev; ++ } ++ ++ ret = input_register_device(yeeloong_hotkey_dev); ++ if (ret) ++ goto free_keymap; ++ ++ /* Update the current status of LID */ ++ report_lid_switch(ON); ++ ++#ifdef CONFIG_LOONGSON_SUSPEND ++ /* Install the real yeeloong_report_lid_status for pm.c */ ++ yeeloong_report_lid_status = report_lid_switch; ++#endif ++ return 0; ++ ++free_keymap: ++ sparse_keymap_free(yeeloong_hotkey_dev); ++free_dev: ++ input_free_device(yeeloong_hotkey_dev); ++free_irq: ++ free_irq(SCI_IRQ_NUM, NULL); ++free_pm_notifier: ++ unregister_pm_notifier(&pm_notifier); ++free_reboot_notifier: ++ unregister_reboot_notifier(&reboot_notifier); ++end: ++ return ret; ++} ++ ++static void yeeloong_hotkey_exit(void) ++{ ++ /* Free irq */ ++ free_irq(SCI_IRQ_NUM, NULL); ++ ++#ifdef CONFIG_LOONGSON_SUSPEND ++ /* Uninstall yeeloong_report_lid_status for pm.c */ ++ if (yeeloong_report_lid_status == report_lid_switch) ++ yeeloong_report_lid_status = NULL; ++#endif ++ ++ if (yeeloong_hotkey_dev) { ++ sparse_keymap_free(yeeloong_hotkey_dev); ++ input_unregister_device(yeeloong_hotkey_dev); ++ yeeloong_hotkey_dev = NULL; ++ } ++} ++ ++#ifdef CONFIG_PM ++static void usb_ports_set(int status) ++{ ++ status = !!status; ++ ++ ec_write(REG_USB0_FLAG, status); ++ ec_write(REG_USB1_FLAG, status); ++ ec_write(REG_USB2_FLAG, status); ++} ++ ++static int yeeloong_suspend(struct device *dev) ++ ++{ ++ if (ec_version_before("EC_VER=PQ1D27")) ++ vo_set_state(LCD, OFF); ++ vo_set_state(CRT, OFF); ++ usb_ports_set(OFF); ++ ++ return 0; ++} ++ ++static int yeeloong_resume(struct device *dev) ++{ ++ int ret; ++ ++ if (ec_version_before("EC_VER=PQ1D27")) ++ vo_set_state(LCD, ON); ++ vo_set_state(CRT, ON); ++ usb_ports_set(ON); ++ ++ ret = sci_irq_init(); ++ if (ret) ++ return -EFAULT; ++ ++ return 0; ++} ++ ++static const SIMPLE_DEV_PM_OPS(yeeloong_pm_ops, yeeloong_suspend, ++ yeeloong_resume); ++#endif ++ ++static struct platform_device_id platform_device_ids[] = { ++ { ++ .name = "yeeloong_laptop", ++ }, ++ {} ++}; ++ ++MODULE_DEVICE_TABLE(platform, platform_device_ids); ++ ++static struct platform_driver platform_driver = { ++ .driver = { ++ .name = "yeeloong_laptop", ++ .owner = THIS_MODULE, ++#ifdef CONFIG_PM ++ .pm = &yeeloong_pm_ops, ++#endif ++ }, ++ .id_table = platform_device_ids, ++}; ++ ++static int __init yeeloong_init(void) ++{ ++ int ret; ++ ++ pr_info("YeeLoong Laptop platform specific driver loaded.\n"); ++ ++ /* Register platform stuff */ ++ ret = platform_driver_register(&platform_driver); ++ if (ret) { ++ pr_err("Failed to register YeeLoong platform driver.\n"); ++ return ret; ++ } ++ ++#define yeeloong_init_drv(drv, alias) do { \ ++ pr_info("Registered YeeLoong " alias " driver.\n"); \ ++ ret = yeeloong_ ## drv ## _init(); \ ++ if (ret) { \ ++ pr_err("Failed to register YeeLoong " alias " driver.\n"); \ ++ yeeloong_ ## drv ## _exit(); \ ++ return ret; \ ++ } \ ++} while (0) ++ ++ yeeloong_init_drv(backlight, "backlight"); ++ yeeloong_init_drv(bat, "battery and AC"); ++ yeeloong_init_drv(hwmon, "hardware monitor"); ++ yeeloong_init_drv(vo, "video output"); ++ yeeloong_init_drv(lcd, "lcd output"); ++ yeeloong_init_drv(hotkey, "hotkey input"); ++ ++ return 0; ++} ++ ++static void __exit yeeloong_exit(void) ++{ ++ yeeloong_hotkey_exit(); ++ yeeloong_lcd_exit(); ++ yeeloong_vo_exit(); ++ yeeloong_hwmon_exit(); ++ yeeloong_bat_exit(); ++ yeeloong_backlight_exit(); ++ platform_driver_unregister(&platform_driver); ++ ++ pr_info("YeeLoong platform specific driver unloaded.\n"); ++} ++ ++module_init(yeeloong_init); ++module_exit(yeeloong_exit); ++ ++MODULE_AUTHOR("Wu Zhangjin ; Liu Junliang "); ++MODULE_DESCRIPTION("YeeLoong laptop driver"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig +index 0754f5c7..ff7475d 100644 +--- a/drivers/rtc/Kconfig ++++ b/drivers/rtc/Kconfig +@@ -680,6 +680,7 @@ comment "Platform RTC drivers" + config RTC_DRV_CMOS + tristate "PC-style 'CMOS'" + depends on X86 || ARM || M32R || PPC || MIPS || SPARC64 ++ depends on !DEXXON_GDIUM + default y if X86 + help + Say "yes" here to get direct support for the real time clock +diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig +index 4f38fc0..f57367c 100644 +--- a/drivers/staging/Kconfig ++++ b/drivers/staging/Kconfig +@@ -80,6 +80,8 @@ source "drivers/staging/wlags49_h2/Kconfig" + + source "drivers/staging/wlags49_h25/Kconfig" + ++source "drivers/staging/sm7xxfb/Kconfig" ++ + source "drivers/staging/crystalhd/Kconfig" + + source "drivers/staging/cxt1e1/Kconfig" +diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile +index 1e97ad2..65a1ff0 100644 +--- a/drivers/staging/Makefile ++++ b/drivers/staging/Makefile +@@ -34,6 +34,7 @@ obj-$(CONFIG_DX_SEP) += sep/ + obj-$(CONFIG_IIO) += iio/ + obj-$(CONFIG_WLAGS49_H2) += wlags49_h2/ + obj-$(CONFIG_WLAGS49_H25) += wlags49_h25/ ++obj-$(CONFIG_FB_SM7XX) += sm7xxfb/ + obj-$(CONFIG_CRYSTALHD) += crystalhd/ + obj-$(CONFIG_CXT1E1) += cxt1e1/ + obj-$(CONFIG_FB_XGI) += xgifb/ +diff --git a/drivers/staging/sm7xxfb/Kconfig b/drivers/staging/sm7xxfb/Kconfig +new file mode 100644 +index 0000000..e2922ae +--- /dev/null ++++ b/drivers/staging/sm7xxfb/Kconfig +@@ -0,0 +1,13 @@ ++config FB_SM7XX ++ tristate "Silicon Motion SM7XX framebuffer support" ++ depends on FB && PCI ++ select FB_CFB_FILLRECT ++ select FB_CFB_COPYAREA ++ select FB_CFB_IMAGEBLIT ++ help ++ Frame buffer driver for the Silicon Motion SM710, SM712, SM721 ++ and SM722 chips. ++ ++ This driver is also available as a module. The module will be ++ called sm7xxfb. If you want to compile it as a module, say M ++ here and read . +diff --git a/drivers/staging/sm7xxfb/Makefile b/drivers/staging/sm7xxfb/Makefile +new file mode 100644 +index 0000000..48f471c +--- /dev/null ++++ b/drivers/staging/sm7xxfb/Makefile +@@ -0,0 +1 @@ ++obj-$(CONFIG_FB_SM7XX) += sm7xxfb.o +diff --git a/drivers/staging/sm7xxfb/TODO b/drivers/staging/sm7xxfb/TODO +new file mode 100644 +index 0000000..1fcead5 +--- /dev/null ++++ b/drivers/staging/sm7xxfb/TODO +@@ -0,0 +1,9 @@ ++TODO: ++- Dual head support ++- 2D acceleration support ++- use kernel coding style ++- refine the code and remove unused code ++- move it to drivers/video/sm7xxfb.c ++ ++Please send any patches to Greg Kroah-Hartman and ++Teddy Wang . +diff --git a/drivers/staging/sm7xxfb/sm7xx.h b/drivers/staging/sm7xxfb/sm7xx.h +new file mode 100644 +index 0000000..8599861 +--- /dev/null ++++ b/drivers/staging/sm7xxfb/sm7xx.h +@@ -0,0 +1,779 @@ ++/* ++ * Silicon Motion SM712 frame buffer device ++ * ++ * Copyright (C) 2006 Silicon Motion Technology Corp. ++ * Authors: Ge Wang, gewang@siliconmotion.com ++ * Boyod boyod.yang@siliconmotion.com.cn ++ * ++ * Copyright (C) 2009 Lemote, Inc. ++ * Author: Wu Zhangjin, wuzhangjin@gmail.com ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ */ ++ ++#define NR_PALETTE 256 ++ ++#define FB_ACCEL_SMI_LYNX 88 ++ ++#define SCREEN_X_RES 1024 ++#define SCREEN_Y_RES 600 ++#define SCREEN_BPP 16 ++ ++/*Assume SM712 graphics chip has 4MB VRAM */ ++#define SM712_VIDEOMEMORYSIZE 0x00400000 ++/*Assume SM722 graphics chip has 8MB VRAM */ ++#define SM722_VIDEOMEMORYSIZE 0x00800000 ++ ++#define dac_reg (0x3c8) ++#define dac_val (0x3c9) ++ ++extern void __iomem *smtc_RegBaseAddress; ++#define smtc_mmiowb(dat, reg) writeb(dat, smtc_RegBaseAddress + reg) ++#define smtc_mmioww(dat, reg) writew(dat, smtc_RegBaseAddress + reg) ++#define smtc_mmiowl(dat, reg) writel(dat, smtc_RegBaseAddress + reg) ++ ++#define smtc_mmiorb(reg) readb(smtc_RegBaseAddress + reg) ++#define smtc_mmiorw(reg) readw(smtc_RegBaseAddress + reg) ++#define smtc_mmiorl(reg) readl(smtc_RegBaseAddress + reg) ++ ++#define SIZE_SR00_SR04 (0x04 - 0x00 + 1) ++#define SIZE_SR10_SR24 (0x24 - 0x10 + 1) ++#define SIZE_SR30_SR75 (0x75 - 0x30 + 1) ++#define SIZE_SR80_SR93 (0x93 - 0x80 + 1) ++#define SIZE_SRA0_SRAF (0xAF - 0xA0 + 1) ++#define SIZE_GR00_GR08 (0x08 - 0x00 + 1) ++#define SIZE_AR00_AR14 (0x14 - 0x00 + 1) ++#define SIZE_CR00_CR18 (0x18 - 0x00 + 1) ++#define SIZE_CR30_CR4D (0x4D - 0x30 + 1) ++#define SIZE_CR90_CRA7 (0xA7 - 0x90 + 1) ++#define SIZE_VPR (0x6C + 1) ++#define SIZE_DPR (0x44 + 1) ++ ++static inline void smtc_crtcw(int reg, int val) ++{ ++ smtc_mmiowb(reg, 0x3d4); ++ smtc_mmiowb(val, 0x3d5); ++} ++ ++static inline unsigned int smtc_crtcr(int reg) ++{ ++ smtc_mmiowb(reg, 0x3d4); ++ return smtc_mmiorb(0x3d5); ++} ++ ++static inline void smtc_grphw(int reg, int val) ++{ ++ smtc_mmiowb(reg, 0x3ce); ++ smtc_mmiowb(val, 0x3cf); ++} ++ ++static inline unsigned int smtc_grphr(int reg) ++{ ++ smtc_mmiowb(reg, 0x3ce); ++ return smtc_mmiorb(0x3cf); ++} ++ ++static inline void smtc_attrw(int reg, int val) ++{ ++ smtc_mmiorb(0x3da); ++ smtc_mmiowb(reg, 0x3c0); ++ smtc_mmiorb(0x3c1); ++ smtc_mmiowb(val, 0x3c0); ++} ++ ++static inline void smtc_seqw(int reg, int val) ++{ ++ smtc_mmiowb(reg, 0x3c4); ++ smtc_mmiowb(val, 0x3c5); ++} ++ ++static inline unsigned int smtc_seqr(int reg) ++{ ++ smtc_mmiowb(reg, 0x3c4); ++ return smtc_mmiorb(0x3c5); ++} ++ ++/* The next structure holds all information relevant for a specific video mode. ++ */ ++ ++struct ModeInit { ++ int mmSizeX; ++ int mmSizeY; ++ int bpp; ++ int hz; ++ unsigned char Init_MISC; ++ unsigned char Init_SR00_SR04[SIZE_SR00_SR04]; ++ unsigned char Init_SR10_SR24[SIZE_SR10_SR24]; ++ unsigned char Init_SR30_SR75[SIZE_SR30_SR75]; ++ unsigned char Init_SR80_SR93[SIZE_SR80_SR93]; ++ unsigned char Init_SRA0_SRAF[SIZE_SRA0_SRAF]; ++ unsigned char Init_GR00_GR08[SIZE_GR00_GR08]; ++ unsigned char Init_AR00_AR14[SIZE_AR00_AR14]; ++ unsigned char Init_CR00_CR18[SIZE_CR00_CR18]; ++ unsigned char Init_CR30_CR4D[SIZE_CR30_CR4D]; ++ unsigned char Init_CR90_CRA7[SIZE_CR90_CRA7]; ++}; ++ ++/********************************************************************** ++ SM712 Mode table. ++ **********************************************************************/ ++struct ModeInit VGAMode[] = { ++ { ++ /* mode#0: 640 x 480 16Bpp 60Hz */ ++ 640, 480, 16, 60, ++ /* Init_MISC */ ++ 0xE3, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x00, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32, ++ 0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32, ++ 0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA, ++ 0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04, ++ 0x00, 0x45, 0x30, 0x30, 0x40, 0x30, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32, ++ 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED, ++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E, ++ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD, ++ 0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00, ++ 0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55, ++ 0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00, ++ 0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, ++ }, ++ }, ++ { ++ /* mode#1: 640 x 480 24Bpp 60Hz */ ++ 640, 480, 24, 60, ++ /* Init_MISC */ ++ 0xE3, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x00, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32, ++ 0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32, ++ 0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA, ++ 0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04, ++ 0x00, 0x45, 0x30, 0x30, 0x40, 0x30, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32, ++ 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED, ++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E, ++ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD, ++ 0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00, ++ 0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55, ++ 0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00, ++ 0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, ++ }, ++ }, ++ { ++ /* mode#0: 640 x 480 32Bpp 60Hz */ ++ 640, 480, 32, 60, ++ /* Init_MISC */ ++ 0xE3, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x00, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32, ++ 0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32, ++ 0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA, ++ 0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04, ++ 0x00, 0x45, 0x30, 0x30, 0x40, 0x30, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32, ++ 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED, ++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E, ++ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD, ++ 0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00, ++ 0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55, ++ 0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00, ++ 0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, ++ }, ++ }, ++ ++ { /* mode#2: 800 x 600 16Bpp 60Hz */ ++ 800, 600, 16, 60, ++ /* Init_MISC */ ++ 0x2B, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x03, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24, ++ 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24, ++ 0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58, ++ 0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24, ++ 0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13, ++ 0x02, 0x45, 0x30, 0x35, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24, ++ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED, ++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD, ++ 0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00, ++ 0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA, ++ 0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00, ++ 0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00, ++ }, ++ }, ++ { /* mode#3: 800 x 600 24Bpp 60Hz */ ++ 800, 600, 24, 60, ++ 0x2B, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x03, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x36, 0x03, 0x20, 0x09, 0xC0, 0x36, 0x36, 0x36, ++ 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x36, 0x36, 0x36, ++ 0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58, ++ 0x04, 0x55, 0x59, 0x36, 0x36, 0x00, 0x00, 0x36, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13, ++ 0x02, 0x45, 0x30, 0x30, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x36, ++ 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x36, 0x36, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED, ++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD, ++ 0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00, ++ 0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA, ++ 0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00, ++ 0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00, ++ }, ++ }, ++ { /* mode#7: 800 x 600 32Bpp 60Hz */ ++ 800, 600, 32, 60, ++ /* Init_MISC */ ++ 0x2B, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x03, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24, ++ 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24, ++ 0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58, ++ 0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24, ++ 0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13, ++ 0x02, 0x45, 0x30, 0x35, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24, ++ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED, ++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD, ++ 0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00, ++ 0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA, ++ 0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00, ++ 0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00, ++ }, ++ }, ++ /* We use 1024x768 table to light 1024x600 panel for lemote */ ++ { /* mode#4: 1024 x 600 16Bpp 60Hz */ ++ 1024, 600, 16, 60, ++ /* Init_MISC */ ++ 0xEB, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x00, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xC8, 0x40, 0x14, 0x60, 0x00, 0x0A, 0x17, 0x20, ++ 0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x00, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x22, 0x03, 0x24, 0x09, 0xC0, 0x22, 0x22, 0x22, ++ 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x22, 0x22, 0x22, ++ 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03, ++ 0x00, 0x60, 0x59, 0x22, 0x22, 0x00, 0x00, 0x22, ++ 0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x16, 0x02, 0x0D, 0x82, 0x09, 0x02, ++ 0x04, 0x45, 0x3F, 0x30, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A, ++ 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED, ++ 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF, ++ 0xA3, 0x7F, 0x00, 0x82, 0x0b, 0x6f, 0x57, 0x00, ++ 0x5c, 0x0f, 0xE0, 0xe0, 0x7F, 0x57, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26, ++ 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00, ++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03, ++ }, ++ }, ++ { /* mode#5: 1024 x 768 24Bpp 60Hz */ ++ 1024, 768, 24, 60, ++ /* Init_MISC */ ++ 0xEB, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x03, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x30, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A, ++ 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A, ++ 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03, ++ 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02, ++ 0x04, 0x45, 0x30, 0x30, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A, ++ 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED, ++ 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF, ++ 0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00, ++ 0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26, ++ 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00, ++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03, ++ }, ++ }, ++ { /* mode#4: 1024 x 768 32Bpp 60Hz */ ++ 1024, 768, 32, 60, ++ /* Init_MISC */ ++ 0xEB, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x03, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x32, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A, ++ 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A, ++ 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03, ++ 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02, ++ 0x04, 0x45, 0x30, 0x30, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A, ++ 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED, ++ 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20, ++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF, ++ 0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00, ++ 0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26, ++ 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00, ++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03, ++ }, ++ }, ++ { /* mode#6: 320 x 240 16Bpp 60Hz */ ++ 320, 240, 16, 60, ++ /* Init_MISC */ ++ 0xEB, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x03, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x32, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A, ++ 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A, ++ 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03, ++ 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43, ++ 0x04, 0x45, 0x30, 0x30, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A, ++ 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED, ++ 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20, ++ 0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF, ++ 0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00, ++ 0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26, ++ 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00, ++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03, ++ }, ++ }, ++ ++ { /* mode#8: 320 x 240 32Bpp 60Hz */ ++ 320, 240, 32, 60, ++ /* Init_MISC */ ++ 0xEB, ++ { /* Init_SR0_SR4 */ ++ 0x03, 0x01, 0x0F, 0x03, 0x0E, ++ }, ++ { /* Init_SR10_SR24 */ ++ 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C, ++ 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xC4, 0x32, 0x02, 0x01, 0x01, ++ }, ++ { /* Init_SR30_SR75 */ ++ 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A, ++ 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF, ++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC, ++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A, ++ 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03, ++ 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A, ++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00, ++ 0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43, ++ 0x04, 0x45, 0x30, 0x30, 0x40, 0x20, ++ }, ++ { /* Init_SR80_SR93 */ ++ 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A, ++ 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A, ++ 0x00, 0x00, 0x00, 0x00, ++ }, ++ { /* Init_SRA0_SRAF */ ++ 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED, ++ 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF, ++ }, ++ { /* Init_GR00_GR08 */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, ++ 0xFF, ++ }, ++ { /* Init_AR00_AR14 */ ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, ++ 0x41, 0x00, 0x0F, 0x00, 0x00, ++ }, ++ { /* Init_CR00_CR18 */ ++ 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5, ++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3, ++ 0xFF, ++ }, ++ { /* Init_CR30_CR4D */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20, ++ 0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF, ++ 0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00, ++ 0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF, ++ }, ++ { /* Init_CR90_CRA7 */ ++ 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26, ++ 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00, ++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03, ++ }, ++ }, ++}; ++ ++#define numVGAModes ARRAY_SIZE(VGAMode) +diff --git a/drivers/staging/sm7xxfb/sm7xxfb.c b/drivers/staging/sm7xxfb/sm7xxfb.c +new file mode 100644 +index 0000000..e40ce80 +--- /dev/null ++++ b/drivers/staging/sm7xxfb/sm7xxfb.c +@@ -0,0 +1,1029 @@ ++/* ++ * Silicon Motion SM7XX frame buffer device ++ * ++ * Copyright (C) 2006 Silicon Motion Technology Corp. ++ * Authors: Ge Wang, gewang@siliconmotion.com ++ * Boyod boyod.yang@siliconmotion.com.cn ++ * ++ * Copyright (C) 2009 Lemote, Inc. ++ * Author: Wu Zhangjin, wuzhangjin@gmail.com ++ * ++ * Copyright (C) 2011 Igalia, S.L. ++ * Author: Javier M. Mellid ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * Framebuffer driver for Silicon Motion SM710, SM712, SM721 and SM722 chips ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef CONFIG_PM ++#include ++#endif ++ ++#include "sm7xx.h" ++ ++/* ++* Private structure ++*/ ++struct smtcfb_info { ++ struct pci_dev *pdev; ++ struct fb_info fb; ++ u16 chip_id; ++ u8 chip_rev_id; ++ ++ void __iomem *lfb; /* linear frame buffer */ ++ void __iomem *dp_regs; /* drawing processor control regs */ ++ void __iomem *vp_regs; /* video processor control regs */ ++ void __iomem *cp_regs; /* capture processor control regs */ ++ void __iomem *mmio; /* memory map IO port */ ++ ++ u_int width; ++ u_int height; ++ u_int hz; ++ ++ u32 colreg[17]; ++}; ++ ++void __iomem *smtc_RegBaseAddress; /* Memory Map IO starting address */ ++ ++static struct fb_var_screeninfo smtcfb_var = { ++ .xres = 1024, ++ .yres = 600, ++ .xres_virtual = 1024, ++ .yres_virtual = 600, ++ .bits_per_pixel = 16, ++ .red = {16, 8, 0}, ++ .green = {8, 8, 0}, ++ .blue = {0, 8, 0}, ++ .activate = FB_ACTIVATE_NOW, ++ .height = -1, ++ .width = -1, ++ .vmode = FB_VMODE_NONINTERLACED, ++ .nonstd = 0, ++ .accel_flags = FB_ACCELF_TEXT, ++}; ++ ++static struct fb_fix_screeninfo smtcfb_fix = { ++ .id = "smXXXfb", ++ .type = FB_TYPE_PACKED_PIXELS, ++ .visual = FB_VISUAL_TRUECOLOR, ++ .line_length = 800 * 3, ++ .accel = FB_ACCEL_SMI_LYNX, ++ .type_aux = 0, ++ .xpanstep = 0, ++ .ypanstep = 0, ++ .ywrapstep = 0, ++}; ++ ++struct vesa_mode { ++ char index[6]; ++ u16 lfb_width; ++ u16 lfb_height; ++ u16 lfb_depth; ++}; ++ ++static struct vesa_mode vesa_mode_table[] = { ++ {"0x301", 640, 480, 8}, ++ {"0x303", 800, 600, 8}, ++ {"0x305", 1024, 768, 8}, ++ {"0x307", 1280, 1024, 8}, ++ ++ {"0x311", 640, 480, 16}, ++ {"0x313", 800, 480, 16}, ++ {"0x314", 800, 600, 16}, ++ {"0x317", 1024, 768, 16}, ++ {"0x31A", 1280, 1024, 16}, ++ ++ {"0x312", 640, 480, 24}, ++ {"0x315", 800, 600, 24}, ++ {"0x318", 1024, 768, 24}, ++ {"0x31B", 1280, 1024, 24}, ++}; ++ ++struct screen_info smtc_scr_info; ++ ++/* process command line options, get vga parameter */ ++static int __init sm7xx_vga_setup(char *options) ++{ ++ int i; ++ ++ if (!options || !*options) ++ return -EINVAL; ++ ++ smtc_scr_info.lfb_width = 0; ++ smtc_scr_info.lfb_height = 0; ++ smtc_scr_info.lfb_depth = 0; ++ ++ pr_debug("sm7xx_vga_setup = %s\n", options); ++ ++ for (i = 0; i < ARRAY_SIZE(vesa_mode_table); i++) { ++ if (strstr(options, vesa_mode_table[i].index)) { ++ smtc_scr_info.lfb_width = vesa_mode_table[i].lfb_width; ++ smtc_scr_info.lfb_height = ++ vesa_mode_table[i].lfb_height; ++ smtc_scr_info.lfb_depth = vesa_mode_table[i].lfb_depth; ++ return 0; ++ } ++ } ++ ++ return -1; ++} ++__setup("vga=", sm7xx_vga_setup); ++ ++static void sm712_setpalette(int regno, unsigned red, unsigned green, ++ unsigned blue, struct fb_info *info) ++{ ++ /* set bit 5:4 = 01 (write LCD RAM only) */ ++ smtc_seqw(0x66, (smtc_seqr(0x66) & 0xC3) | 0x10); ++ ++ smtc_mmiowb(regno, dac_reg); ++ smtc_mmiowb(red >> 10, dac_val); ++ smtc_mmiowb(green >> 10, dac_val); ++ smtc_mmiowb(blue >> 10, dac_val); ++} ++ ++/* chan_to_field ++ * ++ * convert a colour value into a field position ++ * ++ * from pxafb.c ++ */ ++ ++static inline unsigned int chan_to_field(unsigned int chan, ++ struct fb_bitfield *bf) ++{ ++ chan &= 0xffff; ++ chan >>= 16 - bf->length; ++ return chan << bf->offset; ++} ++ ++static int smtc_blank(int blank_mode, struct fb_info *info) ++{ ++ /* clear DPMS setting */ ++ switch (blank_mode) { ++ case FB_BLANK_UNBLANK: ++ /* Screen On: HSync: On, VSync : On */ ++ smtc_seqw(0x01, (smtc_seqr(0x01) & (~0x20))); ++ smtc_seqw(0x6a, 0x16); ++ smtc_seqw(0x6b, 0x02); ++ smtc_seqw(0x21, (smtc_seqr(0x21) & 0x77)); ++ smtc_seqw(0x22, (smtc_seqr(0x22) & (~0x30))); ++ smtc_seqw(0x23, (smtc_seqr(0x23) & (~0xc0))); ++ smtc_seqw(0x24, (smtc_seqr(0x24) | 0x01)); ++ smtc_seqw(0x31, (smtc_seqr(0x31) | 0x03)); ++ break; ++ case FB_BLANK_NORMAL: ++ /* Screen Off: HSync: On, VSync : On Soft blank */ ++ smtc_seqw(0x01, (smtc_seqr(0x01) & (~0x20))); ++ smtc_seqw(0x6a, 0x16); ++ smtc_seqw(0x6b, 0x02); ++ smtc_seqw(0x22, (smtc_seqr(0x22) & (~0x30))); ++ smtc_seqw(0x23, (smtc_seqr(0x23) & (~0xc0))); ++ smtc_seqw(0x24, (smtc_seqr(0x24) | 0x01)); ++ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00)); ++ break; ++ case FB_BLANK_VSYNC_SUSPEND: ++ /* Screen On: HSync: On, VSync : Off */ ++ smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20)); ++ smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0))); ++ smtc_seqw(0x6a, 0x0c); ++ smtc_seqw(0x6b, 0x02); ++ smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88)); ++ smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x20)); ++ smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0x20)); ++ smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01))); ++ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00)); ++ smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80)); ++ break; ++ case FB_BLANK_HSYNC_SUSPEND: ++ /* Screen On: HSync: Off, VSync : On */ ++ smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20)); ++ smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0))); ++ smtc_seqw(0x6a, 0x0c); ++ smtc_seqw(0x6b, 0x02); ++ smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88)); ++ smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x10)); ++ smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0xD8)); ++ smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01))); ++ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00)); ++ smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80)); ++ break; ++ case FB_BLANK_POWERDOWN: ++ /* Screen On: HSync: Off, VSync : Off */ ++ smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20)); ++ smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0))); ++ smtc_seqw(0x6a, 0x0c); ++ smtc_seqw(0x6b, 0x02); ++ smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88)); ++ smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x30)); ++ smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0xD8)); ++ smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01))); ++ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00)); ++ smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80)); ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ ++static int smtc_setcolreg(unsigned regno, unsigned red, unsigned green, ++ unsigned blue, unsigned trans, struct fb_info *info) ++{ ++ struct smtcfb_info *sfb; ++ u32 val; ++ ++ sfb = info->par; ++ ++ if (regno > 255) ++ return 1; ++ ++ switch (sfb->fb.fix.visual) { ++ case FB_VISUAL_DIRECTCOLOR: ++ case FB_VISUAL_TRUECOLOR: ++ /* ++ * 16/32 bit true-colour, use pseudo-palette for 16 base color ++ */ ++ if (regno < 16) { ++ if (sfb->fb.var.bits_per_pixel == 16) { ++ u32 *pal = sfb->fb.pseudo_palette; ++ val = chan_to_field(red, &sfb->fb.var.red); ++ val |= chan_to_field(green, &sfb->fb.var.green); ++ val |= chan_to_field(blue, &sfb->fb.var.blue); ++#ifdef __BIG_ENDIAN ++ pal[regno] = ++ ((red & 0xf800) >> 8) | ++ ((green & 0xe000) >> 13) | ++ ((green & 0x1c00) << 3) | ++ ((blue & 0xf800) >> 3); ++#else ++ pal[regno] = val; ++#endif ++ } else { ++ u32 *pal = sfb->fb.pseudo_palette; ++ val = chan_to_field(red, &sfb->fb.var.red); ++ val |= chan_to_field(green, &sfb->fb.var.green); ++ val |= chan_to_field(blue, &sfb->fb.var.blue); ++#ifdef __BIG_ENDIAN ++ val = ++ (val & 0xff00ff00 >> 8) | ++ (val & 0x00ff00ff << 8); ++#endif ++ pal[regno] = val; ++ } ++ } ++ break; ++ ++ case FB_VISUAL_PSEUDOCOLOR: ++ /* color depth 8 bit */ ++ sm712_setpalette(regno, red, green, blue, info); ++ break; ++ ++ default: ++ return 1; /* unknown type */ ++ } ++ ++ return 0; ++ ++} ++ ++#ifdef __BIG_ENDIAN ++static ssize_t smtcfb_read(struct fb_info *info, char __user *buf, size_t ++ count, loff_t *ppos) ++{ ++ unsigned long p = *ppos; ++ ++ u32 *buffer, *dst; ++ u32 __iomem *src; ++ int c, i, cnt = 0, err = 0; ++ unsigned long total_size; ++ ++ if (!info || !info->screen_base) ++ return -ENODEV; ++ ++ if (info->state != FBINFO_STATE_RUNNING) ++ return -EPERM; ++ ++ total_size = info->screen_size; ++ ++ if (total_size == 0) ++ total_size = info->fix.smem_len; ++ ++ if (p >= total_size) ++ return 0; ++ ++ if (count >= total_size) ++ count = total_size; ++ ++ if (count + p > total_size) ++ count = total_size - p; ++ ++ buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL); ++ if (!buffer) ++ return -ENOMEM; ++ ++ src = (u32 __iomem *) (info->screen_base + p); ++ ++ if (info->fbops->fb_sync) ++ info->fbops->fb_sync(info); ++ ++ while (count) { ++ c = (count > PAGE_SIZE) ? PAGE_SIZE : count; ++ dst = buffer; ++ for (i = c >> 2; i--;) { ++ *dst = fb_readl(src++); ++ *dst = ++ (*dst & 0xff00ff00 >> 8) | ++ (*dst & 0x00ff00ff << 8); ++ dst++; ++ } ++ if (c & 3) { ++ u8 *dst8 = (u8 *) dst; ++ u8 __iomem *src8 = (u8 __iomem *) src; ++ ++ for (i = c & 3; i--;) { ++ if (i & 1) { ++ *dst8++ = fb_readb(++src8); ++ } else { ++ *dst8++ = fb_readb(--src8); ++ src8 += 2; ++ } ++ } ++ src = (u32 __iomem *) src8; ++ } ++ ++ if (copy_to_user(buf, buffer, c)) { ++ err = -EFAULT; ++ break; ++ } ++ *ppos += c; ++ buf += c; ++ cnt += c; ++ count -= c; ++ } ++ ++ kfree(buffer); ++ ++ return (err) ? err : cnt; ++} ++ ++static ssize_t ++smtcfb_write(struct fb_info *info, const char __user *buf, size_t count, ++ loff_t *ppos) ++{ ++ unsigned long p = *ppos; ++ ++ u32 *buffer, *src; ++ u32 __iomem *dst; ++ int c, i, cnt = 0, err = 0; ++ unsigned long total_size; ++ ++ if (!info || !info->screen_base) ++ return -ENODEV; ++ ++ if (info->state != FBINFO_STATE_RUNNING) ++ return -EPERM; ++ ++ total_size = info->screen_size; ++ ++ if (total_size == 0) ++ total_size = info->fix.smem_len; ++ ++ if (p > total_size) ++ return -EFBIG; ++ ++ if (count > total_size) { ++ err = -EFBIG; ++ count = total_size; ++ } ++ ++ if (count + p > total_size) { ++ if (!err) ++ err = -ENOSPC; ++ ++ count = total_size - p; ++ } ++ ++ buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL); ++ if (!buffer) ++ return -ENOMEM; ++ ++ dst = (u32 __iomem *) (info->screen_base + p); ++ ++ if (info->fbops->fb_sync) ++ info->fbops->fb_sync(info); ++ ++ while (count) { ++ c = (count > PAGE_SIZE) ? PAGE_SIZE : count; ++ src = buffer; ++ ++ if (copy_from_user(src, buf, c)) { ++ err = -EFAULT; ++ break; ++ } ++ ++ for (i = c >> 2; i--;) { ++ fb_writel((*src & 0xff00ff00 >> 8) | ++ (*src & 0x00ff00ff << 8), dst++); ++ src++; ++ } ++ if (c & 3) { ++ u8 *src8 = (u8 *) src; ++ u8 __iomem *dst8 = (u8 __iomem *) dst; ++ ++ for (i = c & 3; i--;) { ++ if (i & 1) { ++ fb_writeb(*src8++, ++dst8); ++ } else { ++ fb_writeb(*src8++, --dst8); ++ dst8 += 2; ++ } ++ } ++ dst = (u32 __iomem *) dst8; ++ } ++ ++ *ppos += c; ++ buf += c; ++ cnt += c; ++ count -= c; ++ } ++ ++ kfree(buffer); ++ ++ return (cnt) ? cnt : err; ++} ++#endif /* ! __BIG_ENDIAN */ ++ ++static void sm7xx_set_timing(struct smtcfb_info *sfb) ++{ ++ int i = 0, j = 0; ++ u32 m_nScreenStride; ++ ++ dev_dbg(&sfb->pdev->dev, ++ "sfb->width=%d sfb->height=%d " ++ "sfb->fb.var.bits_per_pixel=%d sfb->hz=%d\n", ++ sfb->width, sfb->height, sfb->fb.var.bits_per_pixel, sfb->hz); ++ ++ for (j = 0; j < numVGAModes; j++) { ++ if (VGAMode[j].mmSizeX == sfb->width && ++ VGAMode[j].mmSizeY == sfb->height && ++ VGAMode[j].bpp == sfb->fb.var.bits_per_pixel && ++ VGAMode[j].hz == sfb->hz) { ++ ++ dev_dbg(&sfb->pdev->dev, ++ "VGAMode[j].mmSizeX=%d VGAMode[j].mmSizeY=%d " ++ "VGAMode[j].bpp=%d VGAMode[j].hz=%d\n", ++ VGAMode[j].mmSizeX, VGAMode[j].mmSizeY, ++ VGAMode[j].bpp, VGAMode[j].hz); ++ ++ dev_dbg(&sfb->pdev->dev, "VGAMode index=%d\n", j); ++ ++ smtc_mmiowb(0x0, 0x3c6); ++ ++ smtc_seqw(0, 0x1); ++ ++ smtc_mmiowb(VGAMode[j].Init_MISC, 0x3c2); ++ ++ /* init SEQ register SR00 - SR04 */ ++ for (i = 0; i < SIZE_SR00_SR04; i++) ++ smtc_seqw(i, VGAMode[j].Init_SR00_SR04[i]); ++ ++ /* init SEQ register SR10 - SR24 */ ++ for (i = 0; i < SIZE_SR10_SR24; i++) ++ smtc_seqw(i + 0x10, ++ VGAMode[j].Init_SR10_SR24[i]); ++ ++ /* init SEQ register SR30 - SR75 */ ++ for (i = 0; i < SIZE_SR30_SR75; i++) ++ if ((i + 0x30) != 0x62 && ++ (i + 0x30) != 0x6a && ++ (i + 0x30) != 0x6b) ++ smtc_seqw(i + 0x30, ++ VGAMode[j].Init_SR30_SR75[i]); ++ ++ /* init SEQ register SR80 - SR93 */ ++ for (i = 0; i < SIZE_SR80_SR93; i++) ++ smtc_seqw(i + 0x80, ++ VGAMode[j].Init_SR80_SR93[i]); ++ ++ /* init SEQ register SRA0 - SRAF */ ++ for (i = 0; i < SIZE_SRA0_SRAF; i++) ++ smtc_seqw(i + 0xa0, ++ VGAMode[j].Init_SRA0_SRAF[i]); ++ ++ /* init Graphic register GR00 - GR08 */ ++ for (i = 0; i < SIZE_GR00_GR08; i++) ++ smtc_grphw(i, VGAMode[j].Init_GR00_GR08[i]); ++ ++ /* init Attribute register AR00 - AR14 */ ++ for (i = 0; i < SIZE_AR00_AR14; i++) ++ smtc_attrw(i, VGAMode[j].Init_AR00_AR14[i]); ++ ++ /* init CRTC register CR00 - CR18 */ ++ for (i = 0; i < SIZE_CR00_CR18; i++) ++ smtc_crtcw(i, VGAMode[j].Init_CR00_CR18[i]); ++ ++ /* init CRTC register CR30 - CR4D */ ++ for (i = 0; i < SIZE_CR30_CR4D; i++) ++ smtc_crtcw(i + 0x30, ++ VGAMode[j].Init_CR30_CR4D[i]); ++ ++ /* init CRTC register CR90 - CRA7 */ ++ for (i = 0; i < SIZE_CR90_CRA7; i++) ++ smtc_crtcw(i + 0x90, ++ VGAMode[j].Init_CR90_CRA7[i]); ++ } ++ } ++ smtc_mmiowb(0x67, 0x3c2); ++ ++ /* set VPR registers */ ++ writel(0x0, sfb->vp_regs + 0x0C); ++ writel(0x0, sfb->vp_regs + 0x40); ++ ++ /* set data width */ ++ m_nScreenStride = ++ (sfb->width * sfb->fb.var.bits_per_pixel) / 64; ++ switch (sfb->fb.var.bits_per_pixel) { ++ case 8: ++ writel(0x0, sfb->vp_regs + 0x0); ++ break; ++ case 16: ++ writel(0x00020000, sfb->vp_regs + 0x0); ++ break; ++ case 24: ++ writel(0x00040000, sfb->vp_regs + 0x0); ++ break; ++ case 32: ++ writel(0x00030000, sfb->vp_regs + 0x0); ++ break; ++ } ++ writel((u32) (((m_nScreenStride + 2) << 16) | m_nScreenStride), ++ sfb->vp_regs + 0x10); ++ ++} ++ ++static void smtc_set_timing(struct smtcfb_info *sfb) ++{ ++ switch (sfb->chip_id) { ++ case 0x710: ++ case 0x712: ++ case 0x720: ++ sm7xx_set_timing(sfb); ++ break; ++ } ++} ++ ++static void smtcfb_setmode(struct smtcfb_info *sfb) ++{ ++ switch (sfb->fb.var.bits_per_pixel) { ++ case 32: ++ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR; ++ sfb->fb.fix.line_length = sfb->fb.var.xres * 4; ++ sfb->fb.var.red.length = 8; ++ sfb->fb.var.green.length = 8; ++ sfb->fb.var.blue.length = 8; ++ sfb->fb.var.red.offset = 16; ++ sfb->fb.var.green.offset = 8; ++ sfb->fb.var.blue.offset = 0; ++ break; ++ case 24: ++ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR; ++ sfb->fb.fix.line_length = sfb->fb.var.xres * 3; ++ sfb->fb.var.red.length = 8; ++ sfb->fb.var.green.length = 8; ++ sfb->fb.var.blue.length = 8; ++ sfb->fb.var.red.offset = 16; ++ sfb->fb.var.green.offset = 8; ++ sfb->fb.var.blue.offset = 0; ++ break; ++ case 8: ++ sfb->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR; ++ sfb->fb.fix.line_length = sfb->fb.var.xres; ++ sfb->fb.var.red.length = 3; ++ sfb->fb.var.green.length = 3; ++ sfb->fb.var.blue.length = 2; ++ sfb->fb.var.red.offset = 5; ++ sfb->fb.var.green.offset = 2; ++ sfb->fb.var.blue.offset = 0; ++ break; ++ case 16: ++ default: ++ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR; ++ sfb->fb.fix.line_length = sfb->fb.var.xres * 2; ++ sfb->fb.var.red.length = 5; ++ sfb->fb.var.green.length = 6; ++ sfb->fb.var.blue.length = 5; ++ sfb->fb.var.red.offset = 11; ++ sfb->fb.var.green.offset = 5; ++ sfb->fb.var.blue.offset = 0; ++ break; ++ } ++ ++ sfb->width = sfb->fb.var.xres; ++ sfb->height = sfb->fb.var.yres; ++ sfb->hz = 60; ++ smtc_set_timing(sfb); ++} ++ ++static int smtc_check_var(struct fb_var_screeninfo *var, struct fb_info *info) ++{ ++ /* sanity checks */ ++ if (var->xres_virtual < var->xres) ++ var->xres_virtual = var->xres; ++ ++ if (var->yres_virtual < var->yres) ++ var->yres_virtual = var->yres; ++ ++ /* set valid default bpp */ ++ if ((var->bits_per_pixel != 8) && (var->bits_per_pixel != 16) && ++ (var->bits_per_pixel != 24) && (var->bits_per_pixel != 32)) ++ var->bits_per_pixel = 16; ++ ++ return 0; ++} ++ ++static int smtc_set_par(struct fb_info *info) ++{ ++ smtcfb_setmode(info->par); ++ ++ return 0; ++} ++ ++static struct fb_ops smtcfb_ops = { ++ .owner = THIS_MODULE, ++ .fb_check_var = smtc_check_var, ++ .fb_set_par = smtc_set_par, ++ .fb_setcolreg = smtc_setcolreg, ++ .fb_blank = smtc_blank, ++ .fb_fillrect = cfb_fillrect, ++ .fb_imageblit = cfb_imageblit, ++ .fb_copyarea = cfb_copyarea, ++#ifdef __BIG_ENDIAN ++ .fb_read = smtcfb_read, ++ .fb_write = smtcfb_write, ++#endif ++}; ++ ++/* ++ * alloc struct smtcfb_info and assign default values ++ */ ++static struct smtcfb_info *smtc_alloc_fb_info(struct pci_dev *pdev) ++{ ++ struct smtcfb_info *sfb; ++ ++ sfb = kzalloc(sizeof(*sfb), GFP_KERNEL); ++ ++ if (!sfb) ++ return NULL; ++ ++ sfb->pdev = pdev; ++ ++ sfb->fb.flags = FBINFO_FLAG_DEFAULT; ++ sfb->fb.fbops = &smtcfb_ops; ++ sfb->fb.fix = smtcfb_fix; ++ sfb->fb.var = smtcfb_var; ++ sfb->fb.pseudo_palette = sfb->colreg; ++ sfb->fb.par = sfb; ++ ++ return sfb; ++} ++ ++/* ++ * free struct smtcfb_info ++ */ ++static void smtc_free_fb_info(struct smtcfb_info *sfb) ++{ ++ kfree(sfb); ++} ++ ++/* ++ * Unmap in the memory mapped IO registers ++ */ ++ ++static void smtc_unmap_mmio(struct smtcfb_info *sfb) ++{ ++ if (sfb && smtc_RegBaseAddress) ++ smtc_RegBaseAddress = NULL; ++} ++ ++/* ++ * Map in the screen memory ++ */ ++ ++static int smtc_map_smem(struct smtcfb_info *sfb, ++ struct pci_dev *pdev, u_long smem_len) ++{ ++ ++ sfb->fb.fix.smem_start = pci_resource_start(pdev, 0); ++ ++#ifdef __BIG_ENDIAN ++ if (sfb->fb.var.bits_per_pixel == 32) ++ sfb->fb.fix.smem_start += 0x800000; ++#endif ++ ++ sfb->fb.fix.smem_len = smem_len; ++ ++ sfb->fb.screen_base = sfb->lfb; ++ ++ if (!sfb->fb.screen_base) { ++ dev_err(&pdev->dev, ++ "%s: unable to map screen memory\n", sfb->fb.fix.id); ++ return -ENOMEM; ++ } ++ ++ return 0; ++} ++ ++/* ++ * Unmap in the screen memory ++ * ++ */ ++static void smtc_unmap_smem(struct smtcfb_info *sfb) ++{ ++ if (sfb && sfb->fb.screen_base) { ++ iounmap(sfb->fb.screen_base); ++ sfb->fb.screen_base = NULL; ++ } ++} ++ ++/* ++ * We need to wake up the device and make sure its in linear memory mode. ++ */ ++static inline void sm7xx_init_hw(void) ++{ ++ outb_p(0x18, 0x3c4); ++ outb_p(0x11, 0x3c5); ++} ++ ++static int smtcfb_pci_probe(struct pci_dev *pdev, ++ const struct pci_device_id *ent) ++{ ++ struct smtcfb_info *sfb; ++ u_long smem_size = 0x00800000; /* default 8MB */ ++ int err; ++ unsigned long mmio_base; ++ ++ dev_info(&pdev->dev, "Silicon Motion display driver."); ++ ++ err = pci_enable_device(pdev); /* enable SMTC chip */ ++ if (err) ++ return err; ++ ++ sprintf(smtcfb_fix.id, "sm%Xfb", ent->device); ++ ++ sfb = smtc_alloc_fb_info(pdev); ++ ++ if (!sfb) { ++ err = -ENOMEM; ++ goto failed_free; ++ } ++ ++ sfb->chip_id = ent->device; ++ ++ pci_set_drvdata(pdev, sfb); ++ ++ sm7xx_init_hw(); ++ ++ /* get mode parameter from smtc_scr_info */ ++ if (smtc_scr_info.lfb_width != 0) { ++ sfb->fb.var.xres = smtc_scr_info.lfb_width; ++ sfb->fb.var.yres = smtc_scr_info.lfb_height; ++ sfb->fb.var.bits_per_pixel = smtc_scr_info.lfb_depth; ++ } else { ++ /* default resolution 1024x600 16bit mode */ ++ sfb->fb.var.xres = SCREEN_X_RES; ++ sfb->fb.var.yres = SCREEN_Y_RES; ++ sfb->fb.var.bits_per_pixel = SCREEN_BPP; ++ } ++ ++#ifdef __BIG_ENDIAN ++ if (sfb->fb.var.bits_per_pixel == 24) ++ sfb->fb.var.bits_per_pixel = (smtc_scr_info.lfb_depth = 32); ++#endif ++ /* Map address and memory detection */ ++ mmio_base = pci_resource_start(pdev, 0); ++ pci_read_config_byte(pdev, PCI_REVISION_ID, &sfb->chip_rev_id); ++ ++ switch (sfb->chip_id) { ++ case 0x710: ++ case 0x712: ++ sfb->fb.fix.mmio_start = mmio_base + 0x00400000; ++ sfb->fb.fix.mmio_len = 0x00400000; ++ smem_size = SM712_VIDEOMEMORYSIZE; ++#ifdef __BIG_ENDIAN ++ sfb->lfb = ioremap(mmio_base, 0x00c00000); ++#else ++ sfb->lfb = ioremap(mmio_base, 0x00800000); ++#endif ++ sfb->mmio = (smtc_RegBaseAddress = ++ sfb->lfb + 0x00700000); ++ sfb->dp_regs = sfb->lfb + 0x00408000; ++ sfb->vp_regs = sfb->lfb + 0x0040c000; ++#ifdef __BIG_ENDIAN ++ if (sfb->fb.var.bits_per_pixel == 32) { ++ sfb->lfb += 0x800000; ++ dev_info(&pdev->dev, "sfb->lfb=%p", sfb->lfb); ++ } ++#endif ++ if (!smtc_RegBaseAddress) { ++ dev_err(&pdev->dev, ++ "%s: unable to map memory mapped IO!", ++ sfb->fb.fix.id); ++ err = -ENOMEM; ++ goto failed_fb; ++ } ++ ++ /* set MCLK = 14.31818 * (0x16 / 0x2) */ ++ smtc_seqw(0x6a, 0x16); ++ smtc_seqw(0x6b, 0x02); ++ smtc_seqw(0x62, 0x3e); ++ /* enable PCI burst */ ++ smtc_seqw(0x17, 0x20); ++ /* enable word swap */ ++#ifdef __BIG_ENDIAN ++ if (sfb->fb.var.bits_per_pixel == 32) ++ smtc_seqw(0x17, 0x30); ++#endif ++ break; ++ case 0x720: ++ sfb->fb.fix.mmio_start = mmio_base; ++ sfb->fb.fix.mmio_len = 0x00200000; ++ smem_size = SM722_VIDEOMEMORYSIZE; ++ sfb->dp_regs = ioremap(mmio_base, 0x00a00000); ++ sfb->lfb = sfb->dp_regs + 0x00200000; ++ sfb->mmio = (smtc_RegBaseAddress = ++ sfb->dp_regs + 0x000c0000); ++ sfb->vp_regs = sfb->dp_regs + 0x800; ++ ++ smtc_seqw(0x62, 0xff); ++ smtc_seqw(0x6a, 0x0d); ++ smtc_seqw(0x6b, 0x02); ++ break; ++ default: ++ dev_err(&pdev->dev, ++ "No valid Silicon Motion display chip was detected!"); ++ ++ goto failed_fb; ++ } ++ ++ /* can support 32 bpp */ ++ if (15 == sfb->fb.var.bits_per_pixel) ++ sfb->fb.var.bits_per_pixel = 16; ++ ++ sfb->fb.var.xres_virtual = sfb->fb.var.xres; ++ sfb->fb.var.yres_virtual = sfb->fb.var.yres; ++ err = smtc_map_smem(sfb, pdev, smem_size); ++ if (err) ++ goto failed; ++ ++ smtcfb_setmode(sfb); ++ ++ err = register_framebuffer(&sfb->fb); ++ if (err < 0) ++ goto failed; ++ ++ dev_info(&pdev->dev, ++ "Silicon Motion SM%X Rev%X primary display mode %dx%d-%d Init Complete.", ++ sfb->chip_id, sfb->chip_rev_id, sfb->fb.var.xres, ++ sfb->fb.var.yres, sfb->fb.var.bits_per_pixel); ++ ++ return 0; ++ ++failed: ++ dev_err(&pdev->dev, "Silicon Motion, Inc. primary display init fail."); ++ ++ smtc_unmap_smem(sfb); ++ smtc_unmap_mmio(sfb); ++failed_fb: ++ smtc_free_fb_info(sfb); ++ ++failed_free: ++ pci_disable_device(pdev); ++ ++ return err; ++} ++ ++/* ++ * 0x710 (LynxEM) ++ * 0x712 (LynxEM+) ++ * 0x720 (Lynx3DM, Lynx3DM+) ++ */ ++static const struct pci_device_id smtcfb_pci_table[] = { ++ { PCI_DEVICE(0x126f, 0x710), }, ++ { PCI_DEVICE(0x126f, 0x712), }, ++ { PCI_DEVICE(0x126f, 0x720), }, ++ {0,} ++}; ++ ++static void smtcfb_pci_remove(struct pci_dev *pdev) ++{ ++ struct smtcfb_info *sfb; ++ ++ sfb = pci_get_drvdata(pdev); ++ smtc_unmap_smem(sfb); ++ smtc_unmap_mmio(sfb); ++ unregister_framebuffer(&sfb->fb); ++ smtc_free_fb_info(sfb); ++} ++ ++#ifdef CONFIG_PM ++static int smtcfb_pci_suspend(struct device *device) ++{ ++ struct pci_dev *pdev = to_pci_dev(device); ++ struct smtcfb_info *sfb; ++ ++ sfb = pci_get_drvdata(pdev); ++ ++ /* set the hw in sleep mode use external clock and self memory refresh ++ * so that we can turn off internal PLLs later on ++ */ ++ smtc_seqw(0x20, (smtc_seqr(0x20) | 0xc0)); ++ smtc_seqw(0x69, (smtc_seqr(0x69) & 0xf7)); ++ ++ console_lock(); ++ fb_set_suspend(&sfb->fb, 1); ++ console_unlock(); ++ ++ /* additionally turn off all function blocks including internal PLLs */ ++ smtc_seqw(0x21, 0xff); ++ ++ return 0; ++} ++ ++static int smtcfb_pci_resume(struct device *device) ++{ ++ struct pci_dev *pdev = to_pci_dev(device); ++ struct smtcfb_info *sfb; ++ ++ sfb = pci_get_drvdata(pdev); ++ ++ /* reinit hardware */ ++ sm7xx_init_hw(); ++ switch (sfb->chip_id) { ++ case 0x710: ++ case 0x712: ++ /* set MCLK = 14.31818 * (0x16 / 0x2) */ ++ smtc_seqw(0x6a, 0x16); ++ smtc_seqw(0x6b, 0x02); ++ smtc_seqw(0x62, 0x3e); ++ /* enable PCI burst */ ++ smtc_seqw(0x17, 0x20); ++#ifdef __BIG_ENDIAN ++ if (sfb->fb.var.bits_per_pixel == 32) ++ smtc_seqw(0x17, 0x30); ++#endif ++ break; ++ case 0x720: ++ smtc_seqw(0x62, 0xff); ++ smtc_seqw(0x6a, 0x0d); ++ smtc_seqw(0x6b, 0x02); ++ break; ++ } ++ ++ smtc_seqw(0x34, (smtc_seqr(0x34) | 0xc0)); ++ smtc_seqw(0x33, ((smtc_seqr(0x33) | 0x08) & 0xfb)); ++ ++ smtcfb_setmode(sfb); ++ ++ console_lock(); ++ fb_set_suspend(&sfb->fb, 0); ++ console_unlock(); ++ ++ return 0; ++} ++ ++static SIMPLE_DEV_PM_OPS(sm7xx_pm_ops, smtcfb_pci_suspend, smtcfb_pci_resume); ++#define SM7XX_PM_OPS (&sm7xx_pm_ops) ++ ++#else /* !CONFIG_PM */ ++ ++#define SM7XX_PM_OPS NULL ++ ++#endif /* !CONFIG_PM */ ++ ++static struct pci_driver smtcfb_driver = { ++ .name = "smtcfb", ++ .id_table = smtcfb_pci_table, ++ .probe = smtcfb_pci_probe, ++ .remove = smtcfb_pci_remove, ++ .driver.pm = SM7XX_PM_OPS, ++}; ++ ++module_pci_driver(smtcfb_driver); ++ ++MODULE_AUTHOR("Siliconmotion "); ++MODULE_DESCRIPTION("Framebuffer driver for SMI Graphic Cards"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c +index f98d03f..09cf729 100644 +--- a/drivers/usb/host/ohci-hcd.c ++++ b/drivers/usb/host/ohci-hcd.c +@@ -864,9 +864,13 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd) + } + + if (ints & OHCI_INTR_WDH) { +- spin_lock (&ohci->lock); +- dl_done_list (ohci); +- spin_unlock (&ohci->lock); ++ if (ohci->hcca->done_head == 0) { ++ ints &= ~OHCI_INTR_WDH; ++ } else { ++ spin_lock (&ohci->lock); ++ dl_done_list (ohci); ++ spin_unlock (&ohci->lock); ++ } + } + + if (quirk_zfmicro(ohci) && (ints & OHCI_INTR_SF)) { +diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c +index 2f3aceb..6647c3f 100644 +--- a/drivers/usb/host/pci-quirks.c ++++ b/drivers/usb/host/pci-quirks.c +@@ -454,6 +454,7 @@ void usb_amd_dev_put(void) + } + EXPORT_SYMBOL_GPL(usb_amd_dev_put); + ++#if defined(CONFIG_USB_UHCI_HCD) || defined(CONFIG_USB_UHCI_HCD_MODULE) + /* + * Make sure the controller is completely inactive, unable to + * generate interrupts or do DMA. +@@ -561,12 +562,16 @@ static void quirk_usb_handoff_uhci(struct pci_dev *pdev) + if (base) + uhci_check_and_reset_hc(pdev, base); + } ++#else ++#define quirk_usb_handoff_uhci(x) do { } while (0) ++#endif /* CONFIG_USB_UHCI_HCD* */ + + static int mmio_resource_enabled(struct pci_dev *pdev, int idx) + { + return pci_resource_start(pdev, idx) && mmio_enabled(pdev); + } + ++#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) + static void quirk_usb_handoff_ohci(struct pci_dev *pdev) + { + void __iomem *base; +@@ -633,7 +638,11 @@ static void quirk_usb_handoff_ohci(struct pci_dev *pdev) + /* Now the controller is safely in SUSPEND and nothing can wake it up */ + iounmap(base); + } ++#else ++#define quirk_usb_handoff_ohci(x) do { } while(0) ++#endif /* CONFIG_USB_OHCI_HCD* */ + ++#if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE) + static const struct dmi_system_id ehci_dmi_nohandoff_table[] = { + { + /* Pegatron Lucid (ExoPC) */ +@@ -806,6 +815,9 @@ static void quirk_usb_disable_ehci(struct pci_dev *pdev) + + iounmap(base); + } ++#else ++#define quirk_usb_disable_ehci(x) do { } while (0) ++#endif /* CONFIG_USB_EHCI_HCD* */ + + /* + * handshake - spin reading a register until handshake completes +@@ -945,6 +957,7 @@ void usb_disable_xhci_ports(struct pci_dev *xhci_pdev) + } + EXPORT_SYMBOL_GPL(usb_disable_xhci_ports); + ++#if defined(CONFIG_USB_XHCI_HCD) || defined(CONFIG_USB_XHCI_HCD_MODULE) + /** + * PCI Quirks for xHCI. + * +@@ -1052,6 +1065,9 @@ hc_init: + + iounmap(base); + } ++#else ++#define quirk_usb_handoff_xhci(x) do { } while (0) ++#endif /* CONFIG_USB_UHCI_HCD* */ + + static void quirk_usb_early_handoff(struct pci_dev *pdev) + { +diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c +index a968894..0bfa2cb 100644 +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -79,6 +79,9 @@ static void option_instat_callback(struct urb *urb); + #define OPTION_PRODUCT_ETNA_KOI_MODEM 0x7100 + #define OPTION_PRODUCT_GTM380_MODEM 0x7201 + ++#define HUAWO_VENDOR_ID 0x21F5 ++#define HUAWO_PRODUCT_E1621 0x2008 ++ + #define HUAWEI_VENDOR_ID 0x12D1 + #define HUAWEI_PRODUCT_E173 0x140C + #define HUAWEI_PRODUCT_E1750 0x1406 +@@ -610,6 +613,7 @@ static const struct usb_device_id option_ids[] = { + { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) }, + { USB_DEVICE(QUANTA_VENDOR_ID, 0xea42), + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, ++ { USB_DEVICE(HUAWO_VENDOR_ID, HUAWO_PRODUCT_E1621) }, /* QUANTA 6500 chips, Unicom extensive use of this card */ + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c05, USB_CLASS_COMM, 0x02, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c1f, USB_CLASS_COMM, 0x02, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) }, +diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig +index 8bf495f..f6a15b6 100644 +--- a/drivers/video/Kconfig ++++ b/drivers/video/Kconfig +@@ -36,6 +36,12 @@ config VGASTATE + tristate + default n + ++config VIDEO_OUTPUT_CONTROL ++ tristate "Lowlevel video output switch controls" ++ help ++ This framework adds support for low-level control of the video ++ output switch. ++ + config VIDEOMODE_HELPERS + bool + +diff --git a/drivers/video/Makefile b/drivers/video/Makefile +index 9ad3c17..3d869d9 100644 +--- a/drivers/video/Makefile ++++ b/drivers/video/Makefile +@@ -7,6 +7,8 @@ obj-y += backlight/ + + obj-y += fbdev/ + ++#video output switch sysfs driver ++obj-$(CONFIG_VIDEO_OUTPUT_CONTROL) += output.o + obj-$(CONFIG_VIDEOMODE_HELPERS) += display_timing.o videomode.o + ifeq ($(CONFIG_OF),y) + obj-$(CONFIG_VIDEOMODE_HELPERS) += of_display_timing.o of_videomode.o +diff --git a/drivers/video/output.c b/drivers/video/output.c +new file mode 100644 +index 0000000..1446c49 +--- /dev/null ++++ b/drivers/video/output.c +@@ -0,0 +1,133 @@ ++/* ++ * output.c - Display Output Switch driver ++ * ++ * Copyright (C) 2006 Luming Yu ++ * ++ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++ * ++ * 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. ++ * ++ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++ ++MODULE_DESCRIPTION("Display Output Switcher Lowlevel Control Abstraction"); ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Luming Yu "); ++ ++static ssize_t state_show(struct device *dev, struct device_attribute *attr, ++ char *buf) ++{ ++ ssize_t ret_size = 0; ++ struct output_device *od = to_output_device(dev); ++ if (od->props) ++ ret_size = sprintf(buf,"%.8x\n",od->props->get_status(od)); ++ return ret_size; ++} ++ ++static ssize_t state_store(struct device *dev, struct device_attribute *attr, ++ const char *buf,size_t count) ++{ ++ char *endp; ++ struct output_device *od = to_output_device(dev); ++ int request_state = simple_strtoul(buf,&endp,0); ++ size_t size = endp - buf; ++ ++ if (isspace(*endp)) ++ size++; ++ if (size != count) ++ return -EINVAL; ++ ++ if (od->props) { ++ od->request_state = request_state; ++ od->props->set_state(od); ++ } ++ return count; ++} ++static DEVICE_ATTR_RW(state); ++ ++static void video_output_release(struct device *dev) ++{ ++ struct output_device *od = to_output_device(dev); ++ kfree(od); ++} ++ ++static struct attribute *video_output_attrs[] = { ++ &dev_attr_state.attr, ++ NULL, ++}; ++ATTRIBUTE_GROUPS(video_output); ++ ++static struct class video_output_class = { ++ .name = "video_output", ++ .dev_release = video_output_release, ++ .dev_groups = video_output_groups, ++}; ++ ++struct output_device *video_output_register(const char *name, ++ struct device *dev, ++ void *devdata, ++ struct output_properties *op) ++{ ++ struct output_device *new_dev; ++ int ret_code = 0; ++ ++ new_dev = kzalloc(sizeof(struct output_device),GFP_KERNEL); ++ if (!new_dev) { ++ ret_code = -ENOMEM; ++ goto error_return; ++ } ++ new_dev->props = op; ++ new_dev->dev.class = &video_output_class; ++ new_dev->dev.parent = dev; ++ dev_set_name(&new_dev->dev, "%s", name); ++ dev_set_drvdata(&new_dev->dev, devdata); ++ ret_code = device_register(&new_dev->dev); ++ if (ret_code) { ++ kfree(new_dev); ++ goto error_return; ++ } ++ return new_dev; ++ ++error_return: ++ return ERR_PTR(ret_code); ++} ++EXPORT_SYMBOL(video_output_register); ++ ++void video_output_unregister(struct output_device *dev) ++{ ++ if (!dev) ++ return; ++ device_unregister(&dev->dev); ++} ++EXPORT_SYMBOL(video_output_unregister); ++ ++static void __exit video_output_class_exit(void) ++{ ++ class_unregister(&video_output_class); ++} ++ ++static int __init video_output_class_init(void) ++{ ++ return class_register(&video_output_class); ++} ++ ++postcore_initcall(video_output_class_init); ++module_exit(video_output_class_exit); +diff --git a/include/linux/sm501.h b/include/linux/sm501.h +index 02fde50..a8677f0 100644 +--- a/include/linux/sm501.h ++++ b/include/linux/sm501.h +@@ -27,6 +27,9 @@ extern unsigned long sm501_set_clock(struct device *dev, + extern unsigned long sm501_find_clock(struct device *dev, + int clksrc, unsigned long req_freq); + ++extern void sm501_configure_gpio(struct device *dev, ++ unsigned int gpio, unsigned char mode); ++ + /* sm501_misc_control + * + * Modify the SM501's MISC_CONTROL register +@@ -122,6 +125,7 @@ struct sm501_reg_init { + #define SM501_USE_AC97 (1<<7) + #define SM501_USE_I2S (1<<8) + #define SM501_USE_GPIO (1<<9) ++#define SM501_USE_PWM (1<<10) + + #define SM501_USE_ALL (0xffffffff) + +diff --git a/include/linux/video_output.h b/include/linux/video_output.h +new file mode 100644 +index 0000000..ed5cdeb +--- /dev/null ++++ b/include/linux/video_output.h +@@ -0,0 +1,57 @@ ++/* ++ * ++ * Copyright (C) 2006 Luming Yu ++ * ++ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++ * ++ * 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. ++ * ++ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++ */ ++#ifndef _LINUX_VIDEO_OUTPUT_H ++#define _LINUX_VIDEO_OUTPUT_H ++#include ++#include ++struct output_device; ++struct output_properties { ++ int (*set_state)(struct output_device *); ++ int (*get_status)(struct output_device *); ++}; ++struct output_device { ++ int request_state; ++ struct output_properties *props; ++ struct device dev; ++}; ++#define to_output_device(obj) container_of(obj, struct output_device, dev) ++#if defined(CONFIG_VIDEO_OUTPUT_CONTROL) || defined(CONFIG_VIDEO_OUTPUT_CONTROL_MODULE) ++struct output_device *video_output_register(const char *name, ++ struct device *dev, ++ void *devdata, ++ struct output_properties *op); ++void video_output_unregister(struct output_device *dev); ++#else ++static struct output_device *video_output_register(const char *name, ++ struct device *dev, ++ void *devdata, ++ struct output_properties *op) ++{ ++ return ERR_PTR(-ENODEV); ++} ++static void video_output_unregister(struct output_device *dev) ++{ ++ return; ++} ++#endif ++#endif +diff --git a/init/calibrate.c b/init/calibrate.c +index 520702d..e78762a 100644 +--- a/init/calibrate.c ++++ b/init/calibrate.c +@@ -21,6 +21,7 @@ static int __init lpj_setup(char *str) + + __setup("lpj=", lpj_setup); + ++#ifndef ARCH_HAS_PREPARED_LPJ + #ifdef ARCH_HAS_READ_CURRENT_TIMER + + /* This routine uses the read_current_timer() routine and gets the +@@ -171,6 +172,7 @@ static unsigned long calibrate_delay_direct(void) + return 0; + } + #endif ++#endif /* ARCH_HAS_PREPARED_LPJ */ + + /* + * This is the number of bits of precision for the loops_per_jiffy. Each +@@ -282,6 +284,7 @@ void calibrate_delay(void) + lpj = lpj_fine; + pr_info("Calibrating delay loop (skipped), " + "value calculated using timer frequency.. "); ++#ifndef ARCH_HAS_PREPARED_LPJ + } else if ((lpj = calibrate_delay_is_known())) { + ; + } else if ((lpj = calibrate_delay_direct()) != 0) { +@@ -292,6 +295,7 @@ void calibrate_delay(void) + if (!printed) + pr_info("Calibrating delay loop... "); + lpj = calibrate_delay_converge(); ++#endif /* ARCH_HAS_PREPARED_LPJ */ + } + per_cpu(cpu_loops_per_jiffy, this_cpu) = lpj; + if (!printed) +diff --git a/net/rfkill/core.c b/net/rfkill/core.c +index b3b16c0..e0a91100 100644 +--- a/net/rfkill/core.c ++++ b/net/rfkill/core.c +@@ -111,7 +111,7 @@ static LIST_HEAD(rfkill_list); /* list of registered rf switches */ + static DEFINE_MUTEX(rfkill_global_mutex); + static LIST_HEAD(rfkill_fds); /* list of open fds of /dev/rfkill */ + +-static unsigned int rfkill_default_state = 1; ++static unsigned int rfkill_default_state; /* default: 0 = radio off */ + module_param_named(default_state, rfkill_default_state, uint, 0444); + MODULE_PARM_DESC(default_state, + "Default initial state for all radio types, 0 = radio off"); +diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl +index 397b6b8..fee5bc1 100755 +--- a/scripts/recordmcount.pl ++++ b/scripts/recordmcount.pl +@@ -312,14 +312,33 @@ if ($arch eq "x86_64") { + $cc .= " -m64"; + $objcopy .= " -O elf64-sparc"; + } elsif ($arch eq "mips") { +- # To enable module support, we need to enable the -mlong-calls option +- # of gcc for module, after using this option, we can not get the real +- # offset of the calling to _mcount, but the offset of the lui +- # instruction or the addiu one. herein, we record the address of the +- # first one, and then we can replace this instruction by a branch +- # instruction to jump over the profiling function to filter the +- # indicated functions, or swith back to the lui instruction to trace +- # them, which means dynamic tracing. ++ # ++ # To disable tracing, just replace "jal _mcount" with nop; ++ # to enable tracing, replace back. so, the offset 14 is ++ # needed to be recorded. ++ # ++ # 10: 03e0082d move at,ra ++ # 14: 0c000000 jal 0 ++ # 14: R_MIPS_26 _mcount ++ # 14: R_MIPS_NONE *ABS* ++ # 14: R_MIPS_NONE *ABS* ++ # 18: 00020021 nop ++ # ++ # ++ # ++ # If no long call(-mlong-calls), the same to kernel. ++ # ++ # If the module space differs from the kernel space, long ++ # call is needed, as a result, the address of _mcount is ++ # needed to be recorded in a register and then jump from ++ # module space to kernel space via "jalr ". To ++ # disable tracing, "jalr " can be replaced by ++ # nop; to enable tracing, replace it back. Since the ++ # offset of "jalr " is not easy to be matched, ++ # the offset of the 1st _mcount below is recorded and to ++ # disable tracing, "lui v1, 0x0" is substituted with "b ++ # label", which jumps over "jalr "; to enable ++ # tracing, replace it back. + # + # c: 3c030000 lui v1,0x0 + # c: R_MIPS_HI16 _mcount +@@ -331,19 +350,12 @@ if ($arch eq "x86_64") { + # 10: R_MIPS_NONE *ABS* + # 14: 03e0082d move at,ra + # 18: 0060f809 jalr v1 ++ # label: + # +- # for the kernel: +- # +- # 10: 03e0082d move at,ra +- # 14: 0c000000 jal 0 +- # 14: R_MIPS_26 _mcount +- # 14: R_MIPS_NONE *ABS* +- # 14: R_MIPS_NONE *ABS* +- # 18: 00020021 nop + if ($is_module eq "0") { + $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_26\\s+_mcount\$"; + } else { +- $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_HI16\\s+_mcount\$"; ++ $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_(HI16|26)\\s+_mcount\$"; + } + $objdump .= " -Melf-trad".$endian."mips "; + +diff --git a/scripts/sstrip.sh b/scripts/sstrip.sh +new file mode 100755 +index 0000000..49b973a +--- /dev/null ++++ b/scripts/sstrip.sh +@@ -0,0 +1,59 @@ ++#!/bin/bash ++# sstrip.sh -- strip the section table of an elf file ++# ++# Copyright (C) 2010 Wu Zhangjin, wuzhangjin@gmail.com ++# Licensed under the GPLv2 ++# ++# Since the section table is useless for the embedded device, it can be ++# stripped out. ++# ++# Note: Some bootloader may check the section table but most of the time, it ++# may be not really used, If it really need the section table, it may need the ++# decompressed kernel image. ++ ++# Usage ++ ++function usage ++{ ++cat </dev/null` ++[ "xELF" != "x${FILE_TYPE}" ] && echo "$0: ${IMAGE} is not an ELF file" && exit -1 ++ ++[ "x${V}" == "x1" ] && orig_filesz=`wc -c ${IMAGE} | cut -d' ' -f1` ++ ++# Get the offset of the section table, here get the end of the program section ++filesz=$((`${OBJDUMP} -p ${IMAGE} | grep -m1 filesz | tr -s ' ' | cut -d' ' -f3`)) ++ ++# Truncate it via the dd tool ++dd if=/dev/null bs=1 of=${IMAGE} seek=${filesz} 2>/dev/null ++ ++# Clear the section table information in the ELF header ++# The last 6 bytes of the ELF header are the section table information ++echo -ne "\x00\x00\x00\x00\x00\x00" | dd of=${IMAGE} bs=1 seek=46 count=6 conv=notrunc 2>/dev/null ++ ++# Debug ++if [ "x${V}" == "x1" ]; then ++ echo "----------------------------------------------------------------" ++ echo "Strip the section table at ${filesz} of ${IMAGE}" ++ echo "----------------------------------------------------------------" ++ echo " sstrip: $0" ++ echo " objdump: ${OBJDUMP}" ++ echo "original size: ${orig_filesz}" ++ echo "current size: ${filesz}" ++ echo "reduced size: $((${orig_filesz} - ${filesz}))" ++fi diff --git a/libre/linux-libre/gnewsense-binutils-flag.patch b/libre/linux-libre/gnewsense-binutils-flag.patch new file mode 100644 index 000000000..5f2d44f99 --- /dev/null +++ b/libre/linux-libre/gnewsense-binutils-flag.patch @@ -0,0 +1,28 @@ +Our binutils somehow ended up with a -mfix-gs2f-kernel, rather than +-mfix-ls2f-kernel. Cope with it. + +Index: arch/mips/loongson/Platform +=================================================================== +--- arch/mips/loongson/Platform.orig 2010-10-25 19:09:49.000000000 +0000 ++++ arch/mips/loongson/Platform 2010-10-25 19:10:44.000000000 +0000 +@@ -10,6 +10,12 @@ + $(call cc-option,-march=loongson2f,-march=r4600) + # Enable the workarounds for Loongson2f + ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS ++ ifneq ($(call as-option,-Wa$(comma)-mfix-gs2f-kernel,),) ++ cflags-$(CONFIG_CPU_NOP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel ++ ifneq ($(CONFIG_CPU_NOP_WORKAROUNDS),$(CONFIG_CPU_JUMP_WORKAROUNDS)) ++ cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel ++ endif ++ else + ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-nop,),) + $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-nop) + else +@@ -20,6 +26,7 @@ + else + cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-jump + endif ++ endif + endif + + # -- cgit v1.2.3 From c1879f6ed8abf3ae9acdcf48b45d6ddafffd4674 Mon Sep 17 00:00:00 2001 From: "coadde [Márcio Alexandre Silva Delgado]" Date: Fri, 22 Aug 2014 20:40:37 -0300 Subject: linux-libre*: Adjust version numbers following discussion --- kernels/linux-libre-lts-knock/PKGBUILD | 86 +++++++++++---------- kernels/linux-libre-lts-knock/config.i686 | 2 +- kernels/linux-libre-lts-knock/config.mips64el | 2 +- kernels/linux-libre-lts-knock/config.x86_64 | 2 +- .../linux-libre-lts-knock.install | 35 --------- kernels/linux-libre-lts-knock/linux.install | 35 +++++++++ kernels/linux-libre-lts-knock/linux.preset | 14 ++++ kernels/linux-libre-pae/PKGBUILD | 71 +++++++++-------- kernels/linux-libre-pae/config | 2 +- kernels/linux-libre-pae/linux-libre-pae.install | 37 --------- kernels/linux-libre-pae/linux.install | 37 +++++++++ kernels/linux-libre-pae/linux.preset | 14 ++++ kernels/linux-libre-rt/PKGBUILD | 88 ++++++++++++---------- kernels/linux-libre-rt/config.i686 | 2 +- kernels/linux-libre-rt/config.mips64el | 2 +- kernels/linux-libre-rt/config.x86_64 | 2 +- kernels/linux-libre-rt/linux-libre-rt.install | 41 ---------- kernels/linux-libre-rt/linux.install | 41 ++++++++++ kernels/linux-libre-rt/linux.preset | 14 ++++ kernels/linux-libre-xen/PKGBUILD | 79 ++++++++++--------- kernels/linux-libre-xen/config | 2 +- kernels/linux-libre-xen/linux-libre-xen.install | 37 --------- kernels/linux-libre-xen/linux.install | 37 +++++++++ kernels/linux-libre-xen/linux.preset | 14 ++++ libre/linux-libre-grsec/config.i686 | 2 +- libre/linux-libre-grsec/config.mips64el | 2 +- libre/linux-libre-grsec/config.x86_64 | 2 +- libre/linux-libre-lts/config.i686 | 2 +- libre/linux-libre-lts/config.mips64el | 2 +- libre/linux-libre-lts/config.x86_64 | 2 +- libre/linux-libre/PKGBUILD | 1 - 31 files changed, 392 insertions(+), 317 deletions(-) delete mode 100644 kernels/linux-libre-lts-knock/linux-libre-lts-knock.install create mode 100644 kernels/linux-libre-lts-knock/linux.install create mode 100644 kernels/linux-libre-lts-knock/linux.preset delete mode 100644 kernels/linux-libre-pae/linux-libre-pae.install create mode 100644 kernels/linux-libre-pae/linux.install create mode 100644 kernels/linux-libre-pae/linux.preset delete mode 100644 kernels/linux-libre-rt/linux-libre-rt.install create mode 100644 kernels/linux-libre-rt/linux.install create mode 100644 kernels/linux-libre-rt/linux.preset delete mode 100644 kernels/linux-libre-xen/linux-libre-xen.install create mode 100644 kernels/linux-libre-xen/linux.install create mode 100644 kernels/linux-libre-xen/linux.preset diff --git a/kernels/linux-libre-lts-knock/PKGBUILD b/kernels/linux-libre-lts-knock/PKGBUILD index b0a2669c2..4868b72b0 100644 --- a/kernels/linux-libre-lts-knock/PKGBUILD +++ b/kernels/linux-libre-lts-knock/PKGBUILD @@ -1,3 +1,4 @@ +# $Id$ # Contributor (Arch): Tobias Powalowski # Contributor (Arch): Thomas Baechler # Maintainer: André Silva @@ -7,38 +8,41 @@ # Contributor: Márcio Silva # Contributor: Luke Shumaker -pkgbase=linux-libre-lts-knock # Build stock -libre-lts-knock kernel -#pkgbase=linux-libre-custom # Build kernel with a different name -_basekernel=3.10 -_sublevel=53 -_knockpatchver=${_basekernel} -pkgver=${_basekernel}.${_sublevel} +pkgbase=linux-libre-lts-knock # Build stock -lts-knock kernel +_pkgbasever=3.10-gnu +_pkgver=3.10.53-gnu +_lxopkgver=3.10.53-gnu # nearly always the same as _pkgver +_knockpatchver=3.10 + +_replaces=('kernel26%' 'kernel26-libre%' 'linux%' 'linux-libre%-kmod-alx') # '%' gets replaced with _kernelname + +_srcname=linux-${_pkgbasever%-*} +pkgver=${_pkgver//-/.} pkgrel=1 -_lxopkgver=${_basekernel}.52 # nearly always the same as pkgver arch=('i686' 'x86_64' 'mips64el') url="https://gnunet.org/knock" license=('GPL2') makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc') options=('!strip') -source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gnu/linux-libre-${_basekernel}-gnu.tar.xz" - "http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/patch-${_basekernel}-gnu-${pkgver}-gnu.xz" +source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/linux-libre-${_pkgbasever}.tar.xz" + "http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/patch-${_pkgbasever}-${_pkgver}.xz" "http://gnunet.org/sites/default/files/tcp_stealth_${_knockpatchver}.diff" # the main kernel config files 'config.i686' 'config.x86_64' # standard config files for mkinitcpio ramdisk - "${pkgbase}.preset" + 'linux.preset' 'Kbuild' 'Kbuild.platforms' 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' 'criu-no-expert.patch' - "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.xz") + "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}_0loongsonlibre_mipsel.tar.xz") md5sums=('d562fd52580a3b6b18b6eeb5921d1d5c' '4840f0db6af66cbce923b1043971c256' '26380d6f05471ef8e065a77d87588009' '25ad0606de251a5734f4535c61452a56' '158cb922d9b43028f6c45c696e773915' - '02023949955a138c44bb0c46227a6d18' + 'eb14dcfd80c00852ef81ded6e826826a' '2967cecc3af9f954ccc822fd63dca6ff' '8267264d9a8966e57fdacd1fa1fc65c4' '071d4939e9ef4256e4c027ef3c864903' @@ -54,13 +58,14 @@ if [ "$CARCH" != "mips64el" ]; then fi _kernelname=${pkgbase#linux-libre} -_localversionname=-libre-lts-knock +_replaces=("${_replaces[@]/\%/${_kernelname}}") prepare() { - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" - if [ "${_basekernel}" != "${pkgver}" ]; then - patch -Np1 -i "${srcdir}/patch-${_basekernel}-gnu-${pkgver}-gnu" + # add upstream patch + if [ "${_pkgbasever}" != "${_pkgver}" ]; then + patch -p1 -i "${srcdir}/patch-${_pkgbasever}-${_pkgver}" fi # add knock patch @@ -105,19 +110,19 @@ prepare() { fi if [ "${_kernelname}" != "" ]; then - sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" ./.config + sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config fi - # set extraversion to pkgrel - sed -ri "s|^(EXTRAVERSION =).*|\1 -${pkgrel}|" Makefile + # append pkgrel to extraversion + sed -ri "s|^(EXTRAVERSION =.*\S).*|\1-${pkgrel}|" Makefile # don't run depmod on 'make install'. We'll do this ourselves in packaging sed -i '2iexit 0' scripts/depmod.sh } build() { - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" # get kernel version make prepare @@ -160,15 +165,15 @@ build() { } _package() { - pkgdesc="The ${pkgbase^} kernel and modules - stable longtime supported kernel package suitable for servers with support for stealth TCP sockets" + pkgdesc="The ${pkgbase/linux/Linux} kernel and modules" [ "${pkgbase}" = "linux-libre" ] && groups=('base') - depends=('coreutils' 'linux-libre-firmware' 'kmod') + depends=('coreutils' 'linux-firmware' 'kmod' 'mkinitcpio>=0.7') optdepends=('crda: to set the correct wireless channels of your country') - provides=("kernel26${_kernelname}=${pkgver}" "linux${_kernelname}=${pkgver}" "linux${_kernelname/-lts/}") - conflicts=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}" "linux${_kernelname/-lts/}" "linux-libre${_kernelname/-lts/}") - replaces=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}" "linux${_kernelname/-lts/}" "linux-libre${_kernelname/-lts/}") + provides=( "${_replaces[@]/%/=${pkgver}}") + conflicts=("${_replaces[@]}") + replaces=( "${_replaces[@]}") backup=("etc/mkinitcpio.d/${pkgbase}.preset") - install=${pkgbase}.install + install=linux.install if [ "$CARCH" = "mips64el" ]; then optdepends+=('mkinitcpio: to make the initramfs (needs reinstall of this package)') conflicts+=('mkinitcpio<0.7') @@ -176,8 +181,7 @@ _package() { depends+=('mkinitcpio>=0.7') fi - cd "${srcdir}/linux-${_basekernel}" - + cd "${srcdir}/${_srcname} KARCH=x86 [ $CARCH = "mips64el" ] && KARCH=mips @@ -208,9 +212,9 @@ _package() { -i "${startdir}/${install}" # install mkinitcpio preset file for kernel - install -D -m644 "${srcdir}/${pkgbase}.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" + install -D -m644 "${srcdir}/linux.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" sed \ - -e "1s|'linux*.*'|'${pkgbase}'|" \ + -e "1s|'linux.*'|'${pkgbase}'|" \ -e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgbase}\"|" \ -e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgbase}.img\"|" \ -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \ @@ -229,10 +233,10 @@ _package() { # gzip -9 all modules to save 100MB of space find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; # make room for external modules - ln -s "../extramodules-${_basekernel}${_localversionname:--libre-lts-knock}" "${pkgdir}/lib/modules/${_kernver}/extramodules" + ln -s "../extramodules-${_basekernel}${_kernelname}" "${pkgdir}/lib/modules/${_kernver}/extramodules" # add real version for building modules and running depmod from post_install/upgrade - mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--libre-lts-knock}" - echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--libre-lts-knock}/version" + mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname}" + echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname}/version" # Now we call depmod... depmod -b "$pkgdir" -F System.map "$_kernver" @@ -243,9 +247,9 @@ _package() { _package-headers() { pkgdesc="Header files and scripts for building modules for ${pkgbase^} kernel" - provides=("kernel26${_kernelname}-headers=${pkgver}" "linux${_kernelname}-headers=${pkgver}" "linux${_kernelname/-lts/}-headers") - conflicts=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers" "linux${_kernelname/-lts/}-headers" "linux-libre${_kernelname/-lts/}-headers") - replaces=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers" "linux${_kernelname/-lts/}-headers" "linux-libre${_kernelname/-lts/}-headers") + provides=( "${_replaces[@]/%/-headers=${pkgver}}") + conflicts=("${_replaces[@]/%/-headers}") + replaces=( "${_replaces[@]/%/-headers}") KARCH=x86 [ $CARCH = "mips64el" ] && KARCH=mips @@ -261,7 +265,7 @@ _package-headers() { cd "${pkgdir}/usr/lib/modules/${_kernver}" ln -sf ../../../src/linux-${_kernver} build - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" install -D -m644 Makefile \ "${pkgdir}/usr/src/linux-${_kernver}/Makefile" install -D -m644 kernel/Makefile \ @@ -403,11 +407,11 @@ _package-headers() { _package-docs() { pkgdesc="Kernel hackers manual - HTML documentation that comes with the ${pkgbase^} kernel" - provides=("kernel26${_kernelname}-docs=${pkgver}" "linux${_kernelname}-docs=${pkgver}" "linux${_kernelname/-lts/}-docs") - conflicts=("kernel26${_kernelname}-docs" "kernel26-libre${_kernelname}-docs" "linux${_kernelname}-docs" "linux${_kernelname/-lts/}-docs" "linux-libre${_kernelname/-lts/}-docs") - replaces=("kernel26${_kernelname}-docs" "kernel26-libre${_kernelname}-docs" "linux${_kernelname}-docs" "linux${_kernelname/-lts/}-docs" "linux-libre${_kernelname/-lts/}-docs") + provides=( "${_replaces[@]/%/-docs=${pkgver}}") + conflicts=("${_replaces[@]/%/-docs}") + replaces=( "${_replaces[@]/%/-docs}") - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" mkdir -p "${pkgdir}/usr/src/linux-${_kernver}" cp -al Documentation "${pkgdir}/usr/src/linux-${_kernver}" diff --git a/kernels/linux-libre-lts-knock/config.i686 b/kernels/linux-libre-lts-knock/config.i686 index 017b2fdce..e2be53402 100644 --- a/kernels/linux-libre-lts-knock/config.i686 +++ b/kernels/linux-libre-lts-knock/config.i686 @@ -47,7 +47,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y # CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" -CONFIG_LOCALVERSION="-libre-lts-knock" +CONFIG_LOCALVERSION="-lts-knock" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/kernels/linux-libre-lts-knock/config.mips64el b/kernels/linux-libre-lts-knock/config.mips64el index 69f2bc4c9..e78421bbf 100644 --- a/kernels/linux-libre-lts-knock/config.mips64el +++ b/kernels/linux-libre-lts-knock/config.mips64el @@ -172,7 +172,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_BROKEN_ON_SMP=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" -CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION="-lts-knock" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/kernels/linux-libre-lts-knock/config.x86_64 b/kernels/linux-libre-lts-knock/config.x86_64 index 93698f08a..3122801e1 100644 --- a/kernels/linux-libre-lts-knock/config.x86_64 +++ b/kernels/linux-libre-lts-knock/config.x86_64 @@ -48,7 +48,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y # CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" -CONFIG_LOCALVERSION="-libre-lts-knock" +CONFIG_LOCALVERSION="-lts-knock" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/kernels/linux-libre-lts-knock/linux-libre-lts-knock.install b/kernels/linux-libre-lts-knock/linux-libre-lts-knock.install deleted file mode 100644 index c0b92638e..000000000 --- a/kernels/linux-libre-lts-knock/linux-libre-lts-knock.install +++ /dev/null @@ -1,35 +0,0 @@ -# arg 1: the new package version -# arg 2: the old package version - -KERNEL_NAME=-lts-knock -KERNEL_VERSION= - -post_install () { - # updating module dependencies - echo ">>> Updating module dependencies. Please wait ..." - depmod ${KERNEL_VERSION} - if command -v mkinitcpio 2>&1 > /dev/null; then - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - fi -} - -post_upgrade() { - if findmnt --fstab -uno SOURCE /boot &>/dev/null && ! mountpoint -q /boot; then - echo "WARNING: /boot appears to be a separate partition but is not mounted." - fi - - # updating module dependencies - echo ">>> Updating module dependencies. Please wait ..." - depmod ${KERNEL_VERSION} - if command -v mkinitcpio 2>&1 > /dev/null; then - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - fi -} - -post_remove() { - # also remove the compat symlinks - rm -f boot/initramfs-linux-libre${KERNEL_NAME}.img - rm -f boot/initramfs-linux-libre${KERNEL_NAME}-fallback.img -} diff --git a/kernels/linux-libre-lts-knock/linux.install b/kernels/linux-libre-lts-knock/linux.install new file mode 100644 index 000000000..8d5658aab --- /dev/null +++ b/kernels/linux-libre-lts-knock/linux.install @@ -0,0 +1,35 @@ +# arg 1: the new package version +# arg 2: the old package version + +KERNEL_NAME= +KERNEL_VERSION= + +post_install () { + # updating module dependencies + echo ">>> Updating module dependencies. Please wait ..." + depmod ${KERNEL_VERSION} + if command -v mkinitcpio 2>&1 > /dev/null; then + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} + fi +} + +post_upgrade() { + if findmnt --fstab -uno SOURCE /boot &>/dev/null && ! mountpoint -q /boot; then + echo "WARNING: /boot appears to be a separate partition but is not mounted." + fi + + # updating module dependencies + echo ">>> Updating module dependencies. Please wait ..." + depmod ${KERNEL_VERSION} + if command -v mkinitcpio 2>&1 > /dev/null; then + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} + fi +} + +post_remove() { + # also remove the compat symlinks + rm -f boot/initramfs-linux-libre${KERNEL_NAME}.img + rm -f boot/initramfs-linux-libre${KERNEL_NAME}-fallback.img +} diff --git a/kernels/linux-libre-lts-knock/linux.preset b/kernels/linux-libre-lts-knock/linux.preset new file mode 100644 index 000000000..b06292d10 --- /dev/null +++ b/kernels/linux-libre-lts-knock/linux.preset @@ -0,0 +1,14 @@ +# mkinitcpio preset file for the 'linux' package + +ALL_config="/etc/mkinitcpio.conf" +ALL_kver="/boot/vmlinuz-linux" + +PRESETS=('default' 'fallback') + +#default_config="/etc/mkinitcpio.conf" +default_image="/boot/initramfs-linux.img" +#default_options="" + +#fallback_config="/etc/mkinitcpio.conf" +fallback_image="/boot/initramfs-linux-fallback.img" +fallback_options="-S autodetect" diff --git a/kernels/linux-libre-pae/PKGBUILD b/kernels/linux-libre-pae/PKGBUILD index 5f72c2465..e742971db 100644 --- a/kernels/linux-libre-pae/PKGBUILD +++ b/kernels/linux-libre-pae/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 219731 2014-08-14 06:02:01Z tpowa $ +# $Id$ # Contributor (Arch): Tobias Powalowski # Contributor (Arch): Thomas Baechler # Maintainer: André Silva @@ -8,29 +8,33 @@ # Contributor: Márcio Silva # Contributor: Luke Shumaker -pkgbase=linux-libre-pae # Build stock -libre-pae kernel -#pkgbase=linux-libre-custom # Build kernel with a different name -_basekernel=3.16 -pkgver=${_basekernel}.1 +pkgbase=linux-libre-pae # Build stock -pae kernel +_pkgbasever=3.16-gnu +_pkgver=3.16.1-gnu + +_replaces=('kernel26%' 'kernel26-libre%' 'linux%' 'linux-libre%-kmod-alx') # '%' gets replaced with _kernelname + +_srcname=linux-${_pkgbasever%-*} +pkgver=${_pkgver//-/.} pkgrel=1 arch=('i686') url="http://linux-libre.fsfla.org/" license=('GPL2') makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc') options=('!strip') -source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gnu/linux-libre-${_basekernel}-gnu.tar.xz" - "http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/patch-${_basekernel}-gnu-${pkgver}-gnu.xz" +source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasekernel}/linux-libre-${_pkgbasekernel}.tar.xz" + "http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/patch-${_pkgbasekernel}-${_pkgver}.xz" # the main kernel config files 'config' # standard config files for mkinitcpio ramdisk - "${pkgbase}.preset" + 'linux.preset' 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' 'compal-laptop-hwmon-fix.patch') sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218' '3bbc78694d76b12b6229799d7c4daf5215b9dd731908d96b03603aceb54ad5c7' 'd7f16bb97225fc315cbe0bdf5fbc30ee8e387298bd53ba7cc623044b2f48c506' - '292d5c553f87246c8dc2d57cadfd2db92a3750173b4588d53c2919743171eca5' + 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' '2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53' 'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015' @@ -38,13 +42,14 @@ sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218' 'f36f61a0a72bcb0a9c04264343503bfbf927c9ea0db819e66734a3933b060588') _kernelname=${pkgbase#linux-libre} -_localversionname=-libre-pae +_replaces=("${_replaces[@]/\%/${_kernelname}}") prepare() { - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" - if [ "${_basekernel}" != "${pkgver}" ]; then - patch -p1 -i "${srcdir}/patch-${_basekernel}-gnu-${pkgver}-gnu" + # add upstream patch + if [ "${_pkgbasever}" != "${_pkgver}" ]; then + patch -p1 -i "${srcdir}/patch-${_pkgbasever}-${_pkgver}" fi # add freedo as boot logo @@ -65,12 +70,12 @@ prepare() { cat "${srcdir}/config" > ./.config # simpler if [ "${_kernelname}" != "" ]; then - sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" ./.config + sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config fi - # set extraversion to pkgrel - sed -ri "s|^(EXTRAVERSION =).*|\1 -${pkgrel}|" Makefile + # append pkgrel to extraversion + sed -ri "s|^(EXTRAVERSION =.*\S).*|\1-${pkgrel}|" Makefile # don't run depmod on 'make install'. We'll do this ourselves in packaging sed -i '2iexit 0' scripts/depmod.sh @@ -91,23 +96,23 @@ prepare() { } build() { - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" make ${MAKEFLAGS} LOCALVERSION= bzImage modules } _package() { - pkgdesc="The ${pkgbase^} kernel and modules with PAE support (HIGHMEM64G)" + pkgdesc="The ${pkgbase/linux/Linux} kernel and modules" [ "${pkgbase}" = "linux-libre" ] && groups=('base') - depends=('coreutils' 'linux-libre-firmware' 'kmod' 'mkinitcpio>=0.7') + depends=('coreutils' 'linux-firmware' 'kmod' 'mkinitcpio>=0.7') optdepends=('crda: to set the correct wireless channels of your country') - provides=("kernel26${_kernelname}=${pkgver}" "linux${_kernelname}=${pkgver}") - conflicts=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}") - replaces=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}") + provides=( "${_replaces[@]/%/=${pkgver}}") + conflicts=("${_replaces[@]}") + replaces=( "${_replaces[@]}") backup=("etc/mkinitcpio.d/${pkgbase}.preset") - install=${pkgbase}.install + install=linux.install - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" KARCH=x86 @@ -129,9 +134,9 @@ _package() { -i "${startdir}/${install}" # install mkinitcpio preset file for kernel - install -D -m644 "${srcdir}/${pkgbase}.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" + install -D -m644 "${srcdir}/linux.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" sed \ - -e "1s|'linux*.*'|'${pkgbase}'|" \ + -e "1s|'linux.*'|'${pkgbase}'|" \ -e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgbase}\"|" \ -e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgbase}.img\"|" \ -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \ @@ -144,10 +149,10 @@ _package() { # gzip -9 all modules to save 100MB of space find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; # make room for external modules - ln -s "../extramodules-${_basekernel}${_localversionname:--libre-pae}" "${pkgdir}/lib/modules/${_kernver}/extramodules" + ln -s "../extramodules-${_basekernel}${_kernelname}" "${pkgdir}/lib/modules/${_kernver}/extramodules" # add real version for building modules and running depmod from post_install/upgrade - mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--libre-pae}" - echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--libre-pae}/version" + mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname}" + echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname}/version" # Now we call depmod... depmod -b "${pkgdir}" -F System.map "${_kernver}" @@ -162,13 +167,13 @@ _package() { _package-headers() { pkgdesc="Header files and scripts for building modules for ${pkgbase^} kernel" - provides=("kernel26${_kernelname}-headers=${pkgver}" "linux${_kernelname}-headers=${pkgver}") - conflicts=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") - replaces=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") + provides=( "${_replaces[@]/%/-headers=${pkgver}}") + conflicts=("${_replaces[@]/%/-headers}") + replaces=( "${_replaces[@]/%/-headers}") install -dm755 "${pkgdir}/usr/lib/modules/${_kernver}" - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" install -D -m644 Makefile \ "${pkgdir}/usr/lib/modules/${_kernver}/build/Makefile" install -D -m644 kernel/Makefile \ diff --git a/kernels/linux-libre-pae/config b/kernels/linux-libre-pae/config index aaa9529c4..1b7cb928d 100644 --- a/kernels/linux-libre-pae/config +++ b/kernels/linux-libre-pae/config @@ -49,7 +49,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="-libre-pae" +CONFIG_LOCALVERSION="-pae" CONFIG_LOCALVERSION_AUTO=y CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/kernels/linux-libre-pae/linux-libre-pae.install b/kernels/linux-libre-pae/linux-libre-pae.install deleted file mode 100644 index 36d1edc78..000000000 --- a/kernels/linux-libre-pae/linux-libre-pae.install +++ /dev/null @@ -1,37 +0,0 @@ -# arg 1: the new package version -# arg 2: the old package version - -KERNEL_NAME=-pae -KERNEL_VERSION= - -post_install () { - # updating module dependencies - echo ">>> Updating module dependencies. Please wait ..." - depmod ${KERNEL_VERSION} - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} -} - -post_upgrade() { - if findmnt --fstab -uno SOURCE /boot &>/dev/null && ! mountpoint -q /boot; then - echo "WARNING: /boot appears to be a separate partition but is not mounted." - fi - - # updating module dependencies - echo ">>> Updating module dependencies. Please wait ..." - depmod ${KERNEL_VERSION} - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - - if [ $(vercmp $2 3.13) -lt 0 ]; then - echo ">>> WARNING: AT keyboard support is no longer built into the kernel." - echo ">>> In order to use your keyboard during early init, you MUST" - echo ">>> include the 'keyboard' hook in your mkinitcpio.conf." - fi -} - -post_remove() { - # also remove the compat symlinks - rm -f boot/initramfs-linux-libre${KERNEL_NAME}.img - rm -f boot/initramfs-linux-libre${KERNEL_NAME}-fallback.img -} diff --git a/kernels/linux-libre-pae/linux.install b/kernels/linux-libre-pae/linux.install new file mode 100644 index 000000000..32514d892 --- /dev/null +++ b/kernels/linux-libre-pae/linux.install @@ -0,0 +1,37 @@ +# arg 1: the new package version +# arg 2: the old package version + +KERNEL_NAME= +KERNEL_VERSION= + +post_install () { + # updating module dependencies + echo ">>> Updating module dependencies. Please wait ..." + depmod ${KERNEL_VERSION} + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} +} + +post_upgrade() { + if findmnt --fstab -uno SOURCE /boot &>/dev/null && ! mountpoint -q /boot; then + echo "WARNING: /boot appears to be a separate partition but is not mounted." + fi + + # updating module dependencies + echo ">>> Updating module dependencies. Please wait ..." + depmod ${KERNEL_VERSION} + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} + + if [ $(vercmp $2 3.13) -lt 0 ]; then + echo ">>> WARNING: AT keyboard support is no longer built into the kernel." + echo ">>> In order to use your keyboard during early init, you MUST" + echo ">>> include the 'keyboard' hook in your mkinitcpio.conf." + fi +} + +post_remove() { + # also remove the compat symlinks + rm -f boot/initramfs-linux-libre${KERNEL_NAME}.img + rm -f boot/initramfs-linux-libre${KERNEL_NAME}-fallback.img +} diff --git a/kernels/linux-libre-pae/linux.preset b/kernels/linux-libre-pae/linux.preset new file mode 100644 index 000000000..b06292d10 --- /dev/null +++ b/kernels/linux-libre-pae/linux.preset @@ -0,0 +1,14 @@ +# mkinitcpio preset file for the 'linux' package + +ALL_config="/etc/mkinitcpio.conf" +ALL_kver="/boot/vmlinuz-linux" + +PRESETS=('default' 'fallback') + +#default_config="/etc/mkinitcpio.conf" +default_image="/boot/initramfs-linux.img" +#default_options="" + +#fallback_config="/etc/mkinitcpio.conf" +fallback_image="/boot/initramfs-linux-fallback.img" +fallback_options="-S autodetect" diff --git a/kernels/linux-libre-rt/PKGBUILD b/kernels/linux-libre-rt/PKGBUILD index ed2a930b5..3148d0048 100644 --- a/kernels/linux-libre-rt/PKGBUILD +++ b/kernels/linux-libre-rt/PKGBUILD @@ -1,3 +1,4 @@ +# $Id$ # Maintainer (Arch): Joakim Hernberg # Contributor (Arch): Ray Rashif # Contributor (Arch): timbosa @@ -10,27 +11,31 @@ # Contributor: Márcio Silva # Contributor: Luke Shumaker -pkgbase=linux-libre-rt # Build stock -libre-rt kernel -#pkgbase=linux-libre-custom # Build kernel with a different name -_basekernel=3.14 -_releasever=12 +pkgbase=linux-libre-rt # Build stock -rt kernel +_pkgbasever=3.14-gnu +_pkgver=3.14.12-gnu +_lxopkgver=3.14.14-gnu # nearly always the same as _pkgver +_rtbasever=3.14 +_rtver=3.14.12 _rtpatchver=rt9 -_pkgver=${_basekernel}.${_releasever} -pkgver=${_basekernel}.${_releasever}_${_rtpatchver} + +_replaces=('kernel26%' 'kernel26-libre%' 'linux%' 'linux-libre%-kmod-alx') # '%' gets replaced with _kernelname + +_srcname=linux-${_pkgbasever%-*} +pkgver=${_pkgver//-/.}_${_rtpatchver} pkgrel=1 -_lxopkgver=${_basekernel}.10 # nearly always the same as pkgver arch=('i686' 'x86_64' 'mips64el') url="https://rt.wiki.kernel.org/" license=('GPL2') makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc') options=('!strip') -source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gnu/linux-libre-${_basekernel}-gnu.tar.xz" - "http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}-gnu/patch-${_basekernel}-gnu-${_pkgver}-gnu.xz" - "http://www.kernel.org/pub/linux/kernel/projects/rt/${_basekernel}/patch-${_pkgver}-${_rtpatchver}.patch.xz" +source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasekernel}/linux-libre-${_pkgbasekernel}.tar.xz" + "http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/patch-${_pkgbasekernel}-${_pkgver}.xz" + "http://www.kernel.org/pub/linux/kernel/projects/rt/${_rtbasever}/patch-${_rtver}-${_rtpatchver}.patch.xz" # the main kernel config files 'config.i686' 'config.x86_64' # standard config files for mkinitcpio ramdisk - "${pkgbase}.preset" + 'linux.preset' 'Kbuild' 'Kbuild.platforms' 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} @@ -40,13 +45,13 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn '0003-module-remove-MODULE_GENERIC_TABLE.patch' '0006-genksyms-fix-typeof-handling.patch' 'revert_timers-dont_raise_softirq_unconditionally_and_fixes.patch' - "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.xz") + "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}_0loongsonlibre_mipsel.tar.xz") sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b' 'bdb59c597c883cc0f78cebccca5652e79b63f30e1d497e0560737ba66a48ae27' 'aedc16bf897b0a1b0789158afad9ffed92be30eaedf8fe2f27cad659673dc93e' '84a7e8d8ffb308f74e3e0bdfec81ac918ae90a6cad579ed5452481b5f5ceb003' '23e14dbfc4f4f2991ed532ce07a856fa168ff74404d0c4e7f736147c8ebf41a3' - 'afb12acaae2b2fc03d0d1367066657aacd60eb242162d90eef7b3f5fbe40f554' + 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' 'c5451d5e1eafc4f8d28b1a2958ec3102c124433a414a86450fc32058e004156b' '55bf07738a3286168a7929ae16dbca29defd14e77b9d24c487ae4c3d12bb9eb9' '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' @@ -66,13 +71,14 @@ if [ "$CARCH" != "mips64el" ]; then fi _kernelname=${pkgbase#linux-libre} -_localversionname=-libre-rt +_replaces=("${_replaces[@]/\%/${_kernelname}}") prepare() { - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" - if [ "${_basekernel}" != "${_pkgver}" ]; then - patch -p1 -i "${srcdir}/patch-${_basekernel}-gnu-${_pkgver}-gnu" + # add upstream patch + if [ "${_pkgbasever}" != "${_pkgver}" ]; then + patch -p1 -i "${srcdir}/patch-${_pkgbasever}-${_pkgver}" fi # add realtime patch @@ -127,12 +133,12 @@ prepare() { fi if [ "${_kernelname}" != "" ]; then - sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" ./.config + sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config fi - # set extraversion to pkgrel - sed -ri "s|^(EXTRAVERSION =).*|\1 -${pkgrel}|" Makefile + # append pkgrel to extraversion + sed -ri "s|^(EXTRAVERSION =.*\S).*|\1-${pkgrel}|" Makefile # don't run depmod on 'make install'. We'll do this ourselves in packaging sed -i '2iexit 0' scripts/depmod.sh @@ -153,7 +159,7 @@ prepare() { } build() { - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" if [ "$CARCH" == "mips64el" ]; then # The build system passes it directly to linker, disable to avoid @@ -168,15 +174,15 @@ build() { } _package() { - pkgdesc="The ${pkgbase^} kernel and modules with realtime preemption" + pkgdesc="The ${pkgbase/linux/Linux} kernel and modules [ "${pkgbase}" = "linux-libre" ] && groups=('base') - depends=('coreutils' 'linux-libre-firmware' 'kmod') + depends=('coreutils' 'linux-firmware' 'kmod' 'mkinitcpio>=0.7') optdepends=('crda: to set the correct wireless channels of your country') - provides=("kernel26${_kernelname}=${pkgver}" "linux${_kernelname}=${pkgver}") - conflicts=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}") - replaces=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}") + provides=( "${_replaces[@]/%/=${pkgver}}") + conflicts=("${_replaces[@]}") + replaces=( "${_replaces[@]}") backup=("etc/mkinitcpio.d/${pkgbase}.preset") - install=${pkgbase}.install + install=linux.install if [ "$CARCH" = "mips64el" ]; then optdepends+=('mkinitcpio: to make the initramfs (needs reinstall of this package)') conflicts+=('mkinitcpio<0.7') @@ -184,7 +190,7 @@ _package() { depends+=('mkinitcpio>=0.7') fi - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" KARCH=x86 [ $CARCH = "mips64el" ] && KARCH=mips @@ -213,9 +219,9 @@ _package() { -i "${startdir}/${install}" # install mkinitcpio preset file for kernel - install -D -m644 "${srcdir}/${pkgbase}.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" + install -D -m644 "${srcdir}/linux.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" sed \ - -e "1s|'linux*.*'|'${pkgbase}'|" \ + -e "1s|'linux.*'|'${pkgbase}'|" \ -e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgbase}\"|" \ -e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgbase}.img\"|" \ -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \ @@ -234,10 +240,10 @@ _package() { # gzip -9 all modules to save 100MB of space find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; # make room for external modules - ln -s "../extramodules-${_basekernel}${_localversionname:--libre-rt}" "${pkgdir}/lib/modules/${_kernver}/extramodules" + ln -s "../extramodules-${_basekernel}${_kernelname}" "${pkgdir}/lib/modules/${_kernver}/extramodules" # add real version for building modules and running depmod from post_install/upgrade - mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--libre-rt}" - echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--libre-rt}/version" + mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname}" + echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname}/version" # Now we call depmod... depmod -b "${pkgdir}" -F System.map "${_kernver}" @@ -252,9 +258,9 @@ _package() { _package-headers() { pkgdesc="Header files and scripts for building modules for ${pkgbase^} kernel" - provides=("kernel26${_kernelname}-headers=${pkgver}" "linux${_kernelname}-headers=${pkgver}") - conflicts=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") - replaces=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") + provides=( "${_replaces[@]/%/-headers=${pkgver}}") + conflicts=("${_replaces[@]/%/-headers}") + replaces=( "${_replaces[@]/%/-headers}") KARCH=x86 [ $CARCH = "mips64el" ] && KARCH=mips @@ -267,7 +273,7 @@ _package-headers() { install -dm755 "${pkgdir}/usr/lib/modules/${_kernver}" - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" install -D -m644 Makefile \ "${pkgdir}/usr/lib/modules/${_kernver}/build/Makefile" install -D -m644 kernel/Makefile \ @@ -391,11 +397,11 @@ _package-headers() { _package-docs() { pkgdesc="Kernel hackers manual - HTML documentation that comes with the ${pkgbase^} kernel" - provides=("kernel26${_kernelname}-docs=${pkgver}" "linux${_kernelname}-docs=${pkgver}") - conflicts=("kernel26${_kernelname}-docs" "kernel26-libre${_kernelname}-docs" "linux${_kernelname}-docs") - replaces=("kernel26${_kernelname}-docs" "kernel26-libre${_kernelname}-docs" "linux${_kernelname}-docs") + provides=( "${_replaces[@]/%/-docs=${pkgver}}") + conflicts=("${_replaces[@]/%/-docs}") + replaces=( "${_replaces[@]/%/-docs}") - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build" cp -al Documentation "${pkgdir}/usr/lib/modules/${_kernver}/build" diff --git a/kernels/linux-libre-rt/config.i686 b/kernels/linux-libre-rt/config.i686 index f34946047..b41244be5 100644 --- a/kernels/linux-libre-rt/config.i686 +++ b/kernels/linux-libre-rt/config.i686 @@ -50,7 +50,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="-libre-rt" +CONFIG_LOCALVERSION="-rt" CONFIG_LOCALVERSION_AUTO=y CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/kernels/linux-libre-rt/config.mips64el b/kernels/linux-libre-rt/config.mips64el index f9dd3966c..a29818f56 100644 --- a/kernels/linux-libre-rt/config.mips64el +++ b/kernels/linux-libre-rt/config.mips64el @@ -175,7 +175,7 @@ CONFIG_BROKEN_ON_SMP=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION="-rt" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/kernels/linux-libre-rt/config.x86_64 b/kernels/linux-libre-rt/config.x86_64 index f332f7cbb..eaf8ad676 100644 --- a/kernels/linux-libre-rt/config.x86_64 +++ b/kernels/linux-libre-rt/config.x86_64 @@ -51,7 +51,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="-libre-rt" +CONFIG_LOCALVERSION="-rt" CONFIG_LOCALVERSION_AUTO=y CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/kernels/linux-libre-rt/linux-libre-rt.install b/kernels/linux-libre-rt/linux-libre-rt.install deleted file mode 100644 index 766e0d7fc..000000000 --- a/kernels/linux-libre-rt/linux-libre-rt.install +++ /dev/null @@ -1,41 +0,0 @@ -# arg 1: the new package version -# arg 2: the old package version - -KERNEL_NAME=-rt -KERNEL_VERSION= - -post_install () { - # updating module dependencies - echo ">>> Updating module dependencies. Please wait ..." - depmod ${KERNEL_VERSION} - if command -v mkinitcpio 2>&1 > /dev/null; then - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - fi -} - -post_upgrade() { - if findmnt --fstab -uno SOURCE /boot &>/dev/null && ! mountpoint -q /boot; then - echo "WARNING: /boot appears to be a separate partition but is not mounted." - fi - - # updating module dependencies - echo ">>> Updating module dependencies. Please wait ..." - depmod ${KERNEL_VERSION} - if command -v mkinitcpio 2>&1 > /dev/null; then - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - fi - - if [ $(vercmp $2 3.13) -lt 0 ]; then - echo ">>> WARNING: AT keyboard support is no longer built into the kernel." - echo ">>> In order to use your keyboard during early init, you MUST" - echo ">>> include the 'keyboard' hook in your mkinitcpio.conf." - fi -} - -post_remove() { - # also remove the compat symlinks - rm -f boot/initramfs-linux-libre${KERNEL_NAME}.img - rm -f boot/initramfs-linux-libre${KERNEL_NAME}-fallback.img -} diff --git a/kernels/linux-libre-rt/linux.install b/kernels/linux-libre-rt/linux.install new file mode 100644 index 000000000..34be5215e --- /dev/null +++ b/kernels/linux-libre-rt/linux.install @@ -0,0 +1,41 @@ +# arg 1: the new package version +# arg 2: the old package version + +KERNEL_NAME= +KERNEL_VERSION= + +post_install () { + # updating module dependencies + echo ">>> Updating module dependencies. Please wait ..." + depmod ${KERNEL_VERSION} + if command -v mkinitcpio 2>&1 > /dev/null; then + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} + fi +} + +post_upgrade() { + if findmnt --fstab -uno SOURCE /boot &>/dev/null && ! mountpoint -q /boot; then + echo "WARNING: /boot appears to be a separate partition but is not mounted." + fi + + # updating module dependencies + echo ">>> Updating module dependencies. Please wait ..." + depmod ${KERNEL_VERSION} + if command -v mkinitcpio 2>&1 > /dev/null; then + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} + fi + + if [ $(vercmp $2 3.13) -lt 0 ]; then + echo ">>> WARNING: AT keyboard support is no longer built into the kernel." + echo ">>> In order to use your keyboard during early init, you MUST" + echo ">>> include the 'keyboard' hook in your mkinitcpio.conf." + fi +} + +post_remove() { + # also remove the compat symlinks + rm -f boot/initramfs-linux-libre${KERNEL_NAME}.img + rm -f boot/initramfs-linux-libre${KERNEL_NAME}-fallback.img +} diff --git a/kernels/linux-libre-rt/linux.preset b/kernels/linux-libre-rt/linux.preset new file mode 100644 index 000000000..b06292d10 --- /dev/null +++ b/kernels/linux-libre-rt/linux.preset @@ -0,0 +1,14 @@ +# mkinitcpio preset file for the 'linux' package + +ALL_config="/etc/mkinitcpio.conf" +ALL_kver="/boot/vmlinuz-linux" + +PRESETS=('default' 'fallback') + +#default_config="/etc/mkinitcpio.conf" +default_image="/boot/initramfs-linux.img" +#default_options="" + +#fallback_config="/etc/mkinitcpio.conf" +fallback_image="/boot/initramfs-linux-fallback.img" +fallback_options="-S autodetect" diff --git a/kernels/linux-libre-xen/PKGBUILD b/kernels/linux-libre-xen/PKGBUILD index e4b0e6716..710e431cd 100644 --- a/kernels/linux-libre-xen/PKGBUILD +++ b/kernels/linux-libre-xen/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 219731 2014-08-14 06:02:01Z tpowa $ +# $Id$ # Contributor (Arch): Tobias Powalowski # Contributor (Arch): Thomas Baechler # Maintainer: André Silva @@ -8,29 +8,33 @@ # Contributor: Márcio Silva # Contributor: Luke Shumaker -pkgbase=linux-libre-xen # Build stock -libre-xen kernel -#pkgbase=linux-libre-custom # Build kernel with a different name -_basekernel=3.16 -pkgver=${_basekernel}.1 +pkgbase=linux-libre-xen # Build stock -xen kernel +_pkgbasever=3.16-gnu +_pkgver=3.16.1-gnu + +_replaces=('kernel26%' 'kernel26-libre%' 'linux%' 'linux-libre%-kmod-alx') # '%' gets replaced with _kernelname + +_srcname=linux-${_pkgbasever%-*} +pkgver=${_pkgver//-/.} pkgrel=1 arch=('i686') url="http://linux-libre.fsfla.org/" license=('GPL2') makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc') options=('!strip') -source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gnu/linux-libre-${_basekernel}-gnu.tar.xz" - "http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/patch-${_basekernel}-gnu-${pkgver}-gnu.xz" +source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasekernel}/linux-libre-${_pkgbasekernel}.tar.xz" + "http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/patch-${_basekernel}-${_pkgver}.xz" # the main kernel config files 'config' # standard config files for mkinitcpio ramdisk - "${pkgbase}.preset" + 'linux.preset' 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' 'compal-laptop-hwmon-fix.patch') sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218' '3bbc78694d76b12b6229799d7c4daf5215b9dd731908d96b03603aceb54ad5c7' '285ba206830c2ab24336133de87351d4ecf5483563d4bb2493eb7ea0cb74e43d' - '7a475ada892857397cf80d2de777825ae94758dc2d9dfa3754ae3d670f4a2f02' + 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' '2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53' 'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015' @@ -38,13 +42,14 @@ sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218' 'f36f61a0a72bcb0a9c04264343503bfbf927c9ea0db819e66734a3933b060588') _kernelname=${pkgbase#linux-libre} -_localversionname=-libre-xen +_replaces=("${_replaces[@]/\%/${_kernelname}}") prepare() { - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" - if [ "${_basekernel}" != "${pkgver}" ]; then - patch -p1 -i "${srcdir}/patch-${_basekernel}-gnu-${pkgver}-gnu" + # add upstream patch + if [ "${_pkgbasever}" != "${_pkgver}" ]; then + patch -p1 -i "${srcdir}/patch-${_pkgbasever}-${_pkgver}" fi # add freedo as boot logo @@ -65,12 +70,12 @@ prepare() { cat "${srcdir}/config" > ./.config # simpler if [ "${_kernelname}" != "" ]; then - sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" ./.config + sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config fi - # set extraversion to pkgrel - sed -ri "s|^(EXTRAVERSION =).*|\1 -${pkgrel}|" Makefile + # append pkgrel to extraversion + sed -ri "s|^(EXTRAVERSION =.*\S).*|\1-${pkgrel}|" Makefile # don't run depmod on 'make install'. We'll do this ourselves in packaging sed -i '2iexit 0' scripts/depmod.sh @@ -91,23 +96,23 @@ prepare() { } build() { - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" make ${MAKEFLAGS} LOCALVERSION= bzImage modules } _package() { - pkgdesc="The ${pkgbase^} kernel and modules with Xen guest support" + pkgdesc="The ${pkgbase/linux/Linux} kernel and modules" [ "${pkgbase}" = "linux-libre" ] && groups=('base') - depends=('coreutils' 'linux-libre-firmware' 'kmod' 'mkinitcpio>=0.7') + depends=('coreutils' 'linux-firmware' 'kmod' 'mkinitcpio>=0.7') optdepends=('crda: to set the correct wireless channels of your country') - provides=("kernel26${_kernelname}=${pkgver}" "linux${_kernelname}=${pkgver}") - conflicts=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}") - replaces=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}") + provides=( "${_replaces[@]/%/=${pkgver}}") + conflicts=("${_replaces[@]}") + replaces=( "${_replaces[@]}") backup=("etc/mkinitcpio.d/${pkgbase}.preset") - install=${pkgbase}.install + install=linux.install - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" KARCH=x86 @@ -129,9 +134,9 @@ _package() { -i "${startdir}/${install}" # install mkinitcpio preset file for kernel - install -D -m644 "${srcdir}/${pkgbase}.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" + install -D -m644 "${srcdir}/linux.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" sed \ - -e "1s|'linux*.*'|'${pkgbase}'|" \ + -e "1s|'linux.*'|'${pkgbase}'|" \ -e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgbase}\"|" \ -e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgbase}.img\"|" \ -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \ @@ -144,10 +149,10 @@ _package() { # gzip -9 all modules to save 100MB of space find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; # make room for external modules - ln -s "../extramodules-${_basekernel}${_localversionname:--libre-xen}" "${pkgdir}/lib/modules/${_kernver}/extramodules" + ln -s "../extramodules-${_basekernel}${_kernelname}" "${pkgdir}/lib/modules/${_kernver}/extramodules" # add real version for building modules and running depmod from post_install/upgrade - mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--libre-xen}" - echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--libre-xen}/version" + mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname}" + echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname}/version" # Now we call depmod... depmod -b "${pkgdir}" -F System.map "${_kernver}" @@ -162,13 +167,13 @@ _package() { _package-headers() { pkgdesc="Header files and scripts for building modules for ${pkgbase^} kernel" - provides=("kernel26${_kernelname}-headers=${pkgver}" "linux${_kernelname}-headers=${pkgver}") - conflicts=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") - replaces=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers") + provides=( "${_replaces[@]/%/-headers=${pkgver}}") + conflicts=("${_replaces[@]/%/-headers}") + replaces=( "${_replaces[@]/%/-headers}") install -dm755 "${pkgdir}/usr/lib/modules/${_kernver}" - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" install -D -m644 Makefile \ "${pkgdir}/usr/lib/modules/${_kernver}/build/Makefile" install -D -m644 kernel/Makefile \ @@ -281,11 +286,11 @@ _package-headers() { _package-docs() { pkgdesc="Kernel hackers manual - HTML documentation that comes with the ${pkgbase^} kernel" - provides=("kernel26${_kernelname}-docs=${pkgver}" "linux${_kernelname}-docs=${pkgver}") - conflicts=("kernel26${_kernelname}-docs" "kernel26-libre${_kernelname}-docs" "linux${_kernelname}-docs") - replaces=("kernel26${_kernelname}-docs" "kernel26-libre${_kernelname}-docs" "linux${_kernelname}-docs") + provides=( "${_replaces[@]/%/-docs=${pkgver}}") + conflicts=("${_replaces[@]/%/-docs}") + replaces=( "${_replaces[@]/%/-docs}") - cd "${srcdir}/linux-${_basekernel}" + cd "${srcdir}/${_srcname}" mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build" cp -al Documentation "${pkgdir}/usr/lib/modules/${_kernver}/build" diff --git a/kernels/linux-libre-xen/config b/kernels/linux-libre-xen/config index 5f73893f3..de57c71a1 100644 --- a/kernels/linux-libre-xen/config +++ b/kernels/linux-libre-xen/config @@ -49,7 +49,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="-libre-xen" +CONFIG_LOCALVERSION="-xen" CONFIG_LOCALVERSION_AUTO=y CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/kernels/linux-libre-xen/linux-libre-xen.install b/kernels/linux-libre-xen/linux-libre-xen.install deleted file mode 100644 index 388c1172e..000000000 --- a/kernels/linux-libre-xen/linux-libre-xen.install +++ /dev/null @@ -1,37 +0,0 @@ -# arg 1: the new package version -# arg 2: the old package version - -KERNEL_NAME=-xen -KERNEL_VERSION= - -post_install () { - # updating module dependencies - echo ">>> Updating module dependencies. Please wait ..." - depmod ${KERNEL_VERSION} - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} -} - -post_upgrade() { - if findmnt --fstab -uno SOURCE /boot &>/dev/null && ! mountpoint -q /boot; then - echo "WARNING: /boot appears to be a separate partition but is not mounted." - fi - - # updating module dependencies - echo ">>> Updating module dependencies. Please wait ..." - depmod ${KERNEL_VERSION} - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - - if [ $(vercmp $2 3.13) -lt 0 ]; then - echo ">>> WARNING: AT keyboard support is no longer built into the kernel." - echo ">>> In order to use your keyboard during early init, you MUST" - echo ">>> include the 'keyboard' hook in your mkinitcpio.conf." - fi -} - -post_remove() { - # also remove the compat symlinks - rm -f boot/initramfs-linux-libre${KERNEL_NAME}.img - rm -f boot/initramfs-linux-libre${KERNEL_NAME}-fallback.img -} diff --git a/kernels/linux-libre-xen/linux.install b/kernels/linux-libre-xen/linux.install new file mode 100644 index 000000000..32514d892 --- /dev/null +++ b/kernels/linux-libre-xen/linux.install @@ -0,0 +1,37 @@ +# arg 1: the new package version +# arg 2: the old package version + +KERNEL_NAME= +KERNEL_VERSION= + +post_install () { + # updating module dependencies + echo ">>> Updating module dependencies. Please wait ..." + depmod ${KERNEL_VERSION} + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} +} + +post_upgrade() { + if findmnt --fstab -uno SOURCE /boot &>/dev/null && ! mountpoint -q /boot; then + echo "WARNING: /boot appears to be a separate partition but is not mounted." + fi + + # updating module dependencies + echo ">>> Updating module dependencies. Please wait ..." + depmod ${KERNEL_VERSION} + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} + + if [ $(vercmp $2 3.13) -lt 0 ]; then + echo ">>> WARNING: AT keyboard support is no longer built into the kernel." + echo ">>> In order to use your keyboard during early init, you MUST" + echo ">>> include the 'keyboard' hook in your mkinitcpio.conf." + fi +} + +post_remove() { + # also remove the compat symlinks + rm -f boot/initramfs-linux-libre${KERNEL_NAME}.img + rm -f boot/initramfs-linux-libre${KERNEL_NAME}-fallback.img +} diff --git a/kernels/linux-libre-xen/linux.preset b/kernels/linux-libre-xen/linux.preset new file mode 100644 index 000000000..b06292d10 --- /dev/null +++ b/kernels/linux-libre-xen/linux.preset @@ -0,0 +1,14 @@ +# mkinitcpio preset file for the 'linux' package + +ALL_config="/etc/mkinitcpio.conf" +ALL_kver="/boot/vmlinuz-linux" + +PRESETS=('default' 'fallback') + +#default_config="/etc/mkinitcpio.conf" +default_image="/boot/initramfs-linux.img" +#default_options="" + +#fallback_config="/etc/mkinitcpio.conf" +fallback_image="/boot/initramfs-linux-fallback.img" +fallback_options="-S autodetect" diff --git a/libre/linux-libre-grsec/config.i686 b/libre/linux-libre-grsec/config.i686 index 7d18bc40a..5e28406ee 100644 --- a/libre/linux-libre-grsec/config.i686 +++ b/libre/linux-libre-grsec/config.i686 @@ -48,7 +48,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="-libre-grsec" +CONFIG_LOCALVERSION="-grsec" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/libre/linux-libre-grsec/config.mips64el b/libre/linux-libre-grsec/config.mips64el index 0072421fc..54a49ac3a 100644 --- a/libre/linux-libre-grsec/config.mips64el +++ b/libre/linux-libre-grsec/config.mips64el @@ -172,7 +172,7 @@ CONFIG_BROKEN_ON_SMP=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION="-grsec" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/libre/linux-libre-grsec/config.x86_64 b/libre/linux-libre-grsec/config.x86_64 index af4f751af..1ed883b66 100644 --- a/libre/linux-libre-grsec/config.x86_64 +++ b/libre/linux-libre-grsec/config.x86_64 @@ -49,7 +49,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="-libre-grsec" +CONFIG_LOCALVERSION="-grsec" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/libre/linux-libre-lts/config.i686 b/libre/linux-libre-lts/config.i686 index 37b745087..2cf4c9e55 100644 --- a/libre/linux-libre-lts/config.i686 +++ b/libre/linux-libre-lts/config.i686 @@ -49,7 +49,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="-libre-lts" +CONFIG_LOCALVERSION="-lts" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/libre/linux-libre-lts/config.mips64el b/libre/linux-libre-lts/config.mips64el index 80a89075e..7a06af0c9 100644 --- a/libre/linux-libre-lts/config.mips64el +++ b/libre/linux-libre-lts/config.mips64el @@ -175,7 +175,7 @@ CONFIG_BROKEN_ON_SMP=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION="-lts" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/libre/linux-libre-lts/config.x86_64 b/libre/linux-libre-lts/config.x86_64 index ada845fdc..a98db3b25 100644 --- a/libre/linux-libre-lts/config.x86_64 +++ b/libre/linux-libre-lts/config.x86_64 @@ -50,7 +50,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="-libre-lts" +CONFIG_LOCALVERSION="-lts" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD index 49899ab7d..a2477e7d2 100644 --- a/libre/linux-libre/PKGBUILD +++ b/libre/linux-libre/PKGBUILD @@ -9,7 +9,6 @@ # Contributor: Luke Shumaker pkgbase=linux-libre # Build stock "" kernel -#pkgbase=linux-libre-custom # Build kernel with a different name _pkgbasever=3.16-gnu _pkgver=3.16.1-gnu -- cgit v1.2.3 From f9c8adc1f16c2d9e018cacc688101c30b9dd8adb Mon Sep 17 00:00:00 2001 From: "coadde [Márcio Alexandre Silva Delgado]" Date: Fri, 22 Aug 2014 22:14:51 -0300 Subject: linux-libre*: Remove mips64el hacks --- kernels/linux-libre-lts-knock/Kbuild | 19 ---- kernels/linux-libre-lts-knock/Kbuild.platforms | 6 -- kernels/linux-libre-lts-knock/PKGBUILD | 104 +++++---------------- .../gnewsense-binutils-flag.patch | 28 ------ kernels/linux-libre-lts-knock/linux.install | 12 +-- kernels/linux-libre-pae/PKGBUILD | 2 +- kernels/linux-libre-rt/Kbuild | 19 ---- kernels/linux-libre-rt/Kbuild.platforms | 6 -- kernels/linux-libre-rt/PKGBUILD | 91 ++++-------------- .../linux-libre-rt/gnewsense-binutils-flag.patch | 28 ------ kernels/linux-libre-rt/linux.install | 12 +-- kernels/linux-libre-xen/PKGBUILD | 2 +- libre/linux-libre-grsec/PKGBUILD | 12 ++- .../gnewsense-binutils-flag.patch | 28 ------ libre/linux-libre-lts/PKGBUILD | 12 ++- .../linux-libre-lts/gnewsense-binutils-flag.patch | 28 ------ libre/linux-libre/PKGBUILD | 14 ++- libre/linux-libre/gnewsense-binutils-flag.patch | 28 ------ 18 files changed, 77 insertions(+), 374 deletions(-) delete mode 100644 kernels/linux-libre-lts-knock/Kbuild delete mode 100644 kernels/linux-libre-lts-knock/Kbuild.platforms delete mode 100644 kernels/linux-libre-lts-knock/gnewsense-binutils-flag.patch delete mode 100644 kernels/linux-libre-rt/Kbuild delete mode 100644 kernels/linux-libre-rt/Kbuild.platforms delete mode 100644 kernels/linux-libre-rt/gnewsense-binutils-flag.patch delete mode 100644 libre/linux-libre-grsec/gnewsense-binutils-flag.patch delete mode 100644 libre/linux-libre-lts/gnewsense-binutils-flag.patch delete mode 100644 libre/linux-libre/gnewsense-binutils-flag.patch diff --git a/kernels/linux-libre-lts-knock/Kbuild b/kernels/linux-libre-lts-knock/Kbuild deleted file mode 100644 index 8a9d7dceb..000000000 --- a/kernels/linux-libre-lts-knock/Kbuild +++ /dev/null @@ -1,19 +0,0 @@ -# Fail on warnings - also for files referenced in subdirs -# -Werror can be disabled for specific files using: -# CFLAGS_ := -Wno-error -subdir-ccflags-y := -Wno-error - -# platform specific definitions -include arch/mips/Kbuild.platforms -obj-y := $(platform-y) - -# make clean traverses $(obj-) without having included .config, so -# everything ends up here -obj- := $(platform-) - -# mips object files -# The object files are linked as core-y files would be linked - -obj-y += kernel/ -obj-y += mm/ -obj-y += math-emu/ diff --git a/kernels/linux-libre-lts-knock/Kbuild.platforms b/kernels/linux-libre-lts-knock/Kbuild.platforms deleted file mode 100644 index 90a226888..000000000 --- a/kernels/linux-libre-lts-knock/Kbuild.platforms +++ /dev/null @@ -1,6 +0,0 @@ -# All platforms listed in alphabetic order - -platforms += loongson - -# include the platform specific files -include $(patsubst %, $(srctree)/arch/mips/%/Platform, $(platforms)) diff --git a/kernels/linux-libre-lts-knock/PKGBUILD b/kernels/linux-libre-lts-knock/PKGBUILD index 4868b72b0..20d9dbfbe 100644 --- a/kernels/linux-libre-lts-knock/PKGBUILD +++ b/kernels/linux-libre-lts-knock/PKGBUILD @@ -11,7 +11,6 @@ pkgbase=linux-libre-lts-knock # Build stock -lts-knock kernel _pkgbasever=3.10-gnu _pkgver=3.10.53-gnu -_lxopkgver=3.10.53-gnu # nearly always the same as _pkgver _knockpatchver=3.10 _replaces=('kernel26%' 'kernel26-libre%' 'linux%' 'linux-libre%-kmod-alx') # '%' gets replaced with _kernelname @@ -28,38 +27,36 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/li "http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/patch-${_pkgbasever}-${_pkgver}.xz" "http://gnunet.org/sites/default/files/tcp_stealth_${_knockpatchver}.diff" # the main kernel config files - 'config.i686' 'config.x86_64' + 'config.i686' 'config.x86_64' 'config.mips64el' # standard config files for mkinitcpio ramdisk 'linux.preset' - 'Kbuild' - 'Kbuild.platforms' 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' 'criu-no-expert.patch' - "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}_0loongsonlibre_mipsel.tar.xz") + # loongson-community patch: http://linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/ + '3.10.50-33c9ab76eb-loongson-community.patch') md5sums=('d562fd52580a3b6b18b6eeb5921d1d5c' '4840f0db6af66cbce923b1043971c256' '26380d6f05471ef8e065a77d87588009' '25ad0606de251a5734f4535c61452a56' '158cb922d9b43028f6c45c696e773915' + '' 'eb14dcfd80c00852ef81ded6e826826a' - '2967cecc3af9f954ccc822fd63dca6ff' - '8267264d9a8966e57fdacd1fa1fc65c4' '071d4939e9ef4256e4c027ef3c864903' '2ae9ef17f45b39ff9e6e172c0c97d263' '96c2ae40e3b1cdd90fe7e6dba8078922' 'f3def2cefdcbb954c21d8505d23cc83c' 'd50c1ac47394e9aec637002ef3392bd1' - '200668954d1cee93fb649196e3df8bde') -if [ "$CARCH" != "mips64el" ]; then - # don't use the Loongson-specific patches on non-mips64el arches. - unset source[${#source[@]}-1] - unset md5sums[${#md5sums[@]}-1] -fi + '') _kernelname=${pkgbase#linux-libre} _replaces=("${_replaces[@]/\%/${_kernelname}}") +case "$CARCH" in + i686|x86_64) KARCH=x86;; + mips64el) KARCH=mips;; +esac + prepare() { cd "${srcdir}/${_srcname}" @@ -87,27 +84,10 @@ prepare() { # patch from fedora patch -Np1 -i "${srcdir}/criu-no-expert.patch" - if [ "$CARCH" == "mips64el" ]; then - sed -i "s|^EXTRAVERSION.*|EXTRAVERSION =-libre-lts-knock|" Makefile - sed -r "s|^( SUBLEVEL = ).*|\1$_sublevel|" \ - < "${srcdir}/lxo-config.patch" > lxo-config.patch - msg2 "Adding loongson-community patches" - patch -Np1 -i ${srcdir}/${_basekernel}*-*-loongson-community.patch - patch -Np0 -i lxo-config.patch - - # ensure N32, add localversion, remove uevent helper as per - # https://git.kernel.org/?p=linux/hotplug/udev.git;a=blob_plain;f=README - # and make USB storage support builtin (e.g. for booting from USB - # disks without slowly loading an initramfs) - sed -ri \ - -e "s|CONFIG_MIPS32_N32=.*|CONFIG_MIPS32_N32=y|g" \ - -e "s|CONFIG_UEVENT_HELPER_PATH=.*|CONFIG_UEVENT_HELPER_PATH=\"\"|g" \ - -e "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" \ - -e "s;(CONFIG_USB(_COMMON|_EHCI_HCD|_OHCI_HCD|_STORAGE.*|_UAS)?)=.*;\1=y;g" \ - ./.config - else - cat "${srcdir}/config.${CARCH}" > ./.config # simpler - fi + # Adding loongson-community patch + patch -p1 -i ${srcdir}/3.10.50-33c9ab76eb-loongson-community.patch + + cat "${srcdir}/config.${CARCH}" > ./.config if [ "${_kernelname}" != "" ]; then sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config @@ -139,10 +119,12 @@ build() { yes "" | make config >/dev/null # save configuration for later reuse - if [ "${CARCH}" = "x86_64" ]; then - cat .config > "${startdir}/config.x86_64.last" - else + if [ "${CARCH}" = "i686" ]; then cat .config > "${startdir}/config.i686.last" + elif [ "${CARCH}" = "x86_64" ]; then + cat .config > "${startdir}/config.x86_64.last" + elif [ "${CARCH}" = "mips64el" ]; then + cat .config > "${startdir}/config.mips64el.last" fi #################### @@ -152,16 +134,7 @@ build() { #################### # build! - if [ "$CARCH" == "mips64el" ]; then - # The build system passes it directly to linker, disable to avoid - # having unknown -Wl,... options. - export LDFLAGS="" - # bzImage is arch-specific and not supported on mips; vmlinux is - # useful for oprofile. - make ${MAKEFLAGS} LOCALVERSION= vmlinux vmlinuz modules - else - make ${MAKEFLAGS} LOCALVERSION= bzImage modules - fi + make ${MAKEFLAGS} LOCALVERSION= bzImage modules } _package() { @@ -174,16 +147,8 @@ _package() { replaces=( "${_replaces[@]}") backup=("etc/mkinitcpio.d/${pkgbase}.preset") install=linux.install - if [ "$CARCH" = "mips64el" ]; then - optdepends+=('mkinitcpio: to make the initramfs (needs reinstall of this package)') - conflicts+=('mkinitcpio<0.7') - else - depends+=('mkinitcpio>=0.7') - fi cd "${srcdir}/${_srcname} - KARCH=x86 - [ $CARCH = "mips64el" ] && KARCH=mips # get kernel version _kernver="$(make LOCALVERSION= kernelrelease)" @@ -193,12 +158,7 @@ _package() { mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot} make LOCALVERSION= INSTALL_MOD_PATH="${pkgdir}" modules_install - if [ "$CARCH" == "mips64el" ]; then - cp vmlinuz "${pkgdir}/boot/vmlinuz-${pkgbase}" - cp vmlinux "${pkgdir}/boot/vmlinux-${pkgbase}" - else - cp arch/${KARCH}/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}" - fi + cp arch/${KARCH}/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}" # add vmlinux install -D -m644 vmlinux "${pkgdir}/usr/src/linux-${_kernver}/vmlinux" @@ -220,12 +180,6 @@ _package() { -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \ -i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" - # mkinitcpio 0.7 relies on bzImage to find the kernel version - if [ "$CARCH" == "mips64el" ]; then - sed -e "s|ALL_kver=.*|ALL_kver=\"${_kernver}\"|" \ - -i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" - fi - # remove build and source links rm -f "${pkgdir}"/lib/modules/${_kernver}/{source,build} # remove the firmware @@ -251,9 +205,6 @@ _package-headers() { conflicts=("${_replaces[@]/%/-headers}") replaces=( "${_replaces[@]/%/-headers}") - KARCH=x86 - [ $CARCH = "mips64el" ] && KARCH=mips - # in case of repackaging this is empty if [ -z "${_kernver}" ]; then cd "${srcdir}/linux-${_basekernel}" @@ -288,12 +239,6 @@ _package-headers() { cp Module.symvers "${pkgdir}/usr/src/linux-${_kernver}" cp -a scripts "${pkgdir}/usr/src/linux-${_kernver}" - if [ "$CARCH" = "mips64el" ]; then - cp arch/${KARCH}/Kbuild "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/" - cp -a arch/${KARCH}/loongson "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/" - cp ${srcdir}/Kbuild.platforms "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/" - fi - # fix permissions on scripts dir chmod og-w -R "${pkgdir}/usr/src/linux-${_kernver}/scripts" mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/.tmp_versions" @@ -397,12 +342,7 @@ _package-headers() { done # remove unneeded architectures - rm -rf "${pkgdir}"/usr/src/linux-${_kernver}/arch/{alpha,arc,arm,arm26,arm64,avr32,blackfin,c6x,cris,frv,h8300,hexagon,ia64,m32r,m68k,m68knommu,metag,microblaze,mn10300,openrisc,parisc,powerpc,ppc,s390,score,sh,sh64,sparc,sparc64,tile,unicore32,um,v850,xtensa} - if [ "$CARCH" = "mips64el" ]; then - rm -rf ${pkgdir}/usr/src/linux-${_kernver}/arch/x86 - else - rm -rf ${pkgdir}/usr/src/linux-${_kernver}/arch/mips - fi + find "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch -mindepth 1 -maxdepth 1 -type d -not -name "$KARCH" -exec rm -rf {} + } _package-docs() { diff --git a/kernels/linux-libre-lts-knock/gnewsense-binutils-flag.patch b/kernels/linux-libre-lts-knock/gnewsense-binutils-flag.patch deleted file mode 100644 index 5f2d44f99..000000000 --- a/kernels/linux-libre-lts-knock/gnewsense-binutils-flag.patch +++ /dev/null @@ -1,28 +0,0 @@ -Our binutils somehow ended up with a -mfix-gs2f-kernel, rather than --mfix-ls2f-kernel. Cope with it. - -Index: arch/mips/loongson/Platform -=================================================================== ---- arch/mips/loongson/Platform.orig 2010-10-25 19:09:49.000000000 +0000 -+++ arch/mips/loongson/Platform 2010-10-25 19:10:44.000000000 +0000 -@@ -10,6 +10,12 @@ - $(call cc-option,-march=loongson2f,-march=r4600) - # Enable the workarounds for Loongson2f - ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS -+ ifneq ($(call as-option,-Wa$(comma)-mfix-gs2f-kernel,),) -+ cflags-$(CONFIG_CPU_NOP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel -+ ifneq ($(CONFIG_CPU_NOP_WORKAROUNDS),$(CONFIG_CPU_JUMP_WORKAROUNDS)) -+ cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel -+ endif -+ else - ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-nop,),) - $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-nop) - else -@@ -20,6 +26,7 @@ - else - cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-jump - endif -+ endif - endif - - # diff --git a/kernels/linux-libre-lts-knock/linux.install b/kernels/linux-libre-lts-knock/linux.install index 8d5658aab..c0ee63a83 100644 --- a/kernels/linux-libre-lts-knock/linux.install +++ b/kernels/linux-libre-lts-knock/linux.install @@ -8,10 +8,8 @@ post_install () { # updating module dependencies echo ">>> Updating module dependencies. Please wait ..." depmod ${KERNEL_VERSION} - if command -v mkinitcpio 2>&1 > /dev/null; then - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - fi + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} } post_upgrade() { @@ -22,10 +20,8 @@ post_upgrade() { # updating module dependencies echo ">>> Updating module dependencies. Please wait ..." depmod ${KERNEL_VERSION} - if command -v mkinitcpio 2>&1 > /dev/null; then - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - fi + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} } post_remove() { diff --git a/kernels/linux-libre-pae/PKGBUILD b/kernels/linux-libre-pae/PKGBUILD index e742971db..2fd037ac3 100644 --- a/kernels/linux-libre-pae/PKGBUILD +++ b/kernels/linux-libre-pae/PKGBUILD @@ -281,7 +281,7 @@ _package-headers() { done # remove unneeded architectures - rm -rf "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch/{alpha,arc,arm,arm26,arm64,avr32,blackfin,c6x,cris,frv,h8300,hexagon,ia64,m32r,m68k,m68knommu,metag,mips,microblaze,mn10300,openrisc,parisc,powerpc,ppc,s390,score,sh,sh64,sparc,sparc64,tile,unicore32,um,v850,xtensa} + find "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch -mindepth 1 -maxdepth 1 -type d -not -name "x86" -exec rm -rf {} + } _package-docs() { diff --git a/kernels/linux-libre-rt/Kbuild b/kernels/linux-libre-rt/Kbuild deleted file mode 100644 index 8a9d7dceb..000000000 --- a/kernels/linux-libre-rt/Kbuild +++ /dev/null @@ -1,19 +0,0 @@ -# Fail on warnings - also for files referenced in subdirs -# -Werror can be disabled for specific files using: -# CFLAGS_ := -Wno-error -subdir-ccflags-y := -Wno-error - -# platform specific definitions -include arch/mips/Kbuild.platforms -obj-y := $(platform-y) - -# make clean traverses $(obj-) without having included .config, so -# everything ends up here -obj- := $(platform-) - -# mips object files -# The object files are linked as core-y files would be linked - -obj-y += kernel/ -obj-y += mm/ -obj-y += math-emu/ diff --git a/kernels/linux-libre-rt/Kbuild.platforms b/kernels/linux-libre-rt/Kbuild.platforms deleted file mode 100644 index 90a226888..000000000 --- a/kernels/linux-libre-rt/Kbuild.platforms +++ /dev/null @@ -1,6 +0,0 @@ -# All platforms listed in alphabetic order - -platforms += loongson - -# include the platform specific files -include $(patsubst %, $(srctree)/arch/mips/%/Platform, $(platforms)) diff --git a/kernels/linux-libre-rt/PKGBUILD b/kernels/linux-libre-rt/PKGBUILD index 3148d0048..f0c6c4b31 100644 --- a/kernels/linux-libre-rt/PKGBUILD +++ b/kernels/linux-libre-rt/PKGBUILD @@ -14,7 +14,6 @@ pkgbase=linux-libre-rt # Build stock -rt kernel _pkgbasever=3.14-gnu _pkgver=3.14.12-gnu -_lxopkgver=3.14.14-gnu # nearly always the same as _pkgver _rtbasever=3.14 _rtver=3.14.12 _rtpatchver=rt9 @@ -33,11 +32,9 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasekernel} "http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/patch-${_pkgbasekernel}-${_pkgver}.xz" "http://www.kernel.org/pub/linux/kernel/projects/rt/${_rtbasever}/patch-${_rtver}-${_rtpatchver}.patch.xz" # the main kernel config files - 'config.i686' 'config.x86_64' + 'config.i686' 'config.x86_64' 'config.mips64el' # standard config files for mkinitcpio ramdisk 'linux.preset' - 'Kbuild' - 'Kbuild.platforms' 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' '0001-Bluetooth-allocate-static-minor-for-vhci.patch' @@ -45,15 +42,15 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasekernel} '0003-module-remove-MODULE_GENERIC_TABLE.patch' '0006-genksyms-fix-typeof-handling.patch' 'revert_timers-dont_raise_softirq_unconditionally_and_fixes.patch' - "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}_0loongsonlibre_mipsel.tar.xz") + # loongson-community patch: http://linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/ + '3.14.14-a410a5e2b7-loongson-community.patch') sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b' 'bdb59c597c883cc0f78cebccca5652e79b63f30e1d497e0560737ba66a48ae27' 'aedc16bf897b0a1b0789158afad9ffed92be30eaedf8fe2f27cad659673dc93e' '84a7e8d8ffb308f74e3e0bdfec81ac918ae90a6cad579ed5452481b5f5ceb003' '23e14dbfc4f4f2991ed532ce07a856fa168ff74404d0c4e7f736147c8ebf41a3' + '' 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' - 'c5451d5e1eafc4f8d28b1a2958ec3102c124433a414a86450fc32058e004156b' - '55bf07738a3286168a7929ae16dbca29defd14e77b9d24c487ae4c3d12bb9eb9' '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' '2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53' 'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015' @@ -63,16 +60,16 @@ sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b' '65d58f63215ee3c5f9c4fc6bce36fc5311a6c7dbdbe1ad29de40647b47ff9c0d' 'cf2e7a2d00787f754028e7459688c2755a406e632ce48b60952fa4ff7ed6f4b7' 'b0107c64c582f7c6fa2e0c7c32a5f944c644f53b5df04667d487731b3c3b4060' - '727c9328414e0b18478144b700ddb9507269aff1af0130e04f091189efd4ccb8') -if [ "$CARCH" != "mips64el" ]; then - # don't use the Loongson-specific patches on non-mips64el arches. - unset source[${#source[@]}-1] - unset sha256sums[${#sha256sums[@]}-1] -fi + '') _kernelname=${pkgbase#linux-libre} _replaces=("${_replaces[@]/\%/${_kernelname}}") +case "$CARCH" in + i686|x86_64) KARCH=x86;; + mips64el) KARCH=mips;; +esac + prepare() { cd "${srcdir}/${_srcname}" @@ -110,27 +107,10 @@ prepare() { # http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=dc53324060f324e8af6867f57bf4891c13c6ef18 patch -p1 -i "${srcdir}/0006-genksyms-fix-typeof-handling.patch" - if [ "$CARCH" == "mips64el" ]; then - sed -i "s|^EXTRAVERSION.*|EXTRAVERSION =-libre-rt|" Makefile - sed -r "s|^( SUBLEVEL = ).*|\1$_sublevel|" \ - < "${srcdir}/lxo-config.patch" > lxo-config.patch - msg2 "Adding loongson-community patches" - patch -p1 -i ${srcdir}/${_basekernel}*-*-loongson-community.patch - patch -p0 -i lxo-config.patch - - # ensure N32, add localversion, remove uevent helper as per - # https://git.kernel.org/?p=linux/hotplug/udev.git;a=blob_plain;f=README - # and make USB storage support builtin (e.g. for booting from USB - # disks without slowly loading an initramfs) - sed -ri \ - -e "s|CONFIG_MIPS32_N32=.*|CONFIG_MIPS32_N32=y|g" \ - -e "s|CONFIG_UEVENT_HELPER_PATH=.*|CONFIG_UEVENT_HELPER_PATH=\"\"|g" \ - -e "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" \ - -e "s;(CONFIG_USB(_COMMON|_EHCI_HCD|_OHCI_HCD|_STORAGE.*|_UAS)?)=.*;\1=y;g" \ - ./.config - else - cat "${srcdir}/config.${CARCH}" > ./.config # simpler - fi + # Adding loongson-community patch + patch -p1 -i ${srcdir}/3.14.14-a410a5e2b7-loongson-community.patch + + cat "${srcdir}/config.${CARCH}" > ./.config if [ "${_kernelname}" != "" ]; then sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config @@ -161,16 +141,7 @@ prepare() { build() { cd "${srcdir}/${_srcname}" - if [ "$CARCH" == "mips64el" ]; then - # The build system passes it directly to linker, disable to avoid - # having unknown -Wl,... options. - export LDFLAGS="" - # bzImage is arch-specific and not supported on mips; vmlinux is - # useful for oprofile. - make ${MAKEFLAGS} LOCALVERSION= vmlinux vmlinuz modules - else - make ${MAKEFLAGS} LOCALVERSION= bzImage modules - fi + make ${MAKEFLAGS} LOCALVERSION= bzImage modules } _package() { @@ -183,18 +154,9 @@ _package() { replaces=( "${_replaces[@]}") backup=("etc/mkinitcpio.d/${pkgbase}.preset") install=linux.install - if [ "$CARCH" = "mips64el" ]; then - optdepends+=('mkinitcpio: to make the initramfs (needs reinstall of this package)') - conflicts+=('mkinitcpio<0.7') - else - depends+=('mkinitcpio>=0.7') - fi cd "${srcdir}/${_srcname}" - KARCH=x86 - [ $CARCH = "mips64el" ] && KARCH=mips - # get kernel version _kernver="$(make LOCALVERSION= kernelrelease)" _basekernel=${_kernver%%-*} @@ -203,12 +165,7 @@ _package() { mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot} make LOCALVERSION= INSTALL_MOD_PATH="${pkgdir}" modules_install - if [ "$CARCH" == "mips64el" ]; then - cp vmlinuz "${pkgdir}/boot/vmlinuz-${pkgbase}" - cp vmlinux "${pkgdir}/boot/vmlinux-${pkgbase}" - else - cp arch/${KARCH}/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}" - fi + cp arch/${KARCH}/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}" # set correct depmod command for install cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" @@ -227,12 +184,6 @@ _package() { -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \ -i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" - # mkinitcpio 0.7 relies on bzImage to find the kernel version - if [ "$CARCH" == "mips64el" ]; then - sed -e "s|ALL_kver=.*|ALL_kver=\"${_kernver}\"|" \ - -i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" - fi - # remove build and source links rm -f "${pkgdir}"/lib/modules/${_kernver}/{source,build} # remove the firmware @@ -262,9 +213,6 @@ _package-headers() { conflicts=("${_replaces[@]/%/-headers}") replaces=( "${_replaces[@]/%/-headers}") - KARCH=x86 - [ $CARCH = "mips64el" ] && KARCH=mips - # in case of repackaging this is empty if [ -z "${_kernver}" ]; then cd "${srcdir}/linux-${_basekernel}" @@ -387,12 +335,7 @@ _package-headers() { done # remove unneeded architectures - rm -rf "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch/{alpha,arc,arm,arm26,arm64,avr32,blackfin,c6x,cris,frv,h8300,hexagon,ia64,m32r,m68k,m68knommu,metag,microblaze,mn10300,openrisc,parisc,powerpc,ppc,s390,score,sh,sh64,sparc,sparc64,tile,unicore32,um,v850,xtensa} - if [ "$CARCH" = "mips64el" ]; then - rm -rf ${pkgdir}/usr/lib/modules/${_kernver}/build/arch/x86 - else - rm -rf ${pkgdir}/usr/lib/modules/${_kernver}/build/arch/mips - fi + find "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch -mindepth 1 -maxdepth 1 -type d -not -name "$KARCH" -exec rm -rf {} + } _package-docs() { diff --git a/kernels/linux-libre-rt/gnewsense-binutils-flag.patch b/kernels/linux-libre-rt/gnewsense-binutils-flag.patch deleted file mode 100644 index 5f2d44f99..000000000 --- a/kernels/linux-libre-rt/gnewsense-binutils-flag.patch +++ /dev/null @@ -1,28 +0,0 @@ -Our binutils somehow ended up with a -mfix-gs2f-kernel, rather than --mfix-ls2f-kernel. Cope with it. - -Index: arch/mips/loongson/Platform -=================================================================== ---- arch/mips/loongson/Platform.orig 2010-10-25 19:09:49.000000000 +0000 -+++ arch/mips/loongson/Platform 2010-10-25 19:10:44.000000000 +0000 -@@ -10,6 +10,12 @@ - $(call cc-option,-march=loongson2f,-march=r4600) - # Enable the workarounds for Loongson2f - ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS -+ ifneq ($(call as-option,-Wa$(comma)-mfix-gs2f-kernel,),) -+ cflags-$(CONFIG_CPU_NOP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel -+ ifneq ($(CONFIG_CPU_NOP_WORKAROUNDS),$(CONFIG_CPU_JUMP_WORKAROUNDS)) -+ cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel -+ endif -+ else - ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-nop,),) - $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-nop) - else -@@ -20,6 +26,7 @@ - else - cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-jump - endif -+ endif - endif - - # diff --git a/kernels/linux-libre-rt/linux.install b/kernels/linux-libre-rt/linux.install index 34be5215e..32514d892 100644 --- a/kernels/linux-libre-rt/linux.install +++ b/kernels/linux-libre-rt/linux.install @@ -8,10 +8,8 @@ post_install () { # updating module dependencies echo ">>> Updating module dependencies. Please wait ..." depmod ${KERNEL_VERSION} - if command -v mkinitcpio 2>&1 > /dev/null; then - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - fi + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} } post_upgrade() { @@ -22,10 +20,8 @@ post_upgrade() { # updating module dependencies echo ">>> Updating module dependencies. Please wait ..." depmod ${KERNEL_VERSION} - if command -v mkinitcpio 2>&1 > /dev/null; then - echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." - mkinitcpio -p linux-libre${KERNEL_NAME} - fi + echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." + mkinitcpio -p linux-libre${KERNEL_NAME} if [ $(vercmp $2 3.13) -lt 0 ]; then echo ">>> WARNING: AT keyboard support is no longer built into the kernel." diff --git a/kernels/linux-libre-xen/PKGBUILD b/kernels/linux-libre-xen/PKGBUILD index 710e431cd..b1b9e26ff 100644 --- a/kernels/linux-libre-xen/PKGBUILD +++ b/kernels/linux-libre-xen/PKGBUILD @@ -281,7 +281,7 @@ _package-headers() { done # remove unneeded architectures - rm -rf "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch/{alpha,arc,arm,arm26,arm64,avr32,blackfin,c6x,cris,frv,h8300,hexagon,ia64,m32r,m68k,m68knommu,metag,mips,microblaze,mn10300,openrisc,parisc,powerpc,ppc,s390,score,sh,sh64,sparc,sparc64,tile,unicore32,um,v850,xtensa} + find "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch -mindepth 1 -maxdepth 1 -type d -not -name "x86" -exec rm -rf {} + } _package-docs() { diff --git a/libre/linux-libre-grsec/PKGBUILD b/libre/linux-libre-grsec/PKGBUILD index 91e6d6e24..a6ab2b46b 100644 --- a/libre/linux-libre-grsec/PKGBUILD +++ b/libre/linux-libre-grsec/PKGBUILD @@ -32,23 +32,26 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/li "https://grsecurity.net/test/grsecurity-${_grsecver}-${_pkgver%-*}-${_timestamp}.patch" "https://grsecurity.net/test/grsecurity-${_grsecver}-${_pkgver%-*}-${_timestamp}.patch.sig" # the main kernel config files - 'config.i686' 'config.x86_64' + 'config.i686' 'config.x86_64' 'config.mips64el' # standard config files for mkinitcpio ramdisk 'linux.preset' 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' - ) + # loongson-community patch: http://linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/ + '3.15.7-2704e67ebc-loongson-community.patch') sha256sums=('93450dc189131b6a4de862f35c5087a58cc7bae1c24caa535d2357cc3301b688' 'c58b09c71666a79f5dcf83d05aaa5d64ab3fb83782a7dadabdc1a4e29c5b09ab' '13f4ca6702a9985c68e045b510552f5f122938e1ed3264990aaae82a4f64d67a' 'SKIP' 'd47cc4487a687782d4010c81002a48ee0171981863ab38b9f656d6e780d4a297' 'b4e55b41c014df808daad8105e4cbbf684df94641c213d2d9e6fc87e2a4ea59f' + '' 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' '2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53' 'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015' - 'faced4eb4c47c4eb1a9ee8a5bf8a7c4b49d6b4d78efbe426e410730e6267d182') + 'faced4eb4c47c4eb1a9ee8a5bf8a7c4b49d6b4d78efbe426e410730e6267d182' + '') _kernelname=${pkgbase#linux-libre} _replaces=("${_replaces[@]/\%/${_kernelname}}") @@ -82,6 +85,9 @@ prepare() { # (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227) patch -p1 -i "${srcdir}/change-default-console-loglevel.patch" + # Adding loongson-community patch + patch -p1 -i ${srcdir}/3.15.7-2704e67ebc-loongson-community.patch + cat "${srcdir}/config.${CARCH}" > ./.config if [ "${_kernelname}" != "" ]; then diff --git a/libre/linux-libre-grsec/gnewsense-binutils-flag.patch b/libre/linux-libre-grsec/gnewsense-binutils-flag.patch deleted file mode 100644 index 5f2d44f99..000000000 --- a/libre/linux-libre-grsec/gnewsense-binutils-flag.patch +++ /dev/null @@ -1,28 +0,0 @@ -Our binutils somehow ended up with a -mfix-gs2f-kernel, rather than --mfix-ls2f-kernel. Cope with it. - -Index: arch/mips/loongson/Platform -=================================================================== ---- arch/mips/loongson/Platform.orig 2010-10-25 19:09:49.000000000 +0000 -+++ arch/mips/loongson/Platform 2010-10-25 19:10:44.000000000 +0000 -@@ -10,6 +10,12 @@ - $(call cc-option,-march=loongson2f,-march=r4600) - # Enable the workarounds for Loongson2f - ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS -+ ifneq ($(call as-option,-Wa$(comma)-mfix-gs2f-kernel,),) -+ cflags-$(CONFIG_CPU_NOP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel -+ ifneq ($(CONFIG_CPU_NOP_WORKAROUNDS),$(CONFIG_CPU_JUMP_WORKAROUNDS)) -+ cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel -+ endif -+ else - ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-nop,),) - $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-nop) - else -@@ -20,6 +26,7 @@ - else - cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-jump - endif -+ endif - endif - - # diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD index c92fc46f1..8858fce8e 100644 --- a/libre/linux-libre-lts/PKGBUILD +++ b/libre/linux-libre-lts/PKGBUILD @@ -25,7 +25,7 @@ options=('!strip') source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/linux-libre-${_pkgbasever}.tar.xz" "http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/patch-${_pkgbasever}-${_pkgver}.xz" # the main kernel config files - 'config.i686' 'config.x86_64' + 'config.i686' 'config.x86_64' 'config.mips64el' # standard config files for mkinitcpio ramdisk 'linux.preset' 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} @@ -34,12 +34,14 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/li '0002-module-allow-multiple-calls-to-MODULE_DEVICE_TABLE-p.patch' '0003-module-remove-MODULE_GENERIC_TABLE.patch' '0006-genksyms-fix-typeof-handling.patch' - ) + # loongson-community patch: http://linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/ + '3.14.14-a410a5e2b7-loongson-community.patch') sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b' 'f747eeb343d5105bcd1a1b02ce391c746bccbce62e58394b674fc553be844ccc' '9e7dcc90121995024632476d50286b62dbb73da20a7970653a2d72a0a98406c0' '35f283689c4f8b346bc05ac57c3cce50a61a1d0c11a665fc1abf519bb3f1beea' 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' + '' '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' '2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53' 'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015' @@ -47,7 +49,8 @@ sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b' '6d72e14552df59e6310f16c176806c408355951724cd5b48a47bf01591b8be02' '52dec83a8805a8642d74d764494acda863e0aa23e3d249e80d4b457e20a3fd29' '65d58f63215ee3c5f9c4fc6bce36fc5311a6c7dbdbe1ad29de40647b47ff9c0d' - 'cf2e7a2d00787f754028e7459688c2755a406e632ce48b60952fa4ff7ed6f4b7') + 'cf2e7a2d00787f754028e7459688c2755a406e632ce48b60952fa4ff7ed6f4b7' + '') _kernelname=${pkgbase#linux-libre} _replaces=("${_replaces[@]/\%/${_kernelname}}") @@ -88,6 +91,9 @@ prepare() { # http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=dc53324060f324e8af6867f57bf4891c13c6ef18 patch -p1 -i "${srcdir}/0006-genksyms-fix-typeof-handling.patch" + # Adding loongson-community patch + patch -p1 -i ${srcdir}/3.14.14-a410a5e2b7-loongson-community.patch + cat "${srcdir}/config.${CARCH}" > ./.config if [ "${_kernelname}" != "" ]; then diff --git a/libre/linux-libre-lts/gnewsense-binutils-flag.patch b/libre/linux-libre-lts/gnewsense-binutils-flag.patch deleted file mode 100644 index 5f2d44f99..000000000 --- a/libre/linux-libre-lts/gnewsense-binutils-flag.patch +++ /dev/null @@ -1,28 +0,0 @@ -Our binutils somehow ended up with a -mfix-gs2f-kernel, rather than --mfix-ls2f-kernel. Cope with it. - -Index: arch/mips/loongson/Platform -=================================================================== ---- arch/mips/loongson/Platform.orig 2010-10-25 19:09:49.000000000 +0000 -+++ arch/mips/loongson/Platform 2010-10-25 19:10:44.000000000 +0000 -@@ -10,6 +10,12 @@ - $(call cc-option,-march=loongson2f,-march=r4600) - # Enable the workarounds for Loongson2f - ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS -+ ifneq ($(call as-option,-Wa$(comma)-mfix-gs2f-kernel,),) -+ cflags-$(CONFIG_CPU_NOP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel -+ ifneq ($(CONFIG_CPU_NOP_WORKAROUNDS),$(CONFIG_CPU_JUMP_WORKAROUNDS)) -+ cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel -+ endif -+ else - ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-nop,),) - $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-nop) - else -@@ -20,6 +26,7 @@ - else - cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-jump - endif -+ endif - endif - - # diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD index a2477e7d2..486038263 100644 --- a/libre/linux-libre/PKGBUILD +++ b/libre/linux-libre/PKGBUILD @@ -25,23 +25,26 @@ options=('!strip') source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/linux-libre-${_pkgbasever}.tar.xz" "http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgver}/patch-${_pkgbasever}-${_pkgver}.xz" # the main kernel config files - 'config.i686' 'config.x86_64' + 'config.i686' 'config.x86_64' 'config.mips64el' # standard config files for mkinitcpio ramdisk 'linux.preset' 'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm} 'change-default-console-loglevel.patch' 'compal-laptop-hwmon-fix.patch' - ) + # loongson-community patch: http://linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/ + '3.16-7981337ad0-loongson-community.patch') sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218' '3bbc78694d76b12b6229799d7c4daf5215b9dd731908d96b03603aceb54ad5c7' '65739ffbc01d1ecea8328130b14e0258aa036e37ede2f0b1aa9b8efa2ad68a66' '0d827a89f8955e1f39b6a6d10887d1ca7a46b42cc4417bf823eb9f260c26f660' + '' 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' '2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53' 'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015' '1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99' - 'f36f61a0a72bcb0a9c04264343503bfbf927c9ea0db819e66734a3933b060588') + 'f36f61a0a72bcb0a9c04264343503bfbf927c9ea0db819e66734a3933b060588' + '') _kernelname=${pkgbase#linux-libre} _replaces=("${_replaces[@]/\%/${_kernelname}}") @@ -74,9 +77,12 @@ prepare() { # #41458 fix hwmon for compal-laptop module patch -p1 -i "${srcdir}/compal-laptop-hwmon-fix.patch" + # Adding loongson-community patch + patch -p1 -i ${srcdir}/3.16-7981337ad0-loongson-community.patch + cat "${srcdir}/config.${CARCH}" > ./.config - if [ "${_kernelname}" != "" ]; then + if [ "${_kernelname}" == "" ]; then sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config fi diff --git a/libre/linux-libre/gnewsense-binutils-flag.patch b/libre/linux-libre/gnewsense-binutils-flag.patch deleted file mode 100644 index 5f2d44f99..000000000 --- a/libre/linux-libre/gnewsense-binutils-flag.patch +++ /dev/null @@ -1,28 +0,0 @@ -Our binutils somehow ended up with a -mfix-gs2f-kernel, rather than --mfix-ls2f-kernel. Cope with it. - -Index: arch/mips/loongson/Platform -=================================================================== ---- arch/mips/loongson/Platform.orig 2010-10-25 19:09:49.000000000 +0000 -+++ arch/mips/loongson/Platform 2010-10-25 19:10:44.000000000 +0000 -@@ -10,6 +10,12 @@ - $(call cc-option,-march=loongson2f,-march=r4600) - # Enable the workarounds for Loongson2f - ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS -+ ifneq ($(call as-option,-Wa$(comma)-mfix-gs2f-kernel,),) -+ cflags-$(CONFIG_CPU_NOP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel -+ ifneq ($(CONFIG_CPU_NOP_WORKAROUNDS),$(CONFIG_CPU_JUMP_WORKAROUNDS)) -+ cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-gs2f-kernel -+ endif -+ else - ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-nop,),) - $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-nop) - else -@@ -20,6 +26,7 @@ - else - cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-jump - endif -+ endif - endif - - # -- cgit v1.2.3 From 6aa31d3d6356defc999c582320e36b4cbaf59acf Mon Sep 17 00:00:00 2001 From: "coadde [Márcio Alexandre Silva Delgado]" Date: Fri, 22 Aug 2014 22:43:07 -0300 Subject: linux-libre*: remove extra CONFIG_LOCALVERSION* and disable CONFIG_LOCALVERSION_AUTO --- kernels/linux-libre-lts-knock/PKGBUILD | 5 ----- kernels/linux-libre-pae/PKGBUILD | 5 ----- kernels/linux-libre-rt/PKGBUILD | 11 +++-------- kernels/linux-libre-rt/config.i686 | 2 +- kernels/linux-libre-rt/config.x86_64 | 2 +- kernels/linux-libre-xen/PKGBUILD | 5 ----- libre/linux-libre-grsec/PKGBUILD | 7 +------ libre/linux-libre-lts/PKGBUILD | 9 ++------- libre/linux-libre/PKGBUILD | 13 ++++--------- libre/linux-libre/config.i686 | 2 +- libre/linux-libre/config.x86_64 | 2 +- 11 files changed, 14 insertions(+), 49 deletions(-) diff --git a/kernels/linux-libre-lts-knock/PKGBUILD b/kernels/linux-libre-lts-knock/PKGBUILD index 20d9dbfbe..301930071 100644 --- a/kernels/linux-libre-lts-knock/PKGBUILD +++ b/kernels/linux-libre-lts-knock/PKGBUILD @@ -89,11 +89,6 @@ prepare() { cat "${srcdir}/config.${CARCH}" > ./.config - if [ "${_kernelname}" != "" ]; then - sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config - sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config - fi - # append pkgrel to extraversion sed -ri "s|^(EXTRAVERSION =.*\S).*|\1-${pkgrel}|" Makefile diff --git a/kernels/linux-libre-pae/PKGBUILD b/kernels/linux-libre-pae/PKGBUILD index 2fd037ac3..e024c11e4 100644 --- a/kernels/linux-libre-pae/PKGBUILD +++ b/kernels/linux-libre-pae/PKGBUILD @@ -69,11 +69,6 @@ prepare() { cat "${srcdir}/config" > ./.config # simpler - if [ "${_kernelname}" != "" ]; then - sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config - sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config - fi - # append pkgrel to extraversion sed -ri "s|^(EXTRAVERSION =.*\S).*|\1-${pkgrel}|" Makefile diff --git a/kernels/linux-libre-rt/PKGBUILD b/kernels/linux-libre-rt/PKGBUILD index f0c6c4b31..b53adda24 100644 --- a/kernels/linux-libre-rt/PKGBUILD +++ b/kernels/linux-libre-rt/PKGBUILD @@ -47,8 +47,8 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasekernel} sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b' 'bdb59c597c883cc0f78cebccca5652e79b63f30e1d497e0560737ba66a48ae27' 'aedc16bf897b0a1b0789158afad9ffed92be30eaedf8fe2f27cad659673dc93e' - '84a7e8d8ffb308f74e3e0bdfec81ac918ae90a6cad579ed5452481b5f5ceb003' - '23e14dbfc4f4f2991ed532ce07a856fa168ff74404d0c4e7f736147c8ebf41a3' + 'bf045f04e45ed068c1d79e48915039edb56db6e0e18aa84bdd84335f0d211801' + '7dacc05e0d5cae7e176ed6f668a17ec43334daed58653847326e271b48c45aba' '' 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' @@ -60,7 +60,7 @@ sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b' '65d58f63215ee3c5f9c4fc6bce36fc5311a6c7dbdbe1ad29de40647b47ff9c0d' 'cf2e7a2d00787f754028e7459688c2755a406e632ce48b60952fa4ff7ed6f4b7' 'b0107c64c582f7c6fa2e0c7c32a5f944c644f53b5df04667d487731b3c3b4060' - '') + '3baf1279805edd561e80877a1baf32d98fe07220dc6e7cb4ced73ab531947bc4') _kernelname=${pkgbase#linux-libre} _replaces=("${_replaces[@]/\%/${_kernelname}}") @@ -112,11 +112,6 @@ prepare() { cat "${srcdir}/config.${CARCH}" > ./.config - if [ "${_kernelname}" != "" ]; then - sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config - sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config - fi - # append pkgrel to extraversion sed -ri "s|^(EXTRAVERSION =.*\S).*|\1-${pkgrel}|" Makefile diff --git a/kernels/linux-libre-rt/config.i686 b/kernels/linux-libre-rt/config.i686 index b41244be5..f6a2bff37 100644 --- a/kernels/linux-libre-rt/config.i686 +++ b/kernels/linux-libre-rt/config.i686 @@ -51,7 +51,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set CONFIG_LOCALVERSION="-rt" -CONFIG_LOCALVERSION_AUTO=y +# CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y CONFIG_HAVE_KERNEL_LZMA=y diff --git a/kernels/linux-libre-rt/config.x86_64 b/kernels/linux-libre-rt/config.x86_64 index eaf8ad676..130e9c6c2 100644 --- a/kernels/linux-libre-rt/config.x86_64 +++ b/kernels/linux-libre-rt/config.x86_64 @@ -52,7 +52,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set CONFIG_LOCALVERSION="-rt" -CONFIG_LOCALVERSION_AUTO=y +# CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y CONFIG_HAVE_KERNEL_LZMA=y diff --git a/kernels/linux-libre-xen/PKGBUILD b/kernels/linux-libre-xen/PKGBUILD index b1b9e26ff..7d251f4c5 100644 --- a/kernels/linux-libre-xen/PKGBUILD +++ b/kernels/linux-libre-xen/PKGBUILD @@ -69,11 +69,6 @@ prepare() { cat "${srcdir}/config" > ./.config # simpler - if [ "${_kernelname}" != "" ]; then - sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config - sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config - fi - # append pkgrel to extraversion sed -ri "s|^(EXTRAVERSION =.*\S).*|\1-${pkgrel}|" Makefile diff --git a/libre/linux-libre-grsec/PKGBUILD b/libre/linux-libre-grsec/PKGBUILD index a6ab2b46b..0960fcc90 100644 --- a/libre/linux-libre-grsec/PKGBUILD +++ b/libre/linux-libre-grsec/PKGBUILD @@ -51,7 +51,7 @@ sha256sums=('93450dc189131b6a4de862f35c5087a58cc7bae1c24caa535d2357cc3301b688' '2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53' 'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015' 'faced4eb4c47c4eb1a9ee8a5bf8a7c4b49d6b4d78efbe426e410730e6267d182' - '') + '3854de5c0be17555dc0c5b4ec4e831225eaacf413395d74568a06abcddf3a242') _kernelname=${pkgbase#linux-libre} _replaces=("${_replaces[@]/\%/${_kernelname}}") @@ -90,11 +90,6 @@ prepare() { cat "${srcdir}/config.${CARCH}" > ./.config - if [ "${_kernelname}" != "" ]; then - sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config - sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config - fi - # append pkgrel to extraversion sed -ri "s|^(EXTRAVERSION =.*\S).*|\1-${_timestamp}-${pkgrel}|" Makefile diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD index 8858fce8e..ae375b6f1 100644 --- a/libre/linux-libre-lts/PKGBUILD +++ b/libre/linux-libre-lts/PKGBUILD @@ -41,7 +41,7 @@ sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b' '9e7dcc90121995024632476d50286b62dbb73da20a7970653a2d72a0a98406c0' '35f283689c4f8b346bc05ac57c3cce50a61a1d0c11a665fc1abf519bb3f1beea' 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' - '' + 'b053633d23d85972e5a99a83dc93bdab9b8aa1ab8450e98e3b84b46faa669fef' '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' '2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53' 'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015' @@ -50,7 +50,7 @@ sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b' '52dec83a8805a8642d74d764494acda863e0aa23e3d249e80d4b457e20a3fd29' '65d58f63215ee3c5f9c4fc6bce36fc5311a6c7dbdbe1ad29de40647b47ff9c0d' 'cf2e7a2d00787f754028e7459688c2755a406e632ce48b60952fa4ff7ed6f4b7' - '') + '3baf1279805edd561e80877a1baf32d98fe07220dc6e7cb4ced73ab531947bc4') _kernelname=${pkgbase#linux-libre} _replaces=("${_replaces[@]/\%/${_kernelname}}") @@ -96,11 +96,6 @@ prepare() { cat "${srcdir}/config.${CARCH}" > ./.config - if [ "${_kernelname}" != "" ]; then - sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config - sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config - fi - # append pkgrel to extraversion sed -ri "s|^(EXTRAVERSION =.*\S).*|\1-${pkgrel}|" Makefile diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD index 486038263..c7ca22124 100644 --- a/libre/linux-libre/PKGBUILD +++ b/libre/linux-libre/PKGBUILD @@ -35,16 +35,16 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/li '3.16-7981337ad0-loongson-community.patch') sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218' '3bbc78694d76b12b6229799d7c4daf5215b9dd731908d96b03603aceb54ad5c7' - '65739ffbc01d1ecea8328130b14e0258aa036e37ede2f0b1aa9b8efa2ad68a66' - '0d827a89f8955e1f39b6a6d10887d1ca7a46b42cc4417bf823eb9f260c26f660' - '' + 'df929e6e3ca5aa23ef7c4fb5c30b5a7757588ffcd1841fffa8e064feaa6c7834' + '10035cb6b7d4ce90b3743f0ada64364d1d03556589d1dc754caebd0f5919848b' + '44e9c253df7a7d1457e01f36dbd93f7c713c7e02e8a56f6e85a287f35e556bce' 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' '074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264' '2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53' 'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015' '1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99' 'f36f61a0a72bcb0a9c04264343503bfbf927c9ea0db819e66734a3933b060588' - '') + 'fc78b69f6c0709f5170bfd609e8dc6c96291ea920ddbd4b5166448477b1f6619') _kernelname=${pkgbase#linux-libre} _replaces=("${_replaces[@]/\%/${_kernelname}}") @@ -82,11 +82,6 @@ prepare() { cat "${srcdir}/config.${CARCH}" > ./.config - if [ "${_kernelname}" == "" ]; then - sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config - sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config - fi - # append pkgrel to extraversion sed -ri "s|^(EXTRAVERSION =.*\S).*|\1-${pkgrel}|" Makefile diff --git a/libre/linux-libre/config.i686 b/libre/linux-libre/config.i686 index 526d232f7..66da5b7ad 100644 --- a/libre/linux-libre/config.i686 +++ b/libre/linux-libre/config.i686 @@ -50,7 +50,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set CONFIG_LOCALVERSION="" -CONFIG_LOCALVERSION_AUTO=y +# CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y CONFIG_HAVE_KERNEL_LZMA=y diff --git a/libre/linux-libre/config.x86_64 b/libre/linux-libre/config.x86_64 index 19b60ec42..92607b43e 100644 --- a/libre/linux-libre/config.x86_64 +++ b/libre/linux-libre/config.x86_64 @@ -51,7 +51,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" # CONFIG_COMPILE_TEST is not set CONFIG_LOCALVERSION="" -CONFIG_LOCALVERSION_AUTO=y +# CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y CONFIG_HAVE_KERNEL_LZMA=y -- cgit v1.2.3 From 7d6943ac6d62a9eee17546ddc8b5d0c198da8247 Mon Sep 17 00:00:00 2001 From: "coadde [Márcio Alexandre Silva Delgado]" Date: Fri, 22 Aug 2014 22:54:42 -0300 Subject: add loongson-community patch on mips64el only --- kernels/linux-libre-lts-knock/PKGBUILD | 4 +++- kernels/linux-libre-rt/PKGBUILD | 4 +++- libre/linux-libre-grsec/PKGBUILD | 4 +++- libre/linux-libre-lts/PKGBUILD | 4 +++- libre/linux-libre/PKGBUILD | 4 +++- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/kernels/linux-libre-lts-knock/PKGBUILD b/kernels/linux-libre-lts-knock/PKGBUILD index 301930071..a254dddaa 100644 --- a/kernels/linux-libre-lts-knock/PKGBUILD +++ b/kernels/linux-libre-lts-knock/PKGBUILD @@ -85,7 +85,9 @@ prepare() { patch -Np1 -i "${srcdir}/criu-no-expert.patch" # Adding loongson-community patch - patch -p1 -i ${srcdir}/3.10.50-33c9ab76eb-loongson-community.patch + if [ "${CARCH}" == "mips64el" ]; then + patch -p1 -i ${srcdir}/3.10.50-33c9ab76eb-loongson-community.patch + fi cat "${srcdir}/config.${CARCH}" > ./.config diff --git a/kernels/linux-libre-rt/PKGBUILD b/kernels/linux-libre-rt/PKGBUILD index b53adda24..81fbe4842 100644 --- a/kernels/linux-libre-rt/PKGBUILD +++ b/kernels/linux-libre-rt/PKGBUILD @@ -108,7 +108,9 @@ prepare() { patch -p1 -i "${srcdir}/0006-genksyms-fix-typeof-handling.patch" # Adding loongson-community patch - patch -p1 -i ${srcdir}/3.14.14-a410a5e2b7-loongson-community.patch + if [ "${CARCH}" == "mips64el" ]; then + patch -p1 -i ${srcdir}/3.14.14-a410a5e2b7-loongson-community.patch + fi cat "${srcdir}/config.${CARCH}" > ./.config diff --git a/libre/linux-libre-grsec/PKGBUILD b/libre/linux-libre-grsec/PKGBUILD index 0960fcc90..e61a4ee6e 100644 --- a/libre/linux-libre-grsec/PKGBUILD +++ b/libre/linux-libre-grsec/PKGBUILD @@ -86,7 +86,9 @@ prepare() { patch -p1 -i "${srcdir}/change-default-console-loglevel.patch" # Adding loongson-community patch - patch -p1 -i ${srcdir}/3.15.7-2704e67ebc-loongson-community.patch + if [ "${CARCH}" == "mips64el" ]; then + patch -p1 -i ${srcdir}/3.15.7-2704e67ebc-loongson-community.patch + fi cat "${srcdir}/config.${CARCH}" > ./.config diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD index ae375b6f1..ebb00a30c 100644 --- a/libre/linux-libre-lts/PKGBUILD +++ b/libre/linux-libre-lts/PKGBUILD @@ -92,7 +92,9 @@ prepare() { patch -p1 -i "${srcdir}/0006-genksyms-fix-typeof-handling.patch" # Adding loongson-community patch - patch -p1 -i ${srcdir}/3.14.14-a410a5e2b7-loongson-community.patch + if [ "${CARCH}" == "mips64el" ]; then + patch -p1 -i ${srcdir}/3.14.14-a410a5e2b7-loongson-community.patch + fi cat "${srcdir}/config.${CARCH}" > ./.config diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD index c7ca22124..a35e40e32 100644 --- a/libre/linux-libre/PKGBUILD +++ b/libre/linux-libre/PKGBUILD @@ -78,7 +78,9 @@ prepare() { patch -p1 -i "${srcdir}/compal-laptop-hwmon-fix.patch" # Adding loongson-community patch - patch -p1 -i ${srcdir}/3.16-7981337ad0-loongson-community.patch + if [ "${CARCH}" == "mips64el" ]; then + patch -p1 -i ${srcdir}/3.16-7981337ad0-loongson-community.patch + fi cat "${srcdir}/config.${CARCH}" > ./.config -- cgit v1.2.3