diff --git a/CMakeLists.txt b/CMakeLists.txt index 1aaec87f7c3..27250d38f94 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -287,7 +287,7 @@ IF(UNIX AND NOT APPLE) IF (WITH_OPENCOLLADA) SET(OPENCOLLADA /usr/local/opencollada CACHE FILEPATH "OpenCollada Directory") SET(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib) - SET(OPENCOLLADA_LIB OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver pcre ftoa buffer) + SET(OPENCOLLADA_LIB OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver pcre ftoa buffer xml2) SET(OPENCOLLADA_INC ${OPENCOLLADA}) SET(PCRE /usr CACHE FILEPATH "PCRE Directory") SET(PCRE_LIBPATH ${PCRE}/lib) @@ -317,16 +317,19 @@ IF(UNIX AND NOT APPLE) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") ENDIF(WITH_OPENMP) - SET(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing") - SET(PLATFORM_LINKFLAGS "-pthread") - # Better warnings - # note: -Wunused-parameter is added below for all GCC compilers - SET(C_WARNINGS "-Wall -Wno-char-subscripts -Wpointer-arith -Wcast-align -Wdeclaration-after-statement -Wno-unknown-pragmas") - SET(CXX_WARNINGS "-Wall -Wno-invalid-offsetof -Wno-sign-compare") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE") - INCLUDE_DIRECTORIES(${JPEG_INCLUDE_DIR} ${PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} ) + IF(CMAKE_COMPILER_IS_GNUCC) + SET(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing") + + # Better warnings + # note: -Wunused-parameter is added below for all GCC compilers + SET(C_WARNINGS "-Wall -Wno-char-subscripts -Wpointer-arith -Wcast-align -Wdeclaration-after-statement -Wno-unknown-pragmas") + SET(CXX_WARNINGS "-Wall -Wno-invalid-offsetof -Wno-sign-compare") + ENDIF(CMAKE_COMPILER_IS_GNUCC) ENDIF(UNIX AND NOT APPLE) @@ -543,25 +546,31 @@ IF(WIN32) SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libcmt.lib;libc.lib ") - ELSE(MSVC) # MINGW - SET(LLIBS "-lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32 -lz -lstdc++ -lole32 -luuid") - SET(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing") + ELSE(MSVC) + # keep GCC spesific stuff here + IF(CMAKE_COMPILER_IS_GNUCC) + SET(LLIBS "-lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32 -lz -lstdc++ -lole32 -luuid") + SET(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing") - # Better warnings - SET(C_WARNINGS "-Wall -Wno-char-subscripts -Wpointer-arith -Wcast-align -Wdeclaration-after-statement -Wno-unknown-pragmas") - SET(CXX_WARNINGS "-Wall -Wno-invalid-offsetof -Wno-sign-compare") + # Better warnings + SET(C_WARNINGS "-Wall -Wno-char-subscripts -Wpointer-arith -Wcast-align -Wdeclaration-after-statement -Wno-unknown-pragmas") + SET(CXX_WARNINGS "-Wall -Wno-invalid-offsetof -Wno-sign-compare") + + IF(WITH_OPENMP) + SET(LLIBS "${LLIBS} -lgomp") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") + ENDIF(WITH_OPENMP) + + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE") + ENDIF(CMAKE_COMPILER_IS_GNUCC) ADD_DEFINITIONS(-DFREE_WINDOWS) SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") - IF(WITH_OPENMP) - SET(LLIBS "${LLIBS} -lgomp") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") - ENDIF(WITH_OPENMP) - IF(WITH_INTERNATIONAL) SET(GETTEXT ${LIBDIR}/gcc/gettext) SET(GETTEXT_INC ${GETTEXT}/include) diff --git a/SConstruct b/SConstruct index 032b1eb1ea8..12926a29cef 100644 --- a/SConstruct +++ b/SConstruct @@ -538,24 +538,24 @@ for tp, tn, tf in os.walk('release/plugins'): df = tp[8:] # remove 'release/' for f in tf: pluglist.append(os.path.join(tp, f)) - plugtargetlist.append( os.path.join(env['BF_INSTALLDIR'], df, f) ) + plugtargetlist.append( os.path.join(env['BF_INSTALLDIR'], VERSION, df, f) ) # header files for plugins pluglist.append('source/blender/blenpluginapi/documentation.h') -plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'documentation.h')) +plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], VERSION, 'plugins', 'include', 'documentation.h')) pluglist.append('source/blender/blenpluginapi/externdef.h') -plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'externdef.h')) +plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], VERSION, 'plugins', 'include', 'externdef.h')) pluglist.append('source/blender/blenpluginapi/floatpatch.h') -plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'floatpatch.h')) +plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], VERSION, 'plugins', 'include', 'floatpatch.h')) pluglist.append('source/blender/blenpluginapi/iff.h') -plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'iff.h')) +plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], VERSION, 'plugins', 'include', 'iff.h')) pluglist.append('source/blender/blenpluginapi/plugin.h') -plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'plugin.h')) +plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], VERSION, 'plugins', 'include', 'plugin.h')) pluglist.append('source/blender/blenpluginapi/util.h') -plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'util.h')) +plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], VERSION, 'plugins', 'include', 'util.h')) pluglist.append('source/blender/blenpluginapi/plugin.DEF') -plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'plugin.def')) +plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], VERSION, 'plugins', 'include', 'plugin.def')) plugininstall = [] for targetdir,srcfile in zip(plugtargetlist, pluglist): diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index afd5f302314..42aa9d1f8b5 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -1,45 +1,44 @@ -IF(MSVC) - # only MSVC uses SOURCE_GROUP - MACRO(BLENDERLIB_NOLIST - name - sources - includes) +# only MSVC uses SOURCE_GROUP +MACRO(BLENDERLIB_NOLIST + name + sources + includes) - MESSAGE(STATUS "Configuring library ${name}") + MESSAGE(STATUS "Configuring library ${name}") - # Gather all headers - FILE(GLOB_RECURSE INC_ALL *.h) - - INCLUDE_DIRECTORIES(${includes}) - ADD_LIBRARY(${name} ${INC_ALL} ${sources}) + # Gather all headers + FILE(GLOB_RECURSE INC_ALL *.h) + + INCLUDE_DIRECTORIES(${includes}) + ADD_LIBRARY(${name} ${INC_ALL} ${sources}) - # Group by location on disk - SOURCE_GROUP(Files FILES CMakeLists.txt) - SET(ALL_FILES ${sources} ${INC_ALL}) - FOREACH(SRC ${ALL_FILES}) - STRING(REGEX REPLACE ${CMAKE_CURRENT_SOURCE_DIR} "Files" REL_DIR "${SRC}") - STRING(REGEX REPLACE "[\\\\/][^\\\\/]*$" "" REL_DIR "${REL_DIR}") - STRING(REGEX REPLACE "^[\\\\/]" "" REL_DIR "${REL_DIR}") - IF(REL_DIR) - SOURCE_GROUP(${REL_DIR} FILES ${SRC}) - ELSE(REL_DIR) - SOURCE_GROUP(Files FILES ${SRC}) - ENDIF(REL_DIR) - ENDFOREACH(SRC) - ENDMACRO(BLENDERLIB_NOLIST) -ELSE(MSVC) + # Group by location on disk + SOURCE_GROUP(Files FILES CMakeLists.txt) + SET(ALL_FILES ${sources} ${INC_ALL}) + FOREACH(SRC ${ALL_FILES}) + STRING(REGEX REPLACE ${CMAKE_CURRENT_SOURCE_DIR} "Files" REL_DIR "${SRC}") + STRING(REGEX REPLACE "[\\\\/][^\\\\/]*$" "" REL_DIR "${REL_DIR}") + STRING(REGEX REPLACE "^[\\\\/]" "" REL_DIR "${REL_DIR}") + IF(REL_DIR) + SOURCE_GROUP(${REL_DIR} FILES ${SRC}) + ELSE(REL_DIR) + SOURCE_GROUP(Files FILES ${SRC}) + ENDIF(REL_DIR) + ENDFOREACH(SRC) +ENDMACRO(BLENDERLIB_NOLIST) - MACRO(BLENDERLIB_NOLIST - name - sources - includes) +# # works fine but having the includes listed is helpful for IDE's (QtCreator/MSVC) +# MACRO(BLENDERLIB_NOLIST +# name +# sources +# includes) +# +# MESSAGE(STATUS "Configuring library ${name}") +# INCLUDE_DIRECTORIES(${includes}) +# ADD_LIBRARY(${name} ${sources}) +# ENDMACRO(BLENDERLIB_NOLIST) - MESSAGE(STATUS "Configuring library ${name}") - INCLUDE_DIRECTORIES(${includes}) - ADD_LIBRARY(${name} ${sources}) - ENDMACRO(BLENDERLIB_NOLIST) -ENDIF(MSVC) MACRO(BLENDERLIB name diff --git a/build_files/make/nan_compile.mk b/build_files/make/nan_compile.mk index 4107bb1820d..c512c030476 100644 --- a/build_files/make/nan_compile.mk +++ b/build_files/make/nan_compile.mk @@ -35,10 +35,12 @@ include nan_definitions.mk CPPFLAGS ?= $(NAN_CPPFLAGS) # common parts --------------------------------------------------- +CFLAGS += -DWITH_PYTHON +CCFLAGS += -DWITH_PYTHON # Uncomment next lines to enable integrated game engine ifneq ($(NAN_NO_KETSJI), true) - CFLAGS += -DGAMEBLENDER=1 + CFLAGS += -DWITH_GAMEENGINE ifeq ($(NAN_USE_BULLET), true) CFLAGS += -DUSE_BULLET CCFLAGS += -DUSE_BULLET @@ -171,8 +173,8 @@ ifeq ($(OS),linux) CCC ?= g++ # CFLAGS += -pipe # CCFLAGS += -pipe - CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 - CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 + CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE + CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE REL_CFLAGS += -O2 REL_CCFLAGS += -O2 NAN_DEPEND = true diff --git a/build_files/make/nan_definitions.mk b/build_files/make/nan_definitions.mk index d8da2189e6d..307bf19153b 100644 --- a/build_files/make/nan_definitions.mk +++ b/build_files/make/nan_definitions.mk @@ -296,6 +296,7 @@ ifndef CONFIG_GUESS export HOST = $(shell hostname -s) export FREEDESKTOP ?= true + export BF_PREFIX ?= /usr/local export NAN_PYTHON ?= /usr/local export NAN_PYTHON_VERSION ?= 3.1 export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION) @@ -334,6 +335,8 @@ ifndef CONFIG_GUESS export HOST = $(shell /usr/bsd/hostname -s) #export NAN_NO_KETSJI=true export NAN_JUST_BLENDERDYNAMIC=true + + export BF_PREFIX ?= /usr/local export NAN_PYTHON_VERSION ?= 3.1 ifeq ($(IRIX_USE_GCC), true) export NAN_PYTHON ?= $(LCGDIR)/python_gcc @@ -392,6 +395,7 @@ ifndef CONFIG_GUESS export HOST = $(shell hostname -s) export FREEDESKTOP ?= true + export BF_PREFIX ?= /usr/local export NAN_PYTHON ?= /usr export NAN_PYTHON_VERSION ?= 3.1 export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION) @@ -458,6 +462,7 @@ ifndef CONFIG_GUESS export HOST = $(shell hostname -s) export FREEDESKTOP ?= true + export BF_PREFIX ?= /usr/local export NAN_PYTHON ?= $(LCGDIR)/python export NAN_PYTHON_VERSION ?= 3.1 export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION) @@ -494,6 +499,8 @@ ifndef CONFIG_GUESS export ID = $(shell /usr/ucb/whoami) export HOST = $(shell hostname) + + export BF_PREFIX ?= /usr/local export NAN_PYTHON ?= $(LCGDIR)/python export NAN_PYTHON_VERSION ?= 3.1 export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION) diff --git a/build_files/scons/config/freebsd7-config.py b/build_files/scons/config/freebsd7-config.py index afc71d01c94..46b27a99597 100644 --- a/build_files/scons/config/freebsd7-config.py +++ b/build_files/scons/config/freebsd7-config.py @@ -173,10 +173,10 @@ WITH_BF_OPENMP = True WITH_BF_RAYOPTIMIZATION = True BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse','-pthread'] -CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE','-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] CPPFLAGS = [] -CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE','-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] if WITH_BF_FFMPEG: # libavutil needs UINT64_C() CXXFLAGS += ['-D__STDC_CONSTANT_MACROS', ] diff --git a/build_files/scons/config/freebsd8-config.py b/build_files/scons/config/freebsd8-config.py index d11618b6293..901d22daefc 100644 --- a/build_files/scons/config/freebsd8-config.py +++ b/build_files/scons/config/freebsd8-config.py @@ -173,10 +173,10 @@ WITH_BF_OPENMP = True WITH_BF_RAYOPTIMIZATION = True BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse','-pthread'] -CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE','-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] CPPFLAGS = [] -CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE','-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] if WITH_BF_FFMPEG: # libavutil needs UINT64_C() CXXFLAGS += ['-D__STDC_CONSTANT_MACROS', ] diff --git a/build_files/scons/config/freebsd9-config.py b/build_files/scons/config/freebsd9-config.py index 2aadbf0f960..88b44e8c1ed 100644 --- a/build_files/scons/config/freebsd9-config.py +++ b/build_files/scons/config/freebsd9-config.py @@ -173,10 +173,10 @@ WITH_BF_OPENMP = True WITH_BF_RAYOPTIMIZATION = True BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse','-pthread'] -CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE','-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] CPPFLAGS = [] -CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE','-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] if WITH_BF_FFMPEG: # libavutil needs UINT64_C() CXXFLAGS += ['-D__STDC_CONSTANT_MACROS', ] diff --git a/build_files/scons/config/linux2-config.py b/build_files/scons/config/linux2-config.py index fd0364f9ce9..268cb36d9c7 100644 --- a/build_files/scons/config/linux2-config.py +++ b/build_files/scons/config/linux2-config.py @@ -189,10 +189,10 @@ CXX = 'g++' ##ifeq ($CPU),alpha) ## CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing -mieee -CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] CPPFLAGS = [] -CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] if WITH_BF_FFMPEG: # libavutil needs UINT64_C() CXXFLAGS += ['-D__STDC_CONSTANT_MACROS', ] diff --git a/build_files/scons/config/linuxcross-config.py b/build_files/scons/config/linuxcross-config.py index 263cfd89a8b..9ea5db29aaf 100644 --- a/build_files/scons/config/linuxcross-config.py +++ b/build_files/scons/config/linuxcross-config.py @@ -174,7 +174,7 @@ BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse'] CCFLAGS = [ '-pipe', '-funsigned-char', '-fno-strict-aliasing' ] -CPPFLAGS = ['-DWIN32', '-DFREE_WINDOWS'] +CPPFLAGS = ['-DWIN32', '-DFREE_WINDOWS', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64', '-D_LARGEFILE64_SOURCE'] CXXFLAGS = ['-pipe', '-funsigned-char', '-fno-strict-aliasing' ] REL_CFLAGS = [ '-O2' ] REL_CCFLAGS = [ '-O2' ] diff --git a/build_files/scons/config/win32-mingw-config.py b/build_files/scons/config/win32-mingw-config.py index 7189522809e..2913d888eaf 100644 --- a/build_files/scons/config/win32-mingw-config.py +++ b/build_files/scons/config/win32-mingw-config.py @@ -164,7 +164,7 @@ CXX = 'g++' CCFLAGS = [ '-pipe', '-funsigned-char', '-fno-strict-aliasing' ] -CPPFLAGS = ['-DWIN32', '-DFREE_WINDOWS'] +CPPFLAGS = ['-DWIN32', '-DFREE_WINDOWS', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64', '-D_LARGEFILE64_SOURCE'] CXXFLAGS = ['-pipe', '-mwindows', '-funsigned-char', '-fno-strict-aliasing' ] REL_CFLAGS = [ '-O2' ] REL_CCFLAGS = [ '-O2' ] diff --git a/build_files/scons/config/win32-vc-config.py b/build_files/scons/config/win32-vc-config.py index 57199192e98..a2d5c5af712 100644 --- a/build_files/scons/config/win32-vc-config.py +++ b/build_files/scons/config/win32-vc-config.py @@ -170,7 +170,7 @@ BF_OPENGL_LIB_STATIC = [ '${BF_OPENGL}/lib/libGL.a', '${BF_OPENGL}/lib/libGLU.a' CC = 'cl.exe' CXX = 'cl.exe' -CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/wd4244', '/wd4305', '/wd4800', '/wd4065', '/wd4267', '/we4013'] +CCFLAGS = ['/nologo', '/Ob1', '/J', '/W0', '/Gd', '/wd4018', '/wd4244', '/wd4305', '/wd4800', '/wd4065', '/wd4267', '/we4013'] CXXFLAGS = ['/EHsc'] BGE_CXXFLAGS = ['/O2', '/EHsc', '/GR', '/fp:fast', '/arch:SSE'] diff --git a/build_files/scons/config/win64-vc-config.py b/build_files/scons/config/win64-vc-config.py index 18d9dc93eec..8d5bfab4900 100644 --- a/build_files/scons/config/win64-vc-config.py +++ b/build_files/scons/config/win64-vc-config.py @@ -166,7 +166,7 @@ CC = 'cl.exe' CXX = 'cl.exe' CFLAGS = [] -CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/we4013', '/wd4244', '/wd4305', '/wd4800', '/wd4065', '/wd4267'] +CCFLAGS = ['/nologo', '/Ob1', '/J', '/W0', '/Gd', '/we4013', '/wd4018', '/wd4244', '/wd4305', '/wd4800', '/wd4065', '/wd4267'] CXXFLAGS = ['/EHsc'] BGE_CXXFLAGS = ['/O2', '/EHsc', '/GR', '/fp:fast'] diff --git a/doc/blender_file_format/BlendFileDnaExporter_25.py b/doc/blender_file_format/BlendFileDnaExporter_25.py new file mode 100755 index 00000000000..afc58ce6730 --- /dev/null +++ b/doc/blender_file_format/BlendFileDnaExporter_25.py @@ -0,0 +1,477 @@ +#! /usr/bin/env python3 + +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# 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. +# +# ***** END GPL LICENCE BLOCK ***** + +###################################################### +# +# Name: +# dna.py +# +# Description: +# Creates a browsable DNA output to HTML. +# +# Author: +# Jeroen Bakker +# +# Version: +# v0.1 (12-05-2009) - migration of original source code to python. +# Added code to support blender 2.5 branch +# v0.2 (25-05-2009) - integrated with BlendFileReader.py +# +# Input: +# blender build executable +# +# Output: +# dna.html +# dna.css (will only be created when not existing) +# +# Startup: +# ./blender -P BlendFileDnaExporter.py +# +# Process: +# 1: write blend file with SDNA info +# 2: read blend header from blend file +# 3: seek DNA1 file-block +# 4: read dna record from blend file +# 5: close and eventually delete temp blend file +# 6: export dna to html and css +# 7: quit blender +# +###################################################### + +import struct +import sys +import getopt # command line arguments handling +from string import Template # strings completion + + +# logs +import logging +log = logging.getLogger("BlendFileDnaExporter") + +if '--dna-debug' in sys.argv: + logging.basicConfig(level=logging.DEBUG) +else: + logging.basicConfig(level=logging.INFO) + + +class DNACatalogHTML: + ''' + DNACatalog is a catalog of all information in the DNA1 file-block + ''' + + def __init__(self, catalog, bpy_module = None): + self.Catalog = catalog + self.bpy = bpy_module + + def WriteToHTML(self, handle): + + dna_html_template = """ + + + + + + The mystery of the blend + + +
+ Blender ${version}
+ Internal SDNA structures +
+ Architecture: ${bitness} ${endianness}
+ Build revision: ${revision}
+ File format reference: The mystery of the blend by Jeroen Bakker
+

Index of blender structures

+ + ${structs_content} + + """ + + header = self.Catalog.Header + bpy = self.bpy + + # ${version} and ${revision} + if bpy: + version = '.'.join(map(str, bpy.app.version)) + revision = bpy.app.build_revision[:-1] + else: + version = str(header.Version) + revision = 'Unknown' + + # ${bitness} + if header.PointerSize == 8: + bitness = '64 bit' + else: + bitness = '32 bit' + + # ${endianness} + if header.LittleEndianness: + endianess= 'Little endianness' + else: + endianess= 'Big endianness' + + # ${structs_list} + log.debug("Creating structs index") + structs_list = '' + list_item = '
  • ({0}) {1}
  • \n' + structureIndex = 0 + for structure in self.Catalog.Structs: + structs_list += list_item.format(structureIndex, structure.Type.Name) + structureIndex+=1 + + # ${structs_content} + log.debug("Creating structs content") + structs_content = '' + for structure in self.Catalog.Structs: + log.debug(structure.Type.Name) + structs_content += self.Structure(structure) + + d = dict( + version = version, + revision = revision, + bitness = bitness, + endianness = endianess, + structs_list = structs_list, + structs_content = structs_content + ) + + dna_html = Template(dna_html_template).substitute(d) + dna_html = self.format(dna_html) + handle.write(dna_html) + + def Structure(self, structure): + struct_table_template = """ + + + + + + + + + + + + + + ${fields} + +
    ${struct_name}
    referencestructuretypenameoffsetsize
    +
    +
    """ + + d = dict( + struct_name = structure.Type.Name, + fields = self.StructureFields(structure, None, 0), + size = str(structure.Type.Size) + ) + + struct_table = Template(struct_table_template).substitute(d) + return struct_table + + def StructureFields(self, structure, parentReference, offset): + fields = '' + for field in structure.Fields: + fields += self.StructureField(field, structure, parentReference, offset) + offset += field.Size(self.Catalog.Header) + return fields + + def StructureField(self, field, structure, parentReference, offset): + structure_field_template = """ + + ${reference} + ${struct} + ${type} + ${name} + ${offset} + ${size} + """ + + if field.Type.Structure == None or field.Name.IsPointer(): + + # ${reference} + reference = field.Name.AsReference(parentReference) + + # ${struct} + if parentReference != None: + struct = '{0}'.format(structure.Type.Name) + else: + struct = structure.Type.Name + + # ${type} + type = field.Type.Name + + # ${name} + name = field.Name.Name + + # ${offset} + # offset already set + + # ${size} + size = field.Size(self.Catalog.Header) + + d = dict( + reference = reference, + struct = struct, + type = type, + name = name, + offset = offset, + size = size + ) + + structure_field = Template(structure_field_template).substitute(d) + + elif field.Type.Structure != None: + reference = field.Name.AsReference(parentReference) + structure_field = self.StructureFields(field.Type.Structure, reference, offset) + + return structure_field + + def indent(self, input, dent, startswith = ''): + output = '' + if dent < 0: + for line in input.split('\n'): + dent = abs(dent) + output += line[dent:] + '\n' # unindent of a desired amount + elif dent == 0: + for line in input.split('\n'): + output += line.lstrip() + '\n' # remove indentation completely + elif dent > 0: + for line in input.split('\n'): + output += ' '* dent + line + '\n' + return output + + def format(self, input): + diff = { + '\n' :'', + '\n' :'', + '' :' ', + '\n' :'', + '\n' :'', + '\n' :'' + } + output = self.indent(input, 0) + for key, value in diff.items(): + output = output.replace(key, value) + return output + + def WriteToCSS(self, handle): + ''' + Write the Cascading stylesheet template to the handle + It is expected that the handle is a Filehandle + ''' + css = """ + @CHARSET "ISO-8859-1"; + + body { + font-family: verdana; + font-size: small; + } + + div.title { + font-size: large; + text-align: center; + } + + h1 { + page-break-before: always; + } + + h1, h2 { + background-color: #D3D3D3; + color:#404040; + margin-right: 3%; + padding-left: 40px; + } + + h1:hover{ + background-color: #EBEBEB; + } + + h3 { + padding-left: 40px; + } + + table { + border-width: 1px; + border-style: solid; + border-color: #000000; + border-collapse: collapse; + width: 94%; + margin: 20px 3% 10px; + } + + caption { + margin-bottom: 5px; + } + + th { + background-color: #000000; + color:#ffffff; + padding-left:5px; + padding-right:5px; + } + + tr { + } + + td { + border-width: 1px; + border-style: solid; + border-color: #a0a0a0; + padding-left:5px; + padding-right:5px; + } + + label { + float:right; + margin-right: 3%; + } + + ul.multicolumn { + list-style:none; + float:left; + padding-right:0px; + margin-right:0px; + } + + li.multicolumn { + float:left; + width:200px; + margin-right:0px; + } + + a { + color:#a000a0; + text-decoration:none; + } + + a:hover { + color:#a000a0; + text-decoration:underline; + } + """ + + css = self.indent(css, 0) + + handle.write(css) + + +def usage(): + print("\nUsage: \n\tblender2.5 -b -P BlendFileDnaExporter_25.py [-- [options]]") + print("Options:") + print("\t--dna-keep-blend: doesn't delete the produced blend file DNA export to html") + print("\t--dna-debug: sets the logging level to DEBUG (lots of additional info)") + print("\t--dna-versioned saves version informations in the html and blend filenames") + print("\t--dna-overwrite-css overwrite dna.css, useful when modifying css in the script") + print("Examples:") + print("\tdefault: % blender2.5 -b -P BlendFileDnaExporter_25.py") + print("\twith options: % blender2.5 -b -P BlendFileDnaExporter_25.py -- --dna-keep-blend --dna-debug\n") + + +###################################################### +# Main +###################################################### + +def main(): + + import os, os.path + + try: + bpy = __import__('bpy') + + # Files + if '--dna-versioned' in sys.argv: + blender_version = '_'.join(map(str, bpy.app.version)) + filename = 'dna-{0}-{1}_endian-{2}-r{3}'.format(sys.arch, sys.byteorder, blender_version, bpy.app.build_revision[2:-1]) + else: + filename = 'dna' + dir = os.path.dirname(__file__) + Path_Blend = os.path.join(dir, filename + '.blend') # temporary blend file + Path_HTML = os.path.join(dir, filename + '.html') # output html file + Path_CSS = os.path.join(dir, 'dna.css') # output css file + + # create a blend file for dna parsing + if not os.path.exists(Path_Blend): + log.info("1: write temp blend file with SDNA info") + log.info(" saving to: " + Path_Blend) + try: + bpy.ops.wm.save_as_mainfile(filepath = Path_Blend, copy = True, compress = False) + except: + log.error("Filename {0} does not exist and can't be created... quitting".format(Path_Blend)) + return + else: + log.info("1: found blend file with SDNA info") + log.info(" " + Path_Blend) + + # read blend header from blend file + log.info("2: read file:") + + if not dir in sys.path: + sys.path.append(dir) + import BlendFileReader + + handle = BlendFileReader.openBlendFile(Path_Blend) + blendfile = BlendFileReader.BlendFile(handle) + catalog = DNACatalogHTML(blendfile.Catalog, bpy) + + # close temp file + handle.close() + + # deleting or not? + if '--dna-keep-blend' in sys.argv: + # keep the blend, useful for studying hexdumps + log.info("5: closing blend file:") + log.info(" {0}".format(Path_Blend)) + else: + # delete the blend + log.info("5: close and delete temp blend:") + log.info(" {0}".format(Path_Blend)) + os.remove(Path_Blend) + + # export dna to xhtml + log.info("6: export sdna to xhtml file") + handleHTML = open(Path_HTML, "w") + catalog.WriteToHTML(handleHTML) + handleHTML.close() + + # only write the css when doesn't exist or at explicit request + if not os.path.exists(Path_CSS) or '--dna-overwrite-css' in sys.argv: + handleCSS = open(Path_CSS, "w") + catalog.WriteToCSS(handleCSS) + handleCSS.close() + + # quit blender + if not bpy.app.background: + log.info("7: quit blender") + bpy.ops.wm.exit_blender() + + except ImportError: + log.warning(" skipping, not running in Blender") + usage() + sys.exit(2) + + +if __name__ == '__main__': + main() diff --git a/doc/blender_file_format/BlendFileReader.py b/doc/blender_file_format/BlendFileReader.py new file mode 100644 index 00000000000..7003af10ac7 --- /dev/null +++ b/doc/blender_file_format/BlendFileReader.py @@ -0,0 +1,446 @@ +#! /usr/bin/env python3 + +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# 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. +# +# ***** END GPL LICENCE BLOCK ***** + +###################################################### +# Importing modules +###################################################### + +import os +import struct +import gzip +import tempfile + +import logging +log = logging.getLogger("BlendFileReader") + +###################################################### +# module global routines +###################################################### + +def ReadString(handle, length): + ''' + ReadString reads a String of given length or a zero terminating String + from a file handle + ''' + if length != 0: + return handle.read(length).decode() + else: + # length == 0 means we want a zero terminating string + result = "" + s = ReadString(handle, 1) + while s!="\0": + result += s + s = ReadString(handle, 1) + return result + + +def Read(type, handle, fileheader): + ''' + Reads the chosen type from a file handle + ''' + def unpacked_bytes(type_char, size): + return struct.unpack(fileheader.StructPre + type_char, handle.read(size))[0] + + if type == 'ushort': + return unpacked_bytes("H", 2) # unsigned short + elif type == 'short': + return unpacked_bytes("h", 2) # short + elif type == 'uint': + return unpacked_bytes("I", 4) # unsigned int + elif type == 'int': + return unpacked_bytes("i", 4) # int + elif type == 'float': + return unpacked_bytes("f", 4) # float + elif type == 'ulong': + return unpacked_bytes("Q", 8) # unsigned long + elif type == 'pointer': + # The pointersize is given by the header (BlendFileHeader). + if fileheader.PointerSize == 4: + return Read('uint', handle, fileheader) + if fileheader.PointerSize == 8: + return Read('ulong', handle, fileheader) + + +def openBlendFile(filename): + ''' + Open a filename, determine if the file is compressed and returns a handle + ''' + handle = open(filename, 'rb') + magic = ReadString(handle, 7) + if magic in ("BLENDER", "BULLETf"): + log.debug("normal blendfile detected") + handle.seek(0, os.SEEK_SET) + return handle + else: + log.debug("gzip blendfile detected?") + handle.close() + log.debug("decompressing started") + fs = gzip.open(filename, "rb") + handle = tempfile.TemporaryFile() + data = fs.read(1024*1024) + while data: + handle.write(data) + data = fs.read(1024*1024) + log.debug("decompressing finished") + fs.close() + log.debug("resetting decompressed file") + handle.seek(0, os.SEEK_SET) + return handle + + +def Align(handle): + ''' + Aligns the filehandle on 4 bytes + ''' + offset = handle.tell() + trim = offset % 4 + if trim != 0: + handle.seek(4-trim, os.SEEK_CUR) + + +###################################################### +# module classes +###################################################### + +class BlendFile: + ''' + Reads a blendfile and store the header, all the fileblocks, and catalogue + structs foound in the DNA fileblock + + - BlendFile.Header (BlendFileHeader instance) + - BlendFile.Blocks (list of BlendFileBlock instances) + - BlendFile.Catalog (DNACatalog instance) + ''' + + def __init__(self, handle): + log.debug("initializing reading blend-file") + self.Header = BlendFileHeader(handle) + self.Blocks = [] + fileblock = BlendFileBlock(handle, self) + found_dna_block = False + while not found_dna_block: + if fileblock.Header.Code in ("DNA1", "SDNA"): + self.Catalog = DNACatalog(self.Header, handle) + found_dna_block = True + else: + fileblock.Header.skip(handle) + + self.Blocks.append(fileblock) + fileblock = BlendFileBlock(handle, self) + + # appending last fileblock, "ENDB" + self.Blocks.append(fileblock) + + # seems unused? + """ + def FindBlendFileBlocksWithCode(self, code): + #result = [] + #for block in self.Blocks: + #if block.Header.Code.startswith(code) or block.Header.Code.endswith(code): + #result.append(block) + #return result + """ + + +class BlendFileHeader: + ''' + BlendFileHeader allocates the first 12 bytes of a blend file. + It contains information about the hardware architecture. + Header example: BLENDER_v254 + + BlendFileHeader.Magic (str) + BlendFileHeader.PointerSize (int) + BlendFileHeader.LittleEndianness (bool) + BlendFileHeader.StructPre (str) see http://docs.python.org/py3k/library/struct.html#byte-order-size-and-alignment + BlendFileHeader.Version (int) + ''' + + def __init__(self, handle): + log.debug("reading blend-file-header") + + self.Magic = ReadString(handle, 7) + log.debug(self.Magic) + + pointersize = ReadString(handle, 1) + log.debug(pointersize) + if pointersize == "-": + self.PointerSize = 8 + if pointersize == "_": + self.PointerSize = 4 + + endianness = ReadString(handle, 1) + log.debug(endianness) + if endianness == "v": + self.LittleEndianness = True + self.StructPre = "<" + if endianness == "V": + self.LittleEndianness = False + self.StructPre = ">" + + version = ReadString(handle, 3) + log.debug(version) + self.Version = int(version) + + log.debug("{0} {1} {2} {3}".format(self.Magic, self.PointerSize, self.LittleEndianness, version)) + + +class BlendFileBlock: + ''' + BlendFileBlock.File (BlendFile) + BlendFileBlock.Header (FileBlockHeader) + ''' + + def __init__(self, handle, blendfile): + self.File = blendfile + self.Header = FileBlockHeader(handle, blendfile.Header) + + def Get(self, handle, path): + log.debug("find dna structure") + dnaIndex = self.Header.SDNAIndex + dnaStruct = self.File.Catalog.Structs[dnaIndex] + log.debug("found " + dnaStruct.Type.Name) + handle.seek(self.Header.FileOffset, os.SEEK_SET) + return dnaStruct.GetField(self.File.Header, handle, path) + + +class FileBlockHeader: + ''' + FileBlockHeader contains the information in a file-block-header. + The class is needed for searching to the correct file-block (containing Code: DNA1) + + Code (str) + Size (int) + OldAddress (pointer) + SDNAIndex (int) + Count (int) + FileOffset (= file pointer of datablock) + ''' + + def __init__(self, handle, fileheader): + self.Code = ReadString(handle, 4).strip() + if self.Code != "ENDB": + self.Size = Read('uint', handle, fileheader) + self.OldAddress = Read('pointer', handle, fileheader) + self.SDNAIndex = Read('uint', handle, fileheader) + self.Count = Read('uint', handle, fileheader) + self.FileOffset = handle.tell() + else: + self.Size = Read('uint', handle, fileheader) + self.OldAddress = 0 + self.SDNAIndex = 0 + self.Count = 0 + self.FileOffset = handle.tell() + #self.Code += ' ' * (4 - len(self.Code)) + log.debug("found blend-file-block-fileheader {0} {1}".format(self.Code, self.FileOffset)) + + def skip(self, handle): + handle.read(self.Size) + + +class DNACatalog: + ''' + DNACatalog is a catalog of all information in the DNA1 file-block + + Header = None + Names = None + Types = None + Structs = None + ''' + + def __init__(self, fileheader, handle): + log.debug("building DNA catalog") + self.Names=[] + self.Types=[] + self.Structs=[] + self.Header = fileheader + + SDNA = ReadString(handle, 4) + + # names + NAME = ReadString(handle, 4) + numberOfNames = Read('uint', handle, fileheader) + log.debug("building #{0} names".format(numberOfNames)) + for i in range(numberOfNames): + name = ReadString(handle,0) + self.Names.append(DNAName(name)) + Align(handle) + + # types + TYPE = ReadString(handle, 4) + numberOfTypes = Read('uint', handle, fileheader) + log.debug("building #{0} types".format(numberOfTypes)) + for i in range(numberOfTypes): + type = ReadString(handle,0) + self.Types.append(DNAType(type)) + Align(handle) + + # type lengths + TLEN = ReadString(handle, 4) + log.debug("building #{0} type-lengths".format(numberOfTypes)) + for i in range(numberOfTypes): + length = Read('ushort', handle, fileheader) + self.Types[i].Size = length + Align(handle) + + # structs + STRC = ReadString(handle, 4) + numberOfStructures = Read('uint', handle, fileheader) + log.debug("building #{0} structures".format(numberOfStructures)) + for structureIndex in range(numberOfStructures): + type = Read('ushort', handle, fileheader) + Type = self.Types[type] + structure = DNAStructure(Type) + self.Structs.append(structure) + + numberOfFields = Read('ushort', handle, fileheader) + for fieldIndex in range(numberOfFields): + fTypeIndex = Read('ushort', handle, fileheader) + fNameIndex = Read('ushort', handle, fileheader) + fType = self.Types[fTypeIndex] + fName = self.Names[fNameIndex] + structure.Fields.append(DNAField(fType, fName)) + + +class DNAName: + ''' + DNAName is a C-type name stored in the DNA. + + Name = str + ''' + + def __init__(self, name): + self.Name = name + + def AsReference(self, parent): + if parent == None: + result = "" + else: + result = parent+"." + + result = result + self.ShortName() + return result + + def ShortName(self): + result = self.Name; + result = result.replace("*", "") + result = result.replace("(", "") + result = result.replace(")", "") + Index = result.find("[") + if Index != -1: + result = result[0:Index] + return result + + def IsPointer(self): + return self.Name.find("*")>-1 + + def IsMethodPointer(self): + return self.Name.find("(*")>-1 + + def ArraySize(self): + result = 1 + Temp = self.Name + Index = Temp.find("[") + + while Index != -1: + Index2 = Temp.find("]") + result*=int(Temp[Index+1:Index2]) + Temp = Temp[Index2+1:] + Index = Temp.find("[") + + return result + + +class DNAType: + ''' + DNAType is a C-type stored in the DNA + + Name = str + Size = int + Structure = DNAStructure + ''' + + def __init__(self, aName): + self.Name = aName + self.Structure=None + + +class DNAStructure: + ''' + DNAType is a C-type structure stored in the DNA + + Type = DNAType + Fields = [DNAField] + ''' + + def __init__(self, aType): + self.Type = aType + self.Type.Structure = self + self.Fields=[] + + def GetField(self, header, handle, path): + splitted = path.partition(".") + name = splitted[0] + rest = splitted[2] + offset = 0; + for field in self.Fields: + if field.Name.ShortName() == name: + log.debug("found "+name+"@"+str(offset)) + handle.seek(offset, os.SEEK_CUR) + return field.DecodeField(header, handle, rest) + else: + offset += field.Size(header) + + log.debug("error did not find "+path) + return None + + +class DNAField: + ''' + DNAField is a coupled DNAType and DNAName. + + Type = DNAType + Name = DNAName + ''' + + def __init__(self, aType, aName): + self.Type = aType + self.Name = aName + + def Size(self, header): + if self.Name.IsPointer() or self.Name.IsMethodPointer(): + return header.PointerSize*self.Name.ArraySize() + else: + return self.Type.Size*self.Name.ArraySize() + + def DecodeField(self, header, handle, path): + if path == "": + if self.Name.IsPointer(): + return Read('pointer', handle, header) + if self.Type.Name=="int": + return Read('int', handle, header) + if self.Type.Name=="short": + return Read('short', handle, header) + if self.Type.Name=="float": + return Read('float', handle, header) + if self.Type.Name=="char": + return ReadString(handle, self.Name.ArraySize()) + else: + return self.Type.Structure.GetField(header, handle, path) + diff --git a/doc/blender_file_format/README b/doc/blender_file_format/README new file mode 100644 index 00000000000..55dc3b83e49 --- /dev/null +++ b/doc/blender_file_format/README @@ -0,0 +1,29 @@ +To inspect the blend-file-format used by a certain version of blender 2.5x, +navigate to this folder and run this command: + +blender2.5 -b -P BlendFileDnaExporter_25.py + +where "blender2.5" is your blender executable or a symlink to it. + +This creates a temporary dna.blend to be inspected and it produces two new files: + +* dna.html: the list of all the structures saved in a blend file with the blender2.5 + executable you have used. If you enable build informations when you build blender, + the dna.html file will also show which svn revision the html refers to. +* dna.css: the css for the html above + +Below you have the help message with a list of options you can use. + + +Usage: + blender2.5 -b -P BlendFileDnaExporter_25.py [-- [options]] +Options: + --dna-keep-blend: doesn't delete the produced blend file DNA export to html + --dna-debug: sets the logging level to DEBUG (lots of additional info) + --dna-versioned saves version informations in the html and blend filenames + --dna-overwrite-css overwrite dna.css, useful when modifying css in the script +Examples: + default: % blender2.5 -b -P BlendFileDnaExporter_25.py + with options: % blender2.5 -b -P BlendFileDnaExporter_25.py -- --dna-keep-blend --dna-debug + + diff --git a/doc/blender_file_format/mystery_of_the_blend.css b/doc/blender_file_format/mystery_of_the_blend.css new file mode 100644 index 00000000000..df287b54a06 --- /dev/null +++ b/doc/blender_file_format/mystery_of_the_blend.css @@ -0,0 +1,204 @@ +@CHARSET "ISO-8859-1"; + +table { + border-width: 1px; + border-style: solid; + border-color: #000000; + border-collapse: collapse; + width: 94%; + margin: 10px 3%; +} + +DIV.title { + font-size: 30px; + font-weight: bold; + text-align: center +} + +DIV.subtitle { + font-size: large; + text-align: center +} + +DIV.contact { + margin:30px 3%; +} + +@media print { + DIV.contact { + margin-top: 300px; + } + DIV.title { + margin-top: 400px; + } +} + +label { + font-weight: bold; + width: 100px; + float: left; +} + +label:after { + content: ":"; +} + +TH { + background-color: #000000; + color: #ffffff; + padding-left: 5px; + padding-right: 5px; +} + +TR { +} + +TD { + border-width: 1px; + border-style: solid; + border-color: #a0a0a0; + padding-left: 5px; + padding-right: 5px; +} + +BODY { + font-family: verdana; + font-size: small; +} + +H1 { + page-break-before: always; +} + +H1, H2, H3, H4 { + margin-top: 30px; + margin-right: 3%; + padding: 3px 3%; + color: #404040; + cursor: pointer; +} + +H1, H2 { + background-color: #D3D3D3; +} + +H3, H4 { + padding-top: 5px; + padding-bottom: 5px; +} + +H1:hover, H2:hover, H3:hover, H4:hover { + background-color: #EBEBEB; +} + +CODE.evidence { + font-size:larger +} + +CODE.block { + color: #000000; + background-color: #DDDC75; + margin: 10px 0; + padding: 5px; + border-width: 1px; + border-style: dotted; + border-color: #000000; + white-space: pre; + display: block; + font-size: 2 em; +} + +ul { + margin: 10px 3%; +} + +li { + margin: 0 -15px; +} + +ul.multicolumn { + list-style: none; + float: left; + padding-right: 0px; + margin-right: 0px; +} + +li.multicolumn { + float: left; + width: 200px; + margin-right: 0px; +} + +@media screen { + p { + margin: 10px 3%; + line-height: 130%; + } +} + +span.fade { + color: gray; +} + +span.header { + color: green; +} + +span.header-greyed { + color: #4CBE4B; +} + +span.data { + color: blue; +} + +span.data-greyed { + color: #5D99C4; +} + +span.descr { + color: red; +} + +div.box { + margin: 15px 3%; + border-style: dotted; + border-width: 1px; +} + +div.box-solid { + margin: 15px 3%; + border-style: solid; + border-width: 1px; +} + +p.box-title { + font-style: italic; + font-size: 110%; + cursor: pointer; +} + +p.box-title:hover { + background-color: #EBEBEB; +} + +p.code { + font-family: "Courier New", Courier, monospace; +} + +a { + color: #a000a0; + text-decoration: none; +} + +a:hover { + color: #a000a0; + text-decoration: underline; +} + +td.skip { + color: #808080; + padding-top: 10px; + padding-bottom: 10px; + text-align: center; +} diff --git a/doc/blender_file_format/mystery_of_the_blend.html b/doc/blender_file_format/mystery_of_the_blend.html new file mode 100644 index 00000000000..b34493ffa3e --- /dev/null +++ b/doc/blender_file_format/mystery_of_the_blend.html @@ -0,0 +1,835 @@ + + + + + + The mystery of the blend + + + +
    The mystery of the blend
    +
    The blender file-format explained
    +
    + Jeroen Bakker
    +
    j.bakker@atmind.nl
    + http://www.atmind.nl/blender
    + 06-10-2010
    +
    + +

    Introduction

    + + +

    In this article I will describe the + blend-file-format with a request to tool-makers to support blend-file. + +

    +

    First I'll describe how Blender works with blend-files. You'll notice + why the blend-file-format is not that well documented, as from +Blender's perspective this is not needed. +We look at the global file-structure of a blend-file (the file-header +and file-blocks). +After this is explained, we go deeper to the core of the blend-file, the + DNA-structures. They hold the blue-prints of the blend-file and the key + asset of understanding blend-files. +When that's done we can use these DNA-structures to read information +from elsewhere in the blend-file. + +

    +

    +In this article we'll be using the default blend-file from Blender 2.54, + with the goal to read the output resolution from the Scene. +The article is written to be programming language independent and I've +setup a web-site for support. +

    + + +

    Loading and saving in Blender

    +
    + +

    +Loading and saving in Blender is very fast and Blender is known to +have excellent downward and upward compatibility. Ton Roosendaal +demonstrated that in December 2008 by loading a 1.0 blend-file using +Blender 2.48a [ref: http://www.blendernation.com/2008/12/01/blender-dna-rna-and-backward-compatibility/]. +

    + +

    +Saving complex scenes in Blender is done within seconds. Blender +achieves this by saving data in memory to disk without any +transformations or translations. Blender only adds file-block-headers to + this data. A file-block-header contains clues on how to interpret the +data. After the data, all internally Blender structures are stored. +These structures will act as blue-prints when Blender loads the file. +Blend-files can be different when stored on different hardware platforms + or Blender releases. There is no effort taken to make blend-files +binary the same. Blender creates the blend-files in this manner since +release 1.0. Backward and upwards compatibility is not implemented when +saving the file, this is done during loading. +

    + +

    +When Blender loads a blend-file, the DNA-structures are read first. +Blender creates a catalog of these DNA-structures. Blender uses this +catalog together with the data in the file, the internal Blender +structures of the Blender release you're using and a lot of +transformation and translation logic to implement the backward and +upward compatibility. In the source code of blender there is actually +logic which can transform and translate every structure used by a +Blender release to the one of the release you're using [ref: http://download.blender.org/source/blender-2.48a.tar.gz + blender/blenloader/intern/readfile.c lines +4946-7960]. The more difference between releases the more logic is +executed. +

    + +

    +The blend-file-format is not well documented, as it does not differ from + internally used structures and the file can really explain itself. +

    + + +

    Global file-structure

    +
    + +

    +This section explains how the global file-structure can be read. +

    + + + + +
    + +

    File.blend

    + +

    File-header

    + +

    File-block

    +

    Header

    +

    Data

    +
    + +

    File-block

    +

    File-block

    + +

    File-block 'Structure DNA'

    +

    Header ('DNA1')

    +
    +

    Data ('SDNA')

    +
    +

    Names ('NAME')

    +
    +
    +

    Types ('TYPE')

    +
    +
    +

    Lengths ('TLEN')

    +
    +
    +

    Structures ('STRC')

    +
    +
    +
    + +

    File-Block 'ENDB'

    + +
    + + +

    File-Header

    +
    + +

    +The first 12 bytes of every blend-file is the file-header. The +file-header has information on Blender (version-number) and the PC the +blend-file was saved on (pointer-size and endianness). This is required +as all data inside the blend-file is ordered in that way, because no +translation or transformation is done during saving. +The next table describes the information in the file-header. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    File-header
    referencestructuretypeoffsetsize
    identifierchar[7]File identifier (always 'BLENDER')07
    pointer-sizecharSize of a pointer; all pointers in the file are stored in this format. '_' means 4 bytes or 32 bit and '-' means 8 bytes or 64 bits.71
    endiannesscharType of byte ordering used; 'v' means little endian and 'V' means big endian.81
    version-numberchar[3]Version of Blender the file was created in; '254' means version 2.5493
    + +

    +Endianness addresses the way values are ordered in a sequence of bytes(see the example below): +

    + + + +

    +Nowadays, little-endian is the most commonly used. +

    + + +
    +

    +Endianess Example +

    +

    +Writing the integer 0x4A3B2C1Dh, will be ordered: +

    +

    +
    + +

    +Blender supports little-endian and big-endian.
    +This means that when the endianness +is different between the blend-file and the PC your using, Blender changes it to the byte ordering +of your PC. +

    + + +
    +

    +File-header Example +

    + +

    +This hex-dump describes a file-header created with blender 2.54.0 on little-endian hardware with a 32 bits pointer length. + pointer-size version-number + | | +0000 0000: [42 4C 45 4E 44 45 52] [5F] [76] [32 35 34] BLENDER_v254 + | | + identifier endianness +

    +
    + +

    File-blocks

    + +

    +File-blocks contain a "file-block header" and "file-block data". +

    + +

    File-block headers

    + +

    +The file-block-header describes: +

    + + + +

    +As we can see below, depending on the pointer-size stored in the file-header, a file-block-header +can be 20 or 24 bytes long, hence it is always aligned at 4 bytes. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    File-block-header
    referencestructuretypeoffsetsize
    codechar[4]File-block identifier04
    sizeintegerTotal length of the data after the file-block-header44
    old memory addressvoid*Memory address the structure was located when written to disk8pointer-size (4/8)
    SDNA indexintegerIndex of the SDNA structure8+pointer-size4
    countintegerNumber of structure located in this file-block12+pointer-size4
    + +

    +The above table describes how a file-block-header is structured: +

    + + + + +
    +

    +Example +

    +

    +This hex-dump describes a File-block (= File-block header + File-block data) created with blender 2.54 on little-endian hardware with a 32 bits pointer length.
    + file-block + identifier='SC' data size=1404 old pointer SDNA index=150 + | | | | +0000 4420: [53 43 00 00] [7C 05 00 00] [68 34 FB 0B] [96 00 00 00] SC.. `... ./.. .... +0000 4430: [01 00 00 00] [xx xx xx xx xx xx xx xx xx xx xx xx .... xxxx xxxx xxxx + | | + count=1 file-block data (next 1404 bytes) + +

    + + + +

    +Before we can interpret the data of this file-block we first have to read the DNA structures in the file. +The section "Structure DNA" will show how to do that. +

    +
    + +

    Structure DNA

    + +

    The DNA1 file-block

    + +

    +Structure DNA is stored in a file-block with code 'DNA1'. It can be just before the 'ENDB' file-block. +

    + +

    +The 'DNA1' file-block contains all internal structures of the Blender release the +file was created in.
    +These structure can be described as C-structures: they can hold fields, arrays and +pointers to other structures, just like a normal C-structure. + +

    +struct SceneRenderLayer { + struct SceneRenderLayer *next, *prev; + char name[32]; + struct Material *mat_override; + struct Group *light_override; + unsigned int lay; + unsigned int lay_zmask; + int layflag; + int pad; + int passflag; + int pass_xor; +}; + +

    + +

    +For example,a blend-file created with Blender 2.54 the 'DNA1' file-block is 57796 bytes long and contains 398 structures. +

    + +

    DNA1 file-block-header

    + +

    +The DNA1 file-block header follows the same rules of any other file-block, see the example below. +

    + + +
    +

    +Example +

    +

    +This hex-dump describes the file-block 'DNA1' header created with blender 2.54.0 on little-endian hardware with a 32 bits pointer length.
    + (file-block + identifier='DNA1') data size=57796 old pointer SDNA index=0 + | | | | +0004 B060 [44 4E 41 31] [C4 E1 00 00] [C8 00 84 0B] [00 00 00 00] DNA1............ +0004 B070 [01 00 00 00] [53 44 4E 41 4E 41 4D 45 CB 0B 00 00 ....SDNANAME.... + | | + count=1 'DNA1' file-block data (next 57796 bytes) + +

    +
    + +

    DNA1 file-block data

    +

    +The next section describes how this information is ordered in the data of the 'DNA1' file-block. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Structure of the DNA file-block-data
    repeat conditionnametypelengthdescription
    identifierchar[4]4'SDNA'
    name identifierchar[4]4'NAME'
    #namesinteger4Number of names follows
    for(#names)namechar[]?Zero terminating string of name, also contains pointer and simple array definitions (e.g. '*vertex[3]\0')
    type identifierchar[4]4'TYPE' this field is aligned at 4 bytes
    #typesinteger4Number of types follows
    for(#types)typechar[]?Zero terminating string of type (e.g. 'int\0')
    length identifierchar[4]4'TLEN' this field is aligned at 4 bytes
    for(#types)lengthshort2Length in bytes of type (e.g. 4)
    structure identifierchar[4]4'STRC' this field is aligned at 4 bytes
    #structuresinteger4Number of structures follows
    for(#structures)structure typeshort2Index in types containing the name of the structure
    ..#fieldsshort2Number of fields in this structure
    ..for(#field)field typeshort2Index in type
    for endfor endfield nameshort2Index in name
    + +

    +As you can see, the structures are stored in 4 arrays: names, types, +lengths and structures. Every structure also contains an array of +fields. A field is the combination of a type and a name. From this +information a catalog of all structures can be constructed. +The names are stored as how a C-developer defines them. This means that +the name also defines pointers and arrays. +(When a name starts with '*' it is used as a pointer. when the name +contains for example '[3]' it is used as a array of 3 long.) +In the types you'll find simple-types (like: 'integer', 'char', +'float'), but also complex-types like 'Scene' and 'MetaBall'. +'TLEN' part describes the length of the types. A 'char' is 1 byte, an +'integer' is 4 bytes and a 'Scene' is 1376 bytes long. +

    + +
    +

    +Note +

    +

    +All identifiers, are arrays of 4 chars, hence they are all aligned at 4 bytes. +

    +
    + + +
    +

    +Example +

    +

    +Created with blender 2.54.0 on little-endian hardware with a 32 bits pointer length. +

    + +

    The names array

    +

    +The first names are: *next, *prev, *data, *first, *last, x, y, xmin, xmax, ymin, ymax, *pointer, group, val, val2, type, subtype, flag, name[32], ... + file-block-data identifier='SDNA' array-id='NAME' number of names=3019 + | | | +0004 B070 01 00 00 00 [53 44 4E 41][4E 41 4D 45] [CB 0B 00 00] ....SDNANAME.... +0004 B080 [2A 6E 65 78 74 00][2A 70 72 65 76 00] [2A 64 61 74 *next.*prev.*dat + | | | + '*next\0' '*prev\0' '*dat' + .... + .... (3019 names) + +

    + +
    +

    +Note +

    +

    +While reading the DNA you'll will come across some strange +names like '(*doit)()'. These are method pointers and Blender updates +them to the correct methods. +

    +
    + +

    The types array

    +

    +The first types are: char, uchar, short, ushort, int, long, ulong, float, double, void, Link, LinkData, ListBase, vec2s, vec2f, ... + array-id='TYPE' + | +0005 2440 6F 6C 64 5B 34 5D 5B 34 5D 00 00 00 [54 59 50 45] old[4][4]...TYPE +0005 2450 [C9 01 00 00] [63 68 61 72 00] [75 63 68 61 72 00][73 ....char.uchar.s + | | | | + number of types=457 'char\0' 'uchar\0' 's' + .... + .... (457 types) + +

    + +

    The lengths array

    +

    + char uchar ushort short + array-id length length length length + 'TLEN' 1 1 2 2 +0005 3AA0 45 00 00 00 [54 4C 45 4E] [01 00] [01 00] [02 00] [02 00] E...TLEN........ + .... +0005 3AC0 [08 00] [04 00] [08 00] [10 00] [10 00] [14 00] [4C 00] [34 00] ............L.4. + 8 4 8 + ListBase vec2s vec2f ... etc + length len length + .... + .... (457 lengths, same as number of types) + +

    + +

    The structures array

    +

    + array-id='STRC' + | +0005 3E30 40 00 38 00 60 00 00 00 00 00 00 00 [53 54 52 43] @.8.`.......STRC +0005 3E40 [8E 01 00 00] [0A 00] [02 00] [0A 00] [00 00] [0A 00] [01 00] ................ + 398 10 2 10 0 10 0 + number of index fields index index index index + structures in types in types in names in types in names + ' '----------------' '-----------------' ' + ' field 0 field 1 ' + '--------------------------------------------------------' + structure 0 + .... + .... (398 structures, each one describeing own type, and type/name for each field) + +

    +
    + +

    +The DNA structures inside a Blender 2.48 blend-file can be found at http://www.atmind.nl/blender/blender-sdna.html. + +If we understand the DNA part of the file it is now possible to read +information from other parts file-blocks. The next section will tell us +how. +

    + +

    Reading scene information

    + +

    +Let us look at the file-block header we have seen earlier:
    +

    + +

    +Now note that: +

    +

    + +

    +We can map the Scene structure on the data of the file-blocks. +But before we can do that, we have to flatten the Scene-structure. + +struct Scene { + ID id; // 52 bytes long (ID is different a structure) + AnimData *adt; // 4 bytes long (pointer to an AnimData structure) + Object *camera; // 4 bytes long (pointer to an Object structure) + World *world; // 4 bytes long (pointer to an Object structure) + ... + float cursor[3]; // 12 bytes long (array of 3 floats) + ... +}; + + +The first field in the Scene-structure is of type 'ID' with the name 'id'. +Inside the list of DNA structures there is a structure defined for type 'ID' (structure index 17). + +struct ID { + void *next, *prev; + struct ID *newid; + struct Library *lib; + char name[24]; + short us; + short flag; + int icon_id; + IDProperty *properties; +}; + + +The first field in this structure has type 'void' and name '*next'.
    +Looking in the structure list there is no structure defined for type 'void': it is a simple type and therefore the data should be read. +The name '*next' describes a pointer. +As we see, the first 4 bytes of the data can be mapped to 'id.next'. +

    + +

    +Using this method we'll map a structure to its data. If we want to +read a specific field we know at which offset in the data it is located +and how much space it takes.
    +The next table shows the output of this flattening process for some +parts of the Scene-structure. Not all rows are described in the table as + there is a lot of information in a Scene-structure. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Flattened SDNA structure 150: Scene
    referencestructuretypenameoffsetsizedescription
    id.nextIDvoid*next04Refers to the next scene
    id.prevIDvoid*prev44Refers to the previous scene
    id.newidIDID*newid84
    id.libIDLibrary*lib124
    id.nameIDcharname[24]1624'SC'+the name of the scene as displayed in Blender
    id.usIDshortus402
    id.flagIDshortflag422
    id.icon_idIDinticon_id444
    id.propertiesIDIDProperty*properties484
    adtSceneAnimData*adt524
    cameraSceneObject*camera564Pointer to the current camera
    worldSceneWorld*world604Pointer to the current world
    Skipped rows
    r.xschRenderData + shortxsch3822X-resolution of the output when rendered at 100%
    r.yschRenderData + shortysch3842Y-resolution of the output when rendered at 100%
    r.xpartsRenderData + shortxparts3862Number of x-part used by the renderer
    r.ypartsRenderData + shortyparts3882Number of x-part used by the renderer
    Skipped rows
    gpdScenebGPdata*gpd13764
    physics_settings.gravityPhysicsSettings + floatgravity[3]138012
    physics_settings.flagPhysicsSettings + intflag13924
    physics_settings.quick_cache_stepPhysicsSettings + intquick_cache_step13964
    physics_settings.rtPhysicsSettings + intrt14004
    + +

    +We can now read the X and Y resolution of the Scene: +

    +

    + +
    +

    +Note +

    +

    +An array of chars can mean 2 things. The field contains readable +text or it contains an array of flags (not humanly readable). +

    +
    + +
    +

    +Note +

    +

    +A file-block containing a list refers to the DNA structure and has a count larger +than 1. For example Vertexes and Faces are stored in this way. +

    +
    + + + + diff --git a/doc/python_api/sphinx_doc_gen.py b/doc/python_api/sphinx_doc_gen.py index 41ea3405513..c026cea45bd 100644 --- a/doc/python_api/sphinx_doc_gen.py +++ b/doc/python_api/sphinx_doc_gen.py @@ -371,7 +371,7 @@ def rna2sphinx(BASEPATH): fw(" These parts of the API are relatively stable and are unlikely to change significantly\n") fw(" * data API, access to attributes of blender data such as mesh verts, material color, timeline frames and scene objects\n") fw(" * user interface functions for defining buttons, creation of menus, headers, panels\n") - fw(" * modules: bgl, mathutils and geometry\n") + fw(" * modules: bgl and mathutils\n") fw(" * game engine modules\n") fw("\n") diff --git a/doc/python_api/sphinx_doc_gen.sh b/doc/python_api/sphinx_doc_gen.sh index 49a2e4869d8..ae7fad58c23 100755 --- a/doc/python_api/sphinx_doc_gen.sh +++ b/doc/python_api/sphinx_doc_gen.sh @@ -15,7 +15,6 @@ blender_version=$(grep BLENDER_VERSION $blender_srcdir/source/blender/blenkernel blender_subversion=$(grep BLENDER_SUBVERSION $blender_srcdir/source/blender/blenkernel/BKE_blender.h | tr -dc 0-9) BLENDER_VERSION=$(expr $blender_version / 100)_$(expr $blender_version % 100)_$blender_subversion -BLENDER_VERSION=`$BLENDER --version | cut -f2-4 -d" " | sed 's/(//g' | sed 's/)//g' | sed 's/ sub /./g' | sed 's/\./_/g'` SSH_UPLOAD_FULL=$SSH_UPLOAD/"blender_python_api_"$BLENDER_VERSION SPHINXBASE=doc/python_api/ diff --git a/intern/audaspace/CMakeLists.txt b/intern/audaspace/CMakeLists.txt index 2dd4694d8a9..be39a7348aa 100644 --- a/intern/audaspace/CMakeLists.txt +++ b/intern/audaspace/CMakeLists.txt @@ -178,8 +178,7 @@ IF(WITH_PYTHON) SET(PYTHONSRC Python/AUD_PyAPI.cpp ) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) SET(SRC ${SRC} ${FFMPEGSRC} ${SNDFILESRC} ${FFTW3SRC} ${SDLSRC} ${OPENALSRC} ${JACKSRC} ${PYTHONSRC}) diff --git a/intern/audaspace/SConscript b/intern/audaspace/SConscript index 7230bffebdc..2c86849bc62 100644 --- a/intern/audaspace/SConscript +++ b/intern/audaspace/SConscript @@ -39,8 +39,7 @@ if env['WITH_BF_SNDFILE']: if env['WITH_BF_PYTHON']: sources += env.Glob('Python/*.cpp') incs += ' Python ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): incs += ' ' + env['BF_PTHREADS_INC'] diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp index 09fdb31e938..5526b0dcf5a 100644 --- a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp +++ b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp @@ -246,10 +246,8 @@ void AUD_FFMPEGReader::seek(int position) { if(position >= 0) { - uint64_t st_time = m_formatCtx->streams[m_stream]->start_time; - double time_base = - av_q2d(m_formatCtx->streams[m_stream]->time_base); - uint64_t seek_pos = position / time_base / m_specs.rate; + uint64_t st_time = m_formatCtx->start_time; + uint64_t seek_pos = position * AV_TIME_BASE / m_specs.rate; if (seek_pos < 0) { seek_pos = 0; @@ -259,9 +257,14 @@ void AUD_FFMPEGReader::seek(int position) seek_pos += st_time; } + double pts_time_base = + av_q2d(m_formatCtx->streams[m_stream]->time_base); + uint64_t pts_st_time = + ((st_time != AV_NOPTS_VALUE) ? st_time : 0) + / pts_time_base / (uint64_t) AV_TIME_BASE; // a value < 0 tells us that seeking failed - if(av_seek_frame(m_formatCtx, m_stream, seek_pos, + if(av_seek_frame(m_formatCtx, -1, seek_pos, AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_ANY) >= 0) { avcodec_flush_buffers(m_codecCtx); @@ -284,7 +287,7 @@ void AUD_FFMPEGReader::seek(int position) { // calculate real position, and read to frame! m_position = (packet.pts - - ((st_time != AV_NOPTS_VALUE) ? st_time : 0)) * time_base * m_specs.rate; + pts_st_time) * pts_time_base * m_specs.rate; if(m_position < position) { @@ -307,6 +310,7 @@ void AUD_FFMPEGReader::seek(int position) } else { + fprintf(stderr, "seeking failed!\n"); // Seeking failed, do nothing. } } diff --git a/intern/audaspace/intern/AUD_C-API.cpp b/intern/audaspace/intern/AUD_C-API.cpp index d22d9e6c434..5e4e45d4e1e 100644 --- a/intern/audaspace/intern/AUD_C-API.cpp +++ b/intern/audaspace/intern/AUD_C-API.cpp @@ -28,7 +28,7 @@ #define __STDC_CONSTANT_MACROS #endif -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "AUD_PyInit.h" #include "AUD_PyAPI.h" @@ -141,7 +141,7 @@ int AUD_init(AUD_DeviceType device, AUD_DeviceSpecs specs, int buffersize) AUD_device = dev; AUD_3ddevice = dynamic_cast(AUD_device); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(g_pyinitialized) { g_device = (Device*)Device_empty(); @@ -162,7 +162,7 @@ int AUD_init(AUD_DeviceType device, AUD_DeviceSpecs specs, int buffersize) void AUD_exit() { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(g_device) { Py_XDECREF(g_device); @@ -176,7 +176,7 @@ void AUD_exit() AUD_3ddevice = NULL; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static PyObject* AUD_getCDevice(PyObject* self) { if(g_device) @@ -197,7 +197,7 @@ PyObject* AUD_initPython() { PyObject* module = PyInit_aud(); PyModule_AddObject(module, "device", (PyObject *)PyCFunction_New(meth_getcdevice, NULL)); - PyDict_SetItemString(PySys_GetObject("modules"), "aud", module); + PyDict_SetItemString(PyImport_GetModuleDict(), "aud", module); if(AUD_device) { g_device = (Device*)Device_empty(); @@ -241,6 +241,7 @@ AUD_SoundInfo AUD_getInfo(AUD_Sound* sound) { info.specs = reader->getSpecs(); info.length = reader->getLength() / (float) info.specs.rate; + delete reader; } } catch(AUD_Exception&) @@ -721,7 +722,7 @@ int AUD_setDeviceVolume(AUD_Device* device, float volume) return true; } catch(AUD_Exception&) {} - + return false; } @@ -781,10 +782,20 @@ float* AUD_readSoundBuffer(const char* filename, float low, float high, AUD_Sound* sound; AUD_FileFactory file(filename); + + AUD_IReader* reader = file.createReader(); + AUD_SampleRate rate = reader->getSpecs().rate; + delete reader; + AUD_ChannelMapperFactory mapper(&file, specs); - AUD_LowpassFactory lowpass(&mapper, high); - AUD_HighpassFactory highpass(&lowpass, low); - AUD_EnvelopeFactory envelope(&highpass, attack, release, threshold, 0.1f); + sound = &mapper; + AUD_LowpassFactory lowpass(sound, high); + if(high < rate) + sound = &lowpass; + AUD_HighpassFactory highpass(sound, low); + if(low > 0) + sound = &highpass; + AUD_EnvelopeFactory envelope(sound, attack, release, threshold, 0.1f); AUD_LinearResampleFactory resampler(&envelope, specs); sound = &resampler; AUD_SquareFactory squaref(sound, sthreshold); @@ -797,7 +808,7 @@ float* AUD_readSoundBuffer(const char* filename, float low, float high, else if(additive) sound = ∑ - AUD_IReader* reader = sound->createReader(); + reader = sound->createReader(); if(reader == NULL) return NULL; diff --git a/intern/audaspace/intern/AUD_PyInit.h b/intern/audaspace/intern/AUD_PyInit.h index bd67259449a..0b80b3a9ae1 100644 --- a/intern/audaspace/intern/AUD_PyInit.h +++ b/intern/audaspace/intern/AUD_PyInit.h @@ -26,7 +26,7 @@ #ifndef AUD_PYINIT #define AUD_PYINIT -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "Python.h" #ifdef __cplusplus diff --git a/intern/ghost/SConscript b/intern/ghost/SConscript index c71402b352b..e6190c50577 100644 --- a/intern/ghost/SConscript +++ b/intern/ghost/SConscript @@ -21,6 +21,8 @@ if window_system in ('linux2', 'openbsd3', 'sunos5', 'freebsd7', 'freebsd8', 'fr sources.remove('intern' + os.sep + f + 'Carbon.cpp') except ValueError: pass + defs += ['PREFIX=\\"/usr/local/\\"'] + elif window_system in ('win32-vc', 'win32-mingw', 'cygwin', 'linuxcross', 'win64-vc'): for f in pf: try: @@ -62,6 +64,6 @@ if window_system in ('win32-vc', 'win32-mingw', 'cygwin', 'linuxcross', 'win64-v incs = env['BF_WINTAB_INC'] + ' ' + incs if window_system in ('win32-vc', 'win64-vc'): - env.BlenderLib ('bf_intern_ghost', sources, Split(incs), defines=defs, libtype=['intern','player'], priority = [40,15], cc_compileflags=['/WX'] ) + env.BlenderLib ('bf_intern_ghost', sources, Split(incs), defines=defs, libtype=['intern','player'], priority = [40,15]) #, cc_compileflags=env['CCFLAGS'].append('/WX') ) else: env.BlenderLib ('bf_intern_ghost', sources, Split(incs), defines=defs, libtype=['intern','player'], priority = [40,15] ) diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp index 393761566ba..5f7c59fa5e6 100644 --- a/intern/ghost/intern/GHOST_SystemX11.cpp +++ b/intern/ghost/intern/GHOST_SystemX11.cpp @@ -68,7 +68,7 @@ #include // for exit #ifndef PREFIX -# define PREFIX "/usr/local" +#error "PREFIX not defined" #endif typedef struct NDOFPlatformInfo { diff --git a/intern/ghost/intern/Makefile b/intern/ghost/intern/Makefile index 2f5e088f4fe..a251ce26b31 100644 --- a/intern/ghost/intern/Makefile +++ b/intern/ghost/intern/Makefile @@ -71,4 +71,4 @@ CPPFLAGS += -I.. CPPFLAGS += -I$(OPENGL_HEADERS) CPPFLAGS += -I../../../source/blender/imbuf CPPFLAGS += -I../../../source/blender/makesdna - +CPPFLAGS += -DPREFIX=\"$(BF_PREFIX)\" diff --git a/intern/smoke/CMakeLists.txt b/intern/smoke/CMakeLists.txt index 741301f04da..2cf51a0f7ec 100644 --- a/intern/smoke/CMakeLists.txt +++ b/intern/smoke/CMakeLists.txt @@ -27,7 +27,6 @@ SET(INC intern ../memutil - ../guardealloc ../../extern/bullet2/src ${PNG_INC} ${ZLIB_INC} diff --git a/release/VERSION b/release/VERSION index 6020b0f868b..104a379ad75 100644 --- a/release/VERSION +++ b/release/VERSION @@ -1 +1 @@ -2.54-beta +2.55-beta diff --git a/release/datafiles/splash.png b/release/datafiles/splash.png index 36ebb154ca9..faedd4b19f1 100644 Binary files a/release/datafiles/splash.png and b/release/datafiles/splash.png differ diff --git a/release/scripts/io/netrender/__init__.py b/release/scripts/io/netrender/__init__.py index b8c1fddc691..32480030363 100644 --- a/release/scripts/io/netrender/__init__.py +++ b/release/scripts/io/netrender/__init__.py @@ -30,6 +30,7 @@ if "init_data" in locals(): reload(balancing) reload(ui) reload(repath) + reload(versioning) else: from netrender import model from netrender import operators @@ -41,6 +42,7 @@ else: from netrender import balancing from netrender import ui from netrender import repath + from netrender import versioning jobs = [] slaves = [] diff --git a/release/scripts/io/netrender/client.py b/release/scripts/io/netrender/client.py index 128ae99ab1d..c469c80264e 100644 --- a/release/scripts/io/netrender/client.py +++ b/release/scripts/io/netrender/client.py @@ -92,7 +92,82 @@ def addPointCache(job, ob, point_cache, default_path): previous_frame = previous_item[0] job.addFile(cache_path + current_file, previous_frame + 1, next_frame - 1) +def fillCommonJobSettings(job, job_name, netsettings): + job.name = job_name + job.category = netsettings.job_category + + for slave in netrender.blacklist: + job.blacklist.append(slave.id) + + job.chunks = netsettings.chunks + job.priority = netsettings.priority + + if netsettings.job_type == "JOB_BLENDER": + job.type = netrender.model.JOB_BLENDER + elif netsettings.job_type == "JOB_PROCESS": + job.type = netrender.model.JOB_PROCESS + elif netsettings.job_type == "JOB_VCS": + job.type = netrender.model.JOB_VCS + def clientSendJob(conn, scene, anim = False): + netsettings = scene.network_render + if netsettings.job_type == "JOB_BLENDER": + return clientSendJobBlender(conn, scene, anim) + elif netsettings.job_type == "JOB_VCS": + return clientSendJobVCS(conn, scene, anim) + +def clientSendJobVCS(conn, scene, anim = False): + netsettings = scene.network_render + job = netrender.model.RenderJob() + + if anim: + for f in range(scene.frame_start, scene.frame_end + 1): + job.addFrame(f) + else: + job.addFrame(scene.frame_current) + + filename = bpy.data.filepath + + if not filename.startswith(netsettings.vcs_wpath): + # this is an error, need better way to handle this + return + + filename = filename[len(netsettings.vcs_wpath):] + + if filename[0] in (os.sep, os.altsep): + filename = filename[1:] + + print("CREATING VCS JOB", filename) + + job.addFile(filename, signed=False) + + job_name = netsettings.job_name + path, name = os.path.split(filename) + if job_name == "[default]": + job_name = name + + + fillCommonJobSettings(job, job_name, netsettings) + + # VCS Specific code + job.version_info = netrender.model.VersioningInfo() + job.version_info.system = netsettings.vcs_system + job.version_info.wpath = netsettings.vcs_wpath + job.version_info.rpath = netsettings.vcs_rpath + job.version_info.revision = netsettings.vcs_revision + + # try to send path first + conn.request("POST", "/job", json.dumps(job.serialize())) + response = conn.getresponse() + response.read() + + job_id = response.getheader("job-id") + + # a VCS job is always good right now, need error handling + + return job_id + +def clientSendJobBlender(conn, scene, anim = False): netsettings = scene.network_render job = netrender.model.RenderJob() @@ -160,14 +235,7 @@ def clientSendJob(conn, scene, anim = False): #print(job.files) - job.name = job_name - job.category = netsettings.job_category - - for slave in netrender.blacklist: - job.blacklist.append(slave.id) - - job.chunks = netsettings.chunks - job.priority = netsettings.priority + fillCommonJobSettings(job, job_name, netsettings) # try to send path first conn.request("POST", "/job", json.dumps(job.serialize())) diff --git a/release/scripts/io/netrender/master.py b/release/scripts/io/netrender/master.py index 11409bf372e..93f2baf4a36 100644 --- a/release/scripts/io/netrender/master.py +++ b/release/scripts/io/netrender/master.py @@ -35,7 +35,7 @@ class MRenderFile(netrender.model.RenderFile): def test(self): self.found = os.path.exists(self.filepath) - if self.found: + if self.found and self.signature != None: found_signature = hashFile(self.filepath) self.found = self.signature == found_signature @@ -105,9 +105,11 @@ class MRenderJob(netrender.model.RenderJob): self.chunks = info_map["chunks"] def testStart(self): - for f in self.files: - if not f.test(): - return False + # Don't test files for versionned jobs + if not self.version_info: + for f in self.files: + if not f.test(): + return False self.start() self.initInfo() @@ -769,7 +771,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): frame = job[job_frame] if frame: - if job.type == netrender.model.JOB_BLENDER: + if job.hasRenderResult(): if job_result == DONE: length = int(self.headers['content-length']) buf = self.rfile.read(length) @@ -820,7 +822,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): frame = job[job_frame] if frame: - if job.type == netrender.model.JOB_BLENDER: + if job.hasRenderResult(): length = int(self.headers['content-length']) buf = self.rfile.read(length) f = open(os.path.join(job.save_path, "%06d.jpg" % job_frame), 'wb') diff --git a/release/scripts/io/netrender/master_html.py b/release/scripts/io/netrender/master_html.py index 74155f6bd66..0e14905a86b 100644 --- a/release/scripts/io/netrender/master_html.py +++ b/release/scripts/io/netrender/master_html.py @@ -20,6 +20,7 @@ import os import re import shutil from netrender.utils import * +import netrender.model src_folder = os.path.split(__file__)[0] @@ -115,6 +116,7 @@ def get(handler): "id", "name", "category", + "type", "chunks", "priority", "usage", @@ -139,6 +141,7 @@ def get(handler): job.id, link(job.name, "/html/job" + job.id), job.category if job.category else "None", + netrender.model.JOB_TYPES[job.type], str(job.chunks) + """""" % (job.id, job.chunks + 1) + """""" % (job.id, job.chunks - 1, "disabled=True" if job.chunks == 1 else ""), @@ -228,39 +231,52 @@ def get(handler): endTable() - output("

    Files

    ") - - startTable() - headerTable("path") - - tot_cache = 0 - tot_fluid = 0 - - rowTable(job.files[0].filepath) - rowTable("Other Files", class_style = "toggle", extra = "onclick='toggleDisplay(".other", "none", "table-row")'") - - for file in job.files: - if file.filepath.endswith(".bphys"): - tot_cache += 1 - elif file.filepath.endswith(".bobj.gz") or file.filepath.endswith(".bvel.gz"): - tot_fluid += 1 - else: - if file != job.files[0]: - rowTable(file.filepath, class_style = "other") - - if tot_cache > 0: - rowTable("%i physic cache files" % tot_cache, class_style = "toggle", extra = "onclick='toggleDisplay(".cache", "none", "table-row")'") + if job.type == netrender.model.JOB_BLENDER: + output("

    Files

    ") + + startTable() + headerTable("path") + + tot_cache = 0 + tot_fluid = 0 + + rowTable(job.files[0].filepath) + rowTable("Other Files", class_style = "toggle", extra = "onclick='toggleDisplay(".other", "none", "table-row")'") + for file in job.files: if file.filepath.endswith(".bphys"): - rowTable(os.path.split(file.filepath)[1], class_style = "cache") - - if tot_fluid > 0: - rowTable("%i fluid bake files" % tot_fluid, class_style = "toggle", extra = "onclick='toggleDisplay(".fluid", "none", "table-row")'") - for file in job.files: - if file.filepath.endswith(".bobj.gz") or file.filepath.endswith(".bvel.gz"): - rowTable(os.path.split(file.filepath)[1], class_style = "fluid") - - endTable() + tot_cache += 1 + elif file.filepath.endswith(".bobj.gz") or file.filepath.endswith(".bvel.gz"): + tot_fluid += 1 + else: + if file != job.files[0]: + rowTable(file.filepath, class_style = "other") + + if tot_cache > 0: + rowTable("%i physic cache files" % tot_cache, class_style = "toggle", extra = "onclick='toggleDisplay(".cache", "none", "table-row")'") + for file in job.files: + if file.filepath.endswith(".bphys"): + rowTable(os.path.split(file.filepath)[1], class_style = "cache") + + if tot_fluid > 0: + rowTable("%i fluid bake files" % tot_fluid, class_style = "toggle", extra = "onclick='toggleDisplay(".fluid", "none", "table-row")'") + for file in job.files: + if file.filepath.endswith(".bobj.gz") or file.filepath.endswith(".bvel.gz"): + rowTable(os.path.split(file.filepath)[1], class_style = "fluid") + + endTable() + elif job.type == netrender.model.JOB_VCS: + output("

    Versioning

    ") + + startTable() + + rowTable("System", job.version_info.system.name) + rowTable("Remote Path", job.version_info.rpath) + rowTable("Working Path", job.version_info.wpath) + rowTable("Revision", job.version_info.revision) + rowTable("Render File", job.files[0].filepath) + + endTable() if job.blacklist: output("

    Blacklist

    ") diff --git a/release/scripts/io/netrender/model.py b/release/scripts/io/netrender/model.py index e7656f498b4..60186396ac7 100644 --- a/release/scripts/io/netrender/model.py +++ b/release/scripts/io/netrender/model.py @@ -20,6 +20,7 @@ import sys, os import http, http.client, http.server, urllib import subprocess, shutil, time, hashlib +import netrender.versioning as versioning from netrender.utils import * class LogFile: @@ -96,11 +97,65 @@ class RenderSlave: JOB_BLENDER = 1 JOB_PROCESS = 2 +JOB_VCS = 3 JOB_TYPES = { - JOB_BLENDER: "Blender", - JOB_PROCESS: "Process" - } + JOB_BLENDER: "Blender", + JOB_PROCESS: "Process", + JOB_VCS: "Versioned", + } + +class VersioningInfo: + def __init__(self, info = None): + self._system = None + self.wpath = "" + self.rpath = "" + self.revision = "" + + @property + def system(self): + return self._system + + @system.setter + def system(self, value): + self._system = versioning.SYSTEMS[value] + + def update(self): + self.system.update(self) + + def serialize(self): + return { + "wpath": self.wpath, + "rpath": self.rpath, + "revision": self.revision, + "system": self.system.name + } + + @staticmethod + def generate(system, path): + vs = VersioningInfo() + vs.wpath = path + vs.system = system + + vs.rpath = vs.system.path(path) + vs.revision = vs.system.revision(path) + + return vs + + + @staticmethod + def materialize(data): + if not data: + return None + + vs = VersioningInfo() + vs.wpath = data["wpath"] + vs.rpath = data["rpath"] + vs.revision = data["revision"] + vs.system = data["system"] + + return vs + class RenderFile: def __init__(self, filepath = "", index = 0, start = -1, end = -1, signature=0): @@ -142,6 +197,8 @@ class RenderJob: self.chunks = 0 self.priority = 0 self.blacklist = [] + + self.version_info = None self.usage = 0.0 self.last_dispatched = 0.0 @@ -156,9 +213,19 @@ class RenderJob: self.chunks = job_info.chunks self.priority = job_info.priority self.blacklist = job_info.blacklist + self.version_info = job_info.version_info - def addFile(self, file_path, start=-1, end=-1): - signature = hashFile(file_path) + def hasRenderResult(self): + return self.type in (JOB_BLENDER, JOB_VCS) + + def rendersWithBlender(self): + return self.type in (JOB_BLENDER, JOB_VCS) + + def addFile(self, file_path, start=-1, end=-1, signed=True): + if signed: + signature = hashFile(file_path) + else: + signature = None self.files.append(RenderFile(file_path, len(self.files), start, end, signature)) def addFrame(self, frame_number, command = ""): @@ -225,7 +292,8 @@ class RenderJob: "priority": self.priority, "usage": self.usage, "blacklist": self.blacklist, - "last_dispatched": self.last_dispatched + "last_dispatched": self.last_dispatched, + "version_info": self.version_info.serialize() if self.version_info else None } @staticmethod @@ -246,6 +314,10 @@ class RenderJob: job.usage = data["usage"] job.blacklist = data["blacklist"] job.last_dispatched = data["last_dispatched"] + + version_info = data.get("version_info", None) + if version_info: + job.version_info = VersioningInfo.materialize(version_info) return job diff --git a/release/scripts/io/netrender/operators.py b/release/scripts/io/netrender/operators.py index 96601dcf653..fe82011d706 100644 --- a/release/scripts/io/netrender/operators.py +++ b/release/scripts/io/netrender/operators.py @@ -26,6 +26,7 @@ import netrender from netrender.utils import * import netrender.client as client import netrender.model +import netrender.versioning as versioning class RENDER_OT_netslave_bake(bpy.types.Operator): '''NEED DESCRIPTION''' @@ -461,6 +462,38 @@ class netclientscan(bpy.types.Operator): def invoke(self, context, event): return self.execute(context) +class netclientvcsguess(bpy.types.Operator): + '''Guess VCS setting for the current file''' + bl_idname = "render.netclientvcsguess" + bl_label = "VCS Guess" + + @classmethod + def poll(cls, context): + return True + + def execute(self, context): + netsettings = context.scene.network_render + + system = versioning.SYSTEMS.get(netsettings.vcs_system, None) + + if system: + wpath, name = os.path.split(os.path.abspath(bpy.data.filepath)) + + rpath = system.path(wpath) + revision = system.revision(wpath) + + netsettings.vcs_wpath = wpath + netsettings.vcs_rpath = rpath + netsettings.vcs_revision = revision + + + + return {'FINISHED'} + + def invoke(self, context, event): + return self.execute(context) + + class netclientweb(bpy.types.Operator): '''Open new window with information about running rendering jobs''' bl_idname = "render.netclientweb" diff --git a/release/scripts/io/netrender/slave.py b/release/scripts/io/netrender/slave.py index 8629a38c04a..08bd48ae70b 100644 --- a/release/scripts/io/netrender/slave.py +++ b/release/scripts/io/netrender/slave.py @@ -78,7 +78,7 @@ def testFile(conn, job_id, slave_id, rfile, JOB_PREFIX, main_path = None): found = os.path.exists(job_full_path) - if found: + if found and rfile.signature != None: found_signature = hashFile(job_full_path) found = found_signature == rfile.signature @@ -160,6 +160,20 @@ def render_slave(engine, netsettings, threads): netrender.repath.update(job) + engine.update_stats("", "Render File "+ main_file+ " for job "+ job.id) + elif job.type == netrender.model.JOB_VCS: + if not job.version_info: + # Need to return an error to server, incorrect job type + pass + + job_path = job.files[0].filepath # path of main file + main_path, main_file = os.path.split(job_path) + + job.version_info.update() + + # For VCS jobs, file path is relative to the working copy path + job_full_path = os.path.join(job.version_info.wpath, job_path) + engine.update_stats("", "Render File "+ main_file+ " for job "+ job.id) # announce log to master @@ -174,7 +188,7 @@ def render_slave(engine, netsettings, threads): # start render start_t = time.time() - if job.type == netrender.model.JOB_BLENDER: + if job.rendersWithBlender(): frame_args = [] for frame in job.frames: @@ -259,7 +273,7 @@ def render_slave(engine, netsettings, threads): headers["job-result"] = str(DONE) for frame in job.frames: headers["job-frame"] = str(frame.number) - if job.type == netrender.model.JOB_BLENDER: + if job.hasRenderResult(): # send image back to server filename = os.path.join(JOB_PREFIX, "%06d.exr" % frame.number) diff --git a/release/scripts/io/netrender/ui.py b/release/scripts/io/netrender/ui.py index c065b95b928..916f567e299 100644 --- a/release/scripts/io/netrender/ui.py +++ b/release/scripts/io/netrender/ui.py @@ -203,10 +203,12 @@ class RENDER_PT_network_job(bpy.types.Panel, RenderButtonsPanel): split = layout.split(percentage=0.3) col = split.column() + col.label(text="Type:") col.label(text="Name:") col.label(text="Category:") col = split.column() + col.prop(netsettings, "job_type", text="") col.prop(netsettings, "job_name", text="") col.prop(netsettings, "job_category", text="") @@ -214,6 +216,30 @@ class RENDER_PT_network_job(bpy.types.Panel, RenderButtonsPanel): row.prop(netsettings, "priority") row.prop(netsettings, "chunks") +class RENDER_PT_network_job_vcs(bpy.types.Panel, RenderButtonsPanel): + bl_label = "VCS Job Settings" + COMPAT_ENGINES = {'NET_RENDER'} + + @classmethod + def poll(cls, context): + scene = context.scene + return (super(RENDER_PT_network_job_vcs, cls).poll(context) + and scene.network_render.mode == "RENDER_CLIENT" + and scene.network_render.job_type == "JOB_VCS") + + def draw(self, context): + layout = self.layout + + scene = context.scene + netsettings = scene.network_render + + layout.operator("render.netclientvcsguess", icon='FILE_REFRESH', text="") + + layout.prop(netsettings, "vcs_system") + layout.prop(netsettings, "vcs_revision") + layout.prop(netsettings, "vcs_rpath") + layout.prop(netsettings, "vcs_wpath") + class RENDER_PT_network_slaves(bpy.types.Panel, RenderButtonsPanel): bl_label = "Slaves Status" COMPAT_ENGINES = {'NET_RENDER'} @@ -397,6 +423,16 @@ def addProperties(): default = default_path, subtype='FILE_PATH') + NetRenderSettings.job_type = EnumProperty( + items=( + ("JOB_BLENDER", "Blender", "Standard Blender Job"), + ("JOB_PROCESS", "Process", "Custom Process Job"), + ("JOB_VCS", "VCS", "Version Control System Managed Job"), + ), + name="Job Type", + description="Type of render job", + default="JOB_BLENDER") + NetRenderSettings.job_name = StringProperty( name="Job name", description="Name of the job", @@ -423,6 +459,30 @@ def addProperties(): min=1, max=10) + NetRenderSettings.vcs_wpath = StringProperty( + name="Working Copy", + description="Path of the local working copy", + maxlen = 1024, + default = "") + + NetRenderSettings.vcs_rpath = StringProperty( + name="Remote Path", + description="Path of the server copy (protocol specific)", + maxlen = 1024, + default = "") + + NetRenderSettings.vcs_revision = StringProperty( + name="Revision", + description="Revision for this job", + maxlen = 256, + default = "") + + NetRenderSettings.vcs_system = StringProperty( + name="VCS", + description="Version Control System", + maxlen = 64, + default = "Subversion") + NetRenderSettings.job_id = StringProperty( name="Network job id", description="id of the last sent render job", diff --git a/release/scripts/io/netrender/utils.py b/release/scripts/io/netrender/utils.py index e2a5051cf64..7ad65fee66a 100644 --- a/release/scripts/io/netrender/utils.py +++ b/release/scripts/io/netrender/utils.py @@ -28,7 +28,7 @@ try: except: bpy = None -VERSION = bytes("0.9", encoding='utf8') +VERSION = bytes("1.0", encoding='utf8') # Jobs status JOB_WAITING = 0 # before all data has been entered @@ -57,6 +57,17 @@ FRAME_STATUS_TEXT = { ERROR: "Error" } +class DirectoryContext: + def __init__(self, path): + self.path = path + + def __enter__(self): + self.curdir = os.path.abspath(os.curdir) + os.chdir(self.path) + + def __exit__(self, exc_type, exc_value, traceback): + os.chdir(self.curdir) + def responseStatus(conn): response = conn.getresponse() response.read() @@ -216,9 +227,19 @@ def thumbnail(filename): scene = bpy.data.scenes[0] # FIXME, this is dodgy! scene.render.file_format = "JPEG" scene.render.file_quality = 90 + + # remove existing image, if there's a leftover (otherwise open changes the name) + if imagename in bpy.data.images: + img = bpy.data.images[imagename] + bpy.data.images.remove(img) + bpy.ops.image.open(filepath=filename) img = bpy.data.images[imagename] + img.save_render(thumbname, scene=scene) + + img.user_clear() + bpy.data.images.remove(img) try: process = subprocess.Popen(["convert", thumbname, "-resize", "300x300", thumbname]) diff --git a/release/scripts/io/netrender/versioning.py b/release/scripts/io/netrender/versioning.py new file mode 100644 index 00000000000..d4f8522cce8 --- /dev/null +++ b/release/scripts/io/netrender/versioning.py @@ -0,0 +1,72 @@ +import sys, os +import re +import subprocess + +from netrender.utils import * + +class AbstractVCS: + name = "ABSTRACT VCS" + def __init__(self): + pass + + def update(self, info): + """update(info) + Update a working copy to the specified revision. + If working copy doesn't exist, do a full get from server to create it. + [info] model.VersioningInfo instance, specifies the working path, remote path and version number.""" + pass + + def revision(self, path): + """revision(path) + return the current revision of the specified working copy path""" + pass + + def path(self, path): + """path(path) + return the remote path of the specified working copy path""" + pass + +class Subversion(AbstractVCS): + name = "Subversion" + def __init__(self): + super().__init__() + self.version_exp = re.compile("([0-9]*)") + self.path_exp = re.compile("URL: (.*)") + + def update(self, info): + if not os.path.exists(info.wpath): + base, folder = os.path.split(info.wpath) + + with DirectoryContext(base): + subprocess.call(["svn", "co", "%s@%s" % (info.rpath, str(info.revision)), folder]) + else: + with DirectoryContext(info.wpath): + subprocess.call(["svn", "up", "--accept", "theirs-full", "-r", str(info.revision)]) + + def revision(self, path): + if not os.path.exists(path): + return + + with DirectoryContext(path): + stdout = subprocess.check_output(["svnversion"]) + + match = self.version_exp.match(str(stdout, encoding="utf-8")) + + if match: + return match.group(1) + + def path(self, path): + if not os.path.exists(path): + return + + with DirectoryContext(path): + stdout = subprocess.check_output(["svn", "info"]) + + match = self.path_exp.search(str(stdout, encoding="utf-8")) + + if match: + return match.group(1) + +SYSTEMS = { + Subversion.name: Subversion() + } diff --git a/release/scripts/modules/bpy/ops.py b/release/scripts/modules/bpy/ops.py index ba56fa12fe1..c6bdc21afa6 100644 --- a/release/scripts/modules/bpy/ops.py +++ b/release/scripts/modules/bpy/ops.py @@ -115,14 +115,34 @@ class bpy_ops_submodule_op(object): def _get_doc(self): return op_as_string(self.idname()) + @staticmethod + def _parse_args(args): + C_dict = None + C_exec = 'EXEC_DEFAULT' + + if len(args) == 0: + pass + elif len(args) == 1: + if type(args[0]) != str: + C_dict = args[0] + else: + C_exec = args[0] + elif len(args) == 2: + C_exec, C_dict = args + else: + raise ValueError("1 or 2 args execution context is supported") + + return C_dict, C_exec + __doc__ = property(_get_doc) def __init__(self, module, func): self.module = module self.func = func - def poll(self, context=None): - return op_poll(self.idname_py(), context) + def poll(self, *args): + C_dict, C_exec = __class__._parse_args(args) + return op_poll(self.idname_py(), C_dict, C_exec) def idname(self): # submod.foo -> SUBMOD_OT_foo @@ -135,31 +155,11 @@ class bpy_ops_submodule_op(object): def __call__(self, *args, **kw): # Get the operator from blender - if len(args) > 2: - raise ValueError("1 or 2 args execution context is supported") - - C_dict = None - if args: - - C_exec = 'EXEC_DEFAULT' - - if len(args) == 2: - C_exec = args[0] - C_dict = args[1] - else: - if type(args[0]) != str: - C_dict = args[0] - else: - C_exec = args[0] - - if len(args) == 2: - C_dict = args[1] - + C_dict, C_exec = __class__._parse_args(args) ret = op_call(self.idname_py(), C_dict, kw, C_exec) - else: - ret = op_call(self.idname_py(), C_dict, kw) + ret = op_call(self.idname_py(), None, kw) if 'FINISHED' in ret: import bpy diff --git a/release/scripts/modules/bpy/utils.py b/release/scripts/modules/bpy/utils.py index d9229c2e761..d5da7cfa13c 100644 --- a/release/scripts/modules/bpy/utils.py +++ b/release/scripts/modules/bpy/utils.py @@ -477,8 +477,15 @@ def addon_reset_all(): """ Sets the addon state based on the user preferences. """ - - paths = script_paths("addons") + script_paths("addons_contrib") + + # RELEASE SCRIPTS: official scripts distributed in Blender releases + paths = script_paths("addons") + + # CONTRIB SCRIPTS: good for testing but not official scripts yet + paths += script_paths("addons_contrib") + + # EXTERN SCRIPTS: external projects scripts + paths += script_paths("addons_extern") for path in paths: _sys_path_ensure(path) diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py index 6ecb8a2e207..472fae59abe 100644 --- a/release/scripts/modules/bpy_types.py +++ b/release/scripts/modules/bpy_types.py @@ -650,14 +650,14 @@ class Operator(StructRNA, metaclass=OrderedMeta): properties = StructRNA.path_resolve(self, "properties") bl_rna = getattr(properties, "bl_rna", None) if bl_rna and attr in bl_rna.properties: - setattr(properties, attr, value) + return setattr(properties, attr, value) return super().__setattr__(attr, value) def __delattr__(self, attr): properties = StructRNA.path_resolve(self, "properties") bl_rna = getattr(properties, "bl_rna", None) if bl_rna and attr in bl_rna.properties: - delattr(properties, attr) + return delattr(properties, attr) return super().__delattr__(attr) diff --git a/release/scripts/modules/console/complete_calltip.py b/release/scripts/modules/console/complete_calltip.py index 87fac9f4c07..322b48d4f65 100644 --- a/release/scripts/modules/console/complete_calltip.py +++ b/release/scripts/modules/console/complete_calltip.py @@ -168,7 +168,10 @@ def complete(line, cursor, namespace): 'abs(number) -> number\\nReturn the absolute value of the argument.' """ matches = [] + word = '' + scrollback = '' match = RE_DEF_COMPLETE.search(line[:cursor]) + if match: word = match.group(1) func_word = match.group(2) @@ -176,7 +179,7 @@ def complete(line, cursor, namespace): func = eval(func_word, namespace) except Exception: func = None - scrollback = '' + if func: doc = get_doc(func) argspec = get_argspec(func, doc=doc) @@ -186,7 +189,5 @@ def complete(line, cursor, namespace): elif doc: scrollback += '\n' + doc scrollback = reduce_newlines(scrollback) - else: - word = '' - scrollback = '' + return matches, word, scrollback diff --git a/release/scripts/modules/extensions_framework/plugin.py b/release/scripts/modules/extensions_framework/plugin.py index b0042aad40d..a6a5b719e30 100644 --- a/release/scripts/modules/extensions_framework/plugin.py +++ b/release/scripts/modules/extensions_framework/plugin.py @@ -60,7 +60,7 @@ class plugin(object): init_properties(property_group, property_group.properties) #print('Initialised IDPropertyGroup %s' % property_group.__name__) - log('Render Engine "%s" initialised' % r_class.bl_label) + log('Extension "%s" initialised' % r_class.bl_label) @classmethod def uninstall(r_class): diff --git a/release/scripts/modules/rigify/__init__.py b/release/scripts/modules/rigify/__init__.py deleted file mode 100644 index c4f18d51519..00000000000 --- a/release/scripts/modules/rigify/__init__.py +++ /dev/null @@ -1,564 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from mathutils import Vector - -# TODO, have these in a more general module -from rna_prop_ui import rna_idprop_ui_prop_get -SPECIAL_TYPES = "root", -LAYER_TYPES = "main", "extra", "ik", "fk" - -ORG_LAYERS = [n == 31 for n in range(0, 32)] -MCH_LAYERS = [n == 30 for n in range(0, 32)] -DEF_LAYERS = [n == 29 for n in range(0, 32)] -ROOT_LAYERS = [n == 28 for n in range(0, 32)] - -ORG_PREFIX = "ORG-" -MCH_PREFIX = "MCH-" -DEF_PREFIX = "DEF-" - -WGT_PREFIX = "WGT-" - - -class RigifyError(Exception): - """Exception raised for errors in the metarig. - """ - - def __init__(self, message): - self.message = message - - def __str__(self): - return repr(self.message) - - -def submodule_func_from_type(bone_type): - type_pair = bone_type.split(".") - - # 'leg.ik' will look for an ik function in the leg module - # 'leg' will look up leg.main - if len(type_pair) == 1: - type_pair = type_pair[0], "main" - - type_name, func_name = type_pair - - # from rigify import leg - try: - submod = __import__(name="%s.%s" % (__package__, type_name), fromlist=[type_name]) - except ImportError: - raise RigifyError("python module for type '%s' not found" % type_name) - - reload(submod) - return type_name, submod, getattr(submod, func_name) - - -def get_submodule_types(): - import os - submodules = [] - files = os.listdir(os.path.dirname(__file__)) - for f in files: - if not f.startswith("_") and f.endswith(".py"): - submodules.append(f[:-3]) - - return sorted(submodules) - - -def get_bone_type_options(pbone, type_name): - options = {} - bone_name = pbone.name - for key, value in pbone.items(): - key_pair = key.rsplit(".") - # get all bone properties - """" - if key_pair[0] == type_name: - if len(key_pair) != 2: - raise RigifyError("option error for bone '%s', property name was not a pair '%s'" % (bone_name, key_pair)) - options[key_pair[1]] = value - """ - options[key] = value - - return options - - -def get_layer_dict(options): - ''' - Extracts layer info from a bone options dict - defaulting to the layer index if not set. - ''' - layer_default = [False] * 32 - result = {} - for i, layer_type in enumerate(LAYER_TYPES): - # no matter if its not defined - layer_index = options.get("layer_" + layer_type, i + 2) - layer = layer_default[:] - layer[layer_index-1] = True - result[layer_type] = layer - return result - - -def validate_rig(context, obj): - ''' - Makes no changes - only runs the metarig definitions and reports errors - ''' - type_found = False - - for pbone in obj.pose.bones: - bone_name = pbone.name - bone_type = pbone.get("type", "") - - if bone_type: - bone_type_list = [bt for bt in bone_type.replace(",", " ").split()] - else: - bone_type_list = [] - - for bone_type in bone_type_list: - if bone_type.split(".")[0] in SPECIAL_TYPES: - continue - - type_name, submod, type_func = submodule_func_from_type(bone_type) - reload(submod) - submod.metarig_definition(obj, bone_name) - type_found = True - - get_bone_type_options(pbone, bone_type) - - # missing, - check for duplicate root bone. - - if not type_found: - raise RigifyError("This rig has no 'type' properties defined on any pose bones, nothing to do") - - -def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True): - ''' - Main function for generating - ''' - from collections import OrderedDict - import rigify_utils - reload(rigify_utils) - - print("Begin...") - - # Not needed but catches any errors before duplicating - validate_rig(context, obj_orig) - - use_global_undo = context.user_preferences.edit.use_global_undo - context.user_preferences.edit.use_global_undo = False - mode_orig = context.mode - rest_backup = obj_orig.data.pose_position - obj_orig.data.pose_position = 'REST' - - bpy.ops.object.mode_set(mode='OBJECT') - - scene = context.scene - - # Check if the generated rig already exists, so we can - # regenerate in the same object. If not, create a new - # object to generate the rig in. - print("Fetch rig.") - try: - name = obj_orig["rig_object_name"] - except KeyError: - name = "rig" - - try: - obj = scene.objects[name] - except KeyError: - obj = bpy.data.objects.new(name, bpy.data.armatures.new(name)) - scene.objects.link(obj) - - obj.data.pose_position = 'POSE' - - # Get rid of anim data in case the rig already existed - print("Clear rig animation data.") - obj.animation_data_clear() - - # Select generated rig object - obj_orig.select = False - obj.select = True - scene.objects.active = obj - - # Remove all bones from the generated rig armature. - bpy.ops.object.mode_set(mode='EDIT') - for bone in obj.data.edit_bones: - obj.data.edit_bones.remove(bone) - bpy.ops.object.mode_set(mode='OBJECT') - - # Create temporary duplicates for merging - temp_rig_1 = obj_orig.copy() - temp_rig_1.data = obj_orig.data.copy() - scene.objects.link(temp_rig_1) - - temp_rig_2 = obj_orig.copy() - temp_rig_2.data = obj.data - scene.objects.link(temp_rig_2) - - # Select the temp rigs for merging - for objt in scene.objects: - objt.select = False # deselect all objects - temp_rig_1.select = True - temp_rig_2.select = True - scene.objects.active = temp_rig_2 - - # Merge the temporary rigs - bpy.ops.object.join(context) - - # Delete the second temp rig - bpy.ops.object.delete() - - # Select the generated rig - for objt in scene.objects: - objt.select = False # deselect all objects - obj.select = True - scene.objects.active = obj - - # Copy over the pose_bone properties - for bone in obj_orig.pose.bones: - bone_gen = obj.pose.bones[bone.name] - - # Rotation mode and transform locks - bone_gen.rotation_mode = bone.rotation_mode - bone_gen.lock_rotation = tuple(bone.lock_rotation) - bone_gen.lock_rotation_w = bone.lock_rotation_w - bone_gen.lock_rotations_4d = bone.lock_rotations_4d - bone_gen.lock_location = tuple(bone.lock_location) - bone_gen.lock_scale = tuple(bone.lock_scale) - - # Custom properties - for prop in bone.keys(): - bone_gen[prop] = bone[prop] - - # Copy over bone properties - for bone in obj_orig.data.bones: - bone_gen = obj.data.bones[bone.name] - - # B-bone stuff - bone_gen.bbone_segments = bone.bbone_segments - bone_gen.bbone_in = bone.bbone_in - bone_gen.bbone_out = bone.bbone_out - - - # Create proxy deformation rig - # TODO: remove this - if META_DEF: - obj_def = obj_orig.copy() - obj_def.data = obj_orig.data.copy() - scene.objects.link(obj_def) - - scene.update() - print("On to the real work.") - - arm = obj.data - - # prepend the ORG prefix to the bones, and create the base_names mapping - base_names = {} - bpy.ops.object.mode_set(mode='EDIT') - for bone in arm.edit_bones: - bone_name = bone.name - bone.name = ORG_PREFIX + bone_name - base_names[bone.name] = bone_name - - # create root_bone - bpy.ops.object.mode_set(mode='EDIT') - edit_bone = obj.data.edit_bones.new("root") - root_bone = edit_bone.name - edit_bone.head = (0.0, 0.0, 0.0) - edit_bone.tail = (0.0, 1.0, 0.0) - edit_bone.roll = 0.0 - edit_bone.layers = ROOT_LAYERS - bpy.ops.object.mode_set(mode='OBJECT') - - # key: bone name - # value: {type:definition, ...} - # where type is the submodule name - leg, arm etc - # and definition is a list of bone names - bone_definitions = {} - - # key: bone name - # value: [functions, ...] - # each function is from the module. eg leg.ik, arm.main - bone_typeinfos = {} - - # key: bone name - # value: [new_bone_name, ...] - # where each bone with a 'type' stores a list of bones that it created - # ...needed so we can override the root parent - bone_genesis = {} - - - # inspect all bones and assign their definitions before modifying - for pbone in obj.pose.bones: - bone_name = pbone.name - bone_type = pbone.get("type", "") - if bone_type: - bone_type_list = [bt for bt in bone_type.replace(",", " ").split()] - - # not essential but means running autorig again wont do anything - del pbone["type"] - else: - bone_type_list = [] - - for bone_type in bone_type_list: - type_name, submod, type_func = submodule_func_from_type(bone_type) - reload(submod) - - bone_def_dict = bone_definitions.setdefault(bone_name, {}) - - # Only calculate bone definitions once - if type_name not in bone_def_dict: - bone_def_dict[type_name] = submod.metarig_definition(obj, bone_name) - - bone_typeinfo = bone_typeinfos.setdefault(bone_name, []) - bone_typeinfo.append((type_name, type_func)) - - - # sort bones, not needed but gives more pradictable execution which may be useful in rare cases - bones_sorted = obj.pose.bones.values() - bones_sorted.sort(key=lambda pbone: pbone.name) # first sort by names - bones_sorted.sort(key=lambda pbone: len(pbone.parent_recursive)) # parents before children - - # now we have all the info about bones we can start operating on them - # for pbone in obj.pose.bones: - for pbone in bones_sorted: - bone_name = pbone.name - print(bone_name) - if bone_name not in bone_typeinfos: - continue - - bone_def_dict = bone_definitions[bone_name] - - # Only blend results from the same submodule, eg. - # leg.ik and arm.fk could not be blended. - results = OrderedDict() - - bone_names_pre = {bone.name for bone in arm.bones} - - for type_name, type_func in bone_typeinfos[bone_name]: - print(" " + type_name) - # this bones definition of the current typeinfo - definition = bone_def_dict[type_name] - options = get_bone_type_options(pbone, type_name) - - bpy.ops.object.mode_set(mode='EDIT') - ret = type_func(obj, definition, base_names, options) - bpy.ops.object.mode_set(mode='OBJECT') - - if ret: - result_submod = results.setdefault(type_name, []) - - if result_submod and len(result_submod[-1]) != len(ret): - raise RigifyError("bone lists not compatible: %s, %s" % (result_submod[-1], ret)) - - result_submod.append(ret) - - for result_submod in results.values(): - # blend 2 chains - definition = bone_def_dict[type_name] - - if len(result_submod) == 2: - blend_bone_list(obj, definition, result_submod[0], result_submod[1], target_bone=bone_name) - - - bone_names_post = {bone.name for bone in arm.bones} - - # Store which bones were created from this one - bone_genesis[bone_name] = list(bone_names_post - bone_names_pre) - - # need a reverse lookup on bone_genesis so as to know immediately - # where a bone comes from - bone_genesis_reverse = {} - ''' - for bone_name, bone_children in bone_genesis.items(): - for bone_child_name in bone_children: - bone_genesis_reverse[bone_child_name] = bone_name - ''' - - - if root_bone: - # assign all new parentless bones to this - - bpy.ops.object.mode_set(mode='EDIT') - root_ebone = arm.edit_bones[root_bone] - for ebone in arm.edit_bones: - bone_name = ebone.name - if ebone.parent is None: - ebone.parent = root_ebone - ''' - if ebone.parent is None and bone_name not in base_names: - # check for override - bone_creator = bone_genesis_reverse[bone_name] - pbone_creator = obj.pose.bones[bone_creator] - root_bone_override = pbone_creator.get("root", "") - - if root_bone_override: - root_ebone_tmp = arm.edit_bones[root_bone_override] - else: - root_ebone_tmp = root_ebone - - ebone.use_connect = False - ebone.parent = root_ebone_tmp - ''' - - bpy.ops.object.mode_set(mode='OBJECT') - - - if META_DEF: - # for pbone in obj_def.pose.bones: - for bone_name, bone_name_new in base_names.items(): - #pbone_from = bone_name - pbone = obj_def.pose.bones[bone_name_new] - - con = pbone.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = bone_name - - if not pbone.bone.use_connect: - con = pbone.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = bone_name - - # would be 'REST' from when copied - obj_def.data.pose_position = 'POSE' - - # todo - make a more generic system? - layer_tot = [False] * 32 - layer_last = layer_tot[:] - layer_last[31] = True - layer_second_last = layer_tot[:] - layer_second_last[30] = True - - for bone_name, bone in arm.bones.items(): - bone.use_deform = False # Non DEF bones shouldn't deform - if bone_name.startswith(ORG_PREFIX): - bone.layers = ORG_LAYERS - elif bone_name.startswith(MCH_PREFIX): # XXX fixme - bone.layers = MCH_LAYERS - elif bone_name.startswith(DEF_PREFIX): # XXX fixme - bone.layers = DEF_LAYERS - bone.use_deform = True - else: - # Assign bone appearance if there is a widget for it - obj.pose.bones[bone_name].custom_shape = context.scene.objects.get(WGT_PREFIX + bone_name) - - layer_tot[:] = [max(lay) for lay in zip(layer_tot, bone.layers)] - - # Only for demo'ing - layer_show = [a and not (b or c or d) for a, b, c, d in zip(layer_tot, ORG_LAYERS, MCH_LAYERS, DEF_LAYERS)] - arm.layers = layer_show - - - # obj.hide = True - obj.data.show_axes = False - - bpy.ops.object.mode_set(mode=mode_orig) - obj_orig.data.pose_position = rest_backup - obj.data.pose_position = 'POSE' - obj_orig.data.pose_position = 'POSE' - context.user_preferences.edit.use_global_undo = use_global_undo - - print("Done.\n") - - return obj - - -def generate_test(context, metarig_type="", GENERATE_FINAL=True): - import os - new_objects = [] - - scene = context.scene - - def create_empty_armature(name): - armature = bpy.data.armatures.new(name) - obj_new = bpy.data.objects.new(name, armature) - scene.objects.link(obj_new) - scene.objects.active = obj_new - for obj in scene.objects: - obj.select = False - obj_new.select = True - - for module_name in get_submodule_types(): - if (metarig_type and module_name != metarig_type): - continue - - # XXX workaround!, problem with updating the pose matrix. - if module_name == "delta": - continue - - type_name, submodule, func = submodule_func_from_type(module_name) - - metarig_template = getattr(submodule, "metarig_template", None) - - if metarig_template: - create_empty_armature("meta_" + module_name) # sets active - metarig_template() - obj = context.active_object - obj.location = scene.cursor_location - - if GENERATE_FINAL: - obj_new = generate_rig(context, obj) - new_objects.append((obj, obj_new)) - else: - new_objects.append((obj, None)) - else: - print("note: rig type '%s' has no metarig_template(), can't test this" % module_name) - - return new_objects - - -def generate_test_all(context, GRAPH=False): - import rigify - import rigify_utils - import graphviz_export - import os - reload(rigify) - reload(rigify_utils) - reload(graphviz_export) - - new_objects = rigify.generate_test(context) - - if GRAPH: - if(bpy.data.filepath): - base_name = os.path.splitext(bpy.data.filepath)[0] - else: - import tempfile - base_name = tempfile.mktemp(prefix=bpy.app.tempdir) - for obj, obj_new in new_objects: - for obj in (obj, obj_new): - fn = base_name + "-" + bpy.path.clean_name(obj.name) - - path_dot = fn + ".dot" - path_png = fn + ".png" - saved = graphviz_export.graph_armature(obj, path_dot, CONSTRAINTS=True, DRIVERS=True) - - #if saved: - # os.system("dot -Tpng %s > %s; eog %s" % (path_dot, path_png, path_png)) - - i = 0 - for obj, obj_new in new_objects: - obj.data.draw_type = 'STICK' - obj.location[1] += i - obj_new.location[1] += i - obj_new.select = False - obj.select = True - i += 4 - - -if __name__ == "__main__": - generate_rig(bpy.context, bpy.context.active_object) diff --git a/release/scripts/modules/rigify/arm_biped.py b/release/scripts/modules/rigify/arm_biped.py deleted file mode 100644 index ac878c3c076..00000000000 --- a/release/scripts/modules/rigify/arm_biped.py +++ /dev/null @@ -1,396 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from math import radians, pi -from rigify import RigifyError, ORG_PREFIX -from rigify_utils import bone_class_instance, copy_bone_simple, add_pole_target_bone, add_stretch_to, blend_bone_list, get_side_name, get_base_name -from rna_prop_ui import rna_idprop_ui_prop_get -from mathutils import Vector - -METARIG_NAMES = "shoulder", "arm", "forearm", "hand" - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('shoulder') - bone.head[:] = 0.0000, -0.0425, 0.0000 - bone.tail[:] = 0.0942, -0.0075, 0.0333 - bone.roll = -0.2227 - bone.use_connect = False - bone = arm.edit_bones.new('upper_arm') - bone.head[:] = 0.1066, -0.0076, -0.0010 - bone.tail[:] = 0.2855, 0.0206, -0.0104 - bone.roll = 1.6152 - bone.use_connect = False - bone.parent = arm.edit_bones['shoulder'] - bone = arm.edit_bones.new('forearm') - bone.head[:] = 0.2855, 0.0206, -0.0104 - bone.tail[:] = 0.4550, -0.0076, -0.0023 - bone.roll = 1.5153 - bone.use_connect = True - bone.parent = arm.edit_bones['upper_arm'] - bone = arm.edit_bones.new('hand') - bone.head[:] = 0.4550, -0.0076, -0.0023 - bone.tail[:] = 0.5423, -0.0146, -0.0131 - bone.roll = -3.0083 - bone.use_connect = True - bone.parent = arm.edit_bones['forearm'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['upper_arm'] - pbone['type'] = 'arm_biped' - - -def metarig_definition(obj, orig_bone_name): - mt = bone_class_instance(obj, METARIG_NAMES) # meta - mt.arm = orig_bone_name - mt.update() - - mt.shoulder_p = mt.arm_p.parent - - if not mt.shoulder_p: - raise RigifyError("could not find '%s' parent, skipping:" % orig_bone_name) - - mt.shoulder = mt.shoulder_p.name - - # We could have some bones attached, find the bone that has this as its 2nd parent - hands = [] - for pbone in obj.pose.bones: - index = pbone.parent_index(mt.arm_p) - if index == 2 and pbone.bone.use_connect and pbone.bone.parent.use_connect: - hands.append(pbone) - - if len(hands) != 1: - raise RigifyError("Found %s possible hands attached to this arm, expected 1 from bone: %s" % ([pbone.name for pbone in hands], orig_bone_name)) - - # first add the 2 new bones - mt.hand_p = hands[0] - mt.hand = mt.hand_p.name - - mt.forearm_p = mt.hand_p.parent - mt.forearm = mt.forearm_p.name - - return mt.names() - - -def ik(obj, definitions, base_names, options): - - arm = obj.data - - mt = bone_class_instance(obj, METARIG_NAMES) - mt.shoulder, mt.arm, mt.forearm, mt.hand = definitions - mt.update() - - ik = bone_class_instance(obj, ["pole", "pole_vis", "hand_vis"]) - ik_chain = mt.copy(to_fmt="MCH-%s_ik", base_names=base_names, exclude_attrs=["shoulder"]) - - # IK needs no parent_index - ik_chain.hand_e.use_connect = False - ik_chain.hand_e.parent = None - ik_chain.hand_e.use_local_location = False - ik_chain.rename("hand", get_base_name(base_names[mt.hand]) + "_ik" + get_side_name(mt.hand)) - - ik_chain.arm_e.use_connect = False - ik_chain.arm_e.parent = mt.shoulder_e - - # Add the bone used for the arms poll target - #ik.pole = add_pole_target_bone(obj, mt.forearm, get_base_name(base_names[mt.forearm]) + "_target" + get_side_name(mt.forearm), mode='ZAVERAGE') - ik.pole = add_pole_target_bone(obj, mt.forearm, "elbow_target" + get_side_name(mt.forearm), mode='ZAVERAGE') - - ik.update() - ik.pole_e.use_local_location = False - - # option: elbow_parent - elbow_parent_name = options.get("elbow_parent", "") - - if elbow_parent_name: - try: - elbow_parent_e = arm.edit_bones[ORG_PREFIX + elbow_parent_name] - except: - # TODO, old/new parent mapping - raise RigifyError("parent bone from property 'arm_biped_generic.elbow_parent' not found '%s'" % elbow_parent_name) - ik.pole_e.parent = elbow_parent_e - - # update bones after this! - ik.hand_vis = add_stretch_to(obj, mt.hand, ik_chain.hand, "VIS-%s_ik" % base_names[mt.hand]) - ik.pole_vis = add_stretch_to(obj, mt.forearm, ik.pole, "VIS-%s_ik" % base_names[mt.forearm]) - - ik.update() - ik.hand_vis_e.hide_select = True - ik.pole_vis_e.hide_select = True - - bpy.ops.object.mode_set(mode='OBJECT') - - mt.update() - ik.update() - ik_chain.update() - - # Set IK dof - ik_chain.forearm_p.lock_ik_x = False - ik_chain.forearm_p.lock_ik_y = True - ik_chain.forearm_p.lock_ik_z = True - - con = ik_chain.forearm_p.constraints.new('IK') - con.target = obj - con.subtarget = ik_chain.hand - con.pole_target = obj - con.pole_subtarget = ik.pole - - con.use_tail = True - con.use_stretch = True - con.use_target = True - con.use_rotation = False - con.chain_count = 2 - con.pole_angle = -pi/2 - - # last step setup layers - if "ik_layer" in options: - layer = [n==options["ik_layer"] for n in range(0,32)] - else: - layer = list(mt.arm_b.layers) - ik_chain.hand_b.layers = layer - ik.hand_vis_b.layers = layer - ik.pole_b.layers = layer - ik.pole_vis_b.layers = layer - - bpy.ops.object.mode_set(mode='EDIT') - # don't blend the shoulder - return [None] + ik_chain.names() - - -def fk(obj, definitions, base_names, options): - - arm = obj.data - - mt = bone_class_instance(obj, METARIG_NAMES) - mt.shoulder, mt.arm, mt.forearm, mt.hand = definitions - mt.update() - - ex = bone_class_instance(obj, ["socket", "hand_delta"]) - fk_chain = mt.copy(base_names=base_names) - - # shoulder is used as a hinge - fk_chain.rename("shoulder", "MCH-%s_hinge" % base_names[mt.arm]) - fk_chain.shoulder_e.translate(Vector((0.0, fk_chain.shoulder_e.length / 2, 0.0))) - - # upper arm constrains to this. - ex.socket_e = copy_bone_simple(arm, mt.arm, "MCH-%s_socket" % base_names[mt.arm]) - ex.socket = ex.socket_e.name - ex.socket_e.use_connect = False - ex.socket_e.parent = mt.shoulder_e - ex.socket_e.length *= 0.5 - - # insert the 'MCH-delta_hand', between the forearm and the hand - # copies forarm rotation - ex.hand_delta_e = copy_bone_simple(arm, fk_chain.hand, "MCH-delta_%s" % base_names[mt.hand], parent=True) - ex.hand_delta = ex.hand_delta_e.name - ex.hand_delta_e.length *= 0.5 - ex.hand_delta_e.use_connect = False - if "hand_roll" in options: - ex.hand_delta_e.roll += radians(options["hand_roll"]) - - fk_chain.hand_e.use_connect = False - fk_chain.hand_e.parent = ex.hand_delta_e - - bpy.ops.object.mode_set(mode='OBJECT') - - mt.update() - ex.update() - fk_chain.update() - - # Set rotation modes and axis locks - fk_chain.forearm_p.rotation_mode = 'XYZ' - fk_chain.forearm_p.lock_rotation = (False, True, True) - fk_chain.hand_p.rotation_mode = 'ZXY' - fk_chain.arm_p.lock_location = True, True, True - - con = fk_chain.arm_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = ex.socket - - fk_chain.hand_p.lock_location = True, True, True - con = ex.hand_delta_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = fk_chain.forearm - - def hinge_setup(): - # Hinge constraint & driver - con = fk_chain.shoulder_p.constraints.new('COPY_ROTATION') - con.name = "hinge" - con.target = obj - con.subtarget = mt.shoulder - driver_fcurve = con.driver_add("influence") - driver = driver_fcurve.driver - - - controller_path = fk_chain.arm_p.path_from_id() - # add custom prop - fk_chain.arm_p["hinge"] = 0.0 - prop = rna_idprop_ui_prop_get(fk_chain.arm_p, "hinge", create=True) - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - - # ***** - driver = driver_fcurve.driver - driver.type = 'AVERAGE' - - var = driver.variables.new() - var.name = "hinge" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = controller_path + '["hinge"]' - - mod = driver_fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - hinge_setup() - - # last step setup layers - if "fk_layer" in options: - layer = [n==options["fk_layer"] for n in range(0,32)] - else: - layer = list(mt.arm_b.layers) - fk_chain.arm_b.layers = layer - fk_chain.forearm_b.layers = layer - fk_chain.hand_b.layers = layer - - # Forearm was getting wrong roll somehow. Hack to fix that. - bpy.ops.object.mode_set(mode='EDIT') - fk_chain.update() - mt.update() - fk_chain.forearm_e.roll = mt.forearm_e.roll - bpy.ops.object.mode_set(mode='OBJECT') - - bpy.ops.object.mode_set(mode='EDIT') - return None, fk_chain.arm, fk_chain.forearm, fk_chain.hand - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - # Create upper arm bones: two bones, each half of the upper arm. - uarm1 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.01" % base_names[definitions[1]], parent=True) - uarm2 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.02" % base_names[definitions[1]], parent=True) - uarm1.use_connect = False - uarm2.use_connect = False - uarm2.parent = uarm1 - center = uarm1.center - uarm1.tail = center - uarm2.head = center - - # Create forearm bones: two bones, each half of the forearm. - farm1 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.01" % base_names[definitions[2]], parent=True) - farm2 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.02" % base_names[definitions[2]], parent=True) - farm1.use_connect = False - farm2.use_connect = False - farm2.parent = farm1 - center = farm1.center - farm1.tail = center - farm2.head = center - - # Create twist bone - twist = copy_bone_simple(obj.data, definitions[2], "MCH-arm_twist") - twist.use_connect = False - twist.parent = obj.data.edit_bones[definitions[3]] - twist.length /= 2 - - # Create hand bone - hand = copy_bone_simple(obj.data, definitions[3], "DEF-%s" % base_names[definitions[3]], parent=True) - - # Store names before leaving edit mode - uarm1_name = uarm1.name - uarm2_name = uarm2.name - farm1_name = farm1.name - farm2_name = farm2.name - twist_name = twist.name - hand_name = hand.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bones - uarm1 = obj.pose.bones[uarm1_name] - uarm2 = obj.pose.bones[uarm2_name] - farm1 = obj.pose.bones[farm1_name] - farm2 = obj.pose.bones[farm2_name] - twist = obj.pose.bones[twist_name] - hand = obj.pose.bones[hand_name] - - # Upper arm constraints - con = uarm1.constraints.new('DAMPED_TRACK') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[2] - - con = uarm1.constraints.new('COPY_SCALE') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[1] - - con = uarm2.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[1] - - # Forearm constraints - con = farm1.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[2] - - con = farm1.constraints.new('COPY_SCALE') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[2] - - con = farm2.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = twist.name - - con = farm2.constraints.new('DAMPED_TRACK') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[3] - - # Hand constraint - con = hand.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[3] - - bpy.ops.object.mode_set(mode='EDIT') - return (uarm1_name, uarm2_name, farm1_name, farm2_name, hand_name) - - -def main(obj, bone_definition, base_names, options): - bones_fk = fk(obj, bone_definition, base_names, options) - bones_ik = ik(obj, bone_definition, base_names, options) - bones_deform = deform(obj, bone_definition, base_names, options) - - bpy.ops.object.mode_set(mode='OBJECT') - blend_bone_list(obj, bone_definition, bones_fk, bones_ik, target_bone=bones_ik[3], target_prop="ik", blend_default=0.0) diff --git a/release/scripts/modules/rigify/copy.py b/release/scripts/modules/rigify/copy.py deleted file mode 100644 index c051e5bb7f6..00000000000 --- a/release/scripts/modules/rigify/copy.py +++ /dev/null @@ -1,112 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify_utils import bone_class_instance, copy_bone_simple - -METARIG_NAMES = ("cpy",) - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('Bone') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0000, 0.0000, 1.0000 - bone.roll = 0.0000 - bone.use_connect = False - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['Bone'] - pbone['type'] = 'copy' - - -def metarig_definition(obj, orig_bone_name): - return (orig_bone_name,) - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - # Create deform bone. - bone = copy_bone_simple(obj.data, definitions[0], "DEF-%s" % base_names[definitions[0]], parent=True) - - # Store name before leaving edit mode - bone_name = bone.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bone - bone = obj.pose.bones[bone_name] - - # Constrain to the original bone - con = bone.constraints.new('COPY_TRANSFORMS') - con.name = "copy_loc" - con.target = obj - con.subtarget = definitions[0] - - return (bone_name,) - - -def control(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - arm = obj.data - mt = bone_class_instance(obj, METARIG_NAMES) - mt.cpy = definitions[0] - mt.update() - cp = bone_class_instance(obj, ["cpy"]) - cp.cpy_e = copy_bone_simple(arm, mt.cpy, base_names[mt.cpy], parent=True) - cp.cpy = cp.cpy_e.name - - bpy.ops.object.mode_set(mode='OBJECT') - - cp.update() - mt.update() - - con = mt.cpy_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = cp.cpy - - - # Rotation mode and axis locks - cp.cpy_p.rotation_mode = mt.cpy_p.rotation_mode - cp.cpy_p.lock_location = tuple(mt.cpy_p.lock_location) - cp.cpy_p.lock_rotations_4d = mt.cpy_p.lock_rotations_4d - cp.cpy_p.lock_rotation = tuple(mt.cpy_p.lock_rotation) - cp.cpy_p.lock_rotation_w = mt.cpy_p.lock_rotation_w - cp.cpy_p.lock_scale = tuple(mt.cpy_p.lock_scale) - - # Layers - cp.cpy_b.layers = list(mt.cpy_b.layers) - - return (mt.cpy,) - - -def main(obj, bone_definition, base_names, options): - # Create control bone - cpy = control(obj, bone_definition, base_names, options)[0] - # Create deform bone - deform(obj, bone_definition, base_names, options) - - return (cpy,) diff --git a/release/scripts/modules/rigify/delta.py b/release/scripts/modules/rigify/delta.py deleted file mode 100644 index d0b4fbccce9..00000000000 --- a/release/scripts/modules/rigify/delta.py +++ /dev/null @@ -1,162 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError - -# not used, defined for completeness -METARIG_NAMES = tuple() - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('bonesker') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = -0.0000, 0.7382, 0.1895 - bone.roll = -0.0000 - bone.use_connect = False - bone = arm.edit_bones.new('delta') - bone.head[:] = -0.0497, 0.8414, 0.3530 - bone.tail[:] = -0.2511, 1.1588, 0.9653 - bone.roll = 2.6044 - bone.use_connect = False - bone.parent = arm.edit_bones['bonesker'] - bone = arm.edit_bones.new('boney') - bone.head[:] = 0.7940, 2.5592, 0.4134 - bone.tail[:] = 0.7940, 3.3975, 0.4890 - bone.roll = 3.1416 - bone.use_connect = False - bone.parent = arm.edit_bones['delta'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['delta'] - pbone['type'] = 'delta' - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the head, its parent is the body, - # its only child the first of a chain with matching basenames. - eg. - body -> head -> neck_01 -> neck_02 -> neck_03.... etc - ''' - arm = obj.data - delta = arm.bones[orig_bone_name] - children = delta.children - - if len(children) != 1: - raise RigifyError("only 1 child supported for delta on bone '%s'" % delta.name) - - if delta.use_connect: - raise RigifyError("bone cannot be connected to its parent '%s'" % delta.name) - - bone_definition = [delta.name, children[0].name] - - return bone_definition - - -def main(obj, bone_definition, base_names, options): - ''' - Use this bone to define a delta thats applied to its child in pose mode. - ''' - mode_orig = obj.mode - bpy.ops.object.mode_set(mode='OBJECT') - - delta_name, child_name = bone_definition - - delta_pbone = obj.pose.bones[delta_name] - - arm = obj.data - child_pbone = obj.pose.bones[child_name] - - delta_phead = delta_pbone.head.copy() - delta_ptail = delta_pbone.tail.copy() - delta_pmatrix = delta_pbone.matrix.copy() - - child_phead = child_pbone.head.copy() - child_ptail = child_pbone.tail.copy() - child_pmatrix = child_pbone.matrix.copy() - - - children = delta_pbone.children - - bpy.ops.object.mode_set(mode='EDIT') - - delta_ebone = arm.edit_bones[delta_name] - child_ebone = arm.edit_bones[child_name] - - delta_head = delta_ebone.head.copy() - delta_tail = delta_ebone.tail.copy() - - child_head = child_ebone.head.copy() - child_tail = child_ebone.tail.copy() - - #arm.edit_bones.remove(delta_ebone) - #del delta_ebone # cant use this - del child_pbone - - bpy.ops.object.mode_set(mode='OBJECT') - - - # Move the child bone to the deltas location - obj.animation_data_create() - delta_pbone = obj.pose.bones[delta_name] - # child_pbone = obj.pose.bones[child_name] - - # ------------------- drivers - - delta_pbone.rotation_mode = 'XYZ' - - rot = delta_pmatrix.invert().rotation_part() * child_pmatrix.rotation_part() - rot = rot.invert().to_euler() - - fcurve_drivers = delta_pbone.driver_add("rotation_euler", -1) - for i, fcurve_driver in enumerate(fcurve_drivers): - driver = fcurve_driver.driver - driver.type = 'AVERAGE' - #mod = fcurve_driver.modifiers.new('GENERATOR') - mod = fcurve_driver.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = rot[i] - mod.coefficients[1] = 0.0 - - # tricky, find the transform to drive the bone to this location. - delta_head_offset = child_pmatrix.rotation_part() * (delta_phead - child_phead) - - fcurve_drivers = delta_pbone.driver_add("location", -1) - for i, fcurve_driver in enumerate(fcurve_drivers): - driver = fcurve_driver.driver - driver.type = 'AVERAGE' - #mod = fcurve_driver.modifiers.new('GENERATOR') - mod = fcurve_driver.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = delta_head_offset[i] - mod.coefficients[1] = 0.0 - - - bpy.ops.object.mode_set(mode='EDIT') - - bpy.ops.object.mode_set(mode=mode_orig) - - # no blendeing - return None diff --git a/release/scripts/modules/rigify/eye_balls.py b/release/scripts/modules/rigify/eye_balls.py deleted file mode 100644 index 127ee87123f..00000000000 --- a/release/scripts/modules/rigify/eye_balls.py +++ /dev/null @@ -1,405 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rna_prop_ui import rna_idprop_ui_prop_get -from mathutils import Vector -from rigify import RigifyError -from rigify_utils import copy_bone_simple - -#METARIG_NAMES = ("cpy",) -RIG_TYPE = "eye_balls" - -def addget_shape_key(obj, name="Key"): - """ Fetches a shape key, or creates it if it doesn't exist - """ - # Create a shapekey set if it doesn't already exist - if obj.data.shape_keys is None: - shape = obj.add_shape_key(name="Basis", from_mix=False) - obj.active_shape_key_index = 0 - - # Get the shapekey, or create it if it doesn't already exist - if name in obj.data.shape_keys.keys: - shape_key = obj.data.shape_keys.keys[name] - else: - shape_key = obj.add_shape_key(name=name, from_mix=False) - - return shape_key - - -def addget_shape_key_driver(obj, name="Key"): - """ Fetches the driver for the shape key, or creates it if it doesn't - already exist. - """ - driver_path = 'keys["' + name + '"].value' - fcurve = None - driver = None - new = False - if obj.data.shape_keys.animation_data is not None: - for driver_s in obj.data.shape_keys.animation_data.drivers: - if driver_s.data_path == driver_path: - fcurve = driver_s - if fcurve is None: - fcurve = obj.data.shape_keys.keys[name].driver_add("value") - fcurve.driver.type = 'AVERAGE' - new = True - - return fcurve, new - - -def create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression): - """ Creates/gets a shape key and sets up a driver for it. - - obj = armature object - bone = driving bone name - meshes = list of meshes to create the shapekey/driver on - shape_name = name of the shape key - var_name = name of the driving variable - var_path = path to the property on the bone to drive with - expression = python expression for the driver - """ - pb = obj.pose.bones - bpy.ops.object.mode_set(mode='OBJECT') - - for mesh_name in meshes: - mesh_obj = bpy.data.objects[mesh_name] - - # Add/get the shape key - shape = addget_shape_key(mesh_obj, name=shape_name) - - # Add/get the shape key driver - fcurve, a = addget_shape_key_driver(mesh_obj, name=shape_name) - - # Set up the driver - driver = fcurve.driver - driver.type = 'SCRIPTED' - driver.expression = expression - - # Get the variable, or create it if it doesn't already exist - if var_name in driver.variables: - var = driver.variables[var_name] - else: - var = driver.variables.new() - var.name = var_name - - # Set up the variable - var.type = "SINGLE_PROP" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = 'pose.bones["' + bone + '"]' + var_path - - -def mark_actions(): - for action in bpy.data.actions: - action.tag = True - -def get_unmarked_action(): - for action in bpy.data.actions: - if action.tag != True: - return action - return None - -def add_action(name=None): - mark_actions() - bpy.ops.action.new() - action = get_unmarked_action() - if name is not None: - action.name = name - return action - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('Bone') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0000, 0.0000, 1.0000 - bone.roll = 0.0000 - bone.use_connect = False - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['Bone'] - pbone['type'] = 'copy' - - -def metarig_definition(obj, orig_bone_name): - bone = obj.data.bones[orig_bone_name] - chain = [] - - try: - chain += [bone.parent.name, bone.name] - except AttributeError: - raise RigifyError("'%s' rig type requires a parent (bone: %s)" % (RIG_TYPE, orig_bone_name)) - - return chain - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - eb = obj.data.edit_bones - pb = obj.pose.bones - - # Get list of eyes - if "eyes" in options: - eye_base_names = options["eyes"].replace(" ", "").split(",") - else: - eye_base_names = [] - - # Get their ORG- names - eyes = [] - for name in eye_base_names: - eyes += ["ORG-"+name] - - # Duplicate the eyes to make deformation bones - def_eyes = [] # def/org pairs - for eye in eyes: - def_eyes += [(copy_bone_simple(obj.data, eye, "DEF-"+base_names[eye], parent=True).name, eye)] - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Constraints - for eye in def_eyes: - con = pb[eye[0]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = eye[1] - - return (None,) - - - - -def control(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - head = definitions[0] - eye_target = definitions[1] - - # Get list of pupil mesh objects - if "mesh" in options: - pupil_meshes = options["mesh"].replace(" ", "").split(",") - else: - pupil_meshes = [] - - # Get list of eyes - if "eyes" in options: - eye_base_names = options["eyes"].replace(" ", "").split(",") - else: - eye_base_names = [] - - # Get their ORG- names - eyes = [] - for name in eye_base_names: - eyes += ["ORG-"+name] - - # Get the average position of the eyes - center = Vector((0, 0, 0)) - for eye in eyes: - center += eb[eye].head - if len(eyes) != 0: - center /= len(eyes) - - # Get the average length of the eyes - length = 0.0 - for eye in eyes: - length += eb[eye].length - if len(eyes) == 0: - length = 1.0 - else: - length /= len(eyes) - - - # Make the mind's eye - minds_eye = copy_bone_simple(obj.data, eye_target, "MCH-"+base_names[eye_target]+".mind", parent=True).name - eb[minds_eye].head = center - eb[minds_eye].tail = eb[eye_target].head - eb[minds_eye].roll = 0.0 - eb[minds_eye].length = length - - # Create org/copy/control eye sets - eye_sets = [] - for eye in eyes: - copy = copy_bone_simple(obj.data, minds_eye, "MCH-"+base_names[eye]+".cpy", parent=True).name - eb[copy].translate(eb[eye].head - eb[copy].head) - eb[copy].parent = eb[eye].parent - - control = copy_bone_simple(obj.data, eye, base_names[eye], parent=True).name - eb[control].parent = eb[copy] - - eye_sets += [(eye, copy, control)] - - # Bones for parent/free switch for eye target - target_ctrl = copy_bone_simple(obj.data, eye_target, base_names[eye_target], parent=True).name - parent = copy_bone_simple(obj.data, head, "MCH-eye_target_parent", parent=False).name - - eb[target_ctrl].parent = eb[parent] - - - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Axis locks - pb[target_ctrl].lock_scale = False, True, True - - # Add eye_spread action if it doesn't already exist - action_name = "eye_spread" - if action_name in bpy.data.actions: - spread_action = bpy.data.actions[action_name] - else: - spread_action = add_action(name=action_name) - - # Add free property - prop_name = "free" - prop = rna_idprop_ui_prop_get(pb[target_ctrl], prop_name, create=True) - pb[target_ctrl][prop_name] = 0.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["min"] = 0.0 - prop["max"] = 1.0 - - free_driver_path = pb[target_ctrl].path_from_id() + '["free"]' - - # Constraints - # Mind's eye tracks eye target control - con = pb[minds_eye].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = target_ctrl - - # Parent copies transforms of head - con = pb[parent].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = head - - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - mod = fcurve.modifiers[0] - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - var = driver.variables.new() - var.name = "free" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = free_driver_path - - # Eye set's constraints - for eye in eye_sets: - # Org copies transforms of control - con = pb[eye[0]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = eye[2] - - # Copy copies rotation of mind's eye - con = pb[eye[1]].constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = minds_eye - - # Control gets action constraint for eye spread - con = pb[eye[2]].constraints.new('ACTION') - con.target = obj - con.subtarget = target_ctrl - con.action = spread_action - con.transform_channel = 'SCALE_X' - con.frame_start = -20 - con.frame_end = 20 - con.min = 0.0 - con.max = 2.0 - con.target_space = 'LOCAL' - - - # Get/create the shape keys and drivers for pupil dilation - shape_names = ["PUPILS-dilate_wide", "PUPILS-dilate_narrow"] - slider_name = "pupil_dilate" - - # Set up the custom property on the bone - prop = rna_idprop_ui_prop_get(pb[target_ctrl], slider_name, create=True) - pb[target_ctrl][slider_name] = 0.0 - prop["min"] = 0.0 - prop["max"] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - if len(shape_names) > 1: - prop["min"] = -1.0 - prop["soft_min"] = -1.0 - - # Add the shape drivers - # Positive - if shape_names[0] != "": - # Set up the variables for creating the shape key driver - shape_name = shape_names[0] - var_name = slider_name.replace(".", "_").replace("-", "_") - var_path = '["' + slider_name + '"]' - if slider_name + "_fac" in options: - fac = options[slider_name + "_fac"] - else: - fac = 1.0 - expression = var_name + " * " + str(fac) - # Create the shape key driver - create_shape_and_driver(obj, target_ctrl, pupil_meshes, shape_name, var_name, var_path, expression) - # Negative - if shape_names[0] != "" and len(shape_names) > 1: - # Set up the variables for creating the shape key driver - shape_name = shape_names[1] - var_name = slider_name.replace(".", "_").replace("-", "_") - var_path = '["' + slider_name + '"]' - if slider_name + "_fac" in options: - fac = options[slider_name + "_fac"] - else: - fac = 1.0 - expression = var_name + " * " + str(fac) + " * -1" - # Create the shape key driver - create_shape_and_driver(obj, target_ctrl, pupil_meshes, shape_name, var_name, var_path, expression) - - - - # Set layers - #layer = list(bb[definitions[2]].layers) - #bb[lid1].layers = layer - #bb[lid2].layers = layer - #bb[lid3].layers = layer - #bb[lid4].layers = layer - #bb[lid5].layers = layer - #bb[lid6].layers = layer - #bb[lid7].layers = layer - #bb[lid8].layers = layer - - - return (None,) - - - - -def main(obj, bone_definition, base_names, options): - # Create control rig - control(obj, bone_definition, base_names, options) - # Create deform rig - deform(obj, bone_definition, base_names, options) - - return (None,) - diff --git a/release/scripts/modules/rigify/eye_lid.py b/release/scripts/modules/rigify/eye_lid.py deleted file mode 100644 index 3f336e268c6..00000000000 --- a/release/scripts/modules/rigify/eye_lid.py +++ /dev/null @@ -1,687 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rna_prop_ui import rna_idprop_ui_prop_get -from math import acos -from mathutils import Vector -from rigify import RigifyError -from rigify_utils import copy_bone_simple - -#METARIG_NAMES = ("cpy",) -RIG_TYPE = "eye_lid" - -def mark_actions(): - for action in bpy.data.actions: - action.tag = True - -def get_unmarked_action(): - for action in bpy.data.actions: - if action.tag != True: - return action - return None - -def add_action(name=None): - mark_actions() - bpy.ops.action.new() - action = get_unmarked_action() - if name is not None: - action.name = name - return action - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('Bone') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0000, 0.0000, 1.0000 - bone.roll = 0.0000 - bone.use_connect = False - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['Bone'] - pbone['type'] = 'copy' - - -def metarig_definition(obj, orig_bone_name): - bb = obj.data.bones - bone = bb[orig_bone_name] - chain = [] - - try: - chain += [bone.parent.parent.name, bone.parent.name, bone.name] - except AttributeError: - raise RigifyError("'%s' rig type requires a chain of two parents (bone: %s)" % (RIG_TYPE, orig_bone_name)) - - chain += [child.name for child in bone.children_recursive_basename] - - if len(chain) < 10: - raise RigifyError("'%s' rig type requires a chain of 10 bones (bone: %s)" % (RIG_TYPE, orig_bone_name)) - - chain = chain[:10] - - try: - chain += [bb[chain[9]].children[0].name] - chain += [bb[chain[10]].children[0].name] - except IndexError: - raise RigifyError("'%s' rig type requires a chain of 10 bones (bone: %s)" % (RIG_TYPE, orig_bone_name)) - - return chain - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - eb = obj.data.edit_bones - pb = obj.pose.bones - - - # Upper lid MCH - lid1 = make_lid_stretch_bone(obj, "MCH-lid", definitions[2], definitions[3], 1.0) - lid2 = make_lid_stretch_bone(obj, "MCH-lid", definitions[3], definitions[4], 1.0) - lid22 = make_lid_stretch_bone(obj, "MCH-lid", definitions[4], definitions[5], 1.0) - lid33 = make_lid_stretch_bone(obj, "MCH-lid", definitions[4], definitions[3], 1.0) - lid3 = make_lid_stretch_bone(obj, "MCH-lid", definitions[5], definitions[4], 1.0) - lid4 = make_lid_stretch_bone(obj, "MCH-lid", definitions[6], definitions[5], 1.0) - - dlid22 = copy_bone_simple(obj.data, lid22, "MCH-lid", parent=True).name - dlid33 = copy_bone_simple(obj.data, lid33, "MCH-lid", parent=True).name - eb[dlid22].bbone_segments = 8 - eb[dlid33].bbone_segments = 8 - - eb[lid1].parent = eb[definitions[2]] - eb[lid2].parent = eb[definitions[3]] - eb[lid22].parent = eb[definitions[4]] - eb[lid33].parent = eb[definitions[4]] - eb[lid3].parent = eb[definitions[5]] - eb[lid4].parent = eb[definitions[6]] - - # Lower lid MCH - lid5 = make_lid_stretch_bone(obj, "MCH-lid", definitions[6], definitions[7], 1.0) - lid6 = make_lid_stretch_bone(obj, "MCH-lid", definitions[7], definitions[8], 1.0) - lid66 = make_lid_stretch_bone(obj, "MCH-lid", definitions[8], definitions[9], 1.0) - lid77 = make_lid_stretch_bone(obj, "MCH-lid", definitions[8], definitions[7], 1.0) - lid7 = make_lid_stretch_bone(obj, "MCH-lid", definitions[9], definitions[8], 1.0) - lid8 = make_lid_stretch_bone(obj, "MCH-lid", definitions[2], definitions[9], 1.0) - - dlid66 = copy_bone_simple(obj.data, lid66, "MCH-lid", parent=True).name - dlid77 = copy_bone_simple(obj.data, lid77, "MCH-lid", parent=True).name - eb[dlid66].bbone_segments = 8 - eb[dlid77].bbone_segments = 8 - - eb[lid5].parent = eb[definitions[6]] - eb[lid6].parent = eb[definitions[7]] - eb[lid66].parent = eb[definitions[8]] - eb[lid77].parent = eb[definitions[8]] - eb[lid7].parent = eb[definitions[9]] - eb[lid8].parent = eb[definitions[2]] - - # Upper lid DEF - dlid1 = copy_bone_simple(obj.data, lid1, "DEF-" + base_names[definitions[2]], parent=True).name - dlid2 = copy_bone_simple(obj.data, lid2, "DEF-" + base_names[definitions[3]], parent=True).name - dlid3 = copy_bone_simple(obj.data, lid3, "DEF-" + base_names[definitions[4]], parent=True).name - dlid4 = copy_bone_simple(obj.data, lid4, "DEF-" + base_names[definitions[5]], parent=True).name - - eb[dlid2].parent = eb[dlid1] - eb[dlid22].parent = eb[dlid2] - - eb[dlid3].parent = eb[dlid4] - eb[dlid33].parent = eb[dlid3] - - eb[dlid2].use_connect = True - eb[dlid22].use_connect = True - eb[dlid3].use_connect = True - eb[dlid33].use_connect = True - - eb[dlid1].bbone_segments = 8 - eb[dlid2].bbone_segments = 8 - eb[dlid3].bbone_segments = 8 - eb[dlid4].bbone_segments = 8 - - # Lower lid DEF - dlid5 = copy_bone_simple(obj.data, lid5, "DEF-" + base_names[definitions[6]], parent=True).name - dlid6 = copy_bone_simple(obj.data, lid6, "DEF-" + base_names[definitions[7]], parent=True).name - dlid7 = copy_bone_simple(obj.data, lid7, "DEF-" + base_names[definitions[8]], parent=True).name - dlid8 = copy_bone_simple(obj.data, lid8, "DEF-" + base_names[definitions[9]], parent=True).name - - eb[dlid6].parent = eb[dlid5] - eb[dlid66].parent = eb[dlid6] - - eb[dlid7].parent = eb[dlid8] - eb[dlid77].parent = eb[dlid7] - - eb[dlid6].use_connect = True - eb[dlid66].use_connect = True - eb[dlid7].use_connect = True - eb[dlid77].use_connect = True - - eb[dlid5].bbone_segments = 8 - eb[dlid6].bbone_segments = 8 - eb[dlid7].bbone_segments = 8 - eb[dlid8].bbone_segments = 8 - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Constraints - con = pb[dlid1].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid1 - - con = pb[dlid22].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid22 - - con = pb[dlid33].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid33 - - con = pb[dlid2].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid2 - - con = pb[dlid3].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid3 - - con = pb[dlid4].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid4 - - con = pb[dlid5].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid5 - - con = pb[dlid6].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid6 - - con = pb[dlid66].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid66 - - con = pb[dlid77].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid77 - - con = pb[dlid7].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid7 - - con = pb[dlid8].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid8 - - return (None,) - - - - -def control(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - head_e = eb[definitions[0]] - eye_e = eb[definitions[1]] - - - # Make eye "flower" - flo1 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[2]]+".flower", parent=True).name - flo2 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[3]]+".flower", parent=True).name - flo3 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[4]]+".flower", parent=True).name - flo4 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[5]]+".flower", parent=True).name - flo5 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[6]]+".flower", parent=True).name - flo6 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[7]]+".flower", parent=True).name - flo7 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[8]]+".flower", parent=True).name - flo8 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[9]]+".flower", parent=True).name - - eb[flo1].tail = eb[definitions[2]].head - eb[flo2].tail = eb[definitions[3]].head - eb[flo3].tail = eb[definitions[4]].head - eb[flo4].tail = eb[definitions[5]].head - eb[flo5].tail = eb[definitions[6]].head - eb[flo6].tail = eb[definitions[7]].head - eb[flo7].tail = eb[definitions[8]].head - eb[flo8].tail = eb[definitions[9]].head - - - # Make eye lids on tips of flowers - flid1 = copy_bone_simple(obj.data, definitions[2], "MCH-"+base_names[definitions[2]]).name - flid2 = copy_bone_simple(obj.data, definitions[3], "MCH-"+base_names[definitions[3]]).name - flid3 = copy_bone_simple(obj.data, definitions[4], "MCH-"+base_names[definitions[4]]).name - flid4 = copy_bone_simple(obj.data, definitions[5], "MCH-"+base_names[definitions[5]]).name - flid5 = copy_bone_simple(obj.data, definitions[6], "MCH-"+base_names[definitions[6]]).name - flid6 = copy_bone_simple(obj.data, definitions[7], "MCH-"+base_names[definitions[7]]).name - flid7 = copy_bone_simple(obj.data, definitions[8], "MCH-"+base_names[definitions[8]]).name - flid8 = copy_bone_simple(obj.data, definitions[9], "MCH-"+base_names[definitions[9]]).name - - eb[flid1].parent = eb[flo1] - eb[flid2].parent = eb[flo2] - eb[flid3].parent = eb[flo3] - eb[flid4].parent = eb[flo4] - eb[flid5].parent = eb[flo5] - eb[flid6].parent = eb[flo6] - eb[flid7].parent = eb[flo7] - eb[flid8].parent = eb[flo8] - - - # Make eye lid controls - lid1 = copy_bone_simple(obj.data, definitions[2], base_names[definitions[2]]).name - lid2 = copy_bone_simple(obj.data, definitions[3], base_names[definitions[3]]).name - lid3 = copy_bone_simple(obj.data, definitions[4], base_names[definitions[4]]).name - lid4 = copy_bone_simple(obj.data, definitions[5], base_names[definitions[5]]).name - lid5 = copy_bone_simple(obj.data, definitions[6], base_names[definitions[6]]).name - lid6 = copy_bone_simple(obj.data, definitions[7], base_names[definitions[7]]).name - lid7 = copy_bone_simple(obj.data, definitions[8], base_names[definitions[8]]).name - lid8 = copy_bone_simple(obj.data, definitions[9], base_names[definitions[9]]).name - - size = eb[lid1].length - size_y = Vector(0.0, size, 0.0) - eb[lid1].tail = eb[lid1].head + size_y - eb[lid2].tail = eb[lid2].head + size_y - eb[lid3].tail = eb[lid3].head + size_y - eb[lid4].tail = eb[lid4].head + size_y - eb[lid5].tail = eb[lid5].head + size_y - eb[lid6].tail = eb[lid6].head + size_y - eb[lid7].tail = eb[lid7].head + size_y - eb[lid8].tail = eb[lid8].head + size_y - - eb[lid1].roll = 0 - eb[lid2].roll = 0 - eb[lid3].roll = 0 - eb[lid4].roll = 0 - eb[lid5].roll = 0 - eb[lid6].roll = 0 - eb[lid7].roll = 0 - eb[lid8].roll = 0 - - eb[lid1].parent = head_e - eb[lid2].parent = head_e - eb[lid3].parent = head_e - eb[lid4].parent = head_e - eb[lid5].parent = head_e - eb[lid6].parent = head_e - eb[lid7].parent = head_e - eb[lid8].parent = head_e - - lower_lid_ctrl = copy_bone_simple(obj.data, definitions[10], base_names[definitions[10]]).name - upper_lid_ctrl = copy_bone_simple(obj.data, definitions[11], base_names[definitions[11]]).name - eb[lower_lid_ctrl].parent = head_e - eb[upper_lid_ctrl].parent = head_e - distance = (eb[lower_lid_ctrl].head - eb[upper_lid_ctrl].head).length - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Axis locks - pb[lower_lid_ctrl].lock_location = True, False, True - pb[upper_lid_ctrl].lock_location = True, False, True - - # Add eye close action if it doesn't already exist - action_name = "eye_close" - if action_name in bpy.data.actions: - close_action = bpy.data.actions[action_name] - else: - close_action = add_action(name=action_name) - - # Add close property (useful when making the animation in the action) - prop_name = "close_action" - prop = rna_idprop_ui_prop_get(pb[upper_lid_ctrl], prop_name, create=True) - pb[upper_lid_ctrl][prop_name] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["min"] = 0.0 - prop["max"] = 1.0 - - close_driver_path = pb[upper_lid_ctrl].path_from_id() + '["close_action"]' - - # Constraints - - # Flowers track lid controls - con = pb[flo1].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid1 - - con = pb[flo2].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid2 - - con = pb[flo3].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid3 - - con = pb[flo4].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid4 - - con = pb[flo5].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid5 - - con = pb[flo6].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid6 - - con = pb[flo7].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid7 - - con = pb[flo8].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid8 - - - # ORG bones to flower lids - con = pb[definitions[2]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid1 - - con = pb[definitions[3]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid2 - - con = pb[definitions[4]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid3 - - con = pb[definitions[5]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid4 - - con = pb[definitions[6]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid5 - - con = pb[definitions[7]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid6 - - con = pb[definitions[8]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid7 - - con = pb[definitions[9]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid8 - - - # Action constraints, upper lid - con = pb[lid1].constraints.new('ACTION') - con.target = obj - con.subtarget = upper_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance*2 - con.max = distance - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - - con = pb[lid2].constraints.new('ACTION') - con.target = obj - con.subtarget = upper_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance*2 - con.max = distance - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - con = pb[lid3].constraints.new('ACTION') - con.target = obj - con.subtarget = upper_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance*2 - con.max = distance - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - con = pb[lid4].constraints.new('ACTION') - con.target = obj - con.subtarget = upper_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance*2 - con.max = distance - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - con = pb[lid5].constraints.new('ACTION') - con.target = obj - con.subtarget = upper_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance*2 - con.max = distance - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - # Action constraints, lower lid - con = pb[lid5].constraints.new('ACTION') - con.target = obj - con.subtarget = lower_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance - con.max = distance*2 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - con = pb[lid6].constraints.new('ACTION') - con.target = obj - con.subtarget = lower_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance - con.max = distance*2 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - con = pb[lid7].constraints.new('ACTION') - con.target = obj - con.subtarget = lower_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance - con.max = distance*2 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - con = pb[lid8].constraints.new('ACTION') - con.target = obj - con.subtarget = lower_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance - con.max = distance*2 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - con = pb[lid1].constraints.new('ACTION') - con.target = obj - con.subtarget = lower_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance - con.max = distance*2 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - - - - # Set layers - layer = list(bb[definitions[2]].layers) - bb[lid1].layers = layer - bb[lid2].layers = layer - bb[lid3].layers = layer - bb[lid4].layers = layer - bb[lid5].layers = layer - bb[lid6].layers = layer - bb[lid7].layers = layer - bb[lid8].layers = layer - - - return (None,) - - - - -def main(obj, bone_definition, base_names, options): - # Create control rig - control(obj, bone_definition, base_names, options) - # Create deform rig - deform(obj, bone_definition, base_names, options) - - return (None,) - - - - -def make_lid_stretch_bone(obj, name, bone1, bone2, roll_alpha): - eb = obj.data.edit_bones - pb = obj.pose.bones - - # Create the bone, pointing from bone1 to bone2 - bone_e = copy_bone_simple(obj.data, bone1, name, parent=True) - bone_e.use_connect = False - bone_e.tail = eb[bone2].head - bone = bone_e.name - - # Align the bone roll with the average direction of bone1 and bone2 - vec = bone_e.y_axis.cross(((1.0-roll_alpha)*eb[bone1].y_axis) + (roll_alpha*eb[bone2].y_axis)).normalize() - - ang = acos(vec * bone_e.x_axis) - - bone_e.roll += ang - c1 = vec * bone_e.x_axis - bone_e.roll -= (ang*2) - c2 = vec * bone_e.x_axis - - if c1 > c2: - bone_e.roll += (ang*2) - - bpy.ops.object.mode_set(mode='OBJECT') - bone_p = pb[bone] - - # Constrains - con = bone_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = bone1 - - con = bone_p.constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = bone2 - - con = bone_p.constraints.new('STRETCH_TO') - con.target = obj - con.subtarget = bone2 - con.volume = 'NO_VOLUME' - - bpy.ops.object.mode_set(mode='EDIT') - - return bone diff --git a/release/scripts/modules/rigify/finger_curl.py b/release/scripts/modules/rigify/finger_curl.py deleted file mode 100644 index 947ec75c9f8..00000000000 --- a/release/scripts/modules/rigify/finger_curl.py +++ /dev/null @@ -1,378 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import copy_bone_simple, get_side_name -from rna_prop_ui import rna_idprop_ui_prop_get - -METARIG_NAMES = "finger_01", "finger_02", "finger_03" - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('finger.01') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0353, -0.0184, -0.0053 - bone.roll = -2.8722 - bone.use_connect = False - bone = arm.edit_bones.new('finger.02') - bone.head[:] = 0.0353, -0.0184, -0.0053 - bone.tail[:] = 0.0702, -0.0364, -0.0146 - bone.roll = -2.7099 - bone.use_connect = True - bone.parent = arm.edit_bones['finger.01'] - bone = arm.edit_bones.new('finger.03') - bone.head[:] = 0.0702, -0.0364, -0.0146 - bone.tail[:] = 0.0903, -0.0461, -0.0298 - bone.roll = -2.1709 - bone.use_connect = True - bone.parent = arm.edit_bones['finger.02'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['finger.01'] - pbone['type'] = 'finger_curl' - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the first in a chain - Expects a chain with at least 1 child of the same base name. - eg. - finger_01 -> finger_02 - ''' - - orig_bone = obj.data.bones[orig_bone_name] - - bone_definition = [orig_bone.name] - - bone_definition.extend([child.name for child in orig_bone.children_recursive_basename]) - - if len(bone_definition) < 2: - raise RigifyError("expected the chain to have at least 1 child from bone '%s' without the same base name" % orig_bone_name) - - return bone_definition - - -def deform(obj, definitions, base_names, options): - """ Creates the deform rig. - """ - bpy.ops.object.mode_set(mode='EDIT') - - three_digits = True if len(definitions) > 2 else False - - # Create base digit bones: two bones, each half of the base digit. - f1a = copy_bone_simple(obj.data, definitions[0], "DEF-%s.01" % base_names[definitions[0]], parent=True) - f1b = copy_bone_simple(obj.data, definitions[0], "DEF-%s.02" % base_names[definitions[0]], parent=True) - f1a.use_connect = False - f1b.use_connect = False - f1b.parent = f1a - center = f1a.center - f1a.tail = center - f1b.head = center - - # Create the other deform bones. - f2 = copy_bone_simple(obj.data, definitions[1], "DEF-%s" % base_names[definitions[1]], parent=True) - if three_digits: - f3 = copy_bone_simple(obj.data, definitions[2], "DEF-%s" % base_names[definitions[2]], parent=True) - - # Store names before leaving edit mode - f1a_name = f1a.name - f1b_name = f1b.name - f2_name = f2.name - if three_digits: - f3_name = f3.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bones - f1a = obj.pose.bones[f1a_name] - f1b = obj.pose.bones[f1b_name] - f2 = obj.pose.bones[f2_name] - if three_digits: - f3 = obj.pose.bones[f3_name] - - # Constrain the base digit's bones - con = f1a.constraints.new('DAMPED_TRACK') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[1] - - con = f1a.constraints.new('COPY_SCALE') - con.name = "copy_scale" - con.target = obj - con.subtarget = definitions[0] - - con = f1b.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[0] - - # Constrain the other digit's bones - con = f2.constraints.new('COPY_TRANSFORMS') - con.name = "copy_transforms" - con.target = obj - con.subtarget = definitions[1] - - if three_digits: - con = f3.constraints.new('COPY_TRANSFORMS') - con.name = "copy_transforms" - con.target = obj - con.subtarget = definitions[2] - - -def main(obj, bone_definition, base_names, options): - # *** EDITMODE - bpy.ops.object.mode_set(mode='EDIT') - - three_digits = True if len(bone_definition) > 2 else False - - # get assosiated data - arm = obj.data - bb = obj.data.bones - eb = obj.data.edit_bones - pb = obj.pose.bones - - org_f1 = bone_definition[0] # Original finger bone 01 - org_f2 = bone_definition[1] # Original finger bone 02 - if three_digits: - org_f3 = bone_definition[2] # Original finger bone 03 - - # Check options - if "bend_ratio" in options: - bend_ratio = options["bend_ratio"] - else: - bend_ratio = 0.4 - - yes = [1, 1.0, True, "True", "true", "Yes", "yes"] - make_hinge = False - if ("hinge" in options) and (eb[org_f1].parent is not None): - if options["hinge"] in yes: - make_hinge = True - - - # Needed if its a new armature with no keys - obj.animation_data_create() - - # Create the control bone - base_name = base_names[bone_definition[0]].split(".", 1)[0] - if three_digits: - tot_len = eb[org_f1].length + eb[org_f2].length + eb[org_f3].length - else: - tot_len = eb[org_f1].length + eb[org_f2].length - control = copy_bone_simple(arm, bone_definition[0], base_name + get_side_name(base_names[bone_definition[0]]), parent=True).name - eb[control].use_connect = eb[org_f1].use_connect - eb[control].parent = eb[org_f1].parent - eb[control].length = tot_len - - # Create secondary control bones - f1 = copy_bone_simple(arm, bone_definition[0], base_names[bone_definition[0]]).name - f2 = copy_bone_simple(arm, bone_definition[1], base_names[bone_definition[1]]).name - if three_digits: - f3 = copy_bone_simple(arm, bone_definition[2], base_names[bone_definition[2]]).name - - # Create driver bones - df1 = copy_bone_simple(arm, bone_definition[0], "MCH-" + base_names[bone_definition[0]]).name - eb[df1].length /= 2 - df2 = copy_bone_simple(arm, bone_definition[1], "MCH-" + base_names[bone_definition[1]]).name - eb[df2].length /= 2 - if three_digits: - df3 = copy_bone_simple(arm, bone_definition[2], "MCH-" + base_names[bone_definition[2]]).name - eb[df3].length /= 2 - - # Set parents of the bones, interleaving the driver bones with the secondary control bones - if three_digits: - eb[f3].use_connect = False - eb[df3].use_connect = False - eb[f2].use_connect = False - eb[df2].use_connect = False - eb[f1].use_connect = False - eb[df1].use_connect = eb[org_f1].use_connect - - if three_digits: - eb[f3].parent = eb[df3] - eb[df3].parent = eb[f2] - eb[f2].parent = eb[df2] - eb[df2].parent = eb[f1] - eb[f1].parent = eb[df1] - eb[df1].parent = eb[org_f1].parent - - # Set up bones for hinge - if make_hinge: - socket = copy_bone_simple(arm, org_f1, "MCH-socket_"+control, parent=True).name - hinge = copy_bone_simple(arm, eb[org_f1].parent.name, "MCH-hinge_"+control).name - - eb[control].use_connect = False - eb[control].parent = eb[hinge] - - # Create the deform rig while we're still in edit mode - deform(obj, bone_definition, base_names, options) - - - # *** POSEMODE - bpy.ops.object.mode_set(mode='OBJECT') - - # Set rotation modes and axis locks - pb[control].rotation_mode = obj.pose.bones[bone_definition[0]].rotation_mode - pb[control].lock_location = True, True, True - pb[control].lock_scale = True, False, True - pb[f1].rotation_mode = 'YZX' - pb[f2].rotation_mode = 'YZX' - if three_digits: - pb[f3].rotation_mode = 'YZX' - pb[f1].lock_location = True, True, True - pb[f2].lock_location = True, True, True - if three_digits: - pb[f3].lock_location = True, True, True - pb[df2].rotation_mode = 'YZX' - if three_digits: - pb[df3].rotation_mode = 'YZX' - - # Add the bend_ratio property to the control bone - pb[control]["bend_ratio"] = bend_ratio - prop = rna_idprop_ui_prop_get(pb[control], "bend_ratio", create=True) - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - # Add hinge property to the control bone - if make_hinge: - pb[control]["hinge"] = 0.0 - prop = rna_idprop_ui_prop_get(pb[control], "hinge", create=True) - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - # Constraints - con = pb[df1].constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = control - - con = pb[df1].constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = control - - con = pb[org_f1].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = f1 - - con = pb[org_f2].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = f2 - - if three_digits: - con = pb[org_f3].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = f3 - - if make_hinge: - con = pb[hinge].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = bb[org_f1].parent.name - - hinge_driver_path = pb[control].path_from_id() + '["hinge"]' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = hinge_driver_path - - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - con = pb[control].constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = socket - - # Create the drivers for the driver bones (control bone scale rotates driver bones) - controller_path = pb[control].path_from_id() # 'pose.bones["%s"]' % control_bone_name - - if three_digits: - finger_digits = [df2, df3] - else: - finger_digits = [df2] - - i = 0 - for bone in finger_digits: - - # XXX - todo, any number - if i == 2: - break - - pbone = pb[bone] - - pbone.rotation_mode = 'YZX' - fcurve_driver = pbone.driver_add("rotation_euler", 0) - - #obj.driver_add('pose.bones["%s"].scale', 1) - #obj.animation_data.drivers[-1] # XXX, WATCH THIS - driver = fcurve_driver.driver - - # scale target - var = driver.variables.new() - var.name = "scale" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = controller_path + '.scale[1]' - - # bend target - var = driver.variables.new() - var.name = "br" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = controller_path + '["bend_ratio"]' - - # XXX - todo, any number - if three_digits: - if i == 0: - driver.expression = '(-scale+1.0)*pi*2.0*(1.0-br)' - elif i == 1: - driver.expression = '(-scale+1.0)*pi*2.0*br' - else: - driver.expression = driver.expression = '(-scale+1.0)*pi*2.0' - - i += 1 - - # Last step setup layers - if "ex_layer" in options: - layer = [n==options["ex_layer"] for n in range(0,32)] - else: - layer = list(arm.bones[bone_definition[0]].layers) - #for bone_name in [f1, f2, f3]: - # arm.bones[bone_name].layers = layer - arm.bones[f1].layers = layer - arm.bones[f2].layers = layer - if three_digits: - arm.bones[f3].layers = layer - - layer = list(arm.bones[bone_definition[0]].layers) - bb[control].layers = layer - - # no blending the result of this - return None - diff --git a/release/scripts/modules/rigify/leg_biped.py b/release/scripts/modules/rigify/leg_biped.py deleted file mode 100644 index d2ddba9f549..00000000000 --- a/release/scripts/modules/rigify/leg_biped.py +++ /dev/null @@ -1,501 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from math import pi -from rigify import RigifyError -from rigify_utils import bone_class_instance, copy_bone_simple, blend_bone_list, get_side_name, get_base_name -from rna_prop_ui import rna_idprop_ui_prop_get - -METARIG_NAMES = "hips", "thigh", "shin", "foot", "toe", "heel" - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('hips') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0000, 0.0000, 0.2506 - bone.roll = 0.0000 - bone.use_connect = False - bone = arm.edit_bones.new('thigh') - bone.head[:] = 0.1253, 0.0000, -0.0000 - bone.tail[:] = 0.0752, -0.0251, -0.4260 - bone.roll = 0.1171 - bone.use_connect = False - bone.parent = arm.edit_bones['hips'] - bone = arm.edit_bones.new('shin') - bone.head[:] = 0.0752, -0.0251, -0.4260 - bone.tail[:] = 0.0752, 0.0000, -0.8771 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['thigh'] - bone = arm.edit_bones.new('foot') - bone.head[:] = 0.0752, 0.0000, -0.8771 - bone.tail[:] = 0.1013, -0.1481, -0.9773 - bone.roll = -0.4662 - bone.use_connect = True - bone.parent = arm.edit_bones['shin'] - bone = arm.edit_bones.new('toe') - bone.head[:] = 0.1013, -0.1481, -0.9773 - bone.tail[:] = 0.1100, -0.2479, -0.9773 - bone.roll = 3.1416 - bone.use_connect = True - bone.parent = arm.edit_bones['foot'] - bone = arm.edit_bones.new('heel') - bone.head[:] = 0.0652, 0.0501, -1.0024 - bone.tail[:] = 0.0927, -0.1002, -1.0024 - bone.roll = 0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['foot'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['thigh'] - pbone['type'] = 'leg_biped' - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the first in a chain - Expects a chain of at least 3 children. - eg. - thigh -> shin -> foot -> [toe, heel] - ''' - - bone_definition = [] - - orig_bone = obj.data.bones[orig_bone_name] - orig_bone_parent = orig_bone.parent - - if orig_bone_parent is None: - raise RigifyError("expected the thigh bone to have a parent hip bone") - - bone_definition.append(orig_bone_parent.name) - bone_definition.append(orig_bone.name) - - - bone = orig_bone - chain = 0 - while chain < 2: # first 2 bones only have 1 child - children = bone.children - - if len(children) != 1: - raise RigifyError("expected the thigh bone to have 3 children without a fork") - bone = children[0] - bone_definition.append(bone.name) # shin, foot - chain += 1 - - children = bone.children - # Now there must be 2 children, only one connected - if len(children) != 2: - raise RigifyError("expected the foot bone:'%s' to have 2 children" % bone.name) - - if children[0].use_connect == children[1].use_connect: - raise RigifyError("expected one bone to be connected") - - toe, heel = children - if heel.use_connect: - toe, heel = heel, toe - - - bone_definition.append(toe.name) - bone_definition.append(heel.name) - - if len(bone_definition) != len(METARIG_NAMES): - raise RigifyError("internal problem, expected %d bones" % len(METARIG_NAMES)) - - return bone_definition - - -def ik(obj, bone_definition, base_names, options): - arm = obj.data - - # setup the existing bones, use names from METARIG_NAMES - mt_chain = bone_class_instance(obj, ["thigh", "shin", "foot", "toe"]) - mt = bone_class_instance(obj, ["hips", "heel"]) - - mt.attr_initialize(METARIG_NAMES, bone_definition) - mt_chain.attr_initialize(METARIG_NAMES, bone_definition) - - # children of ik_foot - ik = bone_class_instance(obj, ["foot", "foot_roll", "foot_roll_01", "foot_roll_02", "knee_target"]) - - # Make a new chain - ik_chain = mt_chain.copy(to_fmt="MCH-%s", base_names=base_names) - - # simple rename - ik_chain.rename("thigh", ik_chain.thigh + "_ik") - ik_chain.rename("shin", ik_chain.shin + "_ik") - - # make sure leg is child of hips - ik_chain.thigh_e.parent = mt.hips_e - - # ik foot: no parents - base_foot_name = get_base_name(base_names[mt_chain.foot]) - ik.foot_e = copy_bone_simple(arm, mt.heel, base_foot_name + "_ik" + get_side_name(base_names[mt_chain.foot])) - ik.foot = ik.foot_e.name - ik.foot_e.translate(mt_chain.foot_e.head - ik.foot_e.head) - ik.foot_e.use_local_location = False - - # foot roll: heel pointing backwards, half length - ik.foot_roll_e = copy_bone_simple(arm, mt.heel, base_foot_name + "_roll" + get_side_name(base_names[mt_chain.foot])) - ik.foot_roll = ik.foot_roll_e.name - ik.foot_roll_e.tail = ik.foot_roll_e.head - ik.foot_roll_e.vector / 2.0 - ik.foot_roll_e.parent = ik.foot_e # heel is disconnected - - # heel pointing forwards to the toe base, parent of the following 2 bones - ik.foot_roll_01_e = copy_bone_simple(arm, mt.heel, "MCH-%s_roll.01" % base_foot_name) - ik.foot_roll_01 = ik.foot_roll_01_e.name - ik.foot_roll_01_e.tail = mt_chain.foot_e.tail - ik.foot_roll_01_e.parent = ik.foot_e # heel is disconnected - - # same as above but reverse direction - ik.foot_roll_02_e = copy_bone_simple(arm, mt.heel, "MCH-%s_roll.02" % base_foot_name) - ik.foot_roll_02 = ik.foot_roll_02_e.name - ik.foot_roll_02_e.parent = ik.foot_roll_01_e # heel is disconnected - ik.foot_roll_02_e.head = mt_chain.foot_e.tail - ik.foot_roll_02_e.tail = mt.heel_e.head - - del base_foot_name - - # rename 'MCH-toe' --> to 'toe_ik' and make the child of ik.foot_roll_01 - # ------------------ FK or IK? - ik_chain.rename("toe", get_base_name(base_names[mt_chain.toe]) + "_ik" + get_side_name(base_names[mt_chain.toe])) - ik_chain.toe_e.use_connect = False - ik_chain.toe_e.parent = ik.foot_roll_01_e - - # re-parent ik_chain.foot to the - ik_chain.foot_e.use_connect = False - ik_chain.foot_e.parent = ik.foot_roll_02_e - - - # knee target is the heel moved up and forward on its local axis - ik.knee_target_e = copy_bone_simple(arm, mt.heel, "knee_target" + get_side_name(mt.heel)) - ik.knee_target = ik.knee_target_e.name - offset = ik.knee_target_e.tail - ik.knee_target_e.head - offset.z = 0 - offset.length = mt_chain.shin_e.head.z - mt.heel_e.head.z - offset.z += offset.length - ik.knee_target_e.translate(offset) - ik.knee_target_e.length *= 0.5 - ik.knee_target_e.parent = ik.foot_e - ik.knee_target_e.use_local_location = False - - # roll the bone to point up... could also point in the same direction as ik.foot_roll - # ik.foot_roll_02_e.matrix * Vector((0.0, 0.0, 1.0)) # ACK!, no rest matrix in editmode - ik.foot_roll_01_e.align_roll((0.0, 0.0, -1.0)) - - bpy.ops.object.mode_set(mode='OBJECT') - - ik.update() - mt_chain.update() - ik_chain.update() - - # Set IK dof - ik_chain.shin_p.lock_ik_x = False - ik_chain.shin_p.lock_ik_y = True - ik_chain.shin_p.lock_ik_z = True - - # Set rotation modes and axis locks - ik.foot_roll_p.rotation_mode = 'XYZ' - ik.foot_roll_p.lock_rotation = False, True, True - ik_chain.toe_p.rotation_mode = 'YXZ' - ik_chain.toe_p.lock_rotation = False, True, True - ik_chain.toe_p.lock_location = True, True, True - ik.foot_roll_p.lock_location = True, True, True - - # IK - con = ik_chain.shin_p.constraints.new('IK') - con.chain_count = 2 - con.iterations = 500 - con.pole_angle = -pi / 2.0 - con.use_tail = True - con.use_stretch = True - con.use_target = True - con.use_rotation = False - con.weight = 1.0 - - con.target = obj - con.subtarget = ik_chain.foot - - con.pole_target = obj - con.pole_subtarget = ik.knee_target - - # foot roll - cons = [ \ - (ik.foot_roll_01_p.constraints.new('COPY_ROTATION'), ik.foot_roll_01_p.constraints.new('LIMIT_ROTATION')), \ - (ik.foot_roll_02_p.constraints.new('COPY_ROTATION'), ik.foot_roll_02_p.constraints.new('LIMIT_ROTATION'))] - - for con, con_l in cons: - con.target = obj - con.subtarget = ik.foot_roll - con.use_x, con.use_y, con.use_z = True, False, False - con.target_space = con.owner_space = 'LOCAL' - - con = con_l - con.use_limit_x, con.use_limit_y, con.use_limit_z = True, False, False - con.owner_space = 'LOCAL' - - if con_l is cons[-1][-1]: - con.min_x = 0.0 - con.max_x = 180.0 # XXX -deg - else: - con.min_x = -180.0 # XXX -deg - con.max_x = 0.0 - - - # last step setup layers - if "ik_layer" in options: - layer = [n == options["ik_layer"] for n in range(0, 32)] - else: - layer = list(mt_chain.thigh_b.layers) - for attr in ik_chain.attr_names: - getattr(ik_chain, attr + "_b").layers = layer - for attr in ik.attr_names: - getattr(ik, attr + "_b").layers = layer - - bpy.ops.object.mode_set(mode='EDIT') - - return (None, ik_chain.thigh, ik_chain.shin, ik_chain.foot, ik_chain.toe, None, ik.foot) - - -def fk(obj, bone_definition, base_names, options): - from mathutils import Vector - arm = obj.data - - # these account for all bones in METARIG_NAMES - mt_chain = bone_class_instance(obj, ["thigh", "shin", "foot", "toe"]) - mt = bone_class_instance(obj, ["hips", "heel"]) - - # new bones - ex = bone_class_instance(obj, ["thigh_socket", "thigh_hinge"]) - - for bone_class in (mt, mt_chain): - for attr in bone_class.attr_names: - i = METARIG_NAMES.index(attr) - ebone = arm.edit_bones[bone_definition[i]] - setattr(bone_class, attr, ebone.name) - bone_class.update() - - ex.thigh_socket_e = copy_bone_simple(arm, mt_chain.thigh, "MCH-%s_socket" % base_names[mt_chain.thigh], parent=True) - ex.thigh_socket = ex.thigh_socket_e.name - ex.thigh_socket_e.tail = ex.thigh_socket_e.head + Vector((0.0, 0.0, ex.thigh_socket_e.length / 4.0)) - - ex.thigh_hinge_e = copy_bone_simple(arm, mt.hips, "MCH-%s_hinge" % base_names[mt_chain.thigh], parent=False) - ex.thigh_hinge = ex.thigh_hinge_e.name - - fk_chain = mt_chain.copy(base_names=base_names) # fk has no prefix! - fk_chain.foot_e.name = "MCH-" + fk_chain.foot - fk_chain.foot = fk_chain.foot_e.name - - # Set up fk foot control - foot_e = copy_bone_simple(arm, mt.heel, base_names[mt_chain.foot]) - foot = foot_e.name - foot_e.translate(mt_chain.foot_e.head - foot_e.head) - foot_e.parent = fk_chain.shin_e - foot_e.use_connect = fk_chain.foot_e.use_connect - fk_chain.foot_e.use_connect = False - fk_chain.foot_e.parent = foot_e - - fk_chain.thigh_e.use_connect = False - fk_chain.thigh_e.parent = ex.thigh_hinge_e - - bpy.ops.object.mode_set(mode='OBJECT') - - ex.update() - mt_chain.update() - fk_chain.update() - foot_p = obj.pose.bones[foot] - - # Set rotation modes and axis locks - fk_chain.shin_p.rotation_mode = 'XYZ' - fk_chain.shin_p.lock_rotation = False, True, True - foot_p.rotation_mode = 'YXZ' - fk_chain.toe_p.rotation_mode = 'YXZ' - fk_chain.toe_p.lock_rotation = False, True, True - fk_chain.thigh_p.lock_location = True, True, True - - con = fk_chain.thigh_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = ex.thigh_socket - - # hinge - prop = rna_idprop_ui_prop_get(fk_chain.thigh_p, "hinge", create=True) - fk_chain.thigh_p["hinge"] = 0.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - con = ex.thigh_hinge_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = mt.hips - - # add driver - hinge_driver_path = fk_chain.thigh_p.path_from_id() + '["hinge"]' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = hinge_driver_path - - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - - # last step setup layers - if "fk_layer" in options: - layer = [n == options["fk_layer"] for n in range(0, 32)] - else: - layer = list(mt_chain.thigh_b.layers) - for attr in fk_chain.attr_names: - getattr(fk_chain, attr + "_b").layers = layer - for attr in ex.attr_names: - getattr(ex, attr + "_b").layers = layer - arm.bones[foot].layers = layer - - - bpy.ops.object.mode_set(mode='EDIT') - - # dont blend the hips or heel - return (None, fk_chain.thigh, fk_chain.shin, fk_chain.foot, fk_chain.toe, None, None) - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - # Create upper leg bones: two bones, each half of the upper leg. - uleg1 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.01" % base_names[definitions[1]], parent=True) - uleg2 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.02" % base_names[definitions[1]], parent=True) - uleg1.use_connect = False - uleg2.use_connect = False - uleg2.parent = uleg1 - center = uleg1.center - uleg1.tail = center - uleg2.head = center - - # Create lower leg bones: two bones, each half of the lower leg. - lleg1 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.01" % base_names[definitions[2]], parent=True) - lleg2 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.02" % base_names[definitions[2]], parent=True) - lleg1.use_connect = False - lleg2.use_connect = False - lleg2.parent = lleg1 - center = lleg1.center - lleg1.tail = center - lleg2.head = center - - # Create a bone for the second lower leg deform bone to twist with - twist = copy_bone_simple(obj.data, lleg2.name, "MCH-leg_twist") - twist.length /= 4 - twist.use_connect = False - twist.parent = obj.data.edit_bones[definitions[3]] - - # Create foot bone - foot = copy_bone_simple(obj.data, definitions[3], "DEF-%s" % base_names[definitions[3]], parent=True) - - # Create toe bone - toe = copy_bone_simple(obj.data, definitions[4], "DEF-%s" % base_names[definitions[4]], parent=True) - - # Store names before leaving edit mode - uleg1_name = uleg1.name - uleg2_name = uleg2.name - lleg1_name = lleg1.name - lleg2_name = lleg2.name - twist_name = twist.name - foot_name = foot.name - toe_name = toe.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bones - uleg1 = obj.pose.bones[uleg1_name] - uleg2 = obj.pose.bones[uleg2_name] - lleg1 = obj.pose.bones[lleg1_name] - lleg2 = obj.pose.bones[lleg2_name] - foot = obj.pose.bones[foot_name] - toe = obj.pose.bones[toe_name] - - # Upper leg constraints - con = uleg1.constraints.new('DAMPED_TRACK') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[2] - - con = uleg1.constraints.new('COPY_SCALE') - con.name = "scale" - con.target = obj - con.subtarget = definitions[1] - - con = uleg2.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[1] - - # Lower leg constraints - con = lleg1.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[2] - - con = lleg1.constraints.new('COPY_SCALE') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[2] - - con = lleg2.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = twist_name - - con = lleg2.constraints.new('DAMPED_TRACK') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[3] - - # Foot constraint - con = foot.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[3] - - # Toe constraint - con = toe.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[4] - - bpy.ops.object.mode_set(mode='EDIT') - return (uleg1_name, uleg2_name, lleg1_name, lleg2_name, foot_name, toe_name, None) - - -def main(obj, bone_definition, base_names, options): - bones_fk = fk(obj, bone_definition, base_names, options) - bones_ik = ik(obj, bone_definition, base_names, options) - deform(obj, bone_definition, base_names, options) - - bpy.ops.object.mode_set(mode='OBJECT') - blend_bone_list(obj, bone_definition + [None], bones_fk, bones_ik, target_bone=bones_ik[6], target_prop="ik", blend_default=1.0) diff --git a/release/scripts/modules/rigify/leg_quadruped.py b/release/scripts/modules/rigify/leg_quadruped.py deleted file mode 100644 index 739a6402c4b..00000000000 --- a/release/scripts/modules/rigify/leg_quadruped.py +++ /dev/null @@ -1,497 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rna_prop_ui import rna_idprop_ui_prop_get -from math import pi -from rigify import RigifyError -from rigify_utils import bone_class_instance, copy_bone_simple, get_side_name, get_base_name -from mathutils import Vector - -METARIG_NAMES = "hips", "thigh", "shin", "foot", "toe" - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('body') - bone.head[:] = -0.0728, -0.2427, 0.0000 - bone.tail[:] = -0.0728, -0.2427, 0.2427 - bone.roll = 0.0000 - bone.use_connect = False - bone = arm.edit_bones.new('thigh') - bone.head[:] = 0.0000, 0.0000, -0.0000 - bone.tail[:] = 0.0813, -0.2109, -0.3374 - bone.roll = -0.4656 - bone.use_connect = False - bone.parent = arm.edit_bones['body'] - bone = arm.edit_bones.new('shin') - bone.head[:] = 0.0813, -0.2109, -0.3374 - bone.tail[:] = 0.0714, -0.0043, -0.5830 - bone.roll = -0.2024 - bone.use_connect = True - bone.parent = arm.edit_bones['thigh'] - bone = arm.edit_bones.new('foot') - bone.head[:] = 0.0714, -0.0043, -0.5830 - bone.tail[:] = 0.0929, -0.0484, -0.7652 - bone.roll = -0.3766 - bone.use_connect = True - bone.parent = arm.edit_bones['shin'] - bone = arm.edit_bones.new('toe') - bone.head[:] = 0.0929, -0.0484, -0.7652 - bone.tail[:] = 0.1146, -0.1244, -0.7652 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['foot'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['thigh'] - pbone['type'] = 'leg_quadruped' - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the first in a chain - Expects a chain of at least 3 children. - eg. - thigh -> shin -> foot -> [toe, heel] - ''' - - bone_definition = [] - - orig_bone = obj.data.bones[orig_bone_name] - orig_bone_parent = orig_bone.parent - - if orig_bone_parent is None: - raise RigifyError("expected the thigh bone to have a parent hip bone") - - bone_definition.append(orig_bone_parent.name) - bone_definition.append(orig_bone.name) - - - bone = orig_bone - chain = 0 - while chain < 3: # first 2 bones only have 1 child - children = bone.children - - if len(children) != 1: - raise RigifyError("expected the thigh bone to have 3 children without a fork") - bone = children[0] - bone_definition.append(bone.name) # shin, foot - chain += 1 - - if len(bone_definition) != len(METARIG_NAMES): - raise RigifyError("internal problem, expected %d bones" % len(METARIG_NAMES)) - - return bone_definition - - -def ik(obj, bone_definition, base_names, options): - eb = obj.data.edit_bones - pb = obj.pose.bones - arm = obj.data - bpy.ops.object.mode_set(mode='EDIT') - - # setup the existing bones, use names from METARIG_NAMES - mt = bone_class_instance(obj, ["hips"]) - mt_chain = bone_class_instance(obj, ["thigh", "shin", "foot", "toe"]) - - mt.attr_initialize(METARIG_NAMES, bone_definition) - mt_chain.attr_initialize(METARIG_NAMES, bone_definition) - - ik_chain = mt_chain.copy(to_fmt="MCH-%s.ik", base_names=base_names) - - ik_chain.thigh_e.use_connect = False - ik_chain.thigh_e.parent = mt.hips_e - - ik_chain.foot_e.parent = None - ik_chain.rename("foot", get_base_name(base_names[bone_definition[3]]) + "_ik" + get_side_name(base_names[bone_definition[3]])) - ik_chain.rename("toe", get_base_name(base_names[bone_definition[4]]) + "_ik" + get_side_name(base_names[bone_definition[4]])) - - # keep the foot_ik as the parent - ik_chain.toe_e.use_connect = False - - # Foot uses pose space, not local space, for translation - ik_chain.foot_e.use_local_location = False - - # must be after disconnecting the toe - ik_chain.foot_e.align_orientation(mt_chain.toe_e) - - # children of ik_foot - ik = bone_class_instance(obj, ["foot_roll", "foot_roll_01", "foot_roll_02", "foot_target"]) - - # knee rotator - knee_rotator = copy_bone_simple(arm, mt_chain.toe, "knee_rotator" + get_side_name(base_names[mt_chain.foot]), parent=True).name - eb[knee_rotator].use_connect = False - eb[knee_rotator].parent = eb[mt.hips] - eb[knee_rotator].head = eb[ik_chain.thigh].head - eb[knee_rotator].tail = eb[knee_rotator].head + eb[mt_chain.toe].vector - eb[knee_rotator].length = eb[ik_chain.thigh].length / 2 - eb[knee_rotator].roll += pi/2 - - # parent ik leg to the knee rotator - eb[ik_chain.thigh].parent = eb[knee_rotator] - - # foot roll is an interesting one! - # plot a vector from the toe bones head, bactwards to the length of the foot - # then align it with the foot but reverse direction. - ik.foot_roll_e = copy_bone_simple(arm, mt_chain.toe, get_base_name(base_names[mt_chain.foot]) + "_roll" + get_side_name(base_names[mt_chain.foot])) - ik.foot_roll = ik.foot_roll_e.name - ik.foot_roll_e.use_connect = False - ik.foot_roll_e.parent = ik_chain.foot_e - ik.foot_roll_e.head -= mt_chain.toe_e.vector.normalize() * mt_chain.foot_e.length - ik.foot_roll_e.tail = ik.foot_roll_e.head - (mt_chain.foot_e.vector.normalize() * mt_chain.toe_e.length) - ik.foot_roll_e.align_roll(mt_chain.foot_e.matrix.rotation_part() * Vector((0.0, 0.0, -1.0))) - - # MCH-foot - ik.foot_roll_01_e = copy_bone_simple(arm, mt_chain.foot, "MCH-" + base_names[mt_chain.foot]) - ik.foot_roll_01 = ik.foot_roll_01_e.name - ik.foot_roll_01_e.parent = ik_chain.foot_e - ik.foot_roll_01_e.head, ik.foot_roll_01_e.tail = mt_chain.foot_e.tail, mt_chain.foot_e.head - ik.foot_roll_01_e.roll = ik.foot_roll_e.roll - - # ik_target, child of MCH-foot - ik.foot_target_e = copy_bone_simple(arm, mt_chain.foot, "MCH-" + base_names[mt_chain.foot] + "_ik_target") - ik.foot_target = ik.foot_target_e.name - ik.foot_target_e.parent = ik.foot_roll_01_e - ik.foot_target_e.align_orientation(ik_chain.foot_e) - ik.foot_target_e.length = ik_chain.foot_e.length / 2.0 - ik.foot_target_e.use_connect = True - - # MCH-foot.02 child of MCH-foot - ik.foot_roll_02_e = copy_bone_simple(arm, mt_chain.foot, "MCH-%s_02" % base_names[mt_chain.foot]) - ik.foot_roll_02 = ik.foot_roll_02_e.name - ik.foot_roll_02_e.parent = ik.foot_roll_01_e - - - bpy.ops.object.mode_set(mode='OBJECT') - - mt.update() - mt_chain.update() - ik.update() - ik_chain.update() - - # Set rotation modes and axis locks - #pb[knee_rotator].rotation_mode = 'YXZ' - #pb[knee_rotator].lock_rotation = False, True, False - pb[knee_rotator].lock_location = True, True, True - pb[ik.foot_roll].rotation_mode = 'XYZ' - pb[ik.foot_roll].lock_rotation = False, True, True - pb[ik_chain.toe].rotation_mode = 'XYZ' - pb[ik_chain.toe].lock_rotation = False, True, True - - # IK switch property - prop = rna_idprop_ui_prop_get(pb[ik_chain.foot], "ik", create=True) - pb[ik_chain.foot]["ik"] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["min"] = 0.0 - prop["max"] = 1.0 - - ik_driver_path = pb[ik_chain.foot].path_from_id() + '["ik"]' - - # simple constraining of orig bones - con = mt_chain.thigh_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = ik_chain.thigh - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = ik_driver_path - - con = mt_chain.shin_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = ik_chain.shin - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = ik_driver_path - - con = mt_chain.foot_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = ik.foot_roll_02 - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = ik_driver_path - - con = mt_chain.toe_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = ik_chain.toe - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = ik_driver_path - - # others... - con = ik.foot_roll_01_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = ik.foot_roll - con.target_space = 'LOCAL' - con.owner_space = 'LOCAL' - - - # IK - con = ik_chain.shin_p.constraints.new('IK') - con.chain_count = 2 - con.iterations = 500 - con.pole_angle = -90.0 # XXX - in deg! - con.use_tail = True - con.use_stretch = True - con.use_target = True - con.use_rotation = False - con.weight = 1.0 - - con.target = obj - con.subtarget = ik.foot_target - - con.pole_target = None - - ik.update() - ik_chain.update() - - # Set layers of the bones. - if "ik_layer" in options: - layer = [n==options["ik_layer"] for n in range(0,32)] - else: - layer = list(mt_chain.thigh_b.layers) - for attr in ik_chain.attr_names: - obj.data.bones[getattr(ik_chain, attr)].layers = layer - for attr in ik.attr_names: - obj.data.bones[getattr(ik, attr)].layers = layer - obj.data.bones[knee_rotator].layers = layer - - return None, ik_chain.thigh, ik_chain.shin, ik_chain.foot, ik_chain.toe - - - -def fk(obj, bone_definition, base_names, options): - eb = obj.data.edit_bones - pb = obj.pose.bones - arm = obj.data - bpy.ops.object.mode_set(mode='EDIT') - - # setup the existing bones, use names from METARIG_NAMES - mt = bone_class_instance(obj, ["hips"]) - mt_chain = bone_class_instance(obj, ["thigh", "shin", "foot", "toe"]) - - mt.attr_initialize(METARIG_NAMES, bone_definition) - mt_chain.attr_initialize(METARIG_NAMES, bone_definition) - - fk_chain = mt_chain.copy(to_fmt="%s", base_names=base_names) - - # Create the socket - socket = copy_bone_simple(arm, mt_chain.thigh, "MCH-leg_socket").name - eb[socket].parent = eb[mt.hips] - eb[socket].length = eb[mt_chain.thigh].length / 4 - - # Create the hinge - hinge = copy_bone_simple(arm, mt.hips, "MCH-leg_hinge").name - eb[hinge].length = eb[mt.hips].length / 2 - - # Make leg child of hinge - eb[fk_chain.thigh].use_connect = False - eb[fk_chain.thigh].parent = eb[hinge] - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Set rotation modes and axis locks - pb[fk_chain.shin].rotation_mode = 'XYZ' - pb[fk_chain.shin].lock_rotation = False, True, True - - # Constrain original bones to control bones - con = mt_chain.thigh_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = fk_chain.thigh - - con = mt_chain.shin_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = fk_chain.shin - - con = mt_chain.foot_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = fk_chain.foot - - con = mt_chain.toe_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = fk_chain.toe - - # Socket constraint - con = pb[fk_chain.thigh].constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = socket - - # Hinge constraint - con = pb[hinge].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = mt.hips - - prop = rna_idprop_ui_prop_get(pb[fk_chain.thigh], "hinge", create=True) - pb[fk_chain.thigh]["hinge"] = 0.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["min"] = 0.0 - prop["max"] = 1.0 - - hinge_driver_path = pb[fk_chain.thigh].path_from_id() + '["hinge"]' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = hinge_driver_path - - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - return None, fk_chain.thigh, fk_chain.shin, fk_chain.foot, fk_chain.toe - - - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - # Create upper leg bones: two bones, each half of the upper leg. - uleg1 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.01" % base_names[definitions[1]], parent=True) - uleg2 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.02" % base_names[definitions[1]], parent=True) - uleg1.use_connect = False - uleg2.use_connect = False - uleg2.parent = uleg1 - center = uleg1.center - uleg1.tail = center - uleg2.head = center - - # Create lower leg bones: two bones, each half of the lower leg. - lleg1 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.01" % base_names[definitions[2]], parent=True) - lleg2 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.02" % base_names[definitions[2]], parent=True) - lleg1.use_connect = False - lleg2.use_connect = False - lleg2.parent = lleg1 - center = lleg1.center - lleg1.tail = center - lleg2.head = center - - # Create a bone for the second lower leg deform bone to twist with - twist = copy_bone_simple(obj.data, lleg2.name, "MCH-leg_twist") - twist.length /= 4 - twist.use_connect = False - twist.parent = obj.data.edit_bones[definitions[3]] - - # Create foot bone - foot = copy_bone_simple(obj.data, definitions[3], "DEF-%s" % base_names[definitions[3]], parent=True) - - # Create toe bone - toe = copy_bone_simple(obj.data, definitions[4], "DEF-%s" % base_names[definitions[4]], parent=True) - - # Store names before leaving edit mode - uleg1_name = uleg1.name - uleg2_name = uleg2.name - lleg1_name = lleg1.name - lleg2_name = lleg2.name - twist_name = twist.name - foot_name = foot.name - toe_name = toe.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bones - uleg1 = obj.pose.bones[uleg1_name] - uleg2 = obj.pose.bones[uleg2_name] - lleg1 = obj.pose.bones[lleg1_name] - lleg2 = obj.pose.bones[lleg2_name] - foot = obj.pose.bones[foot_name] - toe = obj.pose.bones[toe_name] - - # Upper leg constraints - con = uleg1.constraints.new('DAMPED_TRACK') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[2] - - con = uleg2.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[1] - - # Lower leg constraints - con = lleg1.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[2] - - con = lleg2.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = twist_name - - con = lleg2.constraints.new('DAMPED_TRACK') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[3] - - # Foot constraint - con = foot.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[3] - - # Toe constraint - con = toe.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[4] - - bpy.ops.object.mode_set(mode='EDIT') - return (uleg1_name, uleg2_name, lleg1_name, lleg2_name, foot_name, toe_name, None) - - - - -def main(obj, bone_definition, base_names, options): - bones_fk = fk(obj, bone_definition, base_names, options) - bones_ik = ik(obj, bone_definition, base_names, options) - deform(obj, bone_definition, base_names, options) - return bones_ik diff --git a/release/scripts/modules/rigify/mouth.py b/release/scripts/modules/rigify/mouth.py deleted file mode 100644 index ef3875222d3..00000000000 --- a/release/scripts/modules/rigify/mouth.py +++ /dev/null @@ -1,756 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rna_prop_ui import rna_idprop_ui_prop_get -from math import acos, pi -from mathutils import Vector -from rigify import RigifyError -from rigify_utils import copy_bone_simple - -#METARIG_NAMES = ("cpy",) -RIG_TYPE = "mouth" - - -def mark_actions(): - for action in bpy.data.actions: - action.tag = True - -def get_unmarked_action(): - for action in bpy.data.actions: - if action.tag != True: - return action - return None - -def add_action(name=None): - mark_actions() - bpy.ops.action.new() - action = get_unmarked_action() - if name is not None: - action.name = name - return action - -def addget_shape_key(obj, name="Key"): - """ Fetches a shape key, or creates it if it doesn't exist - """ - # Create a shapekey set if it doesn't already exist - if obj.data.shape_keys is None: - shape = obj.add_shape_key(name="Basis", from_mix=False) - obj.active_shape_key_index = 0 - - # Get the shapekey, or create it if it doesn't already exist - if name in obj.data.shape_keys.keys: - shape_key = obj.data.shape_keys.keys[name] - else: - shape_key = obj.add_shape_key(name=name, from_mix=False) - - return shape_key - - -def addget_shape_key_driver(obj, name="Key"): - """ Fetches the driver for the shape key, or creates it if it doesn't - already exist. - """ - driver_path = 'keys["' + name + '"].value' - fcurve = None - driver = None - new = False - if obj.data.shape_keys.animation_data is not None: - for driver_s in obj.data.shape_keys.animation_data.drivers: - if driver_s.data_path == driver_path: - fcurve = driver_s - if fcurve is None: - fcurve = obj.data.shape_keys.keys[name].driver_add("value") - fcurve.driver.type = 'AVERAGE' - new = True - - return fcurve, new - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('Bone') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0000, 0.0000, 1.0000 - bone.roll = 0.0000 - bone.use_connect = False - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['Bone'] - pbone['type'] = 'copy' - - -def metarig_definition(obj, orig_bone_name): - bone = obj.data.bones[orig_bone_name] - chain = [] - - try: - chain += [bone.parent.parent.name, bone.parent.name, bone.name] - except AttributeError: - raise RigifyError("'%s' rig type requires a chain of two parents (bone: %s)" % (RIG_TYPE, orig_bone_name)) - - chain += [child.name for child in bone.children_recursive_basename] - - if len(chain) < 10: - raise RigifyError("'%s' rig type requires a chain of 8 bones (bone: %s)" % (RIG_TYPE, orig_bone_name)) - - return chain[:10] - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - jaw = definitions[1] - - # Options - req_options = ["mesh"] - for option in req_options: - if option not in options: - raise RigifyError("'%s' rig type requires a '%s' option (bone: %s)" % (RIG_TYPE, option, base_names[definitions[0]])) - - meshes = options["mesh"].replace(" ", "").split(",") - - # Lip DEF - lip1 = copy_bone_simple(obj.data, definitions[2], "DEF-" + base_names[definitions[2]]).name - lip2 = copy_bone_simple(obj.data, definitions[3], "DEF-" + base_names[definitions[3]]).name - lip3 = copy_bone_simple(obj.data, definitions[4], "DEF-" + base_names[definitions[4]]).name - lip4 = copy_bone_simple(obj.data, definitions[5], "DEF-" + base_names[definitions[5]]).name - lip5 = copy_bone_simple(obj.data, definitions[6], "DEF-" + base_names[definitions[6]]).name - lip6 = copy_bone_simple(obj.data, definitions[7], "DEF-" + base_names[definitions[7]]).name - lip7 = copy_bone_simple(obj.data, definitions[8], "DEF-" + base_names[definitions[8]]).name - lip8 = copy_bone_simple(obj.data, definitions[9], "DEF-" + base_names[definitions[9]]).name - - # Mouth corner spread bones (for driving corrective shape keys) - spread_l_1 = copy_bone_simple(obj.data, definitions[6], "MCH-" + base_names[definitions[6]] + ".spread_1").name - spread_l_2 = copy_bone_simple(obj.data, definitions[6], "MCH-" + base_names[definitions[6]] + ".spread_2").name - eb[spread_l_1].tail = eb[definitions[5]].head - eb[spread_l_2].tail = eb[definitions[5]].head - eb[spread_l_1].roll = 0 - eb[spread_l_2].roll = 0 - eb[spread_l_1].use_connect = False - eb[spread_l_2].use_connect = False - eb[spread_l_1].parent = eb[definitions[6]] - eb[spread_l_2].parent = eb[definitions[6]] - - spread_r_1 = copy_bone_simple(obj.data, definitions[2], "MCH-" + base_names[definitions[2]] + ".spread_1").name - spread_r_2 = copy_bone_simple(obj.data, definitions[2], "MCH-" + base_names[definitions[2]] + ".spread_2").name - eb[spread_r_1].tail = eb[definitions[3]].head - eb[spread_r_2].tail = eb[definitions[3]].head - eb[spread_r_1].roll = 0 - eb[spread_r_2].roll = 0 - eb[spread_r_1].use_connect = False - eb[spread_r_2].use_connect = False - eb[spread_r_1].parent = eb[definitions[2]] - eb[spread_r_2].parent = eb[definitions[2]] - - - - # Jaw open bones (for driving corrective shape keys) - jopen1 = copy_bone_simple(obj.data, jaw, "MCH-"+base_names[jaw]+".track1", parent=True).name - eb[jopen1].use_connect = False - eb[jopen1].head = eb[jaw].tail - eb[jopen1].tail = eb[jopen1].head + Vector((0, 0, eb[jaw].length/4)) - - jopen2 = copy_bone_simple(obj.data, jopen1, "MCH-"+base_names[jaw]+".track2").name - eb[jopen2].parent = eb[jaw] - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Constrain DEF bones to ORG bones - con = pb[lip1].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[2] - - con = pb[lip2].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[3] - - con = pb[lip3].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[4] - - con = pb[lip4].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[5] - - con = pb[lip5].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[6] - - con = pb[lip6].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[7] - - con = pb[lip7].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[8] - - con = pb[lip8].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[9] - - # Constraint mouth corner spread bones - con = pb[spread_l_1].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lip4 - - con = pb[spread_l_2].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = spread_l_1 - - con = pb[spread_l_2].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lip6 - - con = pb[spread_r_1].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lip2 - - con = pb[spread_r_2].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = spread_r_1 - - con = pb[spread_r_2].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lip8 - - - # Corrective shape keys for the corners of the mouth. - bpy.ops.object.mode_set(mode='EDIT') - - # Calculate the rotation difference between the bones - rotdiff_l = acos((eb[lip5].head - eb[lip4].head).normalize().dot((eb[lip5].head - eb[lip6].head).normalize())) - rotdiff_r = acos((eb[lip1].head - eb[lip2].head).normalize().dot((eb[lip1].head - eb[lip8].head).normalize())) - - bpy.ops.object.mode_set(mode='OBJECT') - - - # Left side shape key - for mesh_name in meshes: - mesh_obj = bpy.data.objects[mesh_name] - shape_key_name = "COR-" + base_names[definitions[6]] + ".spread" - - # Add/get the shape key - shape_key = addget_shape_key(mesh_obj, name=shape_key_name) - - # Add/get the shape key driver - fcurve, is_new_driver = addget_shape_key_driver(mesh_obj, name=shape_key_name) - driver = fcurve.driver - - # Get the variable, or create it if it doesn't already exist - var_name = base_names[definitions[6]] - if var_name in driver.variables: - var = driver.variables[var_name] - else: - var = driver.variables.new() - var.name = var_name - - # Set up the variable - var.type = "ROTATION_DIFF" - var.targets[0].id = obj - var.targets[0].bone_target = spread_l_1 - var.targets[1].id = obj - var.targets[1].bone_target = spread_l_2 - - # Set fcurve offset - if is_new_driver: - mod = fcurve.modifiers[0] - if rotdiff_l != pi: - mod.coefficients[0] = -rotdiff_l / (pi-rotdiff_l) - mod.coefficients[1] = 1 / (pi-rotdiff_l) - - # Right side shape key - for mesh_name in meshes: - mesh_obj = bpy.data.objects[mesh_name] - shape_key_name = "COR-" + base_names[definitions[2]] + ".spread" - - # Add/get the shape key - shape_key = addget_shape_key(mesh_obj, name=shape_key_name) - - # Add/get the shape key driver - fcurve, is_new_driver = addget_shape_key_driver(mesh_obj, name=shape_key_name) - driver = fcurve.driver - - # Get the variable, or create it if it doesn't already exist - var_name = base_names[definitions[2]] - if var_name in driver.variables: - var = driver.variables[var_name] - else: - var = driver.variables.new() - var.name = var_name - - # Set up the variable - var.type = "ROTATION_DIFF" - var.targets[0].id = obj - var.targets[0].bone_target = spread_r_1 - var.targets[1].id = obj - var.targets[1].bone_target = spread_r_2 - - # Set fcurve offset - if is_new_driver: - mod = fcurve.modifiers[0] - if rotdiff_r != pi: - mod.coefficients[0] = -rotdiff_r / (pi-rotdiff_r) - mod.coefficients[1] = 1 / (pi-rotdiff_r) - - # Jaw open corrective shape key - for mesh_name in meshes: - mesh_obj = bpy.data.objects[mesh_name] - shape_key_name = "COR-" + base_names[definitions[4]] + ".jaw_open" - - # Add/get the shape key - shape_key = addget_shape_key(mesh_obj, name=shape_key_name) - - # Add/get the shape key driver - fcurve, is_new_driver = addget_shape_key_driver(mesh_obj, name=shape_key_name) - driver = fcurve.driver - - # Get the variable, or create it if it doesn't already exist - var_name = base_names[definitions[4]] - if var_name in driver.variables: - var = driver.variables[var_name] - else: - var = driver.variables.new() - var.name = var_name - - # Set up the variable - var.type = "LOC_DIFF" - var.targets[0].id = obj - var.targets[0].bone_target = jopen1 - var.targets[1].id = obj - var.targets[1].bone_target = jopen2 - - # Set fcurve offset - if is_new_driver: - mod = fcurve.modifiers[0] - mod.coefficients[0] = 0.0 - mod.coefficients[1] = 1.0 / bb[jaw].length - - return (None,) - - - - -def control(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - head_e = eb[definitions[0]] - jaw_e = eb[definitions[1]] - jaw = definitions[1] - - # Head lips - hlip1 = copy_bone_simple(obj.data, definitions[2], "MCH-"+base_names[definitions[2]]+".head").name - hlip2 = copy_bone_simple(obj.data, definitions[3], "MCH-"+base_names[definitions[3]]+".head").name - hlip3 = copy_bone_simple(obj.data, definitions[4], "MCH-"+base_names[definitions[4]]+".head").name - hlip4 = copy_bone_simple(obj.data, definitions[5], "MCH-"+base_names[definitions[5]]+".head").name - hlip5 = copy_bone_simple(obj.data, definitions[6], "MCH-"+base_names[definitions[6]]+".head").name - hlip6 = copy_bone_simple(obj.data, definitions[7], "MCH-"+base_names[definitions[7]]+".head").name - hlip7 = copy_bone_simple(obj.data, definitions[8], "MCH-"+base_names[definitions[8]]+".head").name - hlip8 = copy_bone_simple(obj.data, definitions[9], "MCH-"+base_names[definitions[9]]+".head").name - - eb[hlip1].parent = head_e - eb[hlip2].parent = head_e - eb[hlip3].parent = head_e - eb[hlip4].parent = head_e - eb[hlip5].parent = head_e - eb[hlip6].parent = head_e - eb[hlip7].parent = head_e - eb[hlip8].parent = head_e - - # Jaw lips - jlip1 = copy_bone_simple(obj.data, definitions[2], "MCH-"+base_names[definitions[2]]+".jaw").name - jlip2 = copy_bone_simple(obj.data, definitions[3], "MCH-"+base_names[definitions[3]]+".jaw").name - jlip3 = copy_bone_simple(obj.data, definitions[4], "MCH-"+base_names[definitions[4]]+".jaw").name - jlip4 = copy_bone_simple(obj.data, definitions[5], "MCH-"+base_names[definitions[5]]+".jaw").name - jlip5 = copy_bone_simple(obj.data, definitions[6], "MCH-"+base_names[definitions[6]]+".jaw").name - jlip6 = copy_bone_simple(obj.data, definitions[7], "MCH-"+base_names[definitions[7]]+".jaw").name - jlip7 = copy_bone_simple(obj.data, definitions[8], "MCH-"+base_names[definitions[8]]+".jaw").name - jlip8 = copy_bone_simple(obj.data, definitions[9], "MCH-"+base_names[definitions[9]]+".jaw").name - - eb[jlip1].parent = jaw_e - eb[jlip2].parent = jaw_e - eb[jlip3].parent = jaw_e - eb[jlip4].parent = jaw_e - eb[jlip5].parent = jaw_e - eb[jlip6].parent = jaw_e - eb[jlip7].parent = jaw_e - eb[jlip8].parent = jaw_e - - # Control lips - lip1 = copy_bone_simple(obj.data, definitions[2], base_names[definitions[2]]).name - lip2 = copy_bone_simple(obj.data, definitions[3], base_names[definitions[3]]).name - lip3 = copy_bone_simple(obj.data, definitions[4], base_names[definitions[4]]).name - lip4 = copy_bone_simple(obj.data, definitions[5], base_names[definitions[5]]).name - lip5 = copy_bone_simple(obj.data, definitions[6], base_names[definitions[6]]).name - lip6 = copy_bone_simple(obj.data, definitions[7], base_names[definitions[7]]).name - lip7 = copy_bone_simple(obj.data, definitions[8], base_names[definitions[8]]).name - lip8 = copy_bone_simple(obj.data, definitions[9], base_names[definitions[9]]).name - - eb[lip1].parent = eb[hlip1] - eb[lip2].parent = eb[hlip2] - eb[lip3].parent = eb[hlip3] - eb[lip4].parent = eb[hlip4] - eb[lip5].parent = eb[hlip5] - eb[lip6].parent = eb[hlip6] - eb[lip7].parent = eb[hlip7] - eb[lip8].parent = eb[hlip8] - - # Jaw open tracker - jopent = copy_bone_simple(obj.data, jaw_e.name, "MCH-"+base_names[jaw_e.name]+".track", parent=True).name - eb[jopent].use_connect = False - eb[jopent].tail = jaw_e.tail + Vector((0.0, 0.0, jaw_e.length)) - eb[jopent].head = jaw_e.tail - - bpy.ops.object.mode_set(mode='OBJECT') - - # Add mouth open action if it doesn't already exist - action_name = "mouth_open" - if action_name in bpy.data.actions: - open_action = bpy.data.actions[action_name] - else: - open_action = add_action(name=action_name) - - # Add close property (useful when making the animation in the action) - prop_name = "open_action" - prop = rna_idprop_ui_prop_get(pb[lip1], prop_name, create=True) - pb[lip1][prop_name] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["min"] = 0.0 - prop["max"] = 1.0 - - open_driver_path = pb[lip1].path_from_id() + '["open_action"]' - - - # Constraints - - # Jaw open tracker stretches to jaw tip - con = pb[jopent].constraints.new('STRETCH_TO') - con.target = obj - con.subtarget = jaw - con.head_tail = 1.0 - con.rest_length = bb[jopent].length - con.volume = 'NO_VOLUME' - - # Head lips to jaw lips - influence = [0.02, 0.1, 0.35, 0.25, 0.0] - - con = pb[hlip1].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip1 - con.influence = influence[2] - - con = pb[hlip2].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip2 - con.influence = influence[1] - - con = pb[hlip3].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip3 - con.influence = influence[0] - - con = pb[hlip4].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip4 - con.influence = influence[1] - - con = pb[hlip5].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip5 - con.influence = influence[2] - - con = pb[hlip6].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip6 - con.influence = 1.0 - influence[3] - - con = pb[hlip7].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip7 - con.influence = 1.0 - influence[4] - - con = pb[hlip8].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip8 - con.influence = 1.0 - influence[3] - - # ORG bones to lips - con = pb[definitions[2]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip1 - - con = pb[definitions[3]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip2 - - con = pb[definitions[4]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip3 - - con = pb[definitions[5]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip4 - - con = pb[definitions[6]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip5 - - con = pb[definitions[7]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip6 - - con = pb[definitions[8]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip7 - - con = pb[definitions[9]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip8 - - # Action constraints for open mouth - con = pb[lip1].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - con = pb[lip2].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - con = pb[lip3].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - con = pb[lip4].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - con = pb[lip5].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - con = pb[lip6].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - con = pb[lip7].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - con = pb[lip8].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - - # Set layers - layer = list(bb[definitions[2]].layers) - bb[lip1].layers = layer - bb[lip2].layers = layer - bb[lip3].layers = layer - bb[lip4].layers = layer - bb[lip5].layers = layer - bb[lip6].layers = layer - bb[lip7].layers = layer - bb[lip8].layers = layer - - - return (None,) - - - - -def main(obj, bone_definition, base_names, options): - # Create control rig - control(obj, bone_definition, base_names, options) - # Create deform rig - deform(obj, bone_definition, base_names, options) - - return (None,) - - - - -def make_lip_stretch_bone(obj, name, bone1, bone2, roll_alpha): - eb = obj.data.edit_bones - pb = obj.pose.bones - - # Create the bone, pointing from bone1 to bone2 - bone_e = copy_bone_simple(obj.data, bone1, name, parent=True) - bone_e.use_connect = False - bone_e.tail = eb[bone2].head - bone = bone_e.name - - # Align the bone roll with the average direction of bone1 and bone2 - vec = bone_e.y_axis.cross(((1.0-roll_alpha)*eb[bone1].y_axis) + (roll_alpha*eb[bone2].y_axis)).normalize() - - ang = acos(vec * bone_e.x_axis) - - bone_e.roll += ang - c1 = vec * bone_e.x_axis - bone_e.roll -= (ang*2) - c2 = vec * bone_e.x_axis - - if c1 > c2: - bone_e.roll += (ang*2) - - bpy.ops.object.mode_set(mode='OBJECT') - bone_p = pb[bone] - - # Constrains - con = bone_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = bone1 - - con = bone_p.constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = bone2 - - con = bone_p.constraints.new('STRETCH_TO') - con.target = obj - con.subtarget = bone2 - con.volume = 'NO_VOLUME' - - bpy.ops.object.mode_set(mode='EDIT') - - return bone diff --git a/release/scripts/modules/rigify/neck.py b/release/scripts/modules/rigify/neck.py deleted file mode 100644 index 56717f0ebb0..00000000000 --- a/release/scripts/modules/rigify/neck.py +++ /dev/null @@ -1,344 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import bone_class_instance, copy_bone_simple -from rna_prop_ui import rna_idprop_ui_prop_get - - - -def metarig_template(): - # TODO: - ## generated by rigify.write_meta_rig - #bpy.ops.object.mode_set(mode='EDIT') - #obj = bpy.context.active_object - #arm = obj.data - #bone = arm.edit_bones.new('body') - #bone.head[:] = 0.0000, -0.0276, -0.1328 - #bone.tail[:] = 0.0000, -0.0170, -0.0197 - #bone.roll = 0.0000 - #bone.use_connect = False - #bone = arm.edit_bones.new('head') - #bone.head[:] = 0.0000, -0.0170, -0.0197 - #bone.tail[:] = 0.0000, 0.0726, 0.1354 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['body'] - #bone = arm.edit_bones.new('neck.01') - #bone.head[:] = 0.0000, -0.0170, -0.0197 - #bone.tail[:] = 0.0000, -0.0099, 0.0146 - #bone.roll = 0.0000 - #bone.use_connect = False - #bone.parent = arm.edit_bones['head'] - #bone = arm.edit_bones.new('neck.02') - #bone.head[:] = 0.0000, -0.0099, 0.0146 - #bone.tail[:] = 0.0000, -0.0242, 0.0514 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.01'] - #bone = arm.edit_bones.new('neck.03') - #bone.head[:] = 0.0000, -0.0242, 0.0514 - #bone.tail[:] = 0.0000, -0.0417, 0.0868 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.02'] - #bone = arm.edit_bones.new('neck.04') - #bone.head[:] = 0.0000, -0.0417, 0.0868 - #bone.tail[:] = 0.0000, -0.0509, 0.1190 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.03'] - #bone = arm.edit_bones.new('neck.05') - #bone.head[:] = 0.0000, -0.0509, 0.1190 - #bone.tail[:] = 0.0000, -0.0537, 0.1600 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.04'] - # - #bpy.ops.object.mode_set(mode='OBJECT') - #pbone = obj.pose.bones['head'] - #pbone['type'] = 'neck_flex' - pass - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is neck_01, its parent is the body - eg. - body -> neck_01 -> neck_02 -> neck_03.... etc - ''' - arm = obj.data - neck = arm.bones[orig_bone_name] - body = neck.parent - - bone_definition = [body.name, neck.name] - bone_definition.extend([child.name for child in neck.children_recursive_basename]) - return bone_definition - - -def deform(obj, definitions, base_names, options): - for org_bone_name in definitions[1:]: - bpy.ops.object.mode_set(mode='EDIT') - - # Create deform bone. - bone = copy_bone_simple(obj.data, org_bone_name, "DEF-%s" % base_names[org_bone_name], parent=True) - - # Store name before leaving edit mode - bone_name = bone.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bone - bone = obj.pose.bones[bone_name] - - # Constrain to the original bone - # XXX. Todo, is this needed if the bone is connected to its parent? - con = bone.constraints.new('COPY_TRANSFORMS') - con.name = "copy_loc" - con.target = obj - con.subtarget = org_bone_name - - -def main(obj, bone_definition, base_names, options): - from mathutils import Vector - - arm = obj.data - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - body = bone_definition[0] - - # Create the neck and head control bones - if "head_name" in options: - head_name = options["head_name"] - else: - head_name = "head" - - neck_name = base_names[bone_definition[1]].split(".")[0] - - neck_ctrl = copy_bone_simple(arm, bone_definition[1], neck_name).name - head_ctrl = copy_bone_simple(arm, bone_definition[len(bone_definition)-1], head_name).name - eb[head_ctrl].tail += eb[neck_ctrl].head - eb[head_ctrl].head - eb[head_ctrl].head = eb[neck_ctrl].head - - # Create hinge and socket bones - neck_hinge = copy_bone_simple(arm, bone_definition[0], "MCH-" + neck_name + "_hinge").name - head_hinge = copy_bone_simple(arm, neck_ctrl, "MCH-" + head_name + "_hinge").name - eb[neck_hinge].tail += eb[neck_ctrl].head - eb[neck_hinge].head - eb[neck_hinge].head = eb[neck_ctrl].head - eb[head_hinge].tail += eb[neck_ctrl].head - eb[head_hinge].head - eb[head_hinge].head = eb[neck_ctrl].head - - neck_socket = copy_bone_simple(arm, bone_definition[1], "MCH-" + neck_name + "_socket").name - head_socket = copy_bone_simple(arm, bone_definition[1], "MCH-" + head_name + "_socket").name - - # Parent-child relationships between the body, hinges, controls, and sockets - eb[neck_ctrl].parent = eb[neck_hinge] - eb[head_ctrl].parent = eb[head_hinge] - - eb[neck_socket].parent = eb[body] - eb[head_socket].parent = eb[body] - - # Create neck bones - neck = [] # neck bones - neck_neck = [] # bones constrained to neck control - neck_head = [] # bones constrained to head control - for i in range(1, len(bone_definition)): - # Create bones - neck_bone = copy_bone_simple(arm, bone_definition[i], base_names[bone_definition[i]]).name - neck_neck_bone = copy_bone_simple(arm, neck_ctrl, "MCH-" + base_names[bone_definition[i]] + ".neck").name - neck_head_bone = copy_bone_simple(arm, head_ctrl, "MCH-" + base_names[bone_definition[i]] + ".head").name - - # Move them all to the same place - eb[neck_neck_bone].tail += eb[neck_bone].head - eb[neck_neck_bone].head - eb[neck_head_bone].tail += eb[neck_bone].head - eb[neck_neck_bone].head - eb[neck_neck_bone].head = eb[neck_bone].head - eb[neck_head_bone].head = eb[neck_bone].head - - # Parent/child relationships - eb[neck_bone].parent = eb[neck_head_bone] - eb[neck_head_bone].parent = eb[neck_neck_bone] - - if i > 1: - eb[neck_neck_bone].parent = eb[neck[i-2]] - else: - eb[neck_neck_bone].parent = eb[body] - - # Add them to the lists - neck += [neck_bone] - neck_neck += [neck_neck_bone] - neck_head += [neck_head_bone] - - # Create deformation rig - deform(obj, bone_definition, base_names, options) - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Axis locks - pb[neck_ctrl].lock_location = True, True, True - pb[head_ctrl].lock_location = True, True, True - - for bone in neck: - pb[bone].lock_location = True, True, True - - # Neck hinge - prop = rna_idprop_ui_prop_get(pb[neck_ctrl], "hinge", create=True) - pb[neck_ctrl]["hinge"] = 0.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["hard_min"] = 0.0 - prop["hard_max"] = 1.0 - - con = pb[neck_hinge].constraints.new('COPY_LOCATION') - con.name = "socket" - con.target = obj - con.subtarget = neck_socket - - con = pb[neck_hinge].constraints.new('COPY_ROTATION') - con.name = "hinge" - con.target = obj - con.subtarget = body - - hinge_driver_path = pb[neck_ctrl].path_from_id() + '["hinge"]' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = hinge_driver_path - - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - # Head hinge - prop = rna_idprop_ui_prop_get(pb[head_ctrl], "hinge", create=True) - pb[head_ctrl]["hinge"] = 0.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["hard_min"] = 0.0 - prop["hard_max"] = 1.0 - - con = pb[head_hinge].constraints.new('COPY_LOCATION') - con.name = "socket" - con.target = obj - con.subtarget = head_socket - - con = pb[head_hinge].constraints.new('COPY_ROTATION') - con.name = "hinge" - con.target = obj - con.subtarget = neck_ctrl - - hinge_driver_path = pb[head_ctrl].path_from_id() + '["hinge"]' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = hinge_driver_path - - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - # Neck rotation constraints - for i in range(0, len(neck_neck)): - con = pb[neck_neck[i]].constraints.new('COPY_ROTATION') - con.name = "neck rotation" - con.target = obj - con.subtarget = neck_ctrl - con.influence = (i+1) / len(neck_neck) - - - # Head rotation constraints/drivers - prop = rna_idprop_ui_prop_get(pb[head_ctrl], "extent", create=True) - if "extent" in options: - pb[head_ctrl]["extent"] = options["extent"] - else: - pb[head_ctrl]["extent"] = 0.5 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["hard_min"] = 0.0 - prop["hard_max"] = 1.0 - - extent_prop_path = pb[head_ctrl].path_from_id() + '["extent"]' - - for i in range(0, len(neck_head)): - con = pb[neck_head[i]].constraints.new('COPY_ROTATION') - con.name = "head rotation" - con.target = obj - con.subtarget = head_ctrl - - if i < (len(neck_head)-1): - inf = (i+1) / len(neck_head) - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - var.name = "ext" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = extent_prop_path - - driver.expression = "0 if ext == 0 else (((%s-1)/ext)+1)" % inf - else: - con.influence = 1.0 - - # Constrain original bones to the neck bones - for i in range(0, len(neck)): - con = pb[bone_definition[i+1]].constraints.new('COPY_TRANSFORMS') - con.name = "copy_transform" - con.target = obj - con.subtarget = neck[i] - - - # Set the controls' custom shapes to use other bones for transforms - pb[neck_ctrl].custom_shape_transform = pb[bone_definition[len(bone_definition)//2]] - pb[head_ctrl].custom_shape_transform = pb[bone_definition[len(bone_definition)-1]] - - - # last step setup layers - if "ex_layer" in options: - layer = [n==options["ex_layer"] for n in range(0,32)] - else: - layer = list(arm.bones[bone_definition[1]].layers) - for bone in neck: - bb[bone].layers = layer - - layer = list(arm.bones[bone_definition[1]].layers) - bb[neck_ctrl].layers = layer - bb[head_ctrl].layers = layer - - - # no blending the result of this - return None - diff --git a/release/scripts/modules/rigify/neck_flex.py b/release/scripts/modules/rigify/neck_flex.py deleted file mode 100644 index 7daf3d3bb4b..00000000000 --- a/release/scripts/modules/rigify/neck_flex.py +++ /dev/null @@ -1,348 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import bone_class_instance, copy_bone_simple -from rna_prop_ui import rna_idprop_ui_prop_get - -# not used, defined for completeness -METARIG_NAMES = ("body", "head") - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('body') - bone.head[:] = 0.0000, -0.0276, -0.1328 - bone.tail[:] = 0.0000, -0.0170, -0.0197 - bone.roll = 0.0000 - bone.use_connect = False - bone = arm.edit_bones.new('head') - bone.head[:] = 0.0000, -0.0170, -0.0197 - bone.tail[:] = 0.0000, 0.0726, 0.1354 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['body'] - bone = arm.edit_bones.new('neck.01') - bone.head[:] = 0.0000, -0.0170, -0.0197 - bone.tail[:] = 0.0000, -0.0099, 0.0146 - bone.roll = 0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['head'] - bone = arm.edit_bones.new('neck.02') - bone.head[:] = 0.0000, -0.0099, 0.0146 - bone.tail[:] = 0.0000, -0.0242, 0.0514 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['neck.01'] - bone = arm.edit_bones.new('neck.03') - bone.head[:] = 0.0000, -0.0242, 0.0514 - bone.tail[:] = 0.0000, -0.0417, 0.0868 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['neck.02'] - bone = arm.edit_bones.new('neck.04') - bone.head[:] = 0.0000, -0.0417, 0.0868 - bone.tail[:] = 0.0000, -0.0509, 0.1190 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['neck.03'] - bone = arm.edit_bones.new('neck.05') - bone.head[:] = 0.0000, -0.0509, 0.1190 - bone.tail[:] = 0.0000, -0.0537, 0.1600 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['neck.04'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['head'] - pbone['type'] = 'neck_flex' - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the head, its parent is the body, - # its only child the first of a chain with matching basenames. - eg. - body -> head -> neck_01 -> neck_02 -> neck_03.... etc - ''' - arm = obj.data - head = arm.bones[orig_bone_name] - body = head.parent - - children = head.children - if len(children) != 1: - raise RigifyError("expected the head bone '%s' to have only 1 child." % orig_bone_name) - - child = children[0] - bone_definition = [body.name, head.name, child.name] - bone_definition.extend([child.name for child in child.children_recursive_basename]) - return bone_definition - - -def deform(obj, definitions, base_names, options): - for org_bone_name in definitions[2:]: - bpy.ops.object.mode_set(mode='EDIT') - - # Create deform bone. - bone = copy_bone_simple(obj.data, org_bone_name, "DEF-%s" % base_names[org_bone_name], parent=True) - - # Store name before leaving edit mode - bone_name = bone.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bone - bone = obj.pose.bones[bone_name] - - # Constrain to the original bone - # XXX. Todo, is this needed if the bone is connected to its parent? - con = bone.constraints.new('COPY_TRANSFORMS') - con.name = "copy_loc" - con.target = obj - con.subtarget = org_bone_name - - -def main(obj, bone_definition, base_names, options): - from mathutils import Vector - - arm = obj.data - - # Initialize container classes for convenience - mt = bone_class_instance(obj, ["body", "head"]) # meta - mt.body = bone_definition[0] - mt.head = bone_definition[1] - mt.update() - - neck_chain = bone_definition[2:] - - mt_chain = bone_class_instance(obj, [("neck_%.2d" % (i + 1)) for i in range(len(neck_chain))]) # 99 bones enough eh? - for i, attr in enumerate(mt_chain.attr_names): - setattr(mt_chain, attr, neck_chain[i]) - mt_chain.update() - - neck_chain_basename = base_names[mt_chain.neck_01_e.name].split(".")[0] - neck_chain_segment_length = mt_chain.neck_01_e.length - - ex = bone_class_instance(obj, ["head", "head_hinge", "neck_socket", "head_ctrl"]) # hinge & extras - - # Add the head hinge at the bodys location, becomes the parent of the original head - - # apply everything to this copy of the chain - ex_chain = mt_chain.copy(base_names=base_names) - ex_chain.neck_01_e.parent = mt_chain.neck_01_e.parent - - - # Copy the head bone and offset - ex.head_e = copy_bone_simple(arm, mt.head, "MCH-%s" % base_names[mt.head], parent=True) - ex.head_e.use_connect = False - ex.head = ex.head_e.name - # offset - head_length = ex.head_e.length - ex.head_e.head.y += head_length / 2.0 - ex.head_e.tail.y += head_length / 2.0 - - # Yes, use the body bone but call it a head hinge - ex.head_hinge_e = copy_bone_simple(arm, mt.body, "MCH-%s_hinge" % base_names[mt.head], parent=False) - ex.head_hinge_e.use_connect = False - ex.head_hinge = ex.head_hinge_e.name - ex.head_hinge_e.head.y += head_length / 4.0 - ex.head_hinge_e.tail.y += head_length / 4.0 - - # Insert the neck socket, the head copys this loation - ex.neck_socket_e = arm.edit_bones.new("MCH-%s_socked" % neck_chain_basename) - ex.neck_socket = ex.neck_socket_e.name - ex.neck_socket_e.use_connect = False - ex.neck_socket_e.parent = mt.body_e - ex.neck_socket_e.head = mt.head_e.head - ex.neck_socket_e.tail = mt.head_e.head - Vector((0.0, neck_chain_segment_length / 2.0, 0.0)) - ex.neck_socket_e.roll = 0.0 - - - # copy of the head for controling - ex.head_ctrl_e = copy_bone_simple(arm, mt.head, base_names[mt.head]) - ex.head_ctrl = ex.head_ctrl_e.name - ex.head_ctrl_e.parent = ex.head_hinge_e - - for i, attr in enumerate(ex_chain.attr_names): - neck_e = getattr(ex_chain, attr + "_e") - - # dont store parent names, re-reference as each chain bones parent. - neck_e_parent = arm.edit_bones.new("MCH-rot_%s" % base_names[getattr(mt_chain, attr)]) - neck_e_parent.head = neck_e.head - neck_e_parent.tail = neck_e.head + (mt.head_e.vector.normalize() * neck_chain_segment_length / 2.0) - neck_e_parent.roll = mt.head_e.roll - - orig_parent = neck_e.parent - neck_e.use_connect = False - neck_e.parent = neck_e_parent - neck_e_parent.use_connect = False - - if i == 0: - neck_e_parent.parent = mt.body_e - else: - neck_e_parent.parent = orig_parent - - deform(obj, bone_definition, base_names, options) - - bpy.ops.object.mode_set(mode='OBJECT') - - mt.update() - mt_chain.update() - ex_chain.update() - ex.update() - - # Axis locks - ex.head_ctrl_p.lock_location = True, True, True - - # Simple one off constraints, no drivers - con = ex.head_ctrl_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = ex.neck_socket - - con = ex.head_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = ex.head_ctrl - - # driven hinge - prop = rna_idprop_ui_prop_get(ex.head_ctrl_p, "hinge", create=True) - ex.head_ctrl_p["hinge"] = 0.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - con = ex.head_hinge_p.constraints.new('COPY_ROTATION') - con.name = "hinge" - con.target = obj - con.subtarget = mt.body - - # add driver - hinge_driver_path = ex.head_ctrl_p.path_from_id() + '["hinge"]' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = hinge_driver_path - - #mod = fcurve_driver.modifiers.new('GENERATOR') - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - head_driver_path = ex.head_ctrl_p.path_from_id() - - target_names = [("b%.2d" % (i + 1)) for i in range(len(neck_chain))] - - ex.head_ctrl_p["bend_tot"] = 0.0 - fcurve = ex.head_ctrl_p.driver_add('["bend_tot"]') - driver = fcurve.driver - driver.type = 'SUM' - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - for i in range(len(neck_chain)): - var = driver.variables.new() - var.name = target_names[i] - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = head_driver_path + ('["bend_%.2d"]' % (i + 1)) - - - for i, attr in enumerate(ex_chain.attr_names): - neck_p = getattr(ex_chain, attr + "_p") - neck_p.lock_location = True, True, True - neck_p.lock_location = True, True, True - neck_p.lock_rotations_4d = True - - # Add bend prop - prop_name = "bend_%.2d" % (i + 1) - prop = rna_idprop_ui_prop_get(ex.head_ctrl_p, prop_name, create=True) - ex.head_ctrl_p[prop_name] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - # add parent constraint - neck_p_parent = neck_p.parent - - # add constraint - con = neck_p_parent.constraints.new('COPY_ROTATION') - con.name = "Copy Rotation" - con.target = obj - con.subtarget = ex.head - con.owner_space = 'LOCAL' - con.target_space = 'LOCAL' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'SCRIPTED' - driver.expression = "bend/bend_tot" - - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - - # add target - var = driver.variables.new() - var.name = "bend_tot" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = head_driver_path + ('["bend_tot"]') - - var = driver.variables.new() - var.name = "bend" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = head_driver_path + ('["%s"]' % prop_name) - - - # finally constrain the original bone to this one - orig_neck_p = getattr(mt_chain, attr + "_p") - con = orig_neck_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = neck_p.name - - - # Set the head control's custom shape to use the last - # org neck bone for its transform - ex.head_ctrl_p.custom_shape_transform = obj.pose.bones[bone_definition[len(bone_definition)-1]] - - - # last step setup layers - if "ex_layer" in options: - layer = [n == options["ex_layer"] for n in range(0, 32)] - else: - layer = list(arm.bones[bone_definition[1]].layers) - for attr in ex_chain.attr_names: - getattr(ex_chain, attr + "_b").layers = layer - for attr in ex.attr_names: - getattr(ex, attr + "_b").layers = layer - - layer = list(arm.bones[bone_definition[1]].layers) - ex.head_ctrl_b.layers = layer - - - # no blending the result of this - return None diff --git a/release/scripts/modules/rigify/palm_curl.py b/release/scripts/modules/rigify/palm_curl.py deleted file mode 100644 index c063e2b31c9..00000000000 --- a/release/scripts/modules/rigify/palm_curl.py +++ /dev/null @@ -1,270 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify_utils import copy_bone_simple, get_side_name -from rna_prop_ui import rna_idprop_ui_prop_get - -# not used, defined for completeness -METARIG_NAMES = tuple() - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('hand') - bone.head[:] = 0.0004, -0.0629, 0.0000 - bone.tail[:] = 0.0021, -0.0209, 0.0000 - bone.roll = 0.0000 - bone.use_connect = False - bone = arm.edit_bones.new('palm.03') - bone.head[:] = -0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0025, 0.0644, -0.0065 - bone.roll = -3.1396 - bone.use_connect = False - bone.parent = arm.edit_bones['hand'] - bone = arm.edit_bones.new('palm.02') - bone.head[:] = 0.0252, -0.0000, 0.0000 - bone.tail[:] = 0.0324, 0.0627, -0.0065 - bone.roll = -3.1357 - bone.use_connect = False - bone.parent = arm.edit_bones['hand'] - bone = arm.edit_bones.new('palm.01') - bone.head[:] = 0.0504, 0.0000, 0.0000 - bone.tail[:] = 0.0703, 0.0508, -0.0065 - bone.roll = -3.1190 - bone.use_connect = False - bone.parent = arm.edit_bones['hand'] - bone = arm.edit_bones.new('palm.04') - bone.head[:] = -0.0252, 0.0000, 0.0000 - bone.tail[:] = -0.0286, 0.0606, -0.0065 - bone.roll = 3.1386 - bone.use_connect = False - bone.parent = arm.edit_bones['hand'] - bone = arm.edit_bones.new('palm.05') - bone.head[:] = -0.0504, 0.0000, 0.0000 - bone.tail[:] = -0.0669, 0.0534, -0.0065 - bone.roll = 3.1239 - bone.use_connect = False - bone.parent = arm.edit_bones['hand'] - bone = arm.edit_bones.new('thumb') - bone.head[:] = 0.0682, -0.0148, 0.0000 - bone.tail[:] = 0.1063, 0.0242, -0.0065 - bone.roll = -3.0929 - bone.use_connect = False - bone.parent = arm.edit_bones['hand'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['palm.01'] - pbone['type'] = 'palm_curl' - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the first in an array of siblings with a matching basename - sorted with pointer first, little finger last. - eg. - [pointer, middle, ring, pinky... ] # any number of fingers - ''' - arm = obj.data - - palm_bone = arm.bones[orig_bone_name] - palm_parent = palm_bone.parent - palm_base = palm_bone.basename - bone_definition = [bone.name for bone in palm_parent.children if bone.basename == palm_base] - bone_definition.sort() - bone_definition.reverse() - - return [palm_parent.name] + bone_definition - - -def deform(obj, definitions, base_names, options): - for org_bone_name in definitions[1:]: - bpy.ops.object.mode_set(mode='EDIT') - - # Create deform bone. - bone = copy_bone_simple(obj.data, org_bone_name, "DEF-%s" % base_names[org_bone_name], parent=True) - - # Store name before leaving edit mode - bone_name = bone.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bone - bone = obj.pose.bones[bone_name] - - # Constrain to the original bone - # XXX. Todo, is this needed if the bone is connected to its parent? - con = bone.constraints.new('COPY_TRANSFORMS') - con.name = "copy_loc" - con.target = obj - con.subtarget = org_bone_name - - -def main(obj, bone_definition, base_names, options): - arm = obj.data - - children = bone_definition[1:] - - # Make a copy of the pinky - # simply assume the pinky has the lowest name - pinky_ebone = arm.edit_bones[children[0]] - ring_ebone = arm.edit_bones[children[1]] - - # FIXME, why split the second one? - base_name = base_names[pinky_ebone.name].rsplit('.', 2)[0] - - control_ebone = copy_bone_simple(arm, pinky_ebone.name, base_name + get_side_name(base_names[pinky_ebone.name]), parent=True) - control_name = control_ebone.name - - offset = (pinky_ebone.head - ring_ebone.head) - - control_ebone.translate(offset) - - deform(obj, bone_definition, base_names, options) - - bpy.ops.object.mode_set(mode='OBJECT') - - arm = obj.data - control_pbone = obj.pose.bones[control_name] - pinky_pbone = obj.pose.bones[children[0]] - - control_pbone.rotation_mode = 'YZX' - control_pbone.lock_rotation = False, True, True - control_pbone.lock_location = True, True, True - - driver_fcurves = pinky_pbone.driver_add("rotation_euler") - - - controller_path = control_pbone.path_from_id() - - # add custom prop - control_pbone["spread"] = 0.0 - prop = rna_idprop_ui_prop_get(control_pbone, "spread", create=True) - prop["soft_min"] = -1.0 - prop["soft_max"] = 1.0 - prop["min"] = -1.0 - prop["max"] = 1.0 - - - # ***** - driver = driver_fcurves[0].driver - driver.type = 'AVERAGE' - - var = driver.variables.new() - var.name = "x" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = controller_path + ".rotation_euler[0]" - - - # ***** - driver = driver_fcurves[1].driver - driver.expression = "-x/4.0" - - var = driver.variables.new() - var.name = "x" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = controller_path + ".rotation_euler[0]" - - - # ***** - driver = driver_fcurves[2].driver - driver.expression = "(1.0-cos(x))-s" - - for fcurve in driver_fcurves: - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - var = driver.variables.new() - var.name = "x" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = controller_path + ".rotation_euler[0]" - - var = driver.variables.new() - var.name = "s" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = controller_path + '["spread"]' - - - for i, child_name in enumerate(children): - child_pbone = obj.pose.bones[child_name] - child_pbone.rotation_mode = 'YZX' - - if child_name != children[-1] and child_name != children[0]: - - # this is somewhat arbitrary but seems to look good - inf = i / (len(children) + 1) - inf = 1.0 - inf - inf = ((inf * inf) + inf) / 2.0 - - # used for X/Y constraint - inf_minor = inf * inf - - con = child_pbone.constraints.new('COPY_ROTATION') - con.name = "Copy Z Rot" - con.target = obj - con.subtarget = children[0] # also pinky_pbone - con.owner_space = con.target_space = 'LOCAL' - con.use_x, con.use_y, con.use_z = False, False, True - con.influence = inf - - con = child_pbone.constraints.new('COPY_ROTATION') - con.name = "Copy XY Rot" - con.target = obj - con.subtarget = children[0] # also pinky_pbone - con.owner_space = con.target_space = 'LOCAL' - con.use_x, con.use_y, con.use_z = True, True, False - con.influence = inf_minor - - - child_pbone = obj.pose.bones[children[-1]] - child_pbone.rotation_mode = 'QUATERNION' - - # fix at the end since there is some trouble with tx info not being updated otherwise - def x_direction(): - # NOTE: the direction of the Z rotation depends on which side the palm is on. - # we could do a simple side-of-x test but better to work out the direction - # the hand is facing. - from mathutils import Vector - from math import degrees - child_pbone_01 = obj.pose.bones[children[0]].bone - child_pbone_02 = obj.pose.bones[children[1]].bone - - rel_vec = child_pbone_01.head - child_pbone_02.head - x_vec = child_pbone_01.matrix.rotation_part() * Vector((1.0, 0.0, 0.0)) - - return degrees(rel_vec.angle(x_vec)) > 90.0 - - if x_direction(): # flip - driver.expression = "-(%s)" % driver.expression - - - # last step setup layers - arm.bones[control_name].layers = list(arm.bones[bone_definition[1]].layers) - - - # no blending the result of this - return None diff --git a/release/scripts/modules/rigify/shape_key_control.py b/release/scripts/modules/rigify/shape_key_control.py deleted file mode 100644 index a5f57313ab5..00000000000 --- a/release/scripts/modules/rigify/shape_key_control.py +++ /dev/null @@ -1,320 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import copy_bone_simple -from rna_prop_ui import rna_idprop_ui_prop_get - -#METARIG_NAMES = ("cpy",) -RIG_TYPE = "shape_key_control" - - -def addget_shape_key(obj, name="Key"): - """ Fetches a shape key, or creates it if it doesn't exist - """ - # Create a shapekey set if it doesn't already exist - if obj.data.shape_keys is None: - shape = obj.add_shape_key(name="Basis", from_mix=False) - obj.active_shape_key_index = 0 - - # Get the shapekey, or create it if it doesn't already exist - if name in obj.data.shape_keys.keys: - shape_key = obj.data.shape_keys.keys[name] - else: - shape_key = obj.add_shape_key(name=name, from_mix=False) - - return shape_key - - -def addget_shape_key_driver(obj, name="Key"): - """ Fetches the driver for the shape key, or creates it if it doesn't - already exist. - """ - driver_path = 'keys["' + name + '"].value' - fcurve = None - driver = None - new = False - if obj.data.shape_keys.animation_data is not None: - for driver_s in obj.data.shape_keys.animation_data.drivers: - if driver_s.data_path == driver_path: - fcurve = driver_s - if fcurve is None: - fcurve = obj.data.shape_keys.keys[name].driver_add("value") - fcurve.driver.type = 'AVERAGE' - new = True - - return fcurve, new - - -# TODO: -def metarig_template(): - # generated by rigify.write_meta_rig - #bpy.ops.object.mode_set(mode='EDIT') - #obj = bpy.context.active_object - #arm = obj.data - #bone = arm.edit_bones.new('Bone') - #bone.head[:] = 0.0000, 0.0000, 0.0000 - #bone.tail[:] = 0.0000, 0.0000, 1.0000 - #bone.roll = 0.0000 - #bone.use_connect = False - # - #bpy.ops.object.mode_set(mode='OBJECT') - #pbone = obj.pose.bones['Bone'] - #pbone['type'] = 'copy' - pass - - -def metarig_definition(obj, orig_bone_name): - bone = obj.data.bones[orig_bone_name] - return [bone.name] - - -def main(obj, definitions, base_names, options): - """ A rig that drives shape keys with the local transforms and/or custom - properties of a single bone. - A different shape can be driven by the negative value of a transform as - well by giving a comma-separated list of two shapes. - - Required options: - mesh: name of mesh object(s) to add/get shapekeys to/from - (if multiple objects, make a comma-separated list) - Optional options: - loc_: name of the shape key to tie to translation of the bone - loc__fac: default multiplier of the bone influence on the shape key - rot_: name of the shape key to tie to rotation of the bone - rot__fac: default multiplier of the bone influence on the shape key - scale_: name of the shape key to tie to scale of the bone - scale__fac: default multiplier of the bone influence on the shape key - shape_key_sliders: comma-separated list of custom properties to create sliders out of for driving shape keys - : for each property listed in shape_key_sliders, specify a shape key for it to drive - - """ - - bpy.ops.object.mode_set(mode='EDIT') - eb = obj.data.edit_bones - pb = obj.pose.bones - - org_bone = definitions[0] - - # Options - req_options = ["mesh"] - for option in req_options: - if option not in options: - raise RigifyError("'%s' rig type requires a '%s' option (bone: %s)" % (RIG_TYPE, option, base_names[definitions[0]])) - - meshes = options["mesh"].replace(" ", "").split(",") - - bone = copy_bone_simple(obj.data, org_bone, base_names[org_bone], parent=True).name - - bpy.ops.object.mode_set(mode='OBJECT') - - # Set rotation mode and axis locks - pb[bone].rotation_mode = pb[org_bone].rotation_mode - pb[bone].lock_location = tuple(pb[org_bone].lock_location) - pb[bone].lock_rotation = tuple(pb[org_bone].lock_rotation) - pb[bone].lock_rotation_w = pb[org_bone].lock_rotation_w - pb[bone].lock_rotations_4d = pb[org_bone].lock_rotations_4d - pb[bone].lock_scale = tuple(pb[org_bone].lock_scale) - - # List of rig options for specifying shape keys - # Append '_fac' to the end for the name of the corresponding 'factor - # default' option for that shape - shape_key_options = ["loc_x", - "loc_y", - "loc_z", - "rot_x", - "rot_y", - "rot_z", - "scale_x", - "scale_y", - "scale_z"] - - driver_paths = {"loc_x":".location[0]", - "loc_y":".location[1]", - "loc_z":".location[2]", - "rot_x":".rotation_euler[0]", - "rot_y":".rotation_euler[1]", - "rot_z":".rotation_euler[2]", - "qrot_x":".rotation_quaternion[1]", - "qrot_y":".rotation_quaternion[2]", - "qrot_z":".rotation_quaternion[3]", - "scale_x":".scale[0]", - "scale_y":".scale[1]", - "scale_z":".scale[2]"} - - # Create the shape keys and drivers for transforms - shape_info = [] - for option in shape_key_options: - if option in options: - shape_names = options[option].replace(" ", "").split(",") - - var_name = bone.replace(".","").replace("-","_") + "_" + option - # Different RNA paths for euler vs quat - if option in (shape_key_options[3:6]+shape_key_options[12:15]) \ - and pb[bone].rotation_mode == 'QUATERNION': - var_path = driver_paths['q' + option] - else: - var_path = driver_paths[option] - - if (option+"_fac") in options: - fac = options[option+"_fac"] - else: - fac = 1.0 - - # Positive - if shape_names[0] != "": - # Different expressions for loc/rot/scale and positive/negative - if option in shape_key_options[:3]: - # Location - expression = var_name + " * " + str(fac) - elif option in shape_key_options[3:6]: - # Rotation - # Different expressions for euler vs quats - if pb[bone].rotation_mode == 'QUATERNION': - expression = "2 * asin(" + var_name + ") * " + str(fac) - else: - expression = var_name + " * " + str(fac) - elif option in shape_key_options[6:9]: - # Scale - expression = "(1.0 - " + var_name + ") * " + str(fac) + " * -2" - shape_name = shape_names[0] - create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression) - - # Negative - if shape_names[0] != "" and len(shape_names) > 1: - # Different expressions for loc/rot/scale and positive/negative - if option in shape_key_options[:3]: - # Location - expression = var_name + " * " + str(fac) + " * -1" - elif option in shape_key_options[3:6]: - # Rotation - # Different expressions for euler vs quats - if pb[bone].rotation_mode == 'QUATERNION': - expression = "-2 * asin(" + var_name + ") * " + str(fac) - else: - expression = var_name + " * " + str(fac) + " * -1" - elif option in shape_key_options[6:9]: - # Scale - expression = "(1.0 - " + var_name + ") * " + str(fac) + " * 2" - shape_name = shape_names[1] - create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression) - - # Create the shape keys and drivers for custom-property sliders - if "shape_key_sliders" in options: - # Get the slider names - slider_names = options["shape_key_sliders"].replace(" ", "").split(",") - if slider_names[0] != "": - # Loop through the slider names and check if they have - # shape keys specified for them, and if so, set them up. - for slider_name in slider_names: - if slider_name in options: - shape_names = options[slider_name].replace(" ", "").split(",") - - # Set up the custom property on the bone - prop = rna_idprop_ui_prop_get(pb[bone], slider_name, create=True) - pb[bone][slider_name] = 0.0 - prop["min"] = 0.0 - prop["max"] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - if len(shape_names) > 1: - prop["min"] = -1.0 - prop["soft_min"] = -1.0 - - # Add the shape drivers - # Positive - if shape_names[0] != "": - # Set up the variables for creating the shape key driver - shape_name = shape_names[0] - var_name = slider_name.replace(".", "_").replace("-", "_") - var_path = '["' + slider_name + '"]' - if slider_name + "_fac" in options: - fac = options[slider_name + "_fac"] - else: - fac = 1.0 - expression = var_name + " * " + str(fac) - # Create the shape key driver - create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression) - # Negative - if shape_names[0] != "" and len(shape_names) > 1: - # Set up the variables for creating the shape key driver - shape_name = shape_names[1] - var_name = slider_name.replace(".", "_").replace("-", "_") - var_path = '["' + slider_name + '"]' - if slider_name + "_fac" in options: - fac = options[slider_name + "_fac"] - else: - fac = 1.0 - expression = var_name + " * " + str(fac) + " * -1" - # Create the shape key driver - create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression) - - - # Org bone copy transforms of control bone - con = pb[org_bone].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = bone - - return (None,) - - -def create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression): - """ Creates/gets a shape key and sets up a driver for it. - - obj = armature object - bone = driving bone name - meshes = list of meshes to create the shapekey/driver on - shape_name = name of the shape key - var_name = name of the driving variable - var_path = path to the property on the bone to drive with - expression = python expression for the driver - """ - pb = obj.pose.bones - bpy.ops.object.mode_set(mode='OBJECT') - - for mesh_name in meshes: - mesh_obj = bpy.data.objects[mesh_name] - - # Add/get the shape key - shape = addget_shape_key(mesh_obj, name=shape_name) - - # Add/get the shape key driver - fcurve, a = addget_shape_key_driver(mesh_obj, name=shape_name) - - # Set up the driver - driver = fcurve.driver - driver.type = 'SCRIPTED' - driver.expression = expression - - # Get the variable, or create it if it doesn't already exist - if var_name in driver.variables: - var = driver.variables[var_name] - else: - var = driver.variables.new() - var.name = var_name - - # Set up the variable - var.type = "SINGLE_PROP" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = 'pose.bones["' + bone + '"]' + var_path - - diff --git a/release/scripts/modules/rigify/shape_key_distance.py b/release/scripts/modules/rigify/shape_key_distance.py deleted file mode 100644 index 3045fcdab0d..00000000000 --- a/release/scripts/modules/rigify/shape_key_distance.py +++ /dev/null @@ -1,172 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError - -#METARIG_NAMES = ("cpy",) -RIG_TYPE = "shape_key_distance" - - -def addget_shape_key(obj, name="Key"): - """ Fetches a shape key, or creates it if it doesn't exist - """ - # Create a shapekey set if it doesn't already exist - if obj.data.shape_keys is None: - shape = obj.add_shape_key(name="Basis", from_mix=False) - obj.active_shape_key_index = 0 - - # Get the shapekey, or create it if it doesn't already exist - if name in obj.data.shape_keys.keys: - shape_key = obj.data.shape_keys.keys[name] - else: - shape_key = obj.add_shape_key(name=name, from_mix=False) - - return shape_key - - -def addget_shape_key_driver(obj, name="Key"): - """ Fetches the driver for the shape key, or creates it if it doesn't - already exist. - """ - driver_path = 'keys["' + name + '"].value' - fcurve = None - driver = None - if obj.data.shape_keys.animation_data is not None: - for driver_s in obj.data.shape_keys.animation_data.drivers: - if driver_s.data_path == driver_path: - fcurve = driver_s - if fcurve is None: - fcurve = obj.data.shape_keys.keys[name].driver_add("value") - fcurve.driver.type = 'AVERAGE' - - return fcurve - - - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('Bone') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0000, 0.0000, 1.0000 - bone.roll = 0.0000 - bone.use_connect = False - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['Bone'] - pbone['type'] = 'copy' - - -def metarig_definition(obj, orig_bone_name): - bone = obj.data.bones[orig_bone_name] - return [bone.name] - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - eb = obj.data.edit_bones - - bone_from = definitions[0] - - - # Options - req_options = ["to", "mesh", "shape_key"] - for option in req_options: - if option not in options: - raise RigifyError("'%s' rig type requires a '%s' option (bone: %s)" % (RIG_TYPE, option, base_names[definitions[0]])) - - bone_to = "ORG-" + options["to"] - meshes = options["mesh"].replace(" ", "").split(",") - shape_key_name = options["shape_key"] - - if "dmul" in options: - shape_blend_fac = options["dmul"] - else: - shape_blend_fac = 1.0 - - - # Calculate the distance between the bones - distance = (eb[bone_from].head - eb[bone_to].head).length - - bpy.ops.object.mode_set(mode='OBJECT') - - # For every listed mesh object - for mesh_name in meshes: - mesh_obj = bpy.data.objects[mesh_name] - - # Add/get the shape key - shape_key = addget_shape_key(mesh_obj, name=shape_key_name) - - # Add/get the shape key driver - fcurve = addget_shape_key_driver(mesh_obj, name=shape_key_name) - driver = fcurve.driver - - # Get the variable, or create it if it doesn't already exist - var_name = base_names[bone_from] - if var_name in driver.variables: - var = driver.variables[var_name] - else: - var = driver.variables.new() - var.name = var_name - - # Set up the variable - var.type = "LOC_DIFF" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].bone_target = bone_from - var.targets[1].id_type = 'OBJECT' - var.targets[1].id = obj - var.targets[1].bone_target = bone_to - - # Set fcurve offset, so zero is at the rest distance - - mod = fcurve.modifiers[0] - if distance > 0.00001: - mod.coefficients[0] = -shape_blend_fac - mod.coefficients[1] = shape_blend_fac / distance - - return (None,) - - - - -def control(obj, definitions, base_names, options): - """ options: - mesh: name of mesh object with the shape key - shape_key: name of shape key - to: name of bone to measure distance from - """ - pass - - - - -def main(obj, bone_definition, base_names, options): - # Create control rig - #control(obj, bone_definition, base_names, options) - # Create deform rig - deform(obj, bone_definition, base_names, options) - - return (None,) - diff --git a/release/scripts/modules/rigify/shape_key_rotdiff.py b/release/scripts/modules/rigify/shape_key_rotdiff.py deleted file mode 100644 index a6ba5adfe6b..00000000000 --- a/release/scripts/modules/rigify/shape_key_rotdiff.py +++ /dev/null @@ -1,172 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError - -#METARIG_NAMES = ("cpy",) -RIG_TYPE = "shape_key_rotdiff" - - -def addget_shape_key(obj, name="Key"): - """ Fetches a shape key, or creates it if it doesn't exist - """ - # Create a shapekey set if it doesn't already exist - if obj.data.shape_keys is None: - shape = obj.add_shape_key(name="Basis", from_mix=False) - obj.active_shape_key_index = 0 - - # Get the shapekey, or create it if it doesn't already exist - if name in obj.data.shape_keys.keys: - shape_key = obj.data.shape_keys.keys[name] - else: - shape_key = obj.add_shape_key(name=name, from_mix=False) - - return shape_key - - -def addget_shape_key_driver(obj, name="Key"): - """ Fetches the driver for the shape key, or creates it if it doesn't - already exist. - """ - driver_path = 'keys["' + name + '"].value' - fcurve = None - driver = None - if obj.data.shape_keys.animation_data is not None: - for driver_s in obj.data.shape_keys.animation_data.drivers: - if driver_s.data_path == driver_path: - fcurve = driver_s - if fcurve is None: - fcurve = obj.data.shape_keys.keys[name].driver_add("value") - fcurve.driver.type = 'AVERAGE' - - return fcurve - - - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('Bone') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0000, 0.0000, 1.0000 - bone.roll = 0.0000 - bone.use_connect = False - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['Bone'] - pbone['type'] = 'copy' - - -def metarig_definition(obj, orig_bone_name): - bone = obj.data.bones[orig_bone_name] - return [bone.name] - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - eb = obj.data.edit_bones - - bone_from = definitions[0] - - - # Options - req_options = ["to", "mesh", "shape_key"] - for option in req_options: - if option not in options: - raise RigifyError("'%s' rig type requires a '%s' option (bone: %s)" % (RIG_TYPE, option, base_names[definitions[0]])) - - bone_to = "ORG-" + options["to"] - meshes = options["mesh"].replace(" ", "").split(",") - shape_key_name = options["shape_key"] - - if "dmul" in options: - shape_blend_fac = options["dmul"] - else: - shape_blend_fac = 1.0 - - - # Calculate the rotation difference between the bones - rotdiff = (eb[bone_from].matrix.to_quat() * eb[bone_to].matrix.to_quat()) * 2 - - bpy.ops.object.mode_set(mode='OBJECT') - - # For every listed mesh object - for mesh_name in meshes: - mesh_obj = bpy.data.objects[mesh_name] - - # Add/get the shape key - shape_key = addget_shape_key(mesh_obj, name=shape_key_name) - - # Add/get the shape key driver - fcurve = addget_shape_key_driver(mesh_obj, name=shape_key_name) - driver = fcurve.driver - - # Get the variable, or create it if it doesn't already exist - var_name = base_names[bone_from] - if var_name in driver.variables: - var = driver.variables[var_name] - else: - var = driver.variables.new() - var.name = var_name - - # Set up the variable - var.type = "ROTATION_DIFF" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].bone_target = bone_from - var.targets[1].id_type = 'OBJECT' - var.targets[1].id = obj - var.targets[1].bone_target = bone_to - - # Set fcurve offset, so zero is at the rest distance - - mod = fcurve.modifiers[0] - if rotdiff > 0.00001: - mod.coefficients[0] = -shape_blend_fac - mod.coefficients[1] = shape_blend_fac / rotdiff - - return (None,) - - - - -def control(obj, definitions, base_names, options): - """ options: - mesh: name of mesh object with the shape key - shape_key: name of shape key - to: name of bone to measure distance from - """ - pass - - - - -def main(obj, bone_definition, base_names, options): - # Create control rig - #control(obj, bone_definition, base_names, options) - # Create deform rig - deform(obj, bone_definition, base_names, options) - - return (None,) - diff --git a/release/scripts/modules/rigify/spine_pivot_flex.py b/release/scripts/modules/rigify/spine_pivot_flex.py deleted file mode 100644 index 7782380eedb..00000000000 --- a/release/scripts/modules/rigify/spine_pivot_flex.py +++ /dev/null @@ -1,481 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import bone_class_instance, copy_bone_simple -from rna_prop_ui import rna_idprop_ui_prop_get - -# not used, defined for completeness -METARIG_NAMES = ("pelvis", "ribcage") - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('pelvis') - bone.head[:] = 0.0000, -0.0306, 0.1039 - bone.tail[:] = 0.0000, -0.0306, -0.0159 - bone.roll = 0.0000 - bone.use_connect = False - bone = arm.edit_bones.new('rib_cage') - bone.head[:] = 0.0000, -0.0306, 0.1039 - bone.tail[:] = 0.0000, -0.0306, 0.2236 - bone.roll = -0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['pelvis'] - bone = arm.edit_bones.new('spine.01') - bone.head[:] = 0.0000, 0.0000, -0.0000 - bone.tail[:] = 0.0000, -0.0306, 0.1039 - bone.roll = -0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['rib_cage'] - bone = arm.edit_bones.new('spine.02') - bone.head[:] = 0.0000, -0.0306, 0.1039 - bone.tail[:] = -0.0000, -0.0398, 0.2045 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.01'] - bone = arm.edit_bones.new('spine.03') - bone.head[:] = -0.0000, -0.0398, 0.2045 - bone.tail[:] = -0.0000, -0.0094, 0.2893 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.02'] - bone = arm.edit_bones.new('spine.04') - bone.head[:] = -0.0000, -0.0094, 0.2893 - bone.tail[:] = -0.0000, 0.0335, 0.3595 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.03'] - bone = arm.edit_bones.new('spine.05') - bone.head[:] = -0.0000, 0.0335, 0.3595 - bone.tail[:] = -0.0000, 0.0555, 0.4327 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.04'] - bone = arm.edit_bones.new('spine.06') - bone.head[:] = -0.0000, 0.0555, 0.4327 - bone.tail[:] = -0.0000, 0.0440, 0.5207 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.05'] - bone = arm.edit_bones.new('spine.07') - bone.head[:] = -0.0000, 0.0440, 0.5207 - bone.tail[:] = -0.0000, 0.0021, 0.5992 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.06'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['rib_cage'] - pbone['type'] = 'spine_pivot_flex' - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the second in a chain. - Expects at least 1 parent and a chain of children withe the same basename - eg. - pelvis -> rib_cage -> spine.01 -> spine.02 -> spine.03 - - note: same as neck. - ''' - arm = obj.data - ribcage = arm.bones[orig_bone_name] - pelvis = ribcage.parent - - if pelvis is None: - raise RigifyError("expected the ribcage bone:'%s' to have a parent (ribcage)." % ribcage.name) - - children = ribcage.children - if len(children) != 1: - raise RigifyError("expected the ribcage to have only 1 child.") - - child = children[0] - - bone_definition = [pelvis.name, ribcage.name, child.name] - bone_definition.extend([child.name for child in child.children_recursive_basename]) - return bone_definition - - -def fk(*args): - main(*args) - - -def deform(obj, definitions, base_names, options): - for org_bone_name in definitions[2:]: - bpy.ops.object.mode_set(mode='EDIT') - - # Create deform bone. - bone = copy_bone_simple(obj.data, org_bone_name, "DEF-%s" % base_names[org_bone_name], parent=True) - - # Store name before leaving edit mode - bone_name = bone.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bone - bone = obj.pose.bones[bone_name] - - # Constrain to the original bone - # XXX. Todo, is this needed if the bone is connected to its parent? - con = bone.constraints.new('COPY_TRANSFORMS') - con.name = "copy_loc" - con.target = obj - con.subtarget = org_bone_name - - -def main(obj, bone_definition, base_names, options): - from mathutils import Vector, Matrix - from math import radians, pi - - arm = obj.data - - # Initialize container classes for convenience - mt = bone_class_instance(obj, ["pelvis", "ribcage"]) # meta - mt.pelvis = bone_definition[0] - mt.ribcage = bone_definition[1] - mt.update() - - spine_chain_orig = tuple(bone_definition[2:]) - spine_chain = [arm.edit_bones[child_name] for child_name in spine_chain_orig] - spine_chain_basename = base_names[spine_chain[0].name].rsplit(".", 1)[0] # probably 'ORG-spine.01' -> 'spine' - spine_chain_len = len(spine_chain_orig) - - child = spine_chain[0] - spine_chain_segment_length = child.length - #child.parent = mt.pelvis_e # was mt.ribcage - - # The first bone in the chain happens to be the basis of others, create them now - ex = bone_class_instance(obj, ["pelvis_copy", "ribcage_hinge", "ribcage_copy", "spine_rotate"]) - - ex.pelvis_copy_e = copy_bone_simple(arm, mt.pelvis, base_names[mt.pelvis]) # no parent - ex.pelvis_copy = ex.pelvis_copy_e.name - ex.pelvis_copy_e.use_local_location = False - - # copy the pelvis, offset to make MCH-spine_rotate and MCH-ribcage_hinge - ex.ribcage_hinge_e = copy_bone_simple(arm, mt.pelvis, "MCH-%s_hinge" % base_names[mt.ribcage]) - ex.ribcage_hinge = ex.ribcage_hinge_e.name - ex.ribcage_hinge_e.translate(Vector((0.0, spine_chain_segment_length / 4.0, 0.0))) - - ex.spine_rotate_e = copy_bone_simple(arm, mt.ribcage, "MCH-%s_rotate" % spine_chain_basename) - ex.spine_rotate = ex.spine_rotate_e.name - ex.spine_rotate_e.translate(Vector((0.0, spine_chain_segment_length / 2.0, 0.0))) - ex.spine_rotate_e.use_connect = False - ex.spine_rotate_e.parent = ex.pelvis_copy_e - - - # Copy the last bone now - child = spine_chain[-1] - - ex.ribcage_copy_e = copy_bone_simple(arm, mt.ribcage, base_names[mt.ribcage]) - ex.ribcage_copy = ex.ribcage_copy_e.name - ex.ribcage_copy_e.use_connect = False - ex.ribcage_copy_e.parent = ex.ribcage_hinge_e - - spine_chain = [child.name for child in spine_chain] - - # We have 3 spine chains - # - original (ORG_*) - # - copy (*use original name*) - # - reverse (MCH-rev_*) - spine_chain_attrs = [("spine_%.2d" % (i + 1)) for i in range(spine_chain_len)] - - mt_chain = bone_class_instance(obj, spine_chain_attrs) # ORG_* - rv_chain = bone_class_instance(obj, spine_chain_attrs) # * - ex_chain = bone_class_instance(obj, spine_chain_attrs) # MCH-rev_* - del spine_chain_attrs - - for i, child_name in enumerate(spine_chain): - child_name_orig = base_names[spine_chain_orig[i]] - - attr = mt_chain.attr_names[i] # eg. spine_04 - - setattr(mt_chain, attr, spine_chain_orig[i]) # the original bone - - ebone = copy_bone_simple(arm, child_name, child_name_orig) # use the original name - setattr(ex_chain, attr, ebone.name) - - ebone = copy_bone_simple(arm, child_name, "MCH-rev_%s" % child_name_orig) - setattr(rv_chain, attr, ebone.name) - ebone.use_connect = False - - mt_chain.update() - ex_chain.update() - rv_chain.update() - - # Now we need to re-parent these chains - for i, child_name in enumerate(spine_chain_orig): - attr = ex_chain.attr_names[i] + "_e" - ebone = getattr(ex_chain, attr) - if i == 0: - ebone.use_connect = False - ebone.parent = ex.pelvis_copy_e - else: - attr_parent = ex_chain.attr_names[i - 1] + "_e" - ebone.parent = getattr(ex_chain, attr_parent) - - # intentional! get the parent from the other parallel chain member - getattr(rv_chain, attr).parent = ebone - - - # ex_chain needs to interlace bones! - # Note, skip the first bone - for i in range(1, spine_chain_len): # similar to neck - child_name_orig = base_names[spine_chain_orig[i]] - spine_e = getattr(mt_chain, mt_chain.attr_names[i] + "_e") - - # dont store parent names, re-reference as each chain bones parent. - spine_e_parent = arm.edit_bones.new("MCH-rot_%s" % child_name_orig) - spine_e_parent.head = spine_e.head - spine_e_parent.tail = spine_e.head + (mt.ribcage_e.vector.normalize() * spine_chain_segment_length / 2.0) - spine_e_parent.roll = mt.ribcage_e.roll - - - spine_e = getattr(ex_chain, ex_chain.attr_names[i] + "_e") - orig_parent = spine_e.parent - spine_e.use_connect = False - spine_e.parent = spine_e_parent - spine_e_parent.use_connect = False - - spine_e_parent.parent = orig_parent - - - # Rotate the rev chain 180 about the by the first bones center point - pivot = (rv_chain.spine_01_e.head + rv_chain.spine_01_e.tail) * 0.5 - matrix = Matrix.Rotation(radians(180), 3, 'X') - for i, attr in enumerate(rv_chain.attr_names): # similar to neck - spine_e = getattr(rv_chain, attr + "_e") - # use the first bone as the pivot - - spine_e.head = ((spine_e.head - pivot) * matrix) + pivot - spine_e.tail = ((spine_e.tail - pivot) * matrix) + pivot - spine_e.roll += pi # 180d roll - del spine_e - - deform(obj, bone_definition, base_names, options) - - bpy.ops.object.mode_set(mode='OBJECT') - - # refresh pose bones - mt.update() - ex.update() - mt_chain.update() - ex_chain.update() - rv_chain.update() - - # Axis locks - ex.ribcage_copy_p.lock_location = True, True, True - - con = ex.ribcage_hinge_p.constraints.new('COPY_ROTATION') - con.name = "hinge" - con.target = obj - con.subtarget = ex.pelvis_copy - - # add driver - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = ex.ribcage_copy_p.path_from_id() + '["hinge"]' - - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - con = ex.spine_rotate_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = ex.ribcage_copy - - # ex.pelvis_copy_p / rib_cage - con = ex.ribcage_copy_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = ex.pelvis_copy - con.head_tail = 0.0 - - # This stores all important ID props - prop = rna_idprop_ui_prop_get(ex.ribcage_copy_p, "hinge", create=True) - ex.ribcage_copy_p["hinge"] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - prop = rna_idprop_ui_prop_get(ex.ribcage_copy_p, "pivot_slide", create=True) - ex.ribcage_copy_p["pivot_slide"] = 1.0 / spine_chain_len - prop["soft_min"] = 1.0 / spine_chain_len - prop["soft_max"] = 1.0 - - - # Create a fake connected parent/child relationship with bone location constraints - # positioned at the tip. - - # reverse bones / MCH-rev_spine.## - for i in range(1, spine_chain_len): - spine_p = getattr(rv_chain, rv_chain.attr_names[i] + "_p") - spine_fake_parent_name = getattr(rv_chain, rv_chain.attr_names[i - 1]) - - con = spine_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = spine_fake_parent_name - con.head_tail = 1.0 - del spine_p, spine_fake_parent_name, con - - - # Constrain 'inbetween' bones - target_names = [("b%.2d" % (i + 1)) for i in range(spine_chain_len - 1)] - rib_driver_path = ex.ribcage_copy_p.path_from_id() - - ex.ribcage_copy_p["bend_tot"] = 0.0 - fcurve = ex.ribcage_copy_p.driver_add('["bend_tot"]') - driver = fcurve.driver - driver.type = 'SUM' - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - for i in range(spine_chain_len - 1): - var = driver.variables.new() - var.name = target_names[i] - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = rib_driver_path + ('["bend_%.2d"]' % (i + 1)) - - for i in range(1, spine_chain_len): - - # Add bend prop - prop_name = "bend_%.2d" % i - prop = rna_idprop_ui_prop_get(ex.ribcage_copy_p, prop_name, create=True) - if ("bend_%.2d" % i) in options: - ex.ribcage_copy_p[prop_name] = options["bend_%.2d" % i] - else: - ex.ribcage_copy_p[prop_name] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - spine_p = getattr(ex_chain, ex_chain.attr_names[i] + "_p") - spine_p_parent = spine_p.parent # interlaced bone - - con = spine_p_parent.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = ex.spine_rotate - con.owner_space = 'LOCAL' - con.target_space = 'LOCAL' - del spine_p - - # add driver - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'SCRIPTED' - driver.expression = "bend/bend_tot" - - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - - # add target - var = driver.variables.new() - var.name = "bend_tot" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = rib_driver_path + ('["bend_tot"]') - - var = driver.variables.new() - var.name = "bend" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = rib_driver_path + ('["%s"]' % prop_name) - - - - # original bone drivers - # note: the first bone has a lot more constraints, but also this simple one is first. - for i, attr in enumerate(mt_chain.attr_names): - spine_p = getattr(mt_chain, attr + "_p") - - con = spine_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = getattr(ex_chain, attr) # lock to the copy's rotation - del spine_p - - # pivot slide: - lots of copy location constraints. - - con = mt_chain.spine_01_p.constraints.new('COPY_LOCATION') - con.name = "base" - con.target = obj - con.subtarget = rv_chain.spine_01 # lock to the reverse location - - for i in range(1, spine_chain_len + 1): - con = mt_chain.spine_01_p.constraints.new('COPY_LOCATION') - con.name = "slide_%d" % i - con.target = obj - - if i == spine_chain_len: - attr = mt_chain.attr_names[i - 1] - else: - attr = mt_chain.attr_names[i] - - con.subtarget = getattr(rv_chain, attr) # lock to the reverse location - - if i == spine_chain_len: - con.head_tail = 1.0 - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = rib_driver_path + '["pivot_slide"]' - - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = - (i - 1) - mod.coefficients[1] = spine_chain_len - - - # Set pelvis and ribcage controls to use the first and last bone in the - # spine respectively for their custom shape transform - ex.ribcage_copy_p.custom_shape_transform = obj.pose.bones[bone_definition[len(bone_definition)-1]] - ex.pelvis_copy_p.custom_shape_transform = obj.pose.bones[bone_definition[2]] - - - # last step setup layers - if "ex_layer" in options: - layer = [n == options["ex_layer"] for n in range(0, 32)] - else: - layer = list(arm.bones[bone_definition[1]].layers) - for attr in ex.attr_names: - getattr(ex, attr + "_b").layers = layer - for attr in ex_chain.attr_names: - getattr(ex_chain, attr + "_b").layers = layer - for attr in rv_chain.attr_names: - getattr(rv_chain, attr + "_b").layers = layer - - layer = list(arm.bones[bone_definition[1]].layers) - arm.bones[ex.pelvis_copy].layers = layer - arm.bones[ex.ribcage_copy].layers = layer - - # no support for blending chains - return None diff --git a/release/scripts/modules/rigify/stretch.py b/release/scripts/modules/rigify/stretch.py deleted file mode 100644 index 6a498e5aa29..00000000000 --- a/release/scripts/modules/rigify/stretch.py +++ /dev/null @@ -1,109 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import copy_bone_simple - -METARIG_NAMES = tuple() -RIG_TYPE = "stretch" - -# TODO -#def metarig_template(): -# # generated by rigify.write_meta_rig -# bpy.ops.object.mode_set(mode='EDIT') -# obj = bpy.context.active_object -# arm = obj.data -# bone = arm.edit_bones.new('Bone') -# bone.head[:] = 0.0000, 0.0000, 0.0000 -# bone.tail[:] = 0.0000, 0.0000, 1.0000 -# bone.roll = 0.0000 -# bone.use_connect = False -# -# bpy.ops.object.mode_set(mode='OBJECT') -# pbone = obj.pose.bones['Bone'] -# pbone['type'] = 'copy' - -bool_map = {0: False, 1: True, - 0.0: False, 1.0: True, - "false": False, "true": True, - "False": False, "True": True, - "no": False, "yes": True, - "No": False, "Yes": True} - - -def metarig_definition(obj, orig_bone_name): - return (orig_bone_name,) - - -def main(obj, bone_definition, base_names, options): - """ A stretchy bone from one bone to another. - Deformation only (no controls). - """ - # Verify required parameter - if "to" not in options: - raise RigifyError("'%s' rig type requires a 'to' parameter (bone: %s)" % (RIG_TYPE, base_names[bone_definition[0]])) - if type(options["to"]) is not str: - raise RigifyError("'%s' rig type 'to' parameter must be a string (bone: %s)" % (RIG_TYPE, base_names[bone_definition[0]])) - if ("ORG-" + options["to"]) not in obj.data.bones: - raise RigifyError("'%s' rig type 'to' parameter must name a bone in the metarig (bone: %s)" % (RIG_TYPE, base_names[bone_definition[0]])) - - preserve_volume = None - # Check optional parameter - if "preserve_volume" in options: - try: - preserve_volume = bool_map[options["preserve_volume"]] - except KeyError: - preserve_volume = False - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - bpy.ops.object.mode_set(mode='EDIT') - arm = obj.data - - mbone1 = bone_definition[0] - mbone2 = "ORG-" + options["to"] - - bone_e = copy_bone_simple(obj.data, mbone1, "DEF-%s" % base_names[bone_definition[0]]) - bone_e.use_connect = False - bone_e.parent = eb[mbone1] - bone_e.tail = eb[mbone2].head - bone = bone_e.name - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Constraints - con = pb[bone].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = mbone2 - - con = pb[bone].constraints.new('STRETCH_TO') - con.target = obj - con.subtarget = mbone2 - con.rest_length = bb[bone].length - if preserve_volume: - con.volume = 'VOLUME_XZX' - else: - con.volume = 'NO_VOLUME' - - return tuple() diff --git a/release/scripts/modules/rigify/stretch_twist.py b/release/scripts/modules/rigify/stretch_twist.py deleted file mode 100644 index 07ce031967f..00000000000 --- a/release/scripts/modules/rigify/stretch_twist.py +++ /dev/null @@ -1,152 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import copy_bone_simple - -METARIG_NAMES = tuple() -RIG_TYPE = "stretch_twist" - -# TODO -#def metarig_template(): -# # generated by rigify.write_meta_rig -# bpy.ops.object.mode_set(mode='EDIT') -# obj = bpy.context.active_object -# arm = obj.data -# bone = arm.edit_bones.new('Bone') -# bone.head[:] = 0.0000, 0.0000, 0.0000 -# bone.tail[:] = 0.0000, 0.0000, 1.0000 -# bone.roll = 0.0000 -# bone.use_connect = False -# -# bpy.ops.object.mode_set(mode='OBJECT') -# pbone = obj.pose.bones['Bone'] -# pbone['type'] = 'copy' - -bool_map = {0:False, 1:True, - 0.0:False, 1.0:True, - "false":False, "true":True, - "False":False, "True":True, - "no":False, "yes":True, - "No":False, "Yes":True} - -def metarig_definition(obj, orig_bone_name): - return (orig_bone_name,) - - - - -def main(obj, bone_definition, base_names, options): - """ A dual-bone stretchy bone setup. Each half follows the twist of the - bone on its side. - Deformation only (no controls). - """ - # Verify required parameter - if "to" not in options: - raise RigifyError("'%s' rig type requires a 'to' parameter (bone: %s)" % (RIG_TYPE, base_names[0])) - if type(options["to"]) is not str: - raise RigifyError("'%s' rig type 'to' parameter must be a string (bone: %s)" % (RIG_TYPE, base_names[0])) - if ("ORG-" + options["to"]) not in obj.data.bones: - raise RigifyError("'%s' rig type 'to' parameter must name a bone in the metarig (bone: %s)" % (RIG_TYPE, base_names[0])) - - preserve_volume = None - # Check optional parameter - if "preserve_volume" in options: - try: - preserve_volume = bool_map[options["preserve_volume"]] - except KeyError: - preserve_volume = False - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - bpy.ops.object.mode_set(mode='EDIT') - arm = obj.data - - mbone1 = bone_definition[0] - mbone2 = "ORG-" + options["to"] - - bone_e = copy_bone_simple(obj.data, mbone1, "MCH-%s" % base_names[bone_definition[0]]) - bone_e.use_connect = False - bone_e.parent = None - bone_e.head = (eb[mbone1].head + eb[mbone2].head) / 2 - bone_e.tail = (bone_e.head[0], bone_e.head[1], bone_e.head[2]+0.1) - mid_bone = bone_e.name - - bone_e = copy_bone_simple(obj.data, mbone1, "DEF-%s.01" % base_names[bone_definition[0]]) - bone_e.use_connect = False - bone_e.parent = eb[mbone1] - bone_e.tail = eb[mid_bone].head - bone1 = bone_e.name - - bone_e = copy_bone_simple(obj.data, mbone2, "DEF-%s.02" % base_names[bone_definition[0]]) - bone_e.use_connect = False - bone_e.parent = eb[mbone2] - bone_e.tail = eb[mid_bone].head - bone2 = bone_e.name - - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Constraints - - # Mid bone - con = pb[mid_bone].constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = mbone1 - - con = pb[mid_bone].constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = mbone2 - con.influence = 0.5 - - # Bone 1 - con = pb[bone1].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = mid_bone - - con = pb[bone1].constraints.new('STRETCH_TO') - con.target = obj - con.subtarget = mid_bone - con.rest_length = bb[bone1].length - if preserve_volume: - con.volume = 'VOLUME_XZX' - else: - con.volume = 'NO_VOLUME' - - # Bone 2 - con = pb[bone2].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = mid_bone - - con = pb[bone2].constraints.new('STRETCH_TO') - con.target = obj - con.subtarget = mid_bone - con.rest_length = bb[bone2].length - if preserve_volume: - con.volume = 'VOLUME_XZX' - else: - con.volume = 'NO_VOLUME' - - return tuple() - diff --git a/release/scripts/modules/rigify/tail_control.py b/release/scripts/modules/rigify/tail_control.py deleted file mode 100644 index 32d414344cf..00000000000 --- a/release/scripts/modules/rigify/tail_control.py +++ /dev/null @@ -1,165 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import bone_class_instance, copy_bone_simple -from rna_prop_ui import rna_idprop_ui_prop_get -from mathutils import Vector, Matrix -from math import radians, pi - -# not used, defined for completeness -METARIG_NAMES = ("pelvis", "ribcage") - - -def metarig_template(): - # TODO - pass - # generated by rigify.write_meta_rig - #bpy.ops.object.mode_set(mode='EDIT') - #obj = bpy.context.active_object - #arm = obj.data - #bone = arm.edit_bones.new('tail.01') - #bone.head[:] = 0.0000, -0.0306, 0.1039 - #bone.tail[:] = 0.0000, -0.0306, -0.0159 - #bone.roll = 0.0000 - #bone.use_connect = False - - #bpy.ops.object.mode_set(mode='OBJECT') - #pbone = obj.pose.bones['tail.01'] - #pbone['type'] = 'tail_spline_ik' - - -def metarig_definition(obj, orig_bone_name): - """ Collects and returns the relevent bones for the rig. - The bone given is the first in the chain of tail bones. - It includes bones in the chain up until it hits a bone that doesn't - have the same name base. - - tail.01 -> tail.02 -> tail.03 -> ... -> tail.n - """ - arm = obj.data - tail_base = arm.bones[orig_bone_name] - - if tail_base.parent is None: - raise RigifyError("'tail_control' rig type on bone '%s' requires a parent." % orig_bone_name) - - bone_definitions = [tail_base.name] - bone_definitions.extend([child.name for child in tail_base.children_recursive_basename]) - return bone_definitions - - -def main(obj, bone_definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - arm = obj.data - bb = obj.data.bones - eb = obj.data.edit_bones - pb = obj.pose.bones - - # Create bones for hinge/free - # hinge 1 sticks with the parent - # hinge 2 is the parent of the tail controls - hinge1 = copy_bone_simple(arm, bone_definitions[0], "MCH-%s.hinge1" % base_names[bone_definitions[0]], parent=True).name - hinge2 = copy_bone_simple(arm, bone_definitions[0], "MCH-%s.hinge2" % base_names[bone_definitions[0]], parent=False).name - - # Create tail control bones - bones = [] - i = 0 - for bone_def in bone_definitions: - bone = copy_bone_simple(arm, bone_def, base_names[bone_def], parent=True).name - if i == 1: # Don't change parent of first tail bone - eb[bone].use_connect = False - eb[bone].parent = eb[hinge2] - eb[bone].use_local_location = False - i = 1 - bones += [bone] - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Rotation mode and axis locks - for bone, org_bone in zip(bones, bone_definitions): - pb[bone].rotation_mode = pb[org_bone].rotation_mode - pb[bone].lock_location = tuple(pb[org_bone].lock_location) - pb[bone].lock_rotations_4d = pb[org_bone].lock_rotations_4d - pb[bone].lock_rotation = tuple(pb[org_bone].lock_rotation) - pb[bone].lock_rotation_w = pb[org_bone].lock_rotation_w - pb[bone].lock_scale = tuple(pb[org_bone].lock_scale) - - # Add custom properties - pb[bones[0]]["hinge"] = 0.0 - prop = rna_idprop_ui_prop_get(pb[bones[0]], "hinge", create=True) - prop["min"] = 0.0 - prop["max"] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - pb[bones[0]]["free"] = 0.0 - prop = rna_idprop_ui_prop_get(pb[bones[0]], "free", create=True) - prop["min"] = 0.0 - prop["max"] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - # Add constraints - for bone, org_bone in zip(bones, bone_definitions): - con = pb[org_bone].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = bone - - con_f = pb[hinge2].constraints.new('COPY_LOCATION') - con_f.target = obj - con_f.subtarget = hinge1 - - con_h = pb[hinge2].constraints.new('COPY_TRANSFORMS') - con_h.target = obj - con_h.subtarget = hinge1 - - # Add drivers - bone_path = pb[bones[0]].path_from_id() - - driver_fcurve = con_f.driver_add("influence") - driver = driver_fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.name = "free" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = bone_path + '["free"]' - mod = driver_fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - driver_fcurve = con_h.driver_add("influence") - driver = driver_fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.name = "hinge" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = bone_path + '["hinge"]' - mod = driver_fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - - return None diff --git a/release/scripts/modules/rigify/tongue.py b/release/scripts/modules/rigify/tongue.py deleted file mode 100644 index 36c4316adc5..00000000000 --- a/release/scripts/modules/rigify/tongue.py +++ /dev/null @@ -1,361 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import bone_class_instance, copy_bone_simple -from rna_prop_ui import rna_idprop_ui_prop_get - -# not used, defined for completeness -METARIG_NAMES = ("body", "head") - - -def metarig_template(): - # TODO: - ## generated by rigify.write_meta_rig - #bpy.ops.object.mode_set(mode='EDIT') - #obj = bpy.context.active_object - #arm = obj.data - #bone = arm.edit_bones.new('body') - #bone.head[:] = 0.0000, -0.0276, -0.1328 - #bone.tail[:] = 0.0000, -0.0170, -0.0197 - #bone.roll = 0.0000 - #bone.use_connect = False - #bone = arm.edit_bones.new('head') - #bone.head[:] = 0.0000, -0.0170, -0.0197 - #bone.tail[:] = 0.0000, 0.0726, 0.1354 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['body'] - #bone = arm.edit_bones.new('neck.01') - #bone.head[:] = 0.0000, -0.0170, -0.0197 - #bone.tail[:] = 0.0000, -0.0099, 0.0146 - #bone.roll = 0.0000 - #bone.use_connect = False - #bone.parent = arm.edit_bones['head'] - #bone = arm.edit_bones.new('neck.02') - #bone.head[:] = 0.0000, -0.0099, 0.0146 - #bone.tail[:] = 0.0000, -0.0242, 0.0514 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.01'] - #bone = arm.edit_bones.new('neck.03') - #bone.head[:] = 0.0000, -0.0242, 0.0514 - #bone.tail[:] = 0.0000, -0.0417, 0.0868 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.02'] - #bone = arm.edit_bones.new('neck.04') - #bone.head[:] = 0.0000, -0.0417, 0.0868 - #bone.tail[:] = 0.0000, -0.0509, 0.1190 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.03'] - #bone = arm.edit_bones.new('neck.05') - #bone.head[:] = 0.0000, -0.0509, 0.1190 - #bone.tail[:] = 0.0000, -0.0537, 0.1600 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.04'] - # - #bpy.ops.object.mode_set(mode='OBJECT') - #pbone = obj.pose.bones['head'] - #pbone['type'] = 'neck_flex' - pass - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the tongue control, its parent is the body, - # its only child the first of a chain with matching basenames. - eg. - body -> tongue_control -> tongue_01 -> tongue_02 -> tongue_03.... etc - ''' - arm = obj.data - tongue = arm.bones[orig_bone_name] - body = tongue.parent - - children = tongue.children - if len(children) != 1: - raise RigifyError("expected the tongue bone '%s' to have only 1 child." % orig_bone_name) - - child = children[0] - bone_definition = [body.name, tongue.name, child.name] - bone_definition.extend([child.name for child in child.children_recursive_basename]) - return bone_definition - - -def deform(obj, definitions, base_names, options): - for org_bone_name in definitions[2:]: - bpy.ops.object.mode_set(mode='EDIT') - - # Create deform bone. - bone = copy_bone_simple(obj.data, org_bone_name, "DEF-%s" % base_names[org_bone_name], parent=True) - - # Store name before leaving edit mode - bone_name = bone.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bone - bone = obj.pose.bones[bone_name] - - # Constrain to the original bone - # XXX. Todo, is this needed if the bone is connected to its parent? - con = bone.constraints.new('COPY_TRANSFORMS') - con.name = "copy_loc" - con.target = obj - con.subtarget = org_bone_name - - -# TODO: rename all of the head/neck references to tongue -def main(obj, bone_definition, base_names, options): - from mathutils import Vector - - arm = obj.data - - # Initialize container classes for convenience - mt = bone_class_instance(obj, ["body", "head"]) # meta - mt.body = bone_definition[0] - mt.head = bone_definition[1] - mt.update() - - neck_chain = bone_definition[2:] - - mt_chain = bone_class_instance(obj, [("neck_%.2d" % (i + 1)) for i in range(len(neck_chain))]) # 99 bones enough eh? - for i, attr in enumerate(mt_chain.attr_names): - setattr(mt_chain, attr, neck_chain[i]) - mt_chain.update() - - neck_chain_basename = base_names[mt_chain.neck_01_e.name].split(".")[0] - neck_chain_segment_length = mt_chain.neck_01_e.length - - ex = bone_class_instance(obj, ["head", "head_hinge", "neck_socket", "head_ctrl"]) # hinge & extras - - # Add the head hinge at the bodys location, becomes the parent of the original head - - # apply everything to this copy of the chain - ex_chain = mt_chain.copy(base_names=base_names) - ex_chain.neck_01_e.parent = mt_chain.neck_01_e.parent - - - # Copy the head bone and offset - ex.head_e = copy_bone_simple(arm, mt.head, "MCH-%s" % base_names[mt.head], parent=True) - ex.head_e.use_connect = False - ex.head = ex.head_e.name - # offset - head_length = ex.head_e.length - ex.head_e.head.y += head_length / 2.0 - ex.head_e.tail.y += head_length / 2.0 - - # Yes, use the body bone but call it a head hinge - ex.head_hinge_e = copy_bone_simple(arm, mt.body, "MCH-%s_hinge" % base_names[mt.head], parent=False) - ex.head_hinge_e.use_connect = False - ex.head_hinge = ex.head_hinge_e.name - ex.head_hinge_e.head.y += head_length / 4.0 - ex.head_hinge_e.tail.y += head_length / 4.0 - - # Insert the neck socket, the head copys this loation - ex.neck_socket_e = arm.edit_bones.new("MCH-%s_socked" % neck_chain_basename) - ex.neck_socket = ex.neck_socket_e.name - ex.neck_socket_e.use_connect = False - ex.neck_socket_e.parent = mt.body_e - ex.neck_socket_e.head = mt.head_e.head - ex.neck_socket_e.tail = mt.head_e.head - Vector((0.0, neck_chain_segment_length / 2.0, 0.0)) - ex.neck_socket_e.roll = 0.0 - - - # copy of the head for controling - ex.head_ctrl_e = copy_bone_simple(arm, mt.head, base_names[mt.head]) - ex.head_ctrl = ex.head_ctrl_e.name - ex.head_ctrl_e.parent = ex.head_hinge_e - - for i, attr in enumerate(ex_chain.attr_names): - neck_e = getattr(ex_chain, attr + "_e") - - # dont store parent names, re-reference as each chain bones parent. - neck_e_parent = arm.edit_bones.new("MCH-rot_%s" % base_names[getattr(mt_chain, attr)]) - neck_e_parent.head = neck_e.head - neck_e_parent.tail = neck_e.head + (mt.head_e.vector.normalize() * neck_chain_segment_length / 2.0) - neck_e_parent.roll = mt.head_e.roll - - orig_parent = neck_e.parent - neck_e.use_connect = False - neck_e.parent = neck_e_parent - neck_e_parent.use_connect = False - - if i == 0: - neck_e_parent.parent = mt.body_e - else: - neck_e_parent.parent = orig_parent - - deform(obj, bone_definition, base_names, options) - - bpy.ops.object.mode_set(mode='OBJECT') - - mt.update() - mt_chain.update() - ex_chain.update() - ex.update() - - # Axis locks - ex.head_ctrl_p.lock_location = True, True, True - ex.head_ctrl_p.lock_scale = True, False, True - - # Simple one off constraints, no drivers - con = ex.head_ctrl_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = ex.neck_socket - - con = ex.head_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = ex.head_ctrl - - # driven hinge - prop = rna_idprop_ui_prop_get(ex.head_ctrl_p, "hinge", create=True) - ex.head_ctrl_p["hinge"] = 0.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - con = ex.head_hinge_p.constraints.new('COPY_ROTATION') - con.name = "hinge" - con.target = obj - con.subtarget = mt.body - - # add driver - hinge_driver_path = ex.head_ctrl_p.path_to_id() + '["hinge"]' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = hinge_driver_path - - #mod = fcurve_driver.modifiers.new('GENERATOR') - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - head_driver_path = ex.head_ctrl_p.path_to_id() - - target_names = [("b%.2d" % (i + 1)) for i in range(len(neck_chain))] - - ex.head_ctrl_p["bend_tot"] = 0.0 - fcurve = ex.head_ctrl_p.driver_add('["bend_tot"]') - driver = fcurve.driver - driver.type = 'SUM' - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - for i in range(len(neck_chain)): - var = driver.variables.new() - var.name = target_names[i] - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = head_driver_path + ('["bend_%.2d"]' % (i + 1)) - - - for i, attr in enumerate(ex_chain.attr_names): - neck_p = getattr(ex_chain, attr + "_p") - neck_p.lock_location = True, True, True - neck_p.lock_location = True, True, True - neck_p.lock_rotations_4d = True - - # Add bend prop - prop_name = "bend_%.2d" % (i + 1) - prop = rna_idprop_ui_prop_get(ex.head_ctrl_p, prop_name, create=True) - ex.head_ctrl_p[prop_name] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - # add parent constraint - neck_p_parent = neck_p.parent - - # add constraints - if i == 0: - con = neck_p.constraints.new('COPY_SCALE') - con.name = "Copy Scale" - con.target = obj - con.subtarget = ex.head_ctrl - con.owner_space = 'LOCAL' - con.target_space = 'LOCAL' - - con = neck_p_parent.constraints.new('COPY_ROTATION') - con.name = "Copy Rotation" - con.target = obj - con.subtarget = ex.head - con.owner_space = 'LOCAL' - con.target_space = 'LOCAL' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'SCRIPTED' - driver.expression = "bend/bend_tot" - - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - - # add target - var = driver.variables.new() - var.name = "bend_tot" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = head_driver_path + ('["bend_tot"]') - - var = driver.variables.new() - var.name = "bend" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = head_driver_path + ('["%s"]' % prop_name) - - - # finally constrain the original bone to this one - orig_neck_p = getattr(mt_chain, attr + "_p") - con = orig_neck_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = neck_p.name - - - # Set the head control's custom shape to use the last - # org neck bone for its transform - ex.head_ctrl_p.custom_shape_transform = obj.pose.bones[bone_definition[len(bone_definition)-1]] - - - # last step setup layers - if "ex_layer" in options: - layer = [n==options["ex_layer"] for n in range(0,32)] - else: - layer = list(arm.bones[bone_definition[1]].layers) - for attr in ex_chain.attr_names: - getattr(ex_chain, attr + "_b").layers = layer - for attr in ex.attr_names: - getattr(ex, attr + "_b").layers = layer - - layer = list(arm.bones[bone_definition[1]].layers) - ex.head_ctrl_b.layers = layer - - - # no blending the result of this - return None - diff --git a/release/scripts/modules/rigify/track_dual.py b/release/scripts/modules/rigify/track_dual.py deleted file mode 100644 index f9c48a3bfcb..00000000000 --- a/release/scripts/modules/rigify/track_dual.py +++ /dev/null @@ -1,110 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import copy_bone_simple - -METARIG_NAMES = tuple() -RIG_TYPE = "track_dual" - -# TODO -#def metarig_template(): -# # generated by rigify.write_meta_rig -# bpy.ops.object.mode_set(mode='EDIT') -# obj = bpy.context.active_object -# arm = obj.data -# bone = arm.edit_bones.new('Bone') -# bone.head[:] = 0.0000, 0.0000, 0.0000 -# bone.tail[:] = 0.0000, 0.0000, 1.0000 -# bone.roll = 0.0000 -# bone.use_connect = False -# -# bpy.ops.object.mode_set(mode='OBJECT') -# pbone = obj.pose.bones['Bone'] -# pbone['type'] = 'copy' - -bool_map = {0: False, 1: True, - 0.0: False, 1.0: True, - "false": False, "true": True, - "False": False, "True": True, - "no": False, "yes": True, - "No": False, "Yes": True} - - -def metarig_definition(obj, orig_bone_name): - return (orig_bone_name,) - - -def main(obj, bone_definition, base_names, options): - """ A dual-bone track setup. - Deformation only (no controls). - """ - # Verify required parameter - if "to" not in options: - raise RigifyError("'%s' rig type requires a 'to' parameter (bone: %s)" % (RIG_TYPE, base_names[0])) - if type(options["to"]) is not str: - raise RigifyError("'%s' rig type 'to' parameter must be a string (bone: %s)" % (RIG_TYPE, base_names[0])) - if ("ORG-" + options["to"]) not in obj.data.bones: - raise RigifyError("'%s' rig type 'to' parameter must name a bone in the metarig (bone: %s)" % (RIG_TYPE, base_names[0])) - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - bpy.ops.object.mode_set(mode='EDIT') - arm = obj.data - - mbone1 = bone_definition[0] - mbone2 = "ORG-" + options["to"] - - bone_e = copy_bone_simple(obj.data, mbone1, "DEF-%s.01" % base_names[bone_definition[0]]) - bone_e.use_connect = False - bone_e.parent = eb[mbone1] - bone_e.tail = (eb[mbone1].head + eb[mbone2].head) / 2 - bone1 = bone_e.name - - bone_e = copy_bone_simple(obj.data, mbone2, "DEF-%s.02" % base_names[bone_definition[0]]) - bone_e.use_connect = False - bone_e.parent = eb[mbone1] - bone_e.tail = (eb[mbone1].head + eb[mbone2].head) / 2 - bone2 = bone_e.name - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Constraints - # Bone 1 - con = pb[bone1].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = mbone2 - - - # Bone 2 - con = pb[bone2].constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = mbone2 - - con = pb[bone2].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = mbone1 - - - return tuple() diff --git a/release/scripts/modules/rigify/track_reverse.py b/release/scripts/modules/rigify/track_reverse.py deleted file mode 100644 index a65ac0e9416..00000000000 --- a/release/scripts/modules/rigify/track_reverse.py +++ /dev/null @@ -1,100 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import copy_bone_simple - -METARIG_NAMES = tuple() -RIG_TYPE = "track_reverse" - -# TODO -#def metarig_template(): -# # generated by rigify.write_meta_rig -# bpy.ops.object.mode_set(mode='EDIT') -# obj = bpy.context.active_object -# arm = obj.data -# bone = arm.edit_bones.new('Bone') -# bone.head[:] = 0.0000, 0.0000, 0.0000 -# bone.tail[:] = 0.0000, 0.0000, 1.0000 -# bone.roll = 0.0000 -# bone.use_connect = False -# -# bpy.ops.object.mode_set(mode='OBJECT') -# pbone = obj.pose.bones['Bone'] -# pbone['type'] = 'copy' - -bool_map = {0:False, 1:True, - 0.0:False, 1.0:True, - "false":False, "true":True, - "False":False, "True":True, - "no":False, "yes":True, - "No":False, "Yes":True} - -def metarig_definition(obj, orig_bone_name): - return (orig_bone_name,) - - - - -def main(obj, bone_definition, base_names, options): - """ A bone that tracks bakwards towards its parent, while copying the - location of it's target. - Deformation only (no controls). - """ - # Verify required parameter - if "to" not in options: - raise RigifyError("'%s' rig type requires a 'to' parameter (bone: %s)" % (RIG_TYPE, base_names[0])) - if type(options["to"]) is not str: - raise RigifyError("'%s' rig type 'to' parameter must be a string (bone: %s)" % (RIG_TYPE, base_names[0])) - if ("ORG-" + options["to"]) not in obj.data.bones: - raise RigifyError("'%s' rig type 'to' parameter must name a bone in the metarig (bone: %s)" % (RIG_TYPE, base_names[0])) - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - bpy.ops.object.mode_set(mode='EDIT') - arm = obj.data - - mbone1 = bone_definition[0] - mbone2 = "ORG-" + options["to"] - - bone_e = copy_bone_simple(obj.data, mbone2, "DEF-%s.02" % base_names[bone_definition[0]]) - bone_e.use_connect = False - bone_e.parent = eb[mbone1] - bone_e.tail = eb[mbone1].head - bone = bone_e.name - - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Constraints - con = pb[bone].constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = mbone2 - - con = pb[bone].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = mbone1 - - - return tuple() diff --git a/release/scripts/modules/rigify_utils.py b/release/scripts/modules/rigify_utils.py deleted file mode 100644 index 1ffe366e0d5..00000000000 --- a/release/scripts/modules/rigify_utils.py +++ /dev/null @@ -1,467 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -# rigify its self does not depend on this module, however some of the -# rigify templates use these utility functions. -# -# So even though this can be for general purpose use, this module was created -# for rigify so in some cases seemingly generic functions make assumptions -# that a generic function would need to check for. - -import bpy -from mathutils import Vector -from rna_prop_ui import rna_idprop_ui_prop_get - -DELIMITER = '-._' -EMPTY_LAYER = [False] * 32 - - -def add_stretch_to(obj, from_name, to_name, name): - ''' - Adds a bone that stretches from one to another - ''' - - mode_orig = obj.mode - bpy.ops.object.mode_set(mode='EDIT') - - arm = obj.data - stretch_ebone = arm.edit_bones.new(name) - stretch_name = stretch_ebone.name - del name - - head = stretch_ebone.head = arm.edit_bones[from_name].head.copy() - #tail = stretch_ebone.tail = arm.edit_bones[to_name].head.copy() - - # annoying exception for zero length bones, since its using stretch_to the rest pose doesnt really matter - #if (head - tail).length < 0.1: - if 1: - tail = stretch_ebone.tail = arm.edit_bones[from_name].tail.copy() - - - # Now for the constraint - bpy.ops.object.mode_set(mode='OBJECT') - - stretch_pbone = obj.pose.bones[stretch_name] - - con = stretch_pbone.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = from_name - - con = stretch_pbone.constraints.new('STRETCH_TO') - con.target = obj - con.subtarget = to_name - con.rest_length = (head - tail).length - con.keep_axis = 'PLANE_X' - con.volume = 'NO_VOLUME' - - bpy.ops.object.mode_set(mode=mode_orig) - - return stretch_name - - -def copy_bone_simple(arm, from_bone, name, parent=False): - ebone = arm.edit_bones[from_bone] - ebone_new = arm.edit_bones.new(name) - - if parent: - ebone_new.use_connect = ebone.use_connect - ebone_new.parent = ebone.parent - - ebone_new.head = ebone.head - ebone_new.tail = ebone.tail - ebone_new.roll = ebone.roll - ebone_new.layers = list(ebone.layers) - return ebone_new - - -def copy_bone_simple_list(arm, from_bones, to_bones, parent=False): - - if len(from_bones) != len(to_bones): - raise Exception("bone list sizes must match") - - copy_bones = [copy_bone_simple(arm, bone_name, to_bones[i], True) for i, bone_name in enumerate(from_bones)] - - # now we need to re-parent - for ebone in copy_bones: - parent = ebone.parent - if parent: - try: - i = from_bones.index(parent.name) - except: - i = -1 - - if i == -1: - ebone.parent = None - else: - ebone.parent = copy_bones[i] - - return copy_bones - - -def blend_bone_list(obj, apply_bones, from_bones, to_bones, target_bone=None, target_prop="blend", blend_default=0.5): - - if obj.mode == 'EDIT': - raise Exception("blending cant be called in editmode") - - if len(apply_bones) != len(from_bones): - raise Exception("lists differ in length (from -> apply): \n\t%s\n\t%s" % (from_bones, apply_bones)) - if len(apply_bones) != len(to_bones): - raise Exception("lists differ in length (to -> apply): \n\t%s\n\t%s" % (to_bones, apply_bones)) - - # setup the blend property - if target_bone is None: - target_bone = apply_bones[-1] # default to the last bone - - prop_pbone = obj.pose.bones[target_bone] - if prop_pbone.get(target_bone) is None: - prop = rna_idprop_ui_prop_get(prop_pbone, target_prop, create=True) - prop_pbone[target_prop] = blend_default - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - driver_path = prop_pbone.path_from_id() + ('["%s"]' % target_prop) - - def blend_target(driver): - var = driver.variables.new() - var.name = target_bone - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = driver_path - - def blend_transforms(new_pbone, from_bone_name, to_bone_name): - con = new_pbone.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = from_bone_name - - con = new_pbone.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = to_bone_name - - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - blend_target(driver) - - for i, new_bone_name in enumerate(apply_bones): - from_bone_name = from_bones[i] - to_bone_name = to_bones[i] - - # allow skipping some bones by having None in the list - if None in (new_bone_name, from_bone_name, to_bone_name): - continue - - new_pbone = obj.pose.bones[new_bone_name] - - blend_transforms(new_pbone, from_bone_name, to_bone_name) - - -def add_pole_target_bone(obj, base_bone_name, name, mode='CROSS'): - ''' - Does not actually create a poll target, just the bone to use as a poll target - ''' - mode_orig = obj.mode - bpy.ops.object.mode_set(mode='EDIT') - - arm = obj.data - - poll_ebone = arm.edit_bones.new(name) - base_ebone = arm.edit_bones[base_bone_name] - poll_name = poll_ebone.name - parent_ebone = base_ebone.parent - - base_head = base_ebone.head.copy() - base_tail = base_ebone.tail.copy() - base_dir = base_head - base_tail - - parent_head = parent_ebone.head.copy() - parent_tail = parent_ebone.tail.copy() - parent_dir = parent_head - parent_tail - - distance = (base_dir.length + parent_dir.length) - - if mode == 'CROSS': - # direction from the angle of the joint - offset = base_dir.copy().normalize() - parent_dir.copy().normalize() - offset.length = distance - elif mode == 'ZAVERAGE': - # between both bones Z axis - z_axis_a = base_ebone.matrix.copy().rotation_part() * Vector((0.0, 0.0, -1.0)) - z_axis_b = parent_ebone.matrix.copy().rotation_part() * Vector((0.0, 0.0, -1.0)) - offset = (z_axis_a + z_axis_b).normalize() * distance - else: - # preset axis - offset = Vector((0.0, 0.0, 0.0)) - if mode[0] == "+": - val = distance - else: - val = - distance - - setattr(offset, mode[1].lower(), val) - - poll_ebone.head = base_head + offset - poll_ebone.tail = base_head + (offset * (1.0 - (1.0 / 4.0))) - - bpy.ops.object.mode_set(mode=mode_orig) - - return poll_name - - -def get_side_name(name): - ''' - Returns the last part of a string (typically a bone's name) indicating - whether it is a a left or right (or center, or whatever) bone. - Returns an empty string if nothing is found. - ''' - if name[-2] in DELIMITER: - return name[-2:] - else: - return "" - - -def get_base_name(name): - ''' - Returns the part of a string (typically a bone's name) corresponding to it's - base name (no sidedness, no ORG prefix). - ''' - if name[-2] in DELIMITER: - return name[:-2] - else: - return name - - -def write_meta_rig(obj, func_name="metarig_template"): - ''' - Write a metarig as a python script, this rig is to have all info needed for - generating the real rig with rigify. - ''' - code = [] - - code.append("def %s():" % func_name) - code.append(" # generated by rigify.write_meta_rig") - bpy.ops.object.mode_set(mode='EDIT') - code.append(" bpy.ops.object.mode_set(mode='EDIT')") - - code.append(" obj = bpy.context.active_object") - code.append(" arm = obj.data") - - arm = obj.data - # write parents first - bones = [(len(bone.parent_recursive), bone.name) for bone in arm.edit_bones] - bones.sort(key=lambda item: item[0]) - bones = [item[1] for item in bones] - - - for bone_name in bones: - bone = arm.edit_bones[bone_name] - code.append(" bone = arm.edit_bones.new('%s')" % bone.name) - code.append(" bone.head[:] = %.4f, %.4f, %.4f" % bone.head.to_tuple(4)) - code.append(" bone.tail[:] = %.4f, %.4f, %.4f" % bone.tail.to_tuple(4)) - code.append(" bone.roll = %.4f" % bone.roll) - code.append(" bone.use_connect = %s" % str(bone.use_connect)) - if bone.parent: - code.append(" bone.parent = arm.edit_bones['%s']" % bone.parent.name) - - bpy.ops.object.mode_set(mode='OBJECT') - code.append("") - code.append(" bpy.ops.object.mode_set(mode='OBJECT')") - - for bone_name in bones: - pbone = obj.pose.bones[bone_name] - pbone_written = False - - # Only 1 level of props, simple types supported - for key, value in pbone.items(): - if key.startswith("_"): - continue - - if type(value) not in (float, str, int): - print("Unsupported ID Prop:", str((key, value))) - continue - - if type(value) == str: - value = "'" + value + "'" - - if not pbone_written: # only write bones we need - code.append(" pbone = obj.pose.bones['%s']" % bone_name) - - code.append(" pbone['%s'] = %s" % (key, value)) - - return "\n".join(code) - - -# *** bone class collection *** - - -def bone_class_instance(obj, slots, name="BoneContainer"): - ''' - bone collection utility class to help manage cases with - edit/pose/bone bones where switching modes can invalidate some of the members. - - there are also utility functions for manipulating all members. - ''' - - attr_names = tuple(slots) # dont modify the original - - if len(slots) != len(set(slots)): - raise Exception("duplicate entries found %s" % attr_names) - - slots = list(slots) # dont modify the original - for i in range(len(slots)): - member = slots[i] - slots.append(member + "_b") # bone bone - slots.append(member + "_p") # pose bone - slots.append(member + "_e") # edit bone - - class_dict = { \ - "obj": obj, \ - "attr_names": attr_names, \ - "attr_initialize": _bone_class_instance_attr_initialize, \ - "update": _bone_class_instance_update, \ - "rename": _bone_class_instance_rename, \ - "names": _bone_class_instance_names, \ - "copy": _bone_class_instance_copy, \ - "blend": _bone_class_instance_blend, \ - } - - instance = auto_class_instance(slots, name, class_dict) - return instance - - -def auto_class(slots, name="ContainerClass", class_dict=None): - - if class_dict: - class_dict = class_dict.copy() - else: - class_dict = {} - - class_dict["__slots__"] = tuple(slots) - - return type(name, (object,), class_dict) - - -def auto_class_instance(slots, name="ContainerClass", class_dict=None): - return auto_class(slots, name, class_dict)() - - -def _bone_class_instance_attr_initialize(self, attr_names, bone_names): - ''' Initializes attributes, both lists must be aligned - ''' - for attr in self.attr_names: - i = attr_names.index(attr) - setattr(self, attr, bone_names[i]) - - self.update() - - -def _bone_class_instance_update(self): - ''' Re-Assigns bones from the blender data - ''' - arm = self.obj.data - bbones = arm.bones - pbones = self.obj.pose.bones - ebones = arm.edit_bones - - for member in self.attr_names: - name = getattr(self, member, None) - if name is not None: - setattr(self, member + "_b", bbones.get(name)) - setattr(self, member + "_p", pbones.get(name)) - setattr(self, member + "_e", ebones.get(name)) - - -def _bone_class_instance_rename(self, attr, new_name): - ''' Rename bones, editmode only - ''' - - if self.obj.mode != 'EDIT': - raise Exception("Only rename in editmode supported") - - ebone = getattr(self, attr + "_e") - ebone.name = new_name - - # we may not get what is asked for so get the name from the editbone - setattr(self, attr, ebone.name) - - -def _bone_class_instance_copy(self, from_fmt="%s", to_fmt="%s", exclude_attrs=(), base_names=None): - from_name_ls = [] - new_name_ls = [] - new_slot_ls = [] - - for attr in self.attr_names: - - if attr in exclude_attrs: - continue - - bone_name_orig = getattr(self, attr) - ebone = getattr(self, attr + "_e") - # orig_names[attr] = bone_name_orig - - # insert formatting - if from_fmt != "%s": - bone_name = from_fmt % bone_name_orig - ebone.name = bone_name - bone_name = ebone.name # cant be sure we get what we ask for - else: - bone_name = bone_name_orig - - setattr(self, attr, bone_name) - - new_slot_ls.append(attr) - from_name_ls.append(bone_name) - if base_names: - bone_name_orig = base_names[bone_name_orig] - new_name_ls.append(to_fmt % bone_name_orig) - - new_bones = copy_bone_simple_list(self.obj.data, from_name_ls, new_name_ls, True) - new_bc = bone_class_instance(self.obj, new_slot_ls) - - for i, attr in enumerate(new_slot_ls): - ebone = new_bones[i] - setattr(new_bc, attr + "_e", ebone) - setattr(new_bc, attr, ebone.name) - - return new_bc - - -def _bone_class_instance_names(self): - return [getattr(self, attr) for attr in self.attr_names] - - -def _bone_class_instance_blend(self, from_bc, to_bc, target_bone=None, target_prop="blend"): - ''' - Use for blending bone chains. - - blend_target = (bone_name, bone_property) - default to the last bone, blend prop - - XXX - toggles editmode, need to re-validate all editbones :( - ''' - - if self.attr_names != from_bc.attr_names or self.attr_names != to_bc.attr_names: - raise Exception("can only blend between matching chains") - - apply_bones = [getattr(self, attr) for attr in self.attr_names] - from_bones = [getattr(from_bc, attr) for attr in from_bc.attr_names] - to_bones = [getattr(to_bc, attr) for attr in to_bc.attr_names] - - blend_bone_list(self.obj, apply_bones, from_bones, to_bones, target_bone, target_prop) diff --git a/release/scripts/op/add_armature_human.py b/release/scripts/op/add_armature_human.py deleted file mode 100644 index 95b414f8228..00000000000 --- a/release/scripts/op/add_armature_human.py +++ /dev/null @@ -1,616 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# -import bpy -import mathutils -from math import cos, sin, pi - -# could this be stored elsewhere? - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('pelvis') - bone.head[:] = -0.0000, -0.0145, 1.1263 - bone.tail[:] = -0.0000, -0.0145, 0.9563 - bone.roll = 3.1416 - bone.use_connect = False - bone = arm.edit_bones.new('torso') - bone.head[:] = -0.0000, -0.0145, 1.1263 - bone.tail[:] = -0.0000, -0.0145, 1.2863 - bone.roll = 3.1416 - bone.use_connect = False - bone.parent = arm.edit_bones['pelvis'] - bone = arm.edit_bones.new('spine.01') - bone.head[:] = 0.0000, 0.0394, 0.9688 - bone.tail[:] = -0.0000, -0.0145, 1.1263 - bone.roll = 0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['torso'] - bone = arm.edit_bones.new('spine.02') - bone.head[:] = -0.0000, -0.0145, 1.1263 - bone.tail[:] = -0.0000, -0.0213, 1.2884 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.01'] - bone = arm.edit_bones.new('thigh.L') - bone.head[:] = 0.0933, -0.0421, 1.0434 - bone.tail[:] = 0.0933, -0.0516, 0.5848 - bone.roll = 0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['spine.01'] - bone = arm.edit_bones.new('thigh.R') - bone.head[:] = -0.0933, -0.0421, 1.0434 - bone.tail[:] = -0.0933, -0.0516, 0.5848 - bone.roll = -0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['spine.01'] - bone = arm.edit_bones.new('spine.03') - bone.head[:] = -0.0000, -0.0213, 1.2884 - bone.tail[:] = -0.0000, 0.0160, 1.3705 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.02'] - bone = arm.edit_bones.new('shin.L') - bone.head[:] = 0.0933, -0.0516, 0.5848 - bone.tail[:] = 0.0915, 0.0100, 0.1374 - bone.roll = 0.0034 - bone.use_connect = True - bone.parent = arm.edit_bones['thigh.L'] - bone = arm.edit_bones.new('shin.R') - bone.head[:] = -0.0933, -0.0516, 0.5848 - bone.tail[:] = -0.0915, 0.0100, 0.1374 - bone.roll = -0.0034 - bone.use_connect = True - bone.parent = arm.edit_bones['thigh.R'] - bone = arm.edit_bones.new('spine.04') - bone.head[:] = -0.0000, 0.0160, 1.3705 - bone.tail[:] = -0.0000, 0.0590, 1.4497 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.03'] - bone = arm.edit_bones.new('foot.L') - bone.head[:] = 0.0915, 0.0100, 0.1374 - bone.tail[:] = 0.1033, -0.0968, 0.0510 - bone.roll = 2.8964 - bone.use_connect = True - bone.parent = arm.edit_bones['shin.L'] - bone = arm.edit_bones.new('foot.R') - bone.head[:] = -0.0915, 0.0100, 0.1374 - bone.tail[:] = -0.1033, -0.0968, 0.0510 - bone.roll = -2.8793 - bone.use_connect = True - bone.parent = arm.edit_bones['shin.R'] - bone = arm.edit_bones.new('neck_base') - bone.head[:] = -0.0000, 0.0590, 1.4497 - bone.tail[:] = -0.0000, 0.0401, 1.5389 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.04'] - bone = arm.edit_bones.new('toe.L') - bone.head[:] = 0.1033, -0.0968, 0.0510 - bone.tail[:] = 0.1136, -0.1848, 0.0510 - bone.roll = 0.0001 - bone.use_connect = True - bone.parent = arm.edit_bones['foot.L'] - bone = arm.edit_bones.new('heel.L') - bone.head[:] = 0.0809, 0.0969, -0.0000 - bone.tail[:] = 0.1020, -0.0846, -0.0000 - bone.roll = -0.0001 - bone.use_connect = False - bone.parent = arm.edit_bones['foot.L'] - bone = arm.edit_bones.new('toe.R') - bone.head[:] = -0.1033, -0.0968, 0.0510 - bone.tail[:] = -0.1136, -0.1848, 0.0510 - bone.roll = -0.0002 - bone.use_connect = True - bone.parent = arm.edit_bones['foot.R'] - bone = arm.edit_bones.new('heel.R') - bone.head[:] = -0.0809, 0.0969, -0.0000 - bone.tail[:] = -0.1020, -0.0846, -0.0000 - bone.roll = -0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['foot.R'] - bone = arm.edit_bones.new('head') - bone.head[:] = -0.0000, 0.0401, 1.5389 - bone.tail[:] = -0.0000, 0.0401, 1.5979 - bone.roll = 3.1416 - bone.use_connect = True - bone.parent = arm.edit_bones['neck_base'] - bone = arm.edit_bones.new('DLT-shoulder.L') - bone.head[:] = 0.0141, -0.0346, 1.4991 - bone.tail[:] = 0.1226, 0.0054, 1.4991 - bone.roll = 0.0005 - bone.use_connect = False - bone.parent = arm.edit_bones['neck_base'] - bone = arm.edit_bones.new('DLT-shoulder.R') - bone.head[:] = -0.0141, -0.0346, 1.4991 - bone.tail[:] = -0.1226, 0.0054, 1.4991 - bone.roll = -0.0005 - bone.use_connect = False - bone.parent = arm.edit_bones['neck_base'] - bone = arm.edit_bones.new('neck.01') - bone.head[:] = -0.0000, 0.0401, 1.5389 - bone.tail[:] = -0.0000, 0.0176, 1.5916 - bone.roll = 0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['head'] - bone = arm.edit_bones.new('shoulder.L') - bone.head[:] = 0.0141, -0.0346, 1.4991 - bone.tail[:] = 0.1226, 0.0216, 1.5270 - bone.roll = -0.1225 - bone.use_connect = False - bone.parent = arm.edit_bones['DLT-shoulder.L'] - bone = arm.edit_bones.new('shoulder.R') - bone.head[:] = -0.0141, -0.0346, 1.4991 - bone.tail[:] = -0.1226, 0.0216, 1.5270 - bone.roll = 0.0849 - bone.use_connect = False - bone.parent = arm.edit_bones['DLT-shoulder.R'] - bone = arm.edit_bones.new('neck.02') - bone.head[:] = -0.0000, 0.0176, 1.5916 - bone.tail[:] = -0.0000, 0.0001, 1.6499 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['neck.01'] - bone = arm.edit_bones.new('DLT-upper_arm.L') - bone.head[:] = 0.1482, 0.0483, 1.4943 - bone.tail[:] = 0.2586, 0.1057, 1.5124 - bone.roll = 1.4969 - bone.use_connect = False - bone.parent = arm.edit_bones['shoulder.L'] - bone = arm.edit_bones.new('DLT-upper_arm.R') - bone.head[:] = -0.1482, 0.0483, 1.4943 - bone.tail[:] = -0.2586, 0.1057, 1.5124 - bone.roll = -1.4482 - bone.use_connect = False - bone.parent = arm.edit_bones['shoulder.R'] - bone = arm.edit_bones.new('neck.03') - bone.head[:] = -0.0000, 0.0001, 1.6499 - bone.tail[:] = -0.0000, 0.0001, 1.8522 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['neck.02'] - bone = arm.edit_bones.new('upper_arm.L') - bone.head[:] = 0.1482, 0.0483, 1.4943 - bone.tail[:] = 0.3929, 0.0522, 1.4801 - bone.roll = 1.6281 - bone.use_connect = False - bone.parent = arm.edit_bones['DLT-upper_arm.L'] - bone = arm.edit_bones.new('upper_arm.R') - bone.head[:] = -0.1482, 0.0483, 1.4943 - bone.tail[:] = -0.3929, 0.0522, 1.4801 - bone.roll = -1.6281 - bone.use_connect = False - bone.parent = arm.edit_bones['DLT-upper_arm.R'] - bone = arm.edit_bones.new('forearm.L') - bone.head[:] = 0.3929, 0.0522, 1.4801 - bone.tail[:] = 0.6198, 0.0364, 1.4906 - bone.roll = 1.5240 - bone.use_connect = True - bone.parent = arm.edit_bones['upper_arm.L'] - bone = arm.edit_bones.new('forearm.R') - bone.head[:] = -0.3929, 0.0522, 1.4801 - bone.tail[:] = -0.6198, 0.0364, 1.4906 - bone.roll = -1.5219 - bone.use_connect = True - bone.parent = arm.edit_bones['upper_arm.R'] - bone = arm.edit_bones.new('hand.L') - bone.head[:] = 0.6198, 0.0364, 1.4906 - bone.tail[:] = 0.6592, 0.0364, 1.4853 - bone.roll = -3.0065 - bone.use_connect = True - bone.parent = arm.edit_bones['forearm.L'] - bone = arm.edit_bones.new('hand.R') - bone.head[:] = -0.6198, 0.0364, 1.4906 - bone.tail[:] = -0.6592, 0.0364, 1.4853 - bone.roll = 3.0065 - bone.use_connect = True - bone.parent = arm.edit_bones['forearm.R'] - bone = arm.edit_bones.new('palm.04.L') - bone.head[:] = 0.6514, 0.0658, 1.4906 - bone.tail[:] = 0.7287, 0.0810, 1.4747 - bone.roll = -3.0715 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.L'] - bone = arm.edit_bones.new('palm.03.L') - bone.head[:] = 0.6533, 0.0481, 1.4943 - bone.tail[:] = 0.7386, 0.0553, 1.4781 - bone.roll = -3.0290 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.L'] - bone = arm.edit_bones.new('palm.02.L') - bone.head[:] = 0.6539, 0.0305, 1.4967 - bone.tail[:] = 0.7420, 0.0250, 1.4835 - bone.roll = -3.0669 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.L'] - bone = arm.edit_bones.new('palm.01.L') - bone.head[:] = 0.6514, 0.0116, 1.4961 - bone.tail[:] = 0.7361, -0.0074, 1.4823 - bone.roll = -2.9422 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.L'] - bone = arm.edit_bones.new('thumb.01.L') - bone.head[:] = 0.6380, -0.0005, 1.4848 - bone.tail[:] = 0.6757, -0.0408, 1.4538 - bone.roll = -0.7041 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.L'] - bone = arm.edit_bones.new('palm.04.R') - bone.head[:] = -0.6514, 0.0658, 1.4906 - bone.tail[:] = -0.7287, 0.0810, 1.4747 - bone.roll = 3.0715 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.R'] - bone = arm.edit_bones.new('palm.03.R') - bone.head[:] = -0.6533, 0.0481, 1.4943 - bone.tail[:] = -0.7386, 0.0553, 1.4781 - bone.roll = 3.0290 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.R'] - bone = arm.edit_bones.new('palm.02.R') - bone.head[:] = -0.6539, 0.0305, 1.4967 - bone.tail[:] = -0.7420, 0.0250, 1.4835 - bone.roll = 3.0669 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.R'] - bone = arm.edit_bones.new('thumb.01.R') - bone.head[:] = -0.6380, -0.0005, 1.4848 - bone.tail[:] = -0.6757, -0.0408, 1.4538 - bone.roll = 0.7041 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.R'] - bone = arm.edit_bones.new('palm.01.R') - bone.head[:] = -0.6514, 0.0116, 1.4961 - bone.tail[:] = -0.7361, -0.0074, 1.4823 - bone.roll = 2.9332 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.R'] - bone = arm.edit_bones.new('finger_pinky.01.L') - bone.head[:] = 0.7287, 0.0810, 1.4747 - bone.tail[:] = 0.7698, 0.0947, 1.4635 - bone.roll = -3.0949 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.04.L'] - bone = arm.edit_bones.new('finger_ring.01.L') - bone.head[:] = 0.7386, 0.0553, 1.4781 - bone.tail[:] = 0.7890, 0.0615, 1.4667 - bone.roll = -3.0081 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.03.L'] - bone = arm.edit_bones.new('finger_middle.01.L') - bone.head[:] = 0.7420, 0.0250, 1.4835 - bone.tail[:] = 0.7975, 0.0221, 1.4712 - bone.roll = -2.9982 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.02.L'] - bone = arm.edit_bones.new('finger_index.01.L') - bone.head[:] = 0.7361, -0.0074, 1.4823 - bone.tail[:] = 0.7843, -0.0204, 1.4718 - bone.roll = -3.0021 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.01.L'] - bone = arm.edit_bones.new('thumb.02.L') - bone.head[:] = 0.6757, -0.0408, 1.4538 - bone.tail[:] = 0.6958, -0.0568, 1.4376 - bone.roll = -0.6963 - bone.use_connect = True - bone.parent = arm.edit_bones['thumb.01.L'] - bone = arm.edit_bones.new('finger_pinky.01.R') - bone.head[:] = -0.7287, 0.0810, 1.4747 - bone.tail[:] = -0.7698, 0.0947, 1.4635 - bone.roll = 3.0949 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.04.R'] - bone = arm.edit_bones.new('finger_ring.01.R') - bone.head[:] = -0.7386, 0.0553, 1.4781 - bone.tail[:] = -0.7890, 0.0615, 1.4667 - bone.roll = 2.9892 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.03.R'] - bone = arm.edit_bones.new('finger_middle.01.R') - bone.head[:] = -0.7420, 0.0250, 1.4835 - bone.tail[:] = -0.7975, 0.0221, 1.4712 - bone.roll = 2.9816 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.02.R'] - bone = arm.edit_bones.new('thumb.02.R') - bone.head[:] = -0.6757, -0.0408, 1.4538 - bone.tail[:] = -0.6958, -0.0568, 1.4376 - bone.roll = 0.6963 - bone.use_connect = True - bone.parent = arm.edit_bones['thumb.01.R'] - bone = arm.edit_bones.new('finger_index.01.R') - bone.head[:] = -0.7361, -0.0074, 1.4823 - bone.tail[:] = -0.7843, -0.0204, 1.4718 - bone.roll = 2.9498 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.01.R'] - bone = arm.edit_bones.new('finger_pinky.02.L') - bone.head[:] = 0.7698, 0.0947, 1.4635 - bone.tail[:] = 0.7910, 0.1018, 1.4577 - bone.roll = -3.0949 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_pinky.01.L'] - bone = arm.edit_bones.new('finger_ring.02.L') - bone.head[:] = 0.7890, 0.0615, 1.4667 - bone.tail[:] = 0.8177, 0.0650, 1.4600 - bone.roll = -3.0006 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_ring.01.L'] - bone = arm.edit_bones.new('finger_middle.02.L') - bone.head[:] = 0.7975, 0.0221, 1.4712 - bone.tail[:] = 0.8289, 0.0206, 1.4643 - bone.roll = -2.9995 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_middle.01.L'] - bone = arm.edit_bones.new('finger_index.02.L') - bone.head[:] = 0.7843, -0.0204, 1.4718 - bone.tail[:] = 0.8117, -0.0275, 1.4660 - bone.roll = -3.0064 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_index.01.L'] - bone = arm.edit_bones.new('thumb.03.L') - bone.head[:] = 0.6958, -0.0568, 1.4376 - bone.tail[:] = 0.7196, -0.0671, 1.4210 - bone.roll = -0.8072 - bone.use_connect = True - bone.parent = arm.edit_bones['thumb.02.L'] - bone = arm.edit_bones.new('finger_pinky.02.R') - bone.head[:] = -0.7698, 0.0947, 1.4635 - bone.tail[:] = -0.7910, 0.1018, 1.4577 - bone.roll = 3.0949 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_pinky.01.R'] - bone = arm.edit_bones.new('finger_ring.02.R') - bone.head[:] = -0.7890, 0.0615, 1.4667 - bone.tail[:] = -0.8177, 0.0650, 1.4600 - bone.roll = 3.0341 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_ring.01.R'] - bone = arm.edit_bones.new('finger_middle.02.R') - bone.head[:] = -0.7975, 0.0221, 1.4712 - bone.tail[:] = -0.8289, 0.0206, 1.4643 - bone.roll = 3.0291 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_middle.01.R'] - bone = arm.edit_bones.new('thumb.03.R') - bone.head[:] = -0.6958, -0.0568, 1.4376 - bone.tail[:] = -0.7196, -0.0671, 1.4210 - bone.roll = 0.8072 - bone.use_connect = True - bone.parent = arm.edit_bones['thumb.02.R'] - bone = arm.edit_bones.new('finger_index.02.R') - bone.head[:] = -0.7843, -0.0204, 1.4718 - bone.tail[:] = -0.8117, -0.0275, 1.4660 - bone.roll = 3.0705 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_index.01.R'] - bone = arm.edit_bones.new('finger_pinky.03.L') - bone.head[:] = 0.7910, 0.1018, 1.4577 - bone.tail[:] = 0.8109, 0.1085, 1.4523 - bone.roll = -3.0949 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_pinky.02.L'] - bone = arm.edit_bones.new('finger_ring.03.L') - bone.head[:] = 0.8177, 0.0650, 1.4600 - bone.tail[:] = 0.8396, 0.0677, 1.4544 - bone.roll = -2.9819 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_ring.02.L'] - bone = arm.edit_bones.new('finger_middle.03.L') - bone.head[:] = 0.8289, 0.0206, 1.4643 - bone.tail[:] = 0.8534, 0.0193, 1.4589 - bone.roll = -3.0004 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_middle.02.L'] - bone = arm.edit_bones.new('finger_index.03.L') - bone.head[:] = 0.8117, -0.0275, 1.4660 - bone.tail[:] = 0.8331, -0.0333, 1.4615 - bone.roll = -3.0103 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_index.02.L'] - bone = arm.edit_bones.new('finger_pinky.03.R') - bone.head[:] = -0.7910, 0.1018, 1.4577 - bone.tail[:] = -0.8109, 0.1085, 1.4523 - bone.roll = 3.0949 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_pinky.02.R'] - bone = arm.edit_bones.new('finger_ring.03.R') - bone.head[:] = -0.8177, 0.0650, 1.4600 - bone.tail[:] = -0.8396, 0.0677, 1.4544 - bone.roll = 2.9819 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_ring.02.R'] - bone = arm.edit_bones.new('finger_middle.03.R') - bone.head[:] = -0.8289, 0.0206, 1.4643 - bone.tail[:] = -0.8534, 0.0193, 1.4589 - bone.roll = 3.0004 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_middle.02.R'] - bone = arm.edit_bones.new('finger_index.03.R') - bone.head[:] = -0.8117, -0.0275, 1.4660 - bone.tail[:] = -0.8331, -0.0333, 1.4615 - bone.roll = 2.9917 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_index.02.R'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['torso'] - pbone['type'] = 'spine_pivot_flex' - pbone = obj.pose.bones['torso'] - pbone['spine_pivot_flex.later_main'] = 1 - pbone = obj.pose.bones['torso'] - pbone['spine_pivot_flex.layer_extra'] = 2 - pbone = obj.pose.bones['thigh.L'] - pbone['type'] = 'leg_biped' - pbone = obj.pose.bones['thigh.L'] - pbone['leg_biped_generic.layer_ik'] = 12 - pbone = obj.pose.bones['thigh.L'] - pbone['leg_biped_generic.layer_fk'] = 11 - pbone = obj.pose.bones['thigh.R'] - pbone['type'] = 'leg_biped' - pbone = obj.pose.bones['thigh.R'] - pbone['leg_biped_generic.layer_ik'] = 14 - pbone = obj.pose.bones['thigh.R'] - pbone['leg_biped_generic.layer_fk'] = 13 - pbone = obj.pose.bones['head'] - pbone['type'] = 'neck_flex' - pbone = obj.pose.bones['head'] - pbone['neck_flex.layer_extra'] = 4 - pbone = obj.pose.bones['head'] - pbone['neck_flex.layer_main'] = 3 - pbone = obj.pose.bones['DLT-shoulder.L'] - pbone['type'] = 'delta' - pbone = obj.pose.bones['DLT-shoulder.R'] - pbone['type'] = 'delta' - pbone = obj.pose.bones['shoulder.L'] - pbone['type'] = 'copy' - pbone = obj.pose.bones['shoulder.L'] - pbone['copy.layers'] = 1 - pbone = obj.pose.bones['shoulder.R'] - pbone['type'] = 'copy' - pbone = obj.pose.bones['shoulder.R'] - pbone['copy.layers'] = 1 - pbone = obj.pose.bones['DLT-upper_arm.L'] - pbone['type'] = 'delta' - pbone = obj.pose.bones['DLT-upper_arm.R'] - pbone['type'] = 'delta' - pbone = obj.pose.bones['upper_arm.L'] - pbone['type'] = 'arm_biped' - pbone = obj.pose.bones['upper_arm.L'] - pbone['arm_biped_generic.elbow_parent'] = 'spine.04' - pbone = obj.pose.bones['upper_arm.L'] - pbone['arm_biped_generic.layer_fk'] = 7 - pbone = obj.pose.bones['upper_arm.L'] - pbone['arm_biped_generic.layer_ik'] = 8 - pbone = obj.pose.bones['upper_arm.R'] - pbone['type'] = 'arm_biped' - pbone = obj.pose.bones['upper_arm.R'] - pbone['arm_biped_generic.layer_fk'] = 9 - pbone = obj.pose.bones['upper_arm.R'] - pbone['arm_biped_generic.layer_ik'] = 10 - pbone = obj.pose.bones['upper_arm.R'] - pbone['arm_biped_generic.elbow_parent'] = 'spine.04' - pbone = obj.pose.bones['palm.01.L'] - pbone['type'] = 'palm_curl' - pbone = obj.pose.bones['palm.01.L'] - pbone['palm_curl.layers'] = 5 - pbone = obj.pose.bones['thumb.01.L'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['thumb.01.L'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['thumb.01.L'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['thumb.01.R'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['thumb.01.R'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['thumb.01.R'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['palm.01.R'] - pbone['type'] = 'palm_curl' - pbone = obj.pose.bones['palm.01.R'] - pbone['palm_curl.layers'] = 5 - pbone = obj.pose.bones['finger_pinky.01.L'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_pinky.01.L'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_pinky.01.L'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['finger_ring.01.L'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_ring.01.L'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_ring.01.L'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['finger_middle.01.L'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_middle.01.L'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_middle.01.L'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['finger_index.01.L'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_index.01.L'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_index.01.L'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['finger_pinky.01.R'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_pinky.01.R'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_pinky.01.R'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['finger_ring.01.R'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_ring.01.R'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_ring.01.R'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['finger_middle.01.R'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_middle.01.R'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_middle.01.R'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['finger_index.01.R'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_index.01.R'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_index.01.R'] - pbone['finger_curl.layer_extra'] = 6 - - -class AddHuman(bpy.types.Operator): - '''Add an advanced human metarig base''' - bl_idname = "object.armature_human_advanced_add" - bl_label = "Add Humanoid (advanced metarig)" - bl_options = {'REGISTER', 'UNDO'} - - def execute(self, context): - bpy.ops.object.armature_add() - obj = context.active_object - mode_orig = obj.mode - bpy.ops.object.mode_set(mode='EDIT') # grr, remove bone - bones = context.active_object.data.edit_bones - bones.remove(bones[0]) - metarig_template() - bpy.ops.object.mode_set(mode=mode_orig) - return {'FINISHED'} - - -# Add to a menu -menu_func = (lambda self, context: self.layout.operator(AddHuman.bl_idname, - icon='OUTLINER_OB_ARMATURE', text="Human (Meta-Rig)")) - - -def register(): - bpy.types.INFO_MT_armature_add.append(menu_func) - - -def unregister(): - bpy.types.INFO_MT_armature_add.remove(menu_func) - -if __name__ == "__main__": - register() diff --git a/release/scripts/op/console_python.py b/release/scripts/op/console_python.py index 3d9ed098de7..23ee157b279 100644 --- a/release/scripts/op/console_python.py +++ b/release/scripts/op/console_python.py @@ -268,7 +268,7 @@ def banner(context): add_scrollback("Execute: Enter", 'OUTPUT') add_scrollback("Autocomplete: Ctrl+Space", 'OUTPUT') add_scrollback("Ctrl +/- Wheel: Zoom", 'OUTPUT') - add_scrollback("Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, bgl, blf, mathutils, geometry", 'OUTPUT') + add_scrollback("Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, bgl, blf, mathutils", 'OUTPUT') add_scrollback("", 'OUTPUT') add_scrollback(" WARNING!!! Blender 2.5 API is subject to change, see API reference for more info.", 'ERROR') add_scrollback("", 'OUTPUT') diff --git a/release/scripts/op/io_scene_fbx/export_fbx.py b/release/scripts/op/io_scene_fbx/export_fbx.py index 4859e87620f..bf44416b49d 100644 --- a/release/scripts/op/io_scene_fbx/export_fbx.py +++ b/release/scripts/op/io_scene_fbx/export_fbx.py @@ -382,18 +382,17 @@ def save(operator, context, filepath="", # ---------------------------------------------- # storage classes - class my_bone_class: - __slots__ =(\ - 'blenName',\ - 'blenBone',\ - 'blenMeshes',\ - 'restMatrix',\ - 'parent',\ - 'blenName',\ - 'fbxName',\ - 'fbxArm',\ - '__pose_bone',\ - '__anim_poselist') + class my_bone_class(object): + __slots__ =("blenName", + "blenBone", + "blenMeshes", + "restMatrix", + "parent", + "blenName", + "fbxName", + "fbxArm", + "__pose_bone", + "__anim_poselist") def __init__(self, blenBone, fbxArm): @@ -474,7 +473,25 @@ def save(operator, context, filepath="", self.__anim_poselist.clear() - class my_object_generic: + class my_object_generic(object): + __slots__ =("fbxName", + "blenObject", + "blenData", + "origData", + "blenTextures", + "blenMaterials", + "blenMaterialList", + "blenAction", + "blenActionList", + "fbxGroupNames", + "fbxParent", + "fbxBoneParent", + "fbxBones", + "fbxArm", + "matrixWorld", + "__anim_poselist", + ) + # Other settings can be applied for each type - mesh, armature etc. def __init__(self, ob, matrixWorld = None): self.fbxName = sane_obname(ob) @@ -492,8 +509,12 @@ def save(operator, context, filepath="", else: return self.matrixWorld - def setPoseFrame(self, f): - self.__anim_poselist[f] = self.blenObject.matrix_world.copy() + def setPoseFrame(self, f, fake=False): + if fake: + # annoying, have to clear GLOBAL_MATRIX + self.__anim_poselist[f] = self.matrixWorld * GLOBAL_MATRIX.copy().invert() + else: + self.__anim_poselist[f] = self.blenObject.matrix_world.copy() def getAnimParRelMatrix(self, frame): if self.fbxParent: @@ -2648,7 +2669,7 @@ Takes: {''') #Blender.Window.RedrawAll() if ob_generic == ob_meshes and my_ob.fbxArm: # We cant animate armature meshes! - pass + my_ob.setPoseFrame(i, fake=True) else: my_ob.setPoseFrame(i) diff --git a/release/scripts/op/io_scene_obj/export_obj.py b/release/scripts/op/io_scene_obj/export_obj.py index 3fd91615bb6..352c82a4dbd 100644 --- a/release/scripts/op/io_scene_obj/export_obj.py +++ b/release/scripts/op/io_scene_obj/export_obj.py @@ -759,7 +759,7 @@ def _write(context, filepath, if EXPORT_ANIMATION: # Add frame to the filepath. context_name[2] = '_%.6d' % frame - scene.frame_current = frame + scene.frame_set(frame, 0.0) if EXPORT_SEL_ONLY: objects = context.selected_objects else: @@ -787,7 +787,7 @@ def _write(context, filepath, EXPORT_CURVE_AS_NURBS) - scene.frame_current = orig_frame + scene.frame_set(orig_frame, 0.0) # Restore old active scene. # orig_scene.makeCurrent() diff --git a/release/scripts/op/io_scene_obj/import_obj.py b/release/scripts/op/io_scene_obj/import_obj.py index f6c5e625fb0..0a97d08bf99 100644 --- a/release/scripts/op/io_scene_obj/import_obj.py +++ b/release/scripts/op/io_scene_obj/import_obj.py @@ -35,7 +35,7 @@ import os import time import bpy import mathutils -from geometry import PolyFill +from mathutils.geometry import PolyFill from io_utils import load_image, unpack_list, unpack_face_list diff --git a/release/scripts/op/io_shape_mdd/import_mdd.py b/release/scripts/op/io_shape_mdd/import_mdd.py index d008ff931ff..2aa132384a7 100644 --- a/release/scripts/op/io_shape_mdd/import_mdd.py +++ b/release/scripts/op/io_shape_mdd/import_mdd.py @@ -70,7 +70,7 @@ def load(operator, context, filepath, frame_start=0, frame_step=1): obj.active_shape_key_index = len(obj.data.shape_keys.keys)-1 index = len(obj.data.shape_keys.keys)-1 - obj.show_shape_key = True + obj.show_only_shape_key = True verts = obj.data.shape_keys.keys[len(obj.data.shape_keys.keys)-1].data @@ -78,7 +78,7 @@ def load(operator, context, filepath, frame_start=0, frame_step=1): for v in verts: # 12 is the size of 3 floats v.co[:] = unpack('>3f', file.read(12)) #me.update() - obj.show_shape_key = False + obj.show_only_shape_key = False # insert keyframes diff --git a/release/scripts/op/object.py b/release/scripts/op/object.py index 61a4478c5e4..b5c46c757b3 100644 --- a/release/scripts/op/object.py +++ b/release/scripts/op/object.py @@ -60,9 +60,7 @@ class SelectPattern(bpy.types.Operator): def invoke(self, context, event): wm = context.window_manager - # return wm.invoke_props_popup(self, event) - wm.invoke_props_popup(self, event) - return {'RUNNING_MODAL'} + return wm.invoke_props_popup(self, event) def draw(self, context): layout = self.layout @@ -254,9 +252,9 @@ class ShapeTransfer(bpy.types.Operator): key = ob.add_shape_key(from_mix=False) # we need a rest key.name = name ob.active_shape_key_index = len(me.shape_keys.keys) - 1 - ob.show_shape_key = True + ob.show_only_shape_key = True - from geometry import BarycentricTransform + from mathutils.geometry import BarycentricTransform from mathutils import Vector if use_clamp and mode == 'OFFSET': diff --git a/release/scripts/op/presets.py b/release/scripts/op/presets.py index 2f6a5b69c20..3a78f15d770 100644 --- a/release/scripts/op/presets.py +++ b/release/scripts/op/presets.py @@ -29,6 +29,7 @@ class AddPresetBase(): - preset_subdir ''' # bl_idname = "script.preset_base_add" # bl_label = "Add a Python Preset" + bl_options = {'REGISTER'} # only because invoke_props_popup requires. name = bpy.props.StringProperty(name="Name", description="Name of the preset, used to make the path name", maxlen=64, default="") remove_active = bpy.props.BoolProperty(default=False, options={'HIDDEN'}) @@ -53,7 +54,7 @@ class AddPresetBase(): return {'FINISHED'} filename = self.as_filename(self.name) - + target_path = bpy.utils.preset_paths(self.preset_subdir)[0] # we need some way to tell the user and system preset path filepath = os.path.join(target_path, filename) + ".py" @@ -75,8 +76,8 @@ class AddPresetBase(): file_preset.write("%s = %r\n" % (rna_path, value)) file_preset.close() - - preset_menu_class.bl_label = bpy.path.display_name(self.name) + + preset_menu_class.bl_label = bpy.path.display_name(filename) else: preset_active = preset_menu_class.bl_label @@ -107,14 +108,13 @@ class AddPresetBase(): return {'FINISHED'} + def check(self, context): + self.name = self.as_filename(self.name) + def invoke(self, context, event): if not self.remove_active: wm = context.window_manager - #crashes, TODO - fix - #return wm.invoke_props_popup(self, event) - - wm.invoke_props_popup(self, event) - return {'RUNNING_MODAL'} + return wm.invoke_props_dialog(self) else: return self.execute(context) diff --git a/release/scripts/op/uvcalc_smart_project.py b/release/scripts/op/uvcalc_smart_project.py index 83303f8f7f1..f82acf69b54 100644 --- a/release/scripts/op/uvcalc_smart_project.py +++ b/release/scripts/op/uvcalc_smart_project.py @@ -22,9 +22,8 @@ # -from mathutils import Matrix, Vector +from mathutils import Matrix, Vector, geometry import time -import geometry import bpy from math import cos, radians diff --git a/release/scripts/op/wm.py b/release/scripts/op/wm.py index 4ce10233a9b..9827c93f218 100644 --- a/release/scripts/op/wm.py +++ b/release/scripts/op/wm.py @@ -632,9 +632,8 @@ class WM_OT_doc_edit(bpy.types.Operator): def draw(self, context): layout = self.layout - props = self.properties # XXX, this should not be needed, api problem! - layout.label(text="Descriptor ID: '%s'" % props.doc_id) - layout.prop(props, "doc_new", text="") + layout.label(text="Descriptor ID: '%s'" % self.doc_id) + layout.prop(self, "doc_new", text="") def invoke(self, context, event): wm = context.window_manager @@ -662,6 +661,7 @@ class WM_OT_properties_edit(bpy.types.Operator): '''Internal use (edit a property data_path)''' bl_idname = "wm.properties_edit" bl_label = "Edit Property" + bl_options = {'REGISTER'} # only because invoke_props_popup requires. data_path = rna_path property = rna_property @@ -722,11 +722,7 @@ class WM_OT_properties_edit(bpy.types.Operator): self.description = prop_ui.get("description", "") wm = context.window_manager - # This crashes, TODO - fix - #return wm.invoke_props_popup(self, event) - - wm.invoke_props_popup(self, event) - return {'RUNNING_MODAL'} + return wm.invoke_props_popup(self, event) class WM_OT_properties_add(bpy.types.Operator): diff --git a/release/scripts/ui/properties_data_armature_rigify.py b/release/scripts/ui/properties_data_armature_rigify.py deleted file mode 100644 index 6453ea9e038..00000000000 --- a/release/scripts/ui/properties_data_armature_rigify.py +++ /dev/null @@ -1,334 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# -import bpy -from bpy.props import * - - -class PoseTemplate(bpy.types.IDPropertyGroup): - name = StringProperty(name="Name of the slave", description="", maxlen=64, default="") - - -class PoseTemplateSettings(bpy.types.IDPropertyGroup): - templates = CollectionProperty(type=PoseTemplate, name="Templates", description="") - active_template_index = IntProperty(name="Index of the active slave", description="", default=-1, min=-1, max=65535) - use_generate_deform_rig = BoolProperty(name="Create Deform Rig", description="Create a copy of the metarig, constrainted by the generated rig", default=False) - - -def metarig_templates(): - import rigify - return rigify.get_submodule_types() - - -class DATA_PT_template(bpy.types.Panel): - bl_label = "Meta-Rig Templates" - bl_space_type = 'PROPERTIES' - bl_region_type = 'WINDOW' - bl_context = "data" - bl_options = {'DEFAULT_CLOSED'} - - templates = [] - - @classmethod - def poll(cls, context): - if not context.armature: - return False - obj = context.object - if obj: - return (obj.mode in ('POSE', 'OBJECT')) - return False - - def draw(self, context): - layout = self.layout - try: - active_type = context.active_pose_bone["type"] - except: - active_type = None - - scene = context.scene - pose_templates = scene.pose_templates - - if pose_templates.active_template_index == -1: - pose_templates.active_template_index = 0 - - if not self.templates: - self.templates[:] = metarig_templates() - - while(len(pose_templates.templates) < len(self.templates)): - pose_templates.templates.add() - while(len(pose_templates.templates) > len(self.templates)): - pose_templates.templates.remove(0) - - for i, template_name in enumerate(self.templates): - template = pose_templates.templates[i] - if active_type == template_name: - template.name = "<%s>" % template_name.replace("_", " ") - else: - template.name = " %s " % template_name.replace("_", " ") - - row = layout.row() - row.operator("pose.metarig_generate", text="Generate") - row.operator("pose.metarig_validate", text="Check") - row.operator("pose.metarig_graph", text="Graph") - row = layout.row() - row.prop(pose_templates, "use_generate_deform_rig") - - row = layout.row() - col = row.column() - col.template_list(pose_templates, "templates", pose_templates, "active_template_index", rows=1) - - subrow = col.split(percentage=0.5, align=True) - subsubrow = subrow.row(align=True) - subsubrow.operator("pose.metarig_assign", text="Assign") - subsubrow.operator("pose.metarig_clear", text="Clear") - - if self.templates: - subsubrow = subrow.split(percentage=0.8) - subsubrow.operator("pose.metarig_sample_add", text="Sample").metarig_type = self.templates[pose_templates.active_template_index] - subsubrow.operator("pose.metarig_sample_add", text="All").metarig_type = "" # self.templates[pose_templates.active_template_index] - - sub = row.column(align=True) - sub.operator("pose.metarig_reload", icon="FILE_REFRESH", text="") - - -class Reload(bpy.types.Operator): - '''Re-Scan the metarig package directory for scripts''' - - bl_idname = "pose.metarig_reload" - bl_label = "Re-Scan the list of metarig types" - - def execute(self, context): - DATA_PT_template.templates[:] = metarig_templates() - return {'FINISHED'} - - -def rigify_report_exception(operator, exception): - import traceback - import sys - import os - # find the module name where the error happened - # hint, this is the metarig type! - exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() - fn = traceback.extract_tb(exceptionTraceback)[-1][0] - fn = os.path.basename(fn) - fn = os.path.splitext(fn)[0] - message = [] - if fn.startswith("__"): - message.append("Incorrect armature...") - else: - message.append("Incorrect armature for type '%s'" % fn) - message.append(exception.message) - - message.reverse() # XXX - stupid! menu's are upside down! - - operator.report(set(['INFO']), '\n'.join(message)) - - -class Generate(bpy.types.Operator): - '''Generates a metarig from the active armature''' - - bl_idname = "pose.metarig_generate" - bl_label = "Generate Metarig" - - def execute(self, context): - import rigify - reload(rigify) - - meta_def = context.scene.pose_templates.use_generate_deform_rig - - try: - rigify.generate_rig(context, context.object, META_DEF=meta_def) - except rigify.RigifyError as rig_exception: - rigify_report_exception(self, rig_exception) - - return {'FINISHED'} - - -class Validate(bpy.types.Operator): - '''Validate a metarig from the active armature''' - - bl_idname = "pose.metarig_validate" - bl_label = "Validate Metarig" - - def execute(self, context): - import rigify - reload(rigify) - try: - rigify.validate_rig(context, context.object) - except rigify.RigifyError as rig_exception: - rigify_report_exception(self, rig_exception) - return {'FINISHED'} - - -class Sample(bpy.types.Operator): - '''Create a sample metarig to be modified before generating the final rig.''' - - bl_idname = "pose.metarig_sample_add" - bl_label = "Re-Scan Metarig Scripts" - - metarig_type = StringProperty(name="Type", description="Name of the rig type to generate a sample of, a blank string for all", maxlen=128, default="") - - def execute(self, context): - import rigify - reload(rigify) - final = (self.metarig_type == "") - objects = rigify.generate_test(context, metarig_type=self.metarig_type, GENERATE_FINAL=final) - - if len(objects) > 1: - for i, (obj_meta, obj_gen) in enumerate(objects): - obj_meta.location.x = i * 1.0 - if obj_gen: - obj_gen.location.x = i * 1.0 - - return {'FINISHED'} - - -class Graph(bpy.types.Operator): - '''Create a graph from the active armature through graphviz''' - - bl_idname = "pose.metarig_graph" - bl_label = "Pose Graph" - - def execute(self, context): - import os - import graphviz_export - import bpy - reload(graphviz_export) - obj = bpy.context.object - if(bpy.data.filepath): - path = os.path.splitext(bpy.data.filepath)[0] + "-" + bpy.path.clean_name(obj.name) - else: - import tempfile - path = tempfile.mktemp(prefix=bpy.app.tempdir) + "-" + bpy.path.clean_name(obj.name) - path_dot = path + ".dot" - path_png = path + ".png" - saved = graphviz_export.graph_armature(bpy.context.object, path_dot, CONSTRAINTS=False, DRIVERS=False) - - if saved: - # if we seriously want this working everywhere we'll need some new approach - os.system("dot -Tpng %r > %r" % (path_dot, path_png)) - if not os.path.exists(path_png) or os.stat(path_png)[6] == 0: - self.report('ERROR', "Graphvis could not create %r check graphviz is installed" % path_png) - return {'CANCELLED'} - - bpy.ops.image.external_edit(filepath=path_png) - #os.system("python /b/xdot.py '%s' &" % path_dot) - - return {'FINISHED'} - - -class AsScript(bpy.types.Operator): - '''Write the edit armature out as a python script''' - - bl_idname = "pose.metarig_to_script" - bl_label = "Write Metarig to Script" - bl_options = {'REGISTER', 'UNDO'} - - filepath = StringProperty(name="File Path", description="File path used for exporting the Armature file", maxlen=1024, default="") - - def execute(self, context): - import rigify_utils - reload(rigify_utils) - obj = context.object - code = rigify_utils.write_meta_rig(obj) - path = self.filepath - file = open(path, "w") - file.write(code) - file.close() - - return {'FINISHED'} - - def invoke(self, context, event): - import os - obj = context.object - self.filepath = os.path.splitext(bpy.data.filepath)[0] + "-" + bpy.path.clean_name(obj.name) + ".py" - wm = context.window_manager - wm.add_fileselect(self) - return {'RUNNING_MODAL'} - - -# operators that use the GUI -class ActiveAssign(bpy.types.Operator): - '''Assign to the active posebone''' - - bl_idname = "pose.metarig_assign" - bl_label = "Assign to the active posebone" - - @classmethod - def poll(cls, context): - bone = context.active_pose_bone - return bool(bone and bone.id_data.mode == 'POSE') - - def execute(self, context): - scene = context.scene - pose_templates = scene.pose_templates - template_name = DATA_PT_template.templates[pose_templates.active_template_index] - context.active_pose_bone["type"] = template_name - return {'FINISHED'} - - -class ActiveClear(bpy.types.Operator): - '''Clear type from the active posebone''' - - bl_idname = "pose.metarig_clear" - bl_label = "Metarig Clear Type" - - @classmethod - def poll(cls, context): - bone = context.active_pose_bone - return bool(bone and bone.id_data.mode == 'POSE') - - def execute(self, context): - scene = context.scene - try: - del context.active_pose_bone["type"] - except: - return {'CANCELLED'} - return {'FINISHED'} - - -class INFO_MT_armature_metarig_add(bpy.types.Menu): - bl_idname = "INFO_MT_armature_metarig_add" - bl_label = "Meta-Rig" - - def draw(self, context): - import rigify - - layout = self.layout - layout.operator_context = 'INVOKE_REGION_WIN' - - for submodule_type in rigify.get_submodule_types(): - text = bpy.path.display_name(submodule_type) - layout.operator("pose.metarig_sample_add", text=text, icon='OUTLINER_OB_ARMATURE').metarig_type = submodule_type - -menu_func = (lambda self, context: self.layout.menu("INFO_MT_armature_metarig_add", icon='OUTLINER_OB_ARMATURE')) -import space_info # ensure the menu is loaded first - - -def register(): - bpy.types.Scene.pose_templates = PointerProperty(type=PoseTemplateSettings, name="Pose Templates", description="Pose Template Settings") - space_info.INFO_MT_armature_add.append(menu_func) - - -def unregister(): - del bpy.types.Scene.pose_templates - space_info.INFO_MT_armature_add.remove(menu_func) - -if __name__ == "__main__": - register() diff --git a/release/scripts/ui/properties_render.py b/release/scripts/ui/properties_render.py index 81727de209b..d31c947dabf 100644 --- a/release/scripts/ui/properties_render.py +++ b/release/scripts/ui/properties_render.py @@ -764,9 +764,14 @@ class RENDER_PT_antialiasing(RenderButtonsPanel, bpy.types.Panel): class RENDER_PT_motion_blur(RenderButtonsPanel, bpy.types.Panel): - bl_label = "Full Sample Motion Blur" + bl_label = "Sampled Motion Blur" bl_options = {'DEFAULT_CLOSED'} COMPAT_ENGINES = {'BLENDER_RENDER'} + + @classmethod + def poll(cls, context): + rd = context.scene.render + return not rd.use_full_sample and (rd.engine in cls.COMPAT_ENGINES) def draw_header(self, context): rd = context.scene.render diff --git a/release/scripts/ui/space_image.py b/release/scripts/ui/space_image.py index d46220ad7b9..93516457dd6 100644 --- a/release/scripts/ui/space_image.py +++ b/release/scripts/ui/space_image.py @@ -660,6 +660,26 @@ class IMAGE_PT_tools_brush_texture(BrushButtonsPanel, bpy.types.Panel): col.template_ID_preview(brush, "texture", new="texture.new", rows=3, cols=8) +class IMAGE_PT_tools_brush_tool(BrushButtonsPanel, bpy.types.Panel): + bl_label = "Tool" + bl_options = {'DEFAULT_CLOSED'} + + def draw(self, context): + layout = self.layout + settings = context.tool_settings.image_paint + brush = settings.brush + + col = layout.column(align=True) + + col.prop(brush, "imagepaint_tool", expand=False, text="") + + row = layout.row(align=True) + row.prop(brush, "use_paint_sculpt", text="", icon='SCULPTMODE_HLT') + row.prop(brush, "use_paint_vertex", text="", icon='VPAINT_HLT') + row.prop(brush, "use_paint_weight", text="", icon='WPAINT_HLT') + row.prop(brush, "use_paint_texture", text="", icon='TPAINT_HLT') + + class IMAGE_PT_paint_stroke(BrushButtonsPanel, bpy.types.Panel): bl_label = "Paint Stroke" bl_options = {'DEFAULT_CLOSED'} diff --git a/release/scripts/ui/space_sequencer.py b/release/scripts/ui/space_sequencer.py index 85e0298e584..1e1b3f9751c 100644 --- a/release/scripts/ui/space_sequencer.py +++ b/release/scripts/ui/space_sequencer.py @@ -295,6 +295,7 @@ class SEQUENCER_MT_strip(bpy.types.Menu): layout.separator() layout.operator("sequencer.reload") layout.operator("sequencer.reassign_inputs") + layout.operator("sequencer.swap_inputs") layout.separator() layout.operator("sequencer.lock") layout.operator("sequencer.unlock") @@ -407,6 +408,13 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, bpy.types.Panel): layout = self.layout strip = act_strip(context) + if strip.input_count > 0: + col = layout.column() + col.prop(strip, "input_1") + if strip.input_count > 1: + col.prop(strip, "input_2") + if strip.input_count > 2: + col.prop(strip, "input_3") if strip.type == 'COLOR': layout.prop(strip, "color") @@ -653,6 +661,9 @@ class SEQUENCER_PT_scene(SequencerButtonsPanel, bpy.types.Panel): layout.label(text="Camera Override") layout.template_ID(strip, "scene_camera") + sce = strip.scene + layout.label(text="Original frame range: "+ str(sce.frame_start) +" - "+ str(sce.frame_end) + " (" + str(sce.frame_end-sce.frame_start+1) + ")") + class SEQUENCER_PT_filter(SequencerButtonsPanel, bpy.types.Panel): bl_label = "Filter" diff --git a/release/scripts/ui/space_text.py b/release/scripts/ui/space_text.py index 163fa07e1d6..58f12ba51e4 100644 --- a/release/scripts/ui/space_text.py +++ b/release/scripts/ui/space_text.py @@ -174,7 +174,7 @@ class TEXT_MT_text(bpy.types.Menu): layout.column() layout.operator("text.run_script") - #ifndef DISABLE_PYTHON + #ifdef WITH_PYTHON # XXX if(BPY_is_pyconstraint(text)) # XXX uiMenuItemO(head, 0, "text.refresh_pyconstraints"); #endif diff --git a/release/scripts/ui/space_userpref.py b/release/scripts/ui/space_userpref.py index df737d5630a..ef5e88a874e 100644 --- a/release/scripts/ui/space_userpref.py +++ b/release/scripts/ui/space_userpref.py @@ -838,13 +838,21 @@ class USERPREF_PT_addons(bpy.types.Panel): modules = [] loaded_modules = set() + + # RELEASE SCRIPTS: official scripts distributed in Blender releases paths = bpy.utils.script_paths("addons") - # if folder addons_contrib/ exists, scripts in there will be loaded + + # CONTRIB SCRIPTS: good for testing but not official scripts yet + # if folder addons_contrib/ exists, scripts in there will be loaded too paths += bpy.utils.script_paths("addons_contrib") + + # EXTERN SCRIPTS: external projects scripts + # if folder addons_extern/ exists, scripts in there will be loaded too + paths += bpy.utils.script_paths("addons_extern") if bpy.app.debug: t_main = time.time() - + # fake module importing def fake_module(mod_name, mod_path, speedy=True): if bpy.app.debug: diff --git a/release/scripts/ui/space_view3d.py b/release/scripts/ui/space_view3d.py index f7238364142..2cc05cb5e2d 100644 --- a/release/scripts/ui/space_view3d.py +++ b/release/scripts/ui/space_view3d.py @@ -1951,6 +1951,8 @@ class VIEW3D_PT_view3d_properties(bpy.types.Panel): col.prop(view, "lock_object", text="") if view.lock_object and view.lock_object.type == 'ARMATURE': col.prop_search(view, "lock_bone", view.lock_object.data, "bones", text="") + elif not view.lock_object: + col.prop(view, "lock_cursor", text="Lock to Cursor") col = layout.column(align=True) col.label(text="Clip:") diff --git a/release/windows/installer/00.sconsblender.nsi b/release/windows/installer/00.sconsblender.nsi index d16e0f1ae61..7edb0924131 100644 --- a/release/windows/installer/00.sconsblender.nsi +++ b/release/windows/installer/00.sconsblender.nsi @@ -11,6 +11,8 @@ !include "FileFunc.nsh" !include "WordFunc.nsh" !include "nsDialogs.nsh" +!include "x64.nsh" + SetCompressor /SOLID lzma @@ -148,6 +150,9 @@ Section "Blender-[VERSION] (required)" SecCopyUI [DODATAFILES] SetOutPath $INSTDIR + ${If} ${RunningX64} + SetRegView 64 + ${EndIf} ; Write the installation path into the registry WriteRegStr HKLM "SOFTWARE\BlenderFoundation" "Install_Dir" "$INSTDIR" WriteRegStr HKLM "SOFTWARE\BlenderFoundation" "ConfigData_Dir" "$BLENDERHOME" @@ -179,6 +184,9 @@ SectionEnd Section "Open .blend files with Blender-[VERSION]" Section4 + ${If} ${RunningX64} + SetRegView 64 + ${EndIf} WriteRegStr HKCR ".blend" "" "blendfile" WriteRegStr HKCR "blendfile" "" "Blender .blend File" WriteRegStr HKCR "blendfile\shell" "" "open" @@ -188,32 +196,50 @@ Section "Open .blend files with Blender-[VERSION]" Section4 SectionEnd -UninstallText "This will uninstall Blender [VERSION], and all datafiles from the installation dir. Hit next to continue." +UninstallText "This will uninstall Blender [VERSION], and all installed files. Before continuing make sure you have created backup of all the files you may want to keep: startup.blend, bookmarks.txt, recent-files.txt. Hit next to continue." Section "Uninstall" ; remove registry keys + ${If} ${RunningX64} + SetRegView 64 + ${EndIf} ReadRegStr $BLENDERHOME HKLM "SOFTWARE\BlenderFoundation" "ConfigData_Dir" ReadRegStr $SHORTVERSION HKLM "SOFTWARE\BlenderFoundation" "ShortVersion" DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" DeleteRegKey HKLM "SOFTWARE\BlenderFoundation" SetShellVarContext all - - StrCpy $0 "$SMPROGRAMS\Blender Foundation\" - MessageBox MB_OK $0 + ; remove files [DELROOTDIRCONTS] + ; remove bundled python + RmDir /r $INSTDIR\$SHORTVERSION\python + Delete "$INSTDIR\uninstall.exe" - MessageBox MB_YESNO "Erase $BLENDERHOME? This includes all installed scripts and configuration files and any file you may have created there." IDNO Next - RMDir /r "$BLENDERHOME" -Next: - ; remove shortcuts, if any. + MessageBox MB_YESNO "Recursively erase contents of $BLENDERHOME\$SHORTVERSION\scripts? NOTE: This includes all installed scripts and *any* file and directory you have manually created, installed later or copied. This also including .blend files." IDNO NextNoScriptRemove + RMDir /r "$BLENDERHOME\$SHORTVERSION\scripts" +NextNoScriptRemove: + MessageBox MB_YESNO "Recursively erase contents from $BLENDERHOME\$SHORTVERSION\config? NOTE: This includes your startup.blend, bookmarks and any other file and directory you may have created in that directory" IDNO NextNoConfigRemove + RMDir /r "$BLENDERHOME\$SHORTVERSION\config" +NextNoConfigRemove: + MessageBox MB_YESNO "Recursively erase contents from $BLENDERHOME\$SHORTVERSION\plugins? NOTE: This includes files and subdirectories in this directory" IDNO NextNoPluginRemove + RMDir /r "$BLENDERHOME\$SHORTVERSION\plugins" +NextNoPluginRemove: + ; try to remove dirs, but leave them if they contain anything + RMDir "$BLENDERHOME\$SHORTVERSION\plugins" + RMDir "$BLENDERHOME\$SHORTVERSION\config" + RMDir "$BLENDERHOME\$SHORTVERSION\scripts" + RMDir "$BLENDERHOME\$SHORTVERSION" + RMDir "$BLENDERHOME" + ; remove shortcuts + Delete "$SMPROGRAMS\Blender Foundation\Blender\*.*" Delete "$DESKTOP\Blender.lnk" ; remove all link related directories and files - RMDir /r "$SMPROGRAMS\Blender Foundation\" - ; remove entire installation directory, including any file created by the user - RMDir /r "$INSTDIR" + RMDir "$SMPROGRAMS\Blender Foundation\Blender" + RMDir "$SMPROGRAMS\Blender Foundation" + ; Clear out installation dir + RMDir "$INSTDIR" SectionEnd !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 1f1b1d883bc..a043dbad3b8 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -25,9 +25,9 @@ # ***** END GPL LICENSE BLOCK ***** ADD_SUBDIRECTORY(blender) -ADD_SUBDIRECTORY(kernel) IF(WITH_GAMEENGINE) + ADD_SUBDIRECTORY(kernel) ADD_SUBDIRECTORY(gameengine) ENDIF(WITH_GAMEENGINE) diff --git a/source/SConscript b/source/SConscript index c452f21b8e2..8d08d9cca08 100644 --- a/source/SConscript +++ b/source/SConscript @@ -1,11 +1,10 @@ #!/usr/bin/python Import ('env') -SConscript(['blender/SConscript', - 'kernel/SConscript', - 'creator/SConscript']) +SConscript(['blender/SConscript', 'creator/SConscript']) + if env['WITH_BF_GAMEENGINE']: - SConscript (['gameengine/SConscript']) + SConscript (['kernel/SConscript', 'gameengine/SConscript']) if env['WITH_BF_PLAYER']: SConscript (['blenderplayer/bad_level_call_stubs/SConscript']) diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h index 933d287bcff..c01886be65e 100644 --- a/source/blender/blenfont/BLF_api.h +++ b/source/blender/blenfont/BLF_api.h @@ -48,10 +48,12 @@ void BLF_position(int fontid, float x, float y, float z); void BLF_size(int fontid, int size, int dpi); /* Draw the string using the default font, size and dpi. */ -void BLF_draw_default(float x, float y, float z, char *str); +void BLF_draw_default(float x, float y, float z, const char *str); +void BLF_draw_default_ascii(float x, float y, float z, const char *str); /* Draw the string using the current font. */ -void BLF_draw(int fontid, char *str); +void BLF_draw(int fontid, const char *str); +void BLF_draw_ascii(int fontid, const char *str); /* * This function return the bounding box of the string diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c index f6b7c5f71e6..59189abf1e3 100644 --- a/source/blender/blenfont/intern/blf.c +++ b/source/blender/blenfont/intern/blf.c @@ -361,7 +361,7 @@ void BLF_blur(int fontid, int size) font->blur= size; } -void BLF_draw_default(float x, float y, float z, char *str) +void BLF_draw_default(float x, float y, float z, const char *str) { if (!str) return; @@ -378,6 +378,24 @@ void BLF_draw_default(float x, float y, float z, char *str) BLF_position(global_font_default, x, y, z); BLF_draw(global_font_default, str); } +/* same as above but call 'BLF_draw_ascii' */ +void BLF_draw_default_ascii(float x, float y, float z, const char *str) +{ + if (!str) + return; + + if (global_font_default == -1) + global_font_default= blf_search("default"); + + if (global_font_default == -1) { + printf("Warning: Can't found default font!!\n"); + return; + } + + BLF_size(global_font_default, global_font_points, global_font_dpi); + BLF_position(global_font_default, x, y, z); + BLF_draw_ascii(global_font_default, str); +} void BLF_rotation_default(float angle) { @@ -388,32 +406,49 @@ void BLF_rotation_default(float angle) font->angle= angle; } -void BLF_draw(int fontid, char *str) -{ - FontBLF *font; +static void blf_draw__start(FontBLF *font) +{ /* * The pixmap alignment hack is handle * in BLF_position (old ui_rasterpos_safe). */ - font= BLF_get(fontid); + + glEnable(GL_BLEND); + glEnable(GL_TEXTURE_2D); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glPushMatrix(); + glTranslatef(font->pos[0], font->pos[1], font->pos[2]); + glScalef(font->aspect, font->aspect, 1.0); + + if (font->flags & BLF_ROTATION) + glRotatef(font->angle, 0.0f, 0.0f, 1.0f); +} +static void blf_draw__end(void) +{ + glPopMatrix(); + glDisable(GL_BLEND); + glDisable(GL_TEXTURE_2D); +} + +void BLF_draw(int fontid, const char *str) +{ + FontBLF *font= BLF_get(fontid); if (font) { - glEnable(GL_BLEND); - glEnable(GL_TEXTURE_2D); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glPushMatrix(); - glTranslatef(font->pos[0], font->pos[1], font->pos[2]); - glScalef(font->aspect, font->aspect, 1.0); - - if (font->flags & BLF_ROTATION) - glRotatef(font->angle, 0.0f, 0.0f, 1.0f); - + blf_draw__start(font); blf_font_draw(font, str); + blf_draw__end(); + } +} - glPopMatrix(); - glDisable(GL_BLEND); - glDisable(GL_TEXTURE_2D); +void BLF_draw_ascii(int fontid, const char *str) +{ + FontBLF *font= BLF_get(fontid); + if (font) { + blf_draw__start(font); + blf_font_draw_ascii(font, str); + blf_draw__end(); } } diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c index 04f40ac825b..9fb40f0206d 100644 --- a/source/blender/blenfont/intern/blf_font.c +++ b/source/blender/blenfont/intern/blf_font.c @@ -92,7 +92,7 @@ void blf_font_size(FontBLF *font, int size, int dpi) } } -void blf_font_draw(FontBLF *font, char *str) +void blf_font_draw(FontBLF *font, const char *str) { unsigned int c; GlyphBLF *g, *g_prev; @@ -146,6 +146,65 @@ void blf_font_draw(FontBLF *font, char *str) } } +/* faster version of blf_font_draw, ascii only for view dimensions */ +void blf_font_draw_ascii(FontBLF *font, const char *str) +{ + char c; + GlyphBLF *g, *g_prev; + FT_Vector delta; + FT_UInt glyph_index; + int pen_x, pen_y; + int i, has_kerning, st; + + if (!font->glyph_cache) + return; + + i= 0; + pen_x= 0; + pen_y= 0; + has_kerning= FT_HAS_KERNING(font->face); + g_prev= NULL; + + /* build ascii on demand */ + if(font->glyph_ascii_table['0']==NULL) { + for(i=0; i<256; i++) { + g= blf_glyph_search(font->glyph_cache, i); + if (!g) { + glyph_index= FT_Get_Char_Index(font->face, i); + g= blf_glyph_add(font, glyph_index, i); + } + font->glyph_ascii_table[i]= g; + } + } + + while ((c= *(str++))) { + g= font->glyph_ascii_table[c]; + + /* if we don't found a glyph, skip it. */ + if (!g) + continue; + + if (has_kerning && g_prev) { + delta.x= 0; + delta.y= 0; + + if (font->flags & BLF_KERNING_DEFAULT) + st= FT_Get_Kerning(font->face, g_prev->idx, g->idx, ft_kerning_default, &delta); + else + st= FT_Get_Kerning(font->face, g_prev->idx, g->idx, FT_KERNING_UNFITTED, &delta); + + if (st == 0) + pen_x += delta.x >> 6; + } + + /* do not return this loop if clipped, we want every character tested */ + blf_glyph_render(font, g, (float)pen_x, (float)pen_y); + + pen_x += g->advance; + g_prev= g; + } +} + void blf_font_buffer(FontBLF *font, char *str) { unsigned char *cbuf; @@ -460,6 +519,8 @@ static void blf_font_fill(FontBLF *font) font->b_col[1]= 0; font->b_col[2]= 0; font->b_col[3]= 0; + + memset(font->glyph_ascii_table, 0, sizeof(font->glyph_ascii_table)); } FontBLF *blf_font_new(char *name, char *filename) diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c index 0d694c28b2b..2c0b833297e 100644 --- a/source/blender/blenfont/intern/blf_glyph.c +++ b/source/blender/blenfont/intern/blf_glyph.c @@ -36,6 +36,7 @@ #include FT_FREETYPE_H #include FT_GLYPH_H #include FT_OUTLINE_H +#include FT_BITMAP_H #include "MEM_guardedalloc.h" @@ -49,6 +50,7 @@ #include "blf_internal_types.h" #include "blf_internal.h" +FT_Library global_ft_lib; GlyphCacheBLF *blf_glyph_cache_find(FontBLF *font, int size, int dpi) { @@ -190,22 +192,40 @@ GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c) FT_GlyphSlot slot; GlyphBLF *g; FT_Error err; - FT_Bitmap bitmap; + FT_Bitmap bitmap, tempbitmap; + int sharp; FT_BBox bbox; unsigned int key; + sharp = 0; /* TODO make the value be configurable somehow */ + g= blf_glyph_search(font->glyph_cache, c); if (g) return(g); - err= FT_Load_Glyph(font->face, index, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP); + if (sharp) + err = FT_Load_Glyph(font->face, index, FT_LOAD_TARGET_MONO); + else + err = FT_Load_Glyph(font->face, index, FT_LOAD_TARGET_NORMAL | FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP); /* Sure about NO_* flags? */ if (err) return(NULL); /* get the glyph. */ slot= font->face->glyph; - err= FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL); + if (sharp) { + err = FT_Render_Glyph(slot, FT_RENDER_MODE_MONO); + + /* Convert result from 1 bit per pixel to 8 bit per pixel */ + /* Accum errors for later, fine if not interested beyond "ok vs any error" */ + FT_Bitmap_New(&tempbitmap); + err += FT_Bitmap_Convert(global_ft_lib, &slot->bitmap, &tempbitmap, 1); /* Does Blender use Pitch 1 always? It works so far */ + err += FT_Bitmap_Copy(global_ft_lib, &tempbitmap, &slot->bitmap); + err += FT_Bitmap_Done(global_ft_lib, &tempbitmap); + } else { + err = FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL); + } + if (err || slot->format != FT_GLYPH_FORMAT_BITMAP) return(NULL); @@ -228,6 +248,14 @@ GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c) g->height= bitmap.rows; if (g->width && g->height) { + if (sharp) { + /* Font buffer uses only 0 or 1 values, Blender expects full 0..255 range */ + int i; + for (i=0; i < (g->width * g->height); i++) { + bitmap.buffer[i] = 255 * bitmap.buffer[i]; + } + } + g->bitmap= (unsigned char *)MEM_mallocN(g->width * g->height, "glyph bitmap"); memcpy((void *)g->bitmap, (void *)bitmap.buffer, g->width * g->height); } diff --git a/source/blender/blenfont/intern/blf_internal.h b/source/blender/blenfont/intern/blf_internal.h index 844a7a3c3de..c7a3cd54740 100644 --- a/source/blender/blenfont/intern/blf_internal.h +++ b/source/blender/blenfont/intern/blf_internal.h @@ -44,7 +44,8 @@ FontBLF *blf_font_new_from_mem(char *name, unsigned char *mem, int mem_size); void blf_font_attach_from_mem(FontBLF *font, const unsigned char *mem, int mem_size); void blf_font_size(FontBLF *font, int size, int dpi); -void blf_font_draw(FontBLF *font, char *str); +void blf_font_draw(FontBLF *font, const char *str); +void blf_font_draw_ascii(FontBLF *font, const char *str); void blf_font_buffer(FontBLF *font, char *str); void blf_font_boundbox(FontBLF *font, char *str, rctf *box); void blf_font_width_and_height(FontBLF *font, char *str, float *width, float *height); diff --git a/source/blender/blenfont/intern/blf_internal_types.h b/source/blender/blenfont/intern/blf_internal_types.h index 368eb8751de..70318c51823 100644 --- a/source/blender/blenfont/intern/blf_internal_types.h +++ b/source/blender/blenfont/intern/blf_internal_types.h @@ -177,6 +177,9 @@ typedef struct FontBLF { /* current glyph cache, size and dpi. */ GlyphCacheBLF *glyph_cache; + + /* fast ascii lookip */ + GlyphBLF *glyph_ascii_table[256]; /* freetype2 face. */ FT_Face face; diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h index 466b5d9a845..eacb61d122c 100644 --- a/source/blender/blenkernel/BKE_armature.h +++ b/source/blender/blenkernel/BKE_armature.h @@ -105,7 +105,8 @@ void armature_mat_pose_to_bone(struct bPoseChannel *pchan, float inmat[][4], flo void armature_loc_pose_to_bone(struct bPoseChannel *pchan, float *inloc, float *outloc); void armature_mat_pose_to_delta(float delta_mat[][4], float pose_mat[][4], float arm_mat[][4]); -void pchan_apply_mat4(struct bPoseChannel *pchan, float mat[][4]); +void pchan_mat3_to_rot(struct bPoseChannel *pchan, float mat[][3], short use_compat); +void pchan_apply_mat4(struct bPoseChannel *pchan, float mat[][4], short use_comat); void pchan_to_mat4(struct bPoseChannel *pchan, float chan_mat[4][4]); /* Rotation Mode Conversions - Used for PoseChannels + Objects... */ @@ -118,6 +119,10 @@ typedef struct Mat4 { Mat4 *b_bone_spline_setup(struct bPoseChannel *pchan, int rest); +/* like EBONE_VISIBLE */ +#define PBONE_VISIBLE(arm, bone) (((bone)->layer & (arm)->layer) && !((bone)->flag & BONE_HIDDEN_P)) +#define _BONE_VISIBLE(arm, bone) (((bone)->layer & (arm)->layer) && !((bone)->flag & BONE_HIDDEN_P)) + #ifdef __cplusplus } #endif diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index 70badbc96e8..8f6d3451de2 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -44,7 +44,7 @@ struct ReportList; struct Scene; struct Main; -#define BLENDER_VERSION 254 +#define BLENDER_VERSION 255 #define BLENDER_SUBVERSION 0 #define BLENDER_MINVERSION 250 diff --git a/source/blender/blenkernel/BKE_brush.h b/source/blender/blenkernel/BKE_brush.h index 25d0eb5bc36..5afab9af9b3 100644 --- a/source/blender/blenkernel/BKE_brush.h +++ b/source/blender/blenkernel/BKE_brush.h @@ -36,7 +36,7 @@ struct Brush; struct ImBuf; struct Scene; struct wmOperator; -enum CurveMappingPreset; +// enum CurveMappingPreset; /* datablock functions */ struct Brush *add_brush(const char *name); diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h index b74de66f7b6..d98fb082aa9 100644 --- a/source/blender/blenkernel/BKE_library.h +++ b/source/blender/blenkernel/BKE_library.h @@ -67,7 +67,6 @@ void free_libblock_us(struct ListBase *lb, void *idv); void free_main(struct Main *mainvar); void tag_main(struct Main *mainvar, int tag); -int splitIDname(char *name, char *left, int *nr); void rename_id(struct ID *id, char *name); void name_uiprefix_id(char *name, struct ID *id); void test_idbutton(char *name); diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h index fc0ab2eea1e..a05dce81fbc 100644 --- a/source/blender/blenkernel/BKE_multires.h +++ b/source/blender/blenkernel/BKE_multires.h @@ -37,6 +37,8 @@ struct Multires; struct MultiresModifierData; struct ModifierData; struct Object; +struct Scene; +struct MDisps; void multires_mark_as_modified(struct Object *ob); @@ -71,5 +73,13 @@ void multires_free(struct Multires *mr); void multires_load_old(struct Object *ob, struct Mesh *me); void multires_load_old_250(struct Mesh *); +void multiresModifier_scale_disp(struct Scene *scene, struct Object *ob); +void multiresModifier_prepare_join(struct Scene *scene, struct Object *ob, struct Object *to_ob); + +int multires_mdisp_corners(struct MDisps *s); + +/* update multires data after topology changing */ +void multires_topology_changed(struct Object *ob); + #endif diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index 7451d43a578..b64011a7c9a 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -98,10 +98,10 @@ void disable_speed_curve(int val); float bsystem_time(struct Scene *scene, struct Object *ob, float cfra, float ofs); void object_scale_to_mat3(struct Object *ob, float mat[][3]); void object_rot_to_mat3(struct Object *ob, float mat[][3]); -void object_mat3_to_rot(struct Object *ob, float mat[][3], int use_compat); +void object_mat3_to_rot(struct Object *ob, float mat[][3], short use_compat); void object_to_mat3(struct Object *ob, float mat[][3]); void object_to_mat4(struct Object *ob, float mat[][4]); -void object_apply_mat4(struct Object *ob, float mat[][4]); +void object_apply_mat4(struct Object *ob, float mat[][4], short use_compat); void set_no_parent_ipo(int val); diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h index 1416e1280cf..5bcd69865fc 100644 --- a/source/blender/blenkernel/BKE_particle.h +++ b/source/blender/blenkernel/BKE_particle.h @@ -171,7 +171,9 @@ typedef struct ParticleCollision float co1[3], co2[3]; // ray start and end points float ve1[3], ve2[3]; // particle velocities float ray_len; // original length of co2-co1, needed for collision time evaluation - float t; // time of previous collision, needed for substracting face velocity + float f; // time factor of previous collision, needed for substracting face velocity + float cfra; // start of the timestep (during frame change, since previous integer frame) + float dfra; // duration of timestep in frames } ParticleCollision; typedef struct ParticleDrawData { diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h index 8cf541ae03a..eef56e5503b 100644 --- a/source/blender/blenkernel/BKE_sequencer.h +++ b/source/blender/blenkernel/BKE_sequencer.h @@ -46,6 +46,11 @@ struct StripElem; #define BUILD_SEQAR_COUNT_CURRENT 1 #define BUILD_SEQAR_COUNT_CHILDREN 2 +#define EARLY_NO_INPUT -1 +#define EARLY_DO_EFFECT 0 +#define EARLY_USE_INPUT_1 1 +#define EARLY_USE_INPUT_2 2 + /* sequence iterator */ typedef struct SeqIterator { @@ -148,10 +153,10 @@ void seq_free_editing(struct Scene *scene); void seq_free_clipboard(void); struct Editing *seq_give_editing(struct Scene *scene, int alloc); char *give_seqname(struct Sequence *seq); -struct ImBuf *give_ibuf_seq(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size); -struct ImBuf *give_ibuf_seq_threaded(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size); -struct ImBuf *give_ibuf_seq_direct(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int render_size, struct Sequence *seq); -struct ImBuf *give_ibuf_seqbase(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chan_shown, int render_size, struct ListBase *seqbasep); +struct ImBuf *give_ibuf_seq(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size); +struct ImBuf *give_ibuf_seq_threaded(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size); +struct ImBuf *give_ibuf_seq_direct(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int preview_render_size, struct Sequence *seq); +struct ImBuf *give_ibuf_seqbase(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chan_shown, int preview_render_size, struct ListBase *seqbasep); void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, int render_size); void calc_sequence(struct Scene *scene, struct Sequence *seq); void calc_sequence_disp(struct Scene *scene, struct Sequence *seq); @@ -213,6 +218,7 @@ int seq_tx_test(struct Sequence * seq); int seq_single_check(struct Sequence *seq); void seq_single_fix(struct Sequence *seq); int seq_test_overlap(struct ListBase * seqbasep, struct Sequence *test); +void seq_translate(struct Scene *scene, struct Sequence *seq, int delta); struct ListBase *seq_seqbase(struct ListBase *seqbase, struct Sequence *seq); void seq_offset_animdata(struct Scene *scene, struct Sequence *seq, int ofs); void seq_dupe_animdata(struct Scene *scene, char *name_from, char *name_to); diff --git a/source/blender/blenkernel/BKE_utildefines.h b/source/blender/blenkernel/BKE_utildefines.h index 016aef4d865..a1968459fd6 100644 --- a/source/blender/blenkernel/BKE_utildefines.h +++ b/source/blender/blenkernel/BKE_utildefines.h @@ -279,8 +279,11 @@ behaviour, though it may not be the best in practice. /*little macro so inline keyword works*/ #if defined(_MSC_VER) #define BM_INLINE static __forceinline -#else +#elif defined(__GNUC__) #define BM_INLINE static inline __attribute((always_inline)) +#else +/* #warning "MSC/GNUC defines not found, inline non-functional" */ +#define BM_INLINE static #endif #define BMEMSET(mem, val, size) {unsigned int _i; char *_c = (char*) mem; for (_i=0; _iname, name, 31); + BLI_strncpy(chan->name, name, sizeof(chan->name)); /* init vars to prevent math errors */ chan->quat[0] = chan->rotAxis[1]= 1.0f; chan->size[0] = chan->size[1] = chan->size[2] = 1.0f; @@ -774,7 +774,7 @@ void pose_add_group (Object *ob) return; grp= MEM_callocN(sizeof(bActionGroup), "PoseGroup"); - strcpy(grp->name, "Group"); + BLI_strncpy(grp->name, "Group", sizeof(grp->name)); BLI_addtail(&pose->agroups, grp); BLI_uniquename(&pose->agroups, grp, "Group", '.', offsetof(bActionGroup, name), sizeof(grp->name)); @@ -1119,8 +1119,8 @@ void what_does_obaction (Scene *UNUSED(scene), Object *ob, Object *workob, bPose workob->pose= pose; /* need to set pose too, since this is used for both types of Action Constraint */ - strcpy(workob->parsubstr, ob->parsubstr); - strcpy(workob->id.name, "OB"); /* we don't use real object name, otherwise RNA screws with the real thing */ + BLI_strncpy(workob->parsubstr, ob->parsubstr, sizeof(workob->parsubstr)); + BLI_strncpy(workob->id.name, "OB", sizeof(workob->id.name)); /* we don't use real object name, otherwise RNA screws with the real thing */ /* if we're given a group to use, it's likely to be more efficient (though a bit more dangerous) */ if (agrp) { @@ -1134,10 +1134,9 @@ void what_does_obaction (Scene *UNUSED(scene), Object *ob, Object *workob, bPose animsys_evaluate_action_group(&id_ptr, act, agrp, NULL, cframe); } else { - AnimData adt; + AnimData adt= {0}; /* init animdata, and attach to workob */ - memset(&adt, 0, sizeof(AnimData)); workob->adt= &adt; adt.recalc= ADT_RECALC_ANIM; diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c index a4e791aa6b3..547d3f7a738 100644 --- a/source/blender/blenkernel/intern/anim.c +++ b/source/blender/blenkernel/intern/anim.c @@ -796,6 +796,7 @@ static void vertex_dupli__mapFunc(void *userData, int index, float *co, float *n DupliObject *dob; vertexDupliData *vdd= userData; float vec[3], q2[4], mat[3][3], tmat[4][4], obmat[4][4]; + int origlay; mul_v3_m4v3(vec, vdd->pmat, co); sub_v3_v3(vec, vdd->pmat[3]); @@ -818,7 +819,14 @@ static void vertex_dupli__mapFunc(void *userData, int index, float *co, float *n copy_m4_m4(tmat, obmat); mul_m4_m4m3(obmat, tmat, mat); } + + origlay = vdd->ob->lay; + dob= new_dupli_object(vdd->lb, vdd->ob, obmat, vdd->par->lay, index, OB_DUPLIVERTS, vdd->animated); + + /* restore the original layer so that each dupli will have proper dob->origlay */ + vdd->ob->lay = origlay; + if(vdd->orco) VECCOPY(dob->orco, vdd->orco[index]); @@ -928,6 +936,14 @@ static void vertex_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, fl vertex_dupli__mapFunc(&vdd, a, vec, no, NULL); } } + if(sce) { + /* Set proper layer in case of scene looping, + * in case of groups the object layer will be + * changed when it's duplicated due to the + * group duplication. + */ + ob->lay = vdd.par->lay; + } break; } @@ -1145,7 +1161,6 @@ static void new_particle_duplilist(ListBase *lb, ID *UNUSED(id), Scene *scene, O Object *ob=0, **oblist=0, obcopy, *obcopylist=0; DupliObject *dob; ParticleDupliWeight *dw; - ParticleSimulationData sim = {scene, par, psys, psys_get_modifier(par, psys)}; ParticleSettings *part; ParticleData *pa; ChildParticle *cpa=0; @@ -1180,6 +1195,11 @@ static void new_particle_duplilist(ListBase *lb, ID *UNUSED(id), Scene *scene, O lay= scene->lay; if((psys->renderdata || part->draw_as==PART_DRAW_REND) && ELEM(part->ren_as, PART_DRAW_OB, PART_DRAW_GR)) { + ParticleSimulationData sim= {0}; + sim.scene= scene; + sim.ob= par; + sim.psys= psys; + sim.psmd= psys_get_modifier(par, psys); /* first check for loops (particle system object used as dupli object) */ if(part->ren_as == PART_DRAW_OB) { diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 5e97137991e..a4df6aa8ab2 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -619,12 +619,9 @@ KeyingSet *BKE_keyingset_add (ListBase *list, const char name[], short flag, sho /* allocate new KeyingSet */ ks= MEM_callocN(sizeof(KeyingSet), "KeyingSet"); - - if (name) - strncpy(ks->name, name, sizeof(ks->name)); - else - strcpy(ks->name, "KeyingSet"); - + + BLI_strncpy(ks->name, name ? name : "KeyingSet", sizeof(ks->name)); + ks->flag= flag; ks->keyingflag= keyingflag; @@ -672,7 +669,7 @@ KS_Path *BKE_keyingset_add_path (KeyingSet *ks, ID *id, const char group_name[], if (group_name) BLI_snprintf(ksp->group, 64, group_name); else - strcpy(ksp->group, ""); + ksp->group[0]= '\0'; /* store additional info for relative paths (just in case user makes the set relative) */ if (id) diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 029b3c2e141..ea01421a0ea 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -260,7 +260,7 @@ int bone_autoside_name (char *name, int UNUSED(strip_number), short axis, float len= strlen(name); if (len == 0) return 0; - strcpy(basename, name); + BLI_strncpy(basename, name, sizeof(basename)); /* Figure out extension to append: * - The extension to append is based upon the axis that we are working on. @@ -577,7 +577,13 @@ Mat4 *b_bone_spline_setup(bPoseChannel *pchan, int rest) /* ************ Armature Deform ******************* */ -static void pchan_b_bone_defmats(bPoseChannel *pchan, int use_quaternion) +typedef struct bPoseChanDeform { + Mat4 *b_bone_mats; + DualQuat *dual_quat; + DualQuat *b_bone_dual_quats; +} bPoseChanDeform; + +static void pchan_b_bone_defmats(bPoseChannel *pchan, bPoseChanDeform *pdef_info, int use_quaternion) { Bone *bone= pchan->bone; Mat4 *b_bone= b_bone_spline_setup(pchan, 0); @@ -589,11 +595,11 @@ static void pchan_b_bone_defmats(bPoseChannel *pchan, int use_quaternion) /* allocate b_bone matrices and dual quats */ b_bone_mats= MEM_mallocN((1+bone->segments)*sizeof(Mat4), "BBone defmats"); - pchan->b_bone_mats= b_bone_mats; + pdef_info->b_bone_mats= b_bone_mats; if(use_quaternion) { b_bone_dual_quats= MEM_mallocN((bone->segments)*sizeof(DualQuat), "BBone dqs"); - pchan->b_bone_dual_quats= b_bone_dual_quats; + pdef_info->b_bone_dual_quats= b_bone_dual_quats; } /* first matrix is the inverse arm_mat, to bring points in local bone space @@ -618,9 +624,9 @@ static void pchan_b_bone_defmats(bPoseChannel *pchan, int use_quaternion) } } -static void b_bone_deform(bPoseChannel *pchan, Bone *bone, float *co, DualQuat *dq, float defmat[][3]) +static void b_bone_deform(bPoseChanDeform *pdef_info, Bone *bone, float *co, DualQuat *dq, float defmat[][3]) { - Mat4 *b_bone= pchan->b_bone_mats; + Mat4 *b_bone= pdef_info->b_bone_mats; float (*mat)[4]= b_bone[0].mat; float segment, y; int a; @@ -637,7 +643,7 @@ static void b_bone_deform(bPoseChannel *pchan, Bone *bone, float *co, DualQuat * CLAMP(a, 0, bone->segments-1); if(dq) { - copy_dq_dq(dq, &((DualQuat*)pchan->b_bone_dual_quats)[a]); + copy_dq_dq(dq, &(pdef_info->b_bone_dual_quats)[a]); } else { mul_m4_v3(b_bone[a+1].mat, co); @@ -711,7 +717,7 @@ static void pchan_deform_mat_add(bPoseChannel *pchan, float weight, float bbonem add_m3_m3m3(mat, mat, wmat); } -static float dist_bone_deform(bPoseChannel *pchan, float *vec, DualQuat *dq, float mat[][3], float *co) +static float dist_bone_deform(bPoseChannel *pchan, bPoseChanDeform *pdef_info, float *vec, DualQuat *dq, float mat[][3], float *co) { Bone *bone= pchan->bone; float fac, contrib=0.0; @@ -732,7 +738,7 @@ static float dist_bone_deform(bPoseChannel *pchan, float *vec, DualQuat *dq, flo if(vec) { if(bone->segments>1) // applies on cop and bbonemat - b_bone_deform(pchan, bone, cop, NULL, (mat)?bbonemat:NULL); + b_bone_deform(pdef_info, bone, cop, NULL, (mat)?bbonemat:NULL); else mul_m4_v3(pchan->chan_mat, cop); @@ -745,11 +751,11 @@ static float dist_bone_deform(bPoseChannel *pchan, float *vec, DualQuat *dq, flo } else { if(bone->segments>1) { - b_bone_deform(pchan, bone, cop, &bbonedq, NULL); + b_bone_deform(pdef_info, bone, cop, &bbonedq, NULL); add_weighted_dq_dq(dq, &bbonedq, fac); } else - add_weighted_dq_dq(dq, pchan->dual_quat, fac); + add_weighted_dq_dq(dq, pdef_info->dual_quat, fac); } } } @@ -757,7 +763,7 @@ static float dist_bone_deform(bPoseChannel *pchan, float *vec, DualQuat *dq, flo return contrib; } -static void pchan_bone_deform(bPoseChannel *pchan, float weight, float *vec, DualQuat *dq, float mat[][3], float *co, float *contrib) +static void pchan_bone_deform(bPoseChannel *pchan, bPoseChanDeform *pdef_info, float weight, float *vec, DualQuat *dq, float mat[][3], float *co, float *contrib) { float cop[3], bbonemat[3][3]; DualQuat bbonedq; @@ -770,7 +776,7 @@ static void pchan_bone_deform(bPoseChannel *pchan, float weight, float *vec, Dua if(vec) { if(pchan->bone->segments>1) // applies on cop and bbonemat - b_bone_deform(pchan, pchan->bone, cop, NULL, (mat)?bbonemat:NULL); + b_bone_deform(pdef_info, pchan->bone, cop, NULL, (mat)?bbonemat:NULL); else mul_m4_v3(pchan->chan_mat, cop); @@ -783,11 +789,11 @@ static void pchan_bone_deform(bPoseChannel *pchan, float weight, float *vec, Dua } else { if(pchan->bone->segments>1) { - b_bone_deform(pchan, pchan->bone, cop, &bbonedq, NULL); + b_bone_deform(pdef_info, pchan->bone, cop, &bbonedq, NULL); add_weighted_dq_dq(dq, &bbonedq, weight); } else - add_weighted_dq_dq(dq, pchan->dual_quat, weight); + add_weighted_dq_dq(dq, pdef_info->dual_quat, weight); } (*contrib)+=weight; @@ -798,8 +804,11 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, int numVerts, int deformflag, float (*prevCos)[3], const char *defgrp_name) { + bPoseChanDeform *pdef_info_array; + bPoseChanDeform *pdef_info= NULL; bArmature *arm= armOb->data; bPoseChannel *pchan, **defnrToPC = NULL; + int *defnrToPCIndex= NULL; MDeformVert *dverts = NULL; bDeformGroup *dg; DualQuat *dualquats= NULL; @@ -823,20 +832,24 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, /* bone defmats are already in the channels, chan_mat */ /* initialize B_bone matrices and dual quaternions */ + totchan= BLI_countlist(&armOb->pose->chanbase); + if(use_quaternion) { - totchan= BLI_countlist(&armOb->pose->chanbase); dualquats= MEM_callocN(sizeof(DualQuat)*totchan, "dualquats"); } + + pdef_info_array= MEM_callocN(sizeof(bPoseChanDeform)*totchan, "bPoseChanDeform"); totchan= 0; - for(pchan = armOb->pose->chanbase.first; pchan; pchan = pchan->next) { + pdef_info= pdef_info_array; + for(pchan= armOb->pose->chanbase.first; pchan; pchan= pchan->next, pdef_info++) { if(!(pchan->bone->flag & BONE_NO_DEFORM)) { if(pchan->bone->segments > 1) - pchan_b_bone_defmats(pchan, use_quaternion); + pchan_b_bone_defmats(pchan, pdef_info, use_quaternion); if(use_quaternion) { - pchan->dual_quat= &dualquats[totchan++]; - mat4_to_dquat( pchan->dual_quat,pchan->bone->arm_mat, pchan->chan_mat); + pdef_info->dual_quat= &dualquats[totchan++]; + mat4_to_dquat( pdef_info->dual_quat,pchan->bone->arm_mat, pchan->chan_mat); } } } @@ -872,15 +885,19 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, else if(dverts) use_dverts = 1; if(use_dverts) { - defnrToPC = MEM_callocN(sizeof(*defnrToPC) * numGroups, - "defnrToBone"); + defnrToPC = MEM_callocN(sizeof(*defnrToPC) * numGroups, "defnrToBone"); + defnrToPCIndex = MEM_callocN(sizeof(*defnrToPCIndex) * numGroups, "defnrToIndex"); for(i = 0, dg = target->defbase.first; dg; i++, dg = dg->next) { defnrToPC[i] = get_pose_channel(armOb->pose, dg->name); /* exclude non-deforming bones */ if(defnrToPC[i]) { - if(defnrToPC[i]->bone->flag & BONE_NO_DEFORM) + if(defnrToPC[i]->bone->flag & BONE_NO_DEFORM) { defnrToPC[i]= NULL; + } + else { + defnrToPCIndex[i]= BLI_findindex(&armOb->pose->chanbase, defnrToPC[i]); + } } } } @@ -951,10 +968,10 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, for(j = 0; j < dvert->totweight; j++){ int index = dvert->dw[j].def_nr; - pchan = index < numGroups?defnrToPC[index]:NULL; - if(pchan) { + if(index < numGroups && (pchan= defnrToPC[index])) { float weight = dvert->dw[j].weight; - Bone *bone = pchan->bone; + Bone *bone= pchan->bone; + pdef_info= pdef_info_array + defnrToPCIndex[index]; deformed = 1; @@ -965,25 +982,27 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, bone->rad_tail, bone->dist); } - pchan_bone_deform(pchan, weight, vec, dq, smat, co, &contrib); + pchan_bone_deform(pchan, pdef_info, weight, vec, dq, smat, co, &contrib); } } /* if there are vertexgroups but not groups with bones * (like for softbody groups) */ if(deformed == 0 && use_envelope) { - for(pchan = armOb->pose->chanbase.first; pchan; - pchan = pchan->next) { + pdef_info= pdef_info_array; + for(pchan= armOb->pose->chanbase.first; pchan; + pchan= pchan->next, pdef_info++) { if(!(pchan->bone->flag & BONE_NO_DEFORM)) - contrib += dist_bone_deform(pchan, vec, dq, smat, co); + contrib += dist_bone_deform(pchan, pdef_info, vec, dq, smat, co); } } } else if(use_envelope) { + pdef_info= pdef_info_array; for(pchan = armOb->pose->chanbase.first; pchan; - pchan = pchan->next) { + pchan = pchan->next, pdef_info++) { if(!(pchan->bone->flag & BONE_NO_DEFORM)) - contrib += dist_bone_deform(pchan, vec, dq, smat, co); + contrib += dist_bone_deform(pchan, pdef_info, vec, dq, smat, co); } } @@ -1039,20 +1058,20 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, if(dualquats) MEM_freeN(dualquats); if(defnrToPC) MEM_freeN(defnrToPC); - - /* free B_bone matrices */ - for(pchan = armOb->pose->chanbase.first; pchan; pchan = pchan->next) { - if(pchan->b_bone_mats) { - MEM_freeN(pchan->b_bone_mats); - pchan->b_bone_mats = NULL; - } - if(pchan->b_bone_dual_quats) { - MEM_freeN(pchan->b_bone_dual_quats); - pchan->b_bone_dual_quats = NULL; - } + if(defnrToPCIndex) MEM_freeN(defnrToPCIndex); - pchan->dual_quat = NULL; + /* free B_bone matrices */ + pdef_info= pdef_info_array; + for(pchan = armOb->pose->chanbase.first; pchan; pchan = pchan->next, pdef_info++) { + if(pdef_info->b_bone_mats) { + MEM_freeN(pdef_info->b_bone_mats); + } + if(pdef_info->b_bone_dual_quats) { + MEM_freeN(pdef_info->b_bone_dual_quats); + } } + + MEM_freeN(pdef_info_array); } /* ************ END Armature Deform ******************* */ @@ -1177,32 +1196,30 @@ void armature_loc_pose_to_bone(bPoseChannel *pchan, float *inloc, float *outloc) VECCOPY(outloc, nLocMat[3]); } +/* same as object_mat3_to_rot() */ +void pchan_mat3_to_rot(bPoseChannel *pchan, float mat[][3], short use_compat) +{ + switch(pchan->rotmode) { + case ROT_MODE_QUAT: + mat3_to_quat(pchan->quat, mat); + break; + case ROT_MODE_AXISANGLE: + mat3_to_axis_angle(pchan->rotAxis, &pchan->rotAngle, mat); + break; + default: /* euler */ + if(use_compat) mat3_to_compatible_eulO(pchan->eul, pchan->eul, pchan->rotmode, mat); + else mat3_to_eulO(pchan->eul, pchan->rotmode, mat); + } +} /* Apply a 4x4 matrix to the pose bone, * similar to object_apply_mat4() */ -void pchan_apply_mat4(bPoseChannel *pchan, float mat[][4]) +void pchan_apply_mat4(bPoseChannel *pchan, float mat[][4], short use_compat) { - /* location */ - copy_v3_v3(pchan->loc, mat[3]); - - /* scale */ - mat4_to_size(pchan->size, mat); - - /* rotation */ - if (pchan->rotmode == ROT_MODE_AXISANGLE) { - float tmp_quat[4]; - - /* need to convert to quat first (in temp var)... */ - mat4_to_quat(tmp_quat, mat); - quat_to_axis_angle(pchan->rotAxis, &pchan->rotAngle, tmp_quat); - } - else if (pchan->rotmode == ROT_MODE_QUAT) { - mat4_to_quat(pchan->quat, mat); - } - else { - mat4_to_eulO(pchan->eul, pchan->rotmode, mat); - } + float rot[3][3]; + mat4_to_loc_rot_size(pchan->loc, rot, pchan->size, mat); + pchan_mat3_to_rot(pchan, rot, use_compat); } /* Remove rest-position effects from pose-transform for obtaining diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 72d194e4d79..d2b437d9833 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -32,7 +32,6 @@ #ifndef _WIN32 #include // for read close - #include // for MAXPATHLEN #else #include // for open close read #define open _open @@ -460,13 +459,13 @@ static UndoElem *curundo= NULL; static int read_undosave(bContext *C, UndoElem *uel) { - char mainstr[FILE_MAXDIR+FILE_MAXFILE]; + char mainstr[sizeof(G.main->name)]; int success=0, fileflags; /* This is needed so undoing/redoing doesnt crash with threaded previews going */ WM_jobs_stop_all(CTX_wm_manager(C)); - strcpy(mainstr, G.main->name); /* temporal store */ + BLI_strncpy(mainstr, G.main->name, sizeof(mainstr)); /* temporal store */ fileflags= G.fileflags; G.fileflags |= G_FILE_NO_UI; diff --git a/source/blender/blenkernel/intern/boids.c b/source/blender/blenkernel/intern/boids.c index 943cf20720e..1bde0639055 100644 --- a/source/blender/blenkernel/intern/boids.c +++ b/source/blender/blenkernel/intern/boids.c @@ -205,7 +205,9 @@ static int rule_avoid_collision(BoidRule *rule, BoidBrainData *bbd, BoidValues * add_v3_v3v3(col.co2, pa->prev_state.co, pa->prev_state.vel); sub_v3_v3v3(ray_dir, col.co2, col.co1); mul_v3_fl(ray_dir, acbr->look_ahead); - col.t = 0.0f; + col.f = 0.0f; + col.cfra = fmod(bbd->cfra-bbd->dfra, 1.0f); + col.dfra = bbd->dfra; hit.index = -1; hit.dist = col.ray_len = len_v3(ray_dir); @@ -772,7 +774,9 @@ static Object *boid_find_ground(BoidBrainData *bbd, ParticleData *pa, float *gro sub_v3_v3v3(col.co2, pa->state.co, zvec); sub_v3_v3(col.co2, zvec); sub_v3_v3v3(ray_dir, col.co2, col.co1); - col.t = 0.0f; + col.f = 0.0f; + col.cfra = fmod(bbd->cfra-bbd->dfra, 1.0f); + col.dfra = bbd->dfra; hit.index = -1; hit.dist = col.ray_len = len_v3(ray_dir); @@ -796,7 +800,9 @@ static Object *boid_find_ground(BoidBrainData *bbd, ParticleData *pa, float *gro sub_v3_v3v3(col.co2, pa->state.co, zvec); sub_v3_v3(col.co2, zvec); sub_v3_v3v3(ray_dir, col.co2, col.co1); - col.t = 0.0f; + col.f = 0.0f; + col.cfra = fmod(bbd->cfra-bbd->dfra, 1.0f); + col.dfra = bbd->dfra; hit.index = -1; hit.dist = col.ray_len = len_v3(ray_dir); @@ -1257,7 +1263,11 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) switch(bpa->data.mode) { case eBoidMode_InAir: { - float grav[3] = {0.0f, 0.0f, bbd->sim->scene->physics_settings.gravity[2] < 0.0f ? -1.0f : 0.0f}; + float grav[3]; + + grav[0]= 0.0f; + grav[1]= 0.0f; + grav[2]= bbd->sim->scene->physics_settings.gravity[2] < 0.0f ? -1.0f : 0.0f; /* don't take forward acceleration into account (better banking) */ if(dot_v3v3(bpa->data.acc, pa->state.vel) > 0.0f) { @@ -1296,7 +1306,12 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) } case eBoidMode_Falling: { - float grav[3] = {0.0f, 0.0f, bbd->sim->scene->physics_settings.gravity[2] < 0.0f ? -1.0f : 0.0f}; + float grav[3]; + + grav[0]= 0.0f; + grav[1]= 0.0f; + grav[2]= bbd->sim->scene->physics_settings.gravity[2] < 0.0f ? -1.0f : 0.0f; + /* gather apparent gravity */ VECADDFAC(bpa->gravity, bpa->gravity, grav, dtime); diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c index d894aef4ac5..649b3e3ad9b 100644 --- a/source/blender/blenkernel/intern/brush.c +++ b/source/blender/blenkernel/intern/brush.c @@ -67,7 +67,7 @@ static void brush_set_defaults(Brush *brush) brush->blend = 0; brush->flag = 0; - brush->ob_mode = (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT); + brush->ob_mode = OB_MODE_ALL_PAINT; /* BRUSH SCULPT TOOL SETTINGS */ brush->size= 35; /* radius of the brush in pixels */ @@ -228,10 +228,8 @@ void make_local_brush(Brush *brush) void brush_debug_print_state(Brush *br) { - Brush def; - /* create a fake brush and set it to the defaults */ - memset(&def, 0, sizeof(Brush)); + Brush def= {{0}}; brush_set_defaults(&def); #define BR_TEST(field, t) \ @@ -1098,11 +1096,9 @@ unsigned int *brush_gen_texture_cache(Brush *br, int half_side) { unsigned int *texcache = NULL; MTex *mtex = &br->mtex; - TexResult texres; + TexResult texres= {0}; int hasrgb, ix, iy; int side = half_side * 2; - - memset(&texres, 0, sizeof(TexResult)); if(mtex->tex) { float x, y, step = 2.0 / side, co[3]; diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index c3f05e497f1..a561df49e94 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -70,7 +70,7 @@ #include "BKE_shrinkwrap.h" #include "BKE_mesh.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -674,7 +674,7 @@ static void default_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstrain ct= MEM_callocN(sizeof(bConstraintTarget), "tempConstraintTarget"); \ \ ct->tar= datatar; \ - strcpy(ct->subtarget, datasubtarget); \ + BLI_strncpy(ct->subtarget, datasubtarget, sizeof(ct->subtarget)); \ ct->space= con->tarspace; \ ct->flag= CONSTRAINT_TAR_TEMP; \ \ @@ -1387,9 +1387,9 @@ static void rotlimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *U copy_v3_v3(loc, cob->matrix[3]); mat4_to_size(size, cob->matrix); - + mat4_to_eulO(eul, cob->rotOrder, cob->matrix); - + /* constraint data uses radians internally */ /* limiting of euler values... */ @@ -1983,7 +1983,7 @@ static void pycon_id_looper (bConstraint *con, ConstraintIDFunc func, void *user /* Whether this approach is maintained remains to be seen (aligorith) */ static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime)) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON bPythonConstraint *data= con->data; #endif @@ -2003,7 +2003,7 @@ static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintT constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail); /* only execute target calculation if allowed */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (G.f & G_SCRIPT_AUTOEXEC) BPY_pyconstraint_target(data, ct); #endif @@ -2014,7 +2014,7 @@ static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintT static void pycon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *targets) { -#ifdef DISABLE_PYTHON +#ifndef WITH_PYTHON (void)con; (void)cob; (void)targets; /* unused */ return; #else @@ -2034,7 +2034,7 @@ static void pycon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *targ /* Now, run the actual 'constraint' function, which should only access the matrices */ BPY_pyconstraint_eval(data, cob, targets); -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ } static bConstraintTypeInfo CTI_PYTHON = { @@ -3427,8 +3427,7 @@ static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr BVHTreeRayHit hit; BVHTreeNearest nearest; - BVHTreeFromMesh treeData; - memset(&treeData, 0, sizeof(treeData)); + BVHTreeFromMesh treeData= {0}; nearest.index = -1; nearest.dist = FLT_MAX; @@ -3810,6 +3809,10 @@ static void pivotcon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *t float pivot[3], vec[3]; float rotMat[3][3]; + + /* pivot correction */ + float axis[3], angle; + float dvec[3]; /* firstly, check if pivoting should take place based on the current rotation */ if (data->rotAxis != PIVOTCON_AXIS_NONE) { @@ -3852,7 +3855,15 @@ static void pivotcon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *t // TODO: perhaps we might want to include scaling based on the pivot too? copy_m3_m4(rotMat, cob->matrix); normalize_m3(rotMat); - + + + /* correct the pivot by the rotation axis otherwise the pivot translates when it shouldnt */ + mat3_to_axis_angle(axis, &angle, rotMat); + sub_v3_v3v3(vec, pivot, cob->matrix[3]); + project_v3_v3v3(dvec, vec, axis); + sub_v3_v3(pivot, dvec); + + /* perform the pivoting... */ /* 1. take the vector from owner to the pivot */ sub_v3_v3v3(vec, pivot, cob->matrix[3]); diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index a5d96baf049..899ae6031d6 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -46,7 +46,7 @@ #include "BKE_main.h" #include "BKE_screen.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -425,7 +425,7 @@ static int ctx_data_get(bContext *C, const char *member, bContextDataResult *res int ret= 0; memset(result, 0, sizeof(bContextDataResult)); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(CTX_py_dict_get(C)) { return BPY_context_get(C, member, result); // if (BPY_context_get(C, member, result)) @@ -554,8 +554,7 @@ ListBase CTX_data_collection_get(const bContext *C, const char *member) return result.list; } else { - ListBase list; - memset(&list, 0, sizeof(list)); + ListBase list= {NULL, NULL}; return list; } } diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c index a7dd80bff4d..b6b6dde3cdc 100644 --- a/source/blender/blenkernel/intern/curve.c +++ b/source/blender/blenkernel/intern/curve.c @@ -155,7 +155,7 @@ Curve *add_curve(char *name, int type) cu->vfont= cu->vfontb= cu->vfonti= cu->vfontbi= get_builtin_font(); cu->vfont->id.us+=4; cu->str= MEM_mallocN(12, "str"); - strcpy(cu->str, "Text"); + BLI_strncpy(cu->str, "Text", 12); cu->len= cu->pos= 4; cu->strinfo= MEM_callocN(12*sizeof(CharInfo), "strinfo new"); cu->totbox= cu->actbox= 1; diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index 9c4f0d790ca..cd476d8491b 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -50,6 +50,7 @@ #include "BKE_global.h" #include "BKE_main.h" #include "BKE_utildefines.h" +#include "BKE_multires.h" /* number of layers to add when growing a CustomData object */ #define CUSTOMDATA_GROW 5 @@ -441,19 +442,6 @@ static void mdisps_bilinear(float out[3], float (*disps)[3], int st, float u, fl } #endif -static int mdisp_corners(MDisps *s) -{ - int lvl= 13; - - while(lvl > 0) { - int side = (1 << (lvl-1)) + 1; - if ((s->totdisp % (side*side)) == 0) return s->totdisp / (side*side); - lvl--; - } - - return 0; -} - static void layerSwap_mdisps(void *data, const int *ci) { MDisps *s = data; @@ -462,7 +450,7 @@ static void layerSwap_mdisps(void *data, const int *ci) if(s->disps) { int nverts= (ci[1] == 3) ? 4 : 3; /* silly way to know vertex count of face */ - corners= mdisp_corners(s); + corners= multires_mdisp_corners(s); cornersize= s->totdisp/corners; if(corners!=nverts) { @@ -470,8 +458,8 @@ static void layerSwap_mdisps(void *data, const int *ci) if it happened, just forgot displacement */ MEM_freeN(s->disps); - s->disps= NULL; - s->totdisp= 0; /* flag to update totdisp */ + s->totdisp= (s->totdisp/corners)*nverts; + s->disps= MEM_callocN(s->totdisp*sizeof(float)*3, "mdisp swap"); return; } @@ -2249,69 +2237,56 @@ static int CustomData_is_property_layer(int type) return 0; } +static int cd_layer_find_dupe(CustomData *data, const char *name, int type, int index) +{ + int i; + /* see if there is a duplicate */ + for(i=0; itotlayer; i++) { + if(i != index) { + CustomDataLayer *layer= &data->layers[i]; + + if(CustomData_is_property_layer(type)) { + if(CustomData_is_property_layer(layer->type) && strcmp(layer->name, name)==0) { + return 1; + } + } + else{ + if(i!=index && layer->type==type && strcmp(layer->name, name)==0) { + return 1; + } + } + } + } + + return 0; +} + void CustomData_set_layer_unique_name(CustomData *data, int index) { - char tempname[64]; - int number, i, type; - char *dot, *name; - CustomDataLayer *layer, *nlayer= &data->layers[index]; + CustomDataLayer *nlayer= &data->layers[index]; const LayerTypeInfo *typeInfo= layerType_getInfo(nlayer->type); if (!typeInfo->defaultname) return; - type = nlayer->type; - name = nlayer->name; - - if (name[0] == '\0') + if (nlayer->name[0] == '\0') BLI_strncpy(nlayer->name, typeInfo->defaultname, sizeof(nlayer->name)); - - /* see if there is a duplicate */ - for(i=0; itotlayer; i++) { - layer = &data->layers[i]; + + if(cd_layer_find_dupe(data, nlayer->name, nlayer->type, index)) { + /* note: this block is used in other places, when changing logic apply to all others, search this message */ + char tempname[sizeof(nlayer->name)]; + char left[sizeof(nlayer->name)]; + int number; + int len= BLI_split_name_num(left, &number, nlayer->name); + do { /* nested while loop looks bad but likely it wont run most times */ + while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) { + if(len > 0) left[--len]= '\0'; /* word too long */ + else number= 0; /* reset, must be a massive number */ + } + } while(number++, cd_layer_find_dupe(data, tempname, nlayer->type, index)); - if(CustomData_is_property_layer(type)){ - if(i!=index && CustomData_is_property_layer(layer->type) && - strcmp(layer->name, name)==0) - break; - - } - else{ - if(i!=index && layer->type==type && strcmp(layer->name, name)==0) - break; - } + BLI_strncpy(nlayer->name, tempname, sizeof(nlayer->name)); } - - if(i == data->totlayer) - return; - - /* strip off the suffix */ - dot = strchr(nlayer->name, '.'); - if(dot) *dot=0; - - for(number=1; number <=999; number++) { - sprintf(tempname, "%s.%03d", nlayer->name, number); - - for(i=0; itotlayer; i++) { - layer = &data->layers[i]; - - if(CustomData_is_property_layer(type)){ - if(i!=index && CustomData_is_property_layer(layer->type) && - strcmp(layer->name, tempname)==0) - - break; - } - else{ - if(i!=index && layer->type==type && strcmp(layer->name, tempname)==0) - break; - } - } - - if(i == data->totlayer) { - BLI_strncpy(nlayer->name, tempname, sizeof(nlayer->name)); - return; - } - } } int CustomData_verify_versions(struct CustomData *data, int index) diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c index 91584b6236f..10fbd247c84 100644 --- a/source/blender/blenkernel/intern/deform.c +++ b/source/blender/blenkernel/intern/deform.c @@ -304,14 +304,23 @@ int defgroup_flip_index(Object *ob, int index, int use_default) return (flip_index==-1 && use_default) ? index : flip_index; } -void defgroup_unique_name (bDeformGroup *dg, Object *ob) +static int defgroup_find_name_dupe(const char *name, bDeformGroup *dg, Object *ob) { bDeformGroup *curdef; - int number; - int exists = 0; - char tempname[64]; - char *dot; + for (curdef = ob->defbase.first; curdef; curdef=curdef->next) { + if (dg!=curdef) { + if (!strcmp(curdef->name, name)) { + return 1; + } + } + } + + return 0; +} + +void defgroup_unique_name (bDeformGroup *dg, Object *ob) +{ if (!ob) return; @@ -320,45 +329,24 @@ void defgroup_unique_name (bDeformGroup *dg, Object *ob) /* give it default name first */ strcpy (dg->name, "Group"); } - - /* See if we even need to do this */ - for (curdef = ob->defbase.first; curdef; curdef=curdef->next) { - if (dg!=curdef) { - if (!strcmp(curdef->name, dg->name)) { - exists = 1; - break; + + if(defgroup_find_name_dupe(dg->name, dg, ob)) { + /* note: this block is used in other places, when changing logic apply to all others, search this message */ + char tempname[sizeof(dg->name)]; + char left[sizeof(dg->name)]; + int number; + int len= BLI_split_name_num(left, &number, dg->name); + do { /* nested while loop looks bad but likely it wont run most times */ + while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) { + if(len > 0) left[--len]= '\0'; /* word too long */ + else number= 0; /* reset, must be a massive number */ } - } + } while(number++, defgroup_find_name_dupe(tempname, dg, ob)); + + BLI_strncpy(dg->name, tempname, sizeof(dg->name)); } - - if (!exists) - return; - - /* Strip off the suffix */ - dot=strchr(dg->name, '.'); - if (dot) - *dot=0; - - for (number = 1; number <=999; number++) { - sprintf (tempname, "%s.%03d", dg->name, number); - - exists = 0; - for (curdef=ob->defbase.first; curdef; curdef=curdef->next) { - if (dg!=curdef) { - if (!strcmp (curdef->name, tempname)) { - exists = 1; - break; - } - } - } - if (!exists) { - BLI_strncpy (dg->name, tempname, 32); - return; - } - } } - /* finds the best possible flipped name. For renaming; check for unique names afterwards */ /* if strip_number: removes number extensions */ void flip_side_name (char *name, const char *from_name, int strip_number) diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index d95b7010993..21ef1c03e3a 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -2350,8 +2350,10 @@ void DAG_id_flush_update(ID *id, short flag) /* set flags based on textures - can influence depgraph via modifiers */ if(idtype == ID_TE) { for(obt=bmain->object.first; obt; obt= obt->id.next) { - struct { ID *id; int is_dependent; } data = {id, 0}; - + struct { ID *id; int is_dependent; } data; + data.id= id; + data.is_dependent= 0; + modifiers_foreachIDLink(obt, dag_id_flush_update__isDependentTexture, &data); if (data.is_dependent) obt->recalc |= OB_RECALC_DATA; diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index d1830cb8243..a8032f5a40d 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -45,6 +45,7 @@ #include "BLI_blenlib.h" #include "BLI_math.h" #include "BLI_editVert.h" +#include "BLI_scanfill.h" #include "BKE_global.h" #include "BKE_displist.h" diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c index 70e814ef956..24a95c58e36 100644 --- a/source/blender/blenkernel/intern/effect.c +++ b/source/blender/blenkernel/intern/effect.c @@ -628,7 +628,6 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin } } else if(eff->psys) { - ParticleSimulationData sim = {eff->scene, eff->ob, eff->psys, NULL, NULL}; ParticleData *pa = eff->psys->particles + *efd->index; ParticleKey state; @@ -636,6 +635,11 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin if(eff->psys == point->psys && *efd->index == point->index) ; else { + ParticleSimulationData sim= {0}; + sim.scene= eff->scene; + sim.ob= eff->ob; + sim.psys= eff->psys; + /* TODO: time from actual previous calculated frame (step might not be 1) */ state.time = cfra - 1.0; ret = psys_get_particle_state(&sim, *efd->index, &state, 0); diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c index 5e2ca921ef2..a1af728c562 100644 --- a/source/blender/blenkernel/intern/exotic.c +++ b/source/blender/blenkernel/intern/exotic.c @@ -79,7 +79,7 @@ #include "BKE_DerivedMesh.h" #include "BKE_curve.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -489,7 +489,7 @@ int BKE_read_exotic(Scene *scene, char *name) read_stl_mesh_binary(scene, name); retval = 1; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // TODO: this should not be in the kernel... else { // unknown format, call Python importloader if (BPY_call_importloader(name)) { @@ -499,7 +499,7 @@ int BKE_read_exotic(Scene *scene, char *name) } } -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ //XXX waitcursor(0); } } diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index 1575f69209f..75029af4b10 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -53,7 +53,7 @@ #include "RNA_access.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -1174,7 +1174,7 @@ void driver_free_variable (ChannelDriver *driver, DriverVar *dvar) else MEM_freeN(dvar); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* since driver variables are cached, the expression needs re-compiling too */ if(driver->type==DRIVER_TYPE_PYTHON) driver->flag |= DRIVER_FLAG_RENAMEVAR; @@ -1231,7 +1231,7 @@ DriverVar *driver_add_new_variable (ChannelDriver *driver) /* set the default type to 'single prop' */ driver_change_variable_type(dvar, DVAR_TYPE_SINGLE_PROP); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* since driver variables are cached, the expression needs re-compiling too */ if(driver->type==DRIVER_TYPE_PYTHON) driver->flag |= DRIVER_FLAG_RENAMEVAR; @@ -1258,7 +1258,7 @@ void fcurve_free_driver(FCurve *fcu) driver_free_variable(driver, dvar); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* free compiled driver expression */ if (driver->expr_comp) BPY_DECREF(driver->expr_comp); @@ -1406,7 +1406,7 @@ static float evaluate_driver (ChannelDriver *driver, float UNUSED(evaltime)) case DRIVER_TYPE_PYTHON: /* expression */ { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* check for empty or invalid expression */ if ( (driver->expression[0] == '\0') || (driver->flag & DRIVER_FLAG_INVALID) ) @@ -1420,7 +1420,7 @@ static float evaluate_driver (ChannelDriver *driver, float UNUSED(evaltime)) */ driver->curval= BPY_eval_driver(driver); } -#endif /* DISABLE_PYTHON*/ +#endif /* WITH_PYTHON*/ } break; diff --git a/source/blender/blenkernel/intern/fmodifier.c b/source/blender/blenkernel/intern/fmodifier.c index c900f178ca7..5ef41d17d63 100644 --- a/source/blender/blenkernel/intern/fmodifier.c +++ b/source/blender/blenkernel/intern/fmodifier.c @@ -802,13 +802,13 @@ static void fcm_python_copy (FModifier *fcm, FModifier *src) static void fcm_python_evaluate (FCurve *UNUSED(fcu), FModifier *UNUSED(fcm), float *UNUSED(cvalue), float UNUSED(evaltime)) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON //FMod_Python *data= (FMod_Python *)fcm->data; /* FIXME... need to implement this modifier... * It will need it execute a script using the custom properties */ -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ } static FModifierTypeInfo FMI_PYTHON = { diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c index 58917e75a43..5fdb9549179 100644 --- a/source/blender/blenkernel/intern/font.c +++ b/source/blender/blenkernel/intern/font.c @@ -394,7 +394,7 @@ VFont *load_vfont(char *name) /* if there's a font name, use it for the ID name */ if (strcmp(vfd->name, "")!=0) { - BLI_strncpy(vfont->id.name+2, vfd->name, 21); + BLI_strncpy(vfont->id.name+2, vfd->name, sizeof(vfont->id.name)-2); } BLI_strncpy(vfont->name, name, sizeof(vfont->name)); @@ -1193,8 +1193,12 @@ struct chartrans *BKE_text_to_curve(Scene *scene, Object *ob, int mode) ascii = mem[i]; info = &(custrinfo[i]); if (cu->sepchar == (i+1)) { - float vecyo[3]= {ct->xof, ct->yof, 0.0f}; - + float vecyo[3]; + + vecyo[0]= ct->xof; + vecyo[1]= ct->yof; + vecyo[2]= 0.0f; + mem[0] = ascii; mem[1] = 0; custrinfo[0]= *info; diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index 09622b2acfe..2719563f829 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -832,7 +832,10 @@ int BKE_add_image_extension(char *string, int imtype) } if(extension) { - return BLI_replace_extension(string, FILE_MAX, extension); + /* prefer this in many cases to avoid .png.tga, but in certain cases it breaks */ + /* return BLI_replace_extension(string, FILE_MAX, extension); */ + strcat(string, extension); + return TRUE; } else { return FALSE; @@ -1568,15 +1571,10 @@ static void image_create_multilayer(Image *ima, ImBuf *ibuf, int framenr) /* common stuff to do with images after loading */ static void image_initialize_after_load(Image *ima, ImBuf *ibuf) { - - /* preview is NULL when it has never been used as an icon before */ if(G.background==0 && ima->preview==NULL) BKE_icon_changed(BKE_icon_getid(&ima->id)); - - /* stringcodes also in ibuf, ibuf->name is used to retrieve original (buttons) */ - BLI_strncpy(ibuf->name, ima->name, FILE_MAX); - + /* fields */ if (ima->flag & IMA_FIELDS) { if(ima->flag & IMA_STD_FIELD) de_interlace_st(ibuf); @@ -1601,11 +1599,10 @@ static ImBuf *image_load_sequence_file(Image *ima, ImageUser *iuser, int frame) ima->tpageflag |= IMA_TPAGE_REFRESH; ima->lastframe= frame; - - BLI_stringdec(ima->name, head, tail, &numlen); - BLI_stringenc(ima->name, head, tail, numlen, frame); BLI_strncpy(name, ima->name, sizeof(name)); - + BLI_stringdec(name, head, tail, &numlen); + BLI_stringenc(name, head, tail, numlen, frame); + if(ima->id.lib) BLI_path_abs(name, ima->id.lib->filepath); else @@ -1750,8 +1747,7 @@ static ImBuf *image_load_movie_file(Image *ima, ImageUser *iuser, int frame) return ibuf; } -/* cfra used for # code, Image can only have this # for all its users - * warning, 'iuser' can be NULL */ +/* warning, 'iuser' can be NULL */ static ImBuf *image_load_image_file(Image *ima, ImageUser *iuser, int cfra) { struct ImBuf *ibuf; @@ -1999,11 +1995,6 @@ static ImBuf *image_get_ibuf_threadsafe(Image *ima, ImageUser *iuser, int *frame /* XXX temp stuff? */ if(ima->lastframe != frame) { ima->tpageflag |= IMA_TPAGE_REFRESH; - if(ibuf) { - /* without this the image name only updates - * on first load which is quite confusing */ - BLI_strncpy(ima->name, ibuf->name, sizeof(ima->name)); - } } ima->lastframe = frame; } @@ -2106,9 +2097,6 @@ ImBuf *BKE_image_acquire_ibuf(Image *ima, ImageUser *iuser, void **lock_r) /* only 1 layer/pass stored in imbufs, no exrhandle anim storage, no saving */ ibuf= image_load_sequence_multilayer(ima, iuser, frame); } - - if(ibuf) - BLI_strncpy(ima->name, ibuf->name, sizeof(ima->name)); } else if(ima->source==IMA_SRC_FILE) { diff --git a/source/blender/blenkernel/intern/implicit.c b/source/blender/blenkernel/intern/implicit.c index 6ca95752887..bdf71a8c6f0 100644 --- a/source/blender/blenkernel/intern/implicit.c +++ b/source/blender/blenkernel/intern/implicit.c @@ -1562,13 +1562,15 @@ static void cloth_calc_force(ClothModifierData *clmd, float UNUSED(frame), lfVec unsigned int i = 0; float spring_air = clmd->sim_parms->Cvi * 0.01f; /* viscosity of air scaled in percent */ float gravity[3] = {0.0f, 0.0f, 0.0f}; - float tm2[3][3] = {{-spring_air,0,0}, {0,-spring_air,0},{0,0,-spring_air}}; + float tm2[3][3] = {{0}}; MFace *mfaces = cloth->mfaces; unsigned int numverts = cloth->numverts; LinkNode *search = cloth->springs; lfVector *winvec; EffectedPoint epoint; + tm2[0][0]= tm2[1][1]= tm2[2][2]= -spring_air; + /* global acceleration (gravitation) */ if(clmd->scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY) { VECCOPY(gravity, clmd->scene->physics_settings.gravity); diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c index 5ed6beaf376..7914bc2b640 100644 --- a/source/blender/blenkernel/intern/ipo.c +++ b/source/blender/blenkernel/intern/ipo.c @@ -1017,13 +1017,13 @@ static ChannelDriver *idriver_to_cdriver (IpoDriver *idriver) dtar= &dvar->targets[0]; dtar->id= (ID *)idriver->ob; if (idriver->name[0]) - BLI_strncpy(dtar->pchan_name, idriver->name, 32); + BLI_strncpy(dtar->pchan_name, idriver->name, sizeof(dtar->pchan_name)); /* second bone target (name was stored in same var as the first one) */ dtar= &dvar->targets[1]; dtar->id= (ID *)idriver->ob; if (idriver->name[0]) // xxx... for safety - BLI_strncpy(dtar->pchan_name, idriver->name+DRIVER_NAME_OFFS, 32); + BLI_strncpy(dtar->pchan_name, idriver->name+DRIVER_NAME_OFFS, sizeof(dtar->pchan_name)); } else { /* only a single variable, of type 'transform channel' */ @@ -1034,7 +1034,7 @@ static ChannelDriver *idriver_to_cdriver (IpoDriver *idriver) dtar= &dvar->targets[0]; dtar->id= (ID *)idriver->ob; if (idriver->name[0]) - BLI_strncpy(dtar->pchan_name, idriver->name, 32); + BLI_strncpy(dtar->pchan_name, idriver->name, sizeof(dtar->pchan_name)); dtar->transChan= adrcode_to_dtar_transchan(idriver->adrcode); dtar->flag |= DTAR_FLAG_LOCALSPACE; /* old drivers took local space */ } diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index b18c2da8437..1c75c34e913 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -459,11 +459,13 @@ int set_listbasepointers(Main *main, ListBase **lb) { int a = 0; - /* BACKWARDS! also watch order of free-ing! (mesh<->mat) */ - + /* BACKWARDS! also watch order of free-ing! (mesh<->mat), first items freed last. + * This is important because freeing data decreases usercounts of other datablocks, + * if this data is its self freed it can crash. */ lb[a++]= &(main->ipo); lb[a++]= &(main->action); // xxx moved here to avoid problems when freeing with animato (aligorith) lb[a++]= &(main->key); + lb[a++]= &(main->gpencil); /* referenced by nodes, objects, view, scene etc, before to free after. */ lb[a++]= &(main->nodetree); lb[a++]= &(main->image); lb[a++]= &(main->tex); @@ -490,14 +492,13 @@ int set_listbasepointers(Main *main, ListBase **lb) lb[a++]= &(main->brush); lb[a++]= &(main->script); lb[a++]= &(main->particle); - + lb[a++]= &(main->world); lb[a++]= &(main->screen); lb[a++]= &(main->object); lb[a++]= &(main->scene); lb[a++]= &(main->library); lb[a++]= &(main->wm); - lb[a++]= &(main->gpencil); lb[a++]= &(main->linestyle); lb[a]= NULL; @@ -997,35 +998,6 @@ void IMAnames_to_pupstring(char **str, char *title, char *extraops, ListBase *lb BLI_dynstr_free(pupds); } - -/* used by buttons.c library.c mball.c */ -int splitIDname(char *name, char *left, int *nr) -{ - int a; - - *nr= 0; - strncpy(left, name, 21); - - a= strlen(name); - if(a>1 && name[a-1]=='.') return a; - - while(a--) { - if( name[a]=='.' ) { - left[a]= 0; - *nr= atol(name+a+1); - return a; - } - if( isdigit(name[a])==0 ) break; - - left[a]= 0; - } - - for(a= 0; name[a]; a++) - left[a]= name[a]; - - return a; -} - static void sort_alpha_id(ListBase *lb, ID *id) { ID *idtest; @@ -1105,7 +1077,7 @@ static int check_for_dupid(ListBase *lb, ID *id, char *name) memset(in_use, 0, sizeof(in_use)); /* get name portion, number portion ("name.number") */ - left_len= splitIDname(name, left, &nr); + left_len= BLI_split_name_num(left, &nr, name); /* if new name will be too long, truncate it */ if(nr > 999 && left_len > 16) { @@ -1122,7 +1094,7 @@ static int check_for_dupid(ListBase *lb, ID *id, char *name) (idtest->lib == NULL) && (*name == *(idtest->name+2)) && (strncmp(name, idtest->name+2, left_len)==0) && - (splitIDname(idtest->name+2, leftest, &nrtest) == left_len) + (BLI_split_name_num(leftest, &nrtest, idtest->name+2) == left_len) ) { if(nrtest < sizeof(in_use)) in_use[nrtest]= 1; /* mark as used */ @@ -1407,7 +1379,7 @@ void rename_id(ID *id, char *name) { ListBase *lb; - strncpy(id->name+2, name, 21); + BLI_strncpy(id->name+2, name, sizeof(id->name)-2); lb= which_libbase(G.main, GS(id->name) ); new_id(lb, id, name); diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c index e6f38e04d76..fd3bc47da9e 100644 --- a/source/blender/blenkernel/intern/mball.c +++ b/source/blender/blenkernel/intern/mball.c @@ -330,8 +330,8 @@ int is_mball_basis_for(Object *ob1, Object *ob2) int basis1nr, basis2nr; char basis1name[32], basis2name[32]; - splitIDname(ob1->id.name+2, basis1name, &basis1nr); - splitIDname(ob2->id.name+2, basis2name, &basis2nr); + BLI_split_name_num(basis1name, &basis1nr, ob1->id.name+2); + BLI_split_name_num(basis2name, &basis2nr, ob2->id.name+2); if(!strcmp(basis1name, basis2name)) return is_basis_mball(ob1); else return 0; @@ -352,7 +352,7 @@ void copy_mball_properties(Scene *scene, Object *active_object) int basisnr, obnr; char basisname[32], obname[32]; - splitIDname(active_object->id.name+2, basisname, &basisnr); + BLI_split_name_num(basisname, &basisnr, active_object->id.name+2); /* XXX recursion check, see scene.c, just too simple code this next_object() */ if(F_ERROR==next_object(&sce_iter, 0, 0, 0)) @@ -361,7 +361,7 @@ void copy_mball_properties(Scene *scene, Object *active_object) while(next_object(&sce_iter, 1, &base, &ob)) { if (ob->type==OB_MBALL) { if(ob!=active_object){ - splitIDname(ob->id.name+2, obname, &obnr); + BLI_split_name_num(obname, &obnr, ob->id.name+2); /* Object ob has to be in same "group" ... it means, that it has to have * same base of its name */ @@ -394,8 +394,8 @@ Object *find_basis_mball(Scene *scene, Object *basis) MetaElem *ml=NULL; int basisnr, obnr; char basisname[32], obname[32]; - - splitIDname(basis->id.name+2, basisname, &basisnr); + + BLI_split_name_num(basisname, &basisnr, basis->id.name+2); totelem= 0; /* XXX recursion check, see scene.c, just too simple code this next_object() */ @@ -415,7 +415,7 @@ Object *find_basis_mball(Scene *scene, Object *basis) else ml= mb->elems.first; } else{ - splitIDname(ob->id.name+2, obname, &obnr); + BLI_split_name_num(obname, &obnr, ob->id.name+2); /* object ob has to be in same "group" ... it means, that it has to have * same base of its name */ @@ -1572,7 +1572,7 @@ float init_meta(Scene *scene, Object *ob) /* return totsize */ invert_m4_m4(obinv, ob->obmat); a= 0; - splitIDname(ob->id.name+2, obname, &obnr); + BLI_split_name_num(obname, &obnr, ob->id.name+2); /* make main array */ next_object(&sce_iter, 0, 0, 0); @@ -1593,7 +1593,7 @@ float init_meta(Scene *scene, Object *ob) /* return totsize */ char name[32]; int nr; - splitIDname(bob->id.name+2, name, &nr); + BLI_split_name_num(name, &nr, bob->id.name+2); if( strcmp(obname, name)==0 ) { mb= bob->data; diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 91f15d1ee6c..f4e9dcf742b 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -46,6 +46,7 @@ #include "BKE_scene.h" #include "BKE_subsurf.h" #include "BKE_utildefines.h" +#include "BKE_object.h" #include "CCGSubSurf.h" @@ -89,6 +90,34 @@ MultiresModifierData *find_multires_modifier_before(Scene *scene, ModifierData * return NULL; } +/* used for applying scale on mdisps layer and syncing subdivide levels when joining objects */ +static MultiresModifierData *get_multires_modifier(Scene *scene, Object *ob) +{ + ModifierData *md; + MultiresModifierData *mmd= NULL, *firstmmd= NULL; + + /* find first active multires modifier */ + for(md = ob->modifiers.first; md; md = md->next) { + if(md->type == eModifierType_Multires) { + if(!firstmmd) + firstmmd= (MultiresModifierData*)md; + + if (modifier_isEnabled(scene, md, eModifierMode_Realtime)) { + mmd= (MultiresModifierData*)md; + break; + } + } + } + + if(!mmd) { + /* active multires have not been found + try to use first one */ + return firstmmd; + } + + return mmd; +} + static int multires_get_level(Object *ob, MultiresModifierData *mmd, int render) { if(render) @@ -275,34 +304,46 @@ int multiresModifier_reshapeFromDeformMod(Scene *scene, MultiresModifierData *mm return result; } +/* reset the multires levels to match the number of mdisps */ +static int get_levels_from_disps(Object *ob) +{ + Mesh *me = ob->data; + MDisps *mdisp; + int i, totlvl= 0; + + mdisp = CustomData_get_layer(&me->fdata, CD_MDISPS); + + for(i = 0; i < me->totface; ++i, ++mdisp) { + int S = me->mface[i].v4 ? 4 : 3; + + if(mdisp->totdisp == 0) continue; + + while(1) { + int side = (1 << (totlvl-1)) + 1; + int lvl_totdisp = side*side*S; + if(mdisp->totdisp == lvl_totdisp) + break; + else if(mdisp->totdisp < lvl_totdisp) + --totlvl; + else + ++totlvl; + + } + } + + return totlvl; +} + /* reset the multires levels to match the number of mdisps */ void multiresModifier_set_levels_from_disps(MultiresModifierData *mmd, Object *ob) { Mesh *me = ob->data; MDisps *mdisp; - int i; mdisp = CustomData_get_layer(&me->fdata, CD_MDISPS); if(mdisp) { - for(i = 0; i < me->totface; ++i, ++mdisp) { - int S = me->mface[i].v4 ? 4 : 3; - - if(mdisp->totdisp == 0) continue; - - while(1) { - int side = (1 << (mmd->totlvl-1)) + 1; - int lvl_totdisp = side*side*S; - if(mdisp->totdisp == lvl_totdisp) - break; - else if(mdisp->totdisp < lvl_totdisp) - --mmd->totlvl; - else - ++mmd->totlvl; - - } - } - + mmd->totlvl = get_levels_from_disps(ob); mmd->lvl = MIN2(mmd->sculptlvl, mmd->totlvl); mmd->sculptlvl = MIN2(mmd->sculptlvl, mmd->totlvl); mmd->renderlvl = MIN2(mmd->renderlvl, mmd->totlvl); @@ -389,11 +430,9 @@ static void multires_copy_dm_grid(DMGridData *gridA, DMGridData *gridB, int size } } -/* direction=1 for delete higher, direction=0 for lower (not implemented yet) */ -void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int direction) +static void multires_del_higher(MultiresModifierData *mmd, Object *ob, int lvl) { - Mesh *me = get_mesh(ob); - int lvl = multires_get_level(ob, mmd, 0); + Mesh *me = (Mesh*)ob->data; int levels = mmd->totlvl - lvl; MDisps *mdisps; @@ -403,7 +442,7 @@ void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int dire multires_force_update(ob); - if(mdisps && levels > 0 && direction == 1) { + if(mdisps && levels > 0) { if(lvl > 0) { int nsize = multires_side_tot[lvl]; int hsize = multires_side_tot[mmd->totlvl]; @@ -442,11 +481,31 @@ void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int dire multires_set_tot_level(ob, mmd, lvl); } +/* direction=1 for delete higher, direction=0 for lower (not implemented yet) */ +void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int direction) +{ + Mesh *me = get_mesh(ob); + int lvl = multires_get_level(ob, mmd, 0); + int levels = mmd->totlvl - lvl; + MDisps *mdisps; + + multires_set_tot_mdisps(me, mmd->totlvl); + CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface); + mdisps= CustomData_get_layer(&me->fdata, CD_MDISPS); + + multires_force_update(ob); + + if(mdisps && levels > 0 && direction == 1) { + multires_del_higher(mmd, ob, lvl); + } + + multires_set_tot_level(ob, mmd, lvl); +} + static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int totlvl, int simple) { - MultiresModifierData mmd; + MultiresModifierData mmd= {{0}}; - memset(&mmd, 0, sizeof(MultiresModifierData)); mmd.lvl = lvl; mmd.sculptlvl = lvl; mmd.renderlvl = lvl; @@ -458,9 +517,8 @@ static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lv static DerivedMesh *subsurf_dm_create_local(Object *UNUSED(ob), DerivedMesh *dm, int lvl, int simple, int optimal) { - SubsurfModifierData smd; + SubsurfModifierData smd= {{0}}; - memset(&smd, 0, sizeof(SubsurfModifierData)); smd.levels = smd.renderLevels = lvl; smd.flags |= eSubsurfModifierFlag_SubsurfUv; if(simple) @@ -471,12 +529,11 @@ static DerivedMesh *subsurf_dm_create_local(Object *UNUSED(ob), DerivedMesh *dm, return subsurf_make_derived_from_derived(dm, &smd, 0, NULL, 0, 0); } -void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updateblock, int simple) +void multires_subdivide(MultiresModifierData *mmd, Object *ob, int totlvl, int updateblock, int simple) { Mesh *me = ob->data; MDisps *mdisps; int lvl= mmd->totlvl; - int totlvl= mmd->totlvl+1; if(totlvl > multires_max_levels) return; @@ -549,6 +606,11 @@ void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updat multires_set_tot_level(ob, mmd, totlvl); } +void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updateblock, int simple) +{ + multires_subdivide(mmd, ob, mmd->totlvl+1, updateblock, simple); +} + static void grid_tangent(int gridSize, int index, int x, int y, int axis, DMGridData **gridData, float t[3]) { if(axis == 0) { @@ -1011,7 +1073,12 @@ static void create_old_vert_edge_map(ListBase **map, IndexNode **mem, const Mult static MultiresFace *find_old_face(ListBase *map, MultiresFace *faces, int v1, int v2, int v3, int v4) { IndexNode *n1; - int v[4] = {v1, v2, v3, v4}, i, j; + int v[4], i, j; + + v[0]= v1; + v[1]= v2; + v[2]= v3; + v[3]= v4; for(n1 = map[v1].first; n1; n1 = n1->next) { int fnd[4] = {0, 0, 0, 0}; @@ -1386,3 +1453,185 @@ void multires_load_old(Object *ob, Mesh *me) me->mr= NULL; } +static void multires_sync_levels(Scene *scene, Object *ob, Object *to_ob) +{ + MultiresModifierData *mmd= get_multires_modifier(scene, ob); + MultiresModifierData *to_mmd= get_multires_modifier(scene, to_ob); + + if(!mmd) { + /* object could have MDISP even when there is no multires modifier + this could lead to troubles due to i've got no idea how mdisp could be + upsampled correct without modifier data. + just remove mdisps if no multires present (nazgul) */ + + Mesh *me= (Mesh*)ob->data; + + CustomData_external_remove(&me->fdata, &me->id, CD_MDISPS, me->totface); + CustomData_free_layer_active(&me->fdata, CD_MDISPS, me->totface); + } + + if(!mmd || !to_mmd) return; + + if(mmd->totlvl>to_mmd->totlvl) multires_del_higher(mmd, ob, to_mmd->totlvl); + else multires_subdivide(mmd, ob, to_mmd->totlvl, 0, mmd->simple); +} + +void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3]) +{ + DerivedMesh *dm= NULL, *cddm= NULL, *subdm= NULL; + DMGridData **gridData, **subGridData; + Mesh *me= (Mesh*)ob->data; + MFace *mface= me->mface; + MVert *mvert= NULL; + MDisps *mdisps; + int *gridOffset; + int i, numGrids, gridSize, dGridSize, dSkip, totvert; + float (*vertCos)[3] = NULL; + MultiresModifierData *mmd= get_multires_modifier(scene, ob); + MultiresModifierData high_mmd; + + CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface); + mdisps= CustomData_get_layer(&me->fdata, CD_MDISPS); + + if(!mdisps || !mmd) return; + + /* we need derived mesh created from highest resolution */ + high_mmd= *mmd; + high_mmd.lvl= high_mmd.totlvl; + + /* unscaled multires with applied displacement */ + subdm= get_multires_dm(scene, &high_mmd, ob); + + /* prepare scaled CDDM to create ccgDN */ + cddm= mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH); + + totvert= cddm->getNumVerts(cddm); + vertCos= MEM_mallocN(sizeof(*vertCos) * totvert, "multiresScale vertCos"); + cddm->getVertCos(cddm, vertCos); + for(i=0; igetVertArray(cddm); + + /* scaled ccgDM for tangent space of object with applied scale */ + dm= subsurf_dm_create_local(ob, cddm, high_mmd.totlvl, high_mmd.simple, 0); + cddm->release(cddm); + + numGrids= dm->getNumGrids(dm); + gridSize= dm->getGridSize(dm); + gridData= dm->getGridData(dm); + gridOffset= dm->getGridOffset(dm); + subGridData= subdm->getGridData(subdm); + + dGridSize= multires_side_tot[high_mmd.totlvl]; + dSkip= (dGridSize-1)/(gridSize-1); + + #pragma omp parallel for private(i) if(me->totface*gridSize*gridSize*4 >= CCG_OMP_LIMIT) + for(i = 0; i < me->totface; ++i) { + const int numVerts= mface[i].v4 ? 4 : 3; + MDisps *mdisp= &mdisps[i]; + int S, x, y, gIndex = gridOffset[i]; + + for(S = 0; S < numVerts; ++S, ++gIndex) { + DMGridData *grid= gridData[gIndex]; + DMGridData *subgrid= subGridData[gIndex]; + float (*dispgrid)[3]= &mdisp->disps[S*dGridSize*dGridSize]; + + for(y = 0; y < gridSize; y++) { + for(x = 0; x < gridSize; x++) { + float *co= grid[x + y*gridSize].co; + float *sco= subgrid[x + y*gridSize].co; + float *no= grid[x + y*gridSize].no; + float *data= dispgrid[dGridSize*y*dSkip + x*dSkip]; + float mat[3][3], tx[3], ty[3], disp[3]; + + /* construct tangent space matrix */ + grid_tangent(gridSize, gIndex, x, y, 0, gridData, tx); + normalize_v3(tx); + + grid_tangent(gridSize, gIndex, x, y, 1, gridData, ty); + normalize_v3(ty); + + column_vectors_to_mat3(mat, tx, ty, no); + + /* scale subgrid coord and calculate displacement */ + mul_m3_v3(smat, sco); + sub_v3_v3v3(disp, sco, co); + + /* convert difference to tangent space */ + invert_m3(mat); + mul_v3_m3v3(data, mat, disp); + } + } + } + } + + dm->release(dm); + subdm->release(subdm); +} + +int multires_mdisp_corners(MDisps *s) +{ + int lvl= 13; + + while(lvl > 0) { + int side = (1 << (lvl-1)) + 1; + if ((s->totdisp % (side*side)) == 0) return s->totdisp / (side*side); + lvl--; + } + + return 0; +} + +void multiresModifier_scale_disp(Scene *scene, Object *ob) +{ + float smat[3][3]; + + /* object's scale matrix */ + object_scale_to_mat3(ob, smat); + + multires_apply_smat(scene, ob, smat); +} + +void multiresModifier_prepare_join(Scene *scene, Object *ob, Object *to_ob) +{ + float smat[3][3], tmat[3][3], mat[3][3]; + multires_sync_levels(scene, ob, to_ob); + + /* construct scale matrix for displacement */ + object_scale_to_mat3(to_ob, tmat); + invert_m3(tmat); + object_scale_to_mat3(ob, smat); + mul_m3_m3m3(mat, smat, tmat); + + multires_apply_smat(scene, ob, mat); +} + +/* update multires data after topology changing */ +void multires_topology_changed(Object *ob) +{ + Mesh *me= (Mesh*)ob->data; + MDisps *mdisp= NULL; + int i; + + CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface); + mdisp= CustomData_get_layer(&me->fdata, CD_MDISPS); + + if(!mdisp) return; + + for(i = 0; i < me->totface; i++, mdisp++) { + int corners= multires_mdisp_corners(mdisp); + int nvert= me->mface[i].v4 ? 4 : 3; + + if(corners!=nvert) { + mdisp->totdisp= (mdisp->totdisp/corners)*nvert; + + if(mdisp->disps) + MEM_freeN(mdisp->disps); + + mdisp->disps= MEM_callocN(mdisp->totdisp*sizeof(float)*3, "mdisp topology"); + } + } +} diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 67c3e746a63..423ccb00e8e 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -362,7 +362,7 @@ static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short return strip->end - scale*(cframe - strip->actstart); } else if (mode == NLATIME_CONVERT_UNMAP) { - return strip->actend - (strip->end - cframe) / scale; + return (strip->end + (strip->actstart * scale - cframe)) / scale; } else /* if (mode == NLATIME_CONVERT_EVAL) */{ if (IS_EQ(cframe, strip->end) && IS_EQ(strip->repeat, ((int)strip->repeat))) { @@ -1260,27 +1260,21 @@ void BKE_nlastrip_validate_name (AnimData *adt, NlaStrip *strip) * - in an extreme case, it might not be able to find a name, but then everything else in Blender would fail too :) */ if (BLI_ghash_haskey(gh, strip->name)) { - char tempname[128]; - int number = 1; - char *dot; - - /* Strip off the suffix */ - dot = strrchr(strip->name, '.'); - if (dot) *dot=0; - - /* Try different possibilities */ - for (number = 1; number <= 999; number++) { - /* assemble alternative name */ - BLI_snprintf(tempname, 128, "%s.%03d", strip->name, number); - - /* if hash doesn't have this, set it */ - if (BLI_ghash_haskey(gh, tempname) == 0) { - BLI_strncpy(strip->name, tempname, sizeof(strip->name)); - break; + /* note: this block is used in other places, when changing logic apply to all others, search this message */ + char tempname[sizeof(strip->name)]; + char left[sizeof(strip->name)]; + int number; + int len= BLI_split_name_num(left, &number, strip->name); + do { /* nested while loop looks bad but likely it wont run most times */ + while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) { + if(len > 0) left[--len]= '\0'; /* word too long */ + else number= 0; /* reset, must be a massive number */ } - } - } + } while(number++, BLI_ghash_haskey(gh, tempname)); + BLI_strncpy(strip->name, tempname, sizeof(strip->name)); + } + /* free the hash... */ BLI_ghash_free(gh, NULL, NULL); } diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 6b53e538f8e..6c4c566f5b1 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -27,7 +27,7 @@ * ***** END GPL LICENSE BLOCK ***** */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include #endif @@ -2718,7 +2718,7 @@ static void gpu_from_node_stack(ListBase *sockets, bNodeStack **ns, GPUNodeStack gs[i].name = ""; gs[i].hasinput= ns[i]->hasinput && ns[i]->data; - gs[i].hasoutput= ns[i]->hasinput && ns[i]->data; + gs[i].hasoutput= ns[i]->hasoutput && ns[i]->data; gs[i].sockettype= ns[i]->sockettype; } @@ -2732,8 +2732,6 @@ static void data_from_gpu_stack(ListBase *sockets, bNodeStack **ns, GPUNodeStack for (sock=sockets->first, i=0; sock; sock=sock->next, i++) { ns[i]->data= gs[i].link; - ns[i]->hasinput= gs[i].hasinput && gs[i].link; - ns[i]->hasoutput= gs[i].hasoutput; ns[i]->sockettype= gs[i].sockettype; } } diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 142e41918dd..e006c48aca5 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -96,7 +96,7 @@ #include "LBM_fluidsim.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -1550,7 +1550,7 @@ void object_make_proxy(Object *ob, Object *target, Object *gob) if(gob) { ob->rotmode= target->rotmode; mul_m4_m4m4(ob->obmat, target->obmat, gob->obmat); - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, FALSE); } else { copy_object_transform(ob, target); @@ -1678,54 +1678,27 @@ void object_rot_to_mat3(Object *ob, float mat[][3]) mul_m3_m3m3(mat, dmat, rmat); } -void object_mat3_to_rot(Object *ob, float mat[][3], int use_compat) +void object_mat3_to_rot(Object *ob, float mat[][3], short use_compat) { - if (ob->rotmode == ROT_MODE_QUAT) + switch(ob->rotmode) { + case ROT_MODE_QUAT: mat3_to_quat(ob->quat, mat); - else if (ob->rotmode == ROT_MODE_AXISANGLE) + break; + case ROT_MODE_AXISANGLE: mat3_to_axis_angle(ob->rotAxis, &ob->rotAngle, mat); - else { - if(use_compat) { - float eul[3]; - VECCOPY(eul, ob->rot); - mat3_to_compatible_eulO(ob->rot, eul, ob->rotmode, mat); - } - else - mat3_to_eulO(ob->rot, ob->rotmode, mat); + break; + default: /* euler */ + if(use_compat) mat3_to_compatible_eulO(ob->rot, ob->rot, ob->rotmode, mat); + else mat3_to_eulO(ob->rot, ob->rotmode, mat); } } /* see pchan_apply_mat4() for the equivalent 'pchan' function */ -void object_apply_mat4(Object *ob, float mat[][4]) +void object_apply_mat4(Object *ob, float mat[][4], short use_compat) { - float mat3[3][3]; /* obmat -> 3x3 */ - float mat3_n[3][3]; /* obmat -> normalized, 3x3 */ - float imat3_n[3][3]; /* obmat -> normalized & inverted, 3x3 */ - - /* location */ - copy_v3_v3(ob->loc, mat[3]); - - /* rotation & scale are linked, we need to create the mat's - * for these together since they are related. */ - copy_m3_m4(mat3, mat); - /* so scale doesnt interfear with rotation [#24291] */ - normalize_m3_m3(mat3_n, (const float(*)[3])mat3); - if(mat3_n[0][0] < 0.0f) negate_v3(mat3_n[0]); - if(mat3_n[1][1] < 0.0f) negate_v3(mat3_n[1]); - if(mat3_n[2][2] < 0.0f) negate_v3(mat3_n[2]); - - - /* rotation */ - object_mat3_to_rot(ob, mat3_n, 0); - - /* scale */ - /* note: mat4_to_size(ob->size, mat) fails for negative scale */ - invert_m3_m3(imat3_n, mat3_n); - mul_m3_m3m3(mat3, imat3_n, mat3); - - ob->size[0]= mat3[0][0]; - ob->size[1]= mat3[1][1]; - ob->size[2]= mat3[2][2]; + float rot[3][3]; + mat4_to_loc_rot_size(ob->loc, rot, ob->size, mat); + object_mat3_to_rot(ob, rot, use_compat); } void object_to_mat3(Object *ob, float mat[][3]) /* no parent */ diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index 624587338c9..0dc0b67b377 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -3221,7 +3221,12 @@ void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cf edit->totcached = totpart; if(psys) { - ParticleSimulationData sim = {scene, ob, psys, psys_get_modifier(ob, psys), NULL}; + ParticleSimulationData sim= {0}; + sim.scene= scene; + sim.ob= ob; + sim.psys= psys; + sim.psmd= psys_get_modifier(ob, psys); + psys_cache_child_paths(&sim, cfra, 1); } @@ -4449,7 +4454,11 @@ void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3] void psys_apply_hair_lattice(Scene *scene, Object *ob, ParticleSystem *psys) { - ParticleSimulationData sim = {scene, ob, psys, psys_get_modifier(ob, psys)}; + ParticleSimulationData sim= {0}; + sim.scene= scene; + sim.ob= ob; + sim.psys= psys; + sim.psmd= psys_get_modifier(ob, psys); psys->lattice = psys_get_lattice(&sim); diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index be616d9922c..2b045647661 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -1705,9 +1705,10 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime, r_phase = PSYS_FRAND(p + 20); if(part->from==PART_FROM_PARTICLE){ - ParticleSimulationData tsim = {sim->scene, psys->target_ob ? psys->target_ob : ob, NULL, NULL}; float speed; - + ParticleSimulationData tsim= {0}; + tsim.scene= sim->scene; + tsim.ob= psys->target_ob ? psys->target_ob : ob; tsim.psys = BLI_findlink(&tsim.ob->particlesystem, sim->psys->target_psys-1); state.time = pa->time; @@ -2057,12 +2058,14 @@ void psys_count_keyed_targets(ParticleSimulationData *sim) static void set_keyed_keys(ParticleSimulationData *sim) { ParticleSystem *psys = sim->psys; - ParticleSimulationData ksim = {sim->scene, NULL, NULL, NULL}; + ParticleSimulationData ksim= {0}; ParticleTarget *pt; PARTICLE_P; ParticleKey *key; int totpart = psys->totpart, k, totkeys = psys->totkeyed; + ksim.scene= sim->scene; + /* no proper targets so let's clear and bail out */ if(psys->totkeyed==0) { free_keyed_keys(psys); @@ -2777,23 +2780,26 @@ void particle_intersect_face(void *userdata, int index, const BVHTreeRay *ray, B MVert *x = col->md->x; MVert *v = col->md->current_v; float vel[3], co1[3], co2[3], uv[2], ipoint[3], temp[3], t; + float x0[3], x1[3], x2[3], x3[3]; + float *t0=x0, *t1=x1, *t2=x2, *t3=(face->v4 ? x3 : NULL); - float *t0, *t1, *t2, *t3; - t0 = x[ face->v1 ].co; - t1 = x[ face->v2 ].co; - t2 = x[ face->v3 ].co; - t3 = face->v4 ? x[ face->v4].co : NULL; + /* move collision face to start of timestep */ + madd_v3_v3v3fl(t0, x[face->v1].co, v[face->v1].co, col->cfra); + madd_v3_v3v3fl(t1, x[face->v2].co, v[face->v2].co, col->cfra); + madd_v3_v3v3fl(t2, x[face->v3].co, v[face->v3].co, col->cfra); + if(t3) + madd_v3_v3v3fl(t3, x[face->v4].co, v[face->v4].co, col->cfra); /* calculate average velocity of face */ - VECCOPY(vel, v[ face->v1 ].co); - VECADD(vel, vel, v[ face->v2 ].co); - VECADD(vel, vel, v[ face->v3 ].co); - mul_v3_fl(vel, 0.33334f); + copy_v3_v3(vel, v[ face->v1 ].co); + add_v3_v3(vel, v[ face->v2 ].co); + add_v3_v3(vel, v[ face->v3 ].co); + mul_v3_fl(vel, 0.33334f*col->dfra); /* substract face velocity, in other words convert to a coordinate system where only the particle moves */ - VECADDFAC(co1, col->co1, vel, -col->t); - VECSUB(co2, col->co2, vel); + madd_v3_v3v3fl(co1, col->co1, vel, -col->f); + sub_v3_v3v3(co2, col->co2, vel); do { @@ -2875,7 +2881,7 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo copy_v3_v3(col.co2, pa->state.co); copy_v3_v3(col.ve1, pa->prev_state.vel); copy_v3_v3(col.ve2, pa->state.vel); - col.t = 0.0f; + col.f = 0.0f; /* override for boids */ if(part->phystype == PART_PHYS_BOIDS) { @@ -2893,6 +2899,9 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo hit.index = -1; hit.dist = col.ray_len = len_v3(ray_dir); + col.cfra = fmod(cfra-dfra, 1.0f); + col.dfra = dfra; + /* even if particle is stationary we want to check for moving colliders */ /* if hit.dist is zero the bvhtree_ray_cast will just ignore everything */ if(hit.dist == 0.0f) @@ -2917,11 +2926,11 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo /* 2. */ if(hit.index>=0) { PartDeflect *pd = col.hit_ob->pd; - float co[3]; /* point of collision */ - float x = hit.dist/col.ray_len; /* location of collision between this iteration */ - float df = col.t + x * (1.0f - col.t); /* time of collision between frame change*/ - float dt1 = (df - col.t) * timestep; /* iteration time of collision (in seconds) */ - float dt2 = (1.0f - df) * timestep; /* time left after collision (in seconds) */ + float co[3]; /* point of collision */ + float x = hit.dist/col.ray_len; /* location factor of collision between this iteration */ + float f = col.f + x * (1.0f - col.f); /* time factor of collision between timestep */ + float dt1 = (f - col.f) * timestep; /* time since previous collision (in seconds) */ + float dt2 = (1.0f - f) * timestep; /* time left after collision (in seconds) */ int through = (BLI_frand() < pd->pdef_perm) ? 1 : 0; /* did particle pass through the collision surface? */ deflections++; @@ -2935,12 +2944,12 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo /* particle dies in collision */ if(through == 0 && (part->flag & PART_DIE_ON_COL || pd->flag & PDEFLE_KILL_PART)) { pa->alive = PARS_DYING; - pa->dietime = pa->state.time + (cfra - pa->state.time) * df; + pa->dietime = pa->state.time + (cfra - pa->state.time) * f; copy_v3_v3(pa->state.co, co); - interp_v3_v3v3(pa->state.vel, pa->prev_state.vel, pa->state.vel, df); - interp_qt_qtqt(pa->state.rot, pa->prev_state.rot, pa->state.rot, df); - interp_v3_v3v3(pa->state.ave, pa->prev_state.ave, pa->state.ave, df); + interp_v3_v3v3(pa->state.vel, pa->prev_state.vel, pa->state.vel, f); + interp_qt_qtqt(pa->state.rot, pa->prev_state.rot, pa->state.rot, f); + interp_v3_v3v3(pa->state.ave, pa->prev_state.ave, pa->state.ave, f); /* particle is dead so we don't need to calculate further */ return; @@ -3073,11 +3082,11 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo copy_v3_v3(col.ve1, v0); copy_v3_v3(col.ve2, pa->state.vel); - col.t = df; + col.f = f; } else { - /* final chance to prevent failure, so don't do anything fancy */ - copy_v3_v3(pa->state.co, co); + /* final chance to prevent failure, so stick to the surface and hope for the best */ + madd_v3_v3v3fl(pa->state.co, co, col.vel, dt2); copy_v3_v3(pa->state.vel, v0); } } @@ -3983,7 +3992,7 @@ static int hair_needs_recalc(ParticleSystem *psys) * then advances in to actual particle calculations depending on particle type */ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys) { - ParticleSimulationData sim = {scene, ob, psys, NULL, NULL}; + ParticleSimulationData sim= {0}; ParticleSettings *part = psys->part; float cfra; @@ -3994,6 +4003,10 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys) return; cfra= BKE_curframe(scene); + + sim.scene= scene; + sim.ob= ob; + sim.psys= psys; sim.psmd= psys_get_modifier(ob, psys); /* system was already updated from modifier stack */ diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index 37d2b103ef0..35e0441739e 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -199,13 +199,17 @@ static int ptcache_write_particle(int index, void *psys_v, void **data, int cfra ParticleSystem *psys= psys_v; ParticleData *pa = psys->particles + index; BoidParticle *boid = (psys->part->phystype == PART_PHYS_BOIDS) ? pa->boid : NULL; - float times[3] = {pa->time, pa->dietime, pa->lifetime}; + float times[3]; int step = psys->pointcache->step; /* No need to store unborn or died particles outside cache step bounds */ if(data[BPHYS_DATA_INDEX] && (cfra < pa->time - step || cfra > pa->dietime + step)) return 0; - + + times[0]= pa->time; + times[1]= pa->dietime; + times[2]= pa->lifetime; + PTCACHE_DATA_FROM(data, BPHYS_DATA_INDEX, &index); PTCACHE_DATA_FROM(data, BPHYS_DATA_LOCATION, pa->state.co); PTCACHE_DATA_FROM(data, BPHYS_DATA_VELOCITY, pa->state.vel); @@ -2002,7 +2006,7 @@ void BKE_ptcache_id_clear(PTCacheID *pid, int mode, int cfra) if((mode==PTCACHE_CLEAR_BEFORE && pm->frame < cfra) || (mode==PTCACHE_CLEAR_AFTER && pm->frame > cfra) ) { link = pm; - if(pm->frame >=sta && pm->frame <= end) + if(pid->cache->cached_frames && pm->frame >=sta && pm->frame <= end) pid->cache->cached_frames[pm->frame-sta] = 0; ptcache_free_data(pm); pm = pm->next; @@ -2603,6 +2607,8 @@ void BKE_ptcache_make_cache(PTCacheBaker* baker) thread_data.break_operation = FALSE; thread_data.thread_ended = FALSE; old_progress = -1; + + WM_cursor_wait(1); if(G.background) { ptcache_make_cache_thread((void*)&thread_data); @@ -2686,6 +2692,8 @@ void BKE_ptcache_make_cache(PTCacheBaker* baker) else if (baker->progressend) baker->progressend(baker->progresscontext); + WM_cursor_wait(0); + /* TODO: call redraw all windows somehow */ } /* Helpers */ diff --git a/source/blender/blenkernel/intern/script.c b/source/blender/blenkernel/intern/script.c index c07032f71d7..6ffac09e843 100644 --- a/source/blender/blenkernel/intern/script.c +++ b/source/blender/blenkernel/intern/script.c @@ -36,7 +36,7 @@ /* -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" // Blender Python library #endif */ diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c index 6477c6b4f75..f5dc04ca569 100644 --- a/source/blender/blenkernel/intern/seqeffects.c +++ b/source/blender/blenkernel/intern/seqeffects.c @@ -2631,38 +2631,36 @@ static void copy_glow_effect(Sequence *dst, Sequence *src) } //void do_glow_effect(Cast *cast, float facf0, float facf1, int xo, int yo, ImBuf *ibuf1, ImBuf *ibuf2, ImBuf *outbuf, ImBuf *use) -static void do_glow_effect_byte(Sequence *seq, float facf0, float UNUSED(facf1), +static void do_glow_effect_byte(Sequence *seq, int render_size, float facf0, float UNUSED(facf1), int x, int y, char *rect1, char *UNUSED(rect2), char *out) { unsigned char *outbuf=(unsigned char *)out; unsigned char *inbuf=(unsigned char *)rect1; GlowVars *glow = (GlowVars *)seq->effectdata; - int size= 100; // renderdata XXX RVIsolateHighlights_byte(inbuf, outbuf , x, y, glow->fMini*765, glow->fBoost * facf0, glow->fClamp); - RVBlurBitmap2_byte (outbuf, x, y, glow->dDist * (size / 100.0f),glow->dQuality); + RVBlurBitmap2_byte (outbuf, x, y, glow->dDist * (render_size / 100.0f),glow->dQuality); if (!glow->bNoComp) RVAddBitmaps_byte (inbuf , outbuf, outbuf, x, y); } -static void do_glow_effect_float(Sequence *seq, float facf0, float UNUSED(facf1), +static void do_glow_effect_float(Sequence *seq, int render_size, float facf0, float UNUSED(facf1), int x, int y, float *rect1, float *UNUSED(rect2), float *out) { float *outbuf = out; float *inbuf = rect1; GlowVars *glow = (GlowVars *)seq->effectdata; - int size= 100; // renderdata XXX RVIsolateHighlights_float(inbuf, outbuf , x, y, glow->fMini*3.0f, glow->fBoost * facf0, glow->fClamp); - RVBlurBitmap2_float (outbuf, x, y, glow->dDist * (size / 100.0f),glow->dQuality); + RVBlurBitmap2_float (outbuf, x, y, glow->dDist * (render_size / 100.0f),glow->dQuality); if (!glow->bNoComp) RVAddBitmaps_float (inbuf , outbuf, outbuf, x, y); } static struct ImBuf * do_glow_effect( - Main *UNUSED(bmain), Scene *UNUSED(scene), Sequence *seq, float UNUSED(cfra), + Main *UNUSED(bmain), Scene * scene, Sequence *seq, float UNUSED(cfra), float facf0, float facf1, int x, int y, int UNUSED(preview_render_size), struct ImBuf *ibuf1, struct ImBuf *ibuf2, @@ -2670,13 +2668,15 @@ static struct ImBuf * do_glow_effect( { struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3); + int render_size = 100*x/scene->r.xsch; + if (out->rect_float) { - do_glow_effect_float(seq, + do_glow_effect_float(seq, render_size, facf0, facf1, x, y, ibuf1->rect_float, ibuf2->rect_float, out->rect_float); } else { - do_glow_effect_byte(seq, + do_glow_effect_byte(seq, render_size, facf0, facf1, x, y, (char*) ibuf1->rect, (char*) ibuf2->rect, (char*) out->rect); @@ -3262,9 +3262,7 @@ static struct SeqEffectHandle get_sequence_effect_impl(int seq_type) struct SeqEffectHandle get_sequence_effect(Sequence * seq) { - struct SeqEffectHandle rval; - - memset(&rval, 0, sizeof(struct SeqEffectHandle)); + struct SeqEffectHandle rval= {0}; if (seq->type & SEQ_EFFECT) { rval = get_sequence_effect_impl(seq->type); @@ -3279,9 +3277,7 @@ struct SeqEffectHandle get_sequence_effect(Sequence * seq) struct SeqEffectHandle get_sequence_blend(Sequence * seq) { - struct SeqEffectHandle rval; - - memset(&rval, 0, sizeof(struct SeqEffectHandle)); + struct SeqEffectHandle rval= {0}; if (seq->blend_mode != 0) { rval = get_sequence_effect_impl(seq->blend_mode); diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index 53930cee68b..4a8c47f1f71 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -372,7 +372,7 @@ void build_seqar(ListBase *seqbase, Sequence ***seqar, int *totseq) do_seq_count(seqbase, totseq); if(*totseq==0) { - *seqar= 0; + *seqar= NULL; return; } *seqar= MEM_mallocN(sizeof(void *)* *totseq, "seqar"); @@ -411,8 +411,7 @@ static void do_build_seqar_cb(ListBase *seqbase, Sequence ***seqar, int depth, seq->depth= depth; if(seq->seqbase.first && (test & BUILD_SEQAR_COUNT_CHILDREN)) { - do_build_seqar_cb(&seq->seqbase, seqar, depth+1, - test_func); + do_build_seqar_cb(&seq->seqbase, seqar, depth+1, test_func); } if (test & BUILD_SEQAR_COUNT_CURRENT) { **seqar= seq; @@ -431,7 +430,7 @@ void build_seqar_cb(ListBase *seqbase, Sequence ***seqar, int *totseq, do_seq_count_cb(seqbase, totseq, test_func); if(*totseq==0) { - *seqar= 0; + *seqar= NULL; return; } *seqar= MEM_mallocN(sizeof(void *)* *totseq, "seqar"); @@ -471,7 +470,7 @@ static void seq_update_sound_bounds_recursive(Scene *scene, Sequence *metaseq) if(seq->type == SEQ_META) { seq_update_sound_bounds_recursive(scene, seq); } - else if((seq->type == SEQ_SOUND) || (seq->type == SEQ_SCENE)) { + else if(ELEM(seq->type, SEQ_SOUND, SEQ_SCENE)) { if(seq->scene_sound) { int startofs = seq->startofs; int endofs = seq->endofs; @@ -502,8 +501,8 @@ void calc_sequence(Scene *scene, Sequence *seq) if(seq->type & SEQ_EFFECT) { /* pointers */ - if(seq->seq2==0) seq->seq2= seq->seq1; - if(seq->seq3==0) seq->seq3= seq->seq1; + if(seq->seq2==NULL) seq->seq2= seq->seq1; + if(seq->seq3==NULL) seq->seq3= seq->seq1; /* effecten go from seq1 -> seq2: test */ @@ -558,9 +557,7 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range) int prev_startdisp, prev_enddisp; /* note: dont rename the strip, will break animation curves */ - if (!(seq->type == SEQ_MOVIE || seq->type == SEQ_IMAGE || - seq->type == SEQ_SOUND || - seq->type == SEQ_SCENE || seq->type == SEQ_META)) { + if (ELEM5(seq->type, SEQ_MOVIE, SEQ_IMAGE, SEQ_SOUND, SEQ_SCENE, SEQ_META)==0) { return; } @@ -574,13 +571,14 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range) new_tstripdata(seq); - if (seq->type != SEQ_SCENE && seq->type != SEQ_META && - seq->type != SEQ_IMAGE) { + if (ELEM3(seq->type, SEQ_SCENE, SEQ_META, SEQ_IMAGE)==0) { BLI_join_dirfile(str, seq->strip->dir, seq->strip->stripdata->name); BLI_path_abs(str, G.main->name); } - if (seq->type == SEQ_IMAGE) { + switch(seq->type) { + case SEQ_IMAGE: + { /* Hack? */ size_t olen = MEM_allocN_len(seq->strip->stripdata)/sizeof(struct StripElem); @@ -591,7 +589,9 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range) seq->len = 0; } seq->strip->len = seq->len; - } else if (seq->type == SEQ_MOVIE) { + break; + } + case SEQ_MOVIE: if(seq->anim) IMB_free_anim(seq->anim); seq->anim = openanim(str, IB_rect | ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0)); @@ -609,7 +609,7 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range) seq->len = 0; } seq->strip->len = seq->len; - } else if (seq->type == SEQ_SOUND) { + case SEQ_SOUND: seq->len = ceil(AUD_getInfo(seq->sound->playback_handle).length * FPS); seq->len -= seq->anim_startofs; seq->len -= seq->anim_endofs; @@ -617,7 +617,9 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range) seq->len = 0; } seq->strip->len = seq->len; - } else if (seq->type == SEQ_SCENE) { + break; + case SEQ_SCENE: + { /* 'seq->scenenr' should be replaced with something more reliable */ Scene * sce = G.main->scene.first; int nr = 1; @@ -643,6 +645,8 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range) seq->len = 0; } seq->strip->len = seq->len; + break; + } } free_proxy_seq(seq); @@ -804,7 +808,7 @@ static char *give_seqname_by_type(int type) case SEQ_MULTICAM: return "Multicam"; case SEQ_SPEED: return "Speed"; default: - return 0; + return NULL; } } @@ -896,19 +900,24 @@ static void multibuf(ImBuf *ibuf, float fmul) static float give_stripelem_index(Sequence *seq, float cfra) { float nr; + int sta = seq->start; + int end = seq->start+seq->len-1; if(seq->len == 0) return -1; + if(seq->flag&SEQ_REVERSE_FRAMES) { /*reverse frame in this sequence */ - if(cfra <= seq->start) nr= seq->len-1; - else if(cfra >= seq->start+seq->len-1) nr= 0; - else nr= (seq->start + seq->len - 1) - cfra; + if(cfra <= sta) nr= seq->len-1; + else if(cfra >= end) nr= 0; + else nr= end - cfra; } else { - if(cfra <= seq->start) nr= 0; - else if(cfra >= seq->start+seq->len-1) nr= seq->len-1; - else nr= cfra-seq->start; + if(cfra <= sta) nr= 0; + else if(cfra >= end) nr= seq->len-1; + else nr= cfra - sta; } + if (seq->strobe < 1.0) seq->strobe = 1.0; + if (seq->strobe > 1.0) { nr -= fmod((double)nr, (double)seq->strobe); } @@ -920,14 +929,10 @@ StripElem *give_stripelem(Sequence *seq, int cfra) { StripElem *se= seq->strip->stripdata; - if(seq->type == SEQ_MOVIE) { - /* use the first */ - } - else { + if(seq->type != SEQ_MOVIE) { /* movie use the first */ int nr = (int) give_stripelem_index(seq, cfra); - if (nr == -1) return 0; - if (se == 0) return 0; + if (nr == -1 || se == 0) return 0; se += nr + seq->anim_startofs; } @@ -964,9 +969,7 @@ int evaluate_seq_frame(Scene *scene, int cfra) static int video_seq_is_rendered(Sequence * seq) { - return (seq - && !(seq->flag & SEQ_MUTE) - && seq->type != SEQ_SOUND); + return (seq && !(seq->flag & SEQ_MUTE) && seq->type != SEQ_SOUND); } static int get_shown_sequences( ListBase * seqbasep, int cfra, int chanshown, Sequence ** seq_arr_out) @@ -1019,7 +1022,7 @@ static int get_shown_sequences( ListBase * seqbasep, int cfra, int chanshown, Se #define PROXY_MAXFILE (2*FILE_MAXDIR+FILE_MAXFILE) -static int seq_proxy_get_fname(Scene *UNUSED(scene), Sequence * seq, int cfra, char * name, int render_size) +static int seq_proxy_get_fname(Scene *UNUSED(scene), Sequence * seq, int cfra, char * name, int preview_render_size) { int frameno; char dir[FILE_MAXDIR]; @@ -1028,13 +1031,11 @@ static int seq_proxy_get_fname(Scene *UNUSED(scene), Sequence * seq, int cfra, c return FALSE; } - if ((seq->flag & SEQ_USE_PROXY_CUSTOM_DIR) - || (seq->flag & SEQ_USE_PROXY_CUSTOM_FILE)) { + if (seq->flag & (SEQ_USE_PROXY_CUSTOM_DIR|SEQ_USE_PROXY_CUSTOM_FILE)) { strcpy(dir, seq->strip->proxy->dir); } else { - if (seq->type == SEQ_IMAGE || seq->type == SEQ_MOVIE) { - snprintf(dir, FILE_MAXDIR, "%s/BL_proxy", - seq->strip->dir); + if (ELEM(seq->type, SEQ_IMAGE, SEQ_MOVIE)) { + snprintf(dir, FILE_MAXDIR, "%s/BL_proxy", seq->strip->dir); } else { return FALSE; } @@ -1049,36 +1050,31 @@ static int seq_proxy_get_fname(Scene *UNUSED(scene), Sequence * seq, int cfra, c /* generate a separate proxy directory for each preview size */ - if (seq->type == SEQ_IMAGE) { - StripElem * se = give_stripelem(seq, cfra); - snprintf(name, PROXY_MAXFILE, "%s/images/%d/%s_proxy", - dir, render_size, se->name); + switch(seq->type) { + case SEQ_IMAGE: + snprintf(name, PROXY_MAXFILE, "%s/images/%d/%s_proxy", dir, + preview_render_size, give_stripelem(seq, cfra)->name); frameno = 1; - } else if (seq->type == SEQ_MOVIE) { - frameno = (int) give_stripelem_index(seq, cfra) - + seq->anim_startofs; - + break; + case SEQ_MOVIE: + frameno = (int) give_stripelem_index(seq, cfra) + seq->anim_startofs; snprintf(name, PROXY_MAXFILE, "%s/%s/%d/####", dir, - seq->strip->stripdata->name, - render_size); - } else { - frameno = (int) give_stripelem_index(seq, cfra) - + seq->anim_startofs; - - snprintf(name, PROXY_MAXFILE, "%s/proxy_misc/%d/####", dir, - render_size); + seq->strip->stripdata->name, preview_render_size); + break; + default: + frameno = (int) give_stripelem_index(seq, cfra) + seq->anim_startofs; + snprintf(name, PROXY_MAXFILE, "%s/proxy_misc/%d/####", dir, preview_render_size); } BLI_path_abs(name, G.main->name); BLI_path_frame(name, frameno, 0); - strcat(name, ".jpg"); return TRUE; } -static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, int render_size) +static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, int preview_render_size) { char name[PROXY_MAXFILE]; @@ -1087,29 +1083,27 @@ static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, in } /* rendering at 100% ? No real sense in proxy-ing, right? */ - if (render_size == 100) { + if (preview_render_size == 100) { return 0; } if (seq->flag & SEQ_USE_PROXY_CUSTOM_FILE) { - int frameno = (int) give_stripelem_index(seq, cfra) - + seq->anim_startofs; - if (!seq->strip->proxy->anim) { - if (!seq_proxy_get_fname( - scene, seq, cfra, name, render_size)) { + int frameno = (int) give_stripelem_index(seq, cfra) + seq->anim_startofs; + if (seq->strip->proxy->anim == NULL) { + if (seq_proxy_get_fname(scene, seq, cfra, name, preview_render_size)==0) { return 0; } seq->strip->proxy->anim = openanim(name, IB_rect); } - if (!seq->strip->proxy->anim) { + if (seq->strip->proxy->anim==NULL) { return 0; } return IMB_anim_absolute(seq->strip->proxy->anim, frameno); } - if (!seq_proxy_get_fname(scene, seq, cfra, name, render_size)) { + if (seq_proxy_get_fname(scene, seq, cfra, name, preview_render_size)==0) { return 0; } @@ -1122,9 +1116,9 @@ static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, in #if 0 static void do_build_seq_ibuf(Scene *scene, Sequence * seq, TStripElem *se, int cfra, - int build_proxy_run, int render_size); + int build_proxy_run, int preview_render_size); -static void seq_proxy_build_frame(Scene *scene, Sequence * seq, int cfra, int render_size, int seqrectx, int seqrecty) +static void seq_proxy_build_frame(Scene *scene, Sequence * seq, int cfra, int preview_render_size, int seqrectx, int seqrecty) { char name[PROXY_MAXFILE]; int quality; @@ -1138,7 +1132,7 @@ static void seq_proxy_build_frame(Scene *scene, Sequence * seq, int cfra, int re } /* rendering at 100% ? No real sense in proxy-ing, right? */ - if (render_size == 100) { + if (preview_render_size == 100) { return; } @@ -1147,7 +1141,7 @@ static void seq_proxy_build_frame(Scene *scene, Sequence * seq, int cfra, int re return; } - if (!seq_proxy_get_fname(scene, seq, cfra, name, render_size)) { + if (!seq_proxy_get_fname(scene, seq, cfra, name, preview_render_size)) { return; } @@ -1161,15 +1155,15 @@ static void seq_proxy_build_frame(Scene *scene, Sequence * seq, int cfra, int re se->ibuf = 0; } - do_build_seq_ibuf(scene, seq, se, cfra, TRUE, render_size, + do_build_seq_ibuf(scene, seq, se, cfra, TRUE, preview_render_size, seqrectx, seqrecty); if (!se->ibuf) { return; } - rectx= (render_size*scene->r.xsch)/100; - recty= (render_size*scene->r.ysch)/100; + rectx= (preview_render_size*scene->r.xsch)/100; + recty= (preview_render_size*scene->r.ysch)/100; ibuf = se->ibuf; @@ -1378,8 +1372,7 @@ static void color_balance_byte_float(Sequence * seq, ImBuf* ibuf, float mul) cb = calc_cb(seq->strip->color_balance); for (c = 0; c < 3; c++) { - make_cb_table_float(cb.lift[c], cb.gain[c], cb.gamma[c], - cb_tab[c], mul); + make_cb_table_float(cb.lift[c], cb.gain[c], cb.gamma[c], cb_tab[c], mul); } for (i = 0; i < 256; i++) { @@ -1446,13 +1439,8 @@ int input_have_to_preprocess( { float mul; - if ((seq->flag & SEQ_FILTERY) || - (seq->flag & SEQ_USE_CROP) || - (seq->flag & SEQ_USE_TRANSFORM) || - (seq->flag & SEQ_FLIPX) || - (seq->flag & SEQ_FLIPY) || - (seq->flag & SEQ_USE_COLOR_BALANCE) || - (seq->flag & SEQ_MAKE_PREMUL)) { + if (seq->flag & (SEQ_FILTERY|SEQ_USE_CROP|SEQ_USE_TRANSFORM|SEQ_FLIPX| + SEQ_FLIPY|SEQ_USE_COLOR_BALANCE|SEQ_MAKE_PREMUL)) { return TRUE; } @@ -1474,8 +1462,7 @@ int input_have_to_preprocess( } static ImBuf * input_preprocess( - Scene *scene, Sequence *seq, float UNUSED(cfra), int seqrectx, int seqrecty, - ImBuf * ibuf) + Scene *scene, Sequence *seq, float UNUSED(cfra), int seqrectx, int seqrecty, ImBuf * ibuf) { float mul; @@ -1486,14 +1473,11 @@ static ImBuf * input_preprocess( IMB_filtery(ibuf); } - if(seq->flag & SEQ_USE_CROP || seq->flag & SEQ_USE_TRANSFORM) { - StripCrop c; - StripTransform t; + if(seq->flag & (SEQ_USE_CROP|SEQ_USE_TRANSFORM)) { + StripCrop c= {0}; + StripTransform t= {0}; int sx,sy,dx,dy; - memset(&c, 0, sizeof(StripCrop)); - memset(&t, 0, sizeof(StripTransform)); - if(seq->flag & SEQ_USE_CROP && seq->strip->crop) { c = *seq->strip->crop; } @@ -1511,23 +1495,13 @@ static ImBuf * input_preprocess( dy = scene->r.ysch; } - if (c.top + c.bottom >= ibuf->y || - c.left + c.right >= ibuf->x || - t.xofs >= dx || t.yofs >= dy) { + if (c.top + c.bottom >= ibuf->y || c.left + c.right >= ibuf->x || + t.xofs >= dx || t.yofs >= dy) { make_black_ibuf(ibuf); } else { - ImBuf * i; + ImBuf * i = IMB_allocImBuf(dx, dy,32, ibuf->rect_float ? IB_rectfloat : IB_rect); - if (ibuf->rect_float) { - i = IMB_allocImBuf(dx, dy,32, IB_rectfloat); - } else { - i = IMB_allocImBuf(dx, dy,32, IB_rect); - } - - IMB_rectcpy(i, ibuf, - t.xofs, t.yofs, - c.left, c.bottom, - sx, sy); + IMB_rectcpy(i, ibuf, t.xofs, t.yofs, c.left, c.bottom, sx, sy); IMB_freeImBuf(ibuf); @@ -1602,11 +1576,9 @@ static ImBuf * input_preprocess( if(ibuf->x != seqrectx || ibuf->y != seqrecty ) { if(scene->r.mode & R_OSA) { - IMB_scaleImBuf(ibuf, - (short)seqrectx, (short)seqrecty); + IMB_scaleImBuf(ibuf, (short)seqrectx, (short)seqrecty); } else { - IMB_scalefastImBuf(ibuf, - (short)seqrectx, (short)seqrecty); + IMB_scalefastImBuf(ibuf, (short)seqrectx, (short)seqrecty); } } return ibuf; @@ -1656,42 +1628,42 @@ static void copy_to_ibuf_still(Sequence * seq, float nr, strip rendering functions ********************************************************************** */ -static ImBuf* seq_render_strip_stack( - Main *bmain, Scene *scene, - ListBase *seqbasep, float cfra, int chanshown, int render_size, - int seqrectx, int seqrecty); +static ImBuf* seq_render_strip_stack( Main *bmain, Scene *scene, ListBase *seqbasep, + float cfra, int chanshown, int preview_render_size, int seqrectx, int seqrecty); static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float cfra, - int render_size, - int seqrectx, int seqrecty); + int preview_render_size, int seqrectx, int seqrecty); -static ImBuf* seq_render_effect_strip_impl( - Main *bmain, Scene *scene, float cfra, Sequence *seq, int render_size, - int seqrectx, int seqrecty) +static ImBuf* seq_render_effect_strip_impl(Main *bmain, Scene *scene, float cfra, + Sequence *seq, int preview_render_size, int seqrectx, int seqrecty) { float fac, facf; int early_out; int i; - int must_preprocess = FALSE; - struct SeqEffectHandle sh = get_sequence_effect(seq); FCurve *fcu= NULL; ImBuf * ibuf[3]; - ImBuf * out = 0; + Sequence *input[3]; + ImBuf * out = NULL; - ibuf[0] = ibuf[1] = ibuf[2] = 0; + ibuf[0] = ibuf[1] = ibuf[2] = NULL; + + input[0] = seq->seq1; input[1] = seq->seq2; input[2] = seq->seq3; if (!sh.execute) { /* effect not supported in this version... */ - goto finish; + out = IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect); + return out; } - if ((seq->flag & SEQ_USE_EFFECT_DEFAULT_FADE) != 0) { + if (seq->flag & SEQ_USE_EFFECT_DEFAULT_FADE) { sh.get_default_fac(seq, cfra, &fac, &facf); - if( scene->r.mode & R_FIELDS ); else facf= fac; - } else { - fcu = id_data_find_fcurve(&scene->id, seq, &RNA_Sequence, - "effect_fader", 0); + + if ((scene->r.mode & R_FIELDS)==0) + facf= fac; + } + else { + fcu = id_data_find_fcurve(&scene->id, seq, &RNA_Sequence, "effect_fader", 0); if (fcu) { fac = facf = evaluate_fcurve(fcu, cfra); if( scene->r.mode & R_FIELDS ) { @@ -1704,88 +1676,58 @@ static ImBuf* seq_render_effect_strip_impl( early_out = sh.early_out(seq, fac, facf); - if (early_out == -1) { /* no input needed */ - out = sh.execute(bmain, scene, seq, cfra, fac, facf, - seqrectx, seqrecty, render_size, - 0, 0, 0); - goto finish; - } - - - must_preprocess = input_have_to_preprocess( - scene, seq, cfra, seqrectx, seqrecty); - switch (early_out) { - case 0: + case EARLY_NO_INPUT: + out = sh.execute(bmain, scene, seq, cfra, fac, facf, + seqrectx, seqrecty, preview_render_size, NULL, NULL, NULL); + case EARLY_DO_EFFECT: + for(i=0; i<3; i++) { + if(input[i]) + ibuf[i] = seq_render_strip(bmain, scene, input[i], cfra, + preview_render_size, seqrectx, seqrecty); + } + + if (ibuf[0] && ibuf[1]) { + out = sh.execute(bmain, scene, seq, cfra, fac, facf, seqrectx, seqrecty, + preview_render_size, ibuf[0], ibuf[1], ibuf[2]); + } break; - case 1: - if (seq->seq1) { - ibuf[0] = seq_render_strip(bmain, scene, seq->seq1, cfra, - render_size, - seqrectx, seqrecty); + case EARLY_USE_INPUT_1: + if (input[0]) { + ibuf[0] = seq_render_strip(bmain, scene, input[0], cfra, + preview_render_size, seqrectx, seqrecty); } if (ibuf[0]) { - if (must_preprocess) { + if (input_have_to_preprocess(scene, seq, cfra, seqrectx, seqrecty)) { out = IMB_dupImBuf(ibuf[0]); } else { out = ibuf[0]; IMB_refImBuf(out); } } - goto finish; - case 2: - if (seq->seq2) { - ibuf[1] = seq_render_strip(bmain, scene, seq->seq2, cfra, - render_size, - seqrectx, seqrecty); + break; + case EARLY_USE_INPUT_2: + if (input[1]) { + ibuf[1] = seq_render_strip(bmain, scene, input[1], cfra, + preview_render_size, seqrectx, seqrecty); } if (ibuf[1]) { - if (must_preprocess) { + if (input_have_to_preprocess(scene, seq, cfra, seqrectx, seqrecty)) { out = IMB_dupImBuf(ibuf[1]); } else { out = ibuf[1]; IMB_refImBuf(out); } } - goto finish; - default: - goto finish; + break; } - if (seq->seq1) { - ibuf[0] = seq_render_strip(bmain, scene, seq->seq1, cfra, - render_size, - seqrectx, seqrecty); - } - - if (seq->seq2) { - ibuf[1] = seq_render_strip(bmain, scene, seq->seq2, cfra, - render_size, - seqrectx, seqrecty); - } - - if (seq->seq3) { - ibuf[2] = seq_render_strip(bmain, scene, seq->seq3, cfra, - render_size, - seqrectx, seqrecty); - } - - if (!ibuf[0] || !ibuf[1]) { - goto finish; - } - - out = sh.execute(bmain, scene, seq, cfra, fac, facf, seqrectx, seqrecty, - render_size, - ibuf[0], ibuf[1], ibuf[2]); - -finish: for (i = 0; i < 3; i++) { IMB_freeImBuf(ibuf[i]); } - if (!out) { - out = IMB_allocImBuf( - (short)seqrectx, (short)seqrecty, 32, IB_rect); + if (out == NULL) { + out = IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect); } return out; @@ -1929,185 +1871,143 @@ static ImBuf * seq_render_scene_strip_impl( } static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float cfra, - int render_size, - int seqrectx, int seqrecty) + int preview_render_size, int seqrectx, int seqrecty) { + ImBuf * ibuf = NULL; char name[FILE_MAXDIR+FILE_MAXFILE]; - int use_preprocess = input_have_to_preprocess( - scene, seq, cfra, seqrectx, seqrecty); - ImBuf * ibuf = seq_stripelem_cache_get( - seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF); + int use_preprocess = input_have_to_preprocess(scene, seq, cfra, seqrectx, seqrecty); float nr = give_stripelem_index(seq, cfra); + /* all effects are handled similarly with the exception of speed effect */ + int type = (seq->type & SEQ_EFFECT && seq->type != SEQ_SPEED) ? SEQ_EFFECT : seq->type; + ibuf = seq_stripelem_cache_get(seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF); + + if (ibuf == NULL) + ibuf = copy_from_ibuf_still(seq,nr,seqrectx,seqrecty); + /* currently, we cache preprocessed images */ - if (ibuf) { + if (ibuf) use_preprocess = FALSE; - } - if(seq->type == SEQ_META) { - ImBuf * meta_ibuf = 0; + if (ibuf == NULL) + ibuf = seq_proxy_fetch(scene, seq, cfra, preview_render_size); - if (ibuf == 0) { - ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); - } + if(ibuf == NULL) switch(type) { + case SEQ_META: + { + ImBuf * meta_ibuf = NULL; - if(!ibuf && seq->seqbase.first) { - meta_ibuf = seq_render_strip_stack( - bmain, scene, - &seq->seqbase, seq->start + nr, 0, - render_size, seqrectx, seqrecty); - } + if(seq->seqbase.first) + meta_ibuf = seq_render_strip_stack(bmain, scene, &seq->seqbase, + seq->start + nr, 0, preview_render_size, seqrectx, seqrecty); - if(!ibuf && meta_ibuf) { - ibuf = meta_ibuf; - if(ibuf && use_preprocess) { - struct ImBuf * i = IMB_dupImBuf(ibuf); + if(meta_ibuf) { + ibuf = meta_ibuf; + if(ibuf && use_preprocess) { + struct ImBuf * i = IMB_dupImBuf(ibuf); - IMB_freeImBuf(ibuf); + IMB_freeImBuf(ibuf); - ibuf = i; + ibuf = i; + } } + break; } - } else if(seq->type == SEQ_SPEED) { - ImBuf * child_ibuf = 0; + case SEQ_SPEED: + { + ImBuf * child_ibuf = NULL; - if (ibuf == 0) { - ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); - } - - if (ibuf == 0) { float f_cfra; - SpeedControlVars * s - = (SpeedControlVars *)seq->effectdata; + SpeedControlVars * s = (SpeedControlVars *)seq->effectdata; sequence_effect_speed_rebuild_map(scene, seq, 0); /* weeek! */ f_cfra = seq->start + s->frameMap[(int) nr]; - child_ibuf = seq_render_strip(bmain, scene, seq->seq1, f_cfra, - render_size, - seqrectx, seqrecty); - } + child_ibuf = seq_render_strip(bmain, scene, seq->seq1, f_cfra, preview_render_size, + seqrectx, seqrecty); - if (!ibuf && child_ibuf) { - ibuf = child_ibuf; - if(ibuf && use_preprocess) { - struct ImBuf * i = IMB_dupImBuf(ibuf); + if (child_ibuf) { + ibuf = child_ibuf; + if(ibuf && use_preprocess) { + struct ImBuf * i = IMB_dupImBuf(ibuf); - IMB_freeImBuf(ibuf); + IMB_freeImBuf(ibuf); - ibuf = i; + ibuf = i; + } } + break; } - } else if(seq->type & SEQ_EFFECT) { - /* should the effect be recalculated? */ - - if (ibuf == 0) { - ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); + case SEQ_EFFECT: + { + ibuf = seq_render_effect_strip_impl(bmain, scene, cfra, seq, preview_render_size, + seqrectx, seqrecty); + break; } + case SEQ_IMAGE: + { + StripElem * s_elem = give_stripelem(seq, cfra); - if(ibuf == 0) { - ibuf = seq_render_effect_strip_impl( - bmain, scene, cfra, seq, render_size, - seqrectx, seqrecty); + if (s_elem) { + BLI_join_dirfile(name, seq->strip->dir, s_elem->name); + BLI_path_abs(name, G.main->name); + } + + if (s_elem && (ibuf = IMB_loadiffname(name, IB_rect))) { + /* we don't need both (speed reasons)! */ + if (ibuf->rect_float && ibuf->rect) + imb_freerectImBuf(ibuf); + + /* all sequencer color is done in SRGB space, linear gives odd crossfades */ + if(ibuf->profile == IB_PROFILE_LINEAR_RGB) + IMB_convert_profile(ibuf, IB_PROFILE_NONE); + + copy_to_ibuf_still(seq, nr, ibuf); + } + break; } - } else if(seq->type == SEQ_IMAGE) { - StripElem * s_elem = give_stripelem(seq, cfra); - - if(ibuf == 0 && s_elem) { - BLI_join_dirfile(name, seq->strip->dir, s_elem->name); - BLI_path_abs(name, G.main->name); - - ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); - } - - if (ibuf == 0) { - ibuf = copy_from_ibuf_still(seq,nr,seqrectx,seqrecty); - } - - if (ibuf == 0 && s_elem && - (ibuf = IMB_loadiffname(name, IB_rect))) { - /* we don't need both (speed reasons)! */ - if (ibuf->rect_float && ibuf->rect) - imb_freerectImBuf(ibuf); - - /* all sequencer color is done in SRGB space, linear gives odd crossfades */ - if(ibuf->profile == IB_PROFILE_LINEAR_RGB) - IMB_convert_profile(ibuf, IB_PROFILE_NONE); - - copy_to_ibuf_still(seq, nr, ibuf); - } - } else if(seq->type == SEQ_MOVIE) { - if(ibuf == 0) { - ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); - - } - - if (ibuf == 0) { - ibuf = copy_from_ibuf_still(seq, nr,seqrectx,seqrecty); - } - - if (ibuf == 0) { + case SEQ_MOVIE: + { if(seq->anim==0) { - BLI_join_dirfile(name, - seq->strip->dir, - seq->strip->stripdata->name); + BLI_join_dirfile(name, seq->strip->dir, seq->strip->stripdata->name); BLI_path_abs(name, G.main->name); - seq->anim = openanim( - name, IB_rect | - ((seq->flag & SEQ_FILTERY) - ? IB_animdeinterlace : 0)); + seq->anim = openanim(name, IB_rect | + ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0)); } + if(seq->anim) { - IMB_anim_set_preseek(seq->anim, - seq->anim_preseek); - ibuf = IMB_anim_absolute(seq->anim, - nr - + seq->anim_startofs); + IMB_anim_set_preseek(seq->anim, seq->anim_preseek); + ibuf = IMB_anim_absolute(seq->anim, nr + seq->anim_startofs); /* we don't need both (speed reasons)! */ - if (ibuf && ibuf->rect_float - && ibuf->rect) { + if (ibuf && ibuf->rect_float && ibuf->rect) imb_freerectImBuf(ibuf); - } } copy_to_ibuf_still(seq, nr, ibuf); + break; } - - } else if(seq->type == SEQ_SCENE) { // scene can be NULL after deletions - if (ibuf == 0) { - ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); - } - if (ibuf == 0) { - ibuf = copy_from_ibuf_still(seq, nr,seqrectx,seqrecty); - } - - if (ibuf == 0) { - ibuf = seq_render_scene_strip_impl(bmain, scene, seq, nr, - seqrectx, seqrecty); + case SEQ_SCENE: + { // scene can be NULL after deletions + ibuf = seq_render_scene_strip_impl(bmain, scene, seq, nr, seqrectx, seqrecty); copy_to_ibuf_still(seq, nr, ibuf); + break; } } - if (!ibuf) { - ibuf = IMB_allocImBuf( - (short)seqrectx, (short)seqrecty, 32, IB_rect); - } + if (ibuf == NULL) + ibuf = IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect); - if (ibuf->x != seqrectx || ibuf->y != seqrecty) { + if (ibuf->x != seqrectx || ibuf->y != seqrecty) use_preprocess = TRUE; - } - if (use_preprocess) { - ibuf = input_preprocess(scene, seq, cfra, seqrectx, - seqrecty, ibuf); - } + if (use_preprocess) + ibuf = input_preprocess(scene, seq, cfra, seqrectx, seqrecty, ibuf); - seq_stripelem_cache_put( - seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF, ibuf); + seq_stripelem_cache_put(seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF, ibuf); return ibuf; } @@ -2123,9 +2023,7 @@ static int seq_must_swap_input_in_blend_mode(Sequence * seq) /* bad hack, to fix crazy input ordering of those two effects */ - if (seq->blend_mode == SEQ_ALPHAOVER || - seq->blend_mode == SEQ_ALPHAUNDER || - seq->blend_mode == SEQ_OVERDROP) { + if (ELEM3(seq->blend_mode, SEQ_ALPHAOVER, SEQ_ALPHAUNDER, SEQ_OVERDROP)) { swap_input = TRUE; } @@ -2138,15 +2036,15 @@ static int seq_get_early_out_for_blend_mode(Sequence * seq) float facf = seq->blend_opacity / 100.0; int early_out = sh.early_out(seq, facf, facf); - if (early_out < 1) { + if (ELEM(early_out, EARLY_DO_EFFECT, EARLY_NO_INPUT)) { return early_out; } if (seq_must_swap_input_in_blend_mode(seq)) { - if (early_out == 2) { - return 1; - } else if (early_out == 1) { - return 2; + if (early_out == EARLY_USE_INPUT_2) { + return EARLY_USE_INPUT_1; + } else if (early_out == EARLY_USE_INPUT_1) { + return EARLY_USE_INPUT_2; } } return early_out; @@ -2154,18 +2052,17 @@ static int seq_get_early_out_for_blend_mode(Sequence * seq) static ImBuf* seq_render_strip_stack( Main *bmain, Scene *scene, ListBase *seqbasep, float cfra, int chanshown, - int render_size, int seqrectx, int seqrecty) + int preview_render_size, int seqrectx, int seqrecty) { Sequence* seq_arr[MAXSEQ+1]; int count; int i; - ImBuf* out = 0; + ImBuf* out = NULL; - count = get_shown_sequences(seqbasep, cfra, chanshown, - (Sequence **)&seq_arr); + count = get_shown_sequences(seqbasep, cfra, chanshown, (Sequence **)&seq_arr); - if (!count) { - return 0; + if (count == 0) { + return NULL; } #if 0 /* commentind since this breaks keyframing, since it resets the value on draw */ @@ -2176,22 +2073,15 @@ static ImBuf* seq_render_strip_stack( } #endif - out = seq_stripelem_cache_get( - seq_arr[count - 1], - seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP); + out = seq_stripelem_cache_get(seq_arr[count - 1], seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP); if (out) { return out; } if(count == 1) { - out = seq_render_strip(bmain, scene, seq_arr[0], - cfra, render_size, - seqrectx, seqrecty); - seq_stripelem_cache_put( - seq_arr[0], - seqrectx, seqrecty, cfra, - SEQ_STRIPELEM_IBUF_COMP, out); + out = seq_render_strip(bmain, scene, seq_arr[0], cfra, preview_render_size, seqrectx, seqrecty); + seq_stripelem_cache_put(seq_arr[0], seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP, out); return out; } @@ -2199,43 +2089,33 @@ static ImBuf* seq_render_strip_stack( for (i = count - 1; i >= 0; i--) { int early_out; - Sequence * seq = seq_arr[i]; + Sequence *seq = seq_arr[i]; - out = seq_stripelem_cache_get( - seq, - seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP); + out = seq_stripelem_cache_get(seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP); if (out) { break; } if (seq->blend_mode == SEQ_BLEND_REPLACE) { - out = seq_render_strip(bmain, scene, seq, cfra, - render_size, - seqrectx, seqrecty); + out = seq_render_strip(bmain, scene, seq, cfra, preview_render_size, seqrectx, seqrecty); break; } early_out = seq_get_early_out_for_blend_mode(seq); switch (early_out) { - case -1: - case 2: - out = seq_render_strip(bmain, scene, seq, cfra, - render_size, - seqrectx, seqrecty); + case EARLY_NO_INPUT: + case EARLY_USE_INPUT_2: + out = seq_render_strip(bmain, scene, seq, cfra, preview_render_size, seqrectx, seqrecty); break; - case 1: + case EARLY_USE_INPUT_1: if (i == 0) { - out = IMB_allocImBuf( - (short)seqrectx, (short)seqrecty, - 32, IB_rect); + out = IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect); } break; - case 0: + case EARLY_DO_EFFECT: if (i == 0) { - out = seq_render_strip(bmain, scene, seq, cfra, - render_size, - seqrectx, seqrecty); + out = seq_render_strip(bmain, scene, seq, cfra, preview_render_size, seqrectx, seqrecty); } break; @@ -2245,9 +2125,7 @@ static ImBuf* seq_render_strip_stack( } } - seq_stripelem_cache_put( - seq_arr[i], seqrectx, seqrecty, cfra, - SEQ_STRIPELEM_IBUF_COMP, out); + seq_stripelem_cache_put(seq_arr[i], seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP, out); i++; @@ -2255,37 +2133,32 @@ static ImBuf* seq_render_strip_stack( for (; i < count; i++) { Sequence * seq = seq_arr[i]; - if (seq_get_early_out_for_blend_mode(seq) == 0) { + if (seq_get_early_out_for_blend_mode(seq) == EARLY_DO_EFFECT) { struct SeqEffectHandle sh = get_sequence_blend(seq); ImBuf * ibuf1 = out; - ImBuf * ibuf2 = seq_render_strip(bmain, scene, seq, cfra, - render_size, - seqrectx, seqrecty); + ImBuf * ibuf2 = seq_render_strip(bmain, scene, seq, cfra, preview_render_size, + seqrectx, seqrecty); float facf = seq->blend_opacity / 100.0; - int swap_input - = seq_must_swap_input_in_blend_mode(seq); + int swap_input = seq_must_swap_input_in_blend_mode(seq); int x= seqrectx; int y= seqrecty; if (swap_input) { - out = sh.execute(bmain, scene, seq, cfra, - facf, facf, x, y, render_size, - ibuf2, ibuf1, 0); + out = sh.execute(bmain, scene, seq, cfra, facf, facf, x, y, + preview_render_size, ibuf2, ibuf1, 0); } else { - out = sh.execute(bmain, scene, seq, cfra, - facf, facf, x, y, render_size, - ibuf1, ibuf2, 0); + out = sh.execute(bmain, scene, seq, cfra, facf, facf, x, y, + preview_render_size, ibuf1, ibuf2, 0); } IMB_freeImBuf(ibuf1); IMB_freeImBuf(ibuf2); } - seq_stripelem_cache_put( - seq_arr[i], seqrectx, seqrecty, cfra, - SEQ_STRIPELEM_IBUF_COMP, out); + seq_stripelem_cache_put(seq_arr[i], seqrectx, seqrecty, cfra, + SEQ_STRIPELEM_IBUF_COMP, out); } return out; @@ -2296,7 +2169,7 @@ static ImBuf* seq_render_strip_stack( * you have to free after usage! */ -ImBuf *give_ibuf_seq(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size) +ImBuf *give_ibuf_seq(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size) { Editing *ed= seq_give_editing(scene, FALSE); int count; @@ -2312,19 +2185,19 @@ ImBuf *give_ibuf_seq(Main *bmain, Scene *scene, int rectx, int recty, int cfra, seqbasep= ed->seqbasep; } - return seq_render_strip_stack( - bmain, scene, seqbasep, cfra, chanshown, render_size, rectx, recty); + return seq_render_strip_stack(bmain, scene, seqbasep, cfra, chanshown, + preview_render_size, rectx, recty); } -ImBuf *give_ibuf_seqbase(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size, ListBase *seqbasep) +ImBuf *give_ibuf_seqbase(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size, ListBase *seqbasep) { - return seq_render_strip_stack(bmain, scene, seqbasep, cfra, chanshown, render_size, rectx, recty); + return seq_render_strip_stack(bmain, scene, seqbasep, cfra, chanshown, preview_render_size, rectx, recty); } -ImBuf *give_ibuf_seq_direct(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int render_size, Sequence *seq) +ImBuf *give_ibuf_seq_direct(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int preview_render_size, Sequence *seq) { - return seq_render_strip(bmain, scene, seq, cfra, render_size, rectx, recty); + return seq_render_strip(bmain, scene, seq, cfra, preview_render_size, rectx, recty); } #if 0 @@ -2376,7 +2249,7 @@ typedef struct PrefetchQueueElem { int recty; int cfra; int chanshown; - int render_size; + int preview_render_size; int monoton_cfra; @@ -2424,7 +2297,7 @@ static void *seq_prefetch_thread(void * This_) if (e->cfra >= s_last) { e->ibuf = give_ibuf_seq_impl(This->scene, e->rectx, e->recty, e->cfra, e->chanshown, - e->render_size); + e->preview_render_size); } pthread_mutex_lock(&queue_lock); @@ -2534,8 +2407,7 @@ static void seq_stop_threads() } #endif -void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, - int render_size) +void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, int preview_render_size) { PrefetchQueueElem *e; if (seq_thread_shutdown) { @@ -2547,7 +2419,7 @@ void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, e->recty = recty; e->cfra = cfra; e->chanshown = chanshown; - e->render_size = render_size; + e->preview_render_size = preview_render_size; e->monoton_cfra = monoton_cfra++; pthread_mutex_lock(&queue_lock); @@ -2590,13 +2462,13 @@ static void seq_wait_for_prefetch_ready() } #endif -ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size) +ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size) { PrefetchQueueElem *e = NULL; int found_something = FALSE; if (seq_thread_shutdown) { - return give_ibuf_seq(bmain, scene, rectx, recty, cfra, chanshown, render_size); + return give_ibuf_seq(bmain, scene, rectx, recty, cfra, chanshown, preview_render_size); } while (!e) { @@ -2608,7 +2480,7 @@ ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, i chanshown == e->chanshown && rectx == e->rectx && recty == e->recty && - render_size == e->render_size) { + preview_render_size == e->preview_render_size) { success = TRUE; found_something = TRUE; break; @@ -2621,7 +2493,7 @@ ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, i chanshown == e->chanshown && rectx == e->rectx && recty == e->recty && - render_size == e->render_size) { + preview_render_size == e->preview_render_size) { found_something = TRUE; break; } @@ -2638,7 +2510,7 @@ ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, i chanshown == tslot->current->chanshown && rectx == tslot->current->rectx && recty == tslot->current->recty && - render_size== tslot->current->render_size){ + preview_render_size== tslot->current->preview_render_size){ found_something = TRUE; break; } @@ -2721,8 +2593,7 @@ void free_imbuf_seq(Scene *scene, ListBase * seqbase, int check_mem_usage, } } if(seq->type==SEQ_META) { - free_imbuf_seq(scene, &seq->seqbase, FALSE, - keep_file_handles); + free_imbuf_seq(scene, &seq->seqbase, FALSE, keep_file_handles); } if(seq->type==SEQ_SCENE) { /* FIXME: recurs downwards, @@ -2846,11 +2717,7 @@ void seq_tx_set_final_right(Sequence *seq, int val) since they work a bit differently to normal image seq's (during transform) */ int seq_single_check(Sequence *seq) { - if ( seq->len==1 && (seq->type == SEQ_IMAGE || seq->type == SEQ_COLOR - || seq->type == SEQ_MULTICAM)) - return 1; - else - return 0; + return (seq->len==1 && ELEM3(seq->type, SEQ_IMAGE, SEQ_COLOR, SEQ_MULTICAM)); } /* check if the selected seq's reference unselected seq's */ @@ -2872,17 +2739,20 @@ int seqbase_isolated_sel_check(ListBase *seqbase) /* test relationships */ for(seq= seqbase->first; seq; seq= seq->next) { + if((seq->type & SEQ_EFFECT)==0) + continue; + if(seq->flag & SELECT) { - if(seq->type & SEQ_EFFECT) { - if(seq->seq1 && (seq->seq1->flag & SELECT)==0) return FALSE; - if(seq->seq2 && (seq->seq2->flag & SELECT)==0) return FALSE; - if(seq->seq3 && (seq->seq3->flag & SELECT)==0) return FALSE; - } + if( (seq->seq1 && (seq->seq1->flag & SELECT)==0) || + (seq->seq2 && (seq->seq2->flag & SELECT)==0) || + (seq->seq3 && (seq->seq3->flag & SELECT)==0) ) + return FALSE; } - else if(seq->type & SEQ_EFFECT) { - if(seq->seq1 && (seq->seq1->flag & SELECT)) return FALSE; - if(seq->seq2 && (seq->seq2->flag & SELECT)) return FALSE; - if(seq->seq3 && (seq->seq3->flag & SELECT)) return FALSE; + else { + if( (seq->seq1 && (seq->seq1->flag & SELECT)) || + (seq->seq2 && (seq->seq2->flag & SELECT)) || + (seq->seq3 && (seq->seq3->flag & SELECT)) ) + return FALSE; } } @@ -2959,12 +2829,8 @@ int seq_tx_test(Sequence * seq) static int seq_overlap(Sequence *seq1, Sequence *seq2) { - if(seq1 != seq2) - if(seq1->machine==seq2->machine) - if(((seq1->enddisp <= seq2->startdisp) || (seq1->startdisp >= seq2->enddisp))==0) - return 1; - - return 0; + return (seq1 != seq2 && seq1->machine == seq2->machine && + ((seq1->enddisp <= seq2->startdisp) || (seq1->startdisp >= seq2->enddisp))==0); } int seq_test_overlap(ListBase * seqbasep, Sequence *test) @@ -2982,7 +2848,7 @@ int seq_test_overlap(ListBase * seqbasep, Sequence *test) } -static void seq_translate(Scene *evil_scene, Sequence *seq, int delta) +void seq_translate(Scene *evil_scene, Sequence *seq, int delta) { seq_offset_animdata(evil_scene, seq, delta); seq->start += delta; @@ -3131,7 +2997,7 @@ static void seq_update_muting_recursive(Scene *scene, ListBase *seqbasep, Sequen seq_update_muting_recursive(scene, &seq->seqbase, metaseq, seqmute); } - else if((seq->type == SEQ_SOUND) || (seq->type == SEQ_SCENE)) { + else if(ELEM(seq->type, SEQ_SOUND, SEQ_SCENE)) { if(seq->scene_sound) { sound_mute_scene_sound(scene, seq->scene_sound, seqmute); } diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c index f64854f90de..936fb1bfeab 100644 --- a/source/blender/blenkernel/intern/shrinkwrap.c +++ b/source/blender/blenkernel/intern/shrinkwrap.c @@ -49,14 +49,9 @@ #include "BKE_subsurf.h" #include "BLI_math.h" -#include "BLI_editVert.h" - /* Util macros */ -#define TO_STR(a) #a -#define JOIN(a,b) a##b - #define OUT_OF_MEMORY() ((void)printf("Shrinkwrap: Out of memory\n")) /* Benchmark macros */ @@ -90,7 +85,7 @@ typedef void ( *Shrinkwrap_ForeachVertexCallback) (DerivedMesh *target, float *c DerivedMesh *object_get_derived_final(struct Scene *scene, Object *ob, CustomDataMask dataMask) { Mesh *me= ob->data; - EditMesh *em = BKE_mesh_get_editmesh(me); + struct EditMesh *em = BKE_mesh_get_editmesh(me); if (em) { @@ -391,8 +386,8 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc, struct S //Project over negative direction of axis if(use_normal & MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR) { - float inv_no[3] = { -tmp_no[0], -tmp_no[1], -tmp_no[2] }; - + float inv_no[3]; + negate_v3_v3(inv_no, tmp_no); if(auxData.tree) normal_projection_project_vertex(0, tmp_co, inv_no, &local2aux, auxData.tree, &hit, auxData.raycast_callback, &auxData); @@ -559,8 +554,7 @@ void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Scene *scene, Object //Using vertexs positions/normals as if a subsurface was applied if(smd->subsurfLevels) { - SubsurfModifierData ssmd; - memset(&ssmd, 0, sizeof(ssmd)); + SubsurfModifierData ssmd= {{0}}; ssmd.subdivType = ME_CC_SUBSURF; //catmull clark ssmd.levels = smd->subsurfLevels; //levels diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c index a7e664bf2bf..aafa2d9870c 100644 --- a/source/blender/blenkernel/intern/smoke.c +++ b/source/blender/blenkernel/intern/smoke.c @@ -629,9 +629,6 @@ void smokeModifier_reset(struct SmokeModifierData *smd) smd->domain->fluid = NULL; } - smd->domain->point_cache[0]->flag |= PTCACHE_OUTDATED; - smd->domain->point_cache[1]->flag |= PTCACHE_OUTDATED; - smokeModifier_reset_turbulence(smd); smd->time = -1; @@ -1412,6 +1409,10 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM /* if on second frame, write cache for first frame */ /* this needs to be done for smoke too so that pointcache works properly */ if((int)smd->time == startframe && (cache->flag & PTCACHE_OUTDATED || cache->last_exact==0)) { + // create shadows straight after domain initialization so we get nice shadows for startframe, too + if(get_lamp(scene, light)) + smoke_calc_transparency(sds->shadow, smoke_get_density(sds->fluid), sds->p0, sds->p1, sds->res, sds->dx, light, calc_voxel_transp, -7.0*sds->dx); + BKE_ptcache_write_cache(&pid, startframe); if(sds->wt) BKE_ptcache_write_cache(&pid_wt, startframe); @@ -1443,7 +1444,7 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM } } - // create shadows before writing cache so we get nice shadows for startframe, too + // create shadows before writing cache so they get stored if(get_lamp(scene, light)) smoke_calc_transparency(sds->shadow, smoke_get_density(sds->fluid), sds->p0, sds->p1, sds->res, sds->dx, light, calc_voxel_transp, -7.0*sds->dx); diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index 51cee333370..56491b8d692 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -1146,74 +1146,71 @@ static void ccgDM_drawVerts(DerivedMesh *dm) { ccgFaceIterator_free(fi); glEnd(); } - static void ccgDM_drawEdges(DerivedMesh *dm, int drawLooseEdges, int UNUSED(drawAllEdges)) { CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm; CCGSubSurf *ss = ccgdm->ss; - CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss); CCGEdgeIterator *ei = ccgSubSurf_getEdgeIterator(ss); + CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss); + int i, edgeSize = ccgSubSurf_getEdgeSize(ss); int gridSize = ccgSubSurf_getGridSize(ss); - int edgeSize = ccgSubSurf_getEdgeSize(ss); - int step; int useAging; ccgSubSurf_getUseAgeCounts(ss, &useAging, NULL, NULL, NULL); - /* nothing to do */ - if(!drawLooseEdges && !ccgdm->drawInteriorEdges) - return; + for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) { + CCGEdge *e = ccgEdgeIterator_getCurrent(ei); + DMGridData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e); + + if (!drawLooseEdges && !ccgSubSurf_getEdgeNumFaces(e)) + continue; + + if (useAging && !(G.f&G_BACKBUFSEL)) { + int ageCol = 255-ccgSubSurf_getEdgeAge(ss, e)*4; + glColor3ub(0, ageCol>0?ageCol:0, 0); + } + + glBegin(GL_LINE_STRIP); + for (i=0; idrawInteriorEdges) - step = 1; - else - step = gridSize - 1; + if (ccgdm->drawInteriorEdges) { + for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) { + CCGFace *f = ccgFaceIterator_getCurrent(fi); + int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f); - /* draw edges using face grids */ - for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) { - CCGFace *f = ccgFaceIterator_getCurrent(fi); - int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f); + for (S=0; Sss; CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss); GPUVertexAttribs gattribs; - DMVertexAttribs attribs; + DMVertexAttribs attribs= {{{0}}}; MTFace *tf = dm->getFaceDataArray(dm, CD_MTFACE); int gridSize = ccgSubSurf_getGridSize(ss); int gridFaces = gridSize - 1; @@ -1377,8 +1374,6 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, v transp = GPU_get_material_blend_mode(); orig_transp = transp; - memset(&attribs, 0, sizeof(attribs)); - #define PASSATTRIB(dx, dy, vert) { \ if(attribs.totorco) { \ index = getFaceIndex(ss, f, S, x+dx, y+dy, edgeSize, gridSize); \ diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c index cb3c0c08cc0..09910481bf9 100644 --- a/source/blender/blenkernel/intern/text.c +++ b/source/blender/blenkernel/intern/text.c @@ -53,7 +53,7 @@ #include "BKE_text.h" #include "BKE_utildefines.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -167,7 +167,7 @@ void free_text(Text *text) if(text->name) MEM_freeN(text->name); MEM_freeN(text->undo_buf); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (text->compiled) BPY_free_compiled_text(text); #endif } @@ -683,7 +683,7 @@ int txt_get_span (TextLine *from, TextLine *to) static void txt_make_dirty (Text *text) { text->flags |= TXT_ISDIRTY; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (text->compiled) BPY_free_compiled_text(text); #endif } diff --git a/source/blender/blenkernel/intern/unit.c b/source/blender/blenkernel/intern/unit.c index 83ace49eb67..1240b85393b 100644 --- a/source/blender/blenkernel/intern/unit.c +++ b/source/blender/blenkernel/intern/unit.c @@ -334,7 +334,8 @@ static int unit_as_string(char *str, int len_max, double value, int prec, bUnitC /* Convert to a string */ { - char conv_str[6] = {'%', '.', '0'+prec, 'l', 'f', '\0'}; /* "%.2lf" when prec is 2, must be under 10 */ + char conv_str[6] = {'%', '.', '0', 'l', 'f', '\0'}; /* "%.2lf" when prec is 2, must be under 10 */ + conv_str[2] += prec; len= snprintf(str, len_max, conv_str, (float)value_conv); if(len >= len_max) diff --git a/source/blender/blenlib/BLI_blenlib.h b/source/blender/blenlib/BLI_blenlib.h index 3028161734c..8423c07e7c9 100644 --- a/source/blender/blenlib/BLI_blenlib.h +++ b/source/blender/blenlib/BLI_blenlib.h @@ -84,8 +84,6 @@ extern "C" { #include "BLI_rect.h" -#include "BLI_scanfill.h" - #include "BLI_noise.h" /** diff --git a/source/blender/blenlib/BLI_fileops.h b/source/blender/blenlib/BLI_fileops.h index b721a21b1b9..552de7b170c 100644 --- a/source/blender/blenlib/BLI_fileops.h +++ b/source/blender/blenlib/BLI_fileops.h @@ -54,10 +54,6 @@ int BLI_gzip(char *from, char *to); int BLI_delete(char *file, int dir, int recursive); int BLI_move(char *file, char *to); int BLI_touch(const char *file); -char *BLI_last_slash(const char *string); -int BLI_add_slash(char *string); -void BLI_del_slash(char *string); -char *first_slash(char *string); /* only for the sane unix world: direct calls to system functions :( */ #ifndef WIN32 diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h index d25707d480c..2144107a6cd 100644 --- a/source/blender/blenlib/BLI_math_matrix.h +++ b/source/blender/blenlib/BLI_math_matrix.h @@ -102,9 +102,9 @@ void transpose_m3(float R[3][3]); void transpose_m4(float R[4][4]); void normalize_m3(float R[3][3]); -void normalize_m3_m3(float R[3][3], const float A[3][3]); +void normalize_m3_m3(float R[3][3], float A[3][3]); void normalize_m4(float R[4][4]); -void normalize_m4_m4(float R[4][4], const float A[4][4]); +void normalize_m4_m4(float R[4][4], float A[4][4]); void orthogonalize_m3(float R[3][3], int axis); void orthogonalize_m4(float R[4][4], int axis); @@ -144,6 +144,8 @@ void mat4_to_size(float r[3], float M[4][4]); void translate_m4(float mat[4][4], float tx, float ty, float tz); void rotate_m4(float mat[4][4], const char axis, const float angle); +void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], float wmat[][4]); + void loc_eul_size_to_mat4(float R[4][4], const float loc[3], const float eul[3], const float size[3]); void loc_eulO_size_to_mat4(float R[4][4], diff --git a/source/blender/blenlib/BLI_path_util.h b/source/blender/blenlib/BLI_path_util.h index b9a4468fe57..69b10661e23 100644 --- a/source/blender/blenlib/BLI_path_util.h +++ b/source/blender/blenlib/BLI_path_util.h @@ -88,6 +88,14 @@ char *BLI_get_user_folder_notest(int folder_id, char *subfolder); #define BLENDER_SYSTEM_FORMAT "%s/blender/%s" #endif +#ifdef WIN32 +#define SEP '\\' +#define ALTSEP '/' +#else +#define SEP '/' +#define ALTSEP '\\' +#endif + void BLI_setenv(const char *env, const char *val); void BLI_setenv_if_new(const char *env, const char* val); @@ -98,6 +106,11 @@ void BLI_split_dirfile(const char *string, char *dir, char *file); void BLI_join_dirfile(char *string, const char *dir, const char *file); char *BLI_path_basename(char *path); int BKE_rebase_path(char *abs, int abs_size, char *rel, int rel_size, const char *base_dir, const char *src_dir, const char *dest_dir); +char *BLI_last_slash(const char *string); +int BLI_add_slash(char *string); +void BLI_del_slash(char *string); +char *BLI_first_slash(char *string); + void BLI_getlastdir(const char* dir, char *last, int maxlen); int BLI_testextensie(const char *str, const char *ext); int BLI_testextensie_array(const char *str, const char **ext_array); @@ -107,6 +120,7 @@ void BLI_uniquename(struct ListBase *list, void *vlink, const char defname[], ch void BLI_newname(char * name, int add); int BLI_stringdec(const char *string, char *head, char *start, unsigned short *numlen); void BLI_stringenc(char *string, const char *head, const char *tail, unsigned short numlen, int pic); +int BLI_split_name_num(char *left, int *nr, const char *name); void BLI_splitdirstring(char *di,char *fi); /* make sure path separators conform to system one */ diff --git a/source/blender/blenlib/BLI_storage.h b/source/blender/blenlib/BLI_storage.h index e443a853324..e52ea1600eb 100644 --- a/source/blender/blenlib/BLI_storage.h +++ b/source/blender/blenlib/BLI_storage.h @@ -29,17 +29,6 @@ #ifndef BLI_STORAGE_H #define BLI_STORAGE_H -/* NOTE: these have to be defined before including unistd.h! */ -#ifndef __APPLE__ -#ifndef WIN32 -#ifndef _LARGEFILE_SOURCE -#define _LARGEFILE_SOURCE -#define _LARGEFILE64_SOURCE -#define _FILE_OFFSET_BITS 64 -#endif -#endif -#endif - #ifdef WIN32 /* for size_t, only needed on win32 for some reason */ #include diff --git a/source/blender/blenlib/BLI_winstuff.h b/source/blender/blenlib/BLI_winstuff.h index c9a85cf890e..b66790f701f 100644 --- a/source/blender/blenlib/BLI_winstuff.h +++ b/source/blender/blenlib/BLI_winstuff.h @@ -35,7 +35,7 @@ #ifdef _WIN32 #ifndef FREE_WINDOWS -#pragma warning(once: 4761 4305 4244) +#pragma warning(once: 4761 4305 4244 4018) #endif #define WIN32_LEAN_AND_MEAN diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt index 2e2ed3c5733..0131d45a00c 100644 --- a/source/blender/blenlib/CMakeLists.txt +++ b/source/blender/blenlib/CMakeLists.txt @@ -28,7 +28,6 @@ SET(INC . ../makesdna ../blenkernel - ../include ../gpu ../../../intern/ghost ../../../intern/guardedalloc diff --git a/source/blender/blenlib/intern/BLI_mempool.c b/source/blender/blenlib/intern/BLI_mempool.c index 26d6f5af147..823841ef152 100644 --- a/source/blender/blenlib/intern/BLI_mempool.c +++ b/source/blender/blenlib/intern/BLI_mempool.c @@ -154,9 +154,11 @@ void BLI_mempool_free(BLI_mempool *pool, void *addr){ //doesnt protect against d first = pool->chunks.first; BLI_remlink(&pool->chunks, first); - for(mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next) - pool->use_sysmalloc ? free(mpchunk->data) : MEM_freeN(mpchunk->data); - + for(mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next) { + if(pool->use_sysmalloc) free(mpchunk->data); + else MEM_freeN(mpchunk->data); + } + pool->use_sysmalloc ? BLI_freelist(&(pool->chunks)) : BLI_freelistN(&(pool->chunks)); BLI_addtail(&pool->chunks, first); @@ -175,9 +177,18 @@ void BLI_mempool_free(BLI_mempool *pool, void *addr){ //doesnt protect against d void BLI_mempool_destroy(BLI_mempool *pool) { BLI_mempool_chunk *mpchunk=NULL; - for(mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next) - pool->use_sysmalloc ? free(mpchunk->data) : MEM_freeN(mpchunk->data); - - pool->use_sysmalloc ? BLI_freelist(&(pool->chunks)) : BLI_freelistN(&(pool->chunks)); - pool->use_sysmalloc ? free(pool) : MEM_freeN(pool); + if(pool->use_sysmalloc) { + for(mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next) { + free(mpchunk->data); + } + BLI_freelist(&(pool->chunks)); + free(pool); + } + else { + for(mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next) { + MEM_freeN(mpchunk->data); + } + BLI_freelistN(&(pool->chunks)); + MEM_freeN(pool); + } } diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c index 06b427240ba..180cfdbbc5a 100644 --- a/source/blender/blenlib/intern/fileops.c +++ b/source/blender/blenlib/intern/fileops.c @@ -53,68 +53,6 @@ #include "BLO_sys_types.h" // for intptr_t support -/* implementations: */ -char *first_slash(char *string) { - char *ffslash, *fbslash; - - ffslash= strchr(string, '/'); - fbslash= strchr(string, '\\'); - - if (!ffslash) return fbslash; - else if (!fbslash) return ffslash; - - if ((intptr_t)ffslash < (intptr_t)fbslash) return ffslash; - else return fbslash; -} - -char *BLI_last_slash(const char *string) { - char *lfslash, *lbslash; - - lfslash= strrchr(string, '/'); - lbslash= strrchr(string, '\\'); - - if (!lfslash) return lbslash; - else if (!lbslash) return lfslash; - - if ((intptr_t)lfslash < (intptr_t)lbslash) return lbslash; - else return lfslash; -} - -/* adds a slash if there isnt one there already */ -int BLI_add_slash(char *string) { - int len = strlen(string); -#ifdef WIN32 - if (len==0 || string[len-1]!='\\') { - string[len] = '\\'; - string[len+1] = '\0'; - return len+1; - } -#else - if (len==0 || string[len-1]!='/') { - string[len] = '/'; - string[len+1] = '\0'; - return len+1; - } -#endif - return len; -} - -/* removes a slash if there is one */ -void BLI_del_slash(char *string) { - int len = strlen(string); - while (len) { -#ifdef WIN32 - if (string[len-1]=='\\') { -#else - if (string[len-1]=='/') { -#endif - string[len-1] = '\0'; - len--; - } else { - break; - } - } -} /* gzip the file in from and write it to "to". return -1 if zlib fails, -2 if the originating file does not exist diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c index c2e765388c8..88ca739a39e 100644 --- a/source/blender/blenlib/intern/math_geom.c +++ b/source/blender/blenlib/intern/math_geom.c @@ -1651,11 +1651,21 @@ void window_translate_m4(float winmat[][4], float perspmat[][4], float x, float { if(winmat[2][3] == -1.0f) { /* in the case of a win-matrix, this means perspective always */ - float v1[3]= {perspmat[0][0], perspmat[1][0], perspmat[2][0]}; - float v2[3]= {perspmat[0][1], perspmat[1][1], perspmat[2][1]}; - float len1= (1.0f / len_v3(v1)); - float len2= (1.0f / len_v3(v2)); - + float v1[3]; + float v2[3]; + float len1, len2; + + v1[0]= perspmat[0][0]; + v1[1]= perspmat[1][0]; + v1[2]= perspmat[2][0]; + + v2[0]= perspmat[0][1]; + v2[1]= perspmat[1][1]; + v2[2]= perspmat[2][1]; + + len1= (1.0f / len_v3(v1)); + len2= (1.0f / len_v3(v2)); + winmat[2][0] += len1 * winmat[0][0] * x; winmat[2][1] += len2 * winmat[1][1] * y; } diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c index 86eee4c2202..58fb3b9b76b 100644 --- a/source/blender/blenlib/intern/math_matrix.c +++ b/source/blender/blenlib/intern/math_matrix.c @@ -609,7 +609,11 @@ void orthogonalize_m3(float mat[][3], int axis) normalize_v3(mat[1]); cross_v3_v3v3(mat[2], mat[0], mat[1]); } else { - float vec[3] = {mat[0][1], mat[0][2], mat[0][0]}; + float vec[3]; + + vec[0]= mat[0][1]; + vec[1]= mat[0][2]; + vec[2]= mat[0][0]; cross_v3_v3v3(mat[2], mat[0], vec); normalize_v3(mat[2]); @@ -625,7 +629,11 @@ void orthogonalize_m3(float mat[][3], int axis) normalize_v3(mat[0]); cross_v3_v3v3(mat[2], mat[0], mat[1]); } else { - float vec[3] = {mat[1][1], mat[1][2], mat[1][0]}; + float vec[3]; + + vec[0]= mat[1][1]; + vec[1]= mat[1][2]; + vec[2]= mat[1][0]; cross_v3_v3v3(mat[0], mat[1], vec); normalize_v3(mat[0]); @@ -641,7 +649,11 @@ void orthogonalize_m3(float mat[][3], int axis) normalize_v3(mat[0]); cross_v3_v3v3(mat[1], mat[2], mat[0]); } else { - float vec[3] = {mat[2][1], mat[2][2], mat[2][0]}; + float vec[3]; + + vec[0]= mat[2][1]; + vec[1]= mat[2][2]; + vec[2]= mat[2][0]; cross_v3_v3v3(mat[0], vec, mat[2]); normalize_v3(mat[0]); @@ -670,7 +682,11 @@ void orthogonalize_m4(float mat[][4], int axis) normalize_v3(mat[1]); cross_v3_v3v3(mat[2], mat[0], mat[1]); } else { - float vec[3] = {mat[0][1], mat[0][2], mat[0][0]}; + float vec[3]; + + vec[0]= mat[0][1]; + vec[1]= mat[0][2]; + vec[2]= mat[0][0]; cross_v3_v3v3(mat[2], mat[0], vec); normalize_v3(mat[2]); @@ -687,7 +703,11 @@ void orthogonalize_m4(float mat[][4], int axis) normalize_v3(mat[0]); cross_v3_v3v3(mat[2], mat[0], mat[1]); } else { - float vec[3] = {mat[1][1], mat[1][2], mat[1][0]}; + float vec[3]; + + vec[0]= mat[1][1]; + vec[1]= mat[1][2]; + vec[2]= mat[1][0]; cross_v3_v3v3(mat[0], mat[1], vec); normalize_v3(mat[0]); @@ -703,7 +723,11 @@ void orthogonalize_m4(float mat[][4], int axis) normalize_v3(mat[0]); cross_v3_v3v3(mat[1], mat[2], mat[0]); } else { - float vec[3] = {mat[2][1], mat[2][2], mat[2][0]}; + float vec[3]; + + vec[0]= mat[2][1]; + vec[1]= mat[2][2]; + vec[2]= mat[2][0]; cross_v3_v3v3(mat[0], vec, mat[2]); normalize_v3(mat[0]); @@ -750,7 +774,7 @@ void normalize_m3(float mat[][3]) normalize_v3(mat[2]); } -void normalize_m3_m3(float rmat[][3], const float mat[][3]) +void normalize_m3_m3(float rmat[][3], float mat[][3]) { normalize_v3_v3(rmat[0], mat[0]); normalize_v3_v3(rmat[1], mat[1]); @@ -770,7 +794,7 @@ void normalize_m4(float mat[][4]) if(len!=0.0) mat[2][3]/= len; } -void normalize_m4_m4(float rmat[][4], const float mat[][4]) +void normalize_m4_m4(float rmat[][4], float mat[][4]) { float len; @@ -952,6 +976,40 @@ float mat4_to_scale(float mat[][4]) return mat3_to_scale(tmat); } +void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], float wmat[][4]) +{ + float mat3[3][3]; /* wmat -> 3x3 */ + float mat3_n[3][3]; /* wmat -> normalized, 3x3 */ + float imat3_n[3][3]; /* wmat -> normalized & inverted, 3x3 */ + /* location */ + copy_v3_v3(loc, wmat[3]); + + /* rotation & scale are linked, we need to create the mat's + * for these together since they are related. */ + copy_m3_m4(mat3, wmat); + /* so scale doesnt interfear with rotation [#24291] */ + /* note: this is a workaround for negative matrix not working for rotation conversion, FIXME */ + normalize_m3_m3(mat3_n, mat3); + if(is_negative_m3(mat3)) { + negate_v3(mat3_n[0]); + negate_v3(mat3_n[1]); + negate_v3(mat3_n[2]); + } + + /* rotation */ + /* keep rot as a 3x3 matrix, the caller can convert into a quat or euler */ + copy_m3_m3(rot, mat3_n); + + /* scale */ + /* note: mat4_to_size(ob->size, mat) fails for negative scale */ + invert_m3_m3(imat3_n, mat3_n); + mul_m3_m3m3(mat3, imat3_n, mat3); + + size[0]= mat3[0][0]; + size[1]= mat3[1][1]; + size[2]= mat3[2][2]; +} + void scale_m3_fl(float m[][3], float scale) { m[0][0]= m[1][1]= m[2][2]= scale; diff --git a/source/blender/blenlib/intern/math_rotation.c b/source/blender/blenlib/intern/math_rotation.c index 7debdcdb015..2d0e347b2e6 100644 --- a/source/blender/blenlib/intern/math_rotation.c +++ b/source/blender/blenlib/intern/math_rotation.c @@ -121,7 +121,13 @@ void mul_qt_fl(float *q, const float f) void sub_qt_qtqt(float q[4], const float q1[4], const float q2[4]) { - const float nq2[4]= {-q2[0], q2[1], q2[2], q2[3]}; + float nq2[4]; + + nq2[0]= -q2[0]; + nq2[1]= q2[1]; + nq2[2]= q2[2]; + nq2[3]= q2[3]; + mul_qt_qtqt(q, q1, nq2); } @@ -592,8 +598,11 @@ void axis_angle_to_quat(float q[4], const float axis[3], float angle) float nor[3]; float si; - normalize_v3_v3(nor, axis); - + if(normalize_v3_v3(nor, axis) == 0.0f) { + unit_qt(q); + return; + } + angle /= 2; si = (float)sin(angle); q[0] = (float)cos(angle); @@ -649,7 +658,10 @@ void axis_angle_to_mat3(float mat[3][3], const float axis[3], const float angle) float nor[3], nsi[3], co, si, ico; /* normalise the axis first (to remove unwanted scaling) */ - normalize_v3_v3(nor, axis); + if(normalize_v3_v3(nor, axis) == 0.0f) { + unit_m3(mat); + return; + } /* now convert this to a 3x3 matrix */ co= (float)cos(angle); @@ -1138,53 +1150,6 @@ void eulO_to_mat3(float M[3][3], const float e[3], const short order) M[i][k] = -sj; M[j][k] = cj*si; M[k][k] = cj*ci; } -/* Construct 4x4 matrix from Euler angles (in radians). */ -void eulO_to_mat4(float M[4][4], const float e[3], const short order) -{ - float m[3][3]; - - /* for now, we'll just do this the slow way (i.e. copying matrices) */ - normalize_m3(m); - eulO_to_mat3(m,e, order); - copy_m4_m3(M, m); -} - -/* Convert 3x3 matrix to Euler angles (in radians). */ -void mat3_to_eulO(float e[3], short order,float M[3][3]) -{ - RotOrderInfo *R= GET_ROTATIONORDER_INFO(order); - short i=R->axis[0], j=R->axis[1], k=R->axis[2]; - double cy = sqrt(M[i][i]*M[i][i] + M[i][j]*M[i][j]); - - if (cy > 16*FLT_EPSILON) { - e[i] = atan2(M[j][k], M[k][k]); - e[j] = atan2(-M[i][k], cy); - e[k] = atan2(M[i][j], M[i][i]); - } - else { - e[i] = atan2(-M[k][j], M[j][j]); - e[j] = atan2(-M[i][k], cy); - e[k] = 0; - } - - if (R->parity) { - e[0] = -e[0]; - e[1] = -e[1]; - e[2] = -e[2]; - } -} - -/* Convert 4x4 matrix to Euler angles (in radians). */ -void mat4_to_eulO(float e[3], const short order,float M[4][4]) -{ - float m[3][3]; - - /* for now, we'll just do this the slow way (i.e. copying matrices) */ - copy_m3_m4(m, M); - normalize_m3(m); - mat3_to_eulO(e, order,m); -} - /* returns two euler calculation methods, so we can pick the best */ static void mat3_to_eulo2(float M[3][3], float *e1, float *e2, short order) { @@ -1227,6 +1192,45 @@ static void mat3_to_eulo2(float M[3][3], float *e1, float *e2, short order) } } +/* Construct 4x4 matrix from Euler angles (in radians). */ +void eulO_to_mat4(float M[4][4], const float e[3], const short order) +{ + float m[3][3]; + + /* for now, we'll just do this the slow way (i.e. copying matrices) */ + normalize_m3(m); + eulO_to_mat3(m,e, order); + copy_m4_m3(M, m); +} + + +/* Convert 3x3 matrix to Euler angles (in radians). */ +void mat3_to_eulO(float eul[3], short order,float M[3][3]) +{ + float eul1[3], eul2[3]; + + mat3_to_eulo2(M, eul1, eul2, order); + + /* return best, which is just the one with lowest values it in */ + if(fabs(eul1[0])+fabs(eul1[1])+fabs(eul1[2]) > fabs(eul2[0])+fabs(eul2[1])+fabs(eul2[2])) { + copy_v3_v3(eul, eul2); + } + else { + copy_v3_v3(eul, eul1); + } +} + +/* Convert 4x4 matrix to Euler angles (in radians). */ +void mat4_to_eulO(float e[3], const short order,float M[4][4]) +{ + float m[3][3]; + + /* for now, we'll just do this the slow way (i.e. copying matrices) */ + copy_m3_m4(m, M); + normalize_m3(m); + mat3_to_eulO(e, order,m); +} + /* uses 2 methods to retrieve eulers, and picks the closest */ void mat3_to_compatible_eulO(float eul[3], float oldrot[3], short order,float mat[3][3]) { diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c index 61b525d50af..466012eb9b8 100644 --- a/source/blender/blenlib/intern/path_util.c +++ b/source/blender/blenlib/intern/path_util.c @@ -136,6 +136,37 @@ void BLI_stringenc(char *string, const char *head, const char *tail, unsigned sh sprintf(string, fmtstr, head, pic, tail); } +/* Foo.001 -> "Foo", 1 + * Returns the length of "Foo" */ +int BLI_split_name_num(char *left, int *nr, const char *name) +{ + int a; + + *nr= 0; + a= strlen(name); + memcpy(left, name, (a + 1) * sizeof(char)); + + if(a>1 && name[a-1]=='.') return a; + + while(a--) { + if( name[a]=='.' ) { + left[a]= 0; + *nr= atol(name+a+1); + /* casting down to an int, can overflow for large numbers */ + if(*nr < 0) + *nr= 0; + return a; + } + if( isdigit(name[a])==0 ) break; + + left[a]= 0; + } + + for(a= 0; name[a]; a++) + left[a]= name[a]; + + return a; +} void BLI_newname(char *name, int add) { @@ -174,15 +205,25 @@ void BLI_newname(char *name, int add) * defname: the name that should be used by default if none is specified already * delim: the character which acts as a delimeter between parts of the name */ -void BLI_uniquename(ListBase *list, void *vlink, const char defname[], char delim, short name_offs, short len) +static int uniquename_find_dupe(ListBase *list, void *vlink, const char *name, short name_offs) { Link *link; - char tempname[128]; - int number = 1, exists = 0; - char *dot; - + + for (link = list->first; link; link= link->next) { + if (link != vlink) { + if (!strcmp(GIVE_STRADDR(link, name_offs), name)) { + return 1; + } + } + } + + return 0; +} + +void BLI_uniquename(ListBase *list, void *vlink, const char defname[], char delim, short name_offs, short name_len) +{ /* Make sure length can be handled */ - if ((len < 0) || (len > 128)) + if ((name_len < 0) || (name_len > 128)) return; /* See if we are given an empty string */ @@ -191,45 +232,27 @@ void BLI_uniquename(ListBase *list, void *vlink, const char defname[], char deli if (GIVE_STRADDR(vlink, name_offs) == '\0') { /* give it default name first */ - BLI_strncpy(GIVE_STRADDR(vlink, name_offs), defname, len); + BLI_strncpy(GIVE_STRADDR(vlink, name_offs), defname, name_len); } /* See if we even need to do this */ if (list == NULL) return; - - for (link = list->first; link; link= link->next) { - if (link != vlink) { - if (!strcmp(GIVE_STRADDR(link, name_offs), GIVE_STRADDR(vlink, name_offs))) { - exists = 1; - break; - } - } - } - if (exists == 0) - return; - /* Strip off the suffix */ - dot = strrchr(GIVE_STRADDR(vlink, name_offs), delim); - if (dot) - *dot=0; - - for (number = 1; number <= 999; number++) { - BLI_snprintf(tempname, sizeof(tempname), "%s%c%03d", GIVE_STRADDR(vlink, name_offs), delim, number); - - exists = 0; - for (link= list->first; link; link= link->next) { - if (vlink != link) { - if (!strcmp(GIVE_STRADDR(link, name_offs), tempname)) { - exists = 1; - break; - } + if(uniquename_find_dupe(list,vlink, GIVE_STRADDR(vlink, name_offs), name_offs)) { + /* note: this block is used in other places, when changing logic apply to all others, search this message */ + char tempname[128]; + char left[128]; + int number; + int len= BLI_split_name_num(left, &number, GIVE_STRADDR(vlink, name_offs)); + do { /* nested while loop looks bad but likely it wont run most times */ + while(BLI_snprintf(tempname, name_len, "%s%c%03d", left, delim, number) >= name_len) { + if(len > 0) left[--len]= '\0'; /* word too long */ + else number= 0; /* reset, must be a massive number */ } - } - if (exists == 0) { - BLI_strncpy(GIVE_STRADDR(vlink, name_offs), tempname, len); - return; - } + } while(number++, uniquename_find_dupe(list, vlink, tempname, name_offs)); + + BLI_strncpy(GIVE_STRADDR(vlink, name_offs), tempname, name_len); } } @@ -471,11 +494,7 @@ int BLI_has_parent(char *path) int BLI_parent_dir(char *path) { -#ifdef WIN32 - static char *parent_dir="..\\"; -#else - static char *parent_dir="../"; -#endif + static char parent_dir[]= {'.', '.', SEP, '\0'}; /* "../" or "..\\" */ char tmp[FILE_MAXDIR+FILE_MAXFILE+4]; BLI_strncpy(tmp, path, sizeof(tmp)-4); BLI_add_slash(tmp); @@ -547,9 +566,20 @@ int BLI_path_frame(char *path, int frame, int digits) ensure_digits(path, digits); if (stringframe_chars(path, &ch_sta, &ch_end)) { /* warning, ch_end is the last # +1 */ - char tmp[FILE_MAX], format[64]; + char tmp[FILE_MAX]; +#if 0 // neat but breaks on non ascii strings. + char format[64]; sprintf(format, "%%.%ds%%.%dd%%s", ch_sta, ch_end-ch_sta); /* example result: "%.12s%.5d%s" */ sprintf(tmp, format, path, frame, path+ch_end); +#else + char format[8]; + char *p; + sprintf(format, "%%.%dd", ch_end-ch_sta); /* example result: "%.5d" */ + memcpy(tmp, path, sizeof(char) * ch_sta); + p= tmp + ch_sta; + p += sprintf(p, format, frame); + memcpy(p, path + ch_end, strlen(path + ch_end)); +#endif strcpy(path, tmp); return 1; } @@ -1143,42 +1173,28 @@ void BLI_char_switch(char *string, char from, char to) void BLI_make_exist(char *dir) { int a; - #ifdef WIN32 - BLI_char_switch(dir, '/', '\\'); - #else - BLI_char_switch(dir, '\\', '/'); - #endif - + BLI_char_switch(dir, ALTSEP, SEP); + a = strlen(dir); - -#ifdef WIN32 + while(BLI_is_dir(dir) == 0){ a --; - while(dir[a] != '\\'){ + while(dir[a] != SEP){ a--; if (a <= 0) break; } - if (a >= 0) dir[a+1] = 0; + if (a >= 0) { + dir[a+1] = '\0'; + } else { - /* defaulting to drive (usually 'C:') of Windows installation */ +#ifdef WIN32 get_default_root(dir); - break; - } - } #else - while(BLI_is_dir(dir) == 0){ - a --; - while(dir[a] != '/'){ - a--; - if (a <= 0) break; - } - if (a >= 0) dir[a+1] = 0; - else { strcpy(dir,"/"); +#endif break; } } -#endif } void BLI_make_existing_file(char *name) @@ -1495,6 +1511,67 @@ int BKE_rebase_path(char *abs, int abs_size, char *rel, int rel_size, const char return 1; } +char *BLI_first_slash(char *string) { + char *ffslash, *fbslash; + + ffslash= strchr(string, '/'); + fbslash= strchr(string, '\\'); + + if (!ffslash) return fbslash; + else if (!fbslash) return ffslash; + + if ((intptr_t)ffslash < (intptr_t)fbslash) return ffslash; + else return fbslash; +} + +char *BLI_last_slash(const char *string) { + char *lfslash, *lbslash; + + lfslash= strrchr(string, '/'); + lbslash= strrchr(string, '\\'); + + if (!lfslash) return lbslash; + else if (!lbslash) return lfslash; + + if ((intptr_t)lfslash < (intptr_t)lbslash) return lbslash; + else return lfslash; +} + +/* adds a slash if there isnt one there already */ +int BLI_add_slash(char *string) { + int len = strlen(string); +#ifdef WIN32 + if (len==0 || string[len-1]!='\\') { + string[len] = '\\'; + string[len+1] = '\0'; + return len+1; + } +#else + if (len==0 || string[len-1]!='/') { + string[len] = '/'; + string[len+1] = '\0'; + return len+1; + } +#endif + return len; +} + +/* removes a slash if there is one */ +void BLI_del_slash(char *string) { + int len = strlen(string); + while (len) { +#ifdef WIN32 + if (string[len-1]=='\\') { +#else + if (string[len-1]=='/') { +#endif + string[len-1] = '\0'; + len--; + } else { + break; + } + } +} static int add_win32_extension(char *name) { diff --git a/source/blender/blenlib/intern/uvproject.c b/source/blender/blenlib/intern/uvproject.c index cc115d52928..b08f05b4fc8 100644 --- a/source/blender/blenlib/intern/uvproject.c +++ b/source/blender/blenlib/intern/uvproject.c @@ -60,7 +60,9 @@ void project_from_camera(float target[2], float source[3], UvCameraInfo *uci) target[1]= pv4[1] / uci->camsize; } else { - float vec2d[2]= {pv4[0], pv4[2]}; /* 2D position from the camera */ + float vec2d[2]; /* 2D position from the camera */ + vec2d[0]= pv4[0]; + vec2d[1]= pv4[2]; target[0]= angle * (M_PI / uci->camangle); target[1]= pv4[1] / (len_v2(vec2d) * uci->camsize); } diff --git a/source/blender/blenloader/CMakeLists.txt b/source/blender/blenloader/CMakeLists.txt index 144b1d1b1a1..11bb3b14677 100644 --- a/source/blender/blenloader/CMakeLists.txt +++ b/source/blender/blenloader/CMakeLists.txt @@ -30,7 +30,6 @@ SET(INC ../blenkernel ../makesdna ../readblenfile - ../include ../makesrna ../render/extern/include ../../../intern/guardedalloc diff --git a/source/blender/blenloader/SConscript b/source/blender/blenloader/SConscript index bab08c89b57..87cfc47b4de 100644 --- a/source/blender/blenloader/SConscript +++ b/source/blender/blenloader/SConscript @@ -12,6 +12,6 @@ incs += ' ' + env['BF_ZLIB_INC'] defs = [] if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): - env.BlenderLib ( 'bf_blenloader', sources, Split(incs), defs, libtype=['core','player'], priority = [167,30], cc_compileflags=['/WX'] ) + env.BlenderLib ( 'bf_blenloader', sources, Split(incs), defs, libtype=['core','player'], priority = [167,30]) #, cc_compileflags=['/WX'] ) else: env.BlenderLib ( 'bf_blenloader', sources, Split(incs), defs, libtype=['core','player'], priority = [167,30] ) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index cb39fc0ad37..2700c09ce4f 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -39,7 +39,6 @@ #ifndef WIN32 #include // for read close - #include // for MAXPATHLEN #else #include // for open close read #include "winsock2.h" @@ -589,20 +588,16 @@ static void bh8_from_bh4(BHead *bhead, BHead4 *bhead4) static BHeadN *get_bhead(FileData *fd) { - BHead8 bhead8; - BHead4 bhead4; - BHead bhead; BHeadN *new_bhead = 0; int readsize; if (fd) { if ( ! fd->eof) { - - /* not strictly needed but shuts valgrind up + /* initializing to zero isn't strictly needed but shuts valgrind up * since uninitialized memory gets compared */ - memset(&bhead8, 0, sizeof(BHead8)); - memset(&bhead4, 0, sizeof(BHead4)); - memset(&bhead, 0, sizeof(BHead)); + BHead8 bhead8= {0}; + BHead4 bhead4= {0}; + BHead bhead= {0}; // First read the bhead structure. // Depending on the platform the file was written on this can @@ -1981,9 +1976,13 @@ static void direct_link_animdata(FileData *fd, AnimData *adt) link_list(fd, &adt->nla_tracks); direct_link_nladata(fd, &adt->nla_tracks); - /* clear temp pointers that may have been set... */ - // TODO: it's probably only a small cost to reload this anyway... - adt->actstrip= NULL; + /* relink active strip - even though strictly speaking this should only be used + * if we're in 'tweaking mode', we need to be able to have this loaded back for + * undo, but also since users may not exit tweakmode before saving (#24535) + */ + // TODO: it's not really nice that anyone should be able to save the file in this + // state, but it's going to be too hard to enforce this single case... + adt->actstrip= newdataadr(fd, adt->actstrip); } /* ************ READ MOTION PATHS *************** */ @@ -8349,7 +8348,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } if(sce->r.mode & R_PANORAMA) { - /* all these checks to ensure saved files with cvs version keep working... */ + /* all these checks to ensure saved files with svn version keep working... */ if(sce->r.xsch < sce->r.ysch) { Object *obc= newlibadr(fd, lib, sce->camera); if(obc && obc->type==OB_CAMERA) { @@ -11277,7 +11276,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) Brush *br; for(br= main->brush.first; br; br= br->id.next) { if(br->ob_mode==0) - br->ob_mode= (OB_MODE_SCULPT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT|OB_MODE_VERTEX_PAINT); + br->ob_mode= OB_MODE_ALL_PAINT; } } diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 55d83fea970..5d89f17327f 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -507,7 +507,7 @@ static void write_renderinfo(WriteData *wd, Main *mainvar) /* for renderdeamon data[1]= sce->r.efra; memset(data+2, 0, sizeof(int)*6); - strncpy((char *)(data+2), sce->id.name+2, 21); + BLI_strncpy((char *)(data+2), sce->id.name+2, sizeof(sce->id.name)-2); writedata(wd, REND, 32, data); } diff --git a/source/blender/collada/AnimationImporter.cpp b/source/blender/collada/AnimationImporter.cpp index 32390fe01eb..c7267bd46f8 100644 --- a/source/blender/collada/AnimationImporter.cpp +++ b/source/blender/collada/AnimationImporter.cpp @@ -131,7 +131,7 @@ void AnimationImporter::animation_to_fcurves(COLLADAFW::AnimationCurve *curve) } break; default: - fprintf(stderr, "Output dimension of %d is not yet supported (animation id = %s)\n", dim, curve->getOriginalId().c_str()); + fprintf(stderr, "Output dimension of %d is not yet supported (animation id = %s)\n", (int)dim, curve->getOriginalId().c_str()); } for (std::vector::iterator it = fcurves.begin(); it != fcurves.end(); it++) @@ -221,7 +221,7 @@ AnimationImporter::~AnimationImporter() free_fcurve(*it); if (unused_curves.size()) - fprintf(stderr, "removed %u unused curves\n", unused_curves.size()); + fprintf(stderr, "removed %d unused curves\n", (int)unused_curves.size()); } bool AnimationImporter::write_animation(const COLLADAFW::Animation* anim) @@ -403,7 +403,7 @@ void AnimationImporter::read_node_transform(COLLADAFW::Node *node, Object *ob) TransformReader::get_node_mat(mat, node, &uid_animated_map, ob); if (ob) { copy_m4_m4(ob->obmat, mat); - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, 0); } } @@ -564,7 +564,7 @@ Object *AnimationImporter::translate_animation(COLLADAFW::Node *node, } } else { - fprintf(stderr, "expected %d curves, got %u\n", xyz ? 3 : 1, curves.size()); + fprintf(stderr, "expected %d curves, got %d\n", xyz ? 3 : 1, (int)curves.size()); } } } @@ -902,7 +902,7 @@ bool AnimationImporter::evaluate_animation(COLLADAFW::Transformation *tm, float if (type == COLLADAFW::Transformation::ROTATE) { if (curves.size() != 1) { - fprintf(stderr, "expected 1 curve, got %u\n", curves.size()); + fprintf(stderr, "expected 1 curve, got %d\n", (int)curves.size()); return false; } @@ -924,9 +924,9 @@ bool AnimationImporter::evaluate_animation(COLLADAFW::Transformation *tm, float if ((!is_xyz && curves.size() != 1) || (is_xyz && curves.size() != 3)) { if (is_xyz) - fprintf(stderr, "%s: expected 3 curves, got %u\n", path, curves.size()); + fprintf(stderr, "%s: expected 3 curves, got %d\n", path, (int)curves.size()); else - fprintf(stderr, "%s: expected 1 curve, got %u\n", path, curves.size()); + fprintf(stderr, "%s: expected 1 curve, got %d\n", path, (int)curves.size()); return false; } @@ -953,7 +953,7 @@ bool AnimationImporter::evaluate_animation(COLLADAFW::Transformation *tm, float else if (type == COLLADAFW::Transformation::MATRIX) { // for now, of matrix animation, support only the case when all values are packed into one animation if (curves.size() != 16) { - fprintf(stderr, "%s: expected 16 curves, got %u\n", path, curves.size()); + fprintf(stderr, "%s: expected 16 curves, got %d\n", path, (int)curves.size()); return false; } diff --git a/source/blender/collada/CMakeLists.txt b/source/blender/collada/CMakeLists.txt index bcc407b6b68..98d9780a92e 100644 --- a/source/blender/collada/CMakeLists.txt +++ b/source/blender/collada/CMakeLists.txt @@ -24,6 +24,8 @@ # # ***** END GPL LICENSE BLOCK ***** +REMOVE_STRICT_FLAGS() + SET(INC . ../blenlib diff --git a/source/blender/collada/DocumentExporter.cpp b/source/blender/collada/DocumentExporter.cpp index 9062bd4ba9f..66a0b0cbdd4 100644 --- a/source/blender/collada/DocumentExporter.cpp +++ b/source/blender/collada/DocumentExporter.cpp @@ -904,7 +904,7 @@ protected: void DocumentExporter::exportCurrentScene(Scene *sce, const char* filename) { PointerRNA sceneptr, unit_settings; - PropertyRNA *system, *scale; + PropertyRNA *system; /* unused , *scale; */ clear_global_id_map(); diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp index bc5653c8c45..86609d11c02 100644 --- a/source/blender/collada/DocumentImporter.cpp +++ b/source/blender/collada/DocumentImporter.cpp @@ -219,7 +219,7 @@ public: if (libnode_ob.size()) { Scene *sce = CTX_data_scene(mContext); - fprintf(stderr, "got %u library nodes to free\n", libnode_ob.size()); + fprintf(stderr, "got %d library nodes to free\n", (int)libnode_ob.size()); // free all library_nodes std::vector::iterator it; for (it = libnode_ob.begin(); it != libnode_ob.end(); it++) { diff --git a/source/blender/collada/MeshImporter.h b/source/blender/collada/MeshImporter.h index 055c4798855..c5ab6e94561 100644 --- a/source/blender/collada/MeshImporter.h +++ b/source/blender/collada/MeshImporter.h @@ -72,6 +72,8 @@ class MeshImporter : public MeshImporterBase { private: + UnitConverter *unitconverter; + Scene *scene; ArmatureImporter *armature_importer; @@ -120,8 +122,6 @@ private: bool flat_face(unsigned int *nind, COLLADAFW::MeshVertexData& nor, int count); - UnitConverter *unitconverter; - public: MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce); diff --git a/source/blender/collada/SkinInfo.cpp b/source/blender/collada/SkinInfo.cpp index ba9451ecf84..b052f283e62 100644 --- a/source/blender/collada/SkinInfo.cpp +++ b/source/blender/collada/SkinInfo.cpp @@ -215,7 +215,7 @@ void SkinInfo::link_armature(bContext *C, Object *ob, std::mapobject = ob_arm; copy_m4_m4(ob->obmat, bind_shape_matrix); - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, 0); #if 1 bc_set_parent(ob, ob_arm, C); #else diff --git a/source/blender/collada/collada_utils.cpp b/source/blender/collada/collada_utils.cpp index 0634c910e96..98728001eb8 100644 --- a/source/blender/collada/collada_utils.cpp +++ b/source/blender/collada/collada_utils.cpp @@ -88,7 +88,7 @@ int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space) } // apply child obmat (i.e. decompose it into rot/loc/size) - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, 0); // compute parentinv what_does_parent(sce, ob, &workob); diff --git a/source/blender/editors/animation/anim_draw.c b/source/blender/editors/animation/anim_draw.c index 373ad5472ab..7cfe180a7bf 100644 --- a/source/blender/editors/animation/anim_draw.c +++ b/source/blender/editors/animation/anim_draw.c @@ -352,14 +352,13 @@ static short bezt_nlamapping_apply(KeyframeEditData *ked, BezTriple *bezt) */ void ANIM_nla_mapping_apply_fcurve (AnimData *adt, FCurve *fcu, short restore, short only_keys) { - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc map_cb; /* init edit data * - AnimData is stored in 'data' * - only_keys is stored in 'i1' */ - memset(&ked, 0, sizeof(KeyframeEditData)); ked.data= (void *)adt; ked.i1= (int)only_keys; diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c index 055ee1c3392..2f5ad28c8f2 100644 --- a/source/blender/editors/animation/anim_markers.c +++ b/source/blender/editors/animation/anim_markers.c @@ -376,7 +376,7 @@ static void MARKER_OT_add(wmOperatorType *ot) /* api callbacks */ ot->exec= ed_marker_add; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -667,7 +667,7 @@ static void MARKER_OT_move(wmOperatorType *ot) ot->exec= ed_marker_move_exec; ot->invoke= ed_marker_move_invoke; ot->modal= ed_marker_move_modal; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING|OPTYPE_GRAB_POINTER; @@ -755,7 +755,7 @@ static void MARKER_OT_duplicate(wmOperatorType *ot) ot->exec= ed_marker_duplicate_exec; ot->invoke= ed_marker_duplicate_invoke; ot->modal= ed_marker_move_modal; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -870,7 +870,7 @@ static void MARKER_OT_select(wmOperatorType *ot) /* api callbacks */ ot->invoke= ed_marker_select_invoke; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -958,7 +958,7 @@ static void MARKER_OT_select_border(wmOperatorType *ot) ot->invoke= WM_border_select_invoke; ot->modal= WM_border_select_modal; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1021,7 +1021,7 @@ static void MARKER_OT_select_all(wmOperatorType *ot) /* api callbacks */ ot->exec= ed_marker_select_all_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1069,7 +1069,7 @@ static void MARKER_OT_delete(wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_operator_confirm; ot->exec= ed_marker_delete_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1114,7 +1114,7 @@ static void MARKER_OT_make_links_scene(wmOperatorType *ot) /* api callbacks */ ot->exec= ed_marker_make_links_scene_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1163,7 +1163,7 @@ static void MARKER_OT_camera_bind(wmOperatorType *ot) /* api callbacks */ ot->exec= ed_marker_camera_bind_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c index a80ea3e12bf..9b367481ef2 100644 --- a/source/blender/editors/animation/anim_ops.c +++ b/source/blender/editors/animation/anim_ops.c @@ -217,7 +217,7 @@ void ANIM_OT_previewrange_set(wmOperatorType *ot) ot->exec= previewrange_define_exec; ot->modal= WM_border_select_modal; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -261,7 +261,7 @@ void ANIM_OT_previewrange_clear(wmOperatorType *ot) /* api callbacks */ ot->exec= previewrange_clear_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -328,7 +328,7 @@ void ANIM_OT_time_toggle(wmOperatorType *ot) /* api callbacks */ ot->exec= toggle_time_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; } /* ************************** registration **********************************/ diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c index 6ace48dd301..a6bdc8d36d4 100644 --- a/source/blender/editors/animation/drivers.c +++ b/source/blender/editors/animation/drivers.c @@ -364,14 +364,13 @@ short ANIM_paste_driver (ID *id, const char rna_path[], int array_index, short U static int add_driver_button_exec (bContext *C, wmOperator *op) { - PointerRNA ptr; + PointerRNA ptr= {{0}}; PropertyRNA *prop= NULL; char *path; short success= 0; int index, all= RNA_boolean_get(op->ptr, "all"); /* try to create driver using property retrieved from UI */ - memset(&ptr, 0, sizeof(PointerRNA)); uiContextActiveProperty(C, &ptr, &prop, &index); if (all) @@ -421,14 +420,13 @@ void ANIM_OT_driver_button_add (wmOperatorType *ot) static int remove_driver_button_exec (bContext *C, wmOperator *op) { - PointerRNA ptr; + PointerRNA ptr= {{0}}; PropertyRNA *prop= NULL; char *path; short success= 0; int index, all= RNA_boolean_get(op->ptr, "all"); /* try to find driver using property retrieved from UI */ - memset(&ptr, 0, sizeof(PointerRNA)); uiContextActiveProperty(C, &ptr, &prop, &index); if (all) @@ -474,14 +472,13 @@ void ANIM_OT_driver_button_remove (wmOperatorType *ot) static int copy_driver_button_exec (bContext *C, wmOperator *UNUSED(op)) { - PointerRNA ptr; + PointerRNA ptr= {{0}}; PropertyRNA *prop= NULL; char *path; short success= 0; int index; /* try to create driver using property retrieved from UI */ - memset(&ptr, 0, sizeof(PointerRNA)); uiContextActiveProperty(C, &ptr, &prop, &index); if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) { @@ -520,14 +517,13 @@ void ANIM_OT_copy_driver_button (wmOperatorType *ot) static int paste_driver_button_exec (bContext *C, wmOperator *UNUSED(op)) { - PointerRNA ptr; + PointerRNA ptr= {{0}}; PropertyRNA *prop= NULL; char *path; short success= 0; int index; /* try to create driver using property retrieved from UI */ - memset(&ptr, 0, sizeof(PointerRNA)); uiContextActiveProperty(C, &ptr, &prop, &index); if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) { diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index ddd692d26ea..7f99a5e3b47 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -1439,7 +1439,7 @@ static int delete_key_button_exec (bContext *C, wmOperator *op) { Main *bmain= CTX_data_main(C); Scene *scene= CTX_data_scene(C); - PointerRNA ptr; + PointerRNA ptr= {{0}}; PropertyRNA *prop= NULL; char *path; float cfra= (float)CFRA; // XXX for now, don't bother about all the yucky offset crap @@ -1447,7 +1447,6 @@ static int delete_key_button_exec (bContext *C, wmOperator *op) int a, index, length, all= RNA_boolean_get(op->ptr, "all"); /* try to insert keyframe using property retrieved from UI */ - memset(&ptr, 0, sizeof(PointerRNA)); uiContextActiveProperty(C, &ptr, &prop, &index); if (ptr.id.data && ptr.data && prop) { diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c index 57617651823..aec35df5dd5 100644 --- a/source/blender/editors/animation/keyingsets.c +++ b/source/blender/editors/animation/keyingsets.c @@ -286,7 +286,7 @@ static int add_keyingset_button_exec (bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); KeyingSet *ks = NULL; PropertyRNA *prop= NULL; - PointerRNA ptr; + PointerRNA ptr= {{0}}; char *path = NULL; short success= 0; int index=0, pflag=0; @@ -322,7 +322,6 @@ static int add_keyingset_button_exec (bContext *C, wmOperator *op) ks= BLI_findlink(&scene->keyingsets, scene->active_keyingset-1); /* try to add to keyingset using property retrieved from UI */ - memset(&ptr, 0, sizeof(PointerRNA)); uiContextActiveProperty(C, &ptr, &prop, &index); /* check if property is able to be added */ @@ -387,7 +386,7 @@ static int remove_keyingset_button_exec (bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); KeyingSet *ks = NULL; PropertyRNA *prop= NULL; - PointerRNA ptr; + PointerRNA ptr= {{0}}; char *path = NULL; short success= 0; int index=0; @@ -408,7 +407,6 @@ static int remove_keyingset_button_exec (bContext *C, wmOperator *op) ks= BLI_findlink(&scene->keyingsets, scene->active_keyingset-1); /* try to add to keyingset using property retrieved from UI */ - memset(&ptr, 0, sizeof(PointerRNA)); uiContextActiveProperty(C, &ptr, &prop, &index); if (ptr.id.data && ptr.data && prop) { diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index c8c0a4e6980..dcfc2762735 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -170,7 +170,7 @@ EditBone *make_boneList(ListBase *edbo, ListBase *bones, EditBone *parent, Bone /* Copy relevant data from bone to eBone */ eBone->parent= parent; - BLI_strncpy(eBone->name, curBone->name, 32); + BLI_strncpy(eBone->name, curBone->name, sizeof(eBone->name)); eBone->flag = curBone->flag; /* fix selection flags */ @@ -332,9 +332,9 @@ void ED_armature_from_edit(Object *obedit) newBone= MEM_callocN(sizeof(Bone), "bone"); eBone->temp= newBone; /* Associate the real Bones with the EditBones */ - BLI_strncpy(newBone->name, eBone->name, 32); - memcpy(newBone->head, eBone->head, sizeof(float)*3); - memcpy(newBone->tail, eBone->tail, sizeof(float)*3); + BLI_strncpy(newBone->name, eBone->name, sizeof(newBone->name)); + memcpy(newBone->head, eBone->head, sizeof(newBone->head)); + memcpy(newBone->tail, eBone->tail, sizeof(newBone->tail)); newBone->flag= eBone->flag; if (eBone == arm->act_edbone) { @@ -509,28 +509,23 @@ static EditBone *editbone_name_exists (ListBase *edbo, const char *name) void unique_editbone_name (ListBase *edbo, char *name, EditBone *bone) { EditBone *dupli; - char tempname[64]; - int number; - char *dot; dupli = editbone_name_exists(edbo, name); if (dupli && bone != dupli) { - /* Strip off the suffix, if it's a number */ - number= strlen(name); - if (number && isdigit(name[number-1])) { - dot= strrchr(name, '.'); // last occurrence - if (dot) - *dot=0; - } - - for (number = 1; number <= 999; number++) { - sprintf(tempname, "%s.%03d", name, number); - if (!editbone_name_exists(edbo, tempname)) { - BLI_strncpy(name, tempname, 32); - return; + /* note: this block is used in other places, when changing logic apply to all others, search this message */ + char tempname[sizeof(bone->name)]; + char left[sizeof(bone->name)]; + int number; + int len= BLI_split_name_num(left, &number, name); + do { /* nested while loop looks bad but likely it wont run most times */ + while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) { + if(len > 0) left[--len]= '\0'; /* word too long */ + else number= 0; /* reset, must be a massive number */ } - } + } while(number++, ((dupli= editbone_name_exists(edbo, tempname)) && bone != dupli)); + + BLI_strncpy(name, tempname, sizeof(bone->name)); } } @@ -546,7 +541,7 @@ static void applyarmature_fix_boneparents (Scene *scene, Object *armob) /* apply current transform from parent (not yet destroyed), * then calculate new parent inverse matrix */ - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, FALSE); what_does_parent(scene, ob, &workob); invert_m4_m4(ob->parentinv, workob.obmat); @@ -681,7 +676,7 @@ static int pose_visual_transform_apply_exec (bContext *C, wmOperator *UNUSED(op) invert_m4_m4(imat, pchan->pose_mat); mul_m4_m4m4(delta_mat, mat, imat); - pchan_apply_mat4(pchan, delta_mat); + pchan_apply_mat4(pchan, delta_mat, TRUE); where_is_pose_bone(scene, ob, pchan, CFRA, 1); } @@ -763,7 +758,7 @@ static void joined_armature_fix_links(Object *tarArm, Object *srcArm, bPoseChann for (achan= act->chanbase.first; achan; achan= achan->next) { if (strcmp(achan->name, pchan->name)==0) - BLI_strncpy(achan->name, curbone->name, 32); + BLI_strncpy(achan->name, curbone->name, sizeof(achan->name)); } } } @@ -807,7 +802,7 @@ static void joined_armature_fix_links(Object *tarArm, Object *srcArm, bPoseChann if (ob->partype==PARBONE) { /* bone name in object */ if (!strcmp(ob->parsubstr, pchan->name)) - BLI_strncpy(ob->parsubstr, curbone->name, 32); + BLI_strncpy(ob->parsubstr, curbone->name, sizeof(ob->parsubstr)); } /* make tar armature be new parent */ @@ -1364,8 +1359,9 @@ static EditBone *editbone_get_child(bArmature *arm, EditBone *pabone, short use_ for (curbone= arm->edbo->first; curbone; curbone= curbone->next) { if (curbone->parent == pabone) { if (use_visibility) { - if ((arm->layer & curbone->layer) && !(pabone->flag & BONE_HIDDEN_A)) + if ((arm->layer & curbone->layer) && !(pabone->flag & BONE_HIDDEN_A)) { chbone = curbone; + } } else chbone = curbone; @@ -1892,7 +1888,7 @@ void ARMATURE_OT_delete(wmOperatorType *ot) * toggle==2: only active tag * toggle==3: swap (no test) */ -void ED_armature_deselectall(Object *obedit, int toggle) +void ED_armature_deselect_all(Object *obedit, int toggle) { bArmature *arm= obedit->data; EditBone *eBone; @@ -1919,7 +1915,7 @@ void ED_armature_deselectall(Object *obedit, int toggle) for (eBone=arm->edbo->first;eBone;eBone=eBone->next) { if (sel==3) { /* invert selection of bone */ - if ((arm->layer & eBone->layer) && (eBone->flag & BONE_HIDDEN_A)==0) { + if(EBONE_VISIBLE(arm, eBone)) { eBone->flag ^= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); if(arm->act_edbone==eBone) arm->act_edbone= NULL; @@ -1927,7 +1923,7 @@ void ED_armature_deselectall(Object *obedit, int toggle) } else if (sel==1) { /* select bone */ - if(arm->layer & eBone->layer && (eBone->flag & BONE_HIDDEN_A)==0) { + if(EBONE_VISIBLE(arm, eBone)) { eBone->flag |= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); if(eBone->parent) eBone->parent->flag |= (BONE_TIPSEL); @@ -1945,6 +1941,20 @@ void ED_armature_deselectall(Object *obedit, int toggle) ED_armature_sync_selection(arm->edbo); } +void ED_armature_deselect_all_visible(Object *obedit) +{ + bArmature *arm= obedit->data; + EditBone *ebone; + + for (ebone= arm->edbo->first; ebone; ebone= ebone->next) { + /* first and foremost, bone must be visible and selected */ + if (EBONE_VISIBLE(arm, ebone) && (ebone->flag & BONE_UNSELECTABLE)==0) { + ebone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); + } + } + + ED_armature_sync_selection(arm->edbo); +} /* context: editmode armature in view3d */ int mouse_armature(bContext *C, short mval[2], int extend) @@ -1963,7 +1973,7 @@ int mouse_armature(bContext *C, short mval[2], int extend) if (nearBone) { if (!extend) - ED_armature_deselectall(obedit, 0); + ED_armature_deselect_all(obedit, 0); /* by definition the non-root connected bones have no root point drawn, so a root selection needs to be delivered to the parent tip */ @@ -2321,7 +2331,7 @@ EditBone *ED_armature_edit_bone_add(bArmature *arm, char *name) { EditBone *bone= MEM_callocN(sizeof(EditBone), "eBone"); - BLI_strncpy(bone->name, name, 32); + BLI_strncpy(bone->name, name, sizeof(bone->name)); unique_editbone_name(arm->edbo, bone->name, NULL); BLI_addtail(arm->edbo, bone); @@ -2360,7 +2370,7 @@ void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d) mul_m3_m3m3(totmat, obmat, viewmat); invert_m3_m3(imat, totmat); - ED_armature_deselectall(obedit, 0); + ED_armature_deselect_all(obedit, 0); /* Create a bone */ bone= ED_armature_edit_bone_add(obedit->data, "Bone"); @@ -2413,7 +2423,7 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *UNUSED(op)) to_root= 1; } - ED_armature_deselectall(obedit, 0); + ED_armature_deselect_all(obedit, 0); /* we re-use code for mirror editing... */ flipbone= NULL; @@ -2653,7 +2663,7 @@ EditBone *duplicateEditBoneObjects(EditBone *curBone, char *name, ListBase *edit if (name != NULL) { - BLI_strncpy(eBone->name, name, 32); + BLI_strncpy(eBone->name, name, sizeof(eBone->name)); } unique_editbone_name(editbones, eBone->name, NULL); @@ -3497,7 +3507,7 @@ static int armature_extrude_exec(bContext *C, wmOperator *op) newbone->segments= 1; newbone->layer= ebone->layer; - BLI_strncpy (newbone->name, ebone->name, 32); + BLI_strncpy (newbone->name, ebone->name, sizeof(newbone->name)); if (flipbone && forked) { // only set if mirror edit if (strlen(newbone->name)<30) { @@ -3580,7 +3590,7 @@ static int armature_bone_primitive_add_exec(bContext *C, wmOperator *op) mul_m3_m3m3(totmat, obmat, viewmat); invert_m3_m3(imat, totmat); - ED_armature_deselectall(obedit, 0); + ED_armature_deselect_all(obedit, 0); /* Create a bone */ bone= ED_armature_edit_bone_add(obedit->data, name); @@ -4446,7 +4456,7 @@ void ED_pose_deselectall (Object *ob, int test) /* Determine if we're selecting or deselecting */ if (test==1) { for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if ((pchan->bone->layer & arm->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) { + if (PBONE_VISIBLE(arm, pchan->bone)) { if (pchan->bone->flag & BONE_SELECTED) break; } @@ -5389,29 +5399,22 @@ void POSE_OT_reveal(wmOperatorType *ot) /* ************* RENAMING DISASTERS ************ */ /* note: there's a unique_editbone_name() too! */ -void unique_bone_name (bArmature *arm, char *name) -{ - char tempname[64]; - int number; - char *dot; - +static void unique_bone_name (bArmature *arm, char *name) +{ if (get_named_bone(arm, name)) { - - /* Strip off the suffix, if it's a number */ - number= strlen(name); - if(number && isdigit(name[number-1])) { - dot= strrchr(name, '.'); // last occurrence - if (dot) - *dot=0; - } - - for (number = 1; number <=999; number++) { - sprintf (tempname, "%s.%03d", name, number); - if (!get_named_bone(arm, tempname)) { - BLI_strncpy (name, tempname, 32); - return; + /* note: this block is used in other places, when changing logic apply to all others, search this message */ + char tempname[sizeof(((Bone *)NULL)->name)]; + char left[sizeof(((Bone *)NULL)->name)]; + int number; + int len= BLI_split_name_num(left, &number, name); + do { /* nested while loop looks bad but likely it wont run most times */ + while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) { + if(len > 0) left[--len]= '\0'; /* word too long */ + else number= 0; /* reset, must be a massive number */ } - } + } while(number++, get_named_bone(arm, tempname)); + + BLI_strncpy(name, tempname, sizeof(tempname)); } } diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c index e80f1494d8c..749443b276c 100644 --- a/source/blender/editors/armature/editarmature_retarget.c +++ b/source/blender/editors/armature/editarmature_retarget.c @@ -1637,7 +1637,7 @@ static EditBone *add_editbonetolist(char *name, ListBase *list) { EditBone *bone= MEM_callocN(sizeof(EditBone), "eBone"); - BLI_strncpy(bone->name, name, 32); + BLI_strncpy(bone->name, name, sizeof(bone->name)); unique_editbone_name(list, bone->name, NULL); BLI_addtail(list, bone); diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c index a595396b15d..d1430808fca 100644 --- a/source/blender/editors/armature/poselib.c +++ b/source/blender/editors/armature/poselib.c @@ -407,15 +407,13 @@ static EnumPropertyItem *poselib_stored_pose_itemf(bContext *C, PointerRNA *UNUS Object *ob= ED_object_pose_armature(CTX_data_active_object(C)); bAction *act= (ob) ? ob->poselib : NULL; TimeMarker *marker; - EnumPropertyItem *item= NULL, item_tmp; + EnumPropertyItem *item= NULL, item_tmp= {0}; int totitem= 0; int i= 0; if (C==NULL) { return DummyRNA_DEFAULT_items; } - - memset(&item_tmp, 0, sizeof(item_tmp)); /* check that the action exists */ if (act) { @@ -708,7 +706,7 @@ static void poselib_apply_pose (tPoseLib_PreviewData *pld) bAction *act= pld->act; bActionGroup *agrp; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc group_ok_cb; int frame= 1; @@ -721,7 +719,6 @@ static void poselib_apply_pose (tPoseLib_PreviewData *pld) /* init settings for testing groups for keyframes */ group_ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE); - memset(&ked, 0, sizeof(KeyframeEditData)); ked.f1= ((float)frame) - 0.5f; ked.f2= ((float)frame) + 0.5f; diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index ecb34609b2d..1bfbe869e6b 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -439,7 +439,7 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op) if (pchan->parent == NULL) continue; else pabone= pchan->parent->bone; - if ((arm->layer & pabone->layer) && !(pabone->flag & BONE_HIDDEN_P)) { + if (PBONE_VISIBLE(arm, pabone)) { if (!add_to_sel) curbone->flag &= ~BONE_SELECTED; pabone->flag |= BONE_SELECTED; arm->act_bone= pabone; @@ -452,7 +452,7 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op) if (pchan->child == NULL) continue; else chbone = pchan->child->bone; - if ((arm->layer & chbone->layer) && !(chbone->flag & BONE_HIDDEN_P)) { + if (PBONE_VISIBLE(arm, chbone)) { if (!add_to_sel) curbone->flag &= ~BONE_SELECTED; chbone->flag |= BONE_SELECTED; arm->act_bone= chbone; @@ -1682,11 +1682,9 @@ void ARMATURE_OT_armature_layers (wmOperatorType *ot) /* Present a popup to get the layers that should be used */ static int pose_bone_layers_invoke (bContext *C, wmOperator *op, wmEvent *evt) { - int layers[32]; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */ - - /* get layers that are active already */ - memset(&layers, 0, sizeof(layers)); /* set all layers to be off by default */ + int layers[32]= {0}; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */ + /* get layers that are active already */ CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pose_bones) { short bit; @@ -1756,11 +1754,9 @@ void POSE_OT_bone_layers (wmOperatorType *ot) /* Present a popup to get the layers that should be used */ static int armature_bone_layers_invoke (bContext *C, wmOperator *op, wmEvent *evt) { - int layers[32]; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */ + int layers[32]= {0}; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */ /* get layers that are active already */ - memset(&layers, 0, sizeof(layers)); /* set all layers to be off by default */ - CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) { short bit; diff --git a/source/blender/editors/datafiles/splash.png.c b/source/blender/editors/datafiles/splash.png.c index de4fcb8f865..82a8d54b837 100644 --- a/source/blender/editors/datafiles/splash.png.c +++ b/source/blender/editors/datafiles/splash.png.c @@ -1,6820 +1,5461 @@ /* DataToC output of file */ -int datatoc_splash_png_size= 218043; +int datatoc_splash_png_size= 174539; char datatoc_splash_png[]= { -137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 1,245, 0, 0, 1, 26, 8, 6, 0, - 0, 0, 8, 90,206, 70, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 10, 79,105, - 67, 67, 80, 80,104,111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108,101, 0, 0,120,218,157, 83,103, 84, - 83,233, 22, 61,247,222,244, 66, 75,136,128,148, 75,111, 82, 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, 33, 9, 16, 74,136, 33, -161,217, 21, 81,193, 17, 69, 69, 4, 27,200,160,136, 3,142,142,128,140, 21, 81, 44, 12,138, 10,216, 7,228, 33,162,142,131,163, -136,138,202,251,225,123,163,107,214,188,247,230,205,254,181,215, 62,231,172,243,157,179,207, 7,192, 8, 12,150, 72, 51, 81, 53, -128, 12,169, 66, 30, 17,224,131,199,196,198,225,228, 46, 64,129, 10, 36,112, 0, 16, 8,179,100, 33,115,253, 35, 1, 0,248,126, - 60, 60, 43, 34,192, 7,190, 0, 1,120,211, 11, 8, 0,192, 77,155,192, 48, 28,135,255, 15,234, 66,153, 92, 1,128,132, 1,192, -116,145, 56, 75, 8,128, 20, 0, 64,122,142, 66,166, 0, 64, 70, 1,128,157,152, 38, 83, 0,160, 4, 0, 96,203, 99, 98,227, 0, - 80, 45, 0, 96, 39,127,230,211, 0,128,157,248,153,123, 1, 0, 91,148, 33, 21, 1,160,145, 0, 32, 19,101,136, 68, 0,104, 59, - 0,172,207, 86,138, 69, 0, 88, 48, 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, 73, 87,102, 72, 0,176,183, 0,192,206, 16, 11, -178, 0, 8, 12, 0, 48, 81,136,133, 41, 0, 4,123, 0, 96,200, 35, 35,120, 0,132,153, 0, 20, 70,242, 87, 60,241, 43,174, 16, -231, 42, 0, 0,120,153,178, 60,185, 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, 43, 20, 54, 97, 2, 97, -154, 64, 46,194,121,153, 25, 50,129, 52, 15,224,243,204, 0, 0,160,145, 21, 17,224,131,243,253,120,206, 14,174,206,206, 54,142, -182, 14, 95, 45,234,191, 6,255, 34, 98, 98,227,254,229,207,171,112, 64, 0, 0,225,116,126,209,254, 44, 47,179, 26,128, 59, 6, -128,109,254,162, 37,238, 4,104, 94, 11,160,117,247,139,102,178, 15, 64,181, 0,160,233,218, 87,243,112,248,126, 60, 60, 69,161, -144,185,217,217,229,228,228,216, 74,196, 66, 91, 97,202, 87,125,254,103,194, 95,192, 87,253,108,249,126, 60,252,247,245,224,190, -226, 36,129, 50, 93,129, 71, 4,248,224,194,204,244, 76,165, 28,207,146, 9,132, 98,220,230,143, 71,252,183, 11,255,252, 29,211, - 34,196, 73, 98,185, 88, 42, 20,227, 81, 18,113,142, 68,154,140,243, 50,165, 34,137, 66,146, 41,197, 37,210,255,100,226,223, 44, -251, 3, 62,223, 53, 0,176,106, 62, 1,123,145, 45,168, 93, 99, 3,246, 75, 39, 16, 88,116,192,226,247, 0, 0,242,187,111,193, -212, 40, 8, 3,128,104,131,225,207,119,255,239, 63,253, 71,160, 37, 0,128,102, 73,146,113, 0, 0, 94, 68, 36, 46, 84,202,179, - 63,199, 8, 0, 0, 68,160,129, 42,176, 65, 27,244,193, 24, 44,192, 6, 28,193, 5,220,193, 11,252, 96, 54,132, 66, 36,196,194, - 66, 16, 66, 10,100,128, 28,114, 96, 41,172,130, 66, 40,134,205,176, 29, 42, 96, 47,212, 64, 29, 52,192, 81,104,134,147,112, 14, - 46,194, 85,184, 14, 61,112, 15,250, 97, 8,158,193, 40,188,129, 9, 4, 65,200, 8, 19, 97, 33,218,136, 1, 98,138, 88, 35,142, - 8, 23,153,133,248, 33,193, 72, 4, 18,139, 36, 32,201,136, 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, 32, 85, 72, 29,242, 61, -114, 2, 57,135, 92, 70,186,145, 59,200, 0, 50,130,252,134,188, 71, 49,148,129,178, 81, 61,212, 12,181, 67,185,168, 55, 26,132, - 70,162, 11,208,100,116, 49,154,143, 22,160,155,208,114,180, 26, 61,140, 54,161,231,208,171,104, 15,218,143, 62, 67,199, 48,192, -232, 24, 7, 51,196,108, 48, 46,198,195, 66,177, 56, 44, 9,147, 99,203,177, 34,172, 12,171,198, 26,176, 86,172, 3,187,137,245, - 99,207,177,119, 4, 18,129, 69,192, 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, 32, 28, 36, 52, 17,218, - 9, 55, 9, 3,132, 81,194, 39, 34,147,168, 75,180, 38,186, 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, 35,214, 18,143, 19, 47, - 16,123,136, 67,196, 55, 36, 18,137, 67, 50, 39,185,144, 2, 73,177,164, 84,210, 18,210, 70,210,110, 82, 35,233, 44,169,155, 52, - 72, 26, 35,147,201,218,100,107,178, 7, 57,148, 44, 32, 43,200,133,228,157,228,195,228, 51,228, 27,228, 33,242, 91, 10,157, 98, - 64,113,164,248, 83,226, 40, 82,202,106, 74, 25,229, 16,229, 52,229, 6,101,152, 50, 65, 85,163,154, 82,221,168,161, 84, 17, 53, -143, 90, 66,173,161,182, 82,175, 81,135,168, 19, 52,117,154, 57,205,131, 22, 73, 75,165,173,162,149,211, 26,104, 23,104,247,105, -175,232,116,186, 17,221,149, 30, 78,151,208, 87,210,203,233, 71,232,151,232, 3,244,119, 12, 13,134, 21,131,199,136,103, 40, 25, -155, 24, 7, 24,103, 25,119, 24,175,152, 76,166, 25,211,139, 25,199, 84, 48, 55, 49,235,152,231,153, 15,153,111, 85, 88, 42,182, - 42,124, 21,145,202, 10,149, 74,149, 38,149, 27, 42, 47, 84,169,170,166,170,222,170, 11, 85,243, 85,203, 84,143,169, 94, 83,125, -174, 70, 85, 51, 83,227,169, 9,212,150,171, 85,170,157, 80,235, 83, 27, 83,103,169, 59,168,135,170,103,168,111, 84, 63,164,126, - 89,253,137, 6, 89,195, 76,195, 79, 67,164, 81,160,177, 95,227,188,198, 32, 11, 99, 25,179,120, 44, 33,107, 13,171,134,117,129, - 53,196, 38,177,205,217,124,118, 42,187,152,253, 29,187,139, 61,170,169,161, 57, 67, 51, 74, 51, 87,179, 82,243,148,102, 63, 7, -227,152,113,248,156,116, 78, 9,231, 40,167,151,243,126,138,222, 20,239, 41,226, 41, 27,166, 52, 76,185, 49,101, 92,107,170,150, -151,150, 88,171, 72,171, 81,171, 71,235,189, 54,174,237,167,157,166,189, 69,187, 89,251,129, 14, 65,199, 74, 39, 92, 39, 71,103, -143,206, 5,157,231, 83,217, 83,221,167, 10,167, 22, 77, 61, 58,245,174, 46,170,107,165, 27,161,187, 68,119,191,110,167,238,152, -158,190, 94,128,158, 76,111,167,222,121,189,231,250, 28,125, 47,253, 84,253,109,250,167,245, 71, 12, 88, 6,179, 12, 36, 6,219, - 12,206, 24, 60,197, 53,113,111, 60, 29, 47,199,219,241, 81, 67, 93,195, 64, 67,165, 97,149, 97,151,225,132,145,185,209, 60,163, -213, 70,141, 70, 15,140,105,198, 92,227, 36,227,109,198,109,198,163, 38, 6, 38, 33, 38, 75, 77,234, 77,238,154, 82, 77,185,166, - 41,166, 59, 76, 59, 76,199,205,204,205,162,205,214,153, 53,155, 61, 49,215, 50,231,155,231,155,215,155,223,183, 96, 90,120, 90, - 44,182,168,182,184,101, 73,178,228, 90,166, 89,238,182,188,110,133, 90, 57, 89,165, 88, 85, 90, 93,179, 70,173,157,173, 37,214, -187,173,187,167, 17,167,185, 78,147, 78,171,158,214,103,195,176,241,182,201,182,169,183, 25,176,229,216, 6,219,174,182,109,182, -125, 97,103, 98, 23,103,183,197,174,195,238,147,189,147,125,186,125,141,253, 61, 7, 13,135,217, 14,171, 29, 90, 29,126,115,180, -114, 20, 58, 86, 58,222,154,206,156,238, 63,125,197,244,150,233, 47,103, 88,207, 16,207,216, 51,227,182, 19,203, 41,196,105,157, - 83,155,211, 71,103, 23,103,185,115,131,243,136,139,137, 75,130,203, 46,151, 62, 46,155, 27,198,221,200,189,228, 74,116,245,113, - 93,225,122,210,245,157,155,179,155,194,237,168,219,175,238, 54,238,105,238,135,220,159,204, 52,159, 41,158, 89, 51,115,208,195, -200, 67,224, 81,229,209, 63, 11,159,149, 48,107,223,172,126, 79, 67, 79,129,103,181,231, 35, 47, 99, 47,145, 87,173,215,176,183, -165,119,170,247, 97,239, 23, 62,246, 62,114,159,227, 62,227, 60, 55,222, 50,222, 89, 95,204, 55,192,183,200,183,203, 79,195,111, -158, 95,133,223, 67,127, 35,255,100,255,122,255,209, 0,167,128, 37, 1,103, 3,137,129, 65,129, 91, 2,251,248,122,124, 33,191, -142, 63, 58,219,101,246,178,217,237, 65,140,160,185, 65, 21, 65,143,130,173,130,229,193,173, 33,104,200,236,144,173, 33,247,231, -152,206,145,206,105, 14,133, 80,126,232,214,208, 7, 97,230, 97,139,195,126, 12, 39,133,135,133, 87,134, 63,142,112,136, 88, 26, -209, 49,151, 53,119,209,220, 67,115,223, 68,250, 68,150, 68,222,155,103, 49, 79, 57,175, 45, 74, 53, 42, 62,170, 46,106, 60,218, - 55,186, 52,186, 63,198, 46,102, 89,204,213, 88,157, 88, 73,108, 75, 28, 57, 46, 42,174, 54,110,108,190,223,252,237,243,135,226, -157,226, 11,227,123, 23,152, 47,200, 93,112,121,161,206,194,244,133,167, 22,169, 46, 18, 44, 58,150, 64, 76,136, 78, 56,148,240, - 65, 16, 42,168, 22,140, 37,242, 19,119, 37,142, 10,121,194, 29,194,103, 34, 47,209, 54,209,136,216, 67, 92, 42, 30, 78,242, 72, - 42, 77,122,146,236,145,188, 53,121, 36,197, 51,165, 44,229,185,132, 39,169,144,188, 76, 13, 76,221,155, 58,158, 22,154,118, 32, -109, 50, 61, 58,189, 49,131,146,145,144,113, 66,170, 33, 77,147,182,103,234,103,230,102,118,203,172,101,133,178,254,197,110,139, -183, 47, 30,149, 7,201,107,179,144,172, 5, 89, 45, 10,182, 66,166,232, 84, 90, 40,215, 42, 7,178,103,101, 87,102,191,205,137, -202, 57,150,171,158, 43,205,237,204,179,202,219,144, 55,156,239,159,255,237, 18,194, 18,225,146,182,165,134, 75, 87, 45, 29, 88, -230,189,172,106, 57,178, 60,113,121,219, 10,227, 21, 5, 43,134, 86, 6,172, 60,184,138,182, 42,109,213, 79,171,237, 87,151,174, -126,189, 38,122, 77,107,129, 94,193,202,130,193,181, 1,107,235, 11, 85, 10,229,133,125,235,220,215,237, 93, 79, 88, 47, 89,223, -181, 97,250,134,157, 27, 62, 21,137,138,174, 20,219, 23,151, 21,127,216, 40,220,120,229, 27,135,111,202,191,153,220,148,180,169, -171,196,185,100,207,102,210,102,233,230,222, 45,158, 91, 14,150,170,151,230,151, 14,110, 13,217,218,180, 13,223, 86,180,237,245, -246, 69,219, 47,151,205, 40,219,187,131,182, 67,185,163,191, 60,184,188,101,167,201,206,205, 59, 63, 84,164, 84,244, 84,250, 84, - 54,238,210,221,181, 97,215,248,110,209,238, 27,123,188,246, 52,236,213,219, 91,188,247,253, 62,201,190,219, 85, 1, 85, 77,213, -102,213,101,251, 73,251,179,247, 63,174,137,170,233,248,150,251,109, 93,173, 78,109,113,237,199, 3,210, 3,253, 7, 35, 14,182, -215,185,212,213, 29,210, 61, 84, 82,143,214, 43,235, 71, 14,199, 31,190,254,157,239,119, 45, 13, 54, 13, 85,141,156,198,226, 35, -112, 68,121,228,233,247, 9,223,247, 30, 13, 58,218,118,140,123,172,225, 7,211, 31,118, 29,103, 29, 47,106, 66,154,242,154, 70, -155, 83,154,251, 91, 98, 91,186, 79,204, 62,209,214,234,222,122,252, 71,219, 31, 15,156, 52, 60, 89,121, 74,243, 84,201,105,218, -233,130,211,147,103,242,207,140,157,149,157,125,126, 46,249,220, 96,219,162,182,123,231, 99,206,223,106, 15,111,239,186, 16,116, -225,210, 69,255,139,231, 59,188, 59,206, 92,242,184,116,242,178,219,229, 19, 87,184, 87,154,175, 58, 95,109,234,116,234, 60,254, -147,211, 79,199,187,156,187,154,174,185, 92,107,185,238,122,189,181,123,102,247,233, 27,158, 55,206,221,244,189,121,241, 22,255, -214,213,158, 57, 61,221,189,243,122,111,247,197,247,245,223, 22,221,126,114, 39,253,206,203,187,217,119, 39,238,173,188, 79,188, - 95,244, 64,237, 65,217, 67,221,135,213, 63, 91,254,220,216,239,220,127,106,192,119,160,243,209,220, 71,247, 6,133,131,207,254, -145,245,143, 15, 67, 5,143,153,143,203,134, 13,134,235,158, 56, 62, 57, 57,226, 63,114,253,233,252,167, 67,207,100,207, 38,158, - 23,254,162,254,203,174, 23, 22, 47,126,248,213,235,215,206,209,152,209,161,151,242,151,147,191,109,124,165,253,234,192,235, 25, -175,219,198,194,198, 30,190,201,120, 51, 49, 94,244, 86,251,237,193,119,220,119, 29,239,163,223, 15, 79,228,124, 32,127, 40,255, -104,249,177,245, 83,208,167,251,147, 25,147,147,255, 4, 3,152,243,252, 99, 51, 45,219, 0, 0, 0, 32, 99, 72, 82, 77, 0, 0, -122, 37, 0, 0,128,131, 0, 0,249,255, 0, 0,128,233, 0, 0,117, 48, 0, 0,234, 96, 0, 0, 58,152, 0, 0, 23,111,146, 95, -197, 70, 0, 3, 72,230, 73, 68, 65, 84,120,218,236,253,121,152,109,217, 89,222, 9,254,214, 90,123, 56,251, 76, 49, 71,220, 49, -103, 73, 41, 52, 66, 74,128,177,193,137,157, 52, 5, 24, 99, 99,167,120,112,151,241,227, 1,169,202,213, 3,174,110, 36,185,203, -213,118, 85, 25,131,178,236,198,116,217, 84,145, 6,187, 41,219,101,140,192,216,198, 54, 96, 37, 34, 65, 18,160, 33, 65,179,114, -188,202,241,222, 27,115,196, 25,247,176,134,254, 99,173,125,134,184,113,111, 14,202, 76, 33,113,190,124, 78,198,141,136, 19,231, -236,125,246,218,235,253,134,247,123, 63,225,156, 99, 97, 11, 91,216,194, 22,182,176,133,125,229,155, 92,124, 4, 11, 91,216,194, - 22,182,176,133, 45, 64,125, 97, 11, 91,216,194, 22,182,176,133, 45, 64,125, 97, 11, 91,216,194, 22,182,176,133, 45, 64,125, 97, - 11, 91,216,194, 22,182,176,133, 45, 64,125, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22,182,176, 63, -240, 22, 93,239, 23, 66,136, 87,226,253,234, 23, 77,129,155,164, 68, 90,203,211,192, 40,252,238,101,235,175, 91,180,234, 45,108, - 97, 11, 91,216,194, 22,160,254,202,153, 0,132,148,226,182,191,249,231,222,252,119,239,253,134, 91,255, 68, 20, 9,245,239, 63, -241,212,135,255,206,207,125,242,127, 44,181,125,232,229, 6,246,133, 45,108, 97, 11, 91,216,194,254, 48,153,184, 94, 68,251, 10, - 68,234, 2, 72,254,155,239,124,221,255,242,143,190,255,141, 63,232, 14,135,208, 89, 66,108,172,242, 27,159,124,234,210, 15,254, -227, 15,253,205, 39,174,244,127, 9,208,117,176,189,136,212, 23,182,176,133, 45,108, 97, 11,123,225,246,106,214,212, 5,144,102, -213,176,195,149, 39, 25, 95,121,134,209,227, 95, 96,244,232, 99,124,235, 27, 46,220,246, 91, 63,250, 61, 63,251, 93,111,191,248, -183,128,149, 0,232, 98,113,121, 22,182,176,133, 45,108, 97, 11,251,131, 9,234, 0,226,199,127,253,217,159,254,199, 31,223,251, -100,115,165, 65,164, 4,118,247, 10,163,135, 63,199,217, 44,110,252,251,255,254, 79,253,191,255,187,239,123,235, 63, 17,130,215, - 44,128,125, 97, 11, 91,216,194, 22,182,176, 23, 9,178,175,114,250,189, 1, 44, 3,111,248,175,254,216,230, 15,253,131,239,188, -240, 93,169,134,113, 81, 33,211, 6,209,205,119,144,108,110,240, 75, 31,126,248, 51,127,253, 39, 63,244,158,171,135,227,255, 12, - 88, 94, 66, 42,126,145,126, 95,216,194, 22,182,176,133, 45, 64,253,149, 3,245, 89, 96, 95, 2, 46,252,177, 59, 58,127,233, 95, -124,255,109,127,237,230, 44,106,140, 70, 21, 40,133, 60,119, 11,141,139, 23,121,226,242,126,239, 93,255,232,193, 31,253,245, 79, - 62,247,147, 64,191,198,234,151, 3,212, 95,161,115,195, 57,119, 23,190,124, 0,112, 73, 8,113,233,171,121,241,252, 97, 59,223, -133,125,213,172,219,197,135,176,176, 5,168,191,204, 38,129, 46,176,117,166, 27,253,233,127,253,151,110,255,111,255,216,153,214, -153,124,108, 0,139,216,186, 64,118,211,173,148,206,242,255,252,103, 31,249,223,255,151,127,247,153,191, 5, 60,195,139, 96,199, - 63,207,141,123, 91,120,188, 16, 59, 20, 66, 60,244, 2,223,243, 3,192, 61,225,219,247, 10, 33,222,247, 85,190, 57,126, 85,156, -111,112, 78,238, 9, 14,202, 93, 51,191,122, 8,184, 4,188, 95, 8,113,248, 50,188,207,201,215,231,229, 94,131,215,188,231,125, -119,191,184,181,254,238, 7, 31,226,171,220, 22,160,190,176,175,102,123,169, 45,109, 18,159, 22,239,172,181,227, 55,173,181,162, - 53,235,166, 94,128, 8,255, 19, 66, 8, 87,255, 68,212, 63,159,252, 54, 2,154,149,113,227,191,241,159,118,126,245, 31,254,153, -139,127,230,155, 54, 91,203,101,229,224,112,159,188,217, 38, 94,219,226,255,251,174,187,127,224,174, 59,182, 94,247, 67, 63,245, - 91, 63,124, 52, 40, 63,204,203,211,246,118, 47,240, 99, 47,114, 19,120, 63,240,128, 16,226,254,197,178,249,170,201, 50,220, 27, - 30,215, 3,189,218, 97,249, 41,231,220,253,193,113,249, 82,192,253, 46,224, 3, 47,225,239, 30, 0,190,237, 85, 89,235,247,221, - 61, 93,235,239,126,240, 85, 91,235,238,190,187,231,179, 62,239,126,112,145,245, 89,216,194, 94, 37, 80, 23,128,104,165,234,174, -191,251, 29, 55,255,189,239,127,203,230,221, 75, 89,156, 88, 33, 61, 96, 75,233, 31, 66, 32, 34, 53,247, 61, 82, 34,148,154,126, - 47,252,239, 44,194, 85, 78, 88, 29, 69,200,153,215,209,166,194,142, 5,127,233,219,222,248, 13, 95,123,199,198, 47,254,213, 31, -127,224,111,127,226,209,221,127, 6, 20,188,250,253,236,247, 2,247, 58,231,238, 5,222,241,114, 68,110, 11,251,178,218, 39, 94, -228,243,223, 9,220,227,156,123,199, 75,141,154,191,130,204,175,245,251,238,246,107,253,221, 15,190, 26,107,253,199,102,156,168, -247, 2,239, 91, 44,209,133, 45,236,213,139,212, 55,238,251,238, 91,127,252,175,127,211,249,111, 46, 71, 22,103, 5, 74, 10, 31, -192, 59,225, 31, 72,132, 21, 30,122, 29, 32,133,143,237,173, 3, 21,210,251,210,255, 78, 9, 33, 34, 41,212, 36, 45, 38,234,191, -115, 88, 33, 40, 70, 37,111,190,121,115,227, 3,127,239,123,255,209, 95,255,201,223,120,205,191,250,224,163, 63, 10,236,242,242, -137,213, 60,112,131,223,221,115,202,247, 31,112,206,125,219, 2,216,191,106,236,161, 16,157, 62, 36,132,120, 32, 68,242, 43,225, - 90,191,115,102, 13,220, 6,252,188,115,238,109, 47,211,181,191, 31,159,222,127, 62,123, 57,215,217,139, 95,235,247,221,253,109, -175, 18,176, 47,108, 97, 11,251,114, 68,234,105, 44,111,251, 83,175, 95,121,187, 27, 86, 84,121, 1,214,122,144,158,100,214,235, -120, 94, 76,113, 87, 73,228,218,102, 0,119,139,144,128, 13, 89,124, 1, 19,132,151,214, 3,191,148, 96, 0,229, 95,162, 44, 42, -150,146, 68,254, 31,239,254,206,191,241,246,215,157,121,211,223,252,233,143,188,187,168,204, 39, 95, 14, 96, 23, 66,220, 48,181, - 25,162,243, 31, 99,154,166,189, 43,108,246,139,104,226, 43,219,238, 7,238, 63, 45,242, 14,160,253,126,224,253,206,185,159, 10, -215,187, 6,246,151,235,218,191,191,118, 34, 94, 45, 19,239,126,240,198,107,221, 71,231,139,181,190,176,133,125,133,218, 75,233, - 83, 87,101,101,247,127,238,211,187, 31, 21,178,160,149, 24, 90, 25, 52, 27, 46, 60,236,244,223,169,165, 33, 75, 48, 21, 34,109, -122,144,183, 22,172, 61, 65, 86, 41,193,230, 96,199,224,114,160,240,223,187, 50, 60,223,225,156,165, 50, 22, 93, 24,254,198,159, -123,251, 61, 31,184,239,207,253,219, 91,182,186,223, 27, 96,255, 21,237,183, 23, 66,188, 31, 95,211,156,141, 86,238, 93, 44,159, -175,104,251, 54, 33,196,187, 94, 72, 42, 93, 8,241,174, 19, 17,245,123,190, 90, 63, 20,241,238, 7, 23,107,125, 97, 11,251, 67, - 22,169,227, 96,255, 61,255,238,201,191,253,159, 62,187,247,189,175, 63,147,221, 44, 64, 90,231,108,216, 22,176,206, 67,246,168, -180,242,107,111,234,124,205, 15,126,203, 29,183, 53,162,134,180,214,130, 82, 62,182,182, 22, 87, 14, 16, 74, 32, 47,190, 5,185, -113, 7,162,123, 6,209,232,130, 46,176,195, 93, 92,255, 10,118,247, 81,208, 99, 16, 25, 14,131,113, 96, 7, 37,223,252,198,155, -110,250,181,251,254,220,207,252, 23,239,253, 55,234,139, 87,142,127,145, 41,121,239,149, 2,246, 75,206,185,247,207, 68,108,119, -189, 28,175,123, 10, 35,250,161,151,137,105, 61,203,122,126, 73,237,102, 47,199,107,188, 26,231,123,226, 56, 95,208,235,189,132, - 8,249,126,166,132,179, 21,231,220, 93, 95,173,181,117,241,238, 7, 47,185,251,238,126, 73,107,221,221,119,247,181,215,247, 85, - 72,221,159, 32,218,189,106,239,187,176,133,125, 53,128,186, 1,134,192, 23,126,243,137,193,143,255,230, 19,131, 44, 68,203, 39, -109,237, 59,222,188,249, 87,191,247,109,183,158,109,202, 68,106,235,124,234, 61,207,113,197, 16,204, 16,245,218,111, 38,122,219, - 95, 64,221,250,141,215, 77, 33,184,131, 39,209, 79,252, 58,230,169,143, 32, 84, 2,206,225, 4,148,163,146,215,158, 91, 91,250, -183,255,195,247,252,227, 63,249,195, 63,127,176,119,156,127,144, 87,126, 32,204,203,194,200, 13,192,246,206, 16, 1,221,117,202, -239, 47, 49, 77, 13, 31, 94,231, 53,126,108,230,111,223, 47,132,184,127,230,117,223,201, 9, 70,119,120,205,247,189, 16,246,190, -115,238,157, 33, 26,189,237,197, 30,215, 43,113,190, 55, 56,215,247,132,215,157,221,204,191, 20,166,248,141,236, 36,128,175,124, -149,239, 13, 47,120,173, 7, 32,191,254,245,189,239,238,233,245, 61, 1,180,238,190,187, 63,112,138,227,240, 78,119,223,221,247, - 92,231,237,222, 27,142,237,158,240,184,235,122, 78,199,141,222,119, 97, 11, 91,128,250,212, 44,144,227, 7,175,244,153, 84,189, - 39,146,174, 78, 8,190,230,125,127,254,181,127,231,135,239,190,229,110, 83, 66,105, 12,174, 42,112,249, 8,116, 1,145, 35,253, -206,191, 73,244,182,239,127,254,168, 97,245, 22,226,213,191,138, 60,243,102,244,199,127, 26,164,241,144, 47, 4,229,168,226,205, -175, 57,187,254,227,255,245,221,247,253,197, 31,251,213,239, 5,158,126,133, 65,125,118, 35,127, 73,155,132,115,238, 30,224,231, -159, 7, 20,110, 11, 81,225, 59,111,192,182,174,123,171, 1, 30, 8, 45, 90, 63,117,131,168,234, 54,124,107,214, 93, 33,157,124, - 61,240,253, 41,174,159,110,173,143,235, 94,231,220,183,189,138,231,123,218,185,126,224, 15, 1,176,126, 57,237, 5,173,245, 0, -190, 47,252,250,222,119,247, 59, 78,244,194,223,115,157,231,223,118,131,227,122, 39, 47,172, 77,175,126,223,247, 4,178,223, 67, -139,203,186,176, 5,168, 95,231, 94, 6,170,240, 96, 6,208,213,205,235,141,239,254,169,239,191,243,125,223,254,218,245,215, 20, - 99,139, 49, 21, 20, 99,208, 21, 8,135,136, 33,253,179, 63,138,122,227,119, 77, 94,172, 55, 46,248,181, 79, 62,201,175,125,234, - 73, 14, 6, 99, 98, 37,120,253,185, 85,254,244,219,238,224,235,110, 63,235, 95,248,226,219, 17, 73,135,234,195,255, 0,146,200, - 31,130, 20,232, 65,193,127,249, 39,223,248,181,255,226,215, 31,254,171,191,246,241, 39,127,132, 87,168,221, 45, 0,222,189, 39, - 34,194, 23,251, 26,247,134, 13,240,100, 4,248,192,204,198, 57, 27,237,220,198,148,105,255,208,243,108,192, 63, 63,179, 17,190, -127, 38,178,188,235,196,113,191,211, 57,119,233, 58, 66, 49, 63,118, 10,160,207,190,214,189, 51,145,209,207,127,153,206,119,229, - 4,160, 31,206, 28,223,109,175,224,189,114,207,243, 68,238, 95,202,186,122,217,203, 47, 95,210, 49,249,200,251,121,215,122, 32, -213,189,248,235, 59, 15,176, 15,204,172,211,149,153, 44,193,245, 50, 5,135,167,100, 20, 46,157, 56,198,219,194,245,186,109,118, -205,184,251,238,126,219,162,255,125, 97, 11, 80,127,126,171, 83,222, 75,223,241,198,213,191,113,255, 59, 94,247,238, 11,237, 44, - 27, 15, 13,206, 20, 80, 21,225,157, 20, 66, 15,137,255,232, 95,155, 3,244,223,125,236, 10, 63,252, 47, 63,196,165,189, 62,141, - 52, 38,142, 36,210,193,167,158, 57,224, 23,126,231, 97,190,251,109,183,243,223,223,251,205, 52,211, 24,185,117, 39,209, 27,223, -129,254,253,127, 6,157, 45,192,249, 34,186, 19,252, 15, 63,240, 77,127,237, 63,127,226,201, 95,112,142,207,226, 75, 4, 47, 55, -160,255,212, 9,208,184,255, 69,190,198,109,225, 53,102, 55,163,119,157, 82,219,125,223,137,232,182,126,239,183,221,224,229,223, - 51, 3,192,239, 58, 9, 10,225,189,127,126,102,115,125,143,115,110, 46,213, 29, 82,238,239, 60,177, 57,191,227, 68, 29,125,246, -216,238,249, 50,157,239,123,102, 94,239,189,129,196,120,242, 90,189, 18,118,239, 43, 0,188,167, 70,184,161, 28,241,126,124, 57, -226, 85, 5,161, 0,232,207,187,214,131, 82,221,181,215,247,221, 15, 94,123,125,231,163,249,185,235, 91,179,241, 67, 26,190, 94, - 83,247,139,119, 63,248,190,231,201, 14,188, 15,120,255,141,162,111,119,223,221,117, 68, 63,251,190,223,198,194, 22,182, 0,245, -231, 5,244, 91,127,232, 79,156,255,159,126,236, 59,110,249, 63, 71, 54, 98, 84, 84, 96, 74, 48,218,215,209, 5,224, 12, 98,253, - 34,209,215,255,192,228,143, 31,187,122,200, 15,252,227, 95, 99,103,172,105,182, 50, 42,165,136, 99, 69,162, 4,202, 37, 8,163, -249,197,143, 62,142,146,146,191,251, 23,238,246, 17,251, 29,223,138,121,228, 87,193, 12, 32,202, 64,128, 46, 43,190,246,246,205, - 51, 95,255,250, 51,223,254,209,207, 95,253, 2, 47,114, 8,140,115,238, 61,207, 19,161,157, 4,176,119,189, 4,162,213, 79,157, -136, 46,175,219,235, 44,132,120, 32,164,183,235,136,244, 46,231,220, 59,159,167, 30,254,128, 16,226, 29,215,121,189, 75,206,185, -247, 50, 85, 51,171,123,176,223,127, 10, 88,214, 27,244,169,125,248, 51,199,246,137, 47,227,249, 94,186,222,235,189, 18, 81,110, - 88, 31, 47,217,161,123,158, 12,203,105,118, 91,184, 30,239,113,206,189,172,242,187,238,190,187, 95,252, 90,191, 22,168, 79,191, -190,215,169, 91,139,119, 63,248,128,187,239,238,249,235,123,223,221,239,124,169,138,117, 55, 2,252, 19,207,187, 63,212,213,235, -117,127, 79,112, 70, 22,209,250,194, 22,160,126, 29, 64, 23,171,173,232, 79,254,228,189,183,255,253,239,123,243,250, 91,138, 28, - 10, 81,129,245,169,118, 98, 57,121,166,171, 74,162,215,126, 11,162,189, 62,121,129,247,254,203,143,240,216,179,199,176,212,230, -120,160, 65, 24,148,128,166, 18,172,183, 34, 86,178,136,165,165, 54,255,246, 99,143,113,247, 27,110,230,158,183,220, 10, 42, 66, -221,246, 45,232, 79,254, 44, 98,227, 22,112, 22, 43, 4, 73,150,240,125,119,191,238,158,143,126,254,234, 63, 5, 14,120,113, 41, -248, 23, 42,163,121, 63, 47,161,183,120, 70, 91,124,114,234,207, 7, 62, 66,136,135,130, 52,233,123,102, 54,220, 27,109,130,239, -122,158,215,123,192, 57,247, 16,243,169,208,250,248, 78, 74,165,190,239, 70,199, 55,115,108,239,252, 50,157,239,251, 94,173, 20, -117, 56,151, 31, 59, 17,165,191, 28,160, 94,235,202,207, 70,154,179, 26,244,147,181,233,156,187,237,122, 60,136,151, 96, 47,110, -173,159, 2,232,129,105, 62,127,125,159,135,136, 38,222,253,224, 67,238,190,187, 95,204,122,126, 89, 44, 56, 20,179,235,254, 94, - 22, 61,247, 11,251, 42,182,151,210,223, 93,147,226,218,223,124,123,231,191,253,200,127,243,134, 95,248,190,215,175,190,101, 52, - 50, 24,140, 7,116, 9, 40,129, 80, 2, 17, 9,132,146,136, 72, 32,207,189,113,242, 34, 95,220, 62,226, 87, 62,249, 52, 52, 51, -223,230, 38, 37, 40,133, 65,210, 47, 12, 95,220, 29,113,105,103, 68,229, 4, 86, 41,126,253, 51, 79, 77, 15, 96,253, 14,220,184, - 7,232,112, 52, 14,180,229,206, 11,171,183, 3,103,121,229,230,176,223, 27,162,200, 23,155,226,157,221, 0, 15, 95, 4, 40, 60, -112,226,189,175, 11, 16, 47, 48, 77,123, 61,130,210, 61, 39, 0,246,133, 28,223,251,191, 76,231,123,233,213,210,223, 15, 37,132, - 89,173,246,195,231,115,158,158,199, 14,241,236,237,219,133, 16,111, 19, 66,188, 67, 8,241,190,153,199, 59,132, 16,171,225, 57, -179, 32,249,206,224,120,189,154,118,111,136,168, 87,158,247,250,190,240,136,251,133,174,231,151,219,222,255, 2,178, 35, 11, 91, -216, 31,202, 72,189, 78,183,159,251, 43,223,184,241,119,126,242,187,111,254,193,216, 42, 70,165, 5,229,192, 89,132, 3, 97, 5, - 78,137,144,122,247,127, 34,162, 4,185,114,211,228,133,158,220,237, 49, 30, 85,208, 77,167,126, 66, 29, 91, 75, 9,206,113, 52, -168,168, 74,205,133,165,136,126, 94, 77, 15,162,179, 5, 40, 40, 70,136,172,131,195,129,214,220,186,213,217, 76, 19,117,166, 40, -205, 23, 94,228,121,189,247, 6,191,155, 37,221,172, 48,195,254,126, 17,209,226, 61,215, 1, 86, 94, 64,116, 61, 23, 53, 94,135, - 64,246, 66, 51, 7,151,110,112,142, 47,234,181, 78, 30,219,171,120,190,175, 10,131, 57, 56,110, 39,107,222,239,253, 82,122,211, -195,223,190, 16,177,155,247, 57,231, 30, 96,190,196,241, 99,207,227, 72,189,114,107,253, 90,153,216,151,118,125,125,212, 60, 23, -241,191, 28,140,244,144, 57,184, 17, 99,254,158, 19,217,144,133, 45,108, 1,234,117,244,219,105,168,111,250,159,191,235,194,125, -239,186,107,227,143,150, 37,228,177,151,124,117,198, 33, 42, 75,146, 72,142,141,177, 25, 82, 18,169, 73, 7,187, 0,112,122,242, - 98,155, 75, 77, 84, 18, 99, 44, 65, 47,222, 5, 80, 15, 95,157, 0, 37, 25,142, 42,158,202,115,210,183,204, 28,170, 51,224, 42, -208, 57,200, 46,194, 89,156,181,172,182,226,230, 82, 51, 89,217, 41,199, 47, 42, 3,241, 66,106,150,161,174,250, 30,166,227, 57, - 63,192,141,201,107, 92,103, 35,185, 45,140, 44,125, 41,182,114,131, 8,240, 75,177,151,180, 73,135,231,222,245, 42,159,239, 43, - 14,234, 1,208, 63,112,226, 60,222,245,106, 78,232, 11,229,136,247, 50, 77,151,223,230,156,187,247, 36, 49,240, 69,191,238, 11, -168, 71,135,186,251,141,214,250,252,245,157,246,154,191, 92,235,249,133, 0,121,221,218,246,158, 69,244,189,176,133,189, 56, 80, -175, 83,217,241,157, 91,141,191,240, 47,191,239,214,247,125,221,102,115,115, 92, 90, 72, 35, 15,232,149, 37,170, 44, 73,166,248, -239,126,253,185, 79,221,188,156, 44,255,224, 93, 27, 55,231, 14, 68, 29,173, 87, 21,118,239,113,228,197,183, 3,240,250,243,107, -124,195,107, 54,249,237, 47,236, 66, 20,121, 16,151, 1,208,107, 93, 56,235,255, 54, 63, 24,242,154, 51,211,251,214,245, 46, 67, -209,195, 21,203,136, 48, 49,198,217,218, 41, 64,242, 10,164,223, 67,244,196,204, 38,251, 66,200,107,167,109, 94, 47,102,190,245, -151,195, 14, 95,134,231,126, 37,157,239, 11, 1,244,247,126,153, 70,238,206,170,216,241,106,125,142,226,221, 15,190, 47, 68,212, -211,181, 62, 79,108,251,178, 94,223, 16,153, 47,116, 10, 22,182,176,151, 0,234,117,186,125,243, 29,111, 93,253,225,159,248,206, - 11,255,183, 51,141, 56, 25, 89,129,104,250, 16,220,149,150,134,117,228, 9,252, 95,127,249,169, 95,190,255, 35, 59,191,244, 51, -239,184,229,221,194,133,204,187, 10,236,247, 72,226,182, 63, 59,121, 97, 41, 5,127,235,207,190,141,239,252,252,127,128,188,130, - 52, 9,211,221, 2,168, 91,192, 89, 24,140,248,218,175, 57,207, 95,252,227,111,152,252,173,221,249, 2,206, 85, 8, 83,250, 39, - 58,135, 20,142,131, 65, 62,238,141,202,254, 43, 24, 61,189, 47,168,155,213,118, 47, 47,158,236,115,163, 30,220,151, 19,112,255, -160,216, 87,218,249,158, 4,244,251, 95, 78,246,249,139, 92,111,135, 39,200,141,117, 43,215,171, 5,236, 47,100,173,191,170,215, - 55, 68,232, 39,117, 10,238, 15, 25,156, 75,167,165,243, 67,230,225,199, 88,216,194,254,144,131,186, 0, 68,164,196,107,127,228, -191, 56,247, 19, 63,252, 71,206,124,187,214, 48,138, 36, 34,149, 56,235,112, 99, 67, 43, 18, 60, 89,232,252, 47,255,139, 47,254, -244,131,143,246,254, 37, 96,159, 62,174,182, 17,238, 78, 55,137,212,129, 70, 19,243,228,135,137, 14,159, 68,172,220, 2,192,119, -124,237, 45,220,255, 95,127, 43, 63,244, 51, 31, 98,116, 84, 64, 35, 5,229,235,233,148, 21,140,198,124,221,157, 91,252,194, 15, -127, 23,173, 70,236,143,170, 26, 99, 62,255,139,136, 36, 5, 97,192, 89,156, 53, 32, 37, 79, 92, 61,218,205, 75,179,203, 43, 71, -148, 3, 95,115,190,103,102,147,125,209,209,215,151, 11, 36,190, 76,246, 21,115,190, 97, 26,219, 73, 64,127,215,151,249,176,190, -156,142,220, 11, 89,235,247,191,208, 22,179,151,201,222,121, 2,208, 23, 74,113, 11, 91,216,140,201,231, 1,245,205, 31,251,206, -243,255,248,221,127,244,204,183,231, 26,170,102,132,200, 20,206, 2, 35, 67,171,161,248,141,203,195,237,187,127,242,225,191,253, -224,163,189,255, 21,120, 18,120,238,145,189,252, 17,164, 0, 19, 72, 79, 74,250, 20,187, 30, 80,125,248,199,231,222,228, 7,255, -228, 27,248,157, 31,253,243,252,208,159,122, 19,183,174,166, 52, 92, 69, 91, 26,190,233, 53,235,252,163,191,254, 39,248,173, 31, -185,151, 91,183,150, 38,207,215, 31,255,105,220,209,147, 16,167,184, 64,194, 67, 27,144,130, 71,158, 61,124, 10, 63,103,221,254, - 1,251,156,159, 79, 22,243, 43,245,248,238,249, 10, 61,223,235, 1,250, 59,255,128, 1,250, 31, 84,251,114, 94,223, 89,214,252, -251, 94, 32,160,223,182,184,100, 11, 91, 68,234,192,197,149,228,238,191,252,166,213, 63, 89,230, 22,218, 49, 34, 17,184,210,161, -114, 77,218, 82,252,243, 79,237, 63,252,127,249,133, 39,255,231,222,216,124, 8,216,199, 15,122,105,252,214, 19,253,143, 93,233, - 87,127,101,189, 25, 71,198,185,105, 19, 92,214,196, 62,253, 91,232,143,252, 67,162, 63,250, 67,147,247,121,243,205,235,252,248, - 95,249, 22,126,244, 47,106,174, 30, 12, 73,226,136,115,171,173,107,142,199,124,254,223,161, 63,253,207,161,209,244, 94,135, 84, - 56, 99, 17,198, 82,229, 5,191,248,161, 39, 62,130,215,163,127, 37, 65,253,165,108, 16,115, 41, 84,231,220,202,151, 91, 10,244, -132, 93,154, 57,190, 23,196, 14, 14,253,219, 95,169,231,251,149, 4,232, 47,149,196,248, 74,174,245,249,235,123,223,221, 43,175, -226,192,148,187, 94,194,231,241, 21,225, 88, 46,108, 97,175,116,164, 30,221,178,154,190,102, 37, 85,104,235,217,237,110,100, 72, - 74,131, 72, 5, 63,252,107,207, 60,240, 3,255,252,137,255, 71,111,108,126, 29,216, 6,142,129, 18,168, 46, 31,149, 31,251,197, - 47, 28,126, 50,142,192,229, 6,112, 8,137,239, 87,111,118, 48,159,254,223,169, 30,248, 91,184,209,222,220, 27, 54,226,136, 91, -182,150,174, 5,244,106,140,249,232, 79,162, 63,244, 35,136, 52, 65, 40,229,235,245,113, 10,149, 38,150,240,187,143, 92,185,250, -219,159,223,126, 0,175,253,254,138,128,250,137, 17,159, 47,102, 83, 57,217, 38,246,206, 63, 96,235, 96,246,248, 86,130,108,235, -151,178, 81,254, 65, 63,223,175, 8, 64, 15,210,189, 39,157,175, 87,231,189,189,242,218,245,214,250, 87,206,245,245,146,178,139, - 72,125, 97, 11, 80, 7,212,231,183,199,143, 62, 91, 26,221,108, 42,154,149,161,169, 96,160,172,251, 47,127,254,210,191,250,251, - 31,184,242,119,128, 79, 1,123, 33, 66,247,232,237,135,188,108,255,196,111,110,191,255,184, 50, 68,149,129,202,122,214, 92, 16, -165,161,213,193, 62,241, 43,148,191,248, 3,152,207,253, 34,174,247,220,233, 55,228,112, 23,251,196, 3,148,191,244, 87,208,191, -255, 79,160,209, 0, 21,121,177, 25, 33, 16, 50, 70,228, 21, 40,199,223,253,185,223,255, 37,224,241,240,254, 47, 59,168,207,244, - 45,207,218, 11,106, 47, 10,109, 72,179, 27,242,123,158, 39,210,125,181,237,253,204,215,110,223,243, 2, 62,139,247,124, 5,159, -239,245, 0,253, 33,110,220,199,253,188, 78,159,115,238, 61, 51,143,123, 78,124,102, 47,118,189,205,146,187, 14,121,121,250,212, - 95, 8, 16,222,112,173,139,119, 63,120,237,245,245,140,244, 47, 53, 91,196, 11,200, 22, 29,190,208, 8, 60,156,199,130, 32,183, -176, 63, 84,118,195,244,251,254, 64,127,252,251,254,213, 23,223,247, 67,223,178,117,239, 90, 51, 90,250,194, 94,254,236,255,246, -225,157, 95,254,220,229,209,191, 7,174, 0, 71, 33, 58,159, 5, 81, 3,140, 31,223,205,127,229, 71, 62,120,245,158,251,190,235, -226,183,233,129,134, 72, 34, 82, 53,165,176, 53,187,160,143,169, 62,252,247, 16, 73, 27,177,118, 39,114,245,118,136, 26, 96, 43, -236,209,211,184,221,207, 65,126, 4,113, 12,173,165,153,187, 21,176, 18, 87, 8,146,182,228,103, 31,120,228,243,255,249,247,158, -251, 87,248,212,123,245, 10, 68,231,247,112,237,124,241,154,117,251, 66,237, 93,204,107,175,127, 32,140, 25,125,224, 5,188,255, -189, 1, 44, 95, 17, 66, 82, 96, 89,191,111,102, 3,188,199, 57,247, 83,167, 69,172, 51, 45, 95, 43, 95,169,231,123, 3, 64,255, -182, 47,177, 76,112,219, 9, 16,121,239, 76, 84,123, 87,208, 58,184,255,249,122,205,103,198,232,206,126,198,175,184, 52,110,136, -206, 95,232, 90,191,246,250,250,177,170, 15,188,128,247,184, 55, 56, 7,239,187, 14,168,223,123, 3, 97,154,247,207, 92,183,119, -186,251,238,126,255,117, 24,239,167,181, 38, 46,108, 97,127,168, 65,189, 2, 14,126,231, 82,255,159,254,206,165,254, 7,128, 14, -190,110,126, 21,159,106, 31,132,231,156,148, 21,171,231,173, 95,253, 7,191,126,229,199,191,246, 98,243,214,239,127,203,218, 29, -227, 94,137,232, 38,144, 74,175, 52,135,131, 56, 70,196,177,103,176,239,127, 10,189,243,208,228,229,132,140, 32, 74,160,213, 62, -113,183, 2,165,193,217,140, 70,154,240,208, 99,219,135,255,247,127,242,209,251, 66,148, 62,230, 37, 76,104,115, 55,144, 70,187, - 17,104,189,152, 77, 54,168,165,189,139,233,100,171, 26,232, 30, 8, 27,255, 67, 39,192,161,222, 96,239,154, 1,136, 87,210,238, -103,126, 76,230, 59, 67,164,121,255,204,177,221,195,148,125,124, 41,108,246,119,125,165,157,111, 56,175,211, 82,198, 63,255, 34, -150,194,251, 95, 66,239,250, 61,193, 97,170, 71,133,158,166,253,126,114, 84, 46,120, 25,224,151,197,193,113,247,221,253,210,214, -250,137,154,121, 80,135,187,246,250,222,119,247, 75,189,190,181, 46,124,237,200,124, 34, 12, 99, 57, 89,114,152, 43, 21,133,231, -221,207,116,220,107, 45,152, 51,203,146,127, 63,175,174, 44,237,194, 22,246, 7, 18,212, 77, 0,110, 29, 64, 92,134,159, 21,225, - 97,184,254,208, 20, 13, 12,172,115,159,249,175,126,238,139,127,119,173, 21,253,200,255,233,142,165,243,249,113, 9,157, 24,209, - 80,211,254,117,143,224,144, 52,110,220,135,230, 0,235,160, 48,216, 94, 73,118,118,139, 47, 92, 57, 28,188,227,125,191,249,190, -227, 97,245,161, 25, 39,227,149,182,135, 2,160,191,104,210,146, 16,226,254, 25, 1,155,149,217,141,254,203,189, 16, 66,180,254, -142, 16,221,220,118,157,200,115, 54,114,123, 7,207,147,218,252,131,124,190,167,216,139,141,232, 30,248, 18,222,235, 54, 94,120, - 29,250,254, 87,193,161,187,241, 90,191, 14,195, 60, 76, 65,123, 89,174,175,120,247,131,135,238,190,187,223,203,252, 56,215,211, -132,109,222, 23,178, 4,179,207,123,231, 13, 62,207,119,133, 99, 91,128,250,194,254, 80,152,124, 30, 24,213,248,122,249, 33,126, -242,217, 17, 48, 10, 63,119,207,243,183, 5,112,220, 27,155, 7,255,236,253,143,254,191,254,249,239,239, 63,220, 72, 36,113,175, -194, 30, 87,144,219,201,171, 8, 4, 66,156,242, 8,255, 97,128,210,226,122, 26,113, 88,144,173, 44,243,224,165,227,171,223,254, -183, 31,248,219,151,182, 7,255, 38, 28,219,136, 87,142,245,254, 64,216, 92,223, 17, 6,113,124, 41,250,223,247,227, 37, 55,239, -231,133,245, 32,191, 63,108, 76,175,252, 68, 43, 63, 20,230,109,207,243, 94, 15,224,199,158, 62,244,149,126,190, 95, 6,128,124, - 47, 47,156, 92,249,126,124, 57,224, 93,175,114,231,192,116,173,191,251,193,183, 61, 95,203, 88, 80,153,123, 89,174,111,120,173, -219, 79,100,135,174,247,158,239,224,198,196, 65,191, 78, 95,226,120,215,133, 45,236, 43,213,196,245,210,141, 66,188, 44,250, 45, - 10,104, 6, 79,249, 13,127,249,155, 54,255,218,255,244, 29,231,255,244,249,165, 36,210,133, 67, 71, 2, 26, 10, 17, 73, 31,185, -203,153,247,116, 14, 12, 56,109, 33, 55,168,202, 18,199,130,158,129,191,247,161,131,223,248,255,252,242, 19, 63, 85, 25,251,113, -166,173,116,122,206,171,184, 65, 26,245,101, 58,183,151,197, 66, 42,248,100,148,120, 9, 63,221,236,129, 47,227,113,213,233,210, - 89,161,143, 7, 94,224, 52,184,175,184,243,253, 50, 93,247,219,184,150,155,240, 16, 62,221,126,248, 21,121, 94,158,109,126,250, -245,125,158,122,251,203,244,126,151,128,135,196,187, 31,188,116,131,207,126,177,243, 47,108, 1,234, 95, 34,176, 55,128, 37,224, -204, 77,171,233,159,120,231, 55,111,254,153,191,116,215,250,215, 95,232,196, 49, 78,224,156,195, 10,129,157,121, 75,233, 64, 58, -231, 91,215, 4,236,231,198,254,235, 79, 29,124,230,167, 62,178,243,203,159,126,102,248,159,128,103, 67,230, 96,124, 18,208, 23, - 55,238,194, 22,182,176,133, 45,108, 1,234,175, 92, 52, 43,128, 4,104, 1, 93,224,204,106, 59,122,235,215,223,210,254,250, 63, -255,150,213,183,191,229,124,243,236, 74,170, 90,173, 72, 36,145, 20, 82, 91,220,200,216,242,184,180,163,199,118,198,187,239,255, -228,193,239,253,246,165,193,199, 46, 31,149, 15, 1,207, 1, 61,124, 13,253,186, 61,233, 11, 80, 95,216,194, 22,182,176,133, 45, - 64,253,149, 1,245, 26,216, 37,144,226, 83,242, 77, 60,163,126, 21,216,106,166,114,173, 17,201,110,172, 68,162,173,211,185,118, -253, 81, 97,246,157, 99, 7,159, 98,239,225,235,230, 67,158,159,168,183, 0,245,133, 45,108, 97, 11, 91,216, 2,212, 95, 65, 80, - 63, 9,238,113,136,222,235, 71,196,100,250, 58,132, 8,188, 10,143, 50, 0,185,126, 62, 48, 95,128,250,194, 22,182,176,133, 45, -108, 1,234,175, 30,168,159, 4,248, 26,228,235,175,179,160,238,102,190,190, 40,148, 94,128,250,194, 22,182,176,133, 45,236, 15, -155, 69, 95,230,247,119, 51,192, 93,131,252,236,239, 22,182,176,133, 45,108, 97, 11, 91,216,151, 26,169, 47,108, 97, 11, 91,216, -194, 22,182,176,175, 44,147,139,143, 96, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22,182,176, 5,168, - 47,108, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22, -182, 0,245,133, 45,108, 97, 11, 91,216,194, 22,182, 0,245,133, 45,108, 97, 11, 91,216,194, 22,246,234, 88,244,189,127,252, 46, - 39,133,244, 10,108, 66,120,245,151,240, 63,175, 4, 35,252,164,180,201,215,249,159, 93,207,124,255,187,155, 40,211, 57,231, 38, - 42,111,254,223, 98,230,121, 39, 21,224,228,220,207,102,213,237,174,215, 87,127,218,115,103,191, 23, 66,160,132, 37, 86, 18, 37, - 98, 34, 37, 16,202, 33,227, 24, 41, 51, 86, 55,110,230, 13,111,251, 22,214, 54, 55,185,227,117,183,241, 31,254,211,127,224, 39, -255,215,159,228,169,167,158, 34,138, 34, 90,205, 22, 89, 26, 19, 69,130,181,213,117,182, 54,206,242, 23,127,224, 7,248,238,239, -249,118,112,134,159,248,135,255, 27,255,224, 39,126,130,102,187, 77,140,160, 29,199, 68,177,100,101,125,153,170,200, 89, 95, 91, -195,152,146, 72, 66,154, 54,144, 66,208, 72, 50, 4,130, 52,142, 81, 73,202, 19, 79, 62,201,239,124,244,163,108,116,187,156,219, -220,224,150, 11,231,248,212, 35,143,112,215, 91,223,202,241,209, 49, 31,254,216,199,105,116,218,228,121, 14,165,230,204,198, 38, -171,171,203, 52,155, 25, 27, 27, 27,156, 59,127,145, 55,188,249,173,172,174,159,101, 56, 46, 56,218,223,101,255,240,152,227, 94, - 15, 41, 21,121, 81, 80, 86,134,162,172,104,118, 58, 52,154, 93,140,145, 24, 43, 24, 15,118,185,185,107, 57, 39,143,105,187, 17, -149, 5, 99, 29,198,128,214, 22,173, 29,149,177,104,109,208, 90, 99,172, 65, 91,139,117, 14,109, 29,214,185,160, 32, 36, 48, 86, -224,194,181,119,128, 19,128, 16,126,125,137, 20,135,195, 90,141,181, 22, 99, 1,149,210,200,150,104,181,151,104,100,109,178, 86, -135, 36,109, 18,197, 9, 82, 66, 36, 64, 10,135, 16, 18,164, 36,138, 34,162, 40, 38,142,147,201, 35, 74, 26, 68, 73, 70,210, 72, - 73,146,132, 40,137,137,211,148, 40,142,144,145,194, 41, 57,183, 54,234,127, 91,107,131, 4,146,195, 89,235, 39, 6, 26,131, 51, - 22, 93,105,172,209, 56,163, 49,218, 96,140,193, 88,227,159, 99,173,127, 62, 6,235, 76,248,222,191,134, 53, 6, 29, 94,131,176, -238,157,115, 88,103,177,198, 98,234,191,117,118,242,179,250,189, 9, 15,107, 29, 22,139, 51,254,245,140,213, 96,131, 78,147,115, -254,125,173,245,239, 91,255, 93,248,252, 29, 2, 68,132,144,138, 56,110,144, 54, 90,164,105,147,164,209, 36, 73, 82,162,212,127, - 62, 42,138,137,227,136, 88, 41, 98, 9, 73, 44,105,196,130, 36,141, 81, 73,132, 76, 36, 50, 18, 72, 9, 50,232, 68,137,233, 14, -128, 16, 10, 34,127, 77, 80, 10, 68,236, 47, 51, 14,225,252,215,250,217, 0,198, 89, 28,154,157, 71, 63,205, 7,255,233, 79,114, -248,200,103,217,217,219,103,187,159,179,177,188, 74, 35,141, 40,139, 49,199,199, 71,180,178, 38,227, 81, 65,179,217,161,223,207, -113, 88,138, 60,199,148,154,102, 42,217,218, 92, 70, 23, 35,150,151, 58, 44,183,218, 72, 32,203,154,108,157, 57,199,246,222, 30, -170,209, 0,165,136, 4,108,108,174, 83, 86, 37,253,225,144,189,131, 3, 68, 20,177,127,120,196,202,218, 26,113,146,176,177,182, - 78,146, 36, 28, 30, 28, 34, 35,133,144,138,237,221, 29,127,253, 4,180,150,150, 56, 26, 12, 72,155,109, 16, 17, 69,161, 89,106, -119,217,189,122, 25,129, 33, 75, 21,131,222, 49,194, 90,186,157, 46,177,140, 17, 86, 83,233, 10,237, 44, 81,146,128,131, 98,156, - 19, 73,137,144, 18,227, 12,157,118, 27, 93,105,156,117, 88,173,145, 82, 82, 85, 21, 8,139,181,134, 78,171, 69, 35, 77,200,243, - 49,121,158,227,128,213,149, 21, 28, 10,149,102, 12,242,146, 50, 31,147,197,138,225,209, 62, 43,237, 6,111,122,205, 45, 36, 81, -196,225,225, 49,253,254, 0,128, 86,171,205, 51,207, 60, 75,123,121, 25,149,196,140, 43,205,110,127,192,200, 41,218,155,103, 73, -187, 43,228, 56,172,148,224, 64, 88, 17,214, 83,173, 11,102,195,186,114,215, 72,130, 73, 89,239,175, 4,252,240,216, 80, 47, 71, - 33, 64, 34, 16, 98,250,144, 82,206,125,173,239,199,147,223, 35,252,123, 58, 28,198,186,176, 95, 56,140, 11,235,222,223, 10,216, -153,251,203, 57,255,123, 23,246, 36,103, 29,198,218,240,152,254,219, 26,135, 53,150, 82, 87,104,235,208,214, 80,105,127,223,234, - 74,227, 12,225,254, 12,175, 61,139, 97, 66,133,123,240, 26, 16,194,137,235,171,166, 77,238,141,240, 57,248,207,111,230,179,144, - 32,195,191, 39, 95,235,127, 11, 17,182,208,217,207,146,185,251, 75, 8,129, 49,134, 72, 73,133,148,242, 26,176, 60,109, 3,188, -209,191, 79, 57,133,107, 64,119, 22,192,173,157,190,134,115,243,224,239,127,198,220,207,102,223,243, 36,200,207,254,253,201, 99, -154,253,157,113, 2, 97, 5, 22,139,113,194,143,118,197,160,148,165,213,238,160,203,146,131,221, 93,236, 29, 55,243,185,207, 62, -204,219,223,254,141,244,122, 3,122,189, 30,149,214, 72, 1,198, 56,148,146,220,122,243, 77,216,124,204,149, 47, 94, 98,105,185, -195,159,248,227,223,194, 63,249,103, 63, 3, 82, 33, 17, 84,198, 48,202,135, 36,205, 20, 97, 13,131,126, 31, 21, 9,146,102, 3, - 99, 52,113,218, 96,156,143, 17, 14,202, 92,210,234,192, 99,143, 63, 78, 85, 20, 56,224,230,155,111, 34,137, 21,183,220,116, 1, - 99, 12,218,106,138,170, 98,255,234, 14, 82, 10, 98, 4,151,183,175,162, 34, 73,179,149, 97,157,191,225, 70,195, 33,103,207, 69, - 28,247,122,104,237, 39,210, 38, 73, 2, 8, 50, 41,169,244, 16,107, 44,189,222, 49,121, 89,161, 84,131, 36,109,146,165, 77,140, - 43, 25, 22, 14,171, 43, 42,231, 2,168, 91, 42,109,209,149, 69,155,176,240,173,197,134, 27,196, 34,176, 4, 80,119,224,156,191, -118, 82,248,205, 75, 42,137, 16, 97,113, 74,133,146, 17, 66, 10,156, 83, 24,227,175, 73,156,117,104,117,214,104,181, 87,201,218, - 75,180,187, 75, 52,178, 22,113,156, 32,165, 64, 56,131,213, 26,167, 43,127,158, 56,164,148, 40,165,194, 6,226,127,175, 41,113, -214, 98,180, 38,170, 98,180,214, 19,128,151,113,132, 84, 10, 21, 69,147, 13, 3, 1, 66, 73,175, 85,108,167,107,201,249,157,130, - 56,181, 56,107,112, 86,227,156, 7, 94, 59,243, 28,255,240, 27, 73, 13,202, 19, 96,175, 65,126,238, 57,225,115, 10,160,110,172, -241,155,140,214,216, 0,222,214,214, 95,131, 19, 97, 12, 46,124,239,172, 63, 30,107, 29,214, 85,254,123, 51,243,254,225,186, 88, - 52,198,150, 56, 35, 40,109,137, 49, 99,202, 50, 37, 26, 39,196,113,138,140, 26, 68,113,140,138, 34,162, 40, 34,150,130, 88, 65, -150,198,180,179,152, 86, 51, 37,201, 82,162, 42, 66, 68, 2, 39,241, 91,171, 11, 87,219, 9,132,144, 8, 21,121, 48, 87, 49, 66, - 41,132,148, 19,231,205, 9, 57,183, 15, 56, 43, 17,182,226,232,185,207,241,203,255,228,239,115,245,145, 47, 48,222,239,113,124, - 52,162,213,234,144, 70,160,139, 17,199,135, 71,100,141, 6,229,184,196, 84,142,203,207,238,146,164, 41, 8,129,213, 2,103, 29, - 75, 75,109,156,179, 52,178, 6, 43,203,203,228,195, 17,157,118,155, 70,179,201, 81,175, 71, 94,150, 40, 4, 81,154,208, 89,234, -114,120,116, 68,101, 44,189,193, 0, 17, 55, 56, 30, 12,136,179, 22, 82,197,180,154, 25,227,241, 16,171, 43,142,143, 14, 57,119, -225, 2,251,135, 7, 36,113, 76, 37, 53,163,113,129, 27,107,180,137, 72, 93,130,117,150, 36,137,120,238,153, 47,210, 74, 34,172, -169,232, 29, 30,209,206, 50, 34, 41, 25,245,143,201,210,140,210,104,172,117, 68,113,140, 67, 16, 39, 41, 73,146,145,168, 24, 25, - 9,170, 42,167,170, 42,172, 53,164, 73, 76,214,109,162,164,223,188,149,242,155,187,181,142,162, 40,105, 52, 26,140,199, 57,237, - 86, 27,173, 53, 14, 75,127,156,147, 53,219,180,150,151, 72, 36, 8, 91,113,176,191,195,206,206, 30,237, 86,147, 91,111,189,141, -253,221, 29,246,118,119,177, 85,193,109, 55,157,167, 55,206,201,203,130, 72, 42,150,154, 25, 54, 47, 25, 29,237,147, 54, 26,108, -109,110,146, 59, 15,148,224,193,221, 5, 64,119,206, 33, 17,211,123, 99, 6,208,230, 64,102, 22,189, 38, 0,232,239, 45, 78,252, - 94, 4,160,226, 84,176,242,206, 65, 45, 28,238,156,195, 88,131,117,210,239, 59,206,175,243,217,123,202,225,252,239,235,251, 43, - 96,140, 49, 53,152,251,123,203, 24,137, 17, 22, 43, 44, 70, 8,164, 0,109, 44,218, 10, 34, 33, 49, 74, 97,164,194,134,253,160, -126,237,201,191,157, 99,226,174,214,120, 22,254,231,159, 89,255,216,205,161,249,244,220,221,228,124, 65, 32,164, 64, 5,240, 22, -194, 59, 73, 82, 42,164, 20, 40, 33,231, 64,126,178,109, 9, 57,247, 26,254,221,124, 80,110,141, 36,154, 5,201,107,190,226, 23, -215,181, 7, 86, 71,244, 55,136,212,153,223, 36, 79,130,182,148,226,154,232,122,250, 60, 49, 1,251,231,119, 30, 78, 7,127, 78, - 89,116,206,129,177,222,239,244,128,110,193, 25,178, 88,209,235, 15,216,189,242, 28, 34,142, 57,216,187,157, 44,107,113,101,103, -135,111,248,134,111,228, 35, 31,249, 16,206, 9, 84,156, 96, 77, 65, 49, 30,147, 40, 5,186,100,176,191,203,232,112,151, 91, 47, -190,134, 55,188,254,117,124,230,225, 71,192, 73,108, 85, 81, 85, 21, 59,123,123,156,219,216, 0, 4, 74,197, 56,235, 64,134, 8, - 17,208, 70,227,144,148,101,193,234,114,135,222, 97,202, 29,183,221, 76,171,153,129,179,108,109,108,144,143,114,158,121,230, 25, -110,185,229, 38, 46, 93,185, 74,175, 63, 4, 37, 24, 85, 21, 81,164, 40,138, 2, 1,140, 70, 67, 6,189, 30,186,204,105, 36, 17, -107,107,107,200, 40, 33, 29,141, 24,142,198,184,178,162,209,104, 80, 85,134, 92,151,244,123, 71, 44, 45,175, 33,164, 99,121,117, -131,182, 40,233, 95,185, 74, 94,150,104,107,176,206, 97,140,243,139, 94,123, 15, 87, 27,135,182, 22,227,240, 32, 18,226,183, 58, -211, 3, 32,133, 2, 33, 81,202, 3,169,140, 34, 15, 32, 74, 17,201, 24,169,188,119, 93, 25, 71,170, 82, 26,237, 53,218, 75, 27, - 52, 59,107, 52,187,171,116,151,150,201,154, 25, 73,146,160,148, 4,103, 49,101,137, 30,143,168,170, 10,173, 75,176, 6, 33, 65, - 40,127,243, 59,204,228,122,234,210,133,232,186, 66, 23, 57, 81, 28, 19, 37,254, 17, 39,137,143,198,148, 66, 40,233,211, 8,181, -119, 45,220,116,245, 42, 23,214,168, 68, 16,207,175, 47,231, 38,235,219,175,189, 0,230, 64,240,108,230,129, 63, 68, 56,147,173, -208,185,233, 90,180,206, 3,119, 0,115, 99, 60,200, 99, 45,214,106,116,216,248,107,160,183, 38, 56, 0, 86,251,231,107, 51,117, - 6,180,193, 24,141,181, 21,218, 84,126,195,179,214,191,175, 41,169, 76,129,209, 57, 66,230, 40, 21,161,164, 34,138, 36,177,148, - 52, 98, 73,100, 82,140,139,177, 34, 67, 8, 13, 78,129,241, 27,143, 63,190, 50, 56, 57, 32,164, 66, 70, 9, 68,145, 7,245, 72, -249, 1, 14, 66,130, 84, 56,233, 35,248,250, 19, 85, 8, 6, 59,207,242,171, 63,243,143,216,255,252,167, 25,236, 30, 51, 44, 28, - 42,137, 72,163, 10,103,198,236,108, 31,178,178,210,161,204, 13,182,130,222, 81, 78, 51, 75,208,214,175,151,124, 92,178,212,109, -144,101, 41,174, 42,105,119,218, 24, 99, 72,211, 20,127, 55, 11, 70,227, 49,214, 65,172, 20,105,218,192, 88, 75,169, 53, 71, 61, - 15,228, 71,189, 62,165,241,107,119,163,217,162,209,136,209, 69,197,104, 52,228,204,214, 38,101, 81,248,135,209,236,247,142,233, - 46,175,163, 13, 44, 45,111, 82,148,222,145,186,114,229, 73,218,141, 24, 87,121, 71,179,149,196,148,227, 17,173,165, 46,235,231, -207,130,133, 60, 56,185,227,113,137,181,254,254, 41,243, 18, 65, 78, 35,139,137, 99,193,242,114, 23,156,165,217, 72,145,206, 82, -149, 57,227, 81,159,238,114,151,202, 24,172, 80, 12,181,166, 40, 74,210, 36,163,219, 93,198, 97, 73,146,132,210, 88,226, 52, 67, - 8,193,120,112,204, 82,183, 75, 51,146,148,218, 34,162,132,199, 30,127,130,215,222,113, 27,105,146,176,187,125,213,191, 79,154, - 98,140,102, 92,142,105, 54, 50, 10, 45,144,206,112,124,245, 57,186,157, 38,155,155,155,148,218, 7, 60,224,131,159, 58, 43, 52, -235,244, 90, 55, 93,227, 19,199, 77,204,160,219, 36,112,115,156,132,137, 9, 24,213,192, 77, 13,100,181,243,239,127, 39, 67,150, - 15,225,157, 73, 37, 21,214,133,251,197, 74,140,116,254, 30,145, 76,157,102, 8,193,133,119,168,141, 1, 45, 12,210, 88, 36, 2, -131, 65, 98, 81, 66,224,164,192, 74,133,150, 18,171, 44,198, 42,159, 13,112, 22, 99,108,184,141,235, 96, 37,100,217,236,244,125, -166,160, 62,123,238,117,162,109,234,244, 76, 48, 44,252,207,103, 48,175, 5,117,165, 20, 4, 80, 87, 74,162,164, 66,224,113, 82, -138, 41,168,203, 25, 60,155,126,244, 2, 51, 1,117,227, 65,253, 26,143,107,226, 73,213, 62,201,233,169,247,235, 97,109, 8,116, - 48,115,233,118, 55, 23,197,207, 30,216,181,224,125,253, 72,253, 26, 82, 64,200, 50, 60, 95, 90,190, 6, 29,231, 19, 68, 56, 81, - 71,100, 22, 17,202, 15,227,254, 62,253,113, 73, 49,206,209,218,176,185,185,197,127,248,229,127,235,211,129,205, 14, 90,171,201, -245,211, 85, 73, 22, 71, 84,195, 33,105, 26,147,198,138,111,250,198,111,224,119, 63,241,113,218,173, 14, 69,233,111,102,161, 45, - 79, 60,113,137,115,103,182, 56,115,118, 19, 99, 28,113, 34,113, 56,198,227, 33,206, 58, 98, 21,147, 57,203,157,175,185,157, 51, -235, 43,172,116,151, 16,194, 71,201,207, 93,185,204,198,218, 58, 55,223,124, 11,131,162,228,145,103,158,197, 74,208,206, 17, 11, - 65,179,217,164,209,240,209,255,120, 52,164, 44,114,242,241,136,172,209,196,152, 34,128,160, 79,237, 1,116, 58, 29,148,138,201, -171,138,188, 24, 83, 22, 67,132,140, 24,136,132,173, 51,235, 28,148, 32,198, 37,198,249,205,219,123,198, 76, 0,222, 24,139,161, - 78,121, 77,197,251,165,240,145,154,148,146, 72, 37, 40,165, 60,136,199, 49, 81,164, 60,136, 40, 69,162, 34,164,130,202, 56,132, - 21,164,217, 18, 89,119,157, 86,119,141,102,119,157, 86,119,149,230, 82,135, 70,214, 32,109,164,196, 81,132, 4, 76, 89, 97,203, - 49,101,145, 83, 22, 57, 90, 23, 24, 93, 98,173,241, 11, 91,168,233,226, 11,215,214, 26,131,113, 62,205,166,171,138,168,140,168, -146,210, 71,169, 73,140,138, 35,239, 21,215,107, 81,156,178, 86,133, 63,215, 73,116, 31,126, 56,235,236, 34,102,252, 1,230,255, -237,194, 77, 87,223,251,179,158,189,113, 34,164, 16,103, 35,125,139, 49, 6, 38, 81,121, 29,129,107,156,177,193, 1, 48, 1,212, - 45,166,210,147,136,222,104,237, 35, 57,173,209,166,242,231, 29,126, 94, 71,254,214,134,148,164,209, 96,181, 7,109, 37,176, 50, - 66, 90, 9, 22,172,145, 24, 13, 82, 69, 56,132,191,143,141,241,160,110,124,186, 88, 8,133,141, 98, 68, 20, 35,226, 8,169, 34, - 31, 85, 9,137,144, 49, 78,250,235, 33,164,255,219,241,232,136,255,248, 47,238,231,139, 15,125,156,193,229, 61,138, 42, 70, 75, - 69,154,105, 98, 85,176,115,117, 64,183,213,164,202, 75,138, 81,197,160,175, 73,227, 8, 37, 37,149,118,140,243,146,102, 83,113, -246,236, 42,184,146, 36,141,104, 54,155, 84,121, 65,154, 68,168, 72, 49, 42, 10, 6,249,152,172,213,166,212,154,150, 84, 88, 96, -123,119,151,180,213, 97,231,224,144,164,213,230,232,224,128,219,111,191,131,241,120, 68, 51,105, 19,197, 49,121,175,199,210,210, - 50,151, 30,123, 28, 99, 13,253,209,136, 82, 64,211, 66,183,187, 68,127, 48, 2, 28,189,195, 93, 26, 73, 76, 51,137,177,227, 17, - 70,151,180,178, 46, 91, 27,155, 88,237,203, 52, 82, 74,156, 80, 32, 4, 75,203, 25, 69, 94,160,164, 34, 75, 83,226, 36,102, 52, -232,211,110, 54,201,210,132, 98, 60,194,150, 57, 73, 26,177,117,110,139, 52, 58,203,104,112, 76,127,152, 83, 26, 65, 20,199, 52, -178, 54,214, 88, 70,227, 28, 41, 44, 90,151, 24, 7,186,170,168,180, 65, 9, 71,169, 53, 89,146,160,157,193, 2,113,163,193, 51, -151,175,114,211,197, 11,244, 7, 62,219,152,196, 9,171, 43, 75,140,139,146,203, 59, 59,180,155,109, 92,101, 72, 34,197,238, 51, - 79,210,237,180, 89,238, 46, 49,174, 44, 90,128, 67,250, 12,145,153, 70,160,206, 90, 36,206,239,159,118,230, 94,113,204,148,127, -220, 76, 26,222,157, 90,165, 21,167,196,132, 39, 35,118, 41, 4,126,183, 17, 8, 7,114, 18,185,251,123,204, 9,137, 18,117,118, -208, 97,112,200, 16,161, 91,233,166,211,194,156, 47,223, 73, 43,188, 19, 44, 28, 2,137,117,190, 28,107, 39, 41,123, 31,108,217, -153,168,220, 90,235, 51, 3,115,101,180, 16, 27,187, 19, 25,235,218,177,176,179,251,136,131,217,232, 93,158, 8, 54,235, 20,123, -112,108,164,146,147,180,251, 92,164, 78, 56,127,102,157,162,169,153,240, 4, 99, 36,145,156, 73,148,203,107,106, 30, 83,224, 62, -153, 38,247,207,151, 51,145,185,155, 7,210,176,225, 27,227,107,144,245,215, 41,152, 79,107, 9, 53,224,204, 58, 5, 32,230, 54, -215, 27, 1,187, 16,194, 3,168, 16,215,164,249, 79, 47, 27,132,207, 86, 8, 92,248,249,197,243,103,233,102, 41,191,243,208,167, -216,190,122,153,172,153,113,233,243, 95,100, 56, 26, 33, 68,184,184,198, 96,109,197, 48,207,249,252,195,143,240, 45,111,255,122, -246,182,247,105,102, 49, 42,125,130,111,122,219,219,248,135,120, 16, 81, 82, 33,140, 99,169,213,101,167, 63, 96,111,111,143, 78, -183,141,106,103, 97,243, 54, 8, 33,136,226,136, 98,156,211,239, 91,148, 18, 36,113, 68, 94,140, 73,162,136, 34, 47, 24,229, 99, - 74, 93,146,101, 41,133,115,100,141,148,209,184, 0,160,187,212,101,117,109,157,162, 24,161,181,166,170, 10, 70,163, 1, 79, 94, -186,196,214,217,115,200,168,193,217,179,103, 41,203,138, 43, 87,175, 82,148,165, 79,165, 73, 73, 36, 99,210,216, 80,148, 35, 70, -163, 1, 85,169, 24,173,172, 82,184, 8, 93,250,141,187,190, 6, 46, 56, 89,214,129,149,179,252,139,233,162, 83, 50,154,164,182, -149, 18, 1,220, 35,146, 56,246, 41, 94,165, 2,208,199,126,115, 16,150, 72,165,164,205, 14, 89,107,153,102,123,149,102,103,133, -102,103,153,172,221, 34,105,196,164,105, 76,164,188,199, 26,197, 9, 52, 18, 26,182,229, 55,181,170, 68,235, 18, 93, 22, 24,163, -113,198,129,157,174,221,185, 18,141,181,152,144, 66, 51,198, 80, 21, 37, 82, 41,162, 52, 33,142, 35,159, 81,168,215,161, 60, 81, -198,145,211, 90, 24,115,217,163,240, 28,121, 58,152,139,144,193, 16,242,250,235, 28,161,166, 30,189, 15, 67,230, 75, 0,147,180, -186,131, 80,127,175,211,236, 30,216,235,116,125, 29,229, 79, 35,119,163,125, 93,214,104, 31,249, 27,163,253, 87,109,176,166,162, -170,124,164, 47,112,164,145,160, 17, 11, 26,141,132, 40,149,200,196, 19, 25,156, 4, 43, 8, 5, 22,227,211,139,194,133,124,170, -197, 25, 3,174, 66, 88,133,141,164,231, 45, 72,137, 19, 17, 66, 40,148, 0,116,137,176, 21,191,249,111,127,142, 75,191,255,219, - 28,111,239, 83,244, 45, 70,129, 72, 44, 89, 26,115,116, 48,166,221,202,144, 66, 48, 24, 20, 12, 6,150, 40, 86, 24,231, 24, 23, - 21,163, 66,211,105, 39,172,175,182,193,149, 40, 89,215,247, 5, 74, 70, 72, 25,129, 80,140,243, 28,164,162,172, 52,205,102, 19, -231, 28,207, 60,123, 25,149,164,244, 6, 99,210,172,197,209,241, 49, 43, 43, 75,100,169, 98,117,249, 12,101,145,115,120,116,196, -202,218, 6, 79, 63,123, 25, 21, 69,140, 6, 5,198, 10, 26,237, 14,113,218,100, 92,228, 36, 73, 68, 62, 28,208,109,183, 16,174, -194,153, 2,131, 99,235,236,121,148, 80,140,242, 10, 28, 88,171,105, 52, 82, 84,154,226, 28, 12,135, 35, 26,113, 68,179,145,176, -180,188, 68,163,217,160,219,186,157,222,225, 1,253,222, 49, 55, 95, 56,207,214,250, 10,197,104,200, 51, 79, 61,137,169, 74,202, -106, 76, 94, 89,140, 76, 17, 42, 99,123,255,144,193,113,143, 52,137, 89, 89,238,208, 78,155,232,162, 96, 48, 28,225,128,102,179, -137,138, 34,140,115, 84,101, 73,127, 92,144, 53, 26,196,141, 6, 99, 99, 89,218, 58,135,141, 27, 84,195, 1,214, 64,183,221, 65, - 27,195,206,193, 17, 89,218, 96, 88,140,137,226, 6,143,127,246,243,124,237, 55,124, 3,141, 88, 49,170, 52,218, 5,110,132,148, -152,186,140,228,175,252,196, 97,245, 32,230, 2,113,102,126, 15,159,163,122, 92, 3,222, 76, 56, 87, 66, 76,131, 3, 55,243,123, - 33,166,206,132, 13,120, 98, 77,248,254,132, 35,125, 50,211, 44,132,240,206,135, 19,128,242, 72, 43, 44, 2, 21, 2,108,131,115, -114,230,126, 83, 83, 7,123, 38,195,102,103,178, 19,117, 26,222, 57, 57,117,207,221, 52,106,247,153,130, 19, 37, 58,235, 38,216, - 88,167,200,103,203, 21, 98,166,110, 46,164, 8,145,186,242, 17, 60,245,207,165,255, 93,240, 82,164,144, 33,144,153, 9,140,133, -192, 9,143,183, 81,189,201,159, 44,218, 43,165,106,202,205, 53,155,228,105,233,240,217,159,121,242,145,247,100,106,176,173,127, - 62,253,222,191, 71,253,254,243,155,158,120,193,160, 94,127,120, 39,121, 1,179,209,255,244,216,166,155, 65,189,112,100, 36,113, - 86,211,106,166, 60,240, 43,255, 1,210, 22,189,163, 67, 86,151, 87,124,122, 92, 23,128,165, 44,115,138,178,160,217, 76,168,180, -225,173, 95,247, 54, 90,221,101, 14, 47, 63,133,176, 45,142,119,246, 88,218, 88, 39, 18, 48,236,245,104, 40, 31,101, 38,113,194, -242,242, 10, 56,239,193, 91, 99, 41,203, 2, 41, 5,121, 62, 66, 10, 69, 26,135,180,216,112, 68,150,166,140,134, 57,135,123,251, - 36, 73,202,198,198, 26,253,126, 31,139, 96,191,215,167, 24, 23,126, 24,189,144,116, 91,109, 14, 15, 15,105, 54,253,223,215,105, -154,245,245, 53,150,150,186, 12,199,158,140,214,110,183, 88, 91, 91, 99, 52, 30, 51,206,139,224, 80, 73, 4,138,141,141,117,118, -118,123, 24,227, 24,140, 74, 68,154,144, 91, 67,228,212,164, 46, 94,187,125, 74, 8, 63,214, 79,212,159, 99,120, 29, 33,144,210, - 71,226, 82, 73,164,242, 41, 35, 37, 37,113, 72,187,251,133, 43, 39,112, 39, 85, 20,136,109, 45, 26,205, 14,141,246, 18,173,246, - 10,205,118,135, 44, 75,137, 26,138, 40,246,192, 32,156,196,213,127,239, 18, 18,151,134,122,178,193,232, 10,163, 43,108, 85,249, -239,237,148,116, 54,113, 66,221,204,109,101,125,164,235,140,198,234, 18, 29,136,119, 34, 82, 68,161, 76, 32, 84, 13,240, 18,233, -252,205,118,178, 76, 53,189,153, 66,157,108, 6,156,231, 86,155,112,193, 57,246,219,225,228,111,133,207, 22, 77, 51, 78, 30,228, - 61,201,172, 94,255,245,177, 91,239, 84,212,117,206,153, 58,253,164,182,104,102,136,115,147,186,188,243,209,189,118, 88,227, 48, - 85,229,129,191,170, 2,200, 87, 56,163,137,165, 35,139, 5, 89, 18,145, 52, 36,113, 26,121,130,156, 18,224, 44,206,106, 80, 18, -108, 4,206,151, 10,132, 53,147, 40, 68, 40,135,147, 6,132, 13, 27,158, 5, 39,144,214, 66, 57,226,119, 31,252, 32,159,254,173, - 7, 57,124,106,155, 97,191,242,159,171, 42,232,180, 82, 70,189,146, 70,220, 4,231, 24, 12, 11, 6, 35, 71,146, 38, 56, 4, 69, - 89,162,141,165,221,142,105,119, 98, 90,237, 4, 73, 69, 85, 22,156, 93,223,244,196,179, 40, 38, 73, 82,140,181,244, 7, 67,154, -221, 14, 73, 35,197,226, 56, 58, 62,162,210, 26, 27, 69, 88, 4,123, 7,135, 84,186,228,226,185,155,169,198, 3, 6,210,208,108, - 47,131,244, 14, 68, 20,167, 24, 4,134, 49, 43,107, 27,104, 25, 19, 69, 9,206, 25,156,201,137,148, 33, 17, 18, 97, 99, 74, 93, -177,182,190,201, 56,175,104, 54, 27,104,107, 41,138,156, 52,141, 25,230, 37,173,198, 18, 43,221, 14,141,141, 77,132,213, 40,233, - 73,130,203,221,140,149,229, 46,205, 88,176,181,182, 76,162, 36,229,104, 72, 57, 26,177,181,182,206,112, 56,160,212, 41, 29,145, - 80,136,152,227, 97,193,234,218, 58, 23,111,186,137,118, 51,195, 85, 57,237, 44, 35,207,199,244,135, 67,178,102, 19, 21, 37, 40, - 21, 51, 30, 15, 89, 95,105,145,231, 5,221,110,151,126,191, 15,141, 22,206, 90, 84,101, 16,206, 81,141,135, 84,101, 69,167,221, - 97, 92,106,198,101, 69, 22,199,158, 67,163, 53,159,252,248, 39,120,203,215,127,131,223, 79, 43, 61,225,151, 88, 27,106,212,182, - 38,161,205,112, 70,102,234,203,215,236,205,156, 66, 40,171, 1,109, 82, 83,247, 0, 44,157, 69,216,249,108,241,228, 62, 10,165, -190, 41, 96, 6,127, 58, 68,232, 46,160,255,148,215, 51, 3,204,194, 77, 50,102, 82,133, 96,206,186,153,104,123, 38, 5, 96,231, - 3, 66, 79,144, 11, 64,125,130,228, 61, 11,234,179,239, 55, 91,127,247,100,218,153,140,241, 41,251, 72,141,125,158, 7, 60,253, - 94, 49, 19,100, 75, 1,115,193,182,156,255,156,164, 15, 80,141, 49,126,143,174, 65,177,206,217, 79,210, 1,147, 52,136, 12, 76, -102, 55, 97,190,214,185,252,147,192, 62, 33,186, 5,210, 78,164,252,135,101,165,196,104, 61,185, 56,158,128, 97, 61,121, 42,128, - 59, 76,107, 43,243,142,194,137, 15,242,100,170,223,147, 84, 39,243, 91,235, 69, 54, 95,203,241, 27,171, 68, 18, 73,159,182,145, - 82, 96,133, 96,109,109,131, 94,111, 68,111,208,103, 41,107,179,191,191, 71,111, 84,113,229,202, 21,159,102,196,161, 77, 5, 8, -250, 3,205,230,230, 25,198,163, 49, 42,242, 17,222,241,241, 17, 14, 80,237, 22, 27, 43,107, 60,122,233,105,218,235, 29,156,177, -196,113,194,198,198, 38, 82,216, 64,128,240, 17,133, 53,154,170, 40,105,100, 25, 73, 35,193, 25,141, 36,243, 44, 95,173,185,186, -179,203,112,148,179,188,220,225,226,133, 11, 36,113, 66, 99,156,227,140, 65, 1,177,148, 44, 45,117, 88, 93, 89, 38,142, 21,113, - 20,211,202, 50,146,200,131,107, 28, 69, 36, 13,197,112, 84,144, 23, 5,205,102,147,213,149, 85,158,187,178,237, 63, 87,235,136, -100,228, 29,139, 72,121,114,146, 46,200, 90, 45, 70,113,131,216, 5, 71, 75,169,105,221, 8, 25, 60,197,154,113, 45,103,202, 52, - 51,145,238, 76,237,135, 57,110,133, 13,233,114, 95,111,143,162,132, 52,109,145,100, 45,178,102,155,172,213, 36,107,101, 36,205, -152, 56, 81, 40, 37,112,194, 34,172, 7,118,159, 30,183, 8, 23, 60, 88, 55, 45,161, 56, 83, 65, 93,123, 14,117,105, 95,203,244, -233,233,105, 45,219, 71, 31, 19, 47,218, 25, 42,107,161,114, 84,194,159,111,148,120,112,143,227, 24, 23,121, 22,185, 16, 34,144, -254,106, 18, 79, 29, 97,204, 78, 14,158, 43, 43,250,223,203,122, 3,115, 51,222,117,104,240, 16, 51, 4, 79, 23,206, 13,129, 20, -243, 53,185,192, 41,246, 78,129,231, 18, 99,157,103,237,203,217, 58,191,157,166,252,172,213, 33, 93,234,192,248, 77,217,232,192, -166, 47, 13, 90,123,112,116,182, 34,141, 4,205, 68,145,165, 49,113, 38,145,137,242,124, 5,225,176,206,224,116,133,211, 62, 93, -111,173, 70, 88, 27,178, 10,102, 26,117,137, 58, 39, 42,113, 50, 6,103,137,116,201,227,159,252, 44,191,243,193, 7,184,250,197, -231,168, 14, 75,140, 16,136,200,209,106, 71,148, 69, 73, 68, 66, 81,248,200,169, 55,208, 68, 42,194, 24, 71, 81, 85, 56,103,105, - 54, 35, 90,205,132, 78, 59,195,154, 10,135, 38,141, 99,202,178, 10,155,180, 39,236, 29, 29, 30,160,226,136, 40,142, 41,170,138, -102,179,201,209,254, 1,105,171,205, 81,127,128,136, 99,138,124,204,217,115,103,136,149,100,121,101, 21,235, 96,239,224,144,229, -229, 85, 70,195, 33,165, 54, 24, 11,155, 91,103, 41,141, 1, 98,156, 19, 52,179, 6,197,240, 24,165,192, 84, 37, 10, 69,154, 52, - 40, 10, 77,171,221,101, 52, 42, 60,233,174,211, 0, 12,157,118, 43,240,111, 42, 76,169,105, 53, 18,182, 54,214, 25,151, 62, 93, - 63, 30, 14, 72,227,152, 36,203,232, 29, 31, 33,173,231,110, 12,250,125,210, 52,163,179,180,194,179, 87,118,104,116, 91, 92,221, - 59,228,232,120,192,213,171,154, 44,137,232, 54, 19,202,110, 23,231, 4, 7,123,251,140,138, 43, 40, 37, 89, 95, 91,167,153, 37, -228,121,132, 49,150, 65,127,196,104, 92, 18,167, 13,116, 89,176,113,211, 69,158,248,253, 93,186, 89,155, 60, 31,145, 32, 89, 91, - 94, 97,123,111,207,175, 45, 43,208,214,160,171,146, 47,124,238,115,220,249,230,183, 34, 69, 68,105,170, 73,198, 7, 12, 56,129, -195,206,144,211, 44,117,134,221,221, 16,212,103,156,235,122,221,123, 18,138,191,183,172,155,212,211,231, 82,240, 33,194,157,173, -113,123, 44,112,152, 26, 87,231, 0,183, 6, 86,166,105,115, 59,173,145, 79, 66,198,144,145,147, 51,169, 54,231, 60,176,206,166, - 24, 92,248,185,229, 90,231,197,157, 60,215,154,180,231,184,134, 80, 59, 9,120,103,238,121,230, 64, 61,212,215, 5,212,228,245, - 58, 16,242,191,147,160,152,225, 30,120,160,175, 51,129, 1,188,125, 77,221, 90, 27,218, 18,108,128,107,231,235, 15,194,249,200, -107,174,205, 96,190, 45,232,100,202,101,194, 50, 55,161,206,233, 44, 6, 9,210,120, 6,173,242,155,163, 54, 51,109, 65,174,118, - 42,148, 39,163, 41,144,210, 77, 60,150,250,125,167,224, 48,243,182, 62,223,129, 10,193,129, 4,180,144, 8,107, 67,132,233,194, -249, 4,172,145, 18, 37, 20, 17, 2, 37,189, 39, 80, 9,201, 96,172,217,188,112, 27,231,110,190,157,188,178,180, 90, 93,154, 43, - 77,190,235, 59,191,155, 11, 23,207,243,193, 95,255, 85,180,243, 41,111,165, 18,214,150, 54, 57,123,230, 28,130,138,172, 41, 17, - 86,225,132, 7,146,181,149, 53,226,100,135,194,129,146,130,210,104,226, 36, 69, 87, 26,147, 23, 52, 26, 41, 81,220, 32,175, 6, - 36,141,148, 86,187, 9,194, 16, 73, 73, 81, 89,118,143,142,232, 13,135, 28,143,114,132,113,172, 46,175, 50, 26,230,172,173,181, -104, 68, 17,221, 36, 98,104, 12, 81, 36,232,180, 83, 90,205, 4, 25, 37, 72, 39, 48, 85,129, 41,199,232,178,164,187,188,134, 44, - 42,242,106,207,183, 97, 89,193,202,234, 58,189,254,136,131,131, 67,226, 56,193, 58,201,104, 8,205,172,141,182, 5, 68, 49,194, -198, 36,201, 18,137, 40, 61, 97, 35, 92,179,185,245, 60,185,185,236, 52, 95,198,148, 4,226, 9,102,118,146, 23,177, 51,233,181, - 8,129,144, 49, 82, 38, 68,113,134,138, 27, 36, 73,147, 40,201,136, 26, 9, 50,133, 56,141,124, 43,154,100,194,190,245,209, 95, -132,196,206, 0, 97, 32,157, 32,144, 54, 70, 98, 67, 10,212,160,181,103,141, 87,149, 70,235, 10,140,158, 16,210,132,155, 73,119, - 91,231,249, 3,206,131,148,117, 21,165, 22,168, 72, 65,146,160,146, 24, 73, 74, 20,199, 30,232, 66, 4, 47,100, 93, 75,247, 25, -143,153,140,122,136,108,172,143, 14,228,180,181,211, 9,112,178, 6,119,144,225,239,234,122,254,220,189,228,252,249, 5, 34,242, -180, 36, 21, 62,103, 89,239, 59, 97,131,171, 9,127,245,247, 74, 38,225, 58, 89, 80,190,174, 45,132,175, 53,226,252, 17, 91,235, -143,161,217,140,201,178,132, 52,141,136, 26, 17, 68, 10,159, 59,247,209,147, 51, 62,179,129,213, 56, 91,249, 63,180, 33,131, 48, -195,125,145,148, 96, 35,140, 74,209, 20, 28, 60,254, 5,126,255,193,223,228,242, 35, 79,145,143, 12,214,231,242,233,100, 13, 48, -126,127,168, 42,223, 85,210, 31, 21,225,115, 20,148,165,111,253,140, 83, 69,150, 42, 90,153,194, 86, 5, 73,171, 73, 62, 46,233, -116, 59,228, 69, 73,171,217, 36,205, 26, 84, 14,122,131, 17, 75, 43,203,222, 1, 3,122,195, 17, 46, 74, 24,148, 22,153,182, 56, - 58,220, 99,117,165, 75,167,153, 32,149,100, 84, 24,226, 56,166,217,200,136,163, 8,107, 29, 42,142,176, 66, 5, 98,158, 36,106, - 54, 89, 94, 89,166,191,119, 5,105, 12,249,120,128,179,142,230,210, 10,227, 81, 65,167,213, 33, 47, 42,156,132,172,149, 1,208, -206,154, 20,227, 17, 73,148,179,181,186,198,250,242, 42,249,104,196,115,207, 62,141,138, 34,154,237, 22,221,141, 37,202,188, 96, -255,168,135,174, 12,166,212,140,243,138,181,173, 11,244,122,125,158,123,106, 27, 37, 12,163,227, 67,154, 74, 80, 36, 10, 99, 4, -177,176,196,194,208, 80,142, 36,202,104,156, 57,207,147,207, 61,135,146,142,245, 86,131,102, 35, 97, 92,105,191, 38, 29,200, 74, -208, 59,234,209, 89,237, 82, 86, 57, 75,155, 91,152,193,144,102, 20,145,247,250, 44,117,218,228,205, 49,135,131, 62,145,138,104, -197, 9,189,209,152,252,248,144,203, 79, 94,226,142, 55,188,129, 81, 89, 82,216, 10,165,125,135,137,213, 6, 93,213,109,150,150, - 50,148,132,132,113,147,246, 51,107,237,196,213,117,206, 33, 13,115, 96, 75,112,118,103,161, 81,214,164, 48, 57,195,236,150, 34, -236,224,211,250,245, 28, 80,138,217,123,131, 19, 29, 41, 2, 99,231, 9,123,211,192,115,210, 4,118, 77, 97,223,137, 58,136,116, -115,220, 49, 21,222,204,205, 61, 95, 76,156, 25,231,124,105, 42,240,100,167,164, 58, 55, 79,182,113,194,206,180,122, 79, 83,238, -190, 51, 40,252, 59,148,177,148,244,153, 79, 31, 4, 73, 16, 46,100, 66,163,153,125,104, 82, 31, 12,159, 65, 84, 71,234,243,233, -234,185, 30,185, 9,221,254,148, 20,252, 53,160, 30, 72, 83, 82, 32,109,125,113, 66, 43,129,180, 40,229, 38,181, 4, 51,249,176, - 93,168, 85,219,240,136, 2,152,204,151, 4, 38, 23,228, 68,195,156,147,210,111, 48,194,255,125,228, 57,208, 19, 32,168, 23, 75, -237,204, 40,225,124,187,139, 16, 56,233,189,189, 60,212,179,210, 70,134, 70, 99,156,229, 96,111,151, 15,126,240, 1,190,240,240, -103,168,116, 17,178, 10, 49,157,206, 18, 23, 46, 92, 64, 74, 65,146,196,180, 55,215,209,229, 24, 67,131, 86,167,203,153,115,231, -136, 31,125,130,170, 42,105,180, 91, 68,113, 68, 89,122,214,112, 26,197,181,115,234, 9,214, 74,209,204,154,148,227, 28,227, 4, - 7,189, 1,159,250,252,163, 24, 28,155,203, 75,188,245,141,119, 18, 75,129,144, 48, 30, 14,104, 52,252,141,107,180,102,235,204, - 38,221, 78, 11, 37, 5, 90, 27,226, 36,193, 90, 75, 62, 30, 51, 28, 14,112,206,210,233,180,209, 70,115,120,112, 76, 81,150,168, - 56, 33, 73, 18, 90,173, 22,198, 88,202,188, 32, 82,190,174, 27,199,138,170, 44,161,172, 72, 27, 25,169, 80,147,218,248,201,242, -137,179,128,177, 88,231, 35,198, 73,198, 38,172, 9,103,197,228, 14,113,225,123, 33,195,239,234, 90,152, 16, 72, 21, 17,199, 9, - 73,154,146,166, 9,113, 18, 17,199,145, 79,187, 43, 57,195, 75,179,158, 63,237, 0, 33, 39,183,146, 96, 74,228,148,248, 20, 30, - 66, 16, 57, 71, 20, 0, 59, 14,145,186, 11, 53,101,223,131,106, 38,237, 96,214, 24,164,147, 56,103, 38, 17,125, 77,178,171,202, - 50,212,168,124,186, 89,186, 4, 71, 52, 77,127, 41,233,183,163, 9,176,214,184,234, 2,123, 55, 84, 31,197,233,192, 61,155,237, -154,237,246, 8,132, 21,102,182, 30,159,149,152,253,195, 25, 7, 75,212,239,107,167, 41,191, 73, 25,172, 62,207,176, 33,155,170, -194, 20,154,170,244, 68,195, 52, 81, 40,149, 18,165, 17,178,145, 32, 18, 21,218,212,196, 36, 51, 34,173, 5,155,224,155,119,245, - 28,243, 89,204,221,141,190, 78,169,132,160,218, 57,228,227, 15,254, 38, 31,251,216, 39, 24,246,199, 20,185, 33,141, 4, 73,146, -146,196, 49,189,222,104,226,176, 15,199, 85,136,184, 44, 69, 89,161,148, 32,107, 68, 40, 5,205, 44, 69,224,104,181, 50, 70,163, - 1,105,210,160,172, 52, 74, 68, 12, 71, 5,157,238, 10, 7,135,199, 32, 37,105, 35,101, 52, 30, 17,167, 41,253,193,128, 86,123, -153,241,200,167,169, 27,105,226,217,210,198,128,243, 90, 17, 90,107, 54, 55,183,120,238,242,101,180, 5,169, 18,116,149, 83,149, - 37,103,206,158, 67,196, 9,227,193, 49,173, 44,229,224,234, 30, 24, 75,156, 54,232,247, 7,180,187,203, 12,242,156,113, 62,102, -101,109, 21,131, 33,141, 35,180,201,217, 58,179,206,230,106,135, 42, 31, 51, 26, 13, 25,133, 52,121,171,221,102,101,125,149, 94, -175, 79, 85, 20,180, 90, 45,122, 71,199, 24,107,200,178, 6, 87,175, 94,197, 90, 75,101, 13,253,241, 0, 33,161, 48, 14, 25,167, -236, 31,238,162,199, 3,226,141, 46, 35,171, 17,141, 22,141,172,205,215,189,241,117, 60,125,229, 10,165, 19,228,163,156, 40, 75, -105,100, 41,101,161,137,155, 41,187,219, 59,108,172,173, 81, 13, 70,108,172,109,240,228,193, 33, 75, 89, 70,171,221,166, 63,232, -179,181,117, 6, 13, 28,244,135,164,157, 6, 73,101, 24, 27,203,238,213,171,116, 86,150,185,233,142,219, 25,228, 99, 74,231,124, - 39, 70,101, 48,229,180,221, 82, 25, 51,233,248,240, 36,179, 41, 67,220,132,182, 77,135,153,107, 61,115,179, 44,241,128, 33, 86, -248,123, 24,107,103, 72,100, 33, 32, 56, 65, 76,155, 77,155,207, 70,207,215,166,188,197, 84,199,225,154,186,123,184,103,102,210, - 12,117,234,124,178,162, 29,115, 61,247,167,150,159,197, 76,231,143,171,157,241,105,247,214,108,249,217,123, 90,114,190, 3, 64, -136, 73,240, 44, 3, 19,190, 46,255, 73,165,144, 33,168, 82, 74,249, 72, 61,128,122, 13,232, 66,200,185,222,120,231,156,175,169, -135,112, 43,156,196,148,145,167, 66,191,156, 12,233,199,105,195,187, 56,149,252, 48,249,185,146,126, 99,149, 18,173,124, 45, 89, - 86,138, 82, 86, 24, 99,253,107,215,139,192,186,169, 83,225,172, 23,251,112, 2, 99,252,137, 68, 33,197, 61, 57,241,186, 95,175, -246,241,130, 32,135,169,185,142,110, 74,194,112,212, 41,247, 64,170, 17, 14, 37,156,143,212,133, 3, 37,112, 72, 68, 44,120,238, -153, 39,125, 47, 38,112,238,220, 57, 14, 30,125,130,178,202, 25,141,142, 65, 24,164,138,144, 50, 97,235,204, 89,206,157, 59,203, -185,179, 91,140,135, 3,180, 29,177,182,186, 66,186,180,137, 72,155,188,230,117,119,242, 75,191,242,107,180, 59, 29,178,102, 19, -109, 13, 10, 65,171,221, 33, 82,161, 85,196, 58, 84,168, 5, 58, 11, 89,163,137, 53,112, 56, 24,144, 91,131, 18,130,209, 40,167, - 17, 37,232,106,204,234,234,186, 23, 80, 17,146,115, 7,103, 41,202,146, 51, 91,103,104,196,177,111, 31, 11,139, 81, 69,178,166, -168,134, 13,221,177,188,188,140, 49, 14,231,250, 84,218,208,108, 54,189,128, 76,168,237, 39,137,160,116, 62, 29,101,156, 69,231, - 5, 75,141, 38,137, 95,127,147,108,137, 49,230,121, 91, 11, 79,227, 58,184, 19, 29, 16,214,185, 41, 16, 75, 69, 20, 39,196, 65, -168, 39,138, 36, 81, 92, 47,240, 25, 65,139, 80,139,159,118,113,136, 73,204, 42,102, 87,163,152,222,140,190, 34,229, 80, 54,154, -128,155, 13,194, 18,147,182,176, 64, 28,115,161,182,172,148,154,128,161, 79,123,227, 1,177,168,208,198,247,160, 41, 27,135,207, - 58, 10, 45, 92,222,123,151,136, 57,172, 13,121,195,201,207,167,108,213,217, 58,226, 60, 41,111,150,120,106,197, 60,249,116, 34, -236, 81,111,112, 97,183, 17,110, 74, 84,173,137,116,132, 99,117, 53,243, 93, 87,232,178, 66,235, 10, 83,148,216,178,164, 42,115, -156, 51,168,180,141,138, 64, 68, 2, 17, 73,156, 82,160, 60,175,192, 10, 91,187, 74,129, 70, 81,103, 76,152,219,248,166,169, 74, -233, 51, 1,195, 35, 30,251,232,199,248,157, 15,124,144,253,195, 35, 48,144, 8, 73,179, 25,145, 36, 49,251,251, 3,226, 88, 97, -141, 67,107,131, 20, 2, 19,128, 33,137, 5,113, 34,145,210,146,166, 9, 73, 12,221,165, 54, 85, 85,250,171,238,240, 90, 9,206, -178,188,188, 66, 94, 26, 70,121, 65,218, 72, 41,181, 38,138, 99, 70,227, 28, 33, 35,142,142,142,200,141,193, 84, 5, 50,105,210, -233,180, 81, 74,145,101, 25,205,166, 23,183, 25,246,135,180,154, 29,134,227,156, 60,207,145,113,194,202, 74,139,172,149,145, 15, - 7, 36,174, 98,239,234,101,176,134, 72, 69, 56, 7,141,172,197,112, 56,166, 44, 11, 54, 54,214,200,203,156,173,141,117,148, 20, -172, 47, 47, 35, 29,129, 19, 19,163,171, 10,109, 12,141, 70,202,185,155, 46,114,120,116, 68, 81,149, 88,173, 57, 58, 58, 98,103, -123,155, 88, 69,108,135,175,121, 89, 32,226,152,188, 42, 57,238, 29,179,123, 52, 0,213, 64,151, 21,235,221, 54,157,165, 21,110, -191,233, 28,221,212, 59, 59, 54,141,217,223, 19,228,101,238,249, 7,177,228,169, 39,175,178,185,117,150, 51,103,206,178,187,189, - 67, 62, 28, 35,181, 23,191, 73,179,140,202,104,116,145, 19, 39, 41, 71,199,199,156, 57,123,142,194, 60,199,113,127,192, 82,119, -153,170,215, 71, 41,197,147,151, 46,177,186,185, 78,119,109,133,161,246, 89, 21, 83, 25, 76, 84,133,246, 73,131,210,158,112, 57, -213,100,112,147,108,146,169, 3, 53, 51, 21,110,154,136,191,212,189,228,206, 7, 7,206,217,153, 30,236,192, 99,177,146, 90,210, -234, 52, 78, 85,184, 67, 39,160,235,219,132,221, 4, 83,166, 68,223,186, 43,198,151,236, 8,130, 56,238, 68,119,212,108,164, 63, -219,134, 54,193,197, 25,199, 92,156,214,131,206,180,158, 63,185,213,229,124,185, 14,105,167, 89,232, 19,193,179, 82, 83,246,187, - 8,160, 94,147,230,164, 82, 56, 53, 45, 55,213,156,159,169, 64,207, 52, 48,136,230,210,170, 39, 90, 10,148,148, 19,146,211,105, -253,236,215,245, 94,194, 71,110,165, 36,114, 62,149, 26,107, 67, 18,122,183, 43,173,209,122,190,197,102,182, 13,192,217,169,130, -143,181,150, 40,138,230,179, 8,245,113, 58,231, 25,186,110,170,120,197,132,157,233, 38,164, 35, 85,115, 5,132, 35, 22, 46,124, - 31,180,146,116,137,181, 99, 42,237, 23, 80,220,236,178,182,177, 73,119,123,151,178, 44,124,141,133, 58,171, 96,121,250,233,167, -248,236,103, 62,205, 31,255,250,187,216,221,121,142,118, 2,113, 18,179,185,118, 30, 11,188,249, 45,111,241, 17,115, 81,128, 32, -168,173, 89, 42, 99,137,226,120,114,158, 8, 73, 28, 39,147,158, 95,165, 36, 85,169, 39,192,149, 37, 49, 78,107,150,186,109,202, - 50,103,117,105,147,223,251,212,103,217,217,221,231,246, 91,111,166,217, 72,112,198, 80, 22, 5, 50,106,248, 62,248,224,237,225, - 44, 69, 62,166,211,234, 32,149, 98,117,117, 21,107,161, 44, 53, 66, 40,242,188,192, 85, 21,113, 18,227,170, 18, 97, 12,121, 49, -196, 40,137,168, 12, 50,139,161, 10,139,209,213, 92,138,144, 46,226,198, 55,218, 11, 1,251,208,235,132, 84,158,121,174, 98,133, -138, 37, 50,150, 19,162,157,175, 23,157, 80, 95,154,112, 45,166,137,232,233,205, 87, 31,167,155,130, 13, 65, 96,200,121,132, 85, - 54, 66,165,177, 7, 60,235, 60,192,107,141,171, 74, 79,182,155,244,121,187,192, 12, 15,206,181,117, 8, 99, 48,149,191,225,141, -214, 68, 73,130, 50, 17, 50,138,144, 74,226,130, 3, 44,230,116,212,196,233, 98, 76,142, 57,103, 68,156,162,181, 48,219, 66, 39, -194, 61, 90,215, 23,235,141, 67, 76,196,110, 12, 86,155, 73,219,155,173, 52, 78, 91, 76, 85, 98,170, 10,171, 43,223, 45, 80,149, -152,178,196,149, 5,186, 42,137, 19,127,127, 42, 50,148,244,217, 46, 33, 3,184, 7,130,164, 19, 39,210,140,245,106,112, 39, 4, -158, 16, 88,167,176, 46,231,202, 99,143,242,192, 47,254, 27, 46, 63,254, 69,144,130, 40, 82,180, 82, 69,156, 8,142,143,135,196, -145,240,107, 29,129, 20,202,139, 4,197, 18,107, 45,113, 44,137, 34, 72, 98,104,183, 99,186,221, 22,198,104, 6,253, 62,157,118, - 23,109, 28,141, 52,165,200, 75,146, 70,139,163,163, 35,132,148,164,141, 12, 25, 69,148, 85, 69, 89, 85,196,105, 70, 53,202, 25, -143,134, 68,137,162,221,206, 72, 98,197,250,218, 26, 82, 70, 28, 29,245, 16, 82,209,136, 61,207,165,168, 52, 89,171,133,113,222, -153,232, 29, 31,161,170, 49,123,219, 87,168,202,130,172,145,225,149, 55, 65,107,205,120, 56,100,109,121,137,225,241, 49,183,221, -118, 43, 70, 87, 52,162,152,241,113, 31, 41, 32, 74, 98,198,165,102,255,224,144,243, 23,206,179,177,185,193,195,143, 93,226,240, -232,128,141,149, 21,168, 52,135, 7, 7, 12,135, 67,172,241,153, 54, 99, 53,105,150, 50,172, 52, 69, 85,162,226,148,102, 91, 34, -147, 22,107,203,203,116,211, 8, 18,197,213,195, 49,201,170, 34,139, 44,221, 36,229,117, 55,159,225,112, 48,166,223, 27,251, 54, -215,245, 53,246, 14,247,232, 53, 27, 32, 97,239,232,144,245,213, 53,142,143, 15, 88,219,218,226,233,199, 30,165, 17, 41,148,144, -228,101, 73, 83, 27,206,108,108,145, 63,251, 28,174,210,116,155, 77,242, 64,214,252,220,167, 63,205, 55,253,241,111, 38,203, 50, -164,210,152, 72,163,163, 8,167, 13,166, 50, 68,129,187, 82, 3, 97,205,142,247,117,101, 15,222, 38, 0,127, 53, 17, 85,178, 33, -210,215, 84,218,139, 91, 77,218,200,172, 13,125,164, 18, 33, 66, 29,159, 27, 72,180,205, 0,187,157, 21,123, 10, 14,224,188, 10, -222,180,253, 78, 50,163, 39,193,137,182,210, 25, 62,214,105, 45,223,147,125, 39,252,251,121, 21, 79,107, 54,191,172, 3,102, 49, - 5,238, 89, 80,143,166, 0,238,193, 93, 33,163,128,191, 74, 78,212, 27,253,223,170,186,166, 60,173,186,225,247,132,232,180,254, -192, 57, 70,222,204,247,167,157,220,245,163, 55, 95, 23,143,128, 72, 69,232,200,215,176,170,178,162,210, 30,216,171,170, 10, 23, -216, 78,234,235,214, 56,172,152,175, 73,104,173,167, 81, 95,164,124,186,179,174,179, 7,182,175,239,183,242, 23, 74,212,125, 15, -117, 45, 61,108, 74, 83,224,183, 56,234,243,115, 84, 69,193,184,210,164,173, 38,145,144,228, 69,193,167, 63,243, 89,134,163,161, -143,172,141,131, 80,231,191,237,150,155,249,214,111,249,102,156, 53,148,149, 65, 54, 51,132,138, 89, 89, 94,198,169,136,165, 78, -155,172,209, 32,105, 52, 25,141, 75,186,221, 44,244, 87, 74,132,140, 16,210,183,189, 36,113, 74, 18,165, 56,103, 73, 27, 13,198, -163, 49,210, 24,146, 0, 10, 43,157, 78, 64, 20,223, 91,190,119,120,200,104, 52,162, 50,150,241,120, 76,150,164,164, 73, 76, 20, -121,181,180, 40,108,158, 2,139, 49,149,103,236, 18, 34, 33, 41,137,227, 24,109, 60, 79, 34, 77, 83,138, 74,123, 30,131,209,147, -136,174,200, 43, 50,103,209,198,215,190,107,189, 0, 2,184, 19,212,226,156,171, 5,130,100,168, 95,205,170, 27,205,168, 28, 57, - 78,252,108, 26,181, 34, 36, 66,120,113,154, 40, 82,168, 40,164,251,235, 71, 93,179,158,220, 92,211, 27, 77,206, 68,190, 98,234, - 74,207, 69,182, 53, 25, 78,204,122,173,210,161,172,244,117,239, 16,109,251,122,113,236, 1, 48,164,231,141,214,152,154,249,235, - 28,194, 89,207, 84, 15,153, 36,129, 69, 59,139, 53, 10, 25,197,193,163,142, 38, 94,246,172,226,134,112, 39, 19, 91,243, 9,235, -211,148, 28, 39,100,190,153, 77,104, 2,162, 33,235, 64,232, 65,183,198,224,116, 96,242,107,141,169, 74, 92, 85, 97, 75,207,110, - 55, 85,137, 51, 30,216,157,174,176, 90,131,169,192, 84,190, 29,172, 82, 72,147,162, 92,138,144,241,244, 50, 9, 78, 85,134,155, -100, 76,234,207, 87,122, 14,139,179,190,206, 63,218,221,225, 67,191,252,239,248,204, 71, 63,134,172, 28, 73, 35, 70, 70,208,200, - 18,122,189, 94, 96, 44, 75,226, 64,136,243,145,186,196,106, 67,146, 70,190, 84, 34, 33,203, 50, 54,214, 86,176,206,208,239,245, -104,102,109,202,210, 32,101,196, 96, 48,164,221,238, 50,206,199,148,149, 38,109, 36, 8,169,168,180,102, 92,150, 20,186,162,114, - 80, 25, 67, 28, 75,226, 72, 18, 71,138,110,167, 67, 89,148,196,169, 98, 48, 28,177,177,177, 9,214,176,189,179, 71,218,106,161, -141, 33,207,199,232, 98, 76, 36,161,183,119, 21, 87,230, 68, 97,239, 8,101, 94, 14,246,247,200,210, 20,170,130,115,155, 27,140, - 7,125,170,178, 98,224,124,105,175,211,238,176,125,116, 76,163,217, 98,235,226,205,244,243,156,222,211,207,144, 68, 9, 23,111, -186,141,254,225, 33,253,163, 30,149,118, 68, 73, 3,165, 4,189,163, 35,202,170, 96, 52, 26,131, 84,140, 71, 57,237,229,101,110, -218, 92,193,160, 80,206, 50,234, 29,177, 51, 26, 49, 94, 93, 65,148, 99,110,222,232,226,142, 15, 89,222, 88, 71,218,138,173,246, - 58, 85,110, 25,149, 37,194,104,196,120, 72,214,200,120,250,202, 51,164,221, 54,237,149,101,178, 52,241,193, 86,156,208,239,247, -104,119, 58,244,123,125,206, 93,184, 64, 94, 22, 60,119,117,135,238,250, 38, 20, 21,253,178, 68,146,241,216, 23, 30,229,206,175, -187, 11,149,197,228, 69,137, 84,145,239,199,143,172,175,181,187,121, 80,159, 21, 31,243,130, 73,190,235, 34,214, 1,212,245, 52, -125, 95, 85,122, 42,207,106, 29,122, 2,240,204, 71,188,136, 19,169,119,230,216,230,211, 20,253, 12,169, 90, 76,245, 97,234, 54, -235, 73, 95,119,205,114,159,193, 25, 59, 3,236, 19, 69,147, 58,107, 48,231,104,187,235,102,173, 79,118,139,157,116, 10,148,172, -235,232,211,136,188,230, 45, 9, 41, 17,170,110, 97,243, 64, 46,164,240, 95,149,151, 98, 22, 65,153,147, 32,160, 51,201, 98, 50, -229, 52, 68,179, 82,115,167,121, 37,190, 53,105, 26,133, 48,219, 99, 87, 23,243, 78,213,128,159,214, 57,132,112, 40, 21, 99, 34, - 15, 42,177,142,252,133,140,171, 64,100, 10, 23,218, 26,140,176, 84,214, 77,122,207,107,229,181,105,239,174,157,122, 43,245,230, - 93,247,242, 90, 55,145,244,156,144,141,106, 86, 63, 54,164,225,125,110,212, 9,233,107,194, 88,134,163, 17, 69,165, 80, 89,138, - 3, 58,157, 46,205,102,147,183,191,237, 27,216,221,189, 66,145, 87, 62,101, 46, 28, 10,199, 82,183, 77,191,223, 39, 47, 43, 14, - 7,144,117, 52,194, 89, 34, 33,216, 92, 89, 97,115,109,141,195,254,136,195,163, 1,227,194,178,190,210, 69, 41, 77, 28, 69, 24, -103,136,165, 23,141, 1,129,140, 34,126,231, 19, 31, 39,113,130,209, 81,143, 22, 18, 17, 43, 86,150, 58, 36,169, 87, 64, 67, 69, -236, 29, 28,210, 93, 89,163,187,188,138, 41,115,159,246,181,150,102, 35, 67,196, 9,197,104,136, 16,241,244, 51,194, 6, 45,105, - 77, 89,106,164, 16,158, 24,212, 20, 28, 31,247,136,227,120,146, 86,175,170,194,147,166,132, 87,205,243,146,111,207,151,106,159, - 1,124,230,193,123, 22,204,103,123, 85,189,159, 53,253,189,144, 42,148, 53,234,250, 61,115,252, 7, 49,243,239, 89,101, 42, 49, - 43, 45,233,174, 45, 51, 79,123,198,197,180,181,210,249,243,115,194, 33,172, 3,139,231,109, 72, 9,177, 66,197,202, 51, 71,141, - 65,151, 37,186,244, 81,188, 23,105, 17,147, 62,245,186,115,192,225, 83,137, 86, 91,132, 84, 24, 85, 77,110, 80, 41, 37, 40, 57, -233, 26,153,166,224,174, 21, 80,150,179,106,138,215, 73, 7, 82,235,211,215, 90, 9,218,183,229,153,210,171,235,153,178, 12, 41, -246,130,170, 44,176,149,255,222, 25, 29, 74, 11,158, 40,136,179, 56,237,201,110,194, 25,172,136,176, 57,216, 34,198,150, 41, 42, - 81, 16,197,224,162,192,180, 23, 97, 45,137, 57, 66,159,155,187,234,110,178, 9,186,241,128, 71, 62,244, 33, 30,252,133, 95,196, - 86,150, 72, 70, 40, 11,173, 78,131,225, 96,228,179, 82, 66,129, 83, 20,133,119,232,107, 39, 33, 77, 98, 76,101,137, 19,104,164, -138,173,141, 13,148, 18,140,122,125,112,146, 36,105, 50, 30,141,124,205,185,170,104,181,219, 28, 31, 31,251,107, 30,148,235,122, -253, 62,218, 90,210,172,201,104, 92,144,151, 37,221, 86, 74,214, 72,136, 35, 73, 18, 71,244,250, 67, 84,105, 16, 8,170,170,226, - 96,111, 27, 25,197,236,238,239, 98,140,229,204,153, 45, 14,118,174, 32,108, 69, 62,232,121, 1,156,200, 7, 35,113,170, 56, 58, - 62,242, 4,189, 36, 38,201, 18,118,246,118, 40,141, 69,197, 49,205,102,139, 98, 60,102,127, 56,230,236,205, 55,163,173,101,183, - 63,100,121,105,137,118,179,201,149,103,158, 97,251,234, 30,101, 62, 70,231, 99,180,246, 12,255,225,176, 79,163,145,224,156, 69, - 91,135, 43, 43, 90,205, 22,141,164,193,225,193, 1,163,188, 98,120,184,199,197,245, 37,108, 57, 70,209,161,215, 47, 40, 86, 59, - 72, 98,142,143,250, 72, 39,232,180,155, 20,137,166, 58, 28,211,141, 5,227, 50,247,179, 18,156,101, 48,232,211,220, 88,199, 58, -199,230,217, 51, 28,110, 95,197, 90, 15, 92,173, 86,155,170,200, 57,119,102,157,209,120,196,254,225, 1,157,181, 77, 10,227,208, -121,197,222,206, 1,135,187, 7,172,110,109,208, 72, 82,242,170,244,206,158,180,126,157, 59,119, 90, 19,186,135, 24,107, 61,159, -165,214, 73, 48,117, 86,201,119,166,232,144, 89, 41,171, 10,173, 13,149,148, 84, 33,208,243,160, 45, 79, 48,205,197, 68, 21,197, -205, 52, 41,215,100,186, 57, 31,217, 77,163,121,113,162,185, 78, 4, 69, 83, 39,132, 87,200,171,107,224,245,189,232, 2,190,213, -117,242,185,125,200, 78,121, 50,215, 40,177,138,185,247,152,229, 7, 8, 57, 75,140,147,215,232,224, 83,179,255,107,102,247,204, -247, 19, 98, 29, 98, 46,213, 63,207,195,247, 55,103, 52,187, 65,158,214, 59, 39,197,172, 54,173,152,219, 84,231, 62,234, 19,233, - 66, 59, 17,119, 15,100, 1, 2, 65, 32, 14,105,253,200, 98, 76,140,142,125,196, 94,150,254,171,179, 94, 2,180, 38,207,205,138, -203, 76, 54, 56, 21,104,255, 51,169,151,201, 48,142, 16,165, 79,100,108,157,239,153, 37,212,103,156,244, 68, 58,156, 79, 97,104, -237, 61, 69,165, 98, 26,205,140, 56, 73, 56,238,245,177,214,241,216,227, 79, 80,228,101, 40,144, 26,150,151,186,220,124,243, 77, -156, 57,115,134,193,225,161, 23, 15, 17, 10,135,100,112,116,196,168,168, 24,150, 37,171,203,203, 60,125,121,151,164,217,197,138, -200,147,212, 48, 8,103, 81, 18,218,161,206, 45,157,227,184,127,204,149,157,109, 94,119,225, 38,108, 81,144, 73,201,210, 82, 23, -163, 75, 6,227, 1,113, 22,211,219, 63, 96,103,247,128,195,222,128,155, 47, 92,228,153,103, 47,179,210,237, 32,156,161,213,106, - 49,202, 75,242,162,160,106, 68,164,113,132, 53,154,124, 60, 98, 85, 42, 10, 91, 77,116,215,227,216,139,191,164,105, 74, 81,106, -146, 56, 33,137, 99,156, 0,157,123, 5, 50,240,169, 76, 6,189, 19, 24, 46,107,237,184, 73, 59,226, 73,109,253,121,237,126,119, -221,148,153,171, 19,249,117, 29, 41,242,233, 38, 15,136, 98,210,222, 49,149, 18,119,115,192, 34,102, 2,126,196,181, 45,150, 98, - 78, 1,195, 3,187,116,179,169, 98,199, 76,131,105, 96,169,135,190,120,227,136,162, 8,147,248,168, 93,151,165,207,124,216,105, - 54, 73, 4,178,163, 16,161,239, 93, 24,172, 22,161,155, 98,202, 73, 17,147, 8, 62,212,198,212,108,251, 73, 45,234, 34,166, 17, - 3,204,245,184, 78,136,137,166,126, 24,116, 85, 97, 42,141,173, 10,127,108, 85, 16,226,169, 10,108, 85, 97,117,137,209, 37,206, -148,161,204, 80,129,174,112,161, 21,205, 90,141,177, 26,233, 52,202,165,152, 76, 97,242, 12,147, 15, 17, 81,132, 16,145,119,136, - 34, 95, 82,168, 63,100, 71,125,236,179, 60, 6,129, 51,254,115,215,101,206,213,199, 62,207, 47,253,244,253, 84,123,135,126, 51, -140, 35,150, 90, 77,198,197,144, 92, 87, 40,231,163,138, 34, 47, 9,229, 79,223, 55, 28, 24,211, 4, 93,249,141,181, 53,112,150, -241,168,100, 48, 24,209,110,175, 48, 26, 21, 40,233,107,206,237,118,215, 75,232,106,223,178,101,172, 97, 52,214, 24, 99, 17, 74, -162,181,161,212,190,181, 81, 8,200, 26, 9,173,166,111, 31, 19, 42,102, 56, 28,176,182,126,134,103,159,125,150,110,183,193,168, - 40, 24,143, 70,156, 61,119,142,203,207, 60, 69,100, 43,170, 98, 68, 34,160,204,115,226,134, 64,169,132, 65,175, 79,150, 36, 68, -248,249, 15,135,131, 30, 42, 73,104,173, 46, 19, 55, 50,142,142,250,172,159, 57, 75, 20, 37, 20, 14,186,203, 43, 88,103, 57, 26, -140,120,226,210, 83, 52,148,162,127,112,236,165,169, 27,137,119,168,117, 69,163,221, 69,151, 5, 66, 72,146, 70,147, 76,197, 28, - 29, 29,209,239, 95, 37,183,240,236,149, 93,206,174,182, 88, 91,110,179, 92, 74, 26,162, 96,115,117,141,225,184,192, 40,201,122, -119,149, 65,127,128, 25,140,104, 45,101, 44,199,171, 68,251,135, 52, 75,195,176,178,136, 60, 39, 63, 58, 98,144,166,196,113,196, -202,234, 26,207, 92,122,130, 70,156, 48, 24,141,104, 55, 59, 28,247,142,185,121,245, 2,107,107, 43, 28,244,159, 99, 52, 24,210, -110,181, 25, 85,134, 72, 37, 92,122,236, 9,150,215,214, 32,176,179,231,242, 78,147, 76,152,152,215, 97, 8,197, 80, 97, 20, 70, -123, 73, 86,165, 13, 86,134,122,124, 80,132,243,221, 86, 80, 73,233, 37, 93,131, 52,181,159, 99, 32,102,100,150,231,137,114,238, - 20,254,206,220, 94, 52, 19, 57,219, 19, 76,116, 81,139, 82,213,186, 14,206, 98,141,192, 8,223,230, 92,223,143, 19,172,156, 25, - 86,131,148,243, 78,254, 9, 65,153,201, 0,150, 19,153,110, 21,244, 42,102, 63, 35,174, 27, 14, 79,247, 2, 17, 30, 88, 91,119, -212, 79,196,102,166,251,233, 12, 81,238, 70,169, 3,112,161,141, 39,104,237,205, 2,250,204,201,156, 76,145,248, 22,181,144,166, - 8,195, 31,172,192,171,126, 5,141,191, 64,134, 70, 73,129, 83, 94,141,202, 25,129, 9,253,241, 88,135,211, 38, 16,171, 66, 90, - 82,121,207, 80, 24,207, 92,159, 12, 17,112, 83,253,223, 90, 34,180,246,180, 68, 24,226,226,228,164,201, 2,171, 82,172,202, 88, - 63,115, 11,219,143, 95, 66, 68,128, 46,208,229,152, 56,130,139, 55,157,225,241,199, 31,230,201,167,158,192,184, 18,129, 1, 41, -232,143, 70,164,205, 46, 82,164, 52,162,148,172,211, 33,107,167,180,187, 93, 28,138,221,237,103,233, 44, 47,115,219,197,155,248, -228,231, 31,163,170, 52, 42, 46, 16, 34,198, 10,129,136, 34, 26,105, 10, 74,121, 39,198,149,116, 91, 75,124,253,155,222,194,209, -238, 30, 78, 88,218,173,140,179,103, 55, 61, 81,201, 57,180, 21,124,252, 19,191,207,218,218, 6,119,222,122, 43,163,113, 78,146, -181,184,116,121,155, 52, 77,216, 56, 95, 98,139,130, 8, 24,143,115,210,172,225,153,237,253, 1,105,164, 40,149,130, 88, 49, 46, - 43,210, 52, 35, 31, 23, 56, 41, 88, 89, 94, 34, 31,143,136,226,148, 82, 91,148,208, 52, 26, 13,164,146,148, 78,146, 32, 16, 78, - 35,133,195,134, 60,135, 17, 98, 34, 60,115,163, 41,121,167,105,250, 79, 0,181, 78,109, 9,139,148,222,201,137, 20, 33, 5, 47, -136,148, 67, 5,221,117, 33,221, 36, 17, 52, 59,107, 64,204, 42,186,213,125,175,167,100,139,220,132, 22, 26,234,207,190,138, 18, -110,134,112, 92,118, 94, 29,177,230,107,212,195, 95,162, 56,154, 68,236, 58, 8,220,216, 32,213,234,163,231,169, 64, 70, 45, 41, - 59, 81,142,146, 18, 41, 3,167, 36, 73,188, 44,173, 82, 65,200, 69, 76, 68, 51,188, 24,142,241, 29, 5,225,181,117,237,216, 26, -235, 25,235,101,221, 78,228,133,118,180, 30, 97,170, 10, 93, 21, 1,192, 13, 46,200,184, 98, 43,172,245,145,186, 13,204,127,103, - 76,232,131, 15,142, 49, 48,150,144,229, 21,201, 96, 76, 34,251,196, 26,168, 52, 52, 50,136,163, 48,176, 69,214, 77,245, 30,228, -101,136, 84,144,148, 50, 1,145, 32,141,166,216,219,229, 87,127,250,103,120,238, 11,143, 32, 68, 68,156, 8,210, 52,161,168, 52, -163, 97,133,239, 56, 86,140,243,106, 34,209,233, 73,134,254, 90,107, 12, 73, 36,104,181, 82,154, 89, 66, 85,149,244,122,125,146, -164, 69,105, 44,227,178,164,153, 53, 49, 78,144,181,219,244, 71, 99, 92,152,180, 40,132,161,215, 31,144,100, 25, 42,142,169,180, - 97,127,119,159,205,205, 85,218,141, 6,205, 56,193, 86, 6, 41, 85, 96,162,183,232, 29,239, 98,117,133,165,203,246,246, 21,214, -214, 87, 57,218,187,130, 45,134,228,225,126,234,231, 35,150,151,151,193, 57,138,145, 23,110, 90, 89,219,240,221,205,105, 66, 44, - 44,203, 43, 43, 20, 85,133, 76, 82, 46,220,178,206, 96,152,211,106,117, 89,107,181, 65, 73,158,188,252, 28, 90, 56, 92, 51, 35, -215,154,229,243,103, 17, 90, 51, 56, 62, 70,139, 24, 34,133,118,150,180,153,146,143,251,236, 30, 28, 16,225,136,133,244,217, 34, - 1,218,228,228,227, 8,105, 97,101,125,149, 74, 23, 28,244,142, 88, 95,222, 0,171, 48, 68,100,203,203,236,236, 94,197,198,138, -172,213, 68, 45, 47, 35,198, 57,241, 96, 76, 55, 85, 68,229,152,225,113,159,164,213,166,153, 89,178,118,155, 72, 74, 6,199, 3, - 63,199,193, 41,134,163,146, 86, 35,227,236,250, 42,207,108,239,209,108, 55, 49,145,164, 40, 10, 80,146,237,103,159,101,253,220, - 89,239, 88, 6, 57, 86,103,237,156, 38,121, 77, 0,115, 98,218, 33, 37,156,243,140,110, 87,183,126,250, 44,144, 69,214, 77,174, - 65, 3, 67, 35,165, 37, 82,214,183, 21, 90, 79,128,158, 37,224,205, 42, 59,217, 73,180,234,230, 2,138, 73, 38,121, 38,133,238, - 78,200,181,214, 25,205,186,244, 59, 87,235,159, 12, 77,154,200,197, 77, 2, 17,127,142, 97, 98,100,157, 45,228, 90, 80, 23,129, -224, 43,103, 34,109,159,110,119,215,148,186, 39,228,216,192,145,145,130,160,134, 23,218, 90, 29, 8, 25, 50,212, 42,240, 93,130, - 24, 77, 13,234,118,102,234,105,116, 93,241,118, 78,100, 85, 79,148, 71,231,164,175,197,137,180,128,240,180,126, 55, 51,130,213, -111, 88,126, 90,142, 49,198, 19,121,140,157, 68,228,174,142,176, 3,233,166, 38, 49,216, 25,121, 89,105, 45, 24, 95, 95,112,147, -246, 56, 49, 73, 91,186, 48,124,160,238,123,244,100,115,255, 1, 72,100,208, 44,150,104, 36, 43,235,231,208, 42,163,116, 10, 39, - 21, 73, 26, 81,149, 37,105,234,199, 71,222,121,231,235,120,234,217, 39,233,245,119,189, 76,169,138,120,221,107, 94,203,219,223, -246, 54,142,143,142,137,170,130, 84,217,112, 30,128, 76,232,118,186, 40, 41,120,243,155,222,200,175, 60,248, 17,100, 35, 67, 74, - 73,169, 53, 69, 49, 38,142, 34,207,112, 45, 42, 70,253, 30,253,222, 17, 66, 87,220,113,241, 38,246,246,246,144, 18, 86, 86, 87, - 88,234,118,112, 66,176,178,182,134, 72, 26,220,116,203,205,140,134, 99, 42,171,121,228,210, 19, 24, 41,201, 15, 11,242,113,193, -153,141, 45, 46,108,172,209,109,183,201,203, 49,101,208,255, 30,246,123, 20, 65, 3, 62,175, 42,146, 52, 33, 73, 98, 70,195,145, -175,175,231, 37, 27, 27, 27,196,113, 76, 89,110,211,202, 34,100,236,111,186, 66, 87,164, 74,129,173, 60, 9, 43, 48,155,167, 98, -135,238, 90,176,190,102, 40,207,141,148, 0,125,125, 82, 73, 71, 20,121, 89,217, 72,133, 62, 77, 85,179,238, 79,146, 85,174, 67, - 78,153,212,218,221,169, 60,154,201,219,219, 16,225,215, 58, 49,202, 59,142,136, 80,182,113, 83,233, 75,159, 38,155, 97,157,198, -177, 39,113,233,192, 32, 15, 4, 59,107,140,175,181,219,233,100,183,122, 74,155,255,220, 60, 33,210,196, 49, 70, 87,196,113, 60, - 33,214,249,238, 29, 49,153, 42,231,140,193, 86, 37,186,244,132, 61,109, 60,247,196,106,141, 46,125,109,220,134, 90,191, 53, 26, - 99,198, 62,181,110, 53,194,250, 44,144,215,101,215, 56, 91,226,156,158,240, 77, 68,221, 71, 89, 59,186,214, 96, 29, 12,135,218, -119, 61, 4,209,145,108, 60, 34, 26,117,144, 89,138,140, 19,100, 28,251,169,131, 42,158, 76,101,115, 42, 66, 69, 96, 85,140,136, - 19, 95,230, 25, 15,249,216,127,254, 85,126,239,193,223,192,228,185,151, 73, 13, 65,192, 81,111,224, 51,119,218,247,181, 87, 6, - 95, 6, 8,174,130,196, 79, 62, 76, 83, 95,130, 57,115,102,131,162,244, 19,204,242,194,176,214,109,177,179,191, 71,156, 54,176, - 2,146, 70, 6, 66, 82,150, 37, 42,146, 33,141,107,136, 66,175,121,162, 34,158,126,230, 57, 26,169, 34,142, 20, 73, 28, 81,228, - 57,105,154,122,173,244,178, 36,107, 54,217,190,122,133,243, 23,111,225,201,103, 46, 35,133,164, 42,114,142, 15,246,200,226,136, - 72, 66, 62, 24,177,177,190,238,117,224, 7, 3,162,164,201,109,119,188, 6,237, 4, 66, 37, 84,206,178,178,186, 68,146, 36,164, - 77,193, 56,207,217,221,221,101,235,204, 57,150,150,150, 56, 58, 62,226,234,238, 30,105,203, 75,184, 42,227,216,216,220,192, 22, - 57,207, 61,251, 12,166,210,180,187, 75, 20,121,142,112,142,131,189,109,242,209, 49,194, 25,136,125,215,143,169, 52,135,251,251, - 96, 45,113,236,219, 48, 15,143,253,192,151,181,181,101,198,199, 3,150,151,151,216,223,217,102,109,107,147,141,141, 45,170,178, -160,204, 43,100,146, 80, 84, 37,157,181, 21,162, 70,131,253,253, 67,178, 52, 99, 48, 28, 51,206, 98,214, 55, 54,216,219,221, 37, - 74, 83,122,163, 17,203, 75, 75, 28, 30, 30,179,181,185, 65,218, 59,102,117,169,197,241,209, 62,173,213, 77,202,188,162, 28,143, -121,234,137, 47,210,108,183, 41,172,161,170,253, 97, 55,109,129,246,188, 24, 53, 81, 62,171, 37,150,167,109, 98,211,122,242,164, -220,100, 21, 78, 66,164,124, 29, 93, 8,139,114, 14,105, 12,214,202, 48, 92,134,144, 34,103,206,129,118,167,132,184,117,192, 41, - 17,215, 14, 63,153,139,236,205, 36,251,102,235, 57, 17,198,143,149,214, 53,207,235,196,224,154,169,122,219, 12,246,204,206, 65, - 9, 98, 57,114,118, 96,203, 68, 1, 46, 56, 23,115,129,240,181,128,238, 68,125,174, 14, 39,173, 15, 54,164,207, 64, 57, 9,210, - 4, 65,176,186,254, 30, 90,218,234, 25,215,215,128,250,132, 5, 56, 11,198, 55,152,138, 38,130,194,149,156,103,254, 76, 52,171, -173,181,126, 76,167,118,104,163,253,112, 9,227, 38, 42, 95,147,209,146, 65,134,112, 10,240,161,191, 28,225, 9, 19,118, 42, 92, - 96,157,243, 36, 37,235,107,198,184,147, 53,202,186, 31, 61, 92, 84,234,214, 33,159, 66,180, 78,161,146, 14,157,245,179,244,199, -154,149,245,117,142,118,198, 56,231, 63,172,163,195, 30, 56,193,206,206, 62, 91, 91,231,121,250,233, 39,177, 54, 39,141, 18, 58, -105,147,118,214,196,152,138, 36,145,140,134, 5, 73,214, 34,138,154,116,151, 87,216,223,189,202,254,246, 54, 23,206,156, 35,146, -138,188, 40,105,100, 13,142,142,123, 68, 74,160,100,143,170, 44,233,133, 25,225,207, 92,190, 76, 57, 30, 66, 89,145,231, 37, 42, - 74, 88, 89, 94, 33,142, 18,186, 75, 75, 84,198,240,145,223,249, 93,142,142,123, 56,224,182,102,147,195,241,144,194, 88,140,115, - 36,192,225,225, 1,183, 95, 60, 79,132,247,246,101,172,130,162, 90,197,241,241, 33,171, 27, 41, 56, 71,150,164, 84, 70, 19, 41, -201,114,167,205, 80, 12,177, 38,100, 53,148,164,153, 54, 64, 8,246,143, 14, 73,133,165,165,188, 68,106, 61, 11,185, 86, 44,171, - 3,245,147,128,126, 90,164,126,106, 27, 74,205, 74,175, 71,177,170,186,149, 67,204, 12, 51, 56, 89, 18,154,122,148,179,228,148, -217, 18,214,245, 8,155, 98, 66, 29, 15,181,124, 41, 38, 53,192,122, 40, 69,200,103, 33,106,112,158, 84, 26, 60, 81,197, 33,188, - 8, 75, 28,161, 76,234,137, 63, 1, 96, 77,229,107,132, 70,151,216,170, 22,232,240,165,140, 90, 94,210, 68, 17, 85,161,168,194, -184, 83, 15,234, 94,170,210,104, 67, 21, 64, 91,151, 37,186, 40,124, 27, 84, 85, 82, 85,197,164, 37,205,153, 16,121, 91,239, 0, - 8,103,188, 24,140, 51,193,155, 15, 63,115, 14, 48,161,100,225,157,107, 27,102,192,215,242,178,218,150, 33,245,107, 57, 28,244, -201,142,142,105,119,186,180,218, 29,154,237, 46, 89,179, 69,146,101, 68,141, 6, 73,218, 8, 45,173,126, 80,139,136, 18,108,154, - 32, 26, 41,194, 10,148, 43,121,246, 51,159,230,223,255,255,126,134,209,241, 1,105,170, 2,127, 67, 50,234,143,144, 82,162, 43, - 79, 76, 45, 43,139,157, 29,230,161, 4,218, 58, 26,169, 66, 56,199,218,234, 50,214, 24,138,178, 98,119,255,136,141, 51, 91, 28, - 15,135, 62,174, 19, 2, 99, 44,237,118,155, 60, 47,195,166,107,137,227, 38, 69,153,131, 16,164, 73,194,115,207, 93,241, 78,132, -177,164,177,164, 44,198,172, 46, 47,161,171,138,237,157, 29,206, 94, 56,207,222,206, 14,141, 70,131,227,163, 3, 70,253, 30,235, - 27,171, 28,236,238, 16, 69, 94,179, 34, 81, 17,205,172, 65, 85,229,228,121,201,210,242, 42,155,103,207,145,107, 67,145, 87, 24, -109,232, 44,117,201,210, 6, 8,199,246,206, 54,103,207,158,231, 53,183,157,197, 57,201,211, 79, 63, 75,207,228,172,159, 63, 3, -218,225, 42,203,250,106,151,157,171, 87,121,238,217,167, 57,123,238, 76,168, 99, 23,196, 42, 70,151, 99,150,187, 45,122,102, 68, -171,217,166,149,101, 60,251,212,211,129, 59, 97,217, 90,107,179,220,105, 81,153, 10,163,225,240,104,196,153,141, 51,180, 54, 19, - 14,123,187,156, 59,119,129,131,221, 29, 84,156,208, 93, 94,166,221,105,209,239, 31,179,114,254, 2, 59, 79, 62,197,153,243,231, -201, 29,236,238,237,146,181, 58,236,109,239,114,241,166,243, 28, 28, 28, 18, 37, 17,133, 30, 99, 5,152,170,242, 67,110,178,140, -188, 44, 25,228, 5,227,193, 49,141, 70,139,126, 81, 80, 73,193,229,167,158, 97,101,107,147,202, 84,190, 21,141,105, 84,170, 66, -118, 75,213, 68, 47, 57, 25,127, 53,193, 3, 47, 59,108, 38,160, 62, 91,234,141, 34, 63, 21,208,205,212,184,149,155,145,138,197, -157,168,175,203, 83, 39,114,214, 17,244, 60,184, 50, 23,169, 11,226,185,153, 36, 53,160, 43,165,136,102, 37,151,107, 41,230, 16, -245, 75, 41,174, 25,170, 50, 87,122,158,145,140,230, 52,210,156,184, 78, 71, 80,157,249,152, 8, 85,249,254,118, 27,178,134,210, -132, 26,187,146,126, 31, 86, 18,105, 69,224,147, 76,103,152, 60,111,164,238,174, 51,198,116,226,117, 57,252, 70,200,204, 4,155, -137,136, 12, 83, 50,132, 49,104, 29,254,109,141,215, 99, 14,162, 51, 70,135, 84, 71,168, 87, 26, 51,149,246,116, 97,144, 68,205, -134,170,103,230, 10, 59,147,230, 23,243, 58,184, 74,212, 64,228, 38,163,252,234,209,160,214, 8, 52, 49, 91,231,110, 99,108, 35, -142,134,125, 54,182, 54, 56,218,127,134, 39,159,124,134, 91,110,121, 45,189, 94,159,163,195, 30, 89,214,226,201, 47, 62,197,249, -243, 23,217,222,126, 22, 83, 9,238,184,253,245,126,112, 68, 57,100, 84,121, 86,236, 74, 99, 25,149,173,208, 92, 90, 6, 33,216, -221,222, 38,110,117, 57,183,185,193,163,207, 92,166,175, 53,107,235,203,116, 58, 29,142, 14,247,113,110,132, 53, 21,155,235,235, -220,118,199,107,120,226, 11, 15, 51, 28,140,201,139,146,243,103, 54,200,178, 38,145,242,105,194,206,210, 18, 18, 56,234,245,217, -220,218, 96,255,240,208,215, 10,169,251,202, 29,163, 60, 39,137, 99, 18, 37, 81,177,244, 41,222,224,208,152, 74,227, 76,133, 0, -198,227, 49,198,122, 38,183,174, 10,170,170,228,224,224,144,209,104, 72, 20,199,244,250, 61,218,221,101,132,140,168,116,137, 85, - 17, 22, 53, 37, 23, 58, 55, 83,234,224,121, 35,245,235,183,187,185, 9,137, 68, 42, 49, 81,173,139,148,156,214,211, 79, 68,232, - 39,135,241,156,156,160,114,122,139,229,204, 82,158,220,124, 51, 36,152, 64, 36, 71,214,169,123,133,245,243, 37,145,174,158, 95, - 16, 20,241,124,195, 32, 72,129,138, 28,210, 70, 68,198, 98, 18, 31, 85, 87,101,133, 27, 91, 42, 29, 24,231, 69, 65, 85,230, 24, -109, 38, 25, 46,169,124,125,122,174,182,110,189,222,118, 89, 20,232,162,160,156, 1,117,107, 42,175, 16,104,167,242,172, 94,209, - 77,251, 57, 2,174, 86, 75, 20, 19, 73,103, 41,106, 50, 96, 24,242, 50,113,150,125,134,172,110, 37, 45,141,166,210,154,178,242, - 17,123,148,106, 90, 67,199,242,178, 98, 89,167, 44,185,140, 78, 28,131,246, 18,185, 88,252,108, 1, 12, 42,117, 72, 27,163,164, - 36, 83, 80, 28,237,243,159,254,143,159,229,232,169, 39, 72, 34, 48,165, 33, 74, 34,122,189, 17, 74, 40,138, 82,163,132,162,212, -214, 11,169,128,231,232, 40,133,209,154, 36, 81,168, 56, 34,182,134,229,110,135, 97, 62, 96, 48,204,113, 74, 97,132, 96,144,151, - 56, 99, 73,211,134,111,197,116, 48, 26,143,253,181, 49,144,231, 57,149,214,164,141, 38,189,254,128,170, 44,209, 85,197,230,250, - 50,105, 36,105,166, 94,112,105, 48, 24,248, 22, 78,235, 24,141, 70,108,157, 61,203,227,143, 63, 65,214,236, 80, 21, 35,208, 37, - 56,104,196, 17,186, 44,137,155, 45,146, 40, 34,106, 71,172,175,175,115,220, 31, 48,214, 6,226,152,179,231,206,249, 49,196, 85, -197,104, 56,224, 53,183,222, 70,187,221,230,104,127,143,178, 52, 56, 93,178,186,178,194,184, 63, 64, 26, 73, 34, 21,191,255,217, -207, 19,167, 49, 55,221,113, 7,131,225,144,150, 84,180,219,109,174, 62,253, 36,197,240, 24, 97,114, 86,186, 45,198,131, 1, 59, - 71, 7, 96, 53,163,209,152, 78,179,197,106,183,201,241,254, 62,107,173, 38, 43,235,231,216, 63, 60, 98,239,160,199,214,122,155, -181, 51, 27, 28, 29, 31,178,212, 89,101, 52,174, 56, 60, 60, 34,203, 50, 95,106, 59,236,113,246,206, 59,217,126,234,105,214, 46, -156,167, 95, 94,161,170, 74,172,173, 48, 14,100,156, 82,234, 2,149, 52, 40,140,165,153,164, 12,199, 99,210, 68,209,110, 53, 41, -141,229, 96,144,227,162,152, 88, 42, 76, 85, 49,234, 29,211,233,116,252,100, 63,231,107,222, 62, 66,149, 65,232,200, 96,107, 80, -175,243,122, 66, 79, 74,111,132, 97, 86, 83, 48,179, 62,219, 38,125,248,165,106, 66,109, 29,205,135,225, 41, 78, 76,189, 65,247, - 60, 35,184,231, 65,118,158,139, 51,153,150, 22, 28, 92,165, 60, 95, 75,169,144, 49,140,252,124, 14,103,220, 28,175,235, 36,151, -108, 22,212,231,100, 96,103, 4, 28,156,187, 86,195,197,203, 47,159,228, 29,184,233,118,230,196,108,132, 29,132,220,102,228,109, - 69, 61,100, 56,200,218, 6,197, 84, 59, 35,143, 62,175, 40, 55, 35,150, 63,105, 1, 8,172,114, 33, 5,206,216,185, 3,169, 61, -174,217,135, 9,242,129,126,236, 99,152,195, 61,147,214,208,117,154,195,233,201,198,227,220,180,207,176,158,134, 54,209,177,158, - 83,186,147,147,249,178, 19, 15,111, 50,107, 86,204,203,218, 33, 39,175, 45, 4,152,240,124,167, 26,164,203,155,236,143, 44,221, -213, 85, 58, 73, 69, 18, 75, 14,143, 14, 89,237,245,216, 58,187, 66,165, 53,111,120,195,215,208,238,118,120,248,209,207,178,187, -115,133,175,123,219, 31,225, 77,111,253, 70,246, 15,143, 80,102,204,106,183,201,109,183,190,134,245,115,183,209, 94, 94,165,114, -142, 81, 62, 66, 9,135, 45,114,222,250,166,175,225,115, 79, 60, 65,210,108, 35,133,196, 24, 77,183,219, 69, 58, 67, 89,192,149, -171, 87,233,118,219,172,172,173, 49, 58, 56,198, 34, 73, 27, 45,132,242,196,186, 70,163,129, 53,134, 55,190,246,117,236,237, 30, -208, 80, 49,253, 94,111, 50,130,208,134, 13,114,121,101,153,188, 42,177, 26, 82,145,120, 9,209,204, 59, 92,166,204,177,186, 68, - 8, 69,153,143,184,186,179, 75,145, 87,126,126,111,148,248, 89,218,177, 79,229, 52,178, 22,149,129,179,103, 47, 48,236, 29, 33, -170, 35,172, 45,176,182, 10,253,254,242, 84,125,231,211,106,234,167, 69,236,179, 99,117,235,255,215, 17,122, 20,213,195, 12,102, -219, 43, 79,222, 12, 83,125,224,105,132, 46, 38, 45,138, 39,129,125,126,136,207, 20,229,229,204, 77, 35,107, 5,188,144,157,154, - 48,209,173,239,215,150, 65, 47,161,230,108,212, 13,161, 66,120,178,166, 12, 89, 42,137, 67,216, 8, 87,130,118,154,178, 28, 83, -141, 71, 20, 65,227,159, 32,170,225,230,102, 71,123,231,211,107,176,151,148,165, 39,190,249,175, 1,208,181, 31,188,226, 92,229, - 35,113,172,151,111,150,130, 68,122, 1, 10, 17, 41, 63,240,198, 9,180,112,147,161, 22,190, 12, 99, 41, 42,255,181,212, 26, 99, -125, 43,143, 19, 49, 42,110,160, 90, 13,178, 52,163,213, 89, 34,107,183,105,181,187, 52, 58, 93,100,179, 9,205, 14, 34,203,208, -224, 29, 23, 93, 34,132, 35,149, 49, 66, 38,196, 78,160,243, 33, 31,254,213, 95,230,227,191,245,235,180, 34,201,120, 88, 96,172, -101, 56, 28, 33,156, 96, 56, 44,125, 31,186,181, 20,149, 65, 42,129,181, 16, 73,133, 49,102,114,189,171, 66,115,246,220, 10,121, - 57,194, 2,195,162,164,217,105,147,151,134,188, 42,201,146,196, 43,205, 69,137,119, 68,172, 69, 42, 63, 22,180,172, 42,180,179, -148,131, 62,136,136,178,168,136, 35,252, 28,246,106, 76,182,220,161, 8, 35, 82,219,205,140, 65,191,207,202,242, 10,219, 87,174, - 80, 21, 37,203, 75,146,131,157,171, 52, 27, 49, 66, 91,134,163,130, 51, 91,235,164,105,194,168, 63,100,121,109,141,163,227, 99, - 10, 39, 73, 90,109, 54,182, 54,105,183,219,140,134, 35, 14,118,247,121,237,107,238,192, 58, 67,149,143,113, 85,137,178,176,185, -178,204,238,209, 17,157,102,135,199, 30,127,156,195,163, 30,103,206, 95, 96,105, 99,149,195, 81,143, 91,110,186,136, 29,141, 25, - 30,237, 35, 93, 69, 59,145, 20, 35, 77,255,176, 71, 18, 75,148,213, 52, 27, 9,105,154,208,202, 90,236,239,236,147, 40, 65,111, -208,231,220, 77, 77, 54,227, 6, 15,125,242,243,252,145, 63,242,102, 84,156, 80, 57, 73, 89,105,146, 36, 65, 8,193,206,222, 62, - 43, 65, 50,183,236, 13, 89,189,120, 19,131,163, 30,103, 47,158,227, 96,231,128,131,227, 3,122,253, 1, 42,138, 81,177, 67, 83, - 49, 46, 11,150, 59,171,228,163, 1, 75, 89,151,209,184, 64, 73,201, 74,167,205,176, 52,196, 42, 98, 60, 26,147, 53, 50,242, 65, -159,230,202, 50, 0, 85, 40,165, 16, 82,216, 88,139, 80, 42,148,182,106,249, 84, 51, 25, 0,227,187, 41,230, 57, 54,117, 86, 88, -214,179, 85,103,116, 16,228,236,224,164, 73,234,125, 86, 18,153, 83,181, 32,102, 9,182,167,237, 13, 46, 68,198,181,172,181,181, - 98, 18, 84, 56,105,253, 35,146,147, 25, 11, 39, 39, 55,158,246,122,179,243,215, 79,205, 84,214,204,246, 25,117, 84, 41,103,167, - 73,158,222,226, 58, 17,163, 99,134,242, 31,230, 86,216,144,133, 20, 51, 14, 70, 52,187,241,218, 19,147,102,252,200, 74, 66,234, -107, 70, 66,243, 68,111, 95,157, 50, 55,115,234, 65, 94, 81, 72,107,141,209,214, 19,127,108,232,173,181,206,171,122, 89, 59,169, - 37, 76, 37,254,106, 90,206,181,227, 96, 79,246,206,159,172,229, 79,164, 76,231,116, 6,236, 68, 31,220, 57, 88,219, 92,161, 18, - 41,217,114,198,106, 75,177,115,233, 83,108,109,172,176,190,182,130, 82,130,170, 42, 57, 60,220,231,163, 31,253, 40, 31,253,248, -199,232,245, 15,200,243,156,103,175,110, 35,227,136,106, 60,194,149, 71, 16, 21,252,246,111, 61,192,205,111,120, 59,111,122,219, - 31,161,221,240, 67, 72,202,114,204,250,230, 50, 95,247,214, 55,242,171,191,249,155,228,214, 95,173, 44, 77,168,138, 28,109, 53, -163,209,136,189,189,109,174,110, 27,150,178, 22,103,215, 54,168,242, 17,185,174,200,171,146,229,165, 14, 81,146, 16, 37, 9,103, - 54,218,124,237, 27,223,196, 83, 87,158,163,170,204, 36,250,148, 66,176,220,237,176,186,182,198,165, 75,151,248,154,215,220,225, -235,190, 50,166, 44,252, 44,247, 34,207, 41,198, 99,134, 69,193,112, 48, 34,146,112, 60, 26, 32, 17,180, 58, 75,164,105,130,138, - 98,242,210, 48, 46, 53, 68,138, 70,163, 69,172, 34,228,208,144,231,125, 98, 33,161, 38, 88,185, 25, 41,212,151, 32, 60,115, 93, -239, 90,184,233,192,147,211,212, 10,165,155, 39,225,207, 23,140, 94,156,210,157,152,233, 29, 23,211, 16, 96,194,226,173,123,238, -157,195, 74,135,180, 54,136,188, 48,145,150,117, 70,251, 44,146,246,255,182,149,111, 25, 83,206,160,132, 65, 88, 63,251,189, 26, - 15, 40,203, 28, 99,244,169,250, 15, 94,225,174,244,130, 76, 1,208,125,164,233, 35,126,156,153,108, 80,145, 10,237,126, 74, 76, - 84,222, 16, 62,125,109,195,189,105,172, 47,109,149,198,131,104,165, 13,214,249,246, 77, 25,181,137, 26, 9,205,172, 77,163,213, - 37,107,181,105,182, 59,164, 89,147, 70,171, 77,163,217, 36,105, 52, 72, 26, 25,113,154,120, 98, 95,228,219,252,202,188,192,201, -220, 15,120, 73, 99,226,180, 73,154, 68, 60,249,153, 79,242, 31,255,245, 63, 39,170, 74, 70,253,138,170,116,196,177, 31, 40,146, -231,190,255,220, 88, 71, 89,121,182,184,113, 22,165,228,100, 46,128,146,120, 6,180,132,118, 39, 99, 48, 30,209, 27,142,144, 73, - 66,171,221,101,103,119, 31,225, 20, 73,146, 82, 20, 5,221,110,230, 37,151,157,240,154,241,210,159,243,184,204, 73,146,140, 34, - 47, 49,198,209,105, 38, 36,145, 36,137, 61, 33,179,215, 63, 6, 4,205,216, 51,206,181,113,244,142,123,180, 90, 77,138,241,128, - 88, 58,132,213, 20,121,193,133,243,231, 24,143, 71, 12, 6,125,150,218,109,142,143,142,137,155, 29,146, 52, 97, 99,109,157,173, -181, 13,142,142, 14,216,191,122,149, 91,110,190,213,183,178, 2,194, 88,218, 13,159, 77,232,237,239,163,180,229,210, 83, 95, 32, -207,115, 86, 87,151, 17,210,111,194, 23,206,156,161, 24,245, 73,141, 97,116,180, 79, 51,130,209, 96,128,211, 99, 86,130,208,206, -114, 51,163, 55, 30,209,104,182,184,250,244, 54,174, 52,108,156, 89,161,151, 15, 65,250,186,235, 77,183,222,206, 67,159,122,130, -175,127,219,155,217, 90,219,194, 20, 57, 69, 85,226,100,140,115,134,241,120, 76,163,217,164,223,239,179,178,188, 76,115,117, 21, - 49,214,228,121, 65,127, 52, 96,123,123,151, 78,183, 27, 8,109,126, 96, 73,105,193, 32, 40,130,236,180, 28,121, 96, 79, 19, 69, - 81, 86, 36,113,204,209,225, 62,105, 43,163,179,186, 76,210,108,162,133, 31,156,226, 42,223,107, 46, 66,203, 87,205,242,150,174, -198,119, 47,249,138, 80,190,107,164, 14, 2,220,116, 90,154,157, 37,110,201,121, 73,242,217, 98,112,205,127, 21,167,100, 12, 79, -241,227, 79, 13, 64, 84, 29,228, 9,175,102,103, 67,170, 91, 5, 66,182,181,238, 84, 86,253, 73,101, 57,102,134,202,212, 99, 87, -173,117,215, 47, 65,202, 19,242,151, 51, 25, 4,203,180, 91,231,164,159, 50,209,191,159,176,242,167,242,153, 94,183,101, 42,229, - 29, 77, 65,114,186, 89, 91, 99, 48, 82, 80, 57,135, 21, 2,173,245, 28,104, 78,234, 16, 33, 77,105,102, 70, 62,214,145,122, 13, -224, 58,204,119,214,214,120,205, 12, 83,123,109,102,146,114,135,217, 13, 79, 77, 64,125,238,216,230,100,106,231,107, 17,110,238, -195, 11,155,134,152,147, 65, 8,159,129, 34,109,181, 33,105,112,241,150, 59, 88,138, 10,158,252,212,111, 50, 62,222,165, 24, 13, - 73,207, 70, 88,167, 65,104,254,244,247,252, 41,162, 36,225, 51,159,253, 61, 30,125,228,179,188,225,141,175,103, 60, 58, 70,228, - 61,150, 84,193, 19,191,247, 73,246,199, 21,199, 69,197,219,254,216, 55, 18,103, 49,231, 47,158,227,202, 23, 31,166,149,197,108, -174, 45,243,166, 55,222,201,199, 62,249,105, 6,253, 99, 36,134,172,145, 98,202,138,225,160,143, 51, 6, 41, 28,195,241,136,125, -142,144,206,160,117,206, 56, 31,114,203,197,243,108,110,109, 82, 25, 67,162, 4, 87,118,118,232, 13,135, 84,206,248,200, 41,164, - 48, 81,146, 71, 30,125,132,168, 44,217, 90, 93,241,243,218, 35,133, 85, 38,172, 5,139,148, 80, 22, 94, 18,116,109,101, 5,133, -164,215,235,211,239, 29,147,181, 59,129,116,225, 16, 17,228,149, 33,138,189,183,239,242, 4, 23,198,179, 58, 99,167,202, 76,238, -218, 94,234, 23, 3,170,215,136, 53,136,169,176,140, 56, 65,194,100,226,109,207,215,163,132,184,254,235,189, 96, 96,159,233,121, - 17,115, 58,206,158, 76, 55,171, 41, 45, 3,185, 19,171,125, 71,134,214,129, 45,171,113,101,229,211,229,165,239,158,176, 85, 1, -182, 68,160,193,149,216,106, 68, 21,230,216,207, 48, 3,252,204, 3,171, 41,203,146,178,238, 55,159, 25, 58,131,117, 83,246,172, -144,129,211, 39, 60,203,213,129,213, 62, 69,232, 44,104,107,169,180,119,164,173,117, 88,169, 64,165, 68,173,148, 52,107,211,104, -182,201, 90, 93,210,172,229, 71,219,182,218, 52, 50, 63, 12, 37,206, 26, 68,141, 6,113,154,160, 66,205, 95,169, 40, 8, 98,248, -180,123,148, 23, 68,105,226,163,133, 40, 70,170,136, 81,239,144,223,253,224,175,209,191,252, 12,162, 95,128,145,164, 73, 66,158, - 23, 19,193, 35,173, 29,149,113, 40,169, 2,243,222, 51, 91,188,243, 41,136,149,192,104,205,197,155,183,130,214,185, 98, 88,148, -108,108,109,113,120,220,163, 44, 43, 26, 73, 35,100, 71,252,174, 80, 85,158,112,168, 75, 67, 35,139,233, 15,251,200, 88, 17, 69, - 49,195, 97, 73, 18,250,197,171, 34,167,219,242, 95,203,178, 32,203,154, 56,107, 73,227,152,171, 59,123, 56,231, 72,226,136,241, -240,152, 72, 2, 86,179,210,109, 49, 26,248,222,247, 36, 73,168,116,137, 84, 41, 74, 41, 58, 75, 43,108,174,111,209, 59, 60,162, -127,116,196,205,231, 47,208,204,154, 20,249, 8,165, 64, 40,133,209,134, 98, 52, 66, 23, 57,219, 59, 59,168, 36, 33,145, 41, 43, - 27,171, 44, 47,175,160,203,138, 70,105,169, 74,205,254,222, 21, 98, 97,176,249,144,149,118, 70, 89,128,197, 82, 90,131,176,134, -243,231,206,242,212, 51,207,210, 72,253,172,131, 52,138, 81,145, 98, 52,234, 83, 86,130,155,110,125, 13,143, 92,122,138,237,131, - 17, 81,146,177,177,212, 68,168,146,202, 8,116,105,200,199, 37, 82,197, 88,231, 24, 29, 28,211, 60,123, 22, 43, 74,178,102,198, -202,218, 26, 7,135, 71, 94, 78, 87, 72, 79,106, 84, 80, 89,104, 52,187, 12, 70, 35,186,157, 14,141, 66, 51, 42, 42, 63, 5,178, - 30,163,173, 5,101,145, 99,173,165,219,110,161, 85,136,122, 67,103,134,209, 94, 39,196, 89, 55, 33,174, 69,206,215,175,237, 36, - 45,109,103, 84, 34,235,242,215,236,204,142,122,174, 66,157,206, 22,115, 68,237,137, 82,220, 9,224, 61, 57, 68,101, 50,141,113, -118,146,225, 68,198,246,196,115, 67, 96, 33,165, 39,176, 10, 41,230,230, 45, 76, 58,195,164,156,116,130,205,242,208,176, 22, 89, - 15,210,177, 92, 35,145, 61,113, 78,196,124, 58,191,238, 18,240, 66, 78,106,174,157,237,212,173, 83, 76, 70,108,204,232, 1, 76, - 15, 73, 56,136,252, 5,240,222,148,151,100, 8,128,109,141,239, 43,156,245,148,234,154,121, 29,137, 35, 66,154, 93,207,212,210, -103,128, 61,252,110,218, 54, 48, 21,170,152,120,114,129, 96, 33, 38,105,117,137,194,205,164,212,197, 28,147,217,205,230, 42,234, -250,203,236,152, 60,220,252,200, 63, 49,221,156,133, 84, 52,151, 55,104, 52, 91, 92,188,112,129, 71, 31,250, 48,199, 71, 3, 62, -255,153, 47, 48, 28,149, 52,178, 46,198, 9,122,135,125,206,223,122, 59, 31,250,240,131,236,238, 94,161,221,238,240,198,215,223, -201,225,206,101,226,252,136,253,209, 33,219,151,159, 97, 48, 30, 65,163, 77, 43,145, 84,197,152, 86,183,195,217,243, 23,233, 29, - 29,178,220,110,242, 71,222,254,181,124,244,161, 79, 96,113,236,237,237, 32,133, 32,141,163, 9,153,207, 6,105,133,222,104, 64, - 43, 73, 41,202, 2,167, 50,174,238, 31,144,180,154, 24, 4,135,219,123, 92,122,238, 89,182,206,109, 49, 58,238, 79, 64,200, 58, -203,225,209, 49,145, 54,220,121,203,205, 92,221,219,163, 50,190,215, 95,103, 37, 75,157, 46,221,205, 13,178,102, 6,199,125,146, - 36, 69, 9,104,183,154, 68, 42,166, 55, 28, 49, 24,142, 16, 50, 34,109,118,208, 78, 7, 50,134, 66,197, 2,209,108, 35,148,194, - 86,214, 59,205, 51,173, 35,207,135,163, 47, 20,232,197, 76,155,200,244,101,221,220,168,220,147, 53,115,113,234,235,212,213, 59, - 59,247,140,249,251,194, 93, 91,217, 23,179,178,173,243,233,250,169,100,177, 65,132,182, 48,107, 42,108,229, 85,219,108, 85, 81, - 85, 37, 46,244,138, 87, 69,129, 46,198, 84,197, 8, 93,142, 48,122, 12,166, 64,186, 10,233,202, 41, 79,196,214, 35,104,157, 7, -227,202, 59, 8, 54,100, 4,100, 16,196,112,114,218, 74, 99,194,156,105, 83, 79,195,114, 6, 75,168,105, 58, 25, 24,234, 25,113, - 35,165,153,101, 36,205, 54,141,102,135,172,217, 34,107,119,167,209,120,214, 36,110, 52,104,100,141, 73,139,157, 74, 98, 79,186, - 81, 94,146,114,162,104, 21,238,183,200, 70, 68, 73, 68,148,198, 24,227, 80, 68,216,106,196, 51, 79,124,142, 79,125,248, 65,108, -127,140,170, 28,113, 28,211,235,143, 61,143, 64, 8,156,113,104,235,130, 62,190, 11, 85,177, 25, 49, 34,225,181,255,147, 88, 16, - 41,112, 66,113, 60, 24,147, 54,154, 56,161, 56,236, 13,105, 38, 73,184, 87, 36,113,146,160, 67, 41,163,172, 74,164, 18, 12, 71, - 99,170,202,208,106, 54, 61,107,216, 26,146, 88,145, 68, 42, 12,154,139, 57, 62, 62, 14,233,122,133,118,126,198,186,148,146, 72, - 73,198,195, 30,182, 42, 81,141, 4,137, 7,171, 52,137,177,214,209,110,181, 56,234, 13, 88, 63,179, 74,179,211,101,105,105,137, -209,104,200,120, 52,226,220,153, 45,146, 40,162, 24, 28, 51, 28, 12,184,120,211, 69,116, 85,113,216, 31, 80, 85, 21,251,135, 7, -136, 56, 66,166, 9,235,221,101, 86,214, 86, 73,163, 4, 41, 5,131,253, 61,170,188, 79, 83,104,178, 86,140,150, 10,116, 1,174, - 66, 56,199,234,242, 18,249,120,204,193,238,190,207,146, 73, 73,220,204, 80,145,162,219,108,123,254,133,243,186,246, 95,243,198, - 55,242,240,227,143,115,225,226,121,142,134, 99, 54,215, 87, 17,185, 38, 47, 10,198, 69,133,147, 99, 86, 55,214, 25,231, 5,163, -157,109,150,206, 94,160,234, 15, 17,114,192,250,250, 26,219,219,187, 72,169, 40,181, 87,251,204,139,130,245,181, 45,246,183, 71, -168, 40, 9,211,192, 12,145, 82,100, 8,138,225,144, 52, 75,169,180,102, 56, 24,112,190,121, 11,180, 51, 42,171, 17,198,115, 12, -170,160,163,224,130,192,204,116, 70,249, 84,144,102,170,200, 38,194, 61,235,203,123,211, 72,124,218,170,229,196,201,136,149,201, -208,152, 58, 13,109,103,238, 41,234, 72,121,146, 97,243,153, 91, 87,103,133,235, 50, 49,179,229,221,208, 7,111, 79,100, 35,103, -218,212,152,237, 59,151,110, 78, 8,199, 90,223, 85, 53,217, 51,228,116, 64,204,201, 89,204,147, 96,115, 70, 95,163, 14, 38, 78, -234,209,207,189,134,152, 33,209,157,140,226,221,124,121, 34, 50, 85,229,123,168, 67, 58,208,204, 40,220, 72,121, 98, 80,189,179, -126, 0,134,115,190, 54,110,185, 22,204,235,154,121, 72,191, 59, 59,141,230, 20, 98,102,110,187, 59,117, 18,220,220,168, 85,166, -162,252,245, 28, 9,199, 84,112,255,180,218,131, 21, 53,156, 7,165,108, 59,173,237, 38,205, 46,173,149, 45,162, 52,161, 17, 73, - 30,123,244, 9, 62,255,240, 23,121,234,202, 17,155, 91,107, 36,141, 37,112,146, 47, 62,246, 4,223,253,103,191,135,183,191,253, - 46,126,229, 87,254, 35, 95,127,215,215,211,206, 90, 12,243, 29,198,197,144,167,158,122,154,131,157, 61,198,123,251, 36,157, 77, -170,254,128,161, 30, 34,141,225,194,173,119,240,248,231, 62,205,185,115, 27, 20,186,228,194,153, 53, 30,253,226,115,254, 60,180, - 38,247,236,194,137,166,182, 11, 35, 90, 13,142,194, 90,244,112,204,241,104,140, 76, 26,172,175, 90,126,239, 11, 95, 32, 55,134, -178,172,176, 85, 73, 2,196,137,239,255, 85,128, 54,150,195,129,175,151, 27, 99,105,101, 25,214, 89,140, 51,148,213, 24, 33,160, -221,233, 50, 28,142,189,144, 80,104,179,242, 68, 20, 75,239,232,128,150, 49,196, 89,155, 40, 82, 20, 85, 73,156,164, 72,153,248, - 72,113, 34,255, 32,103,250,187,195, 34,146, 98,114, 35,156, 70,148, 59, 13,216, 93, 72, 41,207,227,173,156, 43, 84,157, 20, 68, -154,180,193,185,122,220,233, 41, 16, 47,236,132,210, 54,223,131,201,156, 92,235, 44, 49,197,205, 78,130,169,179, 14,129,228,137, -177,158, 4,170,189,208,139,209, 26, 91,149,158,167, 80,122, 98,155,169, 10, 76,158, 83,149, 57, 85, 89,160, 75,255,111, 93,228, -152, 34, 7, 83, 32,108,133,180, 6,229, 44,132, 26,152,157,145,122, 85,147,227,148, 51, 27,149,159, 22,109, 49,129,210,226, 66, - 31,106, 16,179,137, 34,100,220, 36, 74, 83,210, 70,147, 52,107,121,224,110,250, 40, 60,205, 90,225,107,131,180,217, 36,105,164, -196,137, 79,169,203, 72, 33,227, 32,244, 51, 59, 90,185,190,182,202, 77, 54, 30, 89,107,255,203,216,215, 29, 43, 11, 6,236,224, -144,223,248,229,159, 99,231,137,199,105,104,223, 35, 59, 24,141,194, 36, 67,159, 77,208, 38, 72,200, 74,175, 59, 80, 11, 80, 85, - 97,160, 19, 74, 82, 26,203,230,198, 18,121, 62, 36, 82, 9,163, 97,193,242,214, 22,251,199,125, 12, 80, 26, 77,187,217,164, 40, - 11, 26, 89, 74, 94,230, 65, 11,192, 18, 41,201,176, 55,164,213,110,163,100,204,112, 56,166,170, 74,226,212,207,105,108,183,186, - 56, 43, 24, 14,134, 36, 89,230,235,188, 34,162, 52, 6, 93, 22,164,177, 36, 31, 14,189,248, 9, 14,173, 43,210, 36,194, 90,205, -234,210, 50,199,199,199,180, 86, 54, 72,219, 75,108,156, 59, 75, 89, 89, 70,131, 99,178, 44,193,152, 10,109, 74, 40, 11, 46,108, -174, 49, 60, 58,162, 63, 26, 81, 89, 71,169, 53,253,209,144,238,218, 38, 89,167,203,210,234, 6,203, 75, 43, 12,123, 71,140, 71, - 61, 26, 25,168,178, 96,115,185,205,238,222, 85, 34,105,217, 59, 62, 96,107,115,147, 36, 73,185,124,121,155,168,209,162, 24,247, -145,214,239,151,173,149, 46,227,113,206,198,242, 58,123,251,199,116,214, 54,216,222,185,204, 27,222,250,117, 60,254,197,199,184, -188,115,149,179, 27,107, 28, 14,114, 54,214,215, 41,181,230,112,111,215,151, 11,139, 18, 41, 44,228, 57,253,203,151,105, 46,173, -208, 25,143,184,114,229, 42, 27, 27, 43, 60,119,121,135, 56,107,122,114, 32, 21,206, 88,146, 36,165,210,134,180,217,162, 10,163, -112,187, 73, 66,127, 48,160, 50, 6, 87, 85,228,253, 1,186, 44,105,182, 87, 80, 82,128,118, 68, 70, 19,213,109,151, 85, 5,149, -231, 82, 57,107, 2, 56,217,233,112,148, 0,114, 54,148, 98, 38,147, 6, 3,147,219, 73, 49, 25,202, 58,155,113,245,105,110, 51, -105, 33,197, 19,234, 39, 51, 68,106,182,186,181, 33,227, 53,153, 17,226, 39,192,213,101,229,201, 56,165,144, 85, 16, 56,223, 70, -235,166, 37,131, 73, 13,188,214, 7,158,189, 87,102,102, 59, 72,102, 51, 6, 39, 2, 75, 59, 27, 8,137, 41,225,143,147,229, 5, - 55,229,171,205, 12,105, 98, 70, 46,122,174,199,254,148, 8,169,158,193, 16, 21,101, 21,134,128, 48, 17,155, 23,115,140,114, 38, -158,144,179, 46,204, 66,175,163,241,105, 58,222,154, 48,102, 47,212,199,173,152,170,134,205, 74,206,214,206,194, 68,228, 67,206, -232,101,135, 19, 53, 19,198,161,240,227, 28,237,137,168,107,102,200, 4, 39, 90,156,156,152,140,244, 0, 66,116,131,103, 56, 54, - 59, 29,140,112,180, 26, 9,203,171, 93,198,213,152, 39,158,121,138, 88, 9, 94,247,250,215,211,233,180, 24,246, 70,236,110, 95, -229,119, 63,242, 59,220,116,225, 2,107, 43,171,220,126,235,109, 28,236, 31, 32,170,130, 98, 60,230,184,231, 91,204,154,205, 6, - 74, 10,250,253, 30,207, 93,126, 26, 5,124,227,215,125, 45,203,203,171,140, 6, 67,154,105,194,155,238,124, 29, 15, 63,254, 20, - 66,168,137,102,182,138, 34,175,154, 23, 72, 35, 82, 72, 42, 93,249,158,104, 96, 84, 22, 60,252,196, 19,116,183,183, 25,140, 71, - 24, 96,239,224, 32,200,194,166, 94,150,180, 50, 40, 41,136,130,220,107,146, 36,190,198,106, 12, 82,122,110,128,174, 42,202,178, -164,221,110,179,191,119, 72,214,109,161, 34,133, 27,123, 49, 21,107, 60, 9,238,232, 96,159, 40,205, 73,219, 75, 94,145, 47,170, -181,135, 35,127,227,217,153, 69, 53,115, 33, 94,174,186,250,139, 74,155,139,235,145,245,228,252,141, 50,199,102,113,147, 6,245, -169, 56, 93,152,216,132, 8, 35,100,167,164, 80,167,117,144, 88, 13,181,237,170,192, 20, 1,172,203, 49,174, 40,168,138, 17, 85, -225,127, 94, 21, 5,101,153, 83, 21,121, 24,105, 90, 5, 77,118,131, 10, 3,123,140, 16,104, 39, 48,120,135, 23,132,119, 64,165, - 5,235,193,222, 56,225,123,100,173, 11,135,226, 35, 22, 21,167,196, 73, 70,210,200,104,100, 77, 26, 89,139, 70,107,153, 70,179, - 69,150, 53, 73,155,205, 0,234,205, 16,141, 39, 68,169,143,196, 39,189,241, 65,181, 15, 9, 82,137, 27, 23, 29, 79,100, 52, 60, - 6, 11,172, 4,105, 53,143,126,226, 19, 60,244,129, 15,210,112,120,146,154,214,232,202,162,132, 7,109,231, 44,145, 82, 32, 64, - 41, 49,233,145,175,115, 41,113, 96,235, 43, 37, 73, 27, 9, 69, 94, 81, 86,154,172,217,164,172, 42,122,199, 61,162, 36, 66, 10, - 73, 20, 7, 61,248,144,254,173,247,147,178, 44,137,162,136, 44,107, 50, 42, 42,198,163, 2,112,164, 73,140,115,154, 40, 82, 12, - 6,253, 32, 83, 45, 41,203,138, 82,151,126, 99,181,150,162, 44,145, 66,146,101, 9,163,209,152, 44,139, 16, 82,208,233,116,232, -245,251, 52,178,140,238,234, 26, 89,171, 69,154,166, 28, 31,239,134,185, 18, 18,140, 99, 56, 30,179,220, 93, 98,239, 96,159,254, -112,132, 74, 26,140, 10,205,195,143, 60,198,237,119,188, 22,153, 53,105,183,151, 72,147,132, 81,191,135,206,135,232,241,128, 36, -114,172, 45,117,120,242,210,227, 8, 37,216,217,217,230,206, 59, 95,135,115,240,204,115, 87,105,181, 59, 60,187,125,196,206,229, - 3, 46,158, 93,165,217,237,114,212, 31, 16, 75, 63,110, 83, 10, 73,255,184, 79,107,101,137,171,151,159,227, 53,119,220,193,231, - 31,126,152,181,213,111, 34,178,112,208, 59,230,236,133,243,228,227, 49,251,135, 7, 88,107, 56,115,230, 12, 66, 8,226, 72, 50, - 56,218,167,217,202, 88, 93, 94,226,168,215,167,211,106,114, 60, 24, 19, 41,133,182,134,193,160,207,218,218, 26,219, 87,175,210, - 93, 90,162, 8,123, 72, 97, 42,162, 36,162, 26,142,137,173, 39,226, 30, 28, 29,178,244,186,155,145, 73,130, 52, 18, 99,189,204, -178,159, 51,160,113,149,198,150,154,202, 20, 62, 96,212, 26,172, 9,227, 73,235, 25,107,106,118,144,185, 47, 53, 73,233, 65, 93, - 76, 92,203, 41, 49,219, 90,140, 22,158,101, 31, 50, 1, 78,224,231, 88, 72, 55,217,175,172, 85,147,113,176,218,250,182, 79,105, -157,223,115,235,145,168,206,103,119, 16,118,162, 49, 97,235, 97, 85,117, 38, 65,202,233, 80,149, 90,240, 69,138,235,138,107, 77, - 34,230,217,178,240, 76, 26,223,205, 41, 96, 50, 55, 93,141, 83,244, 63,102,247,218, 9, 14,159, 58, 1,211, 78, 30, 81, 89,234, -137, 14,110,205, 42,159, 75, 13,132,153,180, 53, 96,215,195, 85,140,177,158, 32, 49, 51,132, 94, 78,122, 4,229,140,148,231, 12, -176, 51,155, 82,119,115,196,187, 57,160, 16,115, 19,235, 39, 26,183,206,205,207, 4,225,132, 50, 79,221,155,120,141, 38,185,243, -245,249,172,213,162,212, 6,163,125, 31,247,235,223,244, 53,252,194,207,195,205, 55,221,236,107,140, 74,112, 48, 26, 32, 28,124, -252,119, 63, 74, 43,107,242,173,119,127, 43,105,156, 98,170, 10,170,146,126,191, 79, 20, 69, 52,218, 93, 4,154,179,103, 54,249, -237, 15,127, 24, 99, 45,111,122,211,155,200,218, 75, 84,214,209, 63, 60,164,208, 21, 55,111,109,208,136, 36,133,177, 88,124, 36, -211,110,181,168,170,138,193,104, 64,162, 34,150,187, 75, 32, 28,189,209,128, 82, 87, 8, 37,169,132,229,112, 60,160, 8,245,236, - 74,251,133,185,188,177, 66,154,164, 20, 69,233,103,186,199, 49,121, 89,144,197,209,180,191, 19, 40,203,146,209,112,192,193,254, - 1, 75,107, 9, 89,214, 96, 52, 26, 33, 85,140,140, 36, 73, 28, 35, 0, 93,249,141,110, 52, 56,198, 56, 16, 81, 10, 73, 4, 66, -122, 1, 12,107, 39,158,232, 12, 43,100,158,217,254, 18,234,218, 47, 25,216,175,155,202, 23,167, 14, 87, 96,110,238, 50,243, 3, - 82,220,140, 16,133,243,224,234,116,133,211, 37,174, 42,125,100, 94, 21,216,114,236, 65, 61, 31,163,139, 17,166, 8,218,221, 1, -196,167,105, 71,175,169, 46,173, 9,105,116,135,149,225, 70, 54, 2,167, 8,189,189,142,202,122, 98, 81, 89, 85,148,218, 98,156, -196, 32,113, 34, 66,166, 49,105,156,145, 54, 58,196,105, 74,163,217,166,209,234,144, 54,219,164, 89,147,102,171, 77,218,104,145, -181,154,164,141,148, 40, 73,136, 83, 79,172,140,226, 8, 25,123, 97, 10, 89, 11,232,132,238, 2, 39,110,240,121,206,104, 77,206, -101, 53,194,166,228, 89,247,150,203, 79, 61,206,191,255,217,159,165, 53, 46,201, 71, 5,133,213,104, 3, 10, 65,165,141,239,233, -247,170, 34,196,145, 12,164, 40, 48, 2, 42, 61,175,228,189,182,218,241, 34, 50, 74,209, 31,143,201,186,203, 92,221, 63, 12, 89, - 36,175, 35,160,141,241,142, 40,206,143,157, 20, 2,163,253,231,150, 54, 26, 20,101, 73, 85,129,174, 28,145, 84, 68,145,164,217, -108,144,164, 49,207, 62,115, 64,146, 38, 84,149, 70, 84, 26, 67,228, 91, 8,203,156, 24,136, 34,129,179, 16, 43, 1,198,176,178, -182,194, 96, 48,160, 44, 53, 43,235,103,104,181,187,108,157, 59,199,149,203, 87, 88, 94,234,250, 97, 40, 69, 78, 49, 30,209,110, -101, 12,134, 3,246, 14, 15, 41,181, 35, 63, 28,240,236,149,109,238,120,237,157,104, 39,104, 68, 9,214, 57,242, 65,159, 72, 24, -142,183,159,227,166, 51,171,152,124,192, 99, 15,127,129, 36, 82, 28, 31, 13,184,253,142,215,178,119,216, 99,239,224,144,229,149, - 53,158,120,118,135, 71, 46,237,114,235,185, 46, 73,187, 67,229,252,124,243, 52,107,160, 17, 44, 47, 47,241,197,103,158,161,217, -109,178,191,183,195, 27,222,242,117, 92,222,190,202,167, 62,251,121,238,186,235,235,216,191,186, 77,179,213,102,253,204, 25, 42, -173,201, 75,205,222,238, 62, 91, 91, 27, 96, 52, 38, 31,210, 94,191,128,206,135,244,251, 61,100, 28,211,206, 28,199,189, 62,173, -102, 74, 85,105,210, 52,245,193, 66,104,193, 52,206,226,132, 98,109,109,157,254,240, 89,164,177,152,188,228,240,224,128, 11, 88, -162,102, 19,108,228,197,193,172, 95,255,232, 10, 97, 44, 86, 27, 68, 53,246,130, 73, 85, 21,134, 13,121,208,175, 71, 7,251,241, - 2, 53,179, 60,168, 79, 69,129, 71, 81, 71,245, 53, 8, 3,194, 10,172,118,160,103,120, 89,245,212,178,122,189, 59,233,131, 67, - 39, 81, 78, 34,106, 86,122, 29,153,135, 72, 95, 88,137, 13, 42,145,152,217,201,194, 33, 50, 87, 18, 25, 69,147, 18, 85, 61,104, -101,110,222, 51,243, 53,118, 78, 2,250, 76, 45,127,162, 56, 57, 59,176,169,126, 13,107,152,105, 78,155, 0,253,164, 13,143,105, -166, 97,118,248,140,157,148, 16,194, 84,211,162,170,230,122,207,231,102, 56,135, 8,102,154, 98,159, 37,183,185,153,217,208,114, -174,111,143, 80,119,144, 39,167,186,213,100, 11, 33, 64,213, 41, 23, 55, 55,218,145, 48,101,103,210, 78, 56,245,103,166, 35, 43, -167,217,194, 9,145,168, 30, 67, 39,101, 45,233,167, 2,201,105,186, 91, 73, 25,161, 75, 67, 53, 44,120,228,179,143,240,141,223, -240, 77,124,247,247,124, 47,227,195,125,108,233,133, 39, 98, 47,113,197,179,207, 62,195,109,175,255, 26, 90,205, 54,163, 81, 78, -214, 80, 68, 66, 82,228, 5,166,178,220,124,238, 28,141,170,203,197,139,231, 41,139, 17, 50, 74,105,119,150, 17, 81, 74,107,121, -141,189,237,171,236,237,237,162,172,161,145, 68, 20, 99, 31, 73, 88,231,168,180,246, 25, 17, 7, 90, 87, 28, 28,239,147, 38, 41, - 74, 74, 26, 89, 74,127,168,189,232,142,153,182,238, 88,231,232,100, 13,112,142,231, 46, 95, 38,137, 19,218,237, 22,205,102, 70, -148,196,164,145,191,249, 84, 20, 97, 66,171, 79, 25, 24,213,113, 18,177,190,190,198,179,207, 60, 69,187,209, 32,118, 2,198, 57, - 72, 69, 28,251, 77, 47,137, 35, 70,195, 62,142, 17, 42,138,253,168,197, 40,193,134, 73,108,215,232,166,159, 54, 78,245, 6, 34, - 48,167, 78, 41, 19,226,212, 66,249,196,177,115,243, 2, 52,238, 68, 73,223,157, 86,103,159, 29, 30, 83,175,117,225, 35,130, 9, -177, 47, 12,254,169,167,250, 57, 27, 6,158, 88,237,117,210,117,129, 45,115, 76,153, 99,202, 2, 83,140, 40,243, 49, 38,207, 3, -168,135,159, 87,133,159,122,102, 29,202,216, 32,169, 11, 86,250, 86, 24, 43, 44, 78, 24,180,181,148,198, 80, 24, 63,217, 47, 47, - 75, 42,237, 48, 70, 97, 69,140,108, 36, 36, 73, 70,212,104,146, 52,154, 52,154, 30,180, 27,141, 38, 73,150,145, 52,154,164,173, - 38, 73,179, 69,146,102,164, 89, 70,156, 72,226, 36, 38,138,149,215,152,143,130,210,148,154, 14,142,152,235,215,175, 21,109, 39, - 51,152,220,105,179, 32,230,117,221,167,204, 72, 36, 80, 13,122,252,254,135, 30,224,224,169, 39, 48,189, 62,169, 18,140, 66,197, -195, 89,135,148, 42,100,198, 32, 75, 61,203,217, 58, 40,141,191,167, 45,144,168, 16,165, 75,207, 47, 49,166, 96, 84,142,137, 50, - 63,195,160,172,180,111,211,171,179,124,210, 71,107,149,174,136, 34, 21,122,237, 53,149,174, 72, 27, 41, 8, 65,127, 48, 36, 77, - 83, 18,101,201,210,148, 52,142, 25, 14, 6,228,165,166,217,110, 51,202, 43,136,140,151, 92,173,188, 48,144,136, 36,173, 44,163, - 24,143,145,192, 82,199, 15, 53, 49,198,146,181, 59,164,173, 22, 75, 75, 75, 60,251,244,211, 52,146,152, 84, 65, 53,236, 49,232, -251, 33, 47,227,161,102,239,176,207,113,127, 8, 82,241,236,229, 29,110,189,253,181,244,250,158,240,151,180,154, 56, 45, 40,202, - 17,219, 59,151, 57,187,182, 68,111,255, 42, 79,127,241,113, 34,165,216,221, 31,113,225,194,121, 46, 95,221,101,152, 23,168,180, -201,115,187,251, 28, 14,198,156,185,176, 74,179,219,130, 36,241, 26,241,169, 31,217,108,227,148,106, 60,102,121,121,137,126,191, -143, 72, 18,250,189, 67,110,186,233, 38, 62,255,249, 47,176,189,179,203,234,234, 10,159,125,248, 97,190,246,205,111, 38,206,154, -244, 14, 15,144,101,233,117,226, 71,125,150,150, 58, 12,246,247,104,181,154,108,109,174,115,101,123,159, 86, 51, 99, 56, 26,146, - 23, 57,173, 86,147,131,163, 35,210, 70, 3,109, 60,192, 39, 73, 66,101, 28,227,241,136,213,149, 85, 14,118, 15,200, 71, 99,196, -104, 76,255,240,152,213,229, 53,136,146,144,137, 12,105,213,208,222, 38,141,193,234, 24,103, 12,170, 42,113,165,215,113,208, 69, -238, 65, 94,135,154, 58,245,176, 32,159,122, 71,120, 57, 84, 23,114,110, 66, 4, 98,182, 54,232,210,119,139,216,202,119, 86, 89, -231,103,122,200,216,139,223,136, 32,130, 67, 36, 67,157,218,131,184,156,104,157,132,180,189,177,211,177,197,181,148,178,141, 38, -169,112,164,152,142, 63, 13,195,159,234,175,238, 58, 97,134,152, 1,243, 73, 73,207, 77,123,242, 39, 83,225, 78,164,209,235,160, -130,153,121,238, 39, 91,205,153,144,209,167,196,229,169, 64,206, 52,130,143,138, 74, 79, 53,219,107, 15, 98,166, 30, 48,235,121, -156, 84, 14,171,101,242,102, 31,115,209,220, 12, 99,126, 62, 82,159,201,165,134, 17,158,117, 75,145, 19,211, 41,170,204,120, 53, - 83,150,178,152,168,205, 77,132,233, 39, 35,233,100,232,103,158,214, 98,156,156,138, 0,152,170,162, 56, 62,102,100, 99, 30,217, -190,194,193,206, 10,111,126,227,215,112,233, 51,159,163,234,247, 57,216,219,163,217,104,227,128,170,210,236,238,238,243,103,191, -247, 94, 62,248,107, 15,160,164,100,220,235, 81, 22, 37,237, 86,139, 56,138,217, 92,217,228,117,175,125, 13,159,124,246,128, 24, -197,238,206, 14,168,183,176,178,126,134,135, 63,251, 41,242,188,160,145, 36,126, 26, 88,224, 2, 56, 41, 41,202,156, 88, 42,226, - 64,144,168, 76,133, 43,124,230, 67, 42, 53, 71,244, 19, 14, 34,229, 83,126,205, 44, 35,138, 20, 23, 47, 92, 96,111,255,128,188, - 44,145,195, 33,203,157,206, 68,183,189,223,239,211,106,164, 24,227, 69, 77,108,200,172,168, 72,209,110,183,252,168,211, 68,209, - 89, 90,198, 88,208,149, 65, 42, 77, 89,105, 98, 3,163,178,100,111,119,151,173,179,231,145, 50,154,150, 50,196,204,240, 28,119, -227,244,251,141,164, 98, 39,181,242, 89, 7,112, 70,102,113,218,170,120,173,227, 32,102, 28,187,185,153,222, 98,110, 10, 66,184, -137,236, 20,192, 1, 35,100, 72,223,233, 64,124,171,194,192, 19, 3, 58, 7,237, 71,148,122, 64,247, 76,118, 83,230,232, 50,159, -164,216,235,105,104, 46,200,186, 58, 99,153, 29, 84, 24, 74,241,104,227, 38,227, 36, 61,121,209, 80, 26, 71,105, 28,134, 8,178, - 6,141, 56, 37,138,151, 72,210, 38,105,195, 3,118,220,104,146,100, 45,255,125,163, 65,146,196, 36,141, 6,113, 35, 69,133, 72, - 92,198,145, 39,184, 41, 27, 68, 92,228, 68,142, 83,136,217,154,221,245, 4,164,174, 43,223, 63, 63, 8,105, 58,103, 17, 37, 5, -213,184,224,232,242,115, 92,254,236,167, 57,222,126,142,229, 68, 81,148,165, 23,130, 10, 68, 91,240,147, 12, 19,229,147, 61, 78, - 8, 74,141,223,140, 29, 19, 71, 35,138,164,215,119,215, 37, 90, 23, 24,103,105, 54, 91,108, 63,115,117, 50, 44,196, 24, 75,220, -204,252, 60,118,169,168,202, 2, 33, 34, 15, 48, 85,229,179, 72,198, 80, 21, 21, 14,135,177, 21, 81, 24,179,154, 53, 82,158,125, -238, 42,113,156, 96,172, 96, 52, 42,113,178, 36,205, 26, 20, 69, 14,214,210, 72, 27, 30,224,173,207, 40, 72, 41, 24, 12,250,200, - 56,161,213,237,144,100, 25,135, 7,123, 56,163,137, 16, 84,163, 1,163, 97,159,209, 96,136,104,181,232, 13, 70, 20,149,159,103, -177,183,183,203,250,218, 42,189,227, 67,132,138, 88, 90, 94,161, 28, 29,145,201, 6,187,207, 62,201,230, 74, 7, 83,244,121,230, -169, 75, 8, 4, 7,189, 49,183,220,113, 59,135,135,199,244, 6, 99, 58, 43, 43,244, 6, 67,134,101, 69,179,219, 36,105, 36,164, - 89,131,229,141, 53, 90,221, 54,178,215,163, 24,151,168,102,215,247,249, 27,195,120, 52,164,221,108,242,196, 99,143,113,238,166, - 91,184,112,225, 2,143, 63,126,137, 59,239,124, 45,101,101,249,194,163,143,115,225,220, 89,122,253, 62,199,131, 33, 74, 69,108, -110,174,254,255,169,251,207,103, 75,179, 44,189, 15,251,109,251,154,227,174,203,204,178,221, 61,221, 51,156, 1,201,129, 33, 40, - 58,136, 33,134, 28, 21, 82, 72, 17,252,231,244, 69,255,129,164, 80, 48,100,130, 65, 41,164, 0, 29, 8,130, 67, 12, 49,152,193, -116, 79,187,170, 46,147,246,154, 99, 95,183,141, 62,172,125,206, 61, 55, 43,187,167, 7, 4, 64,178, 34,110,100, 86,213, 77,115, -239, 57,239, 94,123,173,245, 60,191,135,113, 12, 52, 77, 67, 8, 9,239,189, 96,102,239, 30, 88, 44,231,188,126,253,154,190,239, -113,218,178, 92, 46,217, 31,246,104, 43, 78,136,161,239,200, 74,227,171, 90,178,226,187,142,102, 12,236,222,222,114,249,241,167, -168,218,161,138, 78, 3, 52,152, 66, 2, 77, 17,235, 28, 41, 6,180,157,200,110, 66, 89, 79, 54,150, 60,244,132,126, 40, 81,209, -169,104,102, 34, 42, 62,178,213,143,145,202, 57,171, 2,252, 9,140,227,196,208,143,140,253,200, 56,142,114,145,212, 10,235, 45, -174,242,248,202,227,144,172, 13, 93,210, 18,143,157,224,209,122,150, 99, 38,170, 8, 73, 23,209,166,146,177,255,209,201,117, 76, - 89, 43, 59,245, 92,160, 88,249,177,178,124,248, 28,124,175, 75, 63,213,193, 99,230,124,153,120, 63,109,158,207,132,125,241,241, -207,127,154,212,120,206,170,143, 79, 70,241, 71, 17,250,113,223,110,199,113,122, 98,158,127,223,147,247,161,221, 1,124,119,102, -247, 93,211,252,211, 67, 90,107,141, 81,250,201, 14,253, 92, 28,247, 56,106,120, 44,104, 71,111,222,163, 56,193,136, 5,226, 44, - 9,235, 40,246, 57, 69, 94,150,221,105, 78,234, 44,225, 77, 68,121,211,176,163,123,120,141,234, 59,250, 16,120,243,234,199,164, -220, 19,246, 27,118,239,238, 48,109,205, 48, 12,204, 86,115,148,173,112,190,102,138,240,209,199,159,241,246,245, 75,246,187, 45, - 49, 70, 22,139, 5,159,124,242, 17, 55, 85,230,243,207, 63,229, 31,252,236,107,252,204,243,237,203,151,124,245,237, 43,190,247, -217,247, 88,222, 60,231, 87, 95,255, 10,101, 12, 77, 85,145,183,187,211,247, 44,229, 92, 46, 38,178,167,137, 36, 18, 25,163,133, -102,100, 10, 30, 87, 6, 26,199,213, 8, 69, 9, 45, 20,246,205,126, 71, 76,137,190,239, 32, 37,174, 86, 75, 98,140, 12,227,192, - 48,244, 56,171, 73, 37,179,222, 25, 75, 72,177,236, 87, 29, 41,130,111,106,234,122,134, 82,154,183,111,222,160,147,112,216, 61, -138,125, 63,113,232, 58,102, 74,160, 38, 74,169,239, 40,201,159,236,125,242,123, 89,224,191,177, 91, 87, 79, 45, 34,239, 13,208, -207, 63,237, 59,208,136,252,244,231, 79,212,165,249,209, 21,145, 79, 56,202,116,202, 14, 16, 97,218, 17,183, 58, 66, 44,105,102, -101,103,158,199,161,160, 90, 59, 66,233,194,195, 52, 72, 55,113, 28,207, 37,158, 60, 68, 49,113,202, 51,152, 66,100, 74,153, 16, -115, 97, 52, 40, 82,182, 68, 60,170,178,212,174,162,117, 53,198, 55,152,170,198,215, 51, 92, 53,199, 85, 53, 85, 93,227,234, 6, - 87, 53,216,170,194,249, 10,235, 44,214, 73,214,188,246,101,252,103,213,137,196, 7,250,140,240,152, 79, 40,204,156,249, 14, 58, -249,175,106,254, 83,103, 78, 18, 13, 18, 54,147, 35,119, 95,127,197, 55,255,248, 79, 48, 58,178,155, 6,121,189, 67,230,152,109, - 99,202,134,180,118, 10,239, 52,135, 97, 98,152, 32,160, 9,229,253,165,203,163,220,212,142, 16, 36,110,115,182,156,243,230,221, - 61,161,168,252,157,183,140, 67,143,175,252, 41, 26, 83,105,141,117,142, 97, 24, 8, 49,210, 52, 53, 93,223, 81, 38,172,104,173, -184,184, 92, 18,166, 1,173, 13, 15, 15, 7,158,191,184, 96,191, 31,232,250,145,213,101, 85, 2, 72,192, 91,131,247,150,169,235, -176,198,114,185,154,209, 29,118, 56,107,176, 85,205,108,190, 64, 25, 75,119,216,211,214, 21,196,145,126,127, 28,187,207,216,117, - 29, 15,235, 45, 57, 89,238, 31, 30,104,154,154,105,232, 81,206,114,177,108, 9,211,158,198, 40,190,249,197, 47,184, 90, 54, 48, -110,248,230,245, 75,198, 49,144,148,225,249,103,159,242,205,219,119,188,124,245,150, 23, 31,125,202, 16, 97,202,160,189,167,106, - 43,234,218,114,117,125,193,197,205, 5,179,229,138, 80,123,186, 46,224, 77, 35, 55,164, 12,125, 8,236,118, 59,170,186, 33, 78, - 35,164, 68,219,212,188,252,230, 91,158,127,244,156,175,190,250,134,229,106,137,173,229, 76,123,216,237, 48,206,113,177, 90, 16, - 66,135,117,134,118,177,128,253,129,102,222,176, 63,116,180,109,203,225,112,160,174,234,114, 81, 74,132,105, 68,105,133,201,138, -108, 12, 73,107,162,146, 46, 87, 77,145,135,175, 94,241,226,179,239, 99, 47, 53,182,170,209,222, 75, 39,171,101,106, 68, 6, 83, -196,162,217,138, 78, 69, 91,143,178, 14,229, 28,202, 88, 18, 7,166, 94, 26, 16,131,150,201, 87,214, 24,132, 31, 47,181, 48, 17, -167, 72, 63, 78,116, 93,199, 97,191,103,183, 27,232,251,129,148, 34,214, 89,234,166,162,142,169, 64,150, 20,198,103,172,115, 88, -171, 30,129, 51,103,234,248, 83, 1, 45, 25, 36, 89, 68, 98,242,115, 37,163, 45,109,142,217,234,165,248, 27,243,168,234,127,178, -190,202,167,240,177,167, 16,183,199,194, 43,113,178,241,169,122,255, 73, 68,109, 81,233,199,115, 14,204,113,228,158, 79, 58,130, -115, 11,121, 58, 27,199, 83, 68,181,167,162,254, 8,166,127,143, 8,166,120,204, 39, 63,239,212,143, 93,122, 62, 3,215, 31,129, -253,170,240,188,245, 49,139,189,160, 64,207,246,235,239, 31, 49,249, 36, 94, 72, 37, 93, 75,126, 76,197,175, 43,158, 93,217,209, - 25,173, 78,191,231,135,129,253, 79,125,130, 41,229, 2,189, 24, 72,211, 26, 99, 53, 38, 6,188,238, 73,140,236,118,183,164,241, - 64,151, 19,245,245,130,186,153, 49, 96, 8, 49,241,247,255,203,127,128,138,153,113, 18,241,211, 52, 5,154,166,165,174, 27,102, -173,252,217,187,221, 22,162,102, 82,142,127,240, 71,255, 53, 47, 62,254,223,242,175,252,107,127,155,255,246,143,255,136,237,254, - 64, 93,251,179, 17,114,225, 12, 23,191,177,177, 6,148, 38, 76,129,182,174,101,100, 30, 35,222, 24,166, 20,177,218, 48, 78,129, -172, 20,117,219, 16, 67,228,221,235, 87,114, 0,150,211,247,197,139,231, 40,173, 36, 42,180,236,105, 99, 81,130,134, 16, 24,167, -129,113, 10,204,230, 11,118,251, 3,117,221, 18,179, 35, 38,205,205,243, 23, 88,231,248,230,235,111,133, 9, 62, 76,212, 85,205, -108, 62,167, 58, 28,136, 90, 67,124,106, 55,251,117, 66,185,223,218,202,246,157, 46,254,108,196,116, 78, 51, 60,253,119, 10, 0, -231,241, 38,124,122,168,210,163, 72,132,211,136, 43,202,248,175,248,190,137, 1,166, 94,152,236,161,151,110,124,234,136, 83, 87, -118,230, 19, 57, 68, 33,184,133, 35, 99, 61,150,206, 94, 18,212,132, 53,174, 36,187, 32,166,194, 92,200, 18,186,146,178,164, 86, - 21,165,184,242,150,218,121,180,173, 49,110,129,175, 27,140,151,130,110,235, 25,198, 75, 17,183,181, 61,129, 94,172,247,167,177, -161,210,246,140,133, 47, 33, 55,232, 44, 83, 40,117,156,119,235,179,204,122,245,129,233, 69,254,206, 69,232,183, 19, 44,168,179, -221,251, 35,109,123, 28,122,126,242,199,127,204,246,219,111, 49, 6, 38,167, 8, 83, 34, 6, 48,202, 16, 74,228,143,183, 48,111, - 43, 98, 78,132,144, 9, 81,166, 36, 49,131, 87, 10,173, 50,179,198,203, 56, 63, 69,140, 49,164, 12,155,237, 30, 20, 88,227,233, -135, 81,248,225,229,235, 11, 81,186,189,156, 5,241,170,148,162,239, 39, 82, 4,235, 29, 38, 6,170,202, 98,141,194,106,203,102, -179,193,104, 67, 74,154,237,182, 39,103,209,152,228, 99,222,128, 86,167,116,177,202, 90,186,174, 23, 5,183, 86, 52,109,141,210, -154,187,187,123,150,109, 13, 97, 66, 27,199,253,221, 59,174,174,174,217,238, 15,172,183,123,166, 49,178, 47, 88,218, 12,216,202, -211, 84,142,161,219,209,204,106, 94,127,253, 43,158, 93, 44, 88, 84,154,111,126,245, 37,253, 52,162, 93,195,124,117,197,203,119, -183,188,187,223,176, 88, 93,162,124, 77, 84,138, 49, 70,218,249,156,186, 54, 92,172, 26,102, 11,249,104,151, 51,174,219,134,237, -110, 96,183, 17,221,129, 55,150, 93,183, 39,171,140,117,154,135,251, 91, 86,171,107,166,113,226,112,232,152,198,192,205,243,103, -124,243,242, 21, 31, 61,127, 78, 40,207, 89,204,138,135,205,158,166,242, 52,170, 18, 20,245, 98, 65, 55,142,104,163, 89,173, 86, -236, 54, 91,134, 97, 96, 24, 71,156,115, 76, 49,224,156, 39,233, 81,238, 19, 10,230,171, 37,119,175,223,209,239, 14,212,219,142, -237,171, 55,180, 90,145,103, 51, 76,108, 81, 85, 6, 83,159,246,227, 71,207, 55, 38,146,205, 36, 13,153,117,104, 95,225, 92,133, -181, 14,235, 59, 66, 63, 18, 39, 41,174, 33, 4,193, 90,235, 82,200,166,137,161,239,217,172, 55,108, 55, 27, 54,235, 53, 15,155, -131,164, 78,230, 76, 93,123,230,109,203,124, 62, 39,204, 18, 85,136,216,224,112,206, 97,207,243, 22,242, 35, 88,237,152,235,158, - 75, 50, 98, 42,142,148,152,226,153,127, 92,147,147, 66, 69,249, 58,116, 41,252, 79,246,231, 71,112,219, 41, 30, 60, 63, 17,202, - 29,207,124,177,130,135,199, 24,241,179, 51, 84,138,116,105, 18,206,136,170,199,194,206, 25,130, 61,126,168,160,159, 71,175, 38, -125,158,143, 92, 36,253, 28,195, 47, 52, 41, 63, 38,161,145, 31,163,236,142, 7,128, 42,227,141, 35,187,219,148, 98,123,228,232, -158, 23,246,115,235,218, 35, 4, 64,157, 21,116,131, 74, 25, 21, 35, 38,171,130,180,204,103,136, 61, 78,226, 9,148,236,232,244, -241,231, 39,171,194,163,161, 93, 29, 25,222, 58,147, 85,194, 57, 77, 74, 19, 33,118,168,148,209, 49,179,126, 88, 11,220,194, 59, -158, 61,251,148,213,245, 13,205,114,201,184,239, 24,246, 91,194, 97,143,211, 6,239, 18,135,177,199,207,174, 88,204,175,176,186, -225,219,187,123,126,167,159, 10,176, 70, 81, 27, 67,191, 94,115,127,187,225,197, 39,223,231,179, 31,252,144, 87,223,126,193,204, -203,133,102, 74, 74, 70,218, 41, 48,165,112,178, 9, 46,155,150,102,233, 88,212, 53,111,222,188,198, 91, 75, 50,134,221, 40,173, -133, 42, 95,171,175, 91, 94,190,124, 73, 55, 12, 40, 96, 53,159,161, 82,226,147,143, 94, 48,246, 61, 99,154, 36, 28,228, 72, 29, -210, 14,149, 51,227,225,192, 48, 69,170,139, 43,156,171, 88,223, 63, 48,132,114,163,141,153,152, 53,151,207, 62,130,251, 13,125, -216, 18, 83,230,176,125, 64,197,190,128,110,128, 24, 74,146,186, 42, 31, 79, 21,157, 39, 64, 72,193,161, 74,243, 44,208, 20,115, - 86,196, 37,197, 55,227,180,194, 40, 25,215, 82, 98, 71, 85, 72,100, 23, 33,107,185,181,146, 81, 73,242, 5, 84, 6, 65,239, 80, -212,226,197,106,151,138, 85, 44, 37,114, 16, 64,140,138, 19,196,145, 28,134, 34,122, 27,136,225,216,129,247,132, 81,254,123,154, - 4,248,146, 75,142, 60,233,113, 55, 37,157,121, 38, 4,121, 16,195, 20, 9, 25,201, 48,144,103,191, 36, 36,121,140,247, 84,182, - 66,251, 6, 83, 73, 39,110,172,199, 84, 51,116, 53,127, 20,177, 85, 21,174, 18, 97,155,113, 14,237,100, 95,103,140,121, 18,130, -161,148, 66,153,115, 28,238,217,182,251,152, 94,252, 36,236, 38, 63,165, 84,157,111,252,206,172, 46,127, 41, 95,224, 20, 99, 43, -234,100,131, 34, 42,141,214,176,127,251,134,215, 63,251,115,212,184, 69, 79,145, 60, 66, 63, 28, 93, 4,194, 50,168,116,102,222, - 26,234,214,115,123,183, 35, 20, 1,148,202, 10,103, 52,228,136,181,138,182,245,132, 56, 73, 87,225, 27,222,220,117,146,173, 88, - 80,196,242,189,181, 12,195,200,229,197,146,126,191,167,170,107,250,161, 39,230,132,245,142,119,111,247, 92, 93,206, 57,236, 58, -170,166,162,118,142, 48,140, 92, 95, 95,240,171, 47, 95,177, 88,212,236, 15,157,120,176,125,113,133,164, 68,154, 38,218, 85, 75, - 24,122,116,142,104, 45,122,149,110, 72,124,254,253, 79,217,236, 14, 52, 83, 64,165,137, 60,193,242,242,146,245,118, 45,170,105, -163,121,119,119,199, 48, 74,214,251,122,187, 21, 8,139,119, 56,173,200, 83, 71, 59,155,115,255,250,107,174, 22, 51, 26,103,249, -234,235, 95, 49,198, 0,182,198,181, 43,238,183, 3,119,235, 14, 91,205,169,231,151, 4,237, 25,167,137,102,117,137,113,153,249, -197,156,249,114, 78, 51,111,168,218,138,102,230,176, 73, 16,210,135,195,107,166, 96,112,179, 11,116,125, 79,131,151,128,159,148, - 24,199, 81,246,191, 74,113,123,119,203, 71,223,255,140,168, 12,235,174,163,158, 45,120,120,123,139,114, 7, 94,124,252, 17, 81, -107, 54,125,207,194,104,180,142, 92,206,231,228, 49,210,135,200,106,177, 98, 28, 38,250,195,136,111, 42, 25,211, 55, 21, 91,179, - 39,166,196,184,223, 83, 59, 15, 58,179,239,118, 60,215, 31,241,240,237, 27,108, 93,163,198, 17,230, 19, 58, 76, 80, 71,178,107, - 80,214,149,179,219,144,180, 5,227, 81,182, 70,133, 17,103, 6,146,177, 40,231, 81, 77,195,216,139, 24,117,234, 7,113,152,140, - 19, 83, 22, 33, 91, 24, 70,134,126,224, 97,123,224,238, 97,203,221,253,150,135,237,150,125,215,161, 50,180,190, 97,222, 79,172, - 70, 9, 4,106,199,154,170,242, 56,103,177,101,133,192, 25, 6, 58,103, 69,206,177, 36, 36, 30, 39,122,178,211, 22, 1,120, 44, -207,161, 41,130, 83,125, 74,152, 59, 21,237,247,246,217,233, 61, 47,252,185, 98,253, 20,235,122,246,249,231,177,174,194,134,225, - 73,176,217,113,162,240, 72, 93,141,103,127, 94, 58, 5,205,156,184, 96,101, 50, 96, 83, 86,103, 58,113, 25,143,197,163,215, 56, - 29, 29,223,234, 4,162, 55,103, 93,184, 64, 28, 76, 73,216,209, 24,173,113, 69,180, 99,180,146,209,225,123, 99,114,173,244,147, -232,206,147, 15, 55, 29,189,239,137, 20, 36, 82, 81,197, 44, 98,163,156,159,160,198,242, 17,208, 81,190, 57, 79,130,102,206,200, - 58,100,137,132,201, 81,242,137,199, 41,224, 45, 88,103, 8,253,196,188,153, 49,142, 3,135, 16,185, 92, 94,210, 94, 94,145,180, -136,113, 98, 18,241,132, 67,246, 72,113, 10,140,195, 72, 83, 87, 92, 44,103,188,184,185,226,235,175, 54,104,101, 1, 45,135,116, -121,209,223,190,125,199,245,205, 21,159,124,250, 25,214,104, 86,179, 86, 60,229, 74, 50,210,205,249,126,186,120,198,239,215,107, -174,151, 11,174, 46, 47,176,117,197,253,110,207,174,235,249,189, 31,125,159, 28, 51,247,235, 7, 24, 3,141,177,252,225, 95,255, -235,236,119, 27,166, 41, 48, 13, 35,179,186,166,245,142,222, 40,250,195,254, 17, 76,146, 50,195, 32, 99,210,182,109, 25,198,146, -110, 85,130,116,246,135,158,174, 23, 17, 77,138, 80, 55, 51,174,157,231,229,203, 55, 60,220,223, 99, 43,225,157,199, 35,199, 89, - 61, 85, 80,159, 73, 16,159, 36,168,156,208,175, 37,120,192, 40,133, 85,178, 75,117,198,226,189, 19,241,145,213,232, 28, 81,113, - 36,135,158, 52, 41,208,246,212,140,146,101,207,164, 10, 97, 45,145,196, 71,158,197,251,170,210, 89,182,121,140,164, 88,148,235, - 97,132,208,147, 38,249, 8, 71,218, 91, 17,195,196, 88,132,113,229, 6,124,196, 19,159,178, 7, 10,134, 52, 68,113, 74,132, 80, -148,171, 24,178,174,132, 20,230, 60,214,215, 24,223, 98,171,186,252,188,193,214, 13,206, 55,104,231, 49,174,236,194,143,164, 54, -107, 81,214,136, 66,221,104,148, 61, 43,226,234, 41,221, 46,255,218, 54, 91,255,134,244,196,223,160,115,224,183,119, 41, 60, 38, -221,150, 73, 64,136,220,126,243, 21,191,252,233,143,233,251,158,126, 72, 36,165,137, 9,108,233,194, 44, 18,195,238, 43,195, 56, - 6, 81,244,167, 71, 17,144, 60, 27, 80, 87,174, 28,114,129,164, 4, 73,122,232, 71, 82, 6,231,116, 17, 50,201,120,222, 88,185, -236, 24, 37, 10,245, 30,177,180,237,118, 19,190, 50,116,195,136,177, 14, 69,146,203,122, 48, 76, 49,210, 15, 18, 82,210, 15, 34, -174,203, 41, 51, 13, 35,243,121, 67,208, 6,163, 52,219,253,200,179,235, 57,195,216, 19, 98,230,243,239,125,206,155,183,183,180, -237,140,110,127, 96,177, 92, 80,169, 76, 24, 7,222,189,126,197,199,159,126,202,253,237, 29,119,183,119,212,213,140,205,250, 65, -148,243,206,138, 64, 50,140,204,154,150,245,195, 45,109,235,240, 94,243,238,237, 91,186,126, 68, 91, 75,221,206,217,118, 35,235, -221,192, 56, 37, 62,122,126,131,171, 26,134, 41,156, 68, 84,215, 87, 87,212,149,161,246, 21,243,249,156,249, 98,129,247, 14,163, - 44,166,242,204, 47,150, 28,238, 14,116,187, 3,174,174,209, 89, 99, 85, 37, 34,184,148,177,222,209,168,150,110,232,153,250, 9, - 95,215, 76, 99,196,213, 13,237,229, 53,155,190,103, 54, 70,150,173,103,182, 88,177,126,184, 99,209,214,172, 86, 11,238,239, 30, -104,155,138,113, 24,193, 25,153,120,149,213, 85, 10, 73,206, 41, 85,196, 90, 49, 49,159,207,216, 29, 36, 88,231,221,235, 55, 76, -206, 50, 91,205,105, 47, 14,248,197, 28, 59,159, 99,155, 25,214,183,100, 91,161,173,151,179, 82, 31, 21,210,142,172, 43,180, 29, -208,110, 68, 87, 45,166, 22,253, 74,238, 71,134,195,158,110,119, 32,236, 59,166, 65,112,215,135,253,129,238,112,160,239, 71,250, -113,162,159, 34,253, 36, 29,119, 8,148,200, 84,201, 41,232,198,154,166,242, 56, 39,133, 93,146, 6,207, 80,226,199,143, 35, 36, -135,116, 82,198,199, 28, 79,160, 23,173,205,137,173,114,140, 78, 37,229, 15,186,182, 78, 49,174, 39,208,218, 99,225, 21,203,119, -233,198,207,168,172,167, 78, 61, 75,242,102,204,137, 20, 57,253,222,199, 49,254,185, 81,251, 52,169, 60, 75,137,203,197,245, 20, - 99,194,166,179,125,104,137,134,150,196,167, 92, 18,179, 52,143,197, 25,100,140,110,101,212, 37, 9, 91, 22, 99,180,236,163,202, -191, 91,107,165,168, 27,115,218,117, 31, 5, 11, 71,163,125, 62, 67,206,166, 44, 47,136,158, 38, 9,126, 57,122, 22, 83,250,181, -161, 33, 71,241,221,135,130, 68, 84,126,116, 55, 74,129,209,212,237,130,113,154,240, 5, 59,105,173, 5,173, 88, 44,151,120,107, -153,215, 51,146,115,244, 65, 46, 23,160, 11, 27, 24,178,213, 56,101,177,218,210,212,150,139,165,103,181,112,132, 23,215,132, 41, -161,149,103, 28, 38,134, 97, 68, 29, 58, 94,191,122,205, 15,126,240, 57, 87, 23,151,212,214,113,185, 90,224,140, 97,152,242,105, -170,160,138,194,114, 12, 19, 15,187, 45,149, 82, 28,250, 1,239,107,110,110,158,177,217,127, 73,227, 28,173,181,204,150,115, 8, - 19,171,229,146,185, 86,124,126,125,141,127,241,156,118, 54,227,207,255,226,103,140,251, 3,117,161,137, 21,215, 39, 83, 76,244, -163,136,144,170,170, 2,235, 33, 10,246, 87, 89, 3, 83,192,123,201, 9, 55,218,146,208, 28,186,158,166,106,248,228,147, 23,188, -122,253,134,144,182, 37,151,254, 12,140,242, 33, 95, 20,233, 4,138,144, 53, 76, 46,211, 27,112, 86,227, 75, 62,180,179, 22,103, - 29, 85,109,169,156, 66, 19,100, 26, 48,236, 72,157,149, 93, 93,174,209,177, 96,126,179, 20,110, 82,144, 93, 87, 16,203, 88,142, - 65,178,222, 99, 32,199,177,248, 95,167,146, 55, 46,202,244, 28,197,150,150, 99, 25,169,159,118,237,185,100,142, 63,238,168, 36, -151, 32, 51,133, 68,204, 48, 69, 33,181,137,184,203,161,171, 22,235,252,105,132,110,124,141,171,228, 67,215,115,140,175,176, 78, -138,189,113,210,185,107,107,203, 51, 33, 99,116, 85,158, 5,101, 10,200,226, 60, 54,246,131, 54,179,127,177, 12,128, 95,183,128, - 87, 57,147,198,158,215, 95,252,130,119,223,126,131, 41, 98,143, 97, 76, 56,107, 69,225,140,136, 57,141, 77,104,171,217,110, 71, -166, 40,122,140,148, 31, 17,156,214, 40,170,198,179, 59, 28,164, 49,112,158,245,166, 35, 4, 9,243,176, 86,108,153, 99, 12, 52, -117, 5, 49,162,201, 52,181,199, 26, 1,201, 24,231,233,186, 14, 95,123, 18, 6,149, 19,206, 73,132,111, 38,179, 89,239, 36,131, - 97, 72,132, 33, 98,156, 97, 28,133,114,102,181,161,109, 42,118,219,157,248,178, 67, 96, 28, 35,159,125,246, 41, 67,223,179,219, -238,249,248,227, 23,116,189, 76,114,218,101,203,195,221, 91,172,134,105, 24,120,253,242, 37,109, 85,241,240,240, 64,101,101,109, - 96,173, 38,199,129,122,177,164,235, 55,132, 52,177, 90, 85,236,119, 59, 54,251, 29,190,170,153, 45,151, 60,236,122,118, 93,100, -189, 61,240,252,227, 79,241, 77, 67,215, 75,114, 34, 4,110,174,159, 97, 85,100, 86,215,204, 42, 71, 91, 85, 37,236, 67,225,124, - 77,206,150,122, 54, 99,216, 78, 12, 57, 83,183, 11,118, 15,111,200, 86, 86,147,227, 36, 69,124, 76,129,186,105,216,222, 63,224, -125,195,226,226, 2,211,204, 64, 59,188,173,121,115,191,149,203,166,177, 44,175,159,179,126,251,138,113, 28, 89, 44, 23,220,222, -222,161, 80, 52,181,163,239, 7,134, 62,226,171,138, 48, 5, 82,140,212, 77,205,190,235,209, 70,244, 63, 90, 41,250, 67,199,110, -156, 88,127,249, 21,237,162,101,121,189, 98,113,177, 98,182, 90,210,204,102, 52,179, 5,122,182, 34,251, 6,108, 5,198,145,181, -149, 24, 95,237, 72,198,160,180,195,184,136,114, 21,218,214,224, 6,185, 4, 24, 95,194,171, 70,134,125, 96,236,123,186, 78, 10, -251,216, 15,132, 41, 18, 67, 38,133,204, 16, 39,185,248,231, 64,136, 35,253, 56, 80,251,170,236,212, 37, 14,246, 88, 11,227,201, -197,149, 79,100, 82,142,103,242,147, 93,121,126,106,201, 62, 81,240,212,211,139,193, 25,124, 45,159,129, 96,222,239,226,243, 89, -248,205,147,216,214,227,248,189, 76,200,211,217,142,252,113, 2,167,201, 5,169,171,206,110,222,143,140,250,199, 11,133,125,178, -227, 84, 71,187,137, 72,248,157, 81, 88,163,113,214,149,194, 46,255,110, 75, 33, 55, 70,151, 2, 47,130, 30,163, 21,206, 90,249, -255,214, 96,236,113,159,174,203, 77,233,177,211,142, 79, 8,116, 9, 29,226, 83, 42, 79,126, 68,201,254,186,211,239, 67,137, 54, - 71,130, 79, 58,225, 84,229,161, 88, 93,220,112, 56, 28,196,190, 53,175,184,156, 47,232,194,200,184,221,156,236,104,126,121,197, -237,122,203,148,192,107,208,214,148,104, 64, 73,146, 26,186, 30,106,197, 39, 47,174,249,222,103,207,249,236,147,143,249,118,223, -209,117, 19, 57, 31,176,206, 17,178, 98, 56, 28,232,119,123,186,237, 22,167, 20,243,170,194, 27,141, 10,147,220,183, 78, 44,123, - 67,204, 2,219, 25, 1,101, 52,243,229, 18,107, 44, 78, 27,129, 37,164,128,243,134,155,103,215,188,123,243,142, 23,207,110,176, - 90,211, 86, 21,105, 24,249,193, 39,159,130,202, 28,182, 59,170,186,162,174,106,185, 21,198,200, 88, 34, 86, 67, 12, 24, 99,113, -222, 51, 30,130, 8,240,140,198, 24,135, 86,162, 98, 62,116, 35, 97, 26,217,108, 54,104, 39, 35,226,120,144, 34,110,222, 43, 57, - 42,203, 8,253, 92,124, 46,175,179,140, 89,173,150,247,144,247, 78, 10,219,217,123,196, 25,141,179, 96,153,196,191, 58,108, 9, -157, 33,232,132,202, 1, 19,103, 40, 39,131,254,148, 38, 41,232, 81, 58,243, 56,246,168,116,204, 23, 31,203,142,124,144,127, 47, -182, 52,217,143,201,231, 75,222,120,217, 63, 37,185, 45,231,147,152, 45, 73, 38,122, 17,181, 69, 20, 89, 89,208, 14,188,199, 87, -173,140,208, 93,141,245, 51,172,175,164, 27,175,164,168,219,170,198,249, 26,237, 60,218, 57,249,126, 58, 43,221,183, 53,178, 19, - 87, 26, 91, 38, 92,226,161,125, 79,172,175,158,150,239, 99,162, 32,255, 2,125,255,127,217, 63, 58, 67,191,221,240,205,207,127, -202,184,223,209,148, 11,122, 78, 65, 60,232,229,114,221,212, 26, 99, 18,218, 42, 14, 67, 36, 68, 75, 82,134,148, 70,140, 5,103, - 21,198,200,196, 96,140,153,182,242, 28,186,145,113,146,117,198,172,178, 69, 3, 18,229, 50,104, 52, 70,101, 20, 17,231, 76,193, -233,194, 52, 76,104,173, 25,134,192,229,229,140,238,112,144, 75,163,209, 2,254,153, 38,166, 35,218, 24,117, 18,199, 89,163, 25, -187, 14,171,165, 59,187,185, 89,176,217,110,152,205, 23,196,156,184,187, 91,179, 92, 44, 72, 49,226,172, 38,134,145,177,135,254, -176, 99,214,206,216, 61,172, 9, 83,120,188,232,196, 9, 87, 85,132, 56,178, 88, 46, 81, 76,196, 60,113,125,179,162,235, 14,108, - 54, 59, 81,210,175, 46,216,117, 35,235,253,192,195,182,103,182,188, 98,177,186, 96,223, 29, 24, 71,177,185,126,252,241, 51,114, - 28,152, 53,115,150, 77, 77,227,229, 66,152,115, 70, 91,139,173, 43, 82, 54,204,150, 51, 14,235, 14, 63,155,193,168, 24,110, 51, -198, 74, 96,207,253,253, 61,207, 62,250,136,168, 18,132, 40, 19,215,113,164,219,119, 84,171,200,110,138, 92, 93,222,176, 93,175, -121,247,176, 67, 95, 93, 16, 66,192, 54, 51,246,251, 13,227, 52, 81, 55, 13, 41, 4,134,174,163,242, 21, 93, 63, 48,102, 17,157, - 57,231,196,137, 83, 70,252,162, 89, 72,244,125, 15,104,110,223,221,241,246,221, 59,234, 55, 53,139,139, 5, 87, 87,151, 92, 94, - 44, 89, 93, 92,226,174,246, 84,179, 5,174,153,161,171, 22, 92, 69, 54,158,172, 13,218, 56,193, 28,167, 68,214, 14,171, 43,178, - 29, 80,198,163,140,197,106, 9,135, 33, 71,134, 97,192,108,148,188, 54, 67,199, 56, 4, 33, 61, 70,113, 21,185,210,204,116,227, - 68, 66, 49,142, 9, 99,198,179, 9, 49, 37,120,236,168, 59, 74, 50,189, 43,133, 87,184, 50,143,221,185, 57,213,181,227, 26,185, -132,192,104,253,216, 65,159,130,208, 78,108,185,199, 41,151, 42,160,177, 39, 65,104,233,241,252,231,177, 41,213,199,162,156, 51, - 42, 27,244, 73, 90,255,104, 23, 63,218, 78,159,212,189,147, 87, 93, 46,215,164,132,149, 78, 90, 21, 80,229, 49,172, 94,138,138, -117, 10,239, 13,214,216,210,117, 75,144,189, 43, 93,136,228, 96,155, 83,247, 46,135,186, 20,117,109, 75, 49, 55,230,244,141, 58, -222, 44, 82, 9,160, 56,174,255,210, 17,211,167,158, 50,187,159,198,103,170,223, 74,116, 37, 37, 72,188,143,185,164, 2,205, 22, - 43,124, 51, 71, 27,143, 10,129,190, 31,185,188,244, 40,103, 57,244, 35,141,183, 84,245,130,122,126,193, 92,213, 28,134, 73, 4, - 17, 57, 1,146,184,213,119, 7,193, 31,198,128,213,154,237,102,203,167,159,255,144, 47,246,239, 88,111,214, 56,115,193,216, 29, -208,218, 17,199,129,219, 87,175, 80,227, 68, 30, 70,210,208,163, 98,196, 25,195,152,142,162,149, 92,246,229, 26,107, 28, 22, 81, - 77,207,230,115,194, 20, 80, 25,154,186, 65, 91, 67, 55,246,160, 53,247,187, 45,255,242,191,250,215, 48,206,128,211,108, 54,107, - 86,139,149,216,212,172, 33, 20,246,123, 85,205,100,244,222, 11,222,116,154, 6, 92,221, 66, 78,120,103,104,154,154,156,160, 59, -244,108, 55, 27,182,187, 61,235,205,142,126, 24,233,134, 17,109, 60,205,226, 74, 86, 5,103,118, 11, 37, 91,242,226,227, 20,202, -152, 42,158,227, 99,209,182, 90,201, 1,174,205, 99, 33,119,178,166, 49,186,104, 45, 76,150,162, 30, 59, 24,118,196, 78, 17,116, - 64,229, 9,166, 30,156, 38, 37, 33,222, 81,126,204, 81, 66, 83,114, 20,200, 75,138, 19, 41,140,210,205,159,165,200,229,227,141, -248,200, 85,136,199,116, 64,185, 93, 75, 65, 47,251,126, 42, 80, 26, 83, 53, 56,223, 74,183, 93,213,104, 95, 97,143, 69,221, 87, -101,188, 94,126,238, 43,180,117, 24,231,139,221, 71,157,137,218, 10,228,229, 73,132,172,122, 15, 73,203,175,247,184, 42,126,147, - 3,255, 95, 32,186,239,140, 43,157, 38,182,239,222,240, 15,255,243,191,139,158, 6, 48,150,110, 16,177, 83,152, 34, 6,104, 42, -141,183,224, 43,199,254, 16, 24, 35, 36,165, 9, 49, 21, 10,154,168, 48, 42,239,233,186,129,170,170,100,146, 52, 5,134, 16,101, -196,108,140, 76,197, 82,164,246,134, 20, 70, 46, 46,230,228, 48,225,154,154,245,122,139,214,134, 67, 55,145,162, 20,179,190,235, -105, 42,143, 81,146, 65, 97,173,103, 26, 70, 66, 76, 56,107,168,156, 99, 44,162,198, 20, 19, 97,232, 73, 4,150,139,154,174, 59, - 80, 85, 53,139,229,146,187,187,123,246,251, 3,223,251,222,167,244,125,135,214,112,121,177,228,176,123, 0, 37,250,138,135,245, -134,186,170,185,189,219,156,206,168,105, 28,105,230, 21,218, 64, 32,112,113,121,193, 20, 2,235,221, 1,227, 42,218,153,196,150, -222,239,123,214,219, 14, 95,181,124,254,217,103, 60, 60,108, 24,166, 30, 99, 21,243,213, 28,173, 35,222, 27,230,109,131,115,150, -182,173,169, 42, 89,215,248,166,198,183, 13, 42, 24,234, 38,201,123,179, 77,140,113,100,177,186,100,183,190,167,169, 43, 82,218, -129, 70, 28, 59,211, 1,173,164,248, 77,211,200,126,187, 35, 91,203,237,237, 45,151, 23,151,236, 54,107,190,122,245,154, 31,125, -254, 41,145,196, 97, 10,212,217,226,173,236,144,141, 51, 36, 37,197, 39,132,137,148, 11,157, 77,149,215,176, 36,182,121,231, 25, -250,158,106,117,201,240,176,102,127, 56, 16, 31,214,216, 55,239, 88, 46,222,112,125,185,226,250,230,154,213, 71, 55, 44,175, 46, -105,151, 43,234,249, 2,221,204, 48,199,226,174, 29, 90, 89,148, 54, 40,101, 72,202,128, 46,240, 43, 3, 90, 69,218,130, 21, 78, -192, 24, 35,221, 48,210, 15, 35, 67, 56,144,146, 38,155,130, 79, 46, 83,225,132, 98,152,142, 10,156,233,196, 95, 57, 54,145,211, - 20,232,167,137, 97,156, 74, 3,144,202, 42, 89, 73,243, 99, 45,222, 57,234,186,166,209,230, 68,102, 60,214, 60,101,236, 89,151, -252, 52,209,237, 84,123, 50, 31,132,210,164, 52,157,146,217,212,153,115,236,184,138, 62,106,204,158, 4,181, 41,117,226, 60, 60, - 13,161,225, 9,154, 86,105, 37,227,247,202, 25,241,241, 1, 86,107,204,105, 76, 42,133,219,123,125, 82, 16, 74,151,101, 31, 71, -240, 71,145,143,209,216,162, 42,181, 86, 46, 1,218, 60,170,211,207,193,247,177,176,191,245,217, 46,241,145, 65,146, 11,107,252, -187, 89,181,143,118,233,191,164,184, 75, 48,246,163, 95, 16, 69,221,206, 65,121, 22,139, 25,173,211,216, 12,117,211, 48,246, 29, -179,197,138, 89, 61,227,249,205, 39, 12,174, 37, 87, 17,125,232,217, 31, 14,244,251, 53, 97, 28, 32, 12,188,123,247,134,186,241, - 56, 91, 49,141,137,135,251, 61,174,186, 21,161,157, 86,164, 56,146,163, 71,167, 64,158, 6,190,253,242,151,196,205, 43,110,191, -253,134, 23,215,215, 92, 95,174,216,188,187,231,132, 64, 56,238, 73,114, 70,105,209, 21,236,118, 59,222,188,125,139,115,142,245, -118,203,245,245,141,136,104,154,150,113,138, 88,239,248,241, 79,127,138,183,154, 79, 62,126, 65,158, 2,179, 28,113, 74, 40, 71, -181,171, 37,132,195, 58,172,177,164, 16,177, 90, 51,116, 61,179, 89, 98, 8, 19,251,253,129,237,110,203,221,221, 3,219,237,158, - 16, 83, 9,198, 24, 75, 20,102,226,208,237,169,154, 37,139,182, 38,246, 69,204, 70,150, 52, 42,101,200,197,119,175,142,249,224, - 74,220, 5,214,104,236,233,225, 56, 94,250,244,233, 66, 40,226, 73,117,250,115, 84,236,201,147, 35,245, 48, 81,172,101,110, 67, -208,138,112,234,200,143,158,112, 25,181, 31,125,164, 18, 65,152,206, 84,241,162,132, 63, 37, 4,150,212, 50, 81,173,103,129,207, - 40,131, 50, 21,202,123,148,245,120,215, 96,125,133,171,102,210,121, 31,139,186,171,112, 85, 93,196,108,130, 89,181, 78, 80,171, -198,149, 3,200, 30,181, 34,143,144,165, 83,216,253, 57,242, 81,253,246,137,117,255,131,248,231, 12,163,123, 20,114,254,242, 47, -126,204,235, 47,126,201,220, 26,246, 83, 20, 23, 64, 17, 70,218,242,250,199, 16,208,106,198,253,122, 15, 74, 19,115, 36,228,132, - 47, 19, 62,173,100,138,119,232, 7,180, 82,165,168, 71,208,138,170,173, 78, 73,120,186, 36, 16, 42,192, 26,133, 83, 34, 84,218, -236, 58,148,241,244, 67, 47, 43, 63, 13, 99, 55,112, 49,247,244,253,132, 81,176,156,207,217,109, 14,114,176,231,136,209, 89, 44, -157, 86,196, 86,174,178,228,160,168,189,229,112, 24,153,173,102,244,195,200,221, 67,207,229, 69,139,181, 26,114,160,178,158,105, -232,216,237, 55, 34,140, 12,146,183,189,190,223,145,179, 38, 70, 25,235,199, 28,169,106,139,178, 80, 53, 53,202, 24,238,238, 31, - 48,126,134,245, 53, 67, 86,236,251,129,237, 97,196, 84, 13,223,251,222,247,121,247,246, 29, 97, 26,112,222,160,200,204,106, 71, - 78,129,155,103,207,105,154,134,118,214,226,188,120,180,125,237, 10, 37,208,131, 49, 84,110,194,215, 21,211, 16,152, 50,204, 86, -151,188,123,243,134,217,108, 70, 59,159,177,221,108,184,126,254, 17, 15,135,142, 68,194, 87, 2,167,241,243,150,182,185,228,254, - 97, 67,154,183, 50,121,156, 34, 95,191,122,205,199,215, 43,124, 51, 35,140, 19, 58, 91,136,129,203,171, 27,238,238,110,209,206, - 48, 13, 1, 84, 98, 26, 39,106,223,162,181,156,223,211, 52, 97,141, 57,217, 70, 21,242,154,238,135,129, 49, 70,222,222,111,121, -245,246,129,235, 55,107,110,238,238,120,246,252,134,171,155,107, 86,151,151, 52,171, 21,213, 98,137,109, 90,148,111,200,166, 66, -155, 10,148,197, 88, 71, 54, 70,240,201, 70, 21, 71,132,161,214,134,165,210, 36, 37,132,183,186,169,104,111,239,185,127,216, 50, - 78, 81,236,206,186,248,210, 93,209, 98, 96, 78,182,217, 84, 82, 67,213, 52, 17,179, 34, 71, 72, 42, 49, 70, 1,216,200, 25, 38, -231, 83,194,160, 12, 56, 36,224,202, 90,225, 69,212,222,225, 10,114, 89,240,233,233, 9,244,229, 17,215, 26,191,163,110,207,167, -192,116,251,212,216,171, 30, 21,244,145,167,217,234, 41,229,115,252, 6,233, 55,193,190,202,170, 38,198,128,109,188, 23,177, 14, -200,184,176,220, 82,188,243, 56,103,240,149,220,120,165,176, 75,151, 46,221,252,163,106,247,216,169, 29,185,238, 70, 63, 10,167, - 84,177,196, 29, 83,183,142, 31,178,175,120,191, 27,127,234, 81,126, 66,163,251, 53,234,221, 39, 9, 94,231, 8, 90, 93, 84,251, -198,210,180, 51,156,175,248,193, 15,126,128, 39, 17,250,142,186,169, 81, 85,133, 27, 38, 62,126,254, 41, 77,179,228, 62,122, 73, -213, 26, 21, 32,185,205, 97, 16, 17,215, 24,122,230,243, 25,151, 87, 87,124,252,209,247, 97,191,230,226,234, 25,195,215,175, 25, -195, 64,154, 12, 83,127, 32,213, 51, 14,155, 7,198,109,230,245, 47,254, 9, 47,174, 47, 9, 85,197,223,252,195,127,133, 95,253, - 39,127, 15,149,213, 41,109, 78, 29,195,107,138,178,241,112,232,136,151,137, 56, 12,140, 49, 96,157,229,163,155, 23,180, 77,203, - 31,255,201,159,136, 53, 3,131,119,158, 24, 18,239,222,221, 98,173,227,217,179,103,104, 5,239,222,189,195, 25, 79,211,100,156, -147,125,212,212, 15,236, 55, 91,124,213,138,144, 36,136, 69, 75, 14, 79, 69, 8,233,164,105,151, 60,110,177,238, 13, 67,199,204, - 5,185,216,101, 87,138,167, 58,141,133,142,222,121,113,138,100,180, 81,114, 41, 44,239, 13,173,180,252, 55,163,139, 35, 66,161, -117, 46,162,185,140, 86, 17,149, 39,226,184,103, 82, 73,198,233,227,129,169, 36,148,137,111, 52, 22,156,163, 76, 10,200,145,115, -252,124, 44, 74,209,152, 51, 36, 25,181,134,148,136,177, 56,172,181,220,170,181, 54, 50, 58,119, 21,182,106, 68,165,238, 26,180, -107, 48,190,194,213, 2,212,144,189,185,116,225,198,185, 66,146, 42,132, 42, 35, 42,112, 93, 14, 26,117, 76, 81,211,231,152, 28, -245,235, 77,226,239,191,111,243,119,133,135,239, 23,215,127,150, 37,255,175, 22,143,251,248,181, 76,125,207, 79,254,201,159,162, -195,128,211,162,254, 87,202, 16, 67, 46,175,183, 66,169,128,183,154,245,122,132,164,152,114, 36,102, 77, 86,199, 3, 79,209,212, - 13,195, 48, 74,119, 55, 78,140, 49, 17, 82,102, 54,175,229,251,138, 20, 75, 93,144,213, 85, 37, 20,178,170,169,216,245, 3, 83, - 86, 80,160, 36,195, 24, 88, 56, 65, 24, 91,149,217,238, 71,154,198, 49, 76,145, 97,140, 84, 78, 46,142, 57, 39, 82, 20, 97, 83, - 51,119,144, 18,139,182, 98,187,217,114,115,115, 73, 36,115,255,112, 0, 20, 77, 93, 9,140, 38, 4,102, 23, 75,250,161, 43, 64, - 15,197, 24, 18,218,120,246,135, 29,222, 91, 48,150,126,152,120,254,241, 2,227, 53,182,178, 84,117,205,187,187, 7,124, 61, 67, - 25,143,169,107, 54,219, 29,235, 67,143,111,230,124,242,241, 39,220,190,121, 75,154, 2,222, 26,194,216,241,226,227,231, 88, 3, - 87,215,151,212,245,163, 51,194, 85,242,123,214,179, 22, 95,213,194,151, 72,150,198, 79,248,202,179, 97, 79, 86,154, 16, 35,117, -211,146,146,164,228,189,124,245,138,249,252, 82, 86, 76, 68, 66,154,136, 41,208,109,215,212,174,226,106, 57,231,238,237, 43, 62, -254,236,123,124,189,219,243,242,213,107, 86,179,134, 74,137,167,124,140, 48,111,103,188,124,253,150,170,178,196, 56,146,114, 42, -194,225,132,206,176, 88, 44,152, 98,150, 96,151, 98,213,210, 49,162,202,164,113,140,138,110,146,136,220,205, 46,240,176, 30,184, -187,187,231,238,245, 61, 47, 62,122,224,197,139,103, 92,220, 92,179,184,238,104, 22, 75,220, 98, 46,154, 21,159,200,182, 70,105, - 39, 36, 55,231,193, 40,114, 89,255, 26,231,241, 85, 69, 93, 85, 44, 23,115,110,174, 47,185,191,123,224,221,187, 59,214, 27,241, -172,135,194, 75,208,199,245,239,153,219, 42,165, 84, 52, 20, 35,170, 55, 4, 45,171,210, 41,138, 47,252,100, 75, 37,161,116,192, - 38,251,232,240,209,162, 31,115,222, 81, 85, 21,206, 73,211, 34,103,208, 83,251, 89, 78,194,116,200, 31, 72,105,203, 39,130,234, -119,185,238, 57,231, 71, 87, 81, 74,146,154, 26,211,153,205,247,136,152,253,240,115,157, 75, 99, 30,162,198, 86,149, 59,117,234, - 70,107,156,147,162, 94,121, 41,234, 85,117,252,185,123,210,153,107,253,184,123,208,168, 34,234, 40, 34, 54, 30,233,113,153,199, -220,247, 35, 16, 48, 31,211,159,242,249, 23,247, 52,106,239, 73, 16,215,119, 10,247,111, 62,140, 68, 40, 39, 10,121,180,193,249, -154,217,108,206,199, 31, 63,103, 86, 89,238,222,109,120,120,120, 0, 18, 55,215, 75, 86,139, 57, 57,215,132, 41, 17,202, 8, 68, - 41, 85, 88,224, 3,195,254,129, 20, 19,135, 16, 49,117,205,118,189,101, 97, 12,243,143, 63,102,255, 71,127, 68, 30, 7, 70, 11, -195, 97,135, 85,134, 47,214, 91,110,223,188,230,219, 95,254,148,198, 38,126,244,135,191,207,255,234,127,241, 63,227,199, 95,125, -203,159,253,252, 11, 2,143, 66, 41,111, 13, 51, 87, 97,180, 98,182,152, 97,157,231,219,111,191,161,246, 21, 77, 85,227,189,231, -231,191,248, 57,155,237,150,223,255,221, 31,225,171,138,113,232,121,243,238, 22,173, 45,191,250,246, 21,198,215,212, 85, 69, 55, -140, 80, 41, 33,117, 77, 30,215,204, 25, 6,121, 48, 33,149, 29,143,236,131,140,214, 52, 85,205, 52, 5,172,182,104, 21, 24,194, -128,179,142,186, 93, 49,101,195, 52, 29,152,121, 67, 21, 31, 61,195,154,120,186,253, 30, 47,106,178, 94,161,236,156,142, 63, 47, -123,246,227,135,210,133,228,123, 36, 59, 69, 66, 28,201, 99, 38,165,192, 52,149,226,107,212, 41,189,233, 20,205, 90,246,248, 41, - 75,112, 80, 72, 89,108,101,145,211,200, 10,100,108,167,109,133,174,164, 19, 55,174, 28,148,174, 70,123,233,202,141,171,202, 72, - 93, 20,234,214, 57, 76,117,212,128, 88,116, 89, 29,157, 56,207,250,200, 94, 56,203, 51, 62, 35,188,228,247,139,121, 86,191,177, - 11, 63,209, 89,223,203, 55,248,238,187, 56,255, 51,104,185,249,176,237,237, 55,124,122, 49,138,158, 48,187,227,246,129,127,252, - 15,254, 30,149,210,132, 32, 93, 78, 74,170,116,210,226,157,119,206,144,148,101,183,235,201, 70,186,248,120,140, 79, 46,110, 15, -109, 12,253, 36,180,185,148, 50,113,138, 56, 3,171, 89, 35,145,195, 41,224,140,236, 4, 43,107, 73, 41, 18,130,194,186, 21,187, -187,151,104,173, 56, 12, 1,140, 70,133, 8, 49,211, 84, 86,118,237,128,175, 26,198, 73, 46,166, 74,201,175,143, 33, 97,200,180, -149, 69, 21,136,210,190, 31, 88, 46,103,140,113, 36,161,184,191,223,241,201,199, 51,150,203, 25,187,221,150,202, 57,114,134,195, -126,207, 56, 36,114,214,244,227, 64,223, 71, 22,179,138,126, 28, 25,251,137,213,101, 77,213, 24,134, 48,113,189,122,198,187,219, - 7, 40,154,140,170,153,113,183,125, 96,187,221, 49,111,231, 92, 95, 94,243,242,235,111, 75,243,163, 25,134, 3, 47, 62,186,198, - 87,150,217,188,102, 54,111,105, 27,121,134,189,181, 68, 50,151, 23,151,178,234, 49, 86,132,172, 25,156, 53,180,109,133,210,199, - 44,248, 61, 85,213,210,119,219,146, 78,151,185,123,245,146,106,209,240,176,223,112,177, 92, 80, 87, 21,135,237,134,172, 20,139, -229, 37,243,170, 97,251,240, 64, 91,215,196,113,224, 23, 95,124,201,239,255,238, 15,153,166,142,195,102, 75,229, 47,241, 85,133, - 53, 37,200, 73, 37,180,177,162, 79,209,138,249,124,206,253,122, 83,130,168,228,189,212,117, 18,129, 27,142,113,220, 25, 34, 90, - 82,235,134,145,105,154,216,247, 19, 15,219, 3,183,119, 27,158, 63,127,224,217,139, 13,151, 87, 87,204,174,150, 84,243, 57,213, -108,129,105,230,232,234, 40,168, 51,160,197,246, 41,164, 58,135,241, 21,166,170,168, 22,115,218,139, 5,171,103,215, 92,127,244, -156,237,122,199,250,126,195,102,189,165,239, 39, 66,148, 40, 84, 93, 70,242, 71,194,228, 56, 77,162, 7, 81,144,212, 72, 74,129, - 24,236, 25, 69,174,164,185, 41, 78,141,231,113,213,136,166, 0,144, 52, 85, 37,147,107, 85,226, 80, 83,153, 26, 30,153, 25,143, -185,237, 79,225,108, 57, 39, 84, 76,143, 28, 21,138,235,166,252,191, 99, 92,121, 42,150,241,227,164, 57,113, 38,172,227, 17,234, -118, 30,108,150,180, 8, 38, 49, 6,235,189,199,168,199,184, 85,239, 12,149,247,120,239,169,188,165,170,228,231,206,153, 51,159, -249, 83, 1, 91, 46,136, 76,165,212, 41,198,245, 24, 44,114,164,145,229, 98,170, 73, 37, 1, 7,245, 94, 82, 84, 65, 92,158, 46, - 1,167, 47, 73,157, 18, 38,212, 95,218,137,200, 0, 95,147,208, 57,146,148,198,215, 45,206,215,204, 23,115,110,158,173,136,195, - 64,214,142, 41, 41,230,139, 25, 31, 61,191,164, 50,158,251,135,200,161,235, 36,215, 86, 69,226,180,167, 59, 60, 48,246, 59, 94, -125,251, 13,203,139,143, 48,179, 57,237,114,201,219,183,111, 81, 23, 11, 58, 13,247,155, 53,244, 61, 67, 14,212,174,162,123,184, -227,235, 47,190,162,169, 26,200,154,249,229, 71,252,206, 15,127,159, 79, 62,254,148,255,195,191,255,191,228, 39,255,199,255,147, -216, 15, 68,254, 47,241,157, 90, 51,134,200,103,151,159,241,147,159,252, 4,167, 53,149,181,144, 19,111,238,110,185,219,174,121, -254,236,154,143, 94, 60,167,239,122,126,250,211,159, 18, 82,228,243,207,191,199,207,126,249, 43,158, 61,255,136,251,135, 53,211, -216,227,189,163, 27, 14,120,103, 65, 45,241, 85,133,210,229, 6, 88,232,122, 67, 1,102, 40, 45,110,133,152, 6,166,144, 32, 27, -137,184,140, 90, 70, 84, 68, 42,155,169,149,228, 29,159,119,168,170,136, 42,149,210,216, 83, 34, 95, 89,167,104, 78, 35, 87,163, - 69, 13,175, 82, 9,246,200,241, 52,137,137, 41, 98,162,216,155, 76,144, 34, 26,202, 8, 45,157,226, 12,207,148,166, 81, 2, 67, - 82, 22,113,144, 50, 98,149,177, 86,148,233,218,215,210,109, 87, 13,182, 22,155,153,124, 52,104, 91, 97,156, 43, 29,121, 41,220, - 86,138,185,114,250,145, 80, 88, 84,178,231,171,161,252,158,181, 44,171,247, 24,246,143,104,168, 39,142,140,247,129, 77, 31,170, -225,234,159,135,202,253,132,123,125,186,181, 87,239,101, 54,192,119,111,254,168,120, 90,128,169, 41,240,250,231, 63,225,246, 87, - 63,131,105, 64,101, 67,202,129,105, 74, 88, 37,130,199,202,201,161,183,221, 11,110, 58, 38,228, 96, 79, 25,175, 21, 78,139, 46, - 39,164, 81,246,236, 89,108, 96,125, 63,114,185,154, 97,114,164,117,150, 72, 98, 24, 7,154,202,160,117, 64, 17,209,166,161,159, -162, 0, 94,210, 72,204,154, 16, 20, 70, 41,166, 33,112,241, 98,193,190,235, 65,121,166,152,136,211,136,210,153,170,182,196, 49, - 51,246,145,198,195,162,177,236,118, 29,203,231, 43, 98,210,248,186, 98,223,109,217,110, 3,215,151,245,105,119, 27,195,136,178, - 21, 49,100,118,219,142,118,182,226,246,238,158,113, 8, 96,100, 50,160, 84,166,109, 12,139, 85,195,148, 70,158,191,248,136,119, -183, 15,116,125,160,153, 47,241,205,140,251,205,154,190, 59,112,181,186, 64,103,203,187,111, 95, 81,107,195, 20, 70,246, 99,207, -247,190,255, 49,203,139, 57,174,118,204,102, 45,179, 89, 67,229, 29,141,119,120,235,168, 46,102,100, 99, 49, 86, 84,234,249,152, -128,161, 34,222,105, 42,103, 8, 90, 17, 99,164,105, 26, 54, 15,183,248,166,162,109,106,238,223,190,226,179,203, 31, 97,188, 99, - 24, 3,207, 47, 86,188,185,125,199,184,127,160,170,103, 88, 83,177, 63,172,249,222,247,127,135,238,176, 99, 76,154, 95,125,251, -138, 23, 55,151, 52,179,138,119,183,111,249,244,163,103,188,123,245,138, 23, 47, 62, 34,167, 45,187,221, 1,227, 44,251,190,227, -202,104,198,113, 40, 46,145,137,186,174,138,102, 65, 17, 18,132,210, 77,106,165,136, 90, 50,207, 14, 57, 51, 29, 70,182,195,196, -253,246,192,187,251, 7,158,189,189,229,249,179, 27,174,110, 46, 88, 93,175, 88, 94, 93, 82,175,150,216,217, 28, 91, 47, 81,190, -145,231,219,104,208,158, 92,121,146,173,192,213,232,122,134,157, 45,168,167,145,217,117,199,245,225, 64,191,221,114,216,236, 88, - 63,108,217,110,247,236,187,129, 41,157, 98, 59, 73,197, 95,153, 74,152,146, 13, 19,222, 42,234,202, 97,202,212, 3, 36,107,195, -151,102,214, 89, 35,234,251,178,210,139,197, 37, 19, 83, 70,151, 73,165,212, 81, 41,168,153, 4,201, 72,227,250,222, 88,254, 8, -151, 17,251,229,163,199, 61,146, 31,109,112,101, 98,144,138,238, 74,105, 1, 76,157,166,163, 71, 64,237, 49, 52, 77, 63, 78,178, - 35, 18,222,164, 82,198, 86, 85,117,178,127, 25, 35,123, 47,231,220, 19,211,254,201,150,166, 31,227, 88,139, 42,255, 59, 52,177, - 39,233, 93,239,253,251, 63,175,168,206,167, 35,248,179, 64,138, 12,117, 93,227,156,149, 78, 79, 24, 39,236,118,123,172,117,212, -117,133,175,107, 54,247,107,186,222,112, 56, 28,232, 58,201,203,158,186, 13,251,205, 3,247,239,110,105,151, 55,204,231, 43,218, -229,130, 16, 18,191,124,245,146, 62, 14,252,141,102,198,171,175, 95,114, 88,239, 81,149,194,205,230, 60, 60,108,248,230, 87, 95, -240,195, 31,253,136, 16, 71,126,239,247,127,151, 23, 47,190,199,188,189,230,111,254,225,223,226,147,155, 27,190,121,243,166,116, -160,154,218,248,211,233,187, 94,175,185,190,190,102,183, 89,115,243,236, 25,179,182,101,152, 6,250, 67,199,239,255,206,143,216, -109,119, 44, 23, 11,254,221,127,231,223,161, 31,122,178,210,124,249,229,175, 36,198,117, 26,241,206, 97,141, 17, 53, 40,162, 36, - 70,169, 18,215,217, 16,147, 98, 24, 71,170,170, 38,231,145,105,234,241, 85,133, 41,226, 37, 95,107,148, 54,140,221,132,138, 35, -206, 38, 42,163,240, 37,226, 43,159, 88,237,199,238,188,196,233,170, 39,137,184,103,112,162,163,136, 68, 6, 5,137, 76,214, 5, - 63, 90, 20,169,201,148, 17, 94,161, 79,101, 53,157,250, 69,121,115,203, 24, 61, 43,141,214, 34, 82,179,174, 20,243, 18, 73,106, -171, 10,235, 91,249,168,188, 88,205,188,199,249, 99, 33,247,162,241,176,226,218, 80, 78,118, 98,202,148, 7,193,232,239,188,135, -254,135,188,246,254,237,140,230,143,177,142,239,199, 66,190, 31,144,115, 62,108,200, 69,147, 18, 35,216, 20,249,234,103, 63,101, -216,238,152,105, 75,119, 8, 88,235, 24,134,177,192, 60,228,242,150,146,176,238,181, 21,149, 58,230, 68, 47,192, 90,131,247,158, -195,208,151,152,224,196, 56, 38,156,179,204,218,134,105, 26,203,206, 83,222, 19, 85, 37,208,153, 41, 4,124, 85,177,222,108,232, -199,169, 92,182,101, 90,224,196,141, 74, 74,208,247, 19,243,185,199, 25, 75,183,219,209, 84,150, 56,133, 98, 95, 84, 44,231, 45, -135,253, 64, 59,171,232,199, 61, 23, 87, 11,246,221,129, 24,173, 68,228,234, 64,229, 27,250,190,199, 24,249,187,190,123,247, 64, -202,208, 15, 3, 49,203,168,185,173, 27,250,253,129,152, 21, 87,207,150, 28,134,129,155,143,111,184,189,223,112, 24, 38,234,102, - 65,213,204,120, 88,111,136, 41,113,181,188, 38,199,204, 97,119, 16, 93,203,208, 51,133,129, 31,124,255, 51,218, 69,141, 49,112, -185, 90, 49, 95,205,105,235,154,166,170, 48,206,224,107, 79, 59,159,203,251,220, 75,132, 46, 74, 82,234,156,117,248,202, 51,155, -181, 28, 30, 54,146,160, 86, 2,185, 98, 9, 95, 81, 10,214,247, 15,204,175, 86,220,189,189,101,217,204,168,235,154, 62, 69,182, -187, 45, 33,194,242,226,130,219,187, 91,158,191,248,152, 55,111, 95,179,239, 14,116,195,130,198,121,146, 25,217, 30, 6,170,118, -198,122,189,166,242,158, 93, 14,194,109, 8,242,186,185,178, 75,143, 33,138,173,173,235, 5,149, 92,194,114, 30,155, 91, 69, 42, -175, 83, 44,244,199, 93,215, 51, 78, 3,219,253,142,187,245,150,235,187, 37, 55, 55, 87,220,124,116,224,226,230,192,108,181,162, - 89, 78,184,166,197, 85, 13,217,213, 34,112,214, 50, 5, 81,214,130,110,208,110,142, 9, 3,174,238, 73,237, 64, 59, 95,178,184, - 56,176,184,220,179,221,110,217,172,183,236,247,123,250, 67,207, 56, 6, 66, 22, 59,182,137,182,236,222, 61,202, 4,172, 69, 28, - 22, 41,161,180,228, 28, 24, 43,246, 74,173, 69,205, 62,197, 64,223, 15, 18,225,157, 51,195, 96,112,174, 88,185,141, 76, 63,101, -205,168, 30,215,190,229, 2,113,252,241,196,129, 79,170, 48, 89, 10, 19, 35,137,114,253, 49, 15,254, 24, 93,162, 79,147,202, 19, -208,139,199,108,247, 83, 81, 47, 53,217,106, 35,177,181, 39,245,123,121,162,245,217,248,244, 8, 82, 57,247,232,125, 88,169,251, -155,131, 60,206,185,242,255,221,138,182,250,173, 62, 39,157, 5,192,128, 98, 54,155,227,156,135,156, 24,135,145,251,183,119,236, -247,123,230,139, 57,206, 87,188,124,245,134,135,219, 13,155, 93,224,139,219, 13, 57, 38, 60,153,135,119,111,249,250,235,175,216, -119, 7,254,237,191,243, 63, 37,247, 35, 87,203, 21, 41, 13,244, 10,246, 42,227,173,231,205, 55,175,185,127,251,142, 78, 7,214, - 70,243,236,250, 6, 69, 96, 28, 15,252,224, 71,223,103, 63, 28,152,178,231,179, 31,252, 1, 23,113,207,191,243,119,254, 45,254, -175,255,183,255,123, 73,255, 54, 40, 44,253,216, 99,173,102,189, 94,139, 87, 23,184,189,187,197,106, 33,224,125,244,236,154,197, -172,161,169, 26, 25, 43,150, 96,145, 67,215,243,163,239,127,143, 20, 35, 55, 55,215,172, 22, 11,194, 56, 62,193,209, 30,227,113, -219,166,101, 8, 17,180,230,250,230,134,253,190,195,186, 3, 15,235, 13,190,146, 98,217, 15,129, 88,222,252, 85,138, 84, 86,225, -173,194,199,226, 82, 56,223,247, 42,202, 34, 37, 21,107, 70,153,178,164, 92, 8,109,234,244,121,156, 71,231,234,199,254, 80,161, -209,122, 18, 4,176, 54,100, 45,147, 30,180,160, 82,149,169, 48, 86,172, 99,198, 86,101,247, 86,225,189,236,194,171,186, 41, 2, - 55, 95,104,110, 21,206, 75,142,184,113,246,148, 35, 46,182, 20,121, 79,115, 98,167,151,137,145, 62,187,140,240,212,125,241, 63, -202,130,126,190,202,202,249,212,161, 72, 94,194,209, 22,243, 97, 17, 95, 62,253, 90,249, 31,227,126,195, 79,254,248,143, 81,195, - 68, 10,138,113,202, 76,113,146,101,135, 61,226,125, 13, 93, 23,132, 4, 87,158,187, 41, 36,129, 13,149,131, 73, 0, 70,229,191, - 25, 75,119, 56,240,236,102, 9, 57,227,172, 37,132, 64,202,137,166, 17, 78,185, 51, 90,178,232,141,248,175, 99,204, 76,147,236, - 60, 99, 18,127,252,172,113,108,183,157, 4,187,132, 9,173, 36,193,208, 25, 67, 14,129, 20, 50,171,101, 37,129, 69, 42, 81, 85, - 25, 95, 25, 80,145,217,124,193, 55,223,188, 19, 15,184,147,176,152,148, 50,181,107,152,194,196,221,253,134,155,155, 25, 83, 84, - 12,195,132,241, 34,240,139, 9, 86, 87,115,134, 48, 82,205, 90,118,135,137,245,174,199,186, 6,215,180,172, 55, 59, 64, 81,187, -138, 56, 68,194, 36, 2,190,126, 56,224,189,225,243,239,125, 94,118,182,137,171,235,107,150,171, 57,179, 89,139,182, 26,235,197, - 70, 92,207,100,218,228,219,153, 20,116, 45,148, 70,141,194, 87, 25,231, 3, 85, 83,161,141,162,106, 42,214,187, 45,174, 4,172, - 88, 45,182,202,187,119,111, 65,195,172,105,120,123,251,150,231, 47, 62,166, 91,175,137,122,100,159,182, 52,243, 57,218, 40,230, -139, 5,247,235, 7,154,166,229,219, 87,175,249,252,211, 79,208, 85,195,187, 7, 1, 97,237,182,247, 84,222, 81,121, 71,127,232, - 8, 33,210,247,189, 68,117, 31,195,144,200,116,125, 7,202, 19, 74,154, 36, 5,233,125,132,108,161,149, 64, 85,142,176,177, 41, - 51,197,145,195,112,203,195,122,203,253,237,154,187,251, 45,207, 94, 92,115,245,236,138,171,235, 45,179,197,156,217, 98,137,106, -102,152, 74,244, 47,202, 86,100,229,192,120, 48, 94,236,112,174, 66,217, 30,229,156, 0,121,106,143,109, 61,245,204,115, 88, 59, - 54, 15, 27,233,220,163, 48, 43, 66, 8, 5,123,161,201, 24,140,117, 56, 35, 0, 33,163, 18, 70,139, 62, 72, 23,129,231, 17,181, -125, 40,226,219, 67,201, 11,112,206,226,172, 76, 77,142,211, 19, 95,196,180, 39,208,218, 17, 80, 83, 80,180,226,101,167, 0,114, -194, 9, 70,115,114,154,156, 69,205, 42,173,201,156,219,217,164, 9,164,172, 3,143, 69, 93,159, 50, 79,164, 86,199,148,176, 34, - 82,121, 68, 79, 42,245, 30,147,251,236,160, 83,239, 37,110,124,168,216,127,168,131,254,181,129, 48, 74,253, 83,157,158,239,143, - 52,159, 30, 75,199, 93,167,116,120,237,124, 46, 41,103, 41, 17,199,137,245,102,131, 47, 15,208,235,183,183,188,121,245, 53,251, -237,142,187,135, 29,183,253,132, 55,142,121,211,224,156,102,191,219,243,135,127,243,111, 97, 93,141,183,158, 52, 14,194, 47,246, -150,118,181, 98,220,119,252,236, 39, 63, 33,117, 61,179, 75, 41,168,155,237, 3, 87,207, 46,217,245, 91,126,116,185,160,158, 55, - 12, 74, 83, 93, 92,113,117,249, 9,255,251,255,224, 63,224, 63,252,127,253, 71,132, 41, 72, 6,117, 10,172,150, 75,198, 48,209, -206,102,220, 63, 60, 48, 14, 61,147,214, 60,203,153, 31,254,224, 7,242,239,195,200, 71,215,207, 78, 95,229,110,191,227,221,219, -183,180,109,139,213, 34, 82,211,103,148, 80,163,141, 88,210,180, 99,179,221,113, 51, 78, 24,239, 81, 33,161,181,145,203,142,111, - 72,104,166, 8,187,125,199, 20, 71,166, 40,225, 36, 38, 5,172, 74, 56,157,112,229,162, 25, 57,203,247, 61,197,181, 41, 25,221, -151,110, 43, 63, 17,115,156,173,104,142,191, 71, 78,101, 15, 85, 46,157,250,104,137,116, 24, 39, 33, 15,198, 85, 98, 49,171,102, - 88, 55,195, 85, 13,190,158,161,155,133, 64, 95,188,132,158,248,186, 22,244,170,243, 40,111, 81,174,136,244,140, 57, 61,148,199, - 17,149, 81,103, 10,245,114,216, 40,245,107, 12,102,234, 95, 68, 51,173,254, 74, 23,221, 15,129,150, 62, 36,184, 57,217, 87,131, -140,243,136,241, 84,192,141,119,143,201, 83, 57, 63,249, 50,207,233,128, 18, 23,153,216,222,190,225,229, 47,126,138, 75, 48,140, -129,172,141,188, 55, 12, 88,113,245, 8,223, 61,100,156, 85,116, 49, 17,138, 6,194, 40, 85, 24, 5,186, 48,188, 77,217,193,102, -234,202,208, 54, 13,227, 40,184,227,113, 24,112, 85, 37, 14,153, 16,101, 18, 83,114,211,149,150,247,215, 20, 33,196,128, 85, 10, -103,197,101, 49, 77, 17, 91, 57, 17, 38,197, 64, 91,105,114,156,138,120, 47, 83, 57,205,126,123, 96, 57,151,144, 20, 83, 65, 38, -114,119,127, 79, 72, 80, 89,161,219, 25,227, 49, 74,184, 5,125, 63,224,189,228, 49,108,119, 91,148,145,247,207, 16, 2,190,241, - 68, 21,203,148,199,114,191,222, 99,172,167,153,205,232,199, 81, 10, 90,148,195,223, 98,136, 99, 96, 26, 15, 92, 95, 95, 48, 95, -205, 72, 4,154,166,230,226,234,130,229,106, 65,211, 84,248,202, 83,213, 21,198,121,218,182,197,213,173,132,251,180, 77,153, 80, -153,211, 14, 85, 59,139,175, 28,205,172,198, 24, 77,211,212, 60,228,132,115,158, 93,183, 23,127,187,119,220,175, 31,136,133,221, - 30,114,162, 27, 58,114,138, 76, 67,143,171, 20,221, 97,203,234,242,134,221,126,207,199, 31,127,194,221,221, 29,205,124,193,195, -118,199,213,229,138,108, 43, 30,246, 29,206, 56,250, 97, 16,149,123,206, 76,227,200,208,119, 44, 22,115,250,219, 59,180,209,132, -105,196, 89, 75,156,146,116,194, 42,147,115, 41, 56, 37, 15, 64,144,172,199, 75, 96, 34,230, 72, 76, 48,141,137,105,232, 24,186, -145,245,174,231,238,254,129,155,119,183,188,120,126,205,245,205, 5,151,215,151, 84,203, 57,245,124, 89, 60,238, 51,178,107,192, - 8,196, 70, 91,115, 26,105, 43, 5, 88,141,211, 89,228, 53, 78, 26, 18, 99, 37, 59, 33,231, 44,175, 81,156, 8, 97, 44, 86,189, -132, 53, 6,111,132, 39,225, 76,150,206,219,233, 19,161, 45, 69, 65, 82,135, 73,220, 56,199, 6, 68, 43,133, 47, 96,173,202, 89, - 89, 85,123,153,114, 11, 65, 82,132,122,199, 70, 39,197, 76, 8,137, 41, 10,220, 44, 28, 73,118,103,171,111, 78, 2,115,125,194, -175,163,207, 98,205,203,231,105, 35,245, 75,254, 46,146,251, 78,153,124,234, 88,224, 51,143,231,111, 62, 85,133,252, 27,148,118, - 79, 34, 52,127,157, 95,252, 55, 30, 90,234,159,219,217,121,188, 28,102,228,193,155,205,230, 24,109,137,211,200,253,237, 45,155, -205, 3, 89, 25,110, 31,238,217,237,118,236,118, 91,214,247,111,217,108,215,100,101,200,245,140,201,104,198, 0,127,237,175,255, -117,174,158,221, 16, 99,100,189,189,199,140,189,128, 83,230, 21,205,172,229,139,191,248, 11,134,221, 30,235, 45,182,170,184,190, -122, 78,204, 19, 99, 28,104,231, 11,116,101, 89,221, 92, 49,191, 92,146, 12,100,109,248, 59,255,238,191,199,239,253,193, 31,240, -167,127,242,167, 40,147, 49, 10, 66, 25, 99,205,102, 51,140, 49,188,123,243,154,139,229,146,139,203, 11,102,179, 25,203, 89, 43, - 73,107, 33,156, 34, 86,251,193,242,252,230,134,203,203, 11,140,177, 5, 60, 83,177, 99, 71, 74,137,170,192, 81,172,115,120,239, - 9, 49,178,219,108,216,108,246, 76,163,140,210,250, 97,194, 58, 79,211,182,100,109,137,218,240,250,237, 59, 17,150,196, 81,216, -236, 26,244, 73,204, 81,248,195, 41, 23, 16,147,122, 84,101, 30,119,223,231, 74,205, 92, 70,238,197,110,150, 74,167,117,124,163, -203,184,179,162, 54, 66,146,242, 77,139,107, 90,124, 61,195,214, 51, 92,189, 40, 73,102, 45,190,153, 99,219, 89, 33,185,249,194, - 79, 47, 29,185, 49, 40, 39,188,116,153, 46,157,187, 39,206, 46, 23,234, 3,170,209,252, 63,162,254,251, 55, 60, 83, 79,166, 98, - 49, 74, 72,205, 24, 72, 33,138,120, 71,107,116, 74,224, 69,205,127,234, 0,206, 60,175, 20,193, 97, 74,153, 28, 3,111,190,250, -146,245,235,151,216,156, 56,196, 68, 31,101,190,100,173,236,222,173,113,164, 81, 2,150, 36,222, 86,212,196, 90, 43, 42,103, 80, - 89, 68,116,219, 97,160,106, 28,149,115,236,182, 7, 46, 46,151, 98,145,212,154,105,148,117,139,117,150,110,183,167,174, 42,226, - 20,168,231, 45,227, 56, 18,146,248,204,141,177,130, 62, 45,209,170, 93,215, 97,173, 76, 9,150, 87, 30,171, 51,202,106,226, 36, - 88,225,182,118, 76,195,128, 81,138,166,117,212,181, 67, 59,205,237,253,154, 97,202,248,170, 34, 5, 81,162,119,135, 3, 23,171, - 25, 97, 74,172,215, 91,170,202,113, 56,116, 69, 96, 10,195, 20, 49,214, 96, 43,199, 16, 38, 46, 46, 87,108,182, 82,208,219,217, -156,144, 97,156, 2, 83,223, 99,181,130,144,232,135,192,106,181,228,234,147, 27,166, 60,145,117, 98,117,113,193,108, 57,103,117, -185, 98, 62,111,241,206, 83,213,242,140,214, 77, 75, 53,159, 99,235, 10, 93, 85, 40,227, 30,181, 71, 74,132,170, 86,105,234,166, -162,105, 42,170,198, 23, 96, 76,205,208, 31, 78, 26, 21, 95,121,188,177, 76, 93, 79, 54,154,186,109,185,187,191,227,122,177,162, -239, 7,162,134, 48,181, 76, 99, 15,123,205,106,185,192, 26,203,245,229, 53, 63,251,249, 79,185,186,188,196,250,150,205,221, 91, -158, 93,204,217,247, 29,149,149,137,203, 52,142,236,182, 91,230,139, 21,222, 59, 98, 8, 2,132, 49, 53, 83, 55,202,247, 52,101, - 1,166,100, 69, 34, 17,242, 99, 64, 73, 76,177,248,176,245, 41,125, 44,149,255, 62,196, 61,135,126, 96,189,222,114,119,251,192, -179,155, 11,158,191,184,230,242,102,201,234, 82, 60,238,213,124,129,105, 22,232,186, 69,185, 74,198,241,136,203, 70, 41, 71,214, -197,126, 91,198,210, 86, 11, 61,211, 56,139,245, 98, 11, 76,100,134,161, 39,198, 1,210,132, 54, 98,221,110,188,165,169, 13,222, -138, 24, 14,117, 92, 43, 5,134,113,100, 26,167, 50, 46,143,132, 16,132, 83, 96, 52,195,160,232,140, 46,226,114,135,175, 69,104, -238,156,112, 6,140,214, 37, 94, 62,150,112,173,227, 94, 62,202,172,242,120,201, 70, 86,159,198, 90, 41,222,198, 22,238,197,145, -127, 97,206,146, 73, 31,139,189, 58,211,167,201, 52, 46, 98,143,100, 27, 72,239,117,221,249,215, 30, 44, 74,253, 38, 75, 25,191, -246,208,225, 76, 49,253,244, 47,243, 87,213, 1,229, 15,172, 3,212, 83, 92,151, 82, 88,235,104,154, 25,195, 48, 16,115,228,203, - 47,127, 73,204,145,151,175,223,240,139, 47,190,230,246,110, 75,219, 52, 76,211,129,119,111,190, 97, 81, 59, 94,124,246, 59,116, -125,228,217,103,191,195,234,226,138,177,223,147,166, 3, 93,191,193,246, 3,213,172,101,222,212,172,102, 51,254,195,255,243,255, - 5,163,145,192,131,126,192,245, 61,139, 69,205,162,174,153, 95, 8,195,125, 8, 19, 95,124,249, 83,150, 87, 23,124,244,233,103, -204,151, 11,254,253,255,249,255,134,127,242, 39,127, 70, 78, 1, 44,236, 14, 59,177,170,236,119,228, 24, 9, 57, 83, 85,190,164, -194, 13,180,203, 5, 38, 11, 13,169,235,247,196, 40,249,193, 55, 55,215, 40, 5,117, 93, 81,249, 74,138,164,115,194, 44, 47, 29, -154, 42, 99,182,170,170, 24, 99, 18, 14,129,171,200, 89,227,135,137,144, 50, 73, 89,194, 97,192,249,138,207, 63,255,156,237,102, -203,246,237,158,170,246,132,176, 71,199, 64, 74, 74,236, 98, 41,156,156, 11, 34,234, 16, 37,186, 4, 28, 29,139,250,249,190,232, - 49,238,240, 84,208, 51,104, 37,118, 73,237, 12,218, 53, 84,237,146,217, 98, 73, 61, 95,210,206, 87,184,102,134,169,230,152,122, - 38, 98,199,170, 70, 87, 13,206, 59, 25, 85,150, 81,151, 58,238,118,173, 92, 88, 31, 81,193,234,201,148, 9, 85, 88, 66,239, 69, -149,242,155, 69,232,127,245,164,179,255, 30, 11,254, 9, 55, 57, 78,196,195,192,120,232, 24,187,158,156, 51,174,242,228, 16,113, -109, 77,246,162,149, 81,199,111, 24, 39,182, 37,133,223, 76,158, 70,126,241,147, 31,227, 83,102, 59, 6,134, 0,202,123,244, 20, -176, 54, 98,108,198, 40,205, 20, 38,180, 50,114,104,137, 84, 8,103, 68,204,102,143,225, 77,133, 96, 88,162,169,101,151, 62, 10, -115,160,235,122,156,183,248,170, 98,191,221, 98,173, 99, 10, 16, 99, 16,140,106,140, 69,180,169, 33, 67, 93, 25,177, 95,134, 76, - 44,175,153, 51, 6,149, 34,211, 48, 10, 5, 83,131,183,154, 93, 63,114,113,225,168,106,249,196,221,126, 32, 37, 77, 8, 17, 99, - 19,202, 8, 88,166,170, 77,129,209,204, 64, 69,182,251,158,166,117,140, 83, 0,165, 25, 67,102,177,170, 25,166,145,213,245, 74, - 18,215,172,161,106, 90,172,117,236,186,142, 97, 28,209, 36,210,148,104,156,227,217,245,115,180, 81, 36, 21,105, 26, 79,179,152, -209, 46,231, 92, 92, 95, 51, 91,204,169, 43, 71, 93,214, 69,117, 45,186, 16, 83, 85,248,182, 69,251,170, 48,210, 31,113,165, 90, - 9,216,200, 87,142,186,169, 89,173, 86,220,237,123,102,179, 25,125,183,199, 90, 75, 72, 35,206,104,218,166,102, 56,244,216, 89, - 67, 63,245, 40,163, 72,161, 32,149,199,200,238, 1, 46, 47, 47, 25,250, 61,155,135,123, 46, 47,150,188,121,243,138,155,155, 43, -190,125,245,146,231,215, 55,216,170, 97,189, 61, 48,175,100, 90, 48,134,137,186,241,108,183, 91, 22,139, 21, 49,132, 19, 48, 44, -166,136,117, 6, 29, 74,130,102, 22,222,190, 78,138,172, 18, 42, 69,162, 86,146, 98, 88,154,197,227,229,255,152, 46, 18, 99,102, -236,133,231,190,239, 70, 30, 54, 59,222,221, 61,240,236,106,201,179,103,215, 92, 63, 47, 0,155, 85,135,155,207,177,117,131,241, - 13,202,122,180,182, 36,165, 73,198,160,241,101, 52, 45,197, 79, 57,139,118,186,188,199, 28,109, 93, 81, 59,139,189,179,108, 54, - 59, 82,138, 56,167,241,149,165,105, 60,117,229,241, 94, 46, 4, 41,101,134,105,100, 24, 12,195,104, 37,199,125,156, 4, 35,157, - 36, 56,102, 40, 71,138,140,228, 61,245, 96, 5,216,102,109, 33,105,218,114,246,148, 40,219, 24,138, 85, 77, 46, 30,198, 9,130, - 92,107,139,118, 86,132,188,198, 22,152,142,150,196,198,179,176, 39,206, 10,249,209, 93,134,146, 38,234, 88,228,173,156, 5,137, - 15,180,229,127,169, 39,252, 55,117,234,191,185, 16, 63,205,212,254,103,218,185,228, 76, 70,188,180,190,174,208, 90,115,216,111, -232, 54,247,124,252,226,138,119,247,239,248,211, 63,253, 51, 94,124,242, 61,254,141,127,243,239, 48, 78,129,221,246,158,111,191, -185,100,251,230, 21,219,205,150,127,233,111,252, 33,171,103,159,176,221,110, 25,118, 27,214,239,190, 97,187,123,192,199,204,204, -125,204,205,229, 5, 97, 24,248,211,255,246,143,153,198, 30, 29, 43,118, 41,115,227, 43, 76, 93, 99, 43,203,139,143, 63,193, 86, - 53,219,195,158, 38, 91,126,245,179,191, 64, 39,197,116,245,140,191,245,175,254,141,211,190,105,156, 38, 64,159, 70, 50,235,135, -123,102, 77, 83,232,110, 3, 83, 76,108,119, 59,154,170,166,219,237,101,124, 89, 87,204,218, 57,149,115,220,221,222, 22,206,186, - 97, 28,197, 62, 18, 99,162,170, 43,177, 93,148,113,234, 48, 12, 50,234,155,132,181,127, 56, 12, 82,100,179,132, 9, 56,231,217, - 30, 54,160, 52,171,213, 5, 75,175,160,255,150, 56, 5,134, 48, 18,147,145, 91,119, 22, 31, 89, 78,249, 44,177, 44,151,196,183, - 99,214,239, 81,233, 94, 44, 31, 89,226, 74, 99, 42,118, 41, 36,111,219, 84,134,108,156, 16,221,154,150,118,177, 98,113,113,205, -124,121,129,107,196,191,106,170, 86, 82,207, 92,133,118, 5,197,170,149,224, 88,141, 22,150,250,153, 56, 79,189, 39,252,146, 22, -146,194,149, 63, 70,156,129, 86,249, 49, 49,176, 36,147,253,211,213,238,252,223,159,170,238,189,191,112, 74,137, 48, 78,164,190, - 99,220,110,217,222, 63,112,216,110, 81, 25,234, 89, 75,179, 92,208,196, 57,186,174,113,222, 61,166, 79, 41, 85, 40,124, 98,158, -143, 49,176,185,127, 7,211, 72,154, 2,195, 16,137,165,171, 16,168,137, 69, 49, 49, 14, 35,113,202,160, 53, 33,103,166, 34,198, -147, 93,186,116,233, 33, 78, 56, 3,206, 90,166,113, 98,181,154, 75,162,152, 82, 12,163,208,181,154,182, 97,183,219,163,148, 98, - 28, 39,234, 34,150, 83,206, 19,131,136,237,186, 62, 20,181,178,231,208, 77,104, 45,211,162,186,114,228, 16,200, 90,242, 38,180, - 74, 24,173, 25,199, 64,229, 13, 77,235, 48, 86, 58,238,253,110,164, 31, 3,205, 76, 10,116, 78,137,125, 23,169,219, 22,178, 20, -206,113,140,100,244,233,226,188,221, 71, 46,175,231,116,195, 72, 61,107,200,192, 24, 3,203,229, 37,206,214,108,247,123, 17,136, - 77, 17,239, 12,171,217, 18,149, 19,227,216,115,121,125,129,171, 12,214, 91, 22, 23, 75, 46,159,221,208,204,151,204, 22, 45,144, - 36,187,189, 21, 27,171,173, 42,148,115,104, 39, 69, 73,214, 67,250,148, 93,129,210,130,105, 69, 83,215,158,229,114,206,195,235, -183,212, 77,131,214,154,186,174,217,239,197,213, 98,148,226, 48,116,144, 46, 8,211,132,213,142, 97, 26, 9,211,128, 85,158,126, -191,225,238,237, 43,170,118,201,125, 42, 19,147, 97,224,242, 98,201,159,255,248, 39, 60,127,246, 12,109, 45,251,237,134,182,154, - 49,132, 32,171, 19, 35, 22,194,152, 98, 17, 35,202,190, 25, 43, 30,114,194, 78, 58,211,152,139,107,164, 36, 5,151, 80, 38,125, - 74, 36, 59,243,125, 40, 93, 44, 92,146, 14, 58, 69, 69, 26, 18, 99,232,216,239,123,182,119, 59,238,222,109,121,126,187,225,250, -249, 21, 87,207,175, 89, 92, 94, 80,207, 23,248,197, 66,138,123,213, 10,153, 78,107,114, 41,130,162,157,209, 88, 39,144,180,202, -137,200,176,109, 27,218,121,195,108, 37,162,230,195,254, 32, 43, 31, 35,226, 55, 95,121,218,198,225,141, 52, 46,213,104, 25,188, - 99, 24, 71,250,126,196, 90,205,161,159, 24,114,146,243,175, 56,114,200, 9,109, 19,253, 32,120,117,115,178,127,155,211,217,116, -204, 65,231,152,161,226, 29,149, 22,247,141,117, 22,235,107,124,185,232,201,250,208, 60, 34,166,213, 83, 53,114,126, 82,166, 37, - 41,241,168, 43,179,239, 91,106, 50,144,142,254,242, 39, 29, 54, 31, 40,232,233,131, 7,154, 8, 12,222, 11, 99, 81, 71,147, 90, - 49,183,169, 72,201,213,148, 68, 47,245,129, 2,175, 74,126,116, 86, 39, 27,213,249,159,117, 20,224, 61, 13,115,209, 39,139,157, -183,142, 60,245,244,187, 59,140,154,120,123,255,138, 87,175, 95,243,175,254,245,191,134,117, 53,175, 94,253,146,245,102,203,183, - 47, 95,114,121,117,205,199,191,255,175,115,249,236, 19,178,118, 12,221,129,195,253, 91, 30, 94,126,201,195,183, 95,242,230, 97, -195,231,223,255, 62, 84,142,121, 93,243,179,127,242,167,124,251,238, 21,159,127,254, 25,202, 90, 76, 85,203,225, 22, 52,151,151, - 87,212,213,146,126,154,232,251, 1,210,150,215, 47,191, 97, 49, 95,209,206, 26, 62,254,228,134,197,197,130,183,247,235, 2,159, - 73,104, 20, 99, 8, 24,231,113,117,203,253,122, 77, 54,142,166,157,177,104, 26,192, 9,190,182,236,143, 46, 86, 11, 14,135, 3, -205,124,134,181,238,148, 80, 52,140, 83, 9,213,241,194,218,142,241,116,179, 27,199,137,172,160,239, 71,161, 66,133, 40, 55,228, - 65, 84,205,139,197,138,245,102,199,219,183,119,204,204,132, 27, 6,226,216,145, 84,102,159,196,142,164,131,196, 21, 30,115,197, - 5,187, 42, 31,161, 8, 65,142,201,123, 71,181,166,208,156, 68, 40, 19,143,241,189, 26,114, 54,104,237,112,190,162,110, 91,234, -249,140,106, 49,163,185, 88,226,103, 75, 76,213,144,173, 43,108,117, 67,182, 71,239,248,209,206, 1, 89,231, 39, 23,196,252, 62, - 89, 56,137,244,254, 36,224, 75, 69,244,103, 20,217, 9, 76, 70,159, 82,144,180, 92, 10,149,250, 32,206,245,253, 68,192,227,142, -240,172,159,226, 60,177, 78,157, 90,146,239,250,196,179,202, 69, 98,120,246,108,229,163, 7, 94,149,247,112, 62,165, 13,230,227, -207,207,110, 31,234,152,145, 80,214, 27, 42, 70,114, 63, 50,237, 59,186,237,134,253,195, 27,182,119,239,136, 83, 79,213,204, 88, -236,175, 72,221, 21,213,124, 73,174,107,241, 0,107, 83,240,202,114, 41, 35, 74, 18,222,244,250, 37,116, 3,155, 62,210,105, 75, -208,137, 74,141, 88,151, 81,214,138,216,104, 24,113, 74, 49, 41,216,163,152,200,212, 40,170,148,113, 94, 49, 41,217, 91,206,173, - 99,102, 28,111,167, 3,243,197, 28,171, 45,253, 56,178,235, 7,234,182,197, 52, 51,186,251, 59,156, 22,177, 80, 68,145,148, 33, -132, 76, 12, 9,133, 33,134, 64,237, 53,206,104,186, 41,210,182,142, 48, 6, 98,232,241,126, 69,138,195, 41, 49,174,169, 45,235, -205,192,205,205, 92,224, 44,185,227,126,179, 33, 98,240, 85, 13,122,196,146, 25, 38,176,181,226, 48, 70, 46, 22, 11,214,187, 61, - 93, 63,177, 88,205, 68,165, 29, 50,237,194,177, 31, 15,204, 86, 11,176,134,253,212,115,249,236, 25, 33,194,110, 24, 65, 27,140, -142, 44, 86, 45,179,186,166, 63, 28,208, 10,150,215,115, 76, 99, 48,149, 99,117,125,197,242,226,138,217,114,193,108,190, 0,173, -169,219,154,170,174, 49, 85, 85,200,133, 22,227, 93,129,144, 8,115, 95,165,146,112,103,203,153,166,193,228, 76,101, 20,139,229, - 28,229, 45,158, 86, 68, 98, 74, 65,215, 49,145,209, 85, 77,222,108,137,125, 39,200,101, 15,219, 16,184,110, 23,108, 31,238,105, -231, 45,195,230, 29,109,229, 24, 14,145,205,186,166,114,134,113,127,203,213,197,140,215,175, 95,177, 90, 93,136, 24,112,191, 99, - 94,105, 42, 99,216,236, 59,178, 18,240,149,202,114, 81, 27,178, 98,204,130,175, 34,130,202,233,113,245,150,133,248,152,148, 38, -169,179,179,191,236, 71, 53, 26,149,227, 41, 94,250,232,122,201, 89,220, 23, 99, 72, 28,198, 61,183,135,158, 55,155, 29, 55,119, -247,124,116,247,192,243,103,151, 92, 93, 93,208, 94, 45,105, 47, 46,112, 77,139,173,103,224,106,146,113,168,242, 97,180, 34, 89, - 7,166, 70, 85, 51, 84,181,195,183, 59,170,214,209, 46, 91,110,182, 43, 14,155, 29,227,190,147,241,122,150,125,186,116,248, 14, - 77,198,107,112,222,224,172,126,212,232,160,229,235, 10, 81,244, 30, 33, 17, 82, 66, 7,232, 85,194,106, 78,197,252, 9, 42,186, -224,169,197,229,145,105,148,193,121,201, 24,177,206, 82,213, 45,190,105, 11, 47,163, 20,114,163,207, 70,133,250, 12,135,254, 94, -243,156, 5,134,163,116, 62,219,169,255,230, 38,224, 44,100,229,195,130,157,223, 20,180,242,151,181, 26,138,167,123,129, 99, 1, - 63,125, 67,242,111,238,214,159, 76, 9,138,170, 58, 43, 9,117, 24, 14, 7,182,235, 7,140,142,220,175,239,249,107,255,242,223, -164,174, 91,118,251, 3,109,221,208, 54,151,124,246,217,239,209, 52, 45, 65, 65, 63, 78, 76,195,150,221,195, 3,187,251, 55,188, -126,245, 37,247,111, 95,178,188,184,225, 98,181,224,250,230, 10, 72,252,248, 39, 63,102,177,186,160,154,205, 49,198,226,219,250, -196, 66,119,206, 1,138,253,238, 64, 63, 78, 56,239,228, 54,159, 18,243,217, 12,215, 58,154,166,129,251,181,228,213, 43, 69, 63, -141,164,125,241, 47,174,215, 92,174, 46,208, 74,241,229,175,190,228, 71,223,255, 1,206,153,226, 43,215,167,100,187,148, 19,219, -251, 13,214, 30, 73, 71,238,116,187,139, 5,221,120,204,235, 62,133,177,148, 75, 87,152, 4,146, 48, 77, 19, 33, 6, 50,250, 20, -218,227,189,103, 60,108,216,237,118, 16, 37,116,226,144, 2, 33,101, 73, 85, 11, 81,194, 53, 98, 42, 35,249,199, 44,224,148,121, - 34,142, 75, 20,238,118, 46,128,135,130,253,156, 98, 32,171,140, 45,226,159,170,174,168,219,134,102, 62,167,154,205,168,230, 51, - 65, 72,106, 83,172,103,250,113, 92,172, 16, 50,159, 82,143, 49,173,138, 39,180, 57,206,114, 5, 8,137, 28, 69,132,149,203,220, - 79, 25,141,201, 74, 98, 38, 53,103,201,105,234,105,132,249, 83,105,104,177,125,157,255, 33,186, 60,115,167,252,164, 82,108, 57, -129, 43,242,175,153,239, 43,193, 16,157, 63, 96,167,184,227, 82,225, 37,229,172, 60,196, 71,214,180, 28, 14,249,233,175, 41, 66, -208,190,239,232, 54, 91,246, 15, 15,236,215, 27,186,221,142, 56, 13, 76, 83,144,195, 8, 45, 25,217,117,133,113, 22,138, 32, 45, -133,169,132, 99, 40,114, 10, 76,219, 13,187,135, 7,134,110,224,208, 5, 92,109,209, 10,234,218, 66,134,113, 8,168, 84,252,200, - 89, 66, 90,180,146,209,247, 9, 66,100, 13,113, 74, 88,103, 75,119, 98, 11,219,160,168,202,173,163,174, 27, 30,214, 59, 1,212, - 0,206, 58,134, 49,226,188,149,226,160, 96, 26,165,219,111,234,138,190, 31,241, 94,139, 46,100,140, 56,173,208, 5, 84,148,115, -166,118,150, 48, 6,218,198,115,115,125,193,225,112, 32,101, 77, 12, 66,195,187,186,110,216,108, 70,246,219, 64, 93, 91, 82,212, - 84, 85, 37, 66,209,105,194,122,241, 95, 39, 5,202, 41, 34, 9,231, 61,214,203, 62,253,242,242,146,105,156, 48,218, 75,158,131, -115, 44,102, 45, 41, 70,250,113,196,183,141,176,195,155,138,118, 49, 99,121,113,201,108,177, 96,177, 90,209,180, 51, 50,138,197, -106,137,243,162,101, 49,174,236,141, 20, 39, 95, 50, 33, 23,121, 83,185,176,197, 92,238,138, 50, 85,210, 70,211,204, 26,102,243, - 25,227,174,167,170,107, 66,223, 83, 85, 21,195,152, 74, 90,160,227,176,223,227,151,115,166,105, 66, 41,195, 24, 2,174,242,132, -105, 66,107,197,126,125,143,111, 87, 60,188,125,197,199, 31,191,224,225,118,131, 51,158,111,222,188,225,234,242,146,164, 97,189, -221, 96,105,104,138, 93,118, 8,137,161, 23, 11, 44,221,129, 88,136,123,147, 42, 9,101, 41, 23,150,133,122, 79,215,242,221,179, - 63,103,158,240, 18, 84,126,252,241, 36,206,142,153, 97, 10,116,125,207,118,187,225,254,254,129,183,239, 46,120,254,236,154,171, -231,151, 92, 61, 59, 48, 95, 93, 80,205,123,170,182,197,212, 53,198, 87,194,103, 87, 6,173, 44,217,149, 49, 54,182, 88, 96,231, -216,182,167, 93,118, 76,151, 29,161, 19,219,112,223,203,123, 64, 44,183,242,181, 24, 37, 96, 23,107, 29,222, 43, 82, 54,196, 8, - 85,200,132,136, 8, 56,131, 4,203, 12,177, 39,166,240,152,251,240,157, 41,182,156, 17,206, 59, 98,174, 49,214,208,148,104, 86, - 99, 44,214, 9,119,223,186, 50,109, 48,250,148, 10, 7,249, 73, 28,235,251, 63, 30,121, 48, 74,165, 95, 95,212,207, 85, 68,239, - 43,225,127,155,189,249, 95,221,132,243, 93,181,252,111, 59,130,127,242,249,249,116,161,193, 24,205,225,176,135,156,120,251,230, - 21,127,240,251,127,192,191,245,175,255,109,140,245, 76, 33,209, 13,129, 49,100,214,155, 29,235,205,142, 67,183,101, 56,236,232, -118, 27,222,124,243, 21,239,222,188,226,171,175,190,164,174, 43, 62,249,244, 99, 62,249,232, 57,139,249,140, 87,175, 94,243,171, - 95,125,141,114,142, 33,102,150,109,131,175, 28,139,249, 12,173, 50,202,192,253,253, 29,187,237, 1,235,107,250, 67,143,213, 53, -111, 95,191,225,254,254, 14, 92,113,169, 43, 37,254, 77,196,204, 25, 99,196,148, 81,250,106,177,196,104, 77,183,223,178,219,239, - 9, 97,226,114,185, 32,101,197, 56,142,220, 63,108, 48, 70, 83,213,117, 17,245, 72, 1, 24, 7, 17,172, 48, 72,236,234,113,212, -115,252, 30, 25, 99,168, 43,131, 70,118,227, 33, 69,116, 84, 76, 33, 18,114,164,174, 43,178, 51,140,131, 98,119,216,147,211, 64, -138,129, 17, 67, 72,160,162, 4,102, 68,161,183,158, 70,235,199, 27, 54, 37,186,247, 56, 29, 72, 57, 75, 65,207,143,147, 26,165, -228,193,119,206, 80, 55,158,217,124,198,242, 98,193, 98,185,164,153,205,241, 77,131,182,246,136,165, 43, 32,163,252,152, 92,116, -124,237, 79,185,235, 69,169,122,182, 31, 87,200, 97, 24,167, 72,154, 2,177, 31,137,211, 36,225, 52,136, 71,221,199, 10,162, 35, - 59,243,168, 10, 63,231, 47,159,101, 18,156,162,103,149, 58,117,206,167,113,127, 62, 83,103,158,176,142,169, 96, 38,159,198, 45, - 62,229,188, 76,114,144,157,146, 9,211, 9, 57,169,202,175, 61, 61,118, 39, 63,171,100,203,231, 98,183, 81,199, 63, 47, 37,194, - 84, 70,226, 99, 64, 41, 67,221,204,197,226, 21, 35,198, 90,172,111, 48,198, 19,167, 76, 31, 7, 82, 62, 48,141, 3, 67,223,209, -239,247, 12,135,142,169,140, 78,107, 53,241,240,238, 45,219,245, 6,149,193, 27, 77, 74, 17,165, 52, 97, 12,228, 32,151,230, 8, -132,242,253,247, 10, 76,241,166,135, 24,240, 72,254,131,107,106,182,251, 3,179, 89,131,177,150,177, 31, 25,134,137,122, 38, 68, -191,253,221, 3,115, 99, 81, 4,177,188,197,128, 43, 94,221,164, 68, 45, 93, 87,178,171,236,186,161,164,168,101, 84,146,244,183, - 20, 70,156,150, 11, 79, 83, 87,220,223, 13,252,240,119,111,152,198, 1,239, 12,175, 95,239, 9, 65,115,177,242,196, 56,208,119, -137, 24, 69,240,103,141, 69, 1,251, 67, 79,213, 56,198, 16,176, 78,254,254, 73,129,173, 28,117,219,162,181,230,226,226,242,132, -186, 5,196, 91,110, 31,243,182,155,249, 76, 46,167, 77,205,108, 46, 69,119,177, 92, 48, 95, 94,224,107,217,151,187,170,194,215, - 13,237,114,113, 82, 46, 11,171, 62, 63, 25,169,230,152,164,200,103,153,234, 72, 42,162,236, 97,117,229,240, 89, 49, 91,180,140, - 93,199,124, 49, 99, 51,142,180,179, 25, 73, 73,152,145,173, 60, 93,119,192,229, 92, 92, 4,153, 67,119,224, 98, 49,103,125,127, -199,124,222,210,237, 54, 24,165, 25,167,196,190,210, 24, 50,222,104,230,149,231,229,215,191,226,114,181, 96,156, 70,134,224,200, -147, 8, 26,199, 97,100, 28,122,218,182,133,245, 3,195, 24, 72,190,126,196,198,126,231, 2,171,158, 76,186, 30, 89,233,103,119, - 89, 85, 76,213,103, 36,181,116,124, 22,202, 32,108, 82,153,126, 26,217,247, 19,119,155, 3,111,238,182, 60,123,123,199,139,231, -107,174,159, 95,115,113,117, 41,121,238, 75,121, 13,108,221,128,159, 73,215, 94, 66, 98, 76,101,136,198, 99, 76, 77,237, 59, 92, -211,144,230,163, 96,185,187,142,225,176,103, 28, 7,134,174,103, 26, 6, 57, 59,114, 34,197,114,185,214, 18, 57,238,108, 98,242, - 25, 27, 34,198,136, 54, 35, 19, 79,162,186,120,140,117,125,175, 78,105, 37,184,217, 42, 6,129,220,120, 39,107,157,169, 46,223, -151, 72, 38,200,126,221, 10, 17, 15,101,202,145,146, 80, 42, 62, 1,218, 28,241,183,231,206, 47,165,126, 77,167,126, 14,161,255, -144,101, 70,169,255,238,203,192, 95,103,111, 83,239,229,204,254,211,168,223,211, 25, 95,190, 59,236,208, 42, 51,111, 27,126,255, - 95,250, 30,191,247,187, 47,112,206, 19, 19,244, 99,228,229,203,183, 84,182,162,219,190, 99,216,110,232,183, 27, 94,127,253, 5, - 63,255,233,143,185, 93,175,153, 82,230,226,250, 25, 23, 23, 23, 92, 44,231,196,113,228, 31,253,183,255,136,140,224, 48,251,125, - 71, 72,153, 69,172,201, 41,178, 88, 52, 24, 3,251,253,174, 40, 65,101,207,121, 68, 7,190,125,243,134,203,231,215,165,219,206, -143,180, 28, 45, 5,208, 89,205,106,185, 18, 12,167, 54,124,244,226, 99, 94,191,249,150,183,111,122,118, 23, 43, 52,153, 89, 91, - 11, 62,210, 40,154, 70,146,220, 66, 74, 28,142, 62,247,210,221, 74,168,137, 40, 54,187,195,129, 41,201, 97, 22, 99,102, 24, 38, -250, 97, 96, 26, 37,143, 60, 37, 24,134,137,205,118, 47,130,154,251,215, 76, 67, 79, 10,162,130, 31,146,116,243,148,110, 60,161, -138, 58, 23,180,118, 37,212, 68, 14, 55,123,204, 32,214, 90,188,197, 81, 20,159, 71, 0,138, 53, 70,148,162,133,165, 92, 87, 30, -239,228,166, 42,219,136, 72, 14, 2,213,224, 56,198, 66, 46, 64,143,182, 15,117, 70, 70, 59, 39, 10,230,199,164,163,152, 72,227, -200,212, 15,132,253,150,177, 63, 72,151,162, 20,190,174, 32, 54,184,208,160,189, 71, 89, 43, 98,164,227,235, 81,224, 57, 57, 63, - 29,191,159,156, 33,229, 96, 82, 60,194, 54,114, 41,174,199,220,246,148, 74, 97,207,242,251, 40,173,158,112, 17, 85, 74,103, 58, - 16, 78,152,201, 84,254, 28,125,142, 92, 56, 27,105,230,156, 37,205,234, 56,174, 63,137, 19,197,133,128,173, 49,141, 19,111,111, -150, 24,206, 35,195, 94,107, 43,100,193, 24,153,166,145, 62, 76,236,247, 19,235,187, 29,219,135, 7,186,190,195,232,204,210, 43, -126,249,139, 47,164, 64, 40,249,186, 40,175,113, 28, 3, 68, 57,140, 67,146, 93,186, 82, 10,155,161,114, 86,166, 48, 36,140,210, - 36, 36, 22, 51,146, 78, 17,188,187,105, 66, 27, 1, 67,117,157, 48, 26,156, 6,173, 44, 49, 36,156, 85, 76, 83, 96,214,182, 60, -236, 14, 0,180,141,147,233,147,214,164, 40,223, 27,171, 53,181,213, 56, 35,163,208,121,235,233,246, 19,215,215, 13,181,183,220, -175, 55, 76, 83, 34,132,140, 82,134,170,182,220,173,119, 12, 99,102,182,168,200,102, 98,182,172,185, 93,111,153,207, 43,246,135, -129,229,213,130,205,161, 35, 25,141,118,138,229,245, 37, 57, 37,170,186,129,172,104,155,150,105,156, 80, 10, 22,139, 57, 33, 69, -134, 48,113,245,236, 25,245, 76,224, 71,109,219,210,180, 21,203,197,226, 84,196,235,153,116,229, 85, 35,107, 38, 74,218,151, 50, -250,236, 18, 39, 36, 50,173,146,140,219, 83, 58, 35,105,150,145,143, 22,241,151, 73,138,197,106,206,250,254,158,197,114,206,230, -254,158,202,214, 76, 72,224,142,245, 21,169, 63, 96,140, 97, 10, 1, 82,230, 48,245, 92, 92,172,164,139,223,237,169,235,138,110, -183,198, 25,199,246,238, 13, 87, 55,207,136, 49, 80, 27,197,237,195, 29,139, 90, 94,175,205,118,195,220, 26,234,122, 46,211,207, -190,163,106,196,134,151, 67, 32,100, 89, 29,166,227, 95, 51, 61,238,206,243,185,112, 54, 62, 82,214, 78,239,121,117, 54,229, 58, - 35, 50, 74,180, 87,241,182,199,199,197,237, 56, 37, 14, 67,199,174, 15,108, 30,182, 60,220,174,185,126,115,199,245,243, 11,174, -159, 93,113,117,189,100,190,156, 81, 47,230,232,118, 41,185, 14,174, 6,227, 64, 21,122,164,113, 88, 7,218, 89,178,247,164,202, - 97,107,143,107, 61, 97, 24,152,186,142,225,112,224,176,219,211,231,158, 41, 8, 43, 33, 29,183,119, 39,157,131, 64,177,142, 11, -184,152, 17, 39, 68,204,223, 9,122,209, 37,127,222, 27,185, 0,219, 97, 44,128, 55, 33,184, 86, 85,133,170, 44, 56,141,177, 6, -167, 13,199,204,107,165,244, 89, 23,243,235, 53,107,199,127,236, 95,214,117,255,182,157,249,135,192, 51, 31,112,177,125,231,150, -198,135, 96,149,234, 47,211,224,255, 38, 97,158,140, 34, 41,129, 14, 49, 6,134,254, 64,156,122, 22,115,139,247, 29, 23, 43, 17, -163, 28, 14, 19,251,135,158,208, 29, 88,213, 35,239,194,158, 47,190,252, 25, 63,251,139, 31,179,217,238,200, 25,174, 86,151,252, -224,123, 63,164,157,181,100, 18,191,252,226,151,124,243,242, 37,222, 85,160,193,186, 66, 25,154, 34,186,239, 49, 6, 30, 44, 92, - 94, 92, 17,179, 41, 41, 79, 66, 90,234,246, 7,116,201, 62,206,101,100,120, 60,192,143,135,115,140,145,217,108, 38, 86, 52,231, -137, 49,112,113,113,201,171,238, 37,155,237, 86, 18,139,154,150,126, 12, 24,173,136,113,143, 49,134,113,156, 4,224,146, 3, 41, -245, 52, 77,141,214,154,105, 28,121,184, 23, 27, 95,204,226, 33, 13, 33, 49, 78,129,253,161, 99, 24, 39, 14,221,192, 16, 18, 40, -195,161, 27,136,221,134, 54,236,176, 58, 75, 94,184,134, 6,161,187,229,199, 59,225,137, 88, 38,160, 34,203, 49,198, 87,159, 96, - 46,138, 16, 51, 99,152,100,196,155,146,228,254, 26,137,104,205,113, 34, 76, 61,227,208,209,119,123,252, 97, 43,204,231,156, 4, - 56, 17,197,134,162,203,120,242, 8, 99,200,165,128,159,139,136, 52,160,146,122, 4,171,100, 81, 54,135, 97,100, 58,236, 25,183, -247, 28,118,130,239,132,132,175,106,102,243, 37,205,124,129,169,103, 18,167,122, 18,181,148, 81,215,233,125,149, 31,121,205,249, -177, 72, 75,161, 13, 20,179, 44,160, 11, 14, 50,159,252,167,191,126, 93, 37,113,138, 71, 91,224, 41,202,241,220,229,159, 31,183, -245, 39,139,233,241,247, 76,246,113,196, 87,238, 55,218, 40,180, 3, 93, 27,156, 82, 39,210,159, 61, 94,140,202,106, 38,147, 75, - 81,159,168,198, 1,215,174,176,205, 10,223, 62,176,125,184, 99, 26,247,164,212,179,217, 30,176,214,131,149, 92,122,109,100,236, -157,198,136,205, 18,188,147,140,248,197, 53, 26,173, 50,104,241,225,122,111, 4,228,100, 45,253, 56,224,154, 26,107,101,164, 62, - 14, 3,179,118,198,172,109,121,251,213, 75,170,218, 17, 38, 17,200,237,118, 3,243, 69, 37,218, 16,173,137, 33,210, 54, 2,248, -216,238, 70, 42,103, 48, 74,209,239,122,218,218, 81, 25,217,227, 26, 5,181,151, 84,177,231,207, 47,216,108,118, 56,239,120, 88, - 63,176, 59,100,174,158,205,232, 67, 96,187, 15,216, 90,131,203,152,218,176, 27, 59,146,201, 76, 42,209, 94,180,116, 97, 4,107, -112,206,209,206, 27,146, 18, 2, 91,156, 36, 67, 43,133,196,114,177,196, 56,207,238,208, 49, 95, 46,248,222,199, 63,148,245,155, -115, 52,179, 25,214, 59,116,153,162,205, 22, 11, 50, 10, 91,215,204,151, 75,140,117, 50,129, 50, 22,101,205,227,228,231, 56,122, - 54, 90,244, 70, 89, 46,253,218,148, 32, 5, 37,187, 87,140, 88,184,114,206,180,203, 22,235, 52,245,106,129,210, 74,162, 90,117, -203, 56, 5,170,166, 69, 31,182, 69,168,154, 36,158, 86,101, 14,125,135,243,158, 48,142,144, 96,234, 58,148,151,148,178,110,183, -149,116,194, 28,177, 57, 10, 51, 62, 7,186,253, 30, 87, 87,212, 85, 43,145,199, 57, 48, 77, 35,174,170, 24,246, 19, 67, 10,140, - 83, 32, 34, 10,239, 84,186,245, 92, 86, 67, 49,199, 15,164,153,229, 39, 92, 8,117, 86,188,148,100,240,148,247,182,172, 30, 82, - 9,108,138,136,179,101,236, 35, 83, 63,210,117, 35,247,155, 61,183, 15, 15, 92,223,222,243,236,197, 37,215,151, 43, 46,174, 47, -168, 47,246,180,243, 57, 85, 35, 98, 91,172, 71, 57, 95, 4,162, 50,226, 78,133,105,161,236, 81,125, 46,161, 58,214,251,146,208, -184, 3,221, 17,247, 3, 99, 31,152,198, 73, 58,242, 41, 48,133,200, 20, 99, 17, 1, 23, 63,190,178,100,149, 31,191, 23,241, 40, -226,145,245, 84, 74,162,153, 48,102, 56, 9,233,156,235,112,206,130, 45,177,205, 89, 65, 45,231,141, 49, 21, 74,167,147,242,253, -215,113, 95,206,249, 50,246, 67,133,250, 67, 51,251,191, 74,145,255,205,160, 25,190,211,245,124, 32,146,229,113, 20,255, 87,236, -212,211, 73, 80, 39,185,218, 49, 8, 48, 33, 77, 3, 99,127,192, 16, 49,106, 18,181,224,184, 37, 29,238,112, 83, 15,221, 45,235, -111,127,204,183,191,252, 51,118,219, 3,218, 26, 62,121,246,130,223,249,225,239, 49,159,205,113,206,114,183, 94,243, 95,253,215, -127, 68,211, 52, 12,211,196,172,109,105,170,138, 48,101,124,213,162, 24,185,184,184, 96, 49,175,112, 78,227,148,225,118,191,197, -251,134, 89,219, 18, 99,100,187,217,178, 27,247,132,130,190, 60, 65,151, 16,118,240,124, 54, 67,105,205, 20, 2,187,253,142,218, - 90, 42,239,249,244,211, 79,185,187,187, 21,107,206,225,128,117,174,228, 47,123,148, 82,120,175,202, 5, 34, 82, 85, 53,117,213, -224,172,147,131,161,128, 43, 84,204, 76, 83, 44,187,229, 72,206, 81, 44,106,200,232, 71, 62, 55,147, 85,162, 86,129,224, 53, 6, - 47,122,245,156,138, 86,193,150,245, 70, 81, 47, 40, 78,126, 76, 93, 82,251, 78,188,255, 66, 99, 50, 58, 51,169,130, 70,204, 98, -109, 50, 64,156, 70,250,253,142,110,183,229, 80, 73,172,161,202,160,194, 68, 26,123,180,247,143, 99,248,163,234, 83, 61,218,155, -228,166,124,236,226,143,209, 47,103,158,250, 16, 24,251,129,126,183,163, 91,223,177,223,175, 57,236,183,196, 48,225,170,138,110, -190,101, 54, 95,137, 46,194,121,121,200,142,163,243, 36, 2, 30,217,241, 61,122,220, 31,227, 22,203,231, 29, 99, 22,181,136,206, -148,113,104,237,138, 6, 64, 14,237, 99,209, 62,234, 29, 84,217,221, 39,108, 89, 29, 28,197,113,250,164,228, 63, 42,243,181, 42, -112,137, 99,168, 67, 9,110, 48,216,211,207,133, 64,117,182,242, 0,217, 9, 31,255,191,126, 58,253, 18,222, 64,194,199, 76, 24, - 39,124, 59,167, 94, 92, 80, 47, 55,204, 46,174,233,247, 15, 60,188,252,130,106,190, 96,202,137,152, 51,149, 53,196,156, 80, 33, -163,163, 68,237,142, 25,130,214, 12, 57, 82, 23, 22,124, 34,147,140,194,215,178,115,174,173, 99, 72, 9,235, 61,179,217,140,219, -119,239,138, 47,187,102,179, 61, 72,246, 64,140,184,178,106,153, 98,194, 88, 77,234, 37, 12,164,118, 22,167, 19,222, 56, 82,234, - 69, 69, 63, 4,172, 86, 24, 21,241, 70, 46,206,179,214,178,221,141, 44, 87, 45, 74,105,198, 24,100,181, 48,129,171, 12,174,129, -111,223,236, 81, 30,148,201, 84, 11, 75,202,137, 97, 26,169,231, 53,166, 18,223,183,169,229,194, 63,155,175, 80, 58,179, 90, 45, -217,111,118, 24,109,112,206, 83, 85, 86, 70,244, 90,243,189, 31,254,128,229,229, 5,237,124,142,169, 60, 85,211,144,148,116, 90, -199,100, 75,101, 45,139,229, 10, 87, 85,242, 12, 42,141,241, 94, 94,167,227,235, 76, 9,143, 58, 53, 70, 25, 76,146, 34,103,117, - 9, 25,145,245, 80,214,229,125, 98, 21,179,213,156,186,245,152, 73, 51,155,205, 24,198,128,169,106,124, 61, 81,213, 53,117,221, - 8,190,183,116,193,198, 26,246,221,158,213,108, 94,116, 42,242,254, 20,207,180,144,239, 18, 25,111, 29,179,218, 51,245, 29,214, -104,166,126,100, 50,242,121, 10, 73, 34,115,222, 97,130,136,217,250, 50,122, 30,163,116,235, 9,117,182, 22,146,201,105, 38, 63, -153,120,157, 46, 49,200, 26, 69, 25,125,138, 48, 62,229,146,171, 68,210, 71,129,104, 46, 23,148,210, 8,149,174,121, 76, 19,251, - 49,176, 62,116,220,173,119,188,187,219,240,252,230,146,103,207,246, 92, 93,207,185,184, 90, 49, 95, 46,168,102, 45,182,105, 49, -117,131,242, 21,232, 90,158, 13,201,147, 46,150, 65,193,199,106,235, 5,212,229,157, 16, 44,171, 3,218,108, 9,113,195,225, 48, - 49, 76, 19,195, 48,150, 92,247,137,113, 12,146,246,150,213,169,225, 57,159, 36, 30, 57, 29,199, 99, 68,165,200, 88, 70,245,126, -176, 28,186, 30,107,141,136,103, 99, 34,141,145, 24, 34,174, 10,120, 31,138,112,206, 60,230,170,124,168,198,170, 71,245,172,253, -181,163,247,239,252,248, 79,207, 99,255,110,199,253,222,239,153, 63,200,166,121, 26,165,250, 87,250,115,143,249,223,138, 20,228, -112,158,207,103,252,236,167,191,228, 7,223,255, 30, 38, 91,194,112, 96,115,127,207,230,221, 29,111, 95,222,242,245, 95,252, 5, -253,253, 23, 92,175, 50,217,205,200,126,198, 71,159,124,130,177, 17,235, 34,219,237, 3,255,229,223,255, 7, 56,235, 88, 88, 79, -206, 9,103, 52, 70, 3,206, 72, 81,207,134,135,135, 7, 46, 47, 62, 33,198,145,113,236, 24,134, 3,206, 85, 76, 33,208, 52, 70, -196,105,227, 88,132,108, 79,181, 11, 70,105,218,166,197,121,207,187,183,111,217,172,215, 92, 45,151, 92,124,250, 41,135,195, 1, - 95,213, 60,127,246,156,174,219, 19, 82,194, 58, 79, 34,211, 31, 14, 92,172,174,216,237,247,228,156,105,218,153, 36, 45, 21,126, -127,221, 52,244,195,116, 42, 72, 49, 4,134,113, 96, 24,122,134, 97, 60, 66,199,176,198, 48,169, 32,156,105, 21, 10,228,192, 96, -136, 56,140,236,166,140, 59, 33, 98,143, 88,225, 99, 54,128,120,145, 77, 33, 49,165,242, 53,106, 33, 76,101, 9, 71, 8, 81, 14, - 25,171,181, 88,127,186,142,205,253, 61, 90,101,161, 61,245, 61,227,108,142,173, 91,185, 45, 91,161, 39, 1,232, 2,182,200,199, -253,125,201, 59,214, 74,147,244,145, 17, 47,212, 58,178, 40,255,227, 56, 49,116, 61,113,136,152,168,113, 8, 24, 67,197, 76, 26, - 34,131,146,221,153, 49,229,101, 72, 65,108,129,211,200, 52,141, 66, 67,203,143,190,246, 35, 58,249, 4,148, 72,114,136, 25,235, -177,190,193,213, 51,124, 51,195,249, 26,223,120,148,175, 30, 47,168, 37,154, 88,149, 32, 28,175,207,118,249,103, 5,253, 24, 9, -167,207,248,206, 89,113,134,139,148,177,255,169, 32,156, 68, 86, 71,187,121,146,235, 77,161,145,157,162,140,243,177,235, 79,146, - 47,159, 21, 97, 18,112, 81,213, 52, 84, 77,203, 98,117,197,176, 95,211,239, 55, 40,231,233,198,137,218, 72,240, 79,119,232,145, -235,132, 92, 66,181, 86,140, 49,158,173, 97, 20, 83, 12,132, 50, 53, 48, 73,172, 54,117, 93, 99,171,186, 64, 59,100, 20,217,212, - 13, 47, 95,127, 69,221,214,132, 40,192,144, 97,154,112, 78, 51, 77,147,140,141,199, 17, 3,180,117,203, 56, 76, 24, 37, 66,178, - 48, 5, 86,173,197,164, 32, 5,171,220,241,134, 41,242,252,197, 13,111,111,223,162,180,225,176,239, 73,104, 46,111, 4,167,106, - 28,162, 24,111, 18,217,142,132, 96,168, 47,230,120,231,128,140,247,226, 23,174,154, 86, 80,196, 26,246,219, 61,139,197, 66, 16, -156, 65,160, 53,151,179,150,118,185,164, 93,173,184,184,186,196, 21, 5,123,214,134,166,174, 69,255,129,162, 93, 44,104,102,237, - 35, 76, 89,105, 25, 89,159,194, 56,244,233, 53, 69, 41,129, 3, 21, 13, 70, 46, 17,196, 39,177,153,147, 46, 61,171, 82, 0,147, -198,183, 21,179, 69,139, 11,150,166,109,200,106, 96,202, 89,198,253,109, 75,181,175,233,199, 94, 58,251, 36,235,143, 97, 28, 36, -188, 36,101,140,243, 36, 14, 5,241,155,137,125,135,177,150,202, 90,156,150,156, 8, 63,159,163,196,155, 74,223,119,242, 99,215, - 49, 12, 3,227, 20, 25,166,137,160, 52, 83, 12,162,159, 73,114,249,212,249,209,186,246, 29,227,231,241, 61,201, 9,101,142, 57, -106, 85,143,186, 22, 45,193, 77, 58, 7,130,202, 16,229, 50,127, 12, 67, 73,249, 88,212,193,230, 76,223, 71,134,112, 96,187, 31, -121, 88,247,220,190,219,240,209,213,156,235,103, 23, 92, 95, 95,176,184, 90,210,172,150,248,249, 28, 63,155, 97,188, 18,142,124, -137, 87, 70, 25,193,207,218, 4,118, 0,103,168,173,196, 49, 87,174,146,248, 87, 93,236,193, 1,246, 12,210,177, 15, 35,195, 24, - 24, 67, 58, 57,144,142,123,110,253,132, 3, 33, 95,183, 49,226,252, 73,112,242,173, 79,163,184,164,140, 22,209,109, 24, 35, 99, - 63, 82, 53, 53, 85, 35, 24,108,227, 29, 88,119, 34,112,254,166, 70,219,190,239,249,126, 42, 58,251,176, 7,247,145,141,157, 63, -188, 96, 87,156, 14, 27,242,119,119,232,167, 59,219,185, 67,173,136,126, 84, 81, 63,234,227, 45, 78,149, 65,239,169, 88,139, 61, -226,137,197,238,252, 55,202, 74,252, 32, 90,161,173, 67, 37, 69,232, 3, 49, 79,220,190,123,205,127,250, 95,252, 23,188,125,251, - 47, 97,115,102, 58,244, 28, 54, 59,190,250,226, 27,110,223,221,130,134, 31,254,224,115,254,229,213, 51,116,179, 98, 72,150,251, - 77,207,221,118,207, 31,253,195, 63, 65,161,248,104,117,129,241,142, 24, 38,246, 93, 87,176,151, 51, 30, 30,238,240,181,227,122, -182, 96,223, 5, 22,141,167,219,239, 80, 73,211, 79,154,251, 77,143,173, 86,216,170, 70,119,182,236, 99, 31,133, 33,167,215,160, -124,135,174,175,175, 25,199,145,166,109, 88,111, 54,229,128,147, 76,233, 69,187,160,239,123,134, 49,240,118,183, 69,145, 73,106, - 71, 91,213, 34, 0, 60,116,220, 3, 55, 23, 75, 46, 46, 46, 81,198, 48,132, 3,125, 63, 50, 13, 19,251,205,158,109,183,103,215, -239, 25,199,137,126, 72, 68, 28, 33,102, 12,153,103,115,141, 63,162, 30,181, 65, 41,139,201,148, 61,185, 45,152,209,116, 38, 82, -204,103, 40,214,116,210, 18,228,116,156, 8,164, 71,143,120, 25, 7,198,148,153, 66, 70,143, 8,205,143,200, 52, 14, 18,202, 49, -155, 81, 85, 13,198, 10,110,241, 56, 71,214,194,143, 58,185, 37, 36,112,200, 98,172, 71, 57,125, 74,249, 75,177, 8,244, 98,102, - 12, 73, 46, 46, 99, 98, 10,145, 49,106, 66,178, 48,100, 14,227, 30,181, 57,148,149, 69, 40, 22,149,145, 24, 38,194,208, 51, 77, - 35,161, 16,217,148,214, 82,184,157,195,215, 13,222,215, 88,235,208,166, 66, 59,143,211, 22,173, 43,178,171, 49,245,140,170,157, - 11, 72,164,246,103,129, 72,103,142,142, 82, 4, 31, 73,119,103,126,123, 85,196,134,250, 28, 93,171,206, 98, 23, 31,157, 12,223, - 9,113,201,197,154,247,157,199, 54,191, 55, 9,147,139,137,177,150,228, 16,229,109,101,112,125,131, 54,137,235,203, 21,239, 94, -191, 36,197, 36,227,240, 33, 34,218,202,132, 50,114,137, 74, 26, 82,200, 56, 5,214, 36,161,190, 77, 34, 94,115, 90,131, 19,161, - 25, 26,150,173, 8, 58,135, 41,176, 90,174,216,236,118, 56,171, 24,251, 61,171, 69, 11, 41, 49, 14, 9, 99, 5, 61,171,181, 38, - 78,129,229,108,134, 51,154,135,125, 71, 93,121,166, 41, 81,251, 50, 33, 82, 90,224, 49,149, 38,231,196,103,159, 95, 48,165, 1, -109,225, 97,115,160, 27, 21,151,215, 23,236,199, 3, 67,140,248,185, 67, 57, 77, 61,243, 12, 83,160,157,173,240, 77, 69,138, 1, -107, 13, 41, 76, 66, 98,116,142,172, 50,227, 20,184,188,190, 34, 3, 85, 85, 83, 85, 53,202,104,218,102,198,197,213, 21,237,114, - 33, 99, 91,107,201, 90,163,173, 16,203, 22,139, 5,181,175,201,136, 67,196,121, 47,212, 67,165, 72, 73, 52, 14, 42, 27,217,167, - 31, 29, 23, 74,203,120, 37,107,114, 18,129,150, 46,171,165, 35, 80,200,228, 36,197, 93,203,175, 85,214, 48, 95,173, 8,219,158, -171,155, 21,211,235,183,212, 81, 49,141,138,122,190, 64, 63,220,163, 67,196,104,136,113, 34, 17, 73, 68,148, 81,244, 7,193,218, -122, 95,139,226, 59,139, 88,118,134, 37,103, 77,229, 61,157,222,201, 68,134,204,118, 63, 96,172,167,114, 30, 82, 34,133, 76,194, - 16,181,101,204,137,196, 35, 8,229,152, 13,206, 19,123,245,177,190, 28, 39, 81, 39, 4, 84, 17,206, 30,155,130,199,180, 71, 82, - 38,100,205,168, 34, 86, 37, 70, 18,228,120, 42, 66, 18, 22, 35,147,174, 64, 22,173,208, 20,232,167, 29,219, 93,207,250, 97,205, -229,221,134,155,103, 91,174,111, 86, 92, 92, 45,139, 32,119, 65,189,236,113, 77,131,170, 42, 84, 85, 9,142, 87, 91, 20,146,218, -166,140, 33,153, 10,109, 42,162,237,197, 86,235, 53,182, 82, 24,175,209, 42, 16,167,137, 97, 63,209,199,200,148, 50,125, 12,101, - 2, 81,206, 43, 45, 66,204,227, 74, 82,104,112, 5,204,100, 68, 16,125,252,190,196, 50, 69,213, 58, 20, 59, 95,192,245, 61,126, -239,240,181, 36,165,154, 83, 4,186, 32,114,209,246, 76, 75, 84, 84, 7,239,143,223,127,243,136, 61, 63,201, 62,127,162, 14,250, - 13,200, 88,222, 75,131,122, 28,189,168,247,236, 71,249, 24, 91,123,178,243, 60, 46, 12,211,249,223,130,247, 51, 37, 5, 30, 82, - 66,105, 78, 94,199,140, 49,142, 41,137,224,234,225,238, 22,215, 40,246, 63,251,130, 47,127,254, 21, 94,107,102,149,167,114,142, -105,234,249,248,251,159,210,247,151,252,206, 15,127,196,205, 71, 31,179,235, 3,127,242,147, 47,249,230,213,175,248,111,254,244, - 39,164,168,184, 92, 45,200,198,138, 47,157,204,172,170, 33,101,246,135,142,136,166,106,150, 52,179, 21,149,179, 92, 94, 92, 48, -142,153,168, 3, 93,114, 28,214,123, 62,251,221, 21,127,254,139, 95,208, 13, 29,104, 87,114,230,243, 73,224, 37, 55, 57,195,126, -187,163,109, 91,110,174,175,113, 86, 19,134,145,171,203, 75,188,177,164, 24, 89,239,118, 52,179,150,119,247,107,190,126,249, 82, - 50,147,187, 81,196,103, 70, 60,189, 99,129, 37,212,117,131, 82,138,170,169,241,117,203, 55, 95,126,205,161,235,232,135,129,190, -239, 9, 99, 32, 4,141,242, 53,109,227, 89,182,150, 54,239,177, 89, 22, 2,199,194,115,178,219,144, 30, 69,111,167, 14, 86,161, - 84,122, 50, 37,137, 49, 49, 77, 81,108,111, 65,120,242, 33,196,194, 28, 59,138, 77, 18,132, 72, 30, 36,202,177, 31, 38,170,250, - 64,181,217,157, 18, 2,181, 54, 98,147, 43,205,172, 68,126, 58, 73,164,115,146,107,108,156,112,223,115, 73, 65, 18, 12,165, 22, - 1, 79, 70, 86, 14, 73,186,251,132, 33, 25, 91,222,111, 73, 18,238, 66, 18,168,198, 52, 49, 77, 3,227,208, 51,246, 61, 97, 26, - 5,109,153,133, 93,110, 93,198, 85,138, 88, 80,148, 24,135,181, 53,174,110,241, 77,131,159, 45,168,102,115,252,124,142,107,103, -216,186,194, 86, 78,104, 91,165, 59,123,100,206,171,211,101,229,187, 89, 9,199, 60,231,223,198,108,250,248,223,213,111,157,165, -240, 20,247,172,109,233,244,141, 35,233,136,217,193,230,238, 29,235,183,111, 88,181,154,202, 43, 54,219, 32,193, 23, 57, 32,185, - 86, 89,198,141, 41, 83, 89,168,140, 34,134, 64,142, 48,107,164, 51,116,149,197, 84,114,196,212,222,241,250,245,107, 89, 23,105, -195, 97,187,151,244,196, 49, 96, 84, 36,198, 64, 12,137,102, 86,147, 74, 68,159, 34,211,120, 75,136, 17,107, 69,132, 57,141, 35, -243,202, 18,250,137,166, 49,120,109,176, 86, 46,113,207,158,173,120,243,238, 13,219,125,207, 56,101,180,174, 1,195,219,183, 29, - 87, 47, 42,146,137,248,198,147,181,163,153,205,105,155, 57,253, 56, 98,140,116,100,166,110, 37,109,203,200, 52,102,113,121, 37, -120, 86,239,176, 5,176,210, 52,173,160,154,173, 37,102,240,133,239,237,189,199,215,197,123,110, 45, 9,129,159, 24, 35,232,207, - 92, 86, 55,170,112, 26, 82, 86,160, 37, 96, 73, 29, 93, 30, 50,202, 2,101, 48,254, 72,252, 75,232,156,138,231, 59, 31,125,154, -242, 60, 24, 67, 61,159, 17,209, 44, 46, 22,172, 55,107,212,152, 9,221,128,241, 21,205,124,197, 20, 18,134,196,152, 70,114,204, - 39,146,224, 20, 3,187,221,158,203,213,101,209,248,104,172,241,140, 65,166, 44,214, 88, 97,186, 3,201, 56,121,248,178,156,206, -182, 76,136,178,210,100,163, 37,191, 92,235,147, 64,244,253,243,255, 88, 42,206, 27, 71,117,102,177, 61, 50,204,181, 86, 56, 99, - 48,165,240,101, 50, 54, 41,180, 14, 76, 83, 20,138,212,227, 21,129,233, 92,184,202,145,120,169, 68,172, 22, 34,195, 52,176,233, - 71, 30,246, 29,183,235, 13,207, 30, 86, 60,187,190,224,234,234,192,178, 27,104, 23,115,220,188,193, 52,179,178,115,175,201,202, -150,137,154, 67,169, 18, 44, 85,206, 24, 83, 25, 76,101,241,109, 69, 93, 75,247,158,163, 92,220,186,253, 72, 74, 19,100, 45, 83, - 44, 99, 48, 90, 97,205,113,146, 41,144, 31,171, 13, 86,139,125,216,187, 18, 12,227,164,240,103, 10, 62, 54, 66, 26,132, 7, 50, - 14, 61,182,151,215,194,121, 65,126, 59, 95,225, 42,217,249,203,104,222,114, 30,252, 97,127,123, 63,249,121, 81,207, 39,207,207, -249,158,238,183, 87,172, 75,154, 90, 42,108,142, 84, 96, 27, 89, 29,243,214, 31,143,174,124,102, 25,206, 69, 72,161,143, 23,137, -247, 83,195,212,113,187, 42, 59, 78,111, 29,218,195, 98, 57,231,221, 14,222,188,188,163,106, 87,116,251, 29,155,251, 59,172,201, -124,250,233, 11, 62,253,252, 99,254,218, 31,252, 30,207, 47,111,120,254,252, 35,190,248,250, 27,190,252,250, 27,254,248, 31,253, - 19,254,232, 31,255, 5,206,205,184,122,126,205,205,213, 5,222, 42, 82,204,204,154, 57, 77, 85, 67,204,194,233,245, 53, 90,103, -198,110,135,110, 22,236, 15,123, 46, 63,250,132,215, 95,189,225,143,255,201,207,153, 45, 86, 44,191,254,150,207, 63,255,132,255, -199,255,231,255,205,126, 28, 74,198,121, 1, 77, 40, 17,186, 12, 67,207,253,254, 64,237, 60, 87,151,151,204,234, 25,139,186,197, -150,110,111, 24, 70,134, 24,248,230,203, 47, 24,167,192,122,187,165, 31, 60, 15,235,123, 62,125,241, 17,151,171,229, 73,164,145, -147,168,237, 93,211,144, 80,204,151, 11,126,240,187, 63,226,213, 55, 47, 9,111,223, 97,171,186,236,201, 29, 19,134,105,236,201, -169, 39,196,158, 41, 74, 24, 3, 49, 22, 49,207,211,139,213, 49, 3, 24,192, 20, 69,250,113, 95,156,144,221, 80,136, 71,234,146, - 20,246, 35,113, 78,149, 46, 53, 36,152, 98, 96, 8,153,205,126, 40,153,236, 50,130,211,199,215,250, 24, 45,104,205, 9,173,217, -214, 13,243,118, 70,211, 54, 84, 77, 83,148,211,134, 99,107,155,179, 18,239,188,156,124,114,171, 77, 71,251,144,124, 94, 78, 17, - 98, 36,197, 64, 86, 26,131, 38,161,203,126, 47,145, 77, 20, 75, 92, 42, 16,141, 36,175,123,158, 18,202, 70,180, 75, 18, 22,133, - 70, 59,135,173, 27,124,219, 82,181, 45,190,110,177, 85,141,245, 14,231,205, 73, 64,120,234,176, 79,169, 76,234, 47, 41,188,255, -188,249,180,143,107, 5,101,132, 45,174, 66,192, 58,248,249, 79,255, 28,198,145,103, 23, 13,251,221, 1,180, 92,167, 77, 86,167, -110, 42, 20, 54,134,181,130,213,204, 33,137, 77,236,116, 0, 57, 98, 76, 52, 77, 75,215, 13,140, 83, 96,117,177, 36,198,162, 89, - 32,227,156, 35,165, 36,152,216,110,143,209,150, 48, 13,104,148,232, 75,128,113, 28,168,139, 71, 93,229, 68,206, 26,231, 4, 69, -106, 43, 67,206,145,155,235, 5, 67, 63, 50, 14,145, 20, 50,235, 53,124,244,201,156, 47,126,249,142,122,102, 57, 28, 38,108,171, - 24,119, 7,230,171, 37, 77,229, 25,131,132,158, 92, 92, 92,144, 82,164,242, 94,236,120, 33, 80,249,178, 98,243, 14, 99, 28,117, - 41,216,206, 57,148,210,226, 93, 47,185, 3,199,124,133,170,174,203,191,151, 5,133,150,213, 81, 58,166, 23,157,177, 55,142, 78, -136,227, 78,247,216,218, 37,162, 68, 3,235,199,177,117,202,229, 70, 43, 54,134,211, 5, 65,103,104,218, 25,221, 16,152, 45,151, -180,243, 57,170,151, 2,120,216,237,229,217,232, 58,226, 52, 8,204,103, 26,113, 78,188,219, 26, 67,136, 9,231,235,178,166,177, - 24,227,136,217, 8,191, 95,137,144, 51,134,204,106,113, 73,183, 89, 51, 37, 48, 49,209,214,254,177, 41,211,250, 20, 26,244,235, - 38,190,231,221,250,241,178,250,168,233,207,104, 35,201,104,198,104,121, 47, 89, 93,180, 57, 18,149,173, 77, 89, 81,105,117, 2, -139,101, 2, 58,138, 32,237,172, 28, 65, 22,161,102,138,114, 63,234, 67,164,155, 2,251,174,103,183, 59,176, 94,239,121,182, 57, -112,125,232,185,184, 88,178, 92, 45,152, 45, 70,114,219, 98,218, 17,124, 37, 99,120,229,100,205, 81,244, 49, 89, 75,103, 92,107, -143,178, 53,198,206,176,190,198,121, 75, 53, 51, 84,111,225,118,157, 24,198, 12,148,117,164,149,203,161,181, 22,109,164,107,247, - 90,227, 74, 28,113, 85, 57,156, 51,184, 18, 9,109, 77, 73, 72, 45,223,195,116, 20, 31, 78,145, 73, 79, 40, 59, 98,237,128,243, - 61,149,247, 56,239,241,149,116,239, 56,115,154, 6,217,223,182,160,127,183, 83, 56,138,209,206,148,200,252,186,204,202,243,223, -163,120,119,143,222,220,179,157, 75,254,144, 95, 78,229, 83,118,243, 81, 20,165,201,167, 17,255,249, 67,162,149, 18,251, 13,165, -139, 50,150,102,233,113,233,192,243,213, 31,240,227, 31,255, 5, 95,252,236,151,180, 77, 37,209,128,206,114,183, 57, 80,109,122, -214, 93, 70,177,231,239,253,131,255,152,175, 95,189,225,175,255,237,127,147,159,255,234, 91, 72,153,103,207,158,243,209,243,103, - 16, 69, 84,166, 17,114,221, 56, 69,188,245, 52,237,156,136,194,234, 76,235, 20,179,198,151,212,181, 5,147,219,241,243,175,191, -229,147, 79, 52,247,155, 29,207,167,204,183, 47, 95,151,125,218,163,127, 57,103, 24,198,129,251,117,192,105,203, 20, 38,241,194, -214, 13, 6, 24,199,145,168, 53,223,188,122,137,114,134, 77,183,231,208,143, 44, 22, 75, 41, 80, 41,145,141, 38, 42, 24, 66, 96, -225,101,159, 94, 57, 47, 95,171,214,108,183, 91,170,186, 97,117,125, 77,159,196,115, 58,141, 35, 33, 27, 98,144, 67,214,234, 72, - 42,120, 90, 78, 42,239,163, 85, 90,124,163, 71, 91, 21,231, 22,150, 34,190,202,197,151, 46, 10,242, 2, 84, 43,220,227,148,206, -112, 67, 42,158,198,192, 74,105, 33,162,157,198,117,143,183,121, 99,164, 51,175, 43, 25, 99, 55,181,193, 26, 87, 68, 75,141, 36, - 91, 85, 30,172,125, 36,186,149, 78,125, 76,144,148, 38,102, 41,216,249,104, 67,201, 98,233,202, 41,144,226,132, 14, 19,152,137, -172, 29, 89, 25,166,148, 81, 5, 88, 67, 86,104, 83,246,132,198,130,245,167,124,247, 92,196, 78,169,248,222, 93, 85,137,150,161, -146, 28,108,235, 75,215, 97,212,147,247,255, 83,150,237,211, 9,250,191,248,128, 25,121, 14,117, 73, 54, 75,121,228,205,155,111, -216,220,191,101, 53,179,168, 2, 31,194,136, 16, 83, 23,223, 67,206,130, 8, 54,186,164,178,105,195,148, 35,109,107,209, 26,234, -202, 23, 59, 95,102,185, 88,242,197,175,190, 98,190, 88, 96,172,101,191,223, 10,175, 58, 38,230, 51, 79, 12, 29, 65,105,225, 29, -164, 84, 86, 57,138,186,169,152,134, 94,162, 63,135,137, 56, 77,180,181, 37,199,136,247,162,201, 72, 10,156, 86, 60,191,185,225, -205,187,215,196,168,216,238, 50, 55,207, 46,216, 29,166,211, 8, 56, 37,216,237, 35,186,206,164,237, 22,227, 28,179,197,138,249, -108, 37, 66,192,170, 46,209,149,153,166, 17,108,108,211,204,228, 32, 46, 7,168,181, 30,173,181,116, 73, 70, 99,180, 48,190,125, -121,221, 85,113,105,196,148,176,214,160, 74,140,103,228, 49,209, 48,147, 37,171,254,184,111, 61,254,247,148, 78,186,136,168,197, -235,159,145,177,180, 62, 77, 98,202, 88, 27,133,210,101, 93,105, 52,198, 91,150, 23, 75,154, 89,131,113,226,162, 24,250, 1,109, - 69,141,127,216, 39, 2, 82,228,156,213,210,232, 27,139,115, 53,253, 48,225, 92,197, 48, 70,230,243,101,201, 45, 87,120,111,113, -190,166, 15,137,166, 94,114,216,236, 8, 41, 11,159, 2, 45,107,173, 41, 23,125, 0,167, 60,143,239, 22,116,197,147, 80,223,227, -186,238,116, 14,156, 69,126, 27,117, 42,238,206, 22,247, 72, 44,123,118,173, 65, 77,197, 58, 38,162,180, 40,248, 83,146, 74,101, -154,251, 24,189,157,148,240, 19,166, 8,105,200, 76, 97,160, 31, 34,219,253,196,110, 63,177,217,239,121,118,181,226,249,213, 5, -113,181,160, 93,205,241,171, 57,106,214,160,171, 22,237,206,196,132, 50,202,194,104,137,125, 85,214, 11,177,206, 41,234,218,176, - 88,213, 92, 94,206,121,253,250,142,187,251, 3,135, 94, 80,186,198,185,194,119,183, 39, 22,188,215, 74,194, 95, 42, 79,221, 84, -212,149, 76, 29,101, 58, 36, 76,121, 82, 62,229,215,167,152,144,254, 35, 19, 99, 96, 28, 3,186, 31,232, 75,167, 95,215, 21,222, -123,112,246, 4,173,177,223, 69, 96,158,117, 19,234,124,236,158,158,198,105,170,116, 26,131,156, 18, 51,142,197, 61,231, 39,133, -252, 40,136,200, 80,108, 47,138,104, 10,240,191,252,114, 99, 52, 57,155,178,191,148,177, 94,176,146, 15,171,138,234,249,168, 6, -214,103, 5,253,120, 46, 30,129, 39, 70, 37, 18, 22, 95, 45,105,170,138, 79, 62,186, 97,186,172, 88, 53,134,155,171, 37,127,247, -239,254,103,220,222,221,163,181,101, 12,150, 55,247, 29,191,122,219,241,159,255, 87, 63,102,102, 52, 47, 62,190,230,111,253, 79, -254, 13,126,242,211, 95,242,240,176, 97,214,180, 92, 45, 23,120, 45, 73, 76, 70,105,250,126, 36, 12,145,166,105, 48,141,101,152, - 70, 22,139, 21,211,112, 16, 81,144,147,206,224,255,249, 31,253,199,252,206,223,252,183,249,215,254,181,191,205,127,245,247,254, - 62,191,243,233,231,252,141,127,229, 15, 33,100, 76, 22,162, 89, 42, 55,241, 99,125,143, 49, 67, 73,240,121,249,230, 45,222, 88, - 42,231, 8, 33,176,222,108, 88, 94, 92, 50,164,128,237,123, 98,215,211,245, 61,214, 24,230,109,195, 20, 2,253, 56, 50,107, 26, - 9,109, 81,138,118, 46, 97, 46,125, 8,244,125,199,254,208,227, 92, 5, 40,140, 17,240, 74, 12,137,148, 3,228, 72, 24,247, 12, -155,123,116,232, 78,150, 20, 9,111, 17,159,105,140,169, 20,239,116,218,137,105,253, 56,246,149,231, 44,159, 68, 19,234,124, 87, -140, 18,177,157,210,101,212,116,116,131,229, 39,214,173,163, 69,204, 20,241, 80,204,226,179,150,113,175,116,223,170,116, 68,222, -123, 81, 22,123, 71, 66,162, 24,115,210, 68, 25,253,200,222, 15, 69,196, 74,254,178,182,167, 72,197, 99, 81, 79, 49,226, 66,100, - 28, 7,209, 59, 40, 77, 86,197,246, 18,166,211,197, 75, 44, 40, 14, 99, 93, 1,134,192, 52, 77,146, 24, 86,213,212,227, 36, 34, -172,226,205, 55,101, 21,112,220, 37,158,180, 38,164, 15,203, 71,127,203,130,254, 62, 26,249, 47,115,166,124,104,138,246,212,169, -146, 36,176, 39, 4, 14,155,123,246,155, 59, 94,125,251, 53, 23,171, 5,253,237, 22,239, 61,241, 48, 65, 78,130, 98,141,153,108, - 32,134,128,245, 18, 91, 25, 67,128, 12,214,105,170,202,151,181, 5,120, 95,159,118,247,198, 74, 40, 70,136, 9,107, 28,135,126, -196, 59, 77, 23, 68, 96, 7,210,213, 76,253, 68, 51,111,164, 3,204, 50,233, 81, 37,150,213,212, 86, 46,150, 73,196,141,198,105, - 9, 91, 9, 3,195,152,233,250,196, 24, 29,207, 23, 51,190,252,241,183,204,151,150,160, 96,156, 18, 81,103, 24, 0, 19,121,119, -119, 71, 72,153, 16, 34,243,249,130,144, 20,214, 86, 52, 85, 35,116, 47, 99,112, 70,203, 46,211,138,128, 78, 41,133,171, 60,206, -122,172, 19, 17,167, 41, 93, 86,202, 2,136, 49,214,161,141, 40,153,209,134,120, 54,225, 60, 22, 50, 73, 21,147, 6, 89,198,116, -185,100,110, 39,116, 73, 8,203,101,237,149,117,126,212, 31, 29, 9,138,229,121, 32, 79, 24, 35,153,240,104,205,114, 53,103,183, -239, 81,122,193,208,247, 60,172, 31, 48,222,162, 6, 25,209,134,225, 64,202,142,113,156,112,174,102, 10, 17,107, 45, 99,202,120, - 91,203,106, 42, 36,154,118,134,178,136, 16,119,236,113,190, 38, 99,137, 89, 19,147, 38,161, 8, 57,113, 24, 70,185,216,158, 39, - 4, 62, 9,238, 82, 69, 84, 90, 46,197, 8,116, 42, 69,177, 84,230,156,158, 92,100, 85,209,146,156,156, 31, 90,227, 84, 70, 23, -113,108, 76,154,152, 20, 46,105, 82, 82,114,126, 28,127,143, 19,163, 66,115, 50,134,150, 95, 55, 68,161,191,197, 24, 25,166,142, -174,143,172,119, 27,182, 15, 59,246,119, 91,186,231, 23,172,246, 75,102,253,146,106, 53,199,207, 35,182,206, 66,166,115, 78, 60, -238, 69, 52,172, 16,135, 79,109, 52,182,210, 84,141,167, 93,180, 92, 92, 92,114,115,125,205,235, 55,107,238,238, 55,108,247, 59, -166, 16, 1, 45,239,159,178, 78,244,101,244,222,212,158, 89, 91, 75,226, 94,209,221, 24, 43,235,150, 24,196,249, 49, 13, 35,227, - 16,152,198,145,169, 20,120,225, 69,100,162,134, 73, 43,134,174,147,201,144,145,162,110,140, 8, 89,127,253,216,252,204,151,203, - 19,241,205, 35, 20,225, 28,231,122,174,246,123, 28, 55,126,216, 50,103, 98, 38,152, 72,138,194, 75, 15, 70, 17,140,194, 25, 57, - 92,114,130,144,116, 65,143,230,167,163,171,247, 72,114,231,187, 72,173, 53,153,154,217,108,197,124,182,228,250,114,193,226, 69, -131, 9, 3,159, 60, 91, 49,141, 59,126,252,227,159, 72,108,159,157,241, 15,255,241,207, 25,186,200,197,213, 51,190,247,217, 53, - 23,151, 23,220,109,246,252,221,255,236,191,100,222, 84, 92, 46,151,248, 52, 96,146,198, 16, 25,135,129,202,213,146, 78, 22, 2, - 83, 12,248,156,216,239,215,212,117,197,252, 98, 37,221,131,175,248,179, 63,251,199,116,120,254,230,191,254,111,242,159,254,255, -254,191,252,249,159,253, 41,255,187,255,245,191,143,138, 96,148, 41, 33, 18,234, 4, 47, 80,101,164,149, 65, 44, 34,105,228,219, - 87,175,184, 88,173,136,177,216, 70,194,196,221,250,129,113, 28, 49, 86,130, 6,130,209, 52,149,231,112,232,136, 33, 72,156,162, -179,108,246,123,222,222,222,146,141,225,242,230, 25, 97,220,209,143, 35,118,233,169,155,134,221, 86,128, 52, 99,140, 37,223, 92, -209,237,119, 28,214,107,244,217, 37,238, 20,133,124,150,176, 20,211, 25,230,247,113,186,248,104,227, 56,170, 61, 75,206,239,227, -251, 68,118,122,185,172, 80,100, 13,119, 76,113, 43,175,117,105,102,163,202,152,242,123,135,148, 9, 83, 98, 42,159,163,148,140, -155, 76, 9, 97,176, 85, 37, 15,122,185,213,234,178,219, 18, 7,181,193,106,143,113, 94,240,145,104, 66,152,164,168, 7, 75,140, - 9, 29,166, 83,167,164,138,197,197, 90,203, 56,141,196, 56,149, 21,207, 99, 72, 3, 64,138,161, 92,118,228, 98,112,204,147,215, - 74, 9,119,218, 40,162,126, 76, 54, 60,250,237, 69,235,251, 47,182, 37,255,117,235,177,156,147,136,150,138,253,115, 58,236,249, -241,159,252, 9,222, 91,236,229,146,212,223,210,119,129, 48, 69,154, 99,215, 88, 82,161,142,151,116,163, 76, 65,166, 74,236,173, - 49,146,178,134, 50, 92, 92, 8,170,181,242, 53, 9, 77, 55,244,116, 99, 96, 53,175,177, 90,113,216,247,180,141,227,205,250, 32, -140,243, 8,222, 90,185, 60, 31, 58,234,198,209,239, 7,180, 50, 88, 45,171, 55,109,149,100, 95,123,131,107, 44,237,188,230,245, -219, 59,172,175,120,251,245,129,143, 62,187,224,103,191,122,197,197, 71,158, 41, 70,250, 16, 81, 14,180, 21,175,246, 24, 19, 13, -134,183,239,222,137,190,164, 63,176, 92, 46,153, 42,137, 53,246,197, 57,131, 50, 2,153,138, 25,107,149,236, 85,141,125, 20, 51, -150, 92,107,153,226,232,242,255,165,144,107,109, 10,187, 63, 63,198, 4,228,140, 53, 6, 91,132,110, 41, 70, 65,132, 30, 19,184, -120,108, 80,142,246, 92, 74, 7,127,196, 14,107, 10, 8, 72, 41,114, 12,164, 28,112,222, 50, 29, 14,204,151, 45, 57, 37,106,231, -232,119, 45, 15,109,205,195, 93,135,179,101,156,159,164, 97, 72, 49, 98,181, 37,134, 72,200, 9,231, 13, 83,136,180,182, 98, 24, - 14, 24,111, 73,121,164,170, 42, 76, 47, 20, 65,249,147, 13,169, 40,249,181, 22,193,222, 20,199, 39,146,205, 39, 57, 28,229,125, -127,180, 90,230,130, 58, 62,143, 61, 20,171,215,177,185, 59,179,130,161,229, 25,215,242, 61,176,134,242,236, 37,140, 73,104, 45, - 63,198, 36, 19,140, 99, 17,231, 60,150,225,220,222, 90, 4,186, 99, 84,244, 33,209, 13, 18,106,181,126,216,114,191,221,242,236, - 97,197,205,238,154,229, 85,207,124, 53,209, 44, 6,170,249, 12,221,212, 40, 87,161,109,133,210, 14,237, 12,201,120,146, 81, 37, -210,181,197, 86, 51,170, 89,207,108,117,193,234,102,199,250,126,195,221,221, 61, 15,235, 45,251, 67, 79, 78,178, 30, 84, 74,236, -188, 78,131,209,242, 30,179,206,200,170,170,146,117,142, 42, 94,246,106,154, 24,251,129,225,208, 51, 12, 26, 61,140,228, 49, 22, -128, 88, 36,132, 2,131,210,234,244,163,214, 50,246,183,231, 33, 21, 71,187,206,241,195, 88,131, 61,125, 28,227, 26,159,114,217, -229,245,210,143,105, 49,167, 23,245,233,216,254, 59, 56, 59,185, 23,130, 74, 24,149, 37,152,163,124, 40, 43,157,186, 73,250, 20, -112,112,252,189,245,251, 25,178,156,199,105, 66, 80,153,202,181, 84,245, 12,239, 61, 57, 77, 44,103, 53, 85, 54,140,253,196,223, -254, 27,127,139,223,249,254, 15, 48,206,243,231, 63,253,130,215,183,107,148,157, 49,191,184,161, 27,122,254,225, 63,254,115,238, -238,238, 24,186,129,203,229,140,153,215,212,106,194, 41, 39,144,138, 44, 48, 25,107,133,181,238,156,197,121,137,131,108,231, 45, -182,110,169, 42,195,253,183, 95, 19,187,142,175,254,226,207,120, 88, 63,128, 10,220, 62,220, 50,165, 9,156,193,214, 21,169,123, -244, 40, 63,170,223,143,135,165,188, 65, 23, 23, 43, 80,154,135,187, 59, 86, 23, 43, 54,219,173, 48,170,157, 99,225,107,134,110, -196, 26, 77, 93,213,144, 18,109,211,160,179,236,150,199, 20,137,100,246,135, 3,117,215, 19,166, 9,163, 45,219,205, 22,101, 29, - 99, 16, 92,231, 24, 69,104,146, 82, 98,236, 6,172, 49,197,242,148, 31,135, 48, 69,241,152, 83, 62,243, 95,158, 49,154,203, 98, -228,216,181, 31, 49,184, 90,149,189, 82, 41,238, 24, 73,102,202, 89,114,218, 99, 82, 66,189,147, 28, 48,193,166,150,189,123, 25, -108,151,101,153, 62,147, 75,234, 71,250, 20,103,157,129, 6, 93,224, 23,199, 9, 82,206,177,224, 90, 13, 42, 37,140,230, 9,160, - 38,151, 56,217, 99,230,179, 42, 7,180,247, 98,221, 19, 34,151, 46, 92,116,241,232,166, 50,141,144,124, 38, 69, 14,147,220,170, -199,137, 48,142,140,227,200,197, 52, 49, 91, 46, 72,185, 70, 41,137,197, 77,233,132,249,126,242,158,253,239,239,159, 92, 70,211, -194, 41,216, 31,118,220,189,122,205,237,203, 87,252,222,239,253, 46,191,216,191, 37, 25,205,254, 48,224,178,194,101,141, 46,223, -205, 88,112,187, 57,201, 78,125, 74,129,198, 91, 98, 12,248,170,149, 76,109, 35,196,192,237,182, 35, 3,135,195, 1,165, 36, 28, - 99,183, 59,176,156, 55, 12,253, 22, 84,195, 24, 34, 77, 85, 51, 78, 19, 55,171, 11, 14,219, 53,139,197,140,135,245, 22,231, 45, -251, 93, 47, 34, 54, 13,222, 26, 1, 8, 53, 22, 84, 98, 8, 19, 89,107,222,222,109,185,126, 49,103,219,237, 88, 92, 26,116, 5, -177,216, 24, 51, 50,170, 78, 41,158,198,152,206,106, 14,221,150,204, 68,140, 83,233, 42, 19,179,166, 37,198, 10,211, 46, 81, 37, - 58, 85, 91, 35, 88,229, 41, 20,123,165,125,236, 76,203,243, 17, 74,252,172,214, 26,101,159, 90,116,116,105, 70,244,153, 80, 82, - 29,173,136, 39,103,200,177, 50,154, 19,144,234, 56,185, 58,157,167, 89,124,206,228, 76, 24,123,210, 52,146, 67,160,239,247, 24, -157,208, 4, 81,198, 19,153,207, 26, 54,235, 7,198,105, 40,156, 4,233, 86,167,105,160, 93, 52, 60,236,239,217,108,215, 2,173, -169,171,178,179,215, 5,166,213,115,177,156,179,217,247, 84,117, 37,207,158,182,197, 50,154, 49, 89,152,255,233, 3,238,166,167, -245, 65,125,192,214,150, 31,201, 74,101,250,150,146,144,227,162,206,104, 93, 22,105,250,248,245,235,210,197,203, 25, 98,148,172, - 62, 68,127, 19,197,162,122,106, 64,206,116, 34,133, 49,155, 75,144, 20, 90, 23,189, 81, 36, 78,138, 33,140,236,199,137,221, 52, -177,237, 7,118,135,137,231,155,129,171,171,158,229,213,129,116,177,196,204, 27,204,108,134,173,103,226,116,177, 85, 97, 80,120, -148,246,100, 93,227, 76,139,170,122, 76,219, 80,207, 27,150,203,150,203,203, 5,235,245,150,205,122,199,102,189,165,239, 6,153, -194,158,133, 67,228, 20,202,164, 33,139,150,160,170,132,252, 8,228, 24,100, 95,238, 29,182,115,152,174,199,116, 3,251, 44, 99, -249, 97, 28, 9,233,236,251,158, 31,191,183, 54,149, 93,166,214,210, 85, 89,103,139,186,216,138, 15,219, 60,138, 22,142,137,105, -143, 83,239, 71, 8,199, 7,183,132, 79, 68,144,249, 73, 24,134, 42, 94,218,227,176,196,156, 57,210, 68,239, 84, 68, 17,197,143, -120, 20,229,233,147, 10,251, 3,160, 27, 37, 97, 46,109, 59, 43,177,163, 20,162, 90,199,139,229,140,219,183,239, 56,140,137,159, -253,252, 75,146, 49,252,249, 95,252,148,205,250, 22,101, 59,190,120,249,138,135,205, 65,118, 33,229,239, 53,246, 3,238, 82,163, -147, 60,244,227, 40, 30,238,156,160,169, 23, 50,234,112,114,248, 59, 47,170,222,132,101,121,253, 17,221, 48,162, 81,124,118,189, -228,205, 97, 3, 90,114,211,223,222,223,129, 49,184,186, 18,188,107, 8, 79, 86, 23, 90, 89,249,126, 22,181,116, 66,130, 44, 46, -174, 46, 25,199,145, 67, 39,169,105,149,246, 18,210, 48, 14, 52,243, 57,222,121,172,214, 52, 85, 77,140, 81, 66, 94,234,154,126, - 24,104,218, 57,175, 94,189,146, 96,139,146, 41,174, 98,241,195,106,133, 81, 26,157,164,227,218,231, 40, 9, 65,165, 76,171,227, - 43, 84,198,240, 74,231,114,219, 78,143,100,181, 83, 0,143, 62,113,176,101, 44, 47,239, 31,171,229, 61, 36, 33, 5,242,208,167, - 44,132, 40, 21, 51, 42,137,117, 39,196,146,229,173, 4, 18,121,124,175,201,133, 67,166, 3, 83,121, 67, 31,134, 30,187,183, 36, - 18,227, 52,226,187,170,196,134,138,149, 13,101,137,170,228, 44, 43, 75, 50, 25, 27, 19,218, 78, 5,199,153,201, 49, 16,130,216, -214, 68, 92, 19, 11,223,192,160, 11,140,198, 89,203, 56,106, 70, 53, 50,230,241,228, 67,205, 41, 18, 85,148, 41,132, 17, 97,222, - 52,142,244, 93, 71,223, 29,152,134,142, 24,158, 51,203,151,162,160,118, 34,194,226, 40, 6, 60, 30,108,127,101,188,210, 63,139, -139,192,211,231, 71,107,197,110,123, 32, 12, 35, 95,253,252,151,124,239,211,207, 88,249,204,159,253,215, 19, 49,149,247, 65,202, - 56,107, 48,186,192, 63, 98, 70,233,132,247,150,156, 35, 86,131,243, 48, 77,229, 61, 92,194,122,166, 16,232, 7,121,189,178,134, -113,236, 81, 90, 19, 66,143,175, 26,134, 78,209, 13, 3,222,138,176,213, 42,205, 52,141, 88,103, 36,132, 70, 69,200,150, 20, 50, -117, 43, 88, 82, 84, 46,182, 43, 71, 86,145, 97, 28, 81,206, 10,244,102,102, 57,236, 96,182,108,217,142, 61,190,105, 37, 81,204, - 57, 82,209,196,116,253,158,152, 2, 99, 25,225,135, 24,216, 29, 54, 24,109,177,247, 2, 64, 26,250, 17,176, 44, 22, 11, 66, 12, -152,104, 33, 71,172,119, 39, 18,156,236,255, 11,183,160, 96,125,143, 54,213,105, 12,197,247,110, 74, 30,186, 58, 77,172,114,206, -144,164,248,230,194, 76, 79,169,116,237,198, 64,193,140, 30, 93, 16,143,168,226,210,185,199, 40,174,141,174, 99, 60, 28,132,219, -191,219,145, 67,164,239,186,146,114, 54, 48, 77, 93, 33,194,237, 32, 4,226, 20,132,213,239, 38, 50,178, 74, 27,167,137, 74,105, -172, 57, 83,146, 43, 77,138,129,126,191, 21,142,186,209,162, 45,209, 22,165, 50, 49, 41,250, 41,208,245,195,169, 27,230,201,101, - 69,125, 39,117, 51,243,148, 89,126, 50, 97, 41, 93, 58,120, 8, 49,161, 85, 44,208, 36, 32, 42,225, 78, 41,133, 86, 70,214, 45, - 38,203,143, 58, 75,131,169,181,224,150, 79, 48, 27,117, 98, 53, 64, 58, 61, 98, 34,194, 46, 5, 62, 64, 84,134,160,100, 26,152, -213, 72,140, 91,166, 62, 50,236, 39,186,253,129,195, 97,203,197,208, 81,119,115,170,161,195,207, 70, 76, 45, 28, 10, 92, 35,147, - 94,227,208,120,208, 65,124,236,206, 66,229,100, 87, 62,159, 49, 91,205, 89,110,246,108,239, 55,108, 55, 59, 14,187, 3,227, 36, -194,227,170, 22,209,111,229,236,201,145,112,116, 75,104,173,192, 30, 93, 24, 71, 99, 68, 70,197,196, 52, 26, 6, 45,186,141, 97, -152,232,167, 73,166,131,165, 88,166,156,176,225,168,110, 70,194, 19,136, 17,109, 52, 58,137,204, 48,199, 92,118,164, 17,210, 49, -223, 85,127, 32,122,245, 67,148,155,115, 43,122,122,114, 38,165,146,160, 21,131,120, 50, 69, 8,112,228, 91,115, 26,151,156,223, -212,100,231,156,222,243,204,231,247, 50,165, 53,132, 64, 54, 61,235,135,129,126, 7,119, 38,240,174,185, 67,235,196,127,242,159, -255,125,254,155,127,244, 51,246,218,252,255,153,251,211,104, 93,211,244,190, 11,251,221,211, 51,188,195,222,251, 76, 53,117,117, - 85, 87,207,221, 86,183, 37, 89, 45,227,150, 49, 32, 12, 49, 96, 28,219, 64, 0,199, 96, 45, 49,153,149,176,178, 18, 2,193,100, - 49,100, 97, 12,100,241, 37, 31, 2, 49, 24, 72,156,196, 96, 67, 28, 2, 14, 88,198,150,108, 89,150, 37,203, 18,178,213,221,170, -174,174,170,238, 26, 78,157,121, 15,239,244, 12,247,148, 15,215,253,188,239,187,207,169,106,203,178,147,160, 94,123,213,169,210, - 57,251,236,253,238,231,189,175,251,186,174,255,255,247,231,244,180,165, 86, 53,235,205,200,249,110,164, 82, 6, 71,160, 49,153, -108, 53, 85,227,132,104,228, 28, 40,139,115,134, 24,183,128, 98,183,217,114,235,246, 11,144, 13, 49, 41,124, 31,113, 14,140, 94, -176, 60,125,137, 7, 79, 46, 49,214,113, 99,214, 50, 59, 59,229,157,247, 31, 19,208,220,189,127,159,197, 98, 73,221,131,186,243, - 28,247, 30,124, 80,138,137, 42,183,222,132,209,150,152, 5, 78,147, 67, 98,179,222,178, 88, 44, 4, 32,131,194, 26,135,209,226, -117,191,121,227, 6,179,166,161,157,181,248, 97, 96, 12,158,133,158, 75,218,154,113,244,187,129,116, 2, 67,161, 30,213,237,140, -172, 20,149,173,233,198, 13, 65,203,158, 78,251,145,208,111, 65,121,116,173,208,217,237,117, 11, 19,187,121, 74, 9, 75,105,186, - 93,171,103,110,232,186, 8, 22,167, 98, 97,237, 33, 83, 88,105,189,223,151,145,166,145,112, 46, 97, 5,106,175,183,200,165,160, -147,101, 92,234,115,166,243, 30,227, 29,166,247,104, 59, 8, 79,188, 20,210, 89, 87,203,229, 74,155,130,162, 5,148, 35,105, 41, -236, 89, 89,178, 25,177, 78, 24,239,106,178,228,164, 44,135,106, 10,101, 15, 16, 15, 42,255, 9,205,169, 20, 86, 24,157, 40, 45, - 69, 42,132, 32,224,136, 20, 37, 24, 39, 78, 94, 81,225,169,199,113, 36, 13, 35,113, 24,241, 62,144,111,221,166,158, 67,110,107, -185,220, 20,114,159, 62, 28, 67,135, 95, 29,101,199,230,239,106,107, 51,191,106, 24,212,193, 2, 42,111,225,232, 71,114, 31,217, - 62,185,194, 15, 3,159,249,226,231,249,206,183,190,129,173, 23,220, 58,185,195,246,222, 22, 69, 68, 91,209, 56,132, 44,241,168, - 49, 39,180, 1,223, 71, 42, 35,233, 46,203,249,140, 20, 36,158,181,109, 91,174,118, 27,162, 49,140, 62, 82,215, 14, 91, 89, 46, - 87, 87,180, 78, 16,198, 17, 24, 66,198, 36,197,233, 98, 6, 49, 18,194,200,172,169,184,186,184, 20,175, 47, 22,157,203, 68, 39, - 39,106, 99,112,214, 16,253,136,115,154, 74, 25, 30, 94,118,204, 78, 78,121,178, 90, 83,207,107,214,125, 32,185, 37,168,134,182, -170,177,149, 34,134,129,144, 6,102,149, 33, 36, 17,222,165,113, 44,207,117,160,239,197,246,165,163,102, 62, 95,146,213,165,140, -235,125,195, 60, 37, 78, 78, 78,246, 83,158, 9,138,164, 39,210, 90, 10,226, 85, 79, 22, 16, 69,126,142,144,114, 60,202,202, 53, - 68,163, 81, 57,200,202, 35,176, 15, 45, 82,170,116,110, 73,147,113,229, 34,157, 4,202,162, 21,196, 72, 14,129, 52,140,248, 93, - 71,191,222,176, 94,173, 24,250,158, 97,219,209,119,221,222,111,142,210,116,187, 13, 93,183, 22,141,204,238,146, 28, 18,190,243, -232,164, 72,117,198,135, 32,220, 5,229,104,173,149, 75,234,216, 81, 59, 75,162, 33,143, 25,103, 2,198, 52,132,208,163,140, 37, - 37, 97,127, 96,106,188,210,140, 64, 34, 21, 10,229, 65,228,122,208,216,148,153,217,241,148, 65, 77, 18,149,137,161, 41,157,127, -142, 81, 34,184,179, 20,115,241,140,103, 12, 7, 33,180, 20,116,153,214, 24,163, 48, 73, 23,240, 84, 66, 37, 85,154,255,137,119, - 82,198,250,234, 72, 29,207, 20,150, 36,207,110,206, 10, 21,100,237,219,107,184,234, 3, 81,239,232,136,108,195, 72,231, 19, 55, -122,207,162, 31,136,203, 1,183,156, 67, 28, 48,205, 9,166,106,201, 38,161, 76,133,209,142,108, 44, 90, 87, 36, 83,161,109,141, -171, 71,104, 91,204, 98, 78,115, 50,103,113,181,102,183, 94,211,109,122,134, 97,192, 40,141, 51, 96, 85, 70,229, 72,140, 30,227, - 21, 42,121, 74,204, 93,153,110, 39,225,226, 88, 77,101, 5,136, 51,106, 75,175, 52, 57, 38,226, 24,240, 94,166,136,211,153,100, - 83,140,130,159, 75,145,148, 53, 73,101,201, 74, 46,249,189, 49,150, 17,163,201,251, 93,206, 20,176, 33,183,200,103,209,127,228, -131,184, 67, 29,255,179, 8,238,114, 86, 34,104,202,226,103,142, 89, 10,198, 36,194, 74, 37, 5,107, 63,254,205,233, 41, 82,205, -135,239,233,101, 18,166,121,255,157,183,121,238,185, 23,121,251,205,183,104,219,154, 27,103, 75, 82, 28,113,181, 99,237, 45,237, -141, 23,120,239,254,125,154, 27, 45,175,124,252,121,118,223,121,143,211,106, 70,171, 28, 51,147,217, 94, 61,224,198,217, 66,124, -238,125,143,154, 47,196, 59, 91,198,142,243,197, 12,165,102,172,186, 1, 27, 18, 75, 55,163,169, 42,162,247,156, 63,126, 64,248, -212,199,153,181,210,233, 69,159,121,233,227,207,211,184,175,177,243,137,247,223,123,151,231,239, 60,199,221,247, 54,188,246,202, - 39,248,224,222, 7, 79, 5,128, 83, 70,181,137,186,170, 25,131, 23, 29, 77,206,204, 22,115,241,100, 43,197,232,125, 65,128, 30, -108, 19,135, 91,191,116, 16,214, 84,116,125,207,102,187, 67, 91, 39, 20,186, 66,162, 67,107,218,118,198,213,118,139,206, 2, 1, -201,190,199, 25,131, 54, 14,147,236, 51, 72, 66,233, 82, 39,169,215,179, 73, 68, 83,193,126,118,175,166,158, 77,211,251, 46,137, - 60, 42,139,125, 69,161, 69, 32,149,133,175,220,247, 67, 1,224, 8,196, 35, 39, 97,100,231,148,168,170, 40,129, 37,106,154,255, - 72,214,122, 42, 7, 14, 89,139, 7, 91,200, 31,251, 55,206, 65,220,147, 63, 20,145,140,146,221,153, 50, 2, 23,177,133,153, 62, -125,196, 16,228,235,224, 48,102,140, 41,115,126, 46,250,135, 33, 68,188, 15, 44,111,222,100, 22,151,212,109,131,173, 76,153,140, - 29,239,217,217, 99, 51, 57, 10,186,248, 40, 27,218,223,200, 78, 93, 29,161, 30,148,130,190,239,209,198,240,240,209, 67, 62,241, -233, 79,177, 56, 91,210,125, 51,242,249, 47,125,137,111, 93, 93,136,154, 91,131,181, 10,124,177, 12,149, 85,139, 41, 89,217, 37, - 90,140,182, 54, 12, 62,114,118,118,163,240,247, 19,151,151,151, 2, 99,201,114,232,196,148,208, 70, 68,115, 57, 39, 66,128,182, -109,176,198,176,235, 59, 26,231,216,108,182, 37,231, 72, 51, 12,129,186,182,101, 29, 34, 90,150,229,162,165,169, 52, 99, 63,226, - 3,132,206, 50,132,196,122,157, 88, 93,118, 36,103,112,243,138,217,141, 68, 50, 35,163, 50, 68,103,112,246,148, 25,134, 60, 4, -146,246,140,118,131, 15, 35, 57,121,200, 3,253,208,179,235, 47,241,113, 3,219,138,174, 91,115,118,114,134, 74,145,202, 25,154, -242,156,167, 24,201,149, 59, 74,210, 43,202,101, 2,218, 76, 2,198, 84, 44,229,133,203,161, 82,193,164,232, 67,150, 64, 40,221, -166, 86, 24, 50, 57,143,232, 16,246,127, 62,251, 64, 8,158,177,239,217,173, 55, 92, 62,121, 66,223, 73, 48,145, 31,228,249,243, -195,192, 56,140,194, 25,215,226,202, 24, 6,191,119, 54, 52, 77,203,229,147, 43,134,222,147, 82,166,109, 43,185, 0,164, 36,214, -192, 44,177,169,193, 15, 52, 85, 45,103, 75,240,140, 67,194,107, 67,221, 46, 68,143,144, 34, 9, 83, 38,146,210,189,203,232,187, -128,146, 50, 31,234,128,202, 71,162,217, 41, 79, 93,149, 21,173,222,183,134,185, 96,165,101,250, 21, 77,201, 66, 40,118, 89, 83, -190,175, 84,154,190,152, 51, 62,101,172,145, 6, 33, 41,185,172,230, 50,173,205,228,107, 19,228,107,171,144,242, 94, 53, 74,220, - 0,109,229,104,107, 75, 93, 89,140,202, 4,239,217,238,192, 26, 37, 5, 55,140,248,224,105,162,120,199,171,121,196,181, 3,166, -154,131,157, 29,146,224,156, 69,155, 6,109, 20,206,214, 40, 87, 99,171,134,166,106,153,183,115,198,147, 51,118,235, 13,219,245, - 21, 99, 63,200, 42, 51, 5,114,144,201,103, 72,145, 84,108,183, 19,177,114,250,200, 33, 30,213,213, 50, 5, 45,171, 27,225,146, -200, 10,113, 12, 1, 27, 66, 56,208,121,162, 96, 29,245,148,162,147, 19,217, 24,185,145, 60,115, 40,171,107, 80,154,227, 52,158, - 41,141, 43,171,201,198,112, 56,242,212,193,164, 91,108, 80, 69, 32, 85,212,213,178, 5, 73,123,245,116,206, 71, 9, 92,249,186, -245,231,122, 64,128,252,189, 42,101,116,202, 60,124,255,109,198,221, 21, 23,231, 3,231,235, 83,214,187,129,135, 79, 30,243,202, -203,175, 50,191,113,135,240,224, 17,209, 84, 60,188,184, 98, 28, 3, 87,187, 43, 86, 17, 94,125,254, 14,159,250,212,167,200,253, -134,156, 18, 29, 17,173, 36, 5, 77, 59,205,108,177,196,103,197,232, 3,205,108,193, 15,254,134, 31,226,175,254,226,207, 19,250, - 14,123,162,120,252,240, 46,223,126,107,198, 98, 57, 67, 43,197,114,113,147,229,172,230,246,217,130, 15,206, 87,172, 46, 47,120, -229,197,143,241,228, 94,205,231, 62,245, 57,126,246, 47,253, 12, 62,199,107,111, 0,107,237,222, 69,208,247, 3,198,136,192, 40, -165, 68,215,117,123, 79,187, 41, 69,172,235,118,178,111, 84,138,182,169, 37, 31, 61, 39, 22,203, 5, 90, 27, 70, 63,210, 86, 53, -198, 42,118, 93,143,139, 9,140,165,105, 90,182,221,192,197,227,199,168,126,141, 13, 91, 81,210,170,201,114,115,189, 83, 63,140, -207,242, 95, 83, 89,125,204, 47,200,249,195,237, 46, 31, 57, 26, 46,130, 18, 38,116,100,158, 60,171,153, 97, 28,203,127, 19,233, -124,140, 30,239, 71,234,170, 41, 42,101,189, 39,223, 97, 28,202,214, 40,163, 48,217, 94,219,177, 77, 49,167,178, 99,157,166, 69, -135,224,137,235,225, 67, 74,178,192,181,193, 26,177,111, 25, 45,194,151,137,100, 21, 67, 1,130, 40, 13, 68,124,200,108, 55, 43, - 17, 90,133, 32,251,246, 16,153,159,156,208,206,103, 88,103,201, 69, 84, 38, 40, 88,246, 29,207,161,112,171,191,105,254,245,143, -122,221, 99, 74, 24,231,216,108,174, 88,158,156,242,220,157,155,124,235,205,111,242,125,191,225,135,120,235, 47,253, 52,239, 46, -150,146, 42,165, 21,149, 53, 36,175, 74,119, 6,149, 51,178, 66, 83,147,114, 57,227,172,136, 33, 99, 17,122,142, 33, 81,149,220, -118,237, 28,171,243, 75,180,209,133, 35,160, 81, 72,204,233,201,114,201, 56,138,111, 92, 70,139, 3, 57,102, 94,186,125,139,119, -190,243,128,179,179,166, 16, 10, 51,139, 89,131, 51,134, 24, 51,166, 50,188,247,104,164, 62,185,201,119,238,174,232, 3, 98, 41, - 82,129,100, 71,244,163, 43,230,203,138,179, 89,195,237,147, 83,116,157,208,173,195, 44,102,178, 62,240, 21,253,110,199,176,219, -225,140, 66, 41,143,143, 61, 62, 70,208, 21, 42, 71, 84,150,188,121,107,229,103,110,157, 36,198,153, 24, 8,193, 96,138,253, 76, - 28, 33, 81, 82, 11,141,217,235, 66, 52, 19,232, 40, 73,144, 78, 40, 46,160, 40, 90,134, 34, 11, 67, 77, 28,246, 20, 9, 33,208, -117, 29, 87,231, 23,140,195,192,102,179, 17, 64, 79,121, 86,131, 23,254,188,247, 30, 82, 22, 87,130, 17,178,157, 42,120,224,121, - 92,176, 89,119, 52,237, 2,165, 59,114, 30,233,251,192,110,215,179, 88,156, 16,162,136, 69, 49,236,191, 46, 87,183, 84, 90,149, - 12, 13, 41, 44,144,169,107, 71, 24, 61,214,206,246,142,157, 73,251, 99,148,218,235, 69, 14,239,153,124,141,242, 57,157,225,154, - 76,228,200, 57,117,141,127,168,142,168,233, 7,155,155,181,146,163, 96, 16,187,219,100, 19, 53, 70, 4,147,222,138, 61,242, 80, - 31,166,166,243,184,158,171,107,107, 66,163,197, 69,229,140,166,173, 29,181,179, 52,149,149,180, 72,163,168, 10, 52,105,232, 7, - 20, 18, 12, 22, 66, 34,135, 4,193,163,252,128,154, 5, 84, 29,192,138,152, 78,105,139, 50,226,134, 80, 49,201,116, 67, 87,100, - 83,227, 92,131,171, 7, 92,237,168,103, 53,253,118,139,239,122,252, 56, 8,205,114,136, 36,239,139,158, 66,250,216, 16,165, 33, -136, 65,126,222, 99,193,201,250,224,203,180,240,104,178, 88,244, 65,164,132, 29, 71, 79,178, 18, 6, 31,149, 42,209,145,121, 63, - 26,215,230,104, 31,250,116, 71, 69,161,120, 77, 41, 86, 71, 7, 98,154,240,112,165,160,155, 73, 1,188,239,244,229,207,198, 82, -204, 67,146, 78,112, 42,244,211,184, 38,163,228, 7, 6,215, 85,216, 83, 71,127,244, 65,206, 24, 18,175,189,242,113,238,189,255, - 62, 90, 65, 59, 95,240,232,114,203,123,143, 46,232,253,200, 87, 95,121,149, 7,247, 30, 17,253,192,251,239,189,207,237, 87, 62, -206,105, 99, 88,156,156,113,117,217,241,193,131, 7,188,112,243,148,218, 53, 92, 60,122,200,174, 15,204,151,183, 69, 45, 62,236, -112,179, 25, 79,158,172, 81,174,230,203, 95,250, 94,254,222,223,241, 59,112,109,205,159,251,127,255, 55, 44,230, 13,109,227,176, - 86,241,203,223,252,101,200,138,139,171, 13, 95,190,115,155,239,255,210, 23,184,247,103,127,138,251,247,222,227,147, 47,191, 76, -223,109,121,229, 99, 47,211,214, 45,190,219, 92,123, 24, 67, 8,130, 3,116,142, 48,140,104,164,155,234,250,158,166, 0, 48,114, -241,243, 42,173, 25,123, 57, 0,102, 77,195,124, 62, 99,209,206,152,207,231,197, 38,225,168,171,134,171,203, 43,218,249,130,148, - 18, 87, 87, 43,140,171,208, 85,141, 82,154,126,183, 97,105, 35, 42, 15,178,159, 82,106, 95, 92,158,233, 92,143,146,194,212, 71, - 4, 12, 60,109,111,249,149,194,137, 38,232,144, 58, 42,236,122, 82,210,151,203,222, 24, 34, 57, 13, 28, 9,237,201, 41, 51,250, - 40,202,228,242, 38,118,117,141,171, 90,180,220, 95,246,187,108, 17, 99, 74,145, 17,107, 84,225,225,167,184,255,117,218,199,140, - 78, 23,201,131,197, 38, 43,161,218, 9, 46,215, 16,140,140,145,189,242,114,211,206,251, 57, 1, 49,120,250,237,166, 36,162, 5, -194, 56,226,251,145,116,243, 22,205,108,134,171, 5, 19, 89,130,168, 72,154, 61,171, 93, 63, 69, 77,252,168,117, 83,254, 21,250, -224,158,241, 15, 31, 18, 24,138, 98, 59,241,177, 87, 62,206,197,213, 57,183, 95,126,153,151,158,187,205,246,254, 61,116,211,160, -140,162, 42,133,105, 44, 41, 83, 40,185,124,134, 24, 8, 17,172,149,174,199, 40, 25,237,102, 31,246,249,239,117, 83,145,179, 97, -179,219, 48,250, 76,211,218,125,225, 87,100, 78,151, 11,198, 97,160,114,142,232, 61,221,110, 71, 12,137,121,219,208,119, 29,214, - 22, 84,106, 9,126, 49,186, 36,150,145, 57,191,236,105, 23,115,206,215, 29, 67, 84,116,131, 6,229,208, 74,220, 8, 97, 13,151, - 87, 35,231,116,188,239,174, 88,158, 56, 94,120,113,201,173,219,167, 44,150, 53,237,172,162,118,150,177,106, 36,205, 49, 12,132, -180, 35,132,132,173, 18,195,216,179,221, 24,140,178, 92, 93, 94, 10,101,172, 80, 37,109, 85,244, 47, 24, 57, 96,181,248,235,149, - 53,104,107,139, 46, 36,239,133, 79, 41,136, 7, 57,165, 36,216,229,156,100, 85,152, 2, 67, 63,224,125, 96, 24, 61, 49,142,236, -118, 59, 54,155, 13,219,237, 22,107, 12, 93, 63, 16, 99, 20, 69,122,161, 70, 98, 12, 41, 70,154,162,255,208,102,178,122,214,212, - 33, 98,237,192,110, 39,233, 98,237,108,206,118,213, 49,244,137,113, 28,101, 89, 20,188,164,193,197, 68, 74, 26,109,170, 98,109, - 77,248, 97,192,206,103,248,173, 7,165,104,154,138,203,174, 67, 23, 90,158,113,178,198, 50,185,164,178, 77, 15,113,126, 54, 0, -204, 42,179,135,237,100,100,213,146,139, 14, 33,229,201,234, 76, 1,176,104,170,202,210,212, 53, 77, 83,224, 44,206, 97, 10,116, - 39,164,132, 15, 14,239, 3,222, 59,134,177, 34,148,194,151,138, 75,107, 42,232,154,252,204,212,112, 47, 90,212,114,193,176, 70, - 81, 59, 75,101,181,252,179, 4,241, 24,103,169,140, 66, 35, 23,201, 97, 55,200, 4,123,140,164,209,193, 40,235, 53,211,142,232, -118,142,174,103, 40, 87,161,140, 32,103,117, 57, 99, 20, 14,180, 35,153, 10,101, 42,180,213,216,166,193,213, 21,195,118,203,176, -221,208,111, 55,140,125,199, 24, 10,165, 49, 31, 26, 5,239, 99, 33,114,122,198, 32,151, 61, 31, 34, 41,133,114,177, 46, 86, 75, -235,138, 42, 62, 96, 55,187,129,202,197,162, 44, 45, 62,196, 36, 22, 34,179,231, 85, 31,146,160,246,131,148, 73,205,172, 14,119, - 46, 74, 65,158,236, 72, 19,112, 72,163,240, 83,199,190, 79,239, 41,160,146,152, 8,101, 95,155,202, 3,191,223, 37,230,105, 92, -163,143,198, 56,135,169,192,211,193, 51,114,160, 39,208,138, 80,184,196,157, 79,140, 25,182,131,116,120,173, 51, 52,202,115,115, - 49,227,201,213,134,245,197, 5,121,115,197,237,231,231,140,122,100, 48,240,222,195,199,252,192, 23, 63,203,230,242,138,180, 29, -216,110,183,196, 33, 96,103, 53,155,109, 79,192, 50,107, 23,252,149,175,189,206, 31,249, 99,255, 15,198,110,205,170,228,149,159, -181, 75,148,171,120,120,126,137, 87,154,245, 56,242,242,203, 47,226,117,228,199,255,226,207,240,248,241, 67,154,166, 34,134,192, -217,201,146,219,183,110,178,122,127,115,109,132, 29, 66,216,187, 13,118,193, 83,213,117,121, 45,229,117, 24,135,129,211,211, 83, -134,113,100,177, 88,144,203,239,175,235, 10, 80,184,170,162,109, 91,108, 85,209,117, 35,202,136, 56,236,254,131,135, 84,117,131, -143,145,101, 12,152,232,104,234, 25,159,120,229, 85,118,143,191, 77,223, 13,130, 43,204,250, 25, 33,226,181, 55,234,135, 20,150, -195, 4,230,122, 30,192,135, 5, 15, 28,192, 67, 79, 9,191,166, 27,126, 65,111, 22,170,133, 60,103, 25, 50, 81, 4,117, 41,226, -163, 24,124,180,117,152, 74, 2, 53, 36,170, 83, 14,200, 97,244, 84, 77,162,170, 51, 85, 35,151, 20,109,100, 4,138,142, 76,233, - 2, 41,230, 82,152,194, 83,211,136, 67,240, 10,234, 58, 58, 73,105,133, 81,134,140, 59,128, 49,140,129,113, 32,132, 80,118,180, - 17, 18,104, 60, 67, 17,242,196,113, 20,139, 74,215,115,114,118,147,217,169, 80,241,140, 85,178,163,213,148, 16, 29, 57,229,254, -102,194,104, 62,242, 66,165, 68,181, 61,155,207, 49, 74,211,198, 5, 47,222,186,133,201,137,122,121,138,173,103,130,200, 85,129, - 76, 64, 25, 69,142, 16, 83,164,117, 53,163, 79, 69,196,168, 88, 46, 90,250, 93,135, 54,173, 40,204,125, 79,189, 88,160,163, 98, -179,237,233,134,161,196,134, 38, 42, 87,179, 89,239,120,238,185, 83,249, 92,237,140,205,122, 77,244, 3,126,240,168,156, 89, 46, -231, 60,184,119,193, 98,225,136,113,196, 40,249, 59,180,213,248,172, 24, 66,226,201, 78,177,184, 85,113,247,242,130,199, 3,164, -100,138,211, 2, 48, 10,155, 96, 54,175,233,115,160, 27, 71, 62, 56, 31,120,112, 57,112,115,113,197,171, 31,191,205,243, 47, 45, -152,213, 53,109,219, 50,111, 90, 97, 57,116,142,148,123, 32, 8,118, 52,202, 57,181,235, 71,218, 49, 80,141,129, 42, 8,185,173, - 74,178, 26, 83, 25, 81,100, 27,185,236,105, 37, 43,150, 20, 66, 9, 22, 26, 33, 70, 84, 70, 52, 23, 49,145,195,128,239,118,140, -187, 29,155,205,150,152, 20,221, 48,178,235,183,164,156,217,108, 55,197, 26, 39, 19,149,202, 85, 50,178,213,236, 39, 83, 10,104, -155,102,127,193, 55,214, 97,171, 10, 23, 18, 77,179,100, 28, 19,209,139, 46,105,187,218,144, 83, 68,169,196,110,183, 41,133, 61, -144,194,136,171,102,120, 63,208,119,134,249, 13, 97,176, 27,165,177, 74, 49,118,163, 4,137, 88, 71, 72, 25, 55,125,143, 90, 81, - 25, 83,206,244, 74, 86, 98,153,103,139,168,158, 44,106,215, 93, 23, 83,200,209, 4,211,177,165,216, 86,149,163,169, 28,117, 35, -226, 82,231,220, 62, 68, 41,101,161, 83,134, 16, 8,161,198,123, 95,104,149,225,232,189, 82, 68,199,124, 88, 80,104,113, 33,152, -146, 92,167,197, 70,237,140, 22, 20,171, 21,241,179,182,194, 41, 80,164,253, 52,111,216,201,179,217,239, 52,155,121, 71, 51,219, -209, 44,123,234,197,128,157,141,152,186,198, 52,243, 50, 29, 44, 58, 34,163, 65, 87, 50, 53, 52,146, 81,161,156,248,223, 77, 93, -151,203,145,188, 38,227, 70,116, 17, 49,166, 18,136, 37, 26,178, 24,164,192, 75,172,173,232,142,234,202, 97, 10, 24, 73,206, 45, -113, 16,248,224,177, 93,239, 9, 49,203,139,103, 77,233,152, 97, 12,162, 46,212,123, 53,225,145, 47,249, 41, 64,128,153,210,166, -142,216,211, 89,229, 67,170, 85,241,237,170,233, 22, 87,140,206, 49,149, 47, 52,243, 20, 97, 78,237,129, 54,234, 41, 70,252,228, -254,184, 94,216,143,246,190, 36,108,213,242,206,131,115, 62,247,197, 47,115,190,218,112,255,173,111,227,180,162,173, 29,119,223, -123,135,212,117,156,204, 42, 46,214, 34,152,104, 12,204, 93,166, 87, 35, 91,163,120,112,126,197,119, 30, 8,156,162,106,106,186, -190,103, 36,208,106, 67, 42,236,234, 71,143, 46, 88,158, 25,222,120,227, 13,186,237, 21,125, 30,137, 74, 17,149,227,114, 61,240, -151,254,251, 95,162,207,153,139,110,195,213,213, 21,203,197,140,215, 62,241, 42,127,245,245, 55,121,231,189,239,144, 8,124,235, -205,215,121,233,197, 23,120,251,253,119,143,246,214, 1,133,166,239,101,220,174,141, 97,219,237,168,156, 67, 43, 69,223,247, 84, - 85,197,110,183, 35,165,204,213,229, 37,149, 53,212,117,197,108, 54,167,105,106, 78, 78, 78, 48,198,208,117,131,160,103,199, 17, -148, 97, 54,159,177,217,118,244,195,200,106,181,226,228, 70, 77, 91,207, 48, 54,177,250, 96,135, 86, 30,178,133,108,174,121, 73, -255,122,181,217, 31,218,221, 63, 83,224,167, 28,105,174, 9,195,246,172, 41, 37, 35, 62,193,197,234,125,122,153, 86, 25,149, 53, -218, 72,154,214,124,177,100, 57,159, 49,107, 27,156,209,196, 24,217,172,214,172, 54,107,250,174, 35, 36,217,177, 87, 37,128, 70, -167, 72, 54,177, 8,205,212,254,160, 56, 94, 49, 60, 77,195, 82, 74, 95,219, 13, 30, 46, 96,166,184, 20, 44,198, 4,241,224,171, -161,216,223, 34,137, 68, 80, 1,157, 35,236, 34, 97, 28, 24,250,158,110,183,165,219,172,153,111,207, 56, 61, 59,165,157,207,168, -219, 6, 99, 13,198, 77,192, 5,132,100,199,117,222,195,225, 61,150,127,213, 59,245,167,255,251, 4,241,233, 54, 91,110,221,188, -141,182, 21,228, 68,213, 46,113,237, 28,227, 12,182,132,140, 72,135,149, 14,140,122,216, 99, 99, 23,115,203,250,114, 32, 4,143, - 82,134,190,239, 89,156,157, 22,206,248, 6, 99,173, 8,130,208,236,250, 1,231, 52, 77, 93,115,126,113, 78,104, 42,172, 54,116, -163, 71,145, 89, 46,230,248, 49,160,181, 28,170, 66, 23, 84, 84, 77, 77,239, 7,124,231,121,188,246,216, 27,103,252,133,187,151, -220,235, 34,171,172,132,120, 26,163,136, 63,179,198,144,185,169, 96,225, 42, 22,205, 9,243, 49,178,222,238,120,120,229,185,216, -220,227,249,135, 53,175,126,236, 54,207,221, 88,176,152, 85,204,102, 18, 36,228,188, 39,229,129, 16, 70,178,178,140, 65, 49, 6, -193,142, 58, 31,168,134, 64, 85, 75,154,150, 50, 70,108,164, 5, 88, 52,177, 24, 38,187,111, 74, 81,232,119, 49,144, 67, 32,251, - 72, 24, 70,182, 87, 79,216, 94,158, 19,253,200,102,215, 49,248, 68, 55,120,172,149, 56, 90, 99,180, 8,131,181,132,200,212,109, - 75, 83,213,212,174,218, 95,250, 67, 8, 7,241, 41,138,224, 35, 33,122, 34,144,179,166,105,107,170,166, 98,113, 58,231,228,100, -134, 31,101,197,102,157,161, 31, 6, 65,244, 26, 65,238,170,156,202,165, 62, 73, 33, 85, 74, 70,254, 41,225, 92,141, 54, 61, 33, -137, 21,181,114,150,249,188,193, 90, 77, 72,146,131, 42,104,234,178, 6,213,122, 31,195,172,245,209,104, 93, 79, 53,129,107, 53, - 99,154,226, 26, 35, 8,224,170, 60,147, 19,141, 77, 31, 17,248,166,142,212, 71,225, 39,200,222,185, 92,200,211,179,210,171,235, -235,128,163,230,161, 76,144, 11,129,118,207,253, 87,147,238,164,172,145,209, 34, 12,246, 49, 18,251,145,203,117, 66, 61,217,210, -182, 43,230, 39, 43, 22,167, 43,102,103,103, 52,243, 5,110,214, 99,155, 25,184,154,236, 92, 65,206, 90,193, 1,151, 58,169,141, - 52, 33, 88,135,182, 22,235, 92,153,156,110,217,110,182,116,187, 30, 79,148,117, 28,154,172,178, 92, 62,178,193, 78, 4,194, 61, - 51, 36,151,233,160, 52,193, 62, 6,236, 16, 2, 33,101,116,217,209, 8,132, 94,239, 5, 69,234,200, 63, 61,249,209,247, 62,118, - 35, 2, 45,231, 28, 22,185,225,216, 50, 6,210, 19,120,164, 36,239,168, 44, 42,103,193,222,197, 34, 24, 41,164,184,162,132,159, -168, 76,135,224,150,162,155, 47,121,191, 19,156, 32, 31,204,211,207,236,213, 33,211,249,196,233,237, 23,121,225,213, 79,241,246, -207,252, 37,238, 63,122,136, 85,240,210,139,119,232,186,158,133,179,164,148,104,219,134,186,157,195,184, 35, 12, 3, 47,221,113, -248,149,229,254,189,129,183,238, 62,228,185,214,112,121,177, 97,126,170,185,245,252,199, 25,208,212,205,130,246,198, 41,118,237, -121,254,133,151,120,252,232, 46,183,110, 46,248,218,195, 15, 24,251, 30,157,224,114,183, 70, 59,203,206, 7, 94, 57, 59,229,201, -229, 5,159,250,220,103,248,251,127,219,111,227,191,255,198,191,203,215,190,241, 75,124,249, 11, 95,224, 79,253,233, 31, 99,126, -178,124,106,148, 42,123,164,148, 19,253,208, 23, 24,139,136,131,200,121, 31,255, 23, 67, 64, 27,195,106,181,226,198,233, 41,166, -236,215, 66,136, 88, 99,168,235,166, 8,238,114,225,118,103,188,247, 52,133, 3,223, 15, 3,249,106,197,201, 92,225, 82,207, 56, -238,112,185, 20,187,172,158,125, 35,252, 13, 64, 79, 62,108, 68,124,184,196, 29, 11, 34,121, 6,161,154,167, 8, 82,166, 76,233, - 76,109, 29,139,197,130,229,201, 41,103, 55,206, 56, 93, 46,153,183, 53,206,202, 27,127, 49, 95, 96,159, 56,206,207, 47, 24,251, -238,224,212,208, 10,147,235, 67, 34, 26,250,200,130,115, 93,224,119,224, 53, 8, 23,251,217,169, 69, 42, 19, 44,133,214, 9,101, -229,115, 89,109,241,163, 20,246,152, 34, 62, 6, 84,200, 36,173,196, 97, 16,252,190,176,183,155, 53,219,245,154,211,179, 51, 22, -167, 39,212,109, 75,213,212, 88,107, 73, 86,161, 83,190,150,238,246, 97, 20,229, 95, 77,167,174,174,137, 27, 37, 5, 47,199,196, -124,185, 40,174, 85, 41, 80,139,229, 9,166,170, 8, 41,210, 90, 1, 29,150,101, 27,214, 41,114,244, 98, 27, 13,153,202,166,178, -119,135,177, 11,228,236,169,172,176,223, 67, 8, 12, 99,160, 89, 84,164,164, 36,252, 68, 41,218, 90, 19,188,231,228,100,201, 48, -140,244,155, 29,126,204, 44,231, 21, 77, 83,177, 89,175, 49, 70, 98, 94,189, 15,220, 60,155, 19,162, 39,164, 76, 23, 32,154,138, - 15,158,236,120,119, 21, 88, 97,240,206, 50,120, 47,135,116, 86,228,168, 65, 37,158,172, 70,170, 60,114, 98, 20,103,198,114,107, -209,176,136,129,237,102,224,254,131,129,110,117,143,221, 75,115, 94,254,216, 41,179,121, 35,171,155,217, 9, 89,201, 10, 50,122, - 47,164, 56, 91, 19,162,208,233,134, 49, 80, 13, 94,208,192,101,215,168,116, 33,207, 21,212,106, 74,161,184, 58,196,205,147, 83, - 32, 71, 79,240,158,177,219,209,109, 54,108,215, 43,252,208,177, 27, 3,253, 24, 65, 59,172, 54,212, 78, 72,118, 40, 67, 91, 34, - 92,171,186,150,177,110, 33,225,197,152,232,250, 81,114,238, 17,243,198, 56,200,215, 42, 69, 68, 4,125, 74, 75,103, 58,155, 53, - 60,206,147, 37, 76,147,114,194,143,158,186,149,201,161,177, 51, 66, 12,251,120,222,169, 33,243,227, 72, 61, 63, 67,171,109,201, - 85, 72,104, 43, 77,130,209,169,156, 81, 98,241, 99, 15, 10, 99, 31, 98,100, 38, 18,168, 81, 7,135,140, 86,135,231,250, 40,134, -213, 20,199,140, 51,186,184, 85, 74, 61,209, 26, 93, 46,224, 49, 40,188,201,184,160,240, 90,147,146, 41,187,127,181, 7, 64, 77, -240,158,252,244,138,118, 15, 85,219,231, 61,146,137,135, 24,220,114, 73, 53, 71,113,201,148,169, 69,204, 90,242, 42,198,196,208, -119,108,214, 91, 86,151, 87,204, 79,102,156,172, 87,156,220,184,201,252,228,132,122,177,192,182, 51,116, 51, 71, 85, 50, 49, 82, - 90,139,162,223,105,148,145,181,118, 46,171, 69, 7,204,180, 22, 48,150,214, 36,165,201,221, 64,240,146,136,232, 16,118,192, 52, -122, 80,218, 92, 59,143, 82, 78,251,117,108,136, 17, 43, 86,170,194,244, 78, 1,163, 20, 33, 78,254,116,181,127,177,153, 68,111, -197, 2,101,237, 97, 60,152, 83, 6,123,216,139, 84,214,236, 81,139,198,136,152, 38,149,157,101,192,163,178, 18,149, 95, 78,251, -176,123, 10,241, 40, 77, 35, 78,117,224, 34, 79, 22,137, 92,198,241, 83, 17,152, 20,216,249,168, 72, 40,173,121,249,149, 87, 89, -117,153, 59, 55,111,241,157,183,223,166,210,154,155,103, 11, 78,230, 45, 58,103,162,181,180, 85,203, 39,158, 59, 97,110,192,135, -154,104, 18,201,104,148,142,104,149,120,178, 94,241,220,173, 79, 48,170,115, 78,195,200,102,125,201,226,249,143,177,238, 54, 60, -184,123,151,136,230,225,253,183,120,242,248, 33, 74, 69, 82, 28, 81,203, 5, 99, 31, 8,131, 40, 83,157,155, 49,155,223,224,107, -223,186, 32,180, 3,191,230, 43,127, 59, 63,250,123, 53,127,246,199,255, 20,143, 46, 55,252,208, 87,127, 35,111,188,241, 58, 39, - 77, 75, 55, 12,242,115, 80, 50,218,228,120,191,140, 8,104,140, 54, 83, 43, 76,219,182,242, 3,142,162, 2,143,222,179,219,110, - 37, 89, 41, 38,170,170, 69,105, 45,104,205,130,102, 77, 19,103, 93, 27, 30, 93,174,121,169, 94,178,126,252, 0,227, 47, 33,121, - 34, 90,226, 93, 39, 95,161,202,207, 80,255,247, 55, 68, 33,248,203,255, 84,249,153, 77,137, 0,123,198, 66,222,107, 36,116,193, - 73, 50,133, 91,112, 0,237, 76,159,227,136, 77,124,164,177,201, 36, 21, 5,207, 88,222,108,117,221,112,114,178,228,230,205,155, -220,188,117,147,211,147,211,253,168, 78, 17,105,230,115,176,154,144, 50, 23, 23, 87,120,239, 81,218,148, 55,141,197,153, 4,166, - 20, 75,173, 65, 89,116, 6,163,227,225, 98,165,167,105, 84,137,200, 60, 58, 24,166,142, 94, 14, 49, 17,167,144, 82, 25,249, 26, - 84, 93, 19,140, 65,133, 32,254,224, 40, 23,103,149, 19, 49,143,232,152, 72, 41, 48,248,145,190,219,177, 93,175, 56, 89,223, 96, -113,114,202,124,185,164,105,103,184,198, 21,236, 35, 37,240,226, 0,227, 56,214,183, 28,116,117,106, 15,243,120,122,202,242,140, -144,113,122,170,178,218,175,206,180, 41,207,150, 42, 62,112, 20, 85,219, 82, 55, 14,109, 34,206, 24, 66, 14, 36,149, 4, 32,211, -192,160, 35,138,150,148,118,204, 27, 69, 74, 3, 90,105,124, 31, 80,133,246, 22,124,207,208, 7,152, 80,170, 49, 17,119, 3,179, -179, 37,105, 12,212,117,205,182,219,145, 48,172, 59,207,162,133,166, 81,108,118,107,162, 86,248,100, 25,187,145, 23,111,182,100, - 21,217, 38,207,118, 23, 24,187,154,116,186,228,175, 62,250,128,157, 50, 36,101, 25,125, 46, 0, 35,241,120, 7,162,224,108,147, - 70,101,195, 85,138,168, 69,195,106, 24, 56, 67,113, 54, 59,161, 31,118,156,119,129,225,238,134, 68,226, 99,119,102,204,150, 51, -236, 92, 81,185,150,170,174,160,106, 75,254,132,102,244, 1, 55,120, 6, 55,208, 86,174, 0,137,202,202, 42,235,242,156, 9,164, - 75, 30,165, 68, 86,137,196,193,169,145,188, 64,138, 66,148, 20, 67,159, 52, 41,155, 61,119,190,109,103,216,166, 69,219,138, 69, -187,160, 54, 14,109, 20,195,232, 89,143, 43,134,173, 39,238, 32,134,200,214,175, 9,106, 68,133,140,209, 21,219,177,103, 86,207, -168, 75, 76,234, 48,116, 36,239, 25,131,228,168,251, 49,145, 91, 45,151,227, 90,118,232,153,130,138, 54, 10,107, 91, 84, 10, 24, -109,136, 49, 97,210,200,216,107,154, 51, 11, 5, 7,236,138,182,100, 54,107,168,117,222,231, 61, 29, 50, 33,166, 73,173,218, 71, - 50,235,169,193, 43,150, 87,233,216,167,115, 96, 58,229,228,204,217, 95,170,201,232, 28,209, 73,166,115,135, 96, 41,185,196,104, - 45,142, 64, 56, 38,147, 23,118, 74,217,169, 79, 69,111, 58,211,242, 4,204,201,106,175,166, 87, 40, 82,217,160,161, 20,217, 8, - 13,210, 29, 93, 60, 2, 98, 43, 83, 17, 48, 35,145,204, 48, 4, 86,187,200,197,118, 96,185,241,220,218, 68,110,220,242, 44,207, -122, 73,128,155,247,152,102, 64,213, 51,178,157,161,116, 45,211, 28,196,201,161,141,134, 90, 2,118, 48, 21,202,181,152,118,129, - 91,108, 25,250,142,177, 31,165,176, 39, 17, 98, 82, 44,191,135, 11, 72,129,246, 76, 49,215,249, 40,122,245,120,108, 62,117,134, - 57,202,156, 94,171, 99,213,224, 20,161, 46, 89,191, 89,171, 3,198,245, 72,153,174,148,168, 49,109, 73,221,145,131,104,234,184, -133,229,173,114, 46, 89,184, 19,204, 38,239,133, 98, 2, 54, 17, 48, 1, 89, 0, 41, 82,255,211,135, 28,174, 7, 36, 96, 46,254, -226,151, 62,246, 50, 95,123,253, 45,182,155, 21, 97,232, 89, 46,102, 60,255,252,115,178,251, 81, 80, 53, 45,139, 89,203,114,214, - 18,186, 53, 94, 69,118,157,103,209,182,156, 45, 90,102,149,103,237, 35, 23,157,167,215, 53,151, 81,177,125,114,129, 25, 34,155, -221,142,245,110,135, 54,134,147,147, 5, 99,236, 80, 57, 9, 82,246,236,148, 11,127, 69,138,129,147,211, 27,204,231, 75,252,144, -248,230,183,222,230,235,223,122,135,183,238, 62,224, 31,250,159,254, 46,126,207,239,249,199,248, 47,254,179, 63,194, 95,248,137, - 63,197,247,127,249,215,161, 93,195, 55, 94,255,101, 86,155,181,144,143, 14,219, 7,241,115,154, 18,107, 88,194, 12, 8, 1,148, - 98,187,221, 80, 91,139,247, 35, 77, 93,149,220,231, 26,107,221,254,245,152,118,114,125,223,147,209,140,163, 8, 46, 98, 82,120, -239,121,225,198,146,135,239,189, 95, 70, 77,154,156,197, 90, 51, 5, 35,236,237, 86,211,115,241, 17,241, 62, 31,218,137, 31, 95, - 4,246,184,198, 67,142, 77,254,176, 63,159,159, 30, 49,231, 67,214, 64,150, 8,211,202, 57,150,203, 5,183,110,223,226,214,237, -219, 18, 20,226, 36,123, 93,229, 64, 61,246,146, 47, 80,128, 50, 93, 55, 20,165,124,192,165,233, 64, 40, 76,102,109,200,218,138, -127, 87,167,103,216,213,170,136, 6,143, 93, 0,215,148,253,147, 34, 57,165,107,186,136,105,100, 40, 35, 82,179, 23,224, 9,104, - 35,226,125,143,207, 81,130, 38,118, 27,118,155, 53,179,229,146,197,242,132,147,211, 51,102,203, 19,154,217, 28, 87, 89,140, 21, -156,164,177,178,115, 60,222,249,127,104,110,146,250,149, 44, 73,142,131, 54,212,145,241, 96,207,241,147, 14,197, 90,102,179,134, - 60,136, 29,106,175, 30,182,153, 33, 38,114,200,104,101, 56, 89, 24, 70, 31, 72, 89,179,235, 19,139, 90,227,195, 64,163, 28, 41, - 5,156,149,216, 96,157,179,232, 90, 42,135, 79, 50, 61, 50,218,240,228,209, 10,109,160,105, 28,227, 40, 29,110,215, 5,148,173, -193, 36,170,182,101,183,221,176, 38, 50,218, 10,218,138,111,127,240, 16,143, 92, 46,198,144,168, 49, 40,149, 24, 21, 4, 45,126, -115, 21,193,230,204, 92,139,175,250,211,191,238,123,121,255,157,119,184,247,214,187, 68,155,104,201,120, 5,187, 81,241,222,251, - 59,140, 31,185,121,219,211, 38, 69,110, 37, 82,213, 90,183,119,163,132, 16, 25,134, 17,103, 45, 67,235, 69, 0, 25, 19, 46, 79, - 26, 16,233,144,149, 78,232, 92, 4,126,229,208, 77, 49,146, 66, 20,198,187, 22, 65,155,117, 13,224,208, 78, 49, 63,169,168, 93, -195,169,157, 17, 43, 67,111, 96,213,111,232, 55, 91, 46,159, 92,176, 90,173,232, 66, 15,212,216,188, 64,105, 67, 84, 61,218, 4, -226, 24,105, 76, 77,183, 91,113,165, 53,205,108,198, 98,113,194, 24, 2,219, 97, 96,232, 3,193, 11,120, 69,246,175, 81,224, 56, - 89,206,235, 24, 2,202,137, 69, 45, 5,143,115,146,145, 96, 84,161, 7,106, 37, 57,222,229,105,177,214,130, 3,171,210,222,159, - 30,179,218,139,156,211,209, 26, 77,115,189, 59,159,108,169,162,150, 87, 71,116,200,184, 95,171,198,114,113,182, 9, 82,113,179, - 40, 83,166,117, 70, 48,194, 57,150, 80,168,152, 80,113, 66, 77, 79,168,109,217, 63, 79,157,251,164,217,202,165, 94,229,105,186, -144,179,104, 7,204, 65, 59,147,141,172,139, 53,130,242, 86, 5,148,149,146, 34,229,178, 90, 49,134,164, 12, 67,140,116,222, 51, -248, 53,195, 32, 32,164, 97, 56,225,116,244,180,227, 64, 53,247,216,214,163,235,128,114, 51,180,107, 5, 55,173, 53,218,213, 36, - 99,200, 70,166, 64,214,141,152,122,129,155,117,132,177, 39,140, 30, 63,122,162, 47, 19,110,226,225,236,217,159, 71,165,185,152, -158,179,252, 17,209,171,251,131, 43,179, 15, 82,121, 90, 69,168,181, 42,129, 21,215,247,220, 41,149, 31,238,180, 35, 85, 28,141, - 87, 36,221, 76,165, 52, 1, 19,247,168,193,116,244, 98, 79, 36,185,201,103,120,252,131,201, 41, 31, 21,119,174,137, 35,166,180, -179,148, 18,247,239,221,163,105, 22, 52,117,197, 11,207, 63,135, 41,171, 5,149, 51, 85, 85,115,114,178,192,170,140,223, 73, 39, -101,180, 56, 0,110, 46,231,220, 92,244,208, 43, 30, 93,156,147,236,140, 43, 31,153,205, 91,114,132, 85,239,247,211,132,172,149, - 76,171,147, 98, 59,140,220,187,255, 8,223, 13,188,242,242, 43,204, 79,207,176,166,162,117, 13,177,223, 17,147,231,155,127,229, -231,248,143, 47, 30,243,233,207,127,142,223,245,187,127, 23,191,241,111,253, 13,252,203,255,210,255,134, 47,127,225,211,124,241, -203,223,195,207,253,220,207,241,205, 55,222,160,235,251,210,217, 38,148,145, 55,129,143,145,148,227,254,114, 53,120, 79, 63,244, - 88, 51, 35,248, 17,133,162,105, 26,102,243, 57, 73, 73,208,136, 42,158,237,132,198, 71, 97, 72,247,195, 64, 46,225, 36, 67,183, - 35, 47, 43,194,216, 9,176,225, 87,185,175,253,213,236,117,243,190,170, 31, 9, 31,243, 95,123,182, 60, 37,183,181,179, 25,139, -147, 19,150, 55,111, 80,207, 90,180,171,229,176,200, 17, 59, 86,228,156,241,253, 64, 28, 70,174, 46, 87,248, 84,102, 11, 73,198, -226,186,140,177,116, 73,119,155,118,127,199,197,153, 3,180,247,187,106, 4,142,187,247,227, 66, 43, 54, 56,137,180,220, 23,245, -201, 78, 7,228, 28, 72, 62, 49, 70, 79,240, 61,187,221,154,245,213, 37,235,171, 11, 78, 78,110,176, 56, 57, 99,182, 88,148,136, -217,154,228,100, 55,167,203,190, 93,235,167, 51, 22,242,209,175,211,119,121, 5,255, 26,145,175,197,174, 84,185, 10, 31,252,126, -106, 55, 36,136, 30,156, 53, 16, 35,173,181,108,122,143,211,137,121, 91, 49,164,145, 33,106,176,146,215, 93,149, 78, 93,108,111, - 25, 31, 19,149, 51, 44,230, 51, 82,140,180,173,208, 15,119,219,142,190, 31,184,117, 86,239,215, 23, 40, 73,179, 90,239, 6,110, - 61,127,194,147,245, 14,188, 34,181,115, 46, 66,226, 98,117,197, 16, 19,119,102,138, 71, 93,166, 82,153, 23, 80,156,213,115,222, -246, 91, 46,117, 70,231, 26,157, 60, 21,129, 19, 21, 24, 52,252,244, 95,248, 25, 82,202, 60,103, 52, 39,181, 98,211,121, 26,103, - 33,100,198, 49,241,240,145, 39,171, 29, 39,165,161, 80,204,246,190,102,107,229,184,140, 49, 50,122, 89, 41,140, 62, 18, 82,150, -236, 70, 99,209,206,237,121, 9, 74, 91, 1,106,133, 8,190,120,141,147, 76, 19,180,113,212,205,140,197, 9, 66,122, 43,195, 49, -173, 45,235,208,179,186,127,193,253,187,239,115,241,232, 17,195, 48,146,219, 22,123,227, 6,243,122,193,188,189, 65,174, 79, 36, -112, 36,142, 48,118, 50,178,183,150,238,201, 3, 54,126,203,102,220,242,228,241, 21,214,212,232,236, 72, 3,248,161,120,157, 19, -248,209,179,108, 91,252,174, 39, 37, 7, 74,149, 56, 89, 71, 12,158,153,209,164,224,101, 95,157, 68,244,105,149,134, 36, 35, 94, - 89,233, 29,240,181,153,169, 75, 62,226,149, 76,194, 52,109,175, 37, 2,230,156,247, 22, 62,209,204,168,131, 94,170, 20,226, 24, - 19, 33, 39,188,162,164,221,129,201, 69,225, 95,138,170,193,144,178,196, 39,167,156, 24, 66,192,143,177,184,169, 38, 71, 75,177, - 75,239, 93, 93,229,215, 19,119, 62,139, 53,179,114,150, 38, 59, 26,101, 81, 41,151,136, 97, 83,104,129, 19,233,178,184,234,203, -223,143,182,226,166, 65,166,130,219,126, 68, 93,110, 37, 79, 35, 68, 78,188,167, 29, 3,205, 24,168,102, 1,219, 72, 70,132,113, - 53,202, 58,201, 22,208,166,216,225, 28, 90, 7,156,245,216,102, 70, 10, 35, 49, 68,252, 56,136, 78,194,143, 18, 62,149,226,181, -115, 40, 37, 41,248,228,131,115,199, 62, 21,194,120,237,237, 46, 69,247,250, 49,176,247, 17, 38, 80, 33,161, 84, 68, 27,201,230, - 85, 33,236,199, 21,250, 40,131,125,130,212,164, 36,220,244, 24, 34, 62,200, 27, 99,244,161, 28,164,229, 34,176, 39,255,112, 77, -141,156,179,122, 74,237,206,209,110,253,240, 85,159,221,184,197,207,255,252, 47,160,141,230,254,195, 15,152,205,106,218,166, 46, -201,110, 98,223, 73,133, 3,157,115, 44,168,214,200,108,230, 80,118,198, 48, 70, 94,184,117,202,227,111, 63, 68,155,154, 77, 31, -113,243, 51,230, 55,158, 35,165, 72, 55, 6,250,221, 21,214,104,182,235,149,216, 84,202, 8,233,209,249, 99, 94,121,238, 37,110, -223, 60,163,153, 47,177,182,161,173, 90,154,153, 37,197,192,122,181, 99,251,228, 17, 63,251, 19,119,185,255,222,183,249,125,255, -250,191,204,191,245,111,253,126,254,217,127,250,159,228,214,173, 91,252, 61,191,229,183,240,155,126,211,111,226,199,127,252,199, -121,243,205, 55,247, 74,200, 49,196,235, 86, 49, 5, 87,155, 21, 85,137,243,155, 53, 45,198, 57,225, 4, 27, 91, 4,131, 25, 99, - 69,212,215,143,158,156,161,235,123,114, 86, 2,120,208,134, 28, 61, 15, 31,188, 43,196,168, 41, 16,225,187, 22,132,191,177,189, -250,245, 68, 49,117,212,169, 31,235, 40,212,119,217, 11,151, 34,155, 51,218, 24,234, 89, 67,179,156,227,218, 86, 66, 23,148, 65, -101,129,130, 80,138,122,246, 1,167, 12,157, 31,229, 98, 84,172, 84, 94,121, 40, 81,171,101,109,118, 36,136,203, 79, 77, 23, 14, -194,191,227,103,242,248, 57,124, 90,104,167,202,254, 95, 46, 14, 98,137,218,191, 9,247,191,239,112, 0,166, 16,137,190,199,119, - 35,221,106,195,250,201, 21,179,197,130,249,201,137, 76,125, 78, 79,139, 13, 78,114,218,173,227, 40,179,185,176,116,212, 36,110, -213, 60,171,253,253,149, 43, 29,149,130,152,161,110,103, 92, 93, 93,225,172, 67,105,143, 70, 44, 84, 85,173, 9, 62,208,182,142, -203,208,211,154,204,114, 86,243,120,227, 89,247,137,100, 0,167, 80, 90,144,190, 26, 75, 24, 70, 92, 93,179, 88, 44, 8,222, 83, -233, 74, 56, 16, 93,207,229,213,150,229,204, 48,111, 27,182,235, 45,203,121,205,229, 85, 15, 70,225,172, 69,101,195,218, 39,220, -252,132,135,187,129,123,235, 14,231, 52, 55,158,107,184,217, 52,188,247,238, 37,131, 79,204, 73,188, 52, 38,186, 12,107,149, 73, - 42, 16,108, 38, 69, 56, 33, 81,107,135, 31, 51,157, 50,204,106,197,103, 62,253, 2,231,151,151,188,255,254, 90,136,117,217,176, -233, 35,230,201,136,182, 91, 42,163, 49,229,113,109,148,172, 12,141, 58, 8, 44, 67, 82,132,172, 73,130,252, 2, 91,161, 93, 37, -137, 92, 58, 73,222,183, 18, 55, 81, 28, 61,201,199,178,221, 40,192,148, 8,218, 56,134, 81, 44,169,227,224,185,188,186,228,253, -251,239,242,240,209, 67, 84,138, 52,202, 49,111, 78, 89,204,159,103, 55, 58,250,177,198, 53, 75,186, 92, 51,238, 50,173,170,201, -235,192, 75, 47, 62,135,214,153, 56,247, 52,106,137,242,107,226,213, 57,221,122,141, 74,154, 52,102, 86, 87, 91, 66,144,177,125, - 28, 3,237, 89, 67, 30,227,158,205,157,179,160,128,115, 12, 40,149, 48,101, 7,110,140,197,106, 43,228, 52, 13,202, 30, 24,234, - 50, 17,151, 14, 59, 78,163,224, 82, 40,100,125,165,203,132,167,236,177,245,225,253, 65,209, 27, 8,184,167, 4,149,164, 36,110, -148, 16,133,146, 86,186,120,227,172,228,108, 56,183,167, 84,230,172, 8, 81, 52, 29,253,152,216,237, 70,186, 97,144,100,179, 16, - 36,252,164,124,222,169, 67, 79, 81,138,125, 46,161, 68, 6, 69,219, 52, 44,102, 50, 14,175,178, 43,121,232, 69, 35,102,109, 97, - 42, 36,116, 10,160, 98, 1, 91,153,194,194,144, 52, 62,107, 12,202, 72, 8,217,118, 27,136,113,197, 56,142, 44,251,129,249, 48, - 72,215, 62,235,209, 51,143,173, 91,140,107,196,223,174, 43,178,178, 96,181, 76,192, 77,144,169,172,243,178,122, 16,152, 12,209, -143,164, 48, 8,133, 49, 6, 41,238, 69, 47,161, 52,168,164, 32,137, 51,197, 30,119,230,199,163,246,143,220,199,229,137,252, 19, - 80, 37, 86,114,242,180,135, 32,201, 63,206, 89,162,181, 4, 31,177, 78,132, 23,178,183, 63, 40, 21,253, 24, 15,242,125,142,247, -226,234, 90,222,250, 94,233,151,143, 40, 96,234,169,168,215,163, 3,172,235, 6,222,124,235,109, 82, 78, 60,122,244,128, 91,183, -207, 4, 84, 80,254,172,210,162,214, 84,198,162,178,194, 84, 51,130,170, 88, 13,154,176, 81, 52, 77, 77, 82,137,155, 39,115,238, - 95,108,152,235, 26,223,175,185,122,108,216,245, 35, 57,244,168,148, 8,253, 8, 68, 14, 36,250,140,211,154, 69,237, 80,113,160, -223, 38,124,184, 98,104,102,216,249,140,170,157,115,187,158,177,189,188,164, 34, 48, 94, 62,226,143,254,161, 63,200, 63,251,191, -248,231,248,145, 31,249, 17,254,195,255,240, 63,224, 63,255,207,255,115,190,252,165, 47,241,187,254,209,223,197,227, 71,143,248, -201,159,252, 73,190,241,198, 27,244,125, 15, 74, 4, 42,192,222,199, 62,159, 47, 72, 41, 51,134,136,241, 65,246,206,214, 81, 87, - 45,193, 11,215, 89,107,232,118, 61,125, 8,152,170,193, 26, 71, 72, 35,206, 24, 20, 35,195,176, 66,169, 80,212,158,166,220,214, -210, 65,113,174,142, 46, 82, 71,201, 94, 31,230, 67, 63,216, 73,174, 63, 43,211, 14, 56, 95,139,104, 60,248,181, 14,201,123,135, - 34,249,116,180,232, 52, 6,223,199,152, 66, 73,113,146,248, 75,237,138,141,132, 44,135,175, 15,212,139,158, 56,140, 0, 84,190, -103,244,137, 49,100,250, 81, 18,239,134,126,160,202,194,101,215,197,130, 50,125,191,215, 32, 52, 71,251,170, 61, 50, 55,198,253, -200,235, 35,173,127, 41, 99,157,222,243,193,167,116,183,253,231, 79,186, 76,167, 18, 49,196,253, 63,253,232, 25,187,142,245,234, -130,234, 73,195,226,228,140,197,217, 77, 41,238,203, 19,102,139, 57,174,113, 84,149,236, 90,173,211,104, 43,168, 81,101, 52, 89, -165, 67, 23,116,228, 92, 57, 22,219,165,148,159, 18,222,237, 61, 70,251, 29,103, 76, 71,121, 13,197, 50, 67, 22,170,155, 15, 1, -104, 72, 33, 83,181, 26,171, 13, 49, 25, 66,206, 12, 62,113,179,109,232,199, 43,102,243,134,174,135, 28, 21,203,153,116, 32, 57, - 68, 84,237,128,204,110,187, 67,161, 56, 93,182,108,183, 27, 50,154,222,203,148,207,123, 56,187, 49,231,242,209,154,230,206, 41, -111,172, 59,222, 63,223,241,210,201, 28,157, 71,110,220, 60,195,205,231,220,190,239,249, 78, 90,115, 47, 69,110,229,145, 87,219, - 26,223,117,244,217, 19, 48,204,149,226, 76,195, 16,162, 48, 6,178,231,181,215, 94,225,147,159,125,133, 87,195, 72, 91,125,155, -247,222,126, 76,165,106, 82, 28,232,134,200,176, 25,217, 85,235,162,136, 54, 88, 83, 9, 34,181,232, 15,148,113,132,108, 64, 59, -208, 21,198,181,216,170,193,184, 10, 91, 57,140,137,228, 33,136, 16,177,144, 46,115, 20, 1, 81, 78,153, 48,122,134,110, 96,189, -217,176, 90,173, 88,173,175,120,242,232, 49,247,238,221, 37,196, 30,229, 12, 89, 85,108, 83,205,147,171,204,213,147,199,188,115, -190,225,114, 59,176, 13,145, 45,137,117,231,105,173,225,249,217,156,155,139,150,197,188,225, 51,159,124,133,231, 78, 91, 22,218, - 50,179, 75, 66,216, 49,140, 59,186,174,151, 20,199, 40,232,111,171, 12,109, 85,211,179,195, 85, 21, 33, 21, 75,103, 18,244,111, -244, 35,186, 88,230,166,240,166, 76, 70, 89,249, 25,251,148,241, 26, 97,241, 39,137, 81, 22, 48, 78,249,125,170,172, 81, 11, 98, - 72, 29,233, 84, 4, 42, 35, 35,111,117, 52, 93,157,124,216, 99, 8, 37,143, 65,114,211,181,145,149, 91,211,212, 52, 89, 83, 99, -200,133, 7,143,130, 68,148,236,244,172,217, 13,137,221,110,160, 31, 6,250, 16, 8, 83, 65,223,219,190,138,149,186,236,217,157, -145, 73,102,229,236, 53,162,103, 85, 85,184,166, 46, 48,164,140,114, 9,180,223, 35,204,125,204,104,155,209, 81, 86,201,186, 92, - 58,140, 53, 40, 45,169,193,221,118, 20, 70,197, 48,226,135,129,166,239,169, 66,160,106, 6,108, 61, 67, 59,143,170,102,100, 91, -147, 85, 89,241, 24, 39, 23,243,108, 73, 41,162,117, 36,235,145,108, 44, 42,200,170, 48,143, 61,113, 28,136, 57, 20,225,121, 32, - 7,225, 56, 20,161,220,245, 78,253,248,160,253,107, 89, 97, 38, 5,102, 8, 1,239, 61, 85,101,241, 94, 24,233,163,181,184,146, -161,124, 8, 34, 18,123, 74,138,169, 92, 2, 34, 33,197, 50,238, 83,135,126,237, 41, 98,220,164,198, 86,170,196, 16, 78,234,229, -233,215, 71, 92,162,110, 24, 75,214,117,162,170, 28,109,219,162,114,198,106, 73, 29, 83, 70,203, 15, 58, 43,208, 53,217,106, 76, -115,155,155, 55,111,179,139,145, 55, 63,248,128,139,203, 75,249,124,202,210,184,134,231,207,110,179, 75, 22, 63, 6,102, 39, 39, -108,214,163, 28, 78, 71,175, 71,107, 53, 39,117,197,139,183, 79,217,245, 27, 54,195,200,166,243,116,157,199,163,184,113,227, 22, -183,111,156,113,231,198, 25, 90, 53, 52,181,227,234,193, 3,254,211,255,228, 63,225, 71,127,228, 71,248, 47,255,248, 31,167,239, -122,222,250,214,155,188,247,206,187,124,254,243,159,231, 71,127,244, 71,121,253,245, 55,248,147, 63,246, 99,124,251,157,239,112, -180,145, 38,197,200,106,181, 66,151,177, 96,101, 29,221,208, 11,155, 60, 69,118,187, 29, 85, 85,203,110, 41,139, 53,206, 90,135, -143,114, 33,170,172,197,230,129, 20,123,108, 46, 86,182,130,101,253, 27, 29,191,127, 24, 67,224,233, 2,125,205,249,157,143,255, -169,190, 75, 19,153, 15, 11,249,148, 80, 41,147,163, 92, 16,166, 0, 9,165, 53,202, 85,232,166,197,206, 22, 84,222,131,214, 84, -190, 21, 86,188,143,116,131,103,179, 27,232,123,143,239, 18, 49,120, 76, 93,149,219,255,244, 20,166,189,240, 39, 39,245,140, 64, -238,250, 56,253, 89, 92,242,244, 21, 79,120,225,125,104,210,228, 95, 85,194, 26,139, 65,216,243, 70,203, 24,214, 16, 11,137, 45, -224, 7,216,110,215,172,214, 87, 52,231, 79, 88,158,156,113,114,122,131,211,179, 51,218,147, 37,139,197, 66, 2, 55, 42,131,118, - 66, 54,211,133,143, 45,127, 95,122,230,162,117, 72, 80, 84, 71, 26,152,195, 26, 75, 23,173, 93, 74,224,251,145,126, 16,232,137, - 37, 99,172,145, 53,134, 14,196,172,240, 94,172,102,179, 89,133, 31,165, 35,210, 40, 17, 82,229,120,184,140,165,204,205,179,133, -168,229,179,168,135,155,155, 53,171,213,154,161, 79,220,186,189, 20,203,155,145, 96,164,109, 63,224, 19, 44, 79, 22,172,183, 91, -102,139, 57, 79,186,192, 59, 79,214,212,214,178,219,246,156, 46, 27,118, 99,224,172, 85,124,230,249,231,120,231,189, 13, 23, 38, -243,110, 74,188, 28, 2,175, 25, 67,149, 44,137,138,160, 51,219, 60,114, 63,121, 46,115,228,244,198,156,239,253,254,239,225,108, -233, 72,227,192,175,253, 82,205,246,201, 95,102,117, 53,150,187,152, 98,236, 37, 87, 32,132,145, 24, 71, 82,240,164, 88,145,167, -214, 93, 75, 10, 29,198,161, 77,133,182, 21,166, 48, 19, 92, 93,163,141, 23, 57,233, 96,241,122, 26,224,107,177,136,141,158, 56, -140,116,219, 45, 87,151,151, 92, 92, 92,240,248,241, 67, 86,151,231, 98,199,139, 53,219, 46,115,239,188,231,114, 28,185,223, 95, -242, 15,254, 51,191,151, 63,250,135,254, 35,186, 16, 81, 65,168,159, 89,193, 42, 6,214,187, 13,183, 98,135,122, 48,242,203,111, -190,195,243, 39, 51, 94,125,225, 22, 47,223,156,115, 82,213,228,228, 57,127,114, 65,223,201,243,168,178,198, 25, 57,159,115, 74, - 50,102,182, 72,115,160, 53, 57, 13, 4,223,163,103, 11, 81,149,187,226,129,119,142, 49, 37,162, 82,172,251,129, 33, 71, 9, 98, -205, 2,133,153, 40,103,249,154, 79,253,144,214,104, 38, 94,126, 89, 33, 26,163, 75, 14,131,224,200,199,224,241, 62,210, 23, 23, -143, 15, 18,108,101,140,166,105,148, 20, 54,155, 36,222, 28, 45,244, 60, 20,218,102,148, 13, 68, 60, 62,101,186, 49,176,238, 6, - 58, 47,228,181,156, 15,141,225, 36,232,155,118,255,141,181,180, 77,216, 83, 35,235,186, 97, 54,107,152,207, 91,234, 89,139,173, - 44, 33,101,172,143,194, 32, 16,244, 35, 49, 33,252,130, 50,194,183,197,154,102,157,161,178, 10, 91, 98,137, 99,200,108, 55, 35, -227,152,104,135, 72, 51, 38,102,243,145,122, 54, 98,155, 1, 21, 70,116,189, 64,185, 90, 10,122, 89, 71,100,244, 62,216, 76, 68, -232,186, 36, 62, 76, 81,216,153, 28,124, 33,205,245,228, 16,101, 2, 19, 2,230,214,114,246,175, 31,118,229, 92,203, 42,207, 74, -237,111,238,146,135,171,246, 64,144, 3,225,109, 26,149,199,253, 8, 69, 4, 74,197, 48, 31, 11, 49,174,252,133, 33,148, 75, 64, - 16,224,199, 30, 13,155,143,243,220, 14,249,184,123,112, 96,137,221, 99,207, 23, 47, 29,144,210,251, 28, 89, 83,178,138, 49,114, -187,115,206,238, 25,185,166, 16,202, 82,201, 58,142,202,160,116, 67, 51,187, 65,204, 53, 15,207,183,220,125,116,129, 87, 21,203, - 27, 47,130, 59, 1,179,224,244,236,121,154,246,132,171,237, 14, 91, 57,214,235,115,172,133, 56,121, 65,203,193,120,214, 84,204, - 13,204,156,102,117,117,206,229,250,146,243,203, 11,250,110, 75,238,119,248,237,138,251, 15,222, 39, 19, 89,158,158,178, 88,158, -114,235,230,115, 60,122,124,206,157, 23,238,176, 92, 44,249,249,191,252,151, 81, 74, 81,213, 53,247,238,223,227,245,111,190,206, -103, 63,253, 25,126,219,111,253,251,185,115,251, 54,231, 79,158,176, 94,175,247,215,152, 73,109,150, 82,162,170,228, 86, 57,107, - 91,172,177,184,202, 73,178,145,147,241,145, 46,224,136,126, 28,247, 66, 13,194, 6,252, 5, 86, 5, 84,158, 84,153, 9,133, 40, - 98,213, 33,142,239,153,145,244, 49, 39,224, 90,228,226, 81, 75,255, 97, 86,177, 67,225, 87,197, 99, 89,118, 91,199,140,232,163, - 63,167,143, 50,206, 81, 96, 20,204,234,134, 91,103,103,220,186,117,139,118, 62, 71, 91, 39, 74, 82,142, 98, 97, 11,177, 80, 84, -166, 66,138,170,234, 26, 87,201,135,209,134, 28,101, 31, 55,198, 40,163,249,148,158, 25,177,167,116, 88, 5, 77, 29,250,212,209, -164,167,149,240,240,148,215, 93,145,149,190,254,253, 79,136, 95,107, 49,206, 96,156,198, 90,208, 58,210,180,154,147,147, 10,133, - 4,243,132,152,196,254, 52, 14,116,219, 53,221,118, 67,183, 89,211,119, 91,250,126, 32,120,177, 71,165, 16,137, 49, 31,222,115, -123,144,211,177,214,133,167, 46, 36,211,247,199,181,223,171, 82, 38, 36,136, 81, 49,172, 47,249,169,255,230,143,179,189,255, 62, -202, 7, 66,200,248,148,152, 47,140,236, 37,149,101,232, 3,183, 78, 27, 44, 9,101, 29, 23, 23, 61,139,121,141, 82,162,240,175, -234, 10,163, 27,186, 62, 16,131, 47,120,223,136,211,134,190, 31, 57, 57, 89,176,235, 6,148,242, 40,163, 72, 89,179,222,142,184, -170,194, 56, 45,158,107,219,240,173,199, 43, 60, 48, 87, 6,171, 20,231, 67,143,173, 45,117,202,156,157,148, 53, 83,159,232,124, -192,231, 76, 54,134, 78,193,144, 35,171, 20,184,159, 19, 79, 72,184,218,242,119,125,245,251,248,129,207,127, 22, 21, 18, 70,107, - 28, 25, 66,224,205,187,143, 48, 90, 81, 27, 88, 84, 10, 87,101,154,214, 81, 85,117, 17,181, 57,156,171,229,223,171, 6, 91,207, -153, 47,150,204, 78,150,204, 79,150,212,243,150,122,214, 96,234, 10, 76, 73, 30,143, 1,252, 8,222, 75, 39, 21, 2,190, 27, 24, -182, 27,214,107,249,216,172, 87,108,174, 46, 25,187, 13, 67, 31,120,180,169,249,250,253,129,175,175, 18,119,189,225, 73, 82,188, -243,232,156, 71, 23, 23,164,156,113, 25,110,161, 88,238, 89, 11,137,207, 63,127,198,103,150,115,218, 16, 25,188,231,151, 31, 92, -240,164, 27, 72,202, 48,115, 13,219,135, 87,116, 93,194, 90,205,172, 53, 60,127,251, 38,179,102,198,118,187,195,213, 21,218, 56, -124,212, 44, 22, 75,226,216, 97,194,142,198, 89,214,157,199,204, 78,105,150, 39,248,152,232,252, 72,172, 42,122, 96,136,194,237, - 15, 73, 70,224,195, 24, 25,188, 32,146, 67,148,238, 61,164, 44,103,254, 52,254, 46,105,108, 62,202, 10,214,135,136,247,242, 53, -247, 62,178, 27, 60, 93,239,217, 13,129,110,240, 12, 99,113,142, 40,141, 49, 66,217,108,154,134,186,174,169, 42, 87, 86, 67,154, -152,193,199,204, 88, 58,253,193, 71,250, 16, 9, 49,239,189,220,185,100,193,103, 14,148, 74,103,141,136,166,231, 45,167,203,150, -147, 69,203, 98, 62,219,235, 88, 92, 93,236,129,147,198, 44, 22,180,116,136,101,162,144,174,137, 99,173, 81,184, 2,204,169, 92, -133,214,150,156, 53, 33, 36,161,224, 13,125, 1, 17,133, 50, 1,140,101,242, 25,143, 98,201,203,244,185,156, 29,135, 96,217,130, -207, 45,138,180, 73,252, 27,199, 81,162,159,251,129,161, 31,158, 18,202,229,103,188,249, 18, 41, 56,117, 86,249, 89,252,244, 36, -121,203,229, 69,141, 73,198, 38,222, 39,140, 14, 50,146, 40, 28,228,227, 12,235, 84,240,132,185, 32, 6,213,116,248, 21,170, 16, -133,198,163,212,193, 5, 53,165,134,113,124,224,151,170,170,143, 9, 96,165,163, 19,203,196,129, 99,175,180,248,188, 99, 86, 52, -205, 9, 89,183,188,241,214,187, 92, 60,185,162,105, 90, 94,253,244, 23,152, 47,207,168,155, 5, 15, 31,159,243,232,254, 3,134, - 48,178,122,252, 24,159, 70,206,110,157,178,219, 40, 6, 63,200, 69, 68, 29, 46, 33,163, 15,172,125,230,219, 31,220,165, 27, 2, - 67,206,248, 44,183,254, 6,152, 23,114,210, 7,119,223,101,215,109,249, 53, 95,252, 94, 62,255,185, 95, 67, 55,246,252,223,254, -207,255, 9, 63,250, 79,252,147,252, 71,127,232, 15,129,214,108,135, 30, 3, 92, 93, 92,240,147,127,246,207,242, 11, 63,255,243, -252,186,239,251,117,252,115,191,247,127,206, 95,252,217,159,229, 79,255,217, 63,195,213,234,138, 12,146,233,157, 97,187,221,114, -178, 88, 22,124,162, 7, 52,195,216,147, 21, 56,215, 18, 17,225,157,120, 90, 19,181, 81,196,209, 23, 75,147,154, 20, 20,251,199, -125, 18, 56,230, 15,149, 82,169, 15,129, 57,124, 8,128,244, 67,186,216,227,124,229,253, 15,247,195,219,253,189,226,120,162, 67, -229, 41, 14,162, 92, 4,130,247,248,113,192,120, 41, 0,134,170, 64,106, 74, 96, 74, 93,161,212, 66,114,138, 71, 47,111,128,144, -168,125,192,185, 10,103, 52,171,245,154,180,237,100,202,209,203,104,213, 88,119, 8, 90, 57, 42,234, 19,198,248,248, 35,166,124, -173, 88, 62,221,169, 79,185,238,234,233,203,143,210, 96, 42,172,138, 24, 34,235, 97,195,147, 71,247,248,228, 39, 95,193,213, 30, -255,248, 10,163, 90,177,100,197, 68,138,153,174,219, 48,244, 91,186,221,138,250,234,130,171,203, 83, 78, 79,207, 88, 44,207,152, - 45,230, 52,179,133,240, 9,106, 89, 73, 76,128, 18,173,203,100,107,186, 96,233,227, 11, 23,251,213,155, 42,110,150,168, 12, 41, - 4,186,205, 6, 83,108,111, 83, 87,162, 13,140, 49, 74, 54,119,153, 48,204, 26, 67, 40,135,146, 86,242,223,107,101,112, 78,112, -159, 87,125,192, 42,197,144, 18,166, 22, 10, 88,215,111,105, 42, 91,176,168,129,186,118,116,125,130, 44,129, 39,182,105,184,247, -100,195,233, 89,195, 7, 23,107,250,152,152, 25,168, 83, 68, 59, 73,186,235,214, 43,162,134,106,105,249,225, 47,126, 10,211,156, -113,190,217,241,228,242,130,135,231,231, 60, 90,173, 9,253,192,166,247,116, 49, 51, 51,138,223,244,189, 95,224,135,191,252, 61, - 56,239, 75,164,111, 2,149,185,115,235,148,121, 45,137,124,117, 5,174,209,100,147, 14, 36, 48,227, 4, 50,100, 43,172,173,209, - 86,198,241,202, 58,180,173, 80,211,135, 41, 69,192, 54,228, 28, 80, 69,235, 66,229, 72,157, 34, 42, 8, 57, 16,252, 64, 24, 7, -188, 31, 25,199,145,222,123,118, 30,222,189,204,252,194,197,150,203, 1, 78,116,195,205,106,206,187,253,138, 55,191,243,237, 66, - 65,180, 52, 57,240,105,167,153,187,138,183, 6,207,121,204,124,241,213, 87,249,245,175,188,192,155,223,120,139,175,191,251, 62, -189,202,124,176, 89,115, 53,142,216,143,127,140,113, 43,150, 59, 99, 53, 57, 65,211, 72,192,142,177,166,140,151,165, 17, 8,193, - 51,175, 29,201, 79, 19,190, 34,104, 78,197,206,156,181, 76, 50,162,184, 6,136,226,148, 26, 99, 96, 44, 1, 71,114,113, 53,251, -216, 84,165, 64, 79, 28,146, 20,247,186,157,137, 82, 42, 19, 60,133,143, 25, 31,202,135,207,210,169, 23,145, 71,140,144,145,194, -238,170,154,170,174,105, 42,121,191, 91, 23, 72, 72,247,236,189,103, 24, 2,253,232,233,203,170, 55,149,166,161,120,217,138,195, -202,236,171,215, 52, 77,216,227,101, 53, 5, 18, 83, 26, 70, 37,175,131,210, 2, 55,154,104, 53,186,156, 75,169,228, 80,168,156, - 10,136, 73,154, 15,201, 10, 80,228,108, 25, 75, 40,204, 56, 14,244,187,158,221,118,199,124,177,163, 93,118,212,203, 1, 59,155, -163,219, 30,237, 26,172,109,208,186, 65, 41, 73,252,147,245,157,229, 8,205, 86, 38, 36, 73, 46, 7,209,147, 67, 32, 12, 25, 63, -246,216,107,138,228, 9,205, 57, 37,193,112, 72, 72, 83,135,150,237,240,235,163,163,107, 58,208, 99, 46,210,255,148,136, 58, 19, -146,220,134,149,214,215,212,213,249,248, 48,207,249, 32,160,152,178,211, 17, 16,129, 82, 74,210,161,142, 58,157,103,186,159,167, - 72, 91, 83,225, 80,121,130, 32,136,178, 79,105, 67, 72, 10, 91, 47, 9,121,198, 27,111,188, 75, 86,142, 87, 62,253, 25,154,182, -165,170,150, 84, 85,139,115, 53, 31,127,105, 9,163,103,123,249, 16,191,217, 18,135, 29, 79, 30,110,241, 97, 32,230,242, 80,228, - 32,223, 91, 78,244, 49, 19,157,229,162,243, 40, 45,183,215,124, 92,136, 70,207,172,109,100, 36, 51,238,120,243,141, 95,226,165, -231,111,243,240,241, 3,214,155, 43,134,205,154, 79,188,252, 50, 15,214, 43,208, 2,229, 8, 93,199,253,113,160, 94,205,120,244, -224, 17, 47,191,244, 10, 95,253,234, 87,249,202, 15,124,133, 63,252, 71,254, 48,175,191,241, 58, 33, 10, 63,123, 12, 61,182,178, -248,232, 89,111,214,220,188,117,131,221, 48,160,208, 52,213, 9, 73, 67,239,123,124, 18, 55,186, 99, 32,141, 91,114, 50,196, 18, - 3,170,212, 88, 34, 23,244,179,254,244,167,138,146, 46,151,129,201,177,112, 8,236,249,104, 66,202,222,195, 58,125,254,130,215, -156,208,209,138, 99,191,187, 56, 21, 72,169,168,218, 51, 58,235,189,142, 35, 70, 9,253, 24,250, 14,211, 88, 17, 85,161,176,100, -180, 17,173,131, 53,134, 88, 53,162, 54,173,229, 64,209,222, 99,130, 71, 87, 50, 42, 51,174,188, 81,175, 54,236,186,145, 97,240, - 24, 27,229, 80, 50, 83,166,189, 92,136,210,244, 74,168, 67,154,156, 81, 92,179,152, 9, 4,227,128, 45,222,251,102,143, 52, 4, -178,159,212, 40, 85, 67, 30,169, 43,131, 55, 1,223, 93,240,230,235, 87,188,252,241, 87, 88, 93, 60,224,115,159,253, 50,247, 30, - 92, 16,180, 34,165,226,149, 79,129,190, 91, 49,250, 45, 99,119, 69,191,185, 98,179,184, 96,190, 56, 97,177, 60,101, 54, 95, 82, - 53, 53, 85, 93,225,170,170, 92,170,245, 30, 6, 34, 48,137, 50, 49, 48,122,191,227,220, 99,105,147, 34,102, 77, 10, 35,227,250, -138, 26,141, 31, 34,214,148,239, 41, 3,186,194,170, 14, 31, 2,149,115,204, 27, 77,231, 7,146,182,120, 15,182,245, 36,163, 48, -166, 34, 38,143, 1,210,216, 81, 25, 45, 99,213, 8,207,159,205,232,183, 29,235,117,199,236,164,225,106,227,153, 55, 53,187, 93, -207,217,233,140,135, 87, 27,176,134,213,168, 88,245,145, 86, 89, 76, 14, 56,147,168,108,230,246,178,162,157, 55,100, 50,151,151, - 87, 12,195,136, 86,134, 27,103, 55,121,229,229,155, 44,190,240, 9, 89,113,216,138,221, 40,170, 99,103, 13, 55,110,156,160,195, -192, 48,246,132, 97,192,239, 86,164,193, 19,134,158, 59,179,154,126, 24,153, 47, 42, 82,147, 48,243, 57,186, 94,162,170, 57,186, -154,161,221, 12,227, 90,140,173,247, 93,163,169, 27, 92, 59,195,212, 13,166,170,197,239,175, 53, 73, 75,124, 40,214,128, 21, 8, -142, 53,137,172, 35,209, 68,114,246,132,236,137, 41, 16,115,164,247,137,123, 87,138,208,222,194, 95, 94,225,116,228, 21,171,185, - 21, 71,182, 4,206, 85, 70,101, 43, 17,181, 6,190,244, 66,141,223,141,220,237, 61,184,138,143,127,254,115,124,254,139,175,176, - 60, 89, 82,181, 21,124,243, 77, 76, 24,121, 18, 34, 95,123,239, 62, 47, 36, 69,171,117, 1,192,128,115,150, 20, 7,241,158,163, -113,182, 66, 69,177,176, 85, 70, 51,168,140,178,146, 67, 97,181,150,247,128,207, 56, 83, 17,202,232, 59,145, 40, 33,105,132,172, -132, 70,154, 68,173,110,132,120,179, 79,145,212, 66,150, 41,247,248, 40,225, 32,251,251,255,116,150, 76,174, 39, 85,246,223, 98, -115,211, 81,186,253, 24, 68,244,152, 83, 46,182, 84, 83,194,149,116, 17,193, 69,250,190,161,107,122,250,190,162, 31, 71,129,211, -228,116, 32,205,165,124,116,202,232, 35,109,150,124,109,102,234,142,167,247, 75, 86, 40, 25,122,179, 47, 38,229,103, 76,153, 76, -234, 12,166, 56, 60,140,202,101,244, 78, 17, 27,154, 67, 72, 5,138, 97,180,140,253,200, 56,238, 24,186,145,121, 55,208, 14, 3, -179, 69,135, 93, 46,112, 77, 11, 85,131,113, 51,148,105, 80,182, 45,194, 61, 77,102, 74,161, 44, 95, 95,206,216, 28,104, 72, 98, -193,211,154, 72,252,112, 75,219,135,169,225,127,101, 9, 91,215,255,236, 52,226,139, 49,238,199,168, 7,112, 70,186, 54,178,205, -199,221,217, 83,197,250, 24, 75,171,180,136, 36, 62,204, 98,164,148,226,186,182,250,184,123, 20,242,144,117, 51, 80, 53, 95,255, -198, 55,185,113,251, 5, 78,206,206, 24,125,135,177,146, 66,101,148, 0, 91, 98, 8,116,221,192,163,199, 23, 68, 47, 35, 77,223, -239, 4,249, 88,210,136,212,209,247,228,163,120,110,173, 53,248, 16,143, 10,161, 92, 66,116, 85,179, 60, 59,227,222,253,251,244, - 62, 98,171,154,191,248, 51, 63,197,107,175,189,198,233, 98,201, 95,249,133, 95,224,203,223,243, 61,252,177, 63,241, 39,104,150, - 51, 76, 86, 56, 5,129,132,138,226,229,125,255,131,119,249,115,127,126,224, 31,255, 61,191,135,223,246, 91,127, 43, 15,254,227, -123, 60, 58,127, 66,202,138,170,105,104,218,134,172, 21,202,106, 86,155, 13,109, 83,177, 9, 91,188,135,213, 48,210,231,136, 49, -142,106, 81, 17,135, 14, 21, 37,208, 65,105,158, 82,164,171,191,161, 93,250, 71, 17,229,246, 1, 41, 42, 93, 19, 55, 62, 29, 41, -154, 39, 81,156, 58,190, 84,168, 18,166,162,246, 36,173,174,235, 24,118, 61, 85, 93,161,141, 69, 43, 91, 46,162,230, 80,116,109, - 85,110,225,114, 24,164, 42,144, 99, 32, 56, 97, 39, 75,183, 85, 58,172,203, 13,113,219,225,199,158, 16, 52,174,114,184,130, 5, -182,214,124,168, 32,112, 90, 65, 73,142,123,218, 91, 76, 38, 81,227, 52, 66,211,250,105, 95,121,134, 60, 98,109,102, 62,171,113, -156,241,240,131,154,215,191,249, 58,119,110,191,128, 70, 17,195,200,237, 27,103, 60,120,178,146, 21, 69,202,135,227, 40,102, 24, - 3, 97,179,165,143, 25,229,131,192,110,198,158,208,180,196,186, 38, 86, 21,177,154,212,194,250, 48, 49,155, 58, 40,107, 37,133, - 81,151,253,228,228, 55, 78, 25, 98,100,123,249,132,182,174, 36, 34, 83,137,231,218, 90,241,247,199,161,112,186,107, 43,182, 78, - 47, 80,154, 62,100, 78,202, 14, 86, 44,172, 34,136, 21,118, 75,162, 31, 60,139,121, 67, 74,176, 90,141, 84,141, 33,102,161,216, - 13,222,115,122,182,148,157,186, 79, 44,206,230, 60,188,218, 96,116,194,184, 76,101, 21,149,211,204,103, 21,205,172,198, 22,118, -246,172,169,209, 74,120,216, 90, 5,188,223,242,157,239,124,128, 86,154, 27, 55,158,163,157, 45,113,206, 74, 96,240,118, 43, 43, - 56,165,200,253,192,110,189, 99,187, 94,115,113,126, 69,221, 84,196,148,153,159,157, 81,181, 48,107, 90,154,102, 65,213,204,113, - 85, 75,221,204, 48,238,128,246,116,174,194, 89, 43,211, 29,109, 48,133, 40, 7,186,156,101, 86,246,238,218, 8,184,164,178,164, - 81, 94,235,168,197,159,156,180, 56,135,238,190,191,227,228,206, 77,190,252,185,207,241,232,207,253, 21,190,125,177,198,231,142, - 89,180,124, 81,201, 4,229, 97, 26, 57,211,153, 31,122,174,225, 99, 39, 13,247, 98,194, 40,207, 11, 39, 11,190,231,115,159,227, -214, 11, 55,228, 50,145, 21, 87,231,107, 62,222, 86,168,155,167,252,228, 79,254, 28,155, 82,143, 78, 77, 13, 57,209,214, 53,155, -245,138, 24, 19, 86,233, 98,235,117,196,232,177,109,131, 87, 82,208,135, 16, 80,101,237, 20,115, 42, 16, 22,209, 77, 73, 7,158, - 8, 58, 18, 84,216, 83,221,180, 86,123,210,232,241,185,175,167, 58,158,147,240, 56, 68,117, 38,236,146,132,128,120,202, 46, 61, -196,201,154, 38, 89, 10, 90, 27,234,202,209,212,142, 93, 39,127,191,179, 14, 83,201,197,161,170, 44, 77, 83, 51,155,181,116,187, -129,174,239,233,124,197, 48, 6, 98,242, 37, 25,238,163, 49, 14,234,218,180, 87,237, 39, 8, 7, 17,175,218,211, 1,117,249,189, - 70, 75, 82,156, 66,239,195,104,244, 17,233, 84,190,238, 3, 76,199, 26, 75,182, 9,157, 36, 93,178,239, 7, 98,138, 12,193, 51, -142, 35,141,247, 84,237, 64,213,206,112, 85,196,212, 1, 83,133, 34,158,115,251,149,115, 54, 70, 56,116, 85, 35,121,236, 74, 99, -141,163,170, 5, 90,100,127,165, 7,181,250,235,228, 83,170,167,196, 57,147,194,126,234,100,166,162,190,231, 22,151,142,140, 15, - 73,255,122,166,208,239,147,188,212, 51,216,209,125,118,251,212, 81,237,203,187, 34, 82, 81,213,167,124,235,173,247, 56, 57,187, -201,237, 59,119,184,184,186, 32,165,129,110,183,162,109, 87,116,221, 64,202,176,221,238,120,244,240, 62,219,113, 93,136,120, 94, -242,144,243,100, 1,153,244, 4,153,211, 91, 55, 25,134,192,110,183,185, 6,143,145,188,115, 67, 78, 10,165, 29, 63,240,235,191, -202,127,251, 39,255, 27, 98,240,248,156,184, 92, 95,242,240,225,125, 62,243,169, 79,243, 51,127,225, 47,240, 3, 95,253, 42, 57, - 5,186,110, 39,152, 72, 99,101, 4,150, 35,187,161, 67,231,158,102, 85,243,198, 27,223,228,215,126,207,151,184,113,227, 6, 15, - 47,158, 20, 24,136,147,155,169,151, 55,214,242,228, 6,195, 24,209,121,144,236, 99,229,100, 84,150, 51,217,143,140,113,141, 13, -131, 92, 56,179,222, 51, 9,210, 94, 59,241,215,250,217,170,143, 76,100, 83,223,165, 83,207,101,210, 35, 14,135, 35, 18,205, 84, -188,149, 58, 26, 92, 79,147, 25,181, 39,206, 37, 68,208,211,117, 29,219,245,150,249,108, 67,229, 36,207, 88, 77, 55,217, 56,141, -200, 74, 38, 65,137, 73, 85, 6,148,115,226, 37, 50,166,140, 77, 29, 88,139,178, 21,166,106, 48,151,107,182,155, 13,195, 40,106, -224, 80, 72,126,198,216,189,122,253,195,146,233,142, 71,240,215, 96, 52,249,224, 40,209, 71,157,177, 82, 17,157, 71, 84, 78, 60, -124,240,152,243,135,239, 50,159,205,185, 56,191,228,221,239,188,207,114,126,194,147, 71,143, 88, 44,111, 48,171, 52,109,101,138, - 54,197, 72, 40, 71, 4, 77,194, 17,112,105,192, 38,133,246, 10,250, 0,121, 32,135,154, 48, 24,176,134,100,116, 25,135,138, 66, - 94, 23,246,129,178, 14,237, 44,217, 88, 1,124, 40,133, 46, 99,209, 24, 35,161, 91,145, 67, 39,200, 76,113,238, 96,156,221, 11, -228, 0, 9,163,209, 16,163, 38, 2, 49,129,115, 21, 49,130, 81, 81,214,119, 38, 99,172, 76, 1,170, 74, 83,213,150,213,106, 3, - 6,170,218,240,248,178,103,177,168,241, 99,100, 76,129,203,117, 79, 59,171,184,218,236,136, 41, 81,183, 80, 55,138,182,173,169, -235,154,186,109,104,219,185, 96,127,141,166,118,186, 88,157, 52,179,166, 41, 28,131,219,204,219,153, 0,139, 52,144,131, 16, 46, -203,186,202, 25,195,242,244, 6,103, 39, 39,108,183,107,118,187, 55, 80,186,231, 51,159,127, 21,211, 26, 76,149,153, 85,194, 90, -111,103, 51,234,186,162,106, 26,225,224, 87, 21,182,170,208, 78,180, 17,206,186,107,108,242, 28, 68,136,171,162,100, 92, 16,211, -126,138,165,180, 80, 7,141,107,112,117,196,185,142,171,203, 29,119,110,206,249,216,171, 47, 80,187,138,215, 94,126,158,175,159, -175,121,168,224, 5,157,248,204,178,229,227, 55, 20, 15,227,192,153,213,124,236,108,193,227,171,158,183,214, 61,151, 17,126,232, -123, 63,205,243, 47,191, 72,158, 57,236,201,138,249,233,156,231,111,158,240,201,207,127,150, 71,227,150,244,189,175,241,141, 95, -122,135, 97, 72, 12,195,200,141,153,100,215,163, 4, 40,131,150, 9,138,115,150,202, 90,130, 31, 49,198, 48,198, 40,231, 23,154, -224,227, 30,225,230,102, 13,181,209, 88,141,132,212, 16,240,153,253,251, 99, 18,132,238, 27, 49,117,160,130,198, 40, 69,219,143, - 94, 72,164,197, 90,118, 72,234,204,101,223, 46, 65, 75,114, 81,150, 41,226,174,239,169, 58, 71,189,171,228, 57,168, 66,185, 56, - 20,177,112, 85, 49,111, 27,134, 69,203, 48, 14,244, 62,208, 15, 35, 62, 68,194,148, 56,169,174,175,151,249, 8,144,214,177,174, - 71, 61,245,239,186, 60,119,214,136,106, 62,234, 84, 72,121, 92,179,237, 30,195,170, 50, 2, 96, 51, 90,163, 42,135, 77, 19,226, - 43, 49,142,158,120,181,198,247, 35,205,172, 39,206, 7, 98, 59, 98,155, 30,215, 54,216,170, 1,215,144,212, 20, 20,147,203,196, -192,162,105, 69,255,100, 44, 38, 70,112,245,161,168,255,138,162, 49,159,242, 26,127,183,223,159,203, 14,254,195, 14,192,235,234, -250,167,161, 24,207, 90,232, 82, 41,248,242, 2, 77,118, 9,253, 84,225, 47,249,208,199, 95, 65, 78, 40,109,247, 98, 33, 87,181, -188,249,246, 93,234,118,206,233,141,155,124,231,157,111,115,121,245,132, 97,216, 0,137,126,220,162,181,116,130, 62,120, 82, 78, - 82, 88,147,160, 9, 73, 7,229,118, 46,232, 83, 99, 52, 97, 28, 75,100,109,217,169, 20,161,159, 41,169,116, 70,107,126,224, 7, -126,144, 87, 95,251, 36,159,251,194, 23,121,235,205, 55, 88,111,183, 44,103, 51, 30, 62,122,196, 75,207,189,128,206, 10,167, 20, - 42, 6,114, 84,248,236, 81, 70, 44, 36, 49, 12,212,174,162,114,162,112,127,231,157,119,248,205, 63,252,119,178, 92,156,162,148, -161,174,106,102,243, 57, 49,103,106,231, 88,175, 55,188,190,122,157,229, 98,201,203, 47,190,132,188,237, 34, 74, 55,204,155,134, - 56,108, 24,243, 10,173, 7, 41,124,198,236,211,200,166, 29,107,230, 89,229,250,254,178,165, 14,124,244,167,119,230, 41, 31, 16, -191,170, 0,116,166,117,138,222,191,118,233, 96, 71,204, 5, 71,155, 63,132,118,166,158,218,221,167, 76,214, 98,225,232,251,142, -237,102,205,110,214,208, 56,139,177,210,137, 70,165, 72, 38,162,157, 43, 96, 11,246, 97, 48, 76,221,104, 22, 95,105,178, 30,140, - 69, 57,139,118, 21,174,174,169,235,134, 77, 83,177, 90,239,232,198,190, 4, 14, 69,192,238,223,148,236, 37, 38, 7, 96, 78,158, - 48,198, 73,147,172,150, 3, 43, 31, 36, 57,178, 67,151, 91,253,148, 61,110,117,192,170,200,249,234,146,135, 15, 30,114,178,104, -185,115,235, 57, 30,221,127,200,167, 62,253, 25,186,174, 35,250,142, 48,142, 56,215,208,206,230, 92, 93,174,168,171, 26, 35,222, - 40,172, 9, 84, 70, 81, 41,141, 83, 26,167, 21, 78,101, 44, 17,147, 53, 38,105,241,239, 7, 85, 40,129,153,172,197,246,151,141, - 28, 6,114,241, 41,246,165, 24, 64, 21,107,218,250, 2,167,161,114,154,156, 12, 33,141, 88,163, 24,199, 40, 99,249, 16,153,181, -114, 97, 8, 49, 19, 10, 62,120,244, 9,131, 65, 89, 65, 79,207, 22, 45,231,143, 55,180,109, 77, 24, 53,187, 93,143,202, 9,107, -145,172, 2, 39,196, 61, 87, 25,158, 92,110, 81,214,224,115,166,247,129,186,209, 52,115, 77,187,176, 52,237,140,186,153, 81, 55, - 45, 85,177,143, 25,165,105,141, 20,145,202,153,114,208, 58,172,211,210,201,153,105, 76,170,208,197,193,111, 84,233,172,157,197, - 42, 71, 93, 87,124,229, 7,127,144,205,166,103,219, 7,198,236, 81, 46, 83,169, 10,103, 28,117, 83,227, 42,139,173,202, 74,198, -217,253,179, 98, 43,153, 18, 89, 87, 73, 39, 86,108,107,199,161, 32,211, 51,104,108,137, 70,181,150,202,213, 52, 85,198,169, 13, -149,178,188,252,220,130, 42, 27, 24, 3,159,253,204,231,184,253,254, 67,206, 47, 55,188,173, 96,232, 59,206, 86,240,241,179, 22, - 98,224,189,187, 87, 60, 12,142,183, 54,112,122,235,140,223,254, 63,250,123, 56,107, 90, 82,191, 35,108, 7, 46, 46, 47,248,254, -175,254, 58, 30, 93, 60,228,252,209,123,188,242,220, 41,246,213, 19, 46, 30, 94,114, 50,215,220,190,125, 34,107,213,172,168,235, -154,164, 13, 41, 21,228,106,148, 64, 24,171, 37, 55, 34,100, 81, 92, 7,239, 25, 83, 68,207, 23, 96,101,114,101,148,156,183,222, -100,192, 95, 75,101,123,186, 8, 78,117, 35, 22,110,253,232,139,224,180,120,212, 67, 44, 2,207, 76, 73,238, 60, 80,229, 20,136, -248,109,144, 34,221, 15, 3,253, 48,210,212, 94, 46, 91,229,194, 45,110,167,154,197,208,210,117, 3,179,126,160,235,164, 91, 15, - 33, 18, 38,140,114,206,215, 51, 16,242, 71, 64,152,166,142, 61, 63,157, 7, 49,229,185,235,167, 18,232, 14,152,219,227,198,116, - 95, 91, 21, 88,163, 36, 7,162,156, 71,185,164,192,133, 24, 24,118, 3,177, 15, 12,219, 30,219,108,112,109,203,108,185,160,110, - 27, 92,179,192, 84, 75,112, 86, 26, 18,177, 15,144,208, 66,190, 51, 34,252,117,182,198,254,245,118,224,127,189, 99,248,143, 10, -150,216,195,195, 38, 37,125, 74,152,146,231, 62, 5, 89, 28,119, 70, 83, 97, 63,220,254,242, 81, 58,209,225,243,234,124, 64, 94, -230, 50, 33,208,218,162,148,101,179,235,233,135,129,147,155, 55,120,231,221,111,115,126,249,152,245,234,130, 20,199,242, 14, 52, -226, 13, 84, 25,171, 68,152,145,130, 88, 62,152,116,147, 5,204,161,202,141,100, 62,107, 48,192, 56,116, 52,102,130, 44, 40,180, - 21,145,197,201, 98,193,231, 62,253, 5,190,244,107,126, 13, 70, 91, 22,203, 83,154,217,130,121,219,208,109,214,140, 97, 36,101, -120,241,197, 23, 24,250,142,121, 83,211, 21, 15,101,244, 65,184,196, 41,161, 80,197, 49, 16,121,248,248, 49, 49,102, 78, 79,206, -112,214, 21,165,165,208,184, 82, 74, 52,117, 77,223,143,108, 54, 3,111,127,231,219,220,188,117, 11,237, 22, 56,151,113, 68,110, - 54,145, 97,183, 66, 89,121,109, 76,114, 18,154, 80,134,187, 74, 95, 15,204,249,176,184, 78,117,116, 43,157,138,123,140,177,140, -162, 15,254,244,156,210,126, 77,113, 12,153,157,210,209, 14,111,168, 41, 32, 37,149,173,187, 46,111,166,130, 60,206,236,179,199, - 83,134,126,232,216,172, 87,204,103, 53, 77,109,112,141,197, 58,139, 51, 10, 93,213,229, 38, 43,204,239,131,111,118, 18, 88, 32, -212, 47, 99,177,198,162,173, 41,113,153,133, 27,158,130, 92, 78, 58, 69, 55, 72, 90, 30, 49, 72, 60,106,209,151, 40,253,244, 5, - 84,224, 26, 89, 75, 58, 86, 46, 5,125,202,116,214,133, 16,163,205, 36,124, 81, 24, 45,118,186,166,114,212,149,132,106,220,185, -117,155,211,147, 27, 92,156,159,163,173, 97,187, 93,113,243,230, 77, 82,130,247,222,123,155, 55,223,250, 14,159,255,252, 23,121, -238,246,141,146,133, 14,218, 36,148,142, 64, 32,165, 81,246,154, 41,203, 88, 61,201,215,172,179,218,239, 0,115,146,144, 20,144, - 41,208, 36,108, 72, 41,161,189,240,200, 67, 6,223,109,216, 92, 93, 17,252, 88, 86,136,197, 83,159, 4,190, 97,108, 66, 91,240, -126, 64, 41,133, 79,105,143, 45,202, 41,161,181,232, 22,182, 91, 79,213, 86,236,134,145, 49, 26, 66, 12, 84, 90, 81, 87,150,205, - 46,208,214, 14,235, 42, 46, 87, 29, 99,210,212,181,101,219,143, 88, 7,205, 76,211,206, 44,205,172,102,177,152, 51, 95,156,226, - 92, 67,221,136,203, 67, 43, 69,163,237, 62,101,210,150,115,195, 88,133, 53, 22,156,112,200,141, 18, 47,189, 81, 10,103,220, 53, -110, 5, 36,188,247, 56, 87, 51,143,138, 49, 71,146, 10,104, 28, 70,203,133, 81, 27, 74,138,158, 41,197, 89,242,178,181,158,242, - 45,196,186,151,148, 66,169, 36, 40, 88,201,168,221,239,141, 81, 6,231, 26,140,245,180,179, 25, 49, 87,108,103, 61,159,249,212, -103,121,231,219,239, 48,236, 70,162, 95,179,188,233,248,251,126,224,215,240,231,254,234,155, 92,237, 6, 54, 97,228,172,203, 60, -222,121,186, 24, 88,145,121,232, 61,205,173, 27,252, 67,191,251, 31,230,229, 79,190,202,229,230,130,205,163, 7,248, 39,151,124, -226,181,215, 88,173,207,233,245,200,139, 31,187,133,233, 7,134,214,146,230,138,166, 86,156,158, 44, 36,112, 40, 4, 76,211,224, -163,220, 66,156,209, 88,171,232,183, 61,167, 51, 67,239, 7, 50, 10, 31, 18, 58, 4,250,232,153,181, 53,217,137,203, 72,208, 22, - 25,165,227,245,206, 86,233,107,103,181,209,215,151,161, 49,231, 98,129, 19, 22,190, 0, 98, 74,223,154,229,124,141, 49, 29,116, - 44, 18,164, 78, 55,142, 84,189,101,215,245, 52, 77, 77, 93, 85,212,141,100,148, 87, 90, 99,173,161,170, 44,109, 83, 51,111,107, -118,125,195,110,215,179,235, 71, 6, 45,107, 4,166, 36,208,103,114,141,243, 51, 66,221,195, 92, 50,239,167,147, 90,107, 65,160, -107,233,212,157,209, 36,157,138,246,171,224, 95,175, 77, 40,244, 94, 52, 36,123,249,178,134, 48,166,196, 45,107,114, 42,204,150, -126, 96, 28, 71, 54,221,142,152, 51,182,114, 44,150, 39,204,151, 75, 22, 39, 3, 85, 59, 8,104,171,170, 80,206, 21, 10,157,164, - 2,166,164,193, 68,204,211, 68,185,255, 95,253,223, 51,252,240, 35,174,184, 74, 34,190,208,229,150,118, 28,241, 58,165, 0, 77, -126,228,169, 91, 86, 90, 31,254, 59, 50, 98, 44,180,203, 98,157, 18,209,195,249,249, 99, 94,120,241, 69,238, 61,184,203,122,189, - 98,189,122, 66, 78, 30,171,229, 5, 55, 40,218,214,113,186,108, 81, 68,134,193,211, 13,129,222, 7,124, 46,214,187, 36, 10,223, -202, 90, 42, 87, 49,115, 53, 49,140,156, 84, 6,231, 42,102,141,100, 51,159,158,156,178,152, 47,104,155, 57,167, 39,183,137, 93, - 7,109,139, 31, 34, 15, 31,157,243,218, 39, 94,197,184, 74, 56,236, 10,174, 86, 87,204, 78,103,156,158,158,176,123,252, 4,109, - 20,149,105,184,125,231, 69,190,247,251,190,151, 47,125,239,151,121,254,197,231,249, 3,255,230, 31,224,209,147, 11,158, 92,174, - 56,187,113,139,182,105,168,171, 70, 64, 39,202, 80, 87, 21, 39,243, 37, 77, 21, 72,202,161,212,200,227,243, 71,132,116,201,243, -207,189,202,220, 69,134,126,131,138, 29, 3, 90,240,184, 25, 76, 78,232,164,176, 86,139, 32,173,236, 6,159, 30,175,239,247,226, -215,146,190,244, 97,154,146,211, 53, 72,203,241,255,239,169,205,185,188,175, 38,177, 73, 17,195,149,164, 67,140,150, 0,147,227, -221,149, 53, 37,239,216, 26,154,218,162,141, 40,246,201,137, 28, 61,132, 17, 98,133,194,149,124,130, 92, 60,217,105, 31,237, 58, - 41, 69, 4,244,160, 80, 88, 12,224, 98, 36,249, 81, 62,191,209, 56, 43,135,132,241, 70, 20,166,193,139, 94, 65, 85,242,198, 85, -250,218,229,102, 58, 36,142, 95, 27, 77, 42, 22,193,105,199, 92, 14, 57, 35, 66,193,113, 28,249,133,159,255,203,196,208, 51,142, - 91,186,237,154, 87, 62,246,113, 94,251,196, 43,124,229,249, 23,184,247,232, 33,207,221, 57,195, 25,205,249,147, 11,186,221, 6, -109, 62, 41,226, 42, 20,179,118, 46, 20,176, 50, 10,214,166, 70,235, 10,109, 26,193,230, 26,185, 68, 24, 35, 2, 41,179,207,174, -158, 70,241,101, 57,149, 37, 42, 54,231,145,224,199,210,213, 8, 15,156, 28, 73, 41, 22, 37, 47,248, 24, 25, 70,168, 43, 83,116, - 70,162,138, 15, 9,134, 20,152, 16,232,214,200,229,199,185,138,148,122, 92, 85,211,141,158,237, 16,112, 86,225,156, 35, 71,121, -109, 78,150, 51, 30, 93,238,232,199, 36,211, 40, 31, 25, 99, 98, 54, 83, 84,141,166,110,106,234,102, 78, 59, 91,202, 71, 59,195, - 25, 75, 91, 57, 92, 81, 89,239, 15,212,169, 11, 55,154,202, 85,152,218,145,166, 67, 88, 43, 84,146,139,214,180, 23,205,104,180, - 73,164, 84, 19,131, 0,116, 60,153, 72, 40,193, 68,250, 40, 29, 75,126,142,122,242, 87,107,189,231, 14,176,183, 92,234, 50,121, - 74,144, 60, 57,142, 98,229, 75,130,128, 53, 54,211, 46, 23, 4, 53,224, 77,226,196,103, 46, 86, 27,218,179, 27, 84,179, 37,186, -153,209, 52,150,197,252,148,239,249,244, 23, 96,177, 96, 55,118,180,218,146,214, 35,187,221,150, 39,171, 43,124, 14,124,254, 11, - 95,224,213,215, 62, 69,248,224, 17,102,220,112,203,106,252,205, 91,220,127,240, 1,111,189,253, 58,167,167, 13,183,206, 22,184, -208,240,120, 97,105,182,138,202, 40,156, 85,132,224,233,187,129,198,181,164, 84,138, 48,137,232, 3,221,110,199,141,197,146, 92, -192, 76, 99,140,204,148,240, 61,148,179,232,202,161, 48,144,138,155, 70,235,103,173,173, 71, 69,173,220,163, 9, 71,231,194,100, -107, 75, 69,157, 46, 19, 49,181, 15,139, 10, 19,146,172, 48, 74, 98, 18, 75, 88,215, 15,212,157,163,105,133, 20, 58,142, 13, 85, -109, 69, 68,166, 53,149,181, 52, 77, 69, 59,171,153, 13, 13,109, 87, 83,117, 61,118,218,173,167, 15,223,170,239, 3, 97,142, 24, -151,199,117,137,167,210, 73,101,252, 46, 14,143,105,196,110,203,180, 80,240,208, 26, 99,142,181, 96,229,243, 42, 35,219, 91,107, - 36,175,162, 4, 41,169, 97,196, 43, 45,136,217,174,103,179,221,226,125,192, 85,151,156,158,156,114,227,198, 25,203,179, 5,179, -147, 37,110,222, 98,218,185,176,228, 77, 45, 83, 68, 37, 97, 85, 90,243,255,159,162,254,145,221,251, 20,153,119,148,188, 54,189, -144,251,206,111, 18, 52,148,127, 79,229,215,135, 91, 81,186, 22, 90, 37,162, 75,205,122,181, 33,147,185,127,255,125,174,174, 46, -233,135, 30, 69,196,232,204,107,175,188,204,162,118, 44, 92, 98, 86, 91,140,242,228, 52, 98,173,165, 31, 34,151,171, 29,143,214, -129,221, 8,221, 48,136,234,213, 88, 22,243, 37,103,167,103,244,235, 43, 82,127,197,124,222,178,152,183, 56,103, 75,177,117,204, -155,138,198, 25,182,235, 21,239,223,191,207, 55,190,241,117, 98, 76,220,187,255,128,197,172, 97, 28, 61, 79, 46,206,105,172,227, -133,148,249, 13, 95,249, 65,222,122,239, 93,148,114,228,164,121,245, 19,159,230,185, 59,207,115,126,126,201,143,254, 19, 63,202, -127,250, 71,254, 40,111,127,235,109, 30,159, 95, 96,172,101,236, 7,140, 50, 4,109, 24,135,158,202, 58,134,126,128,172, 8, 57, - 80,213,138,209,143,140, 62, 96, 76,102,232, 55,140,118,141,211, 17,159,148,236,140, 35, 88, 35,249,205, 41,179, 31, 43,105,125, - 61, 17,236, 56, 99, 60,127,200,244, 70,156, 0,170,176,190, 15,209,133,123, 86,128,145, 55,157,240,155, 37,163, 88,216,244,135, - 49,246, 68,157,178,198, 96,141,197,148, 95, 27,107, 69,237,233, 28,198, 40,121,227,206, 27, 92,109, 49, 78, 75, 1, 39,146,147, - 39, 69,131, 46,201, 87,162,152, 23, 53, 45,169,136,194,212, 94,110, 49, 5,130, 31,138,159,158, 66, 83, 36,132, 67, 46,123, 50, -242, 79, 65, 72,186,217,218,162, 72, 61, 88,238,166,225, 85, 58,178,175, 41,149, 81,229, 13,191,191,176,104, 69,223,109, 33,195, -249,249, 99, 86,151,151,156, 44, 91,206,150, 39,188,246,202,203,220,185,117,155,219,183, 36,125,238,197, 87, 95,102,183,185,160, -223,109,200, 68,174, 86, 23,124,230, 51, 95, 32,171,138,152, 13,103, 55,110, 98, 10, 85,207,185,170, 8,183, 42,212,228,131, 47, -135,207,113,215, 68,161, 86,233,146,213,153, 99, 32,135, 1,210, 32, 22,211,164,136, 33,137, 7,215,203,206,210,148, 75,115,206, -148,174,171, 76,120,140, 4, 52,165, 4, 33, 40, 84, 25, 73,198,148,153, 53, 34,190, 26, 7,168,235,134,221,144,216, 14,123,121, - 44,198, 88,250, 78, 32, 50, 93,215,209, 15,146, 71,159,178,198, 71, 47,185, 40, 78, 97, 43, 69,221,214,212,245,140,166,153,203, -248,189,110,105,156,229,100,214,224,172, 18,183,131,214, 24, 45,207,140, 53, 22,109, 28,149,173, 68,145,110,101,117,162,247, 5, - 93, 28,203,114, 82, 91,148, 10,133, 63, 96, 9,209,136, 46,198, 66, 40,150,209, 92,198,194,233,232,162,106,173, 43,246, 71, 91, - 46,166, 69, 65,109,109, 97, 71,116,101,250, 52,173,179, 36,201,205,184,154,218, 90,122,165,177, 68,102,217,240,218, 23,191,192, -139,253,192,118,136, 34,137,200,154,198,107,178, 79,216,126,199,205,220,147,163,167,111, 18, 62, 4,190,255,139,175,176,108, 52, -138,200,246,253,183,169,171, 22, 69,199,197,176,225,151,223,125,128, 38,240,226,237, 59, 52, 54,114,115, 62,199, 25, 69,125,218, -162, 30, 67,211,214, 88,103, 73, 65,186,107,231, 42,217,184,104,181,183, 26,215,117, 37, 5, 92,233,194,177,151, 92,247,140, 32, - 98,181, 53,226, 66, 1, 81,177,255, 53,152, 20,135,198,128,235,225, 42,197, 41, 21,227,148,186,153,247,212,200,235,206,170, 92, -246,238,145,113,244, 34,130,235,106,118, 77,197,108,104,104,218, 74, 4,104,133, 87,226,156, 52, 55,109,211,208, 54, 53, 77, 45, - 83, 34,239,195,209,122,246,169,101,113, 33,225, 29,114, 40,174, 3,172,213, 81, 36,179,181, 70, 50,223, 43,187, 15, 21,155,116, - 4,166, 92,164,247,228,188,146,170, 54, 21,117,140, 37,107, 37,151,240, 18, 40, 85,122, 13,201,250, 24, 61, 73, 27,124,200, 92, - 93,109, 8, 99,224,234,124,195,250,226,138, 91,183,231,156, 61,119,139,217,233, 41,205,114,196, 52, 1,219, 44,208,166, 69,153, -170,172,164,121, 58,165,237, 87, 63,130,255,149,124,142, 99,162,216,180,167,216,243, 66, 56,146, 58,151,241,200, 49, 48, 67,107, -202,205, 71,210,218,142, 11,253, 30,150,147,179, 64, 44,148, 17,152,138, 18,187, 82, 38,243,232,201, 57,209, 52,124,240,232, 33, -138, 76, 55,116, 24,163,185,177, 88,240,249, 87, 94, 32,109, 47,168,180, 38,122, 79,244, 3, 90,129, 69, 17,187,158,211,182, 18, - 12, 38,150,213,214, 50, 4,133,171,231,204,231, 55,112,170, 2, 59,146, 93,199,220, 89, 22, 37, 15,123,244,145, 24, 61,235,221, - 21,231,239,221,227,173,119,222, 97,179,235, 36,139, 88,107,188,223,114,126,177,193,105,205,174,239,120,225,149,231, 24,199,196, -237, 27,207,241,179, 63,247, 87,137, 74,211,143,158,209, 43,140,117, 52,243,154, 20, 34,175,189,242, 10,175,127,253,107,244,221, - 37,219,237, 21, 99,244,228, 97,139, 15, 61,182, 50, 84,161, 70,107, 67,240,137,206,123, 26,111, 25, 58,143, 54, 21, 70,121, 78, - 22,142,188, 11,132,156, 81, 41,224,180, 8, 54, 98,210,164,164, 9,217,160,209, 88, 60,166,108, 33,173, 50, 71, 17,138,101, 23, -148, 36, 35, 92,248,207, 19, 98, 88, 29,252,105,207, 20,116, 25, 83, 90,119, 84,100,138,181, 77, 21,184,144,202, 98,149,155, 70, - 88,178, 39,151, 14, 93, 86, 49,169,252,119, 35, 86,170,214, 81, 59,133, 49, 89, 70,158, 57, 32,155,221, 0,121,148, 3, 39, 38, -178,138,228,236,100,100,202,244,247,150,131, 56,101,200,158,156, 71,185, 20,228, 64,244, 3,126,236,240, 99,199,208,247,164, 16, -202,243, 29,129,136,205,142, 56,141, 93,143,244, 5, 7,191,247, 1,144, 52, 17,177,236,164, 91, 48,134,245, 16, 57,191,186,226, -241,189,187,188,252,226, 29,158,187,115,131,229,188, 1,163,152,205,231,232,198,210,143, 61, 97, 37,136,201, 97, 55,160,115,230, -147,159,124,149,215, 62,249, 50,143,206, 47,216,110,123,198,113,197,124,121,139,211, 27,207, 81, 53, 75,146,118,104,237,112,102, -154,116,148,110, 82,107,146, 58,252,251,148,126, 24,189, 39,244, 29, 33,193, 56,140, 12, 93,102,236, 21,195, 38,146, 7,207,250, -106,160,203,154,216, 52,232,113,164, 46,122,130, 74,101,134,228,101,175, 8, 12,222, 66, 26,176,170,196, 39,103,209,177, 84,149, -129,236, 81, 38,177, 13,154,171, 62,211, 26, 69, 26, 51,163,246,100,101,169,231, 11, 30,221,127, 68, 80, 25,101, 53, 99,113, 14, -212, 45,184, 10, 92,101,112, 77, 75, 51, 91, 82, 53, 51,154,118,198,172,109,152, 55, 21,179,218, 81, 25,141,211, 34, 66,114, 70, -112,185,146,125,238,112,174, 65,215, 53,218,200,197,196,150, 96, 17, 17,246,137, 2,192,104, 93, 50,211, 3,218, 86,178,203, 69, - 73, 2,101, 17,101,198,152,101,100, 60,122,240, 94,222, 7, 10,172, 51,228, 41, 82, 21,201,200, 78, 42,203,165, 42,183,224, 3, -217, 40, 84, 85,145,250,154, 24,125, 81,202,195, 34, 87,168, 52, 98,212, 64,229, 28,117,223, 50,143,153,109,239, 25,123, 41, 94, -169, 82,228, 20,139, 83,196,176,208, 6, 67, 98,245,248, 93,137,121, 30, 71,250, 49, 96, 92, 69,221, 88,150,203, 37, 95,248,244, - 11,172,206,159,112,243,100,193,217,141, 57,198,102,114,244, 44,103, 53,149, 86,204,234,150,156,132, 91,239,154,150, 24, 19,206, - 58,241,162, 71,104,107, 37, 62,244, 16, 25,146, 42, 60,142,192,102,232,169, 79,150,178,210,152, 4, 3,249, 0, 65, 17,145,168, -192, 84,148, 50,215,104,133, 83,105,156, 60,221, 41,167,107,133, 52, 33, 29,127,222, 39,133, 30, 64, 84,185, 96,194, 85, 81,200, -135,160, 24,250,145,110, 55,210, 53,158,174, 31,105,187,145,218, 88,180,147,231, 27, 99,113,117, 69, 85, 85, 82,220, 43, 75, 99, - 53, 99, 97, 62,236,215,167,229,111,159,130,105,246, 62,172, 61,201,244,192, 43,157,110,237,202, 24, 84,114, 24,151,177, 85,162, - 82,135,230,115, 18, 7,114,180,127, 87, 79, 93,170,149, 41, 26,166,146,226, 40, 47, 74, 36, 37,133, 9, 19, 72,205,145, 48,140, -201,176,218,245,156,239,214, 60, 94,119, 92,173, 55, 60,191,245,220,186,221,115,114,107,160, 61,147, 73,144,105,230, 40, 59, 67, - 23, 34,221,255, 48, 58,245,239,134, 6,125,138,185, 61,165, 82, 77, 47, 98, 62,234,210, 85,241, 6, 78,233,100,114,118,101, 18, -145,221,118, 75,207, 64,223,247, 24,205,129, 50,167,165, 88,121,223,161,230, 45, 26, 77, 83, 47,216,172, 86,108, 87,107,116, 76, - 37,101, 9,180,181,124,236,249, 23,232, 67,166, 15,153, 97,220,178,221, 94,200, 27,220, 86,172,134,200,234,209, 57,117,211, 16, -178, 97, 12, 29, 49,105,162,171, 56,185,253, 49,230, 65,144,126,231, 79,206, 25, 71,121,184,149,131,144, 34,167, 55,111,162,208, -220,122,254, 5,158, 92, 94, 17,180, 38,228, 76,179, 90,209,143, 35,219, 97,199,251,119, 63, 96,190,156,147,115,164,219,109, 89, -175,174,246, 98,172,205,118, 83, 10,164, 97, 67, 39, 30, 89,227,168,116,133,107,150,156, 44, 22,180,181,197,233, 68,214,146, 75, -174, 68,122, 42, 88, 80, 68,169, 43,171,139, 34, 50,116, 14,171, 52,149, 45,133, 73, 43, 81,205, 22,127,231,113,166,219, 97,218, - 34, 60,244, 41, 32,229, 48,174, 42, 33, 9,230, 48,198,154,200,114, 19, 53, 73, 33,129, 25, 19,111, 91, 84,218, 18,225,171, 11, - 68,101,186, 17, 59,231,168,107, 71, 93, 25,156,201,104, 37, 59,229, 28, 71, 82, 80,101, 9,159, 72,201, 98, 82, 32,235,128,210, - 82,237,178, 18,191,187, 42, 54,133, 28, 11, 12, 36,140,114,136, 22, 48, 82,156,246,161, 69,253, 46, 20,177, 26, 87,201,164,198, - 26,183,143, 88,213, 31,182, 75,211, 6,109, 68,157,107,172,120,117,179, 2, 55,155, 81,183, 21,183, 23,160,179, 28,184, 77,237, - 64,137, 64, 40,167,196,118,181, 18,145,102,244, 60,122,248, 8,173, 53, 47,189,244, 49,140,115,228,156, 25,135,158,126, 12,172, -118, 35,187, 49,243,202, 39,207, 56,189,121,179,236,237,237,100,191,144,231,163,160, 57, 39,192, 76, 70,130, 45,146, 46, 93,101, - 72,120, 53, 50,166,145, 77,128,128, 4,182,156,111,183, 12, 42,211, 23, 5,178,173,172,136,124,148, 0,166,180,149, 28, 2,111, - 13, 49, 6,180,169,100,197,145, 76,185, 92, 73,150,194,106, 20, 78,121,164,140,173, 99, 34,140,137, 59, 47,220,226,226,242,138, -174,207,216,214, 16, 60,248, 62,148,247,147,162,174, 43,234,166,161,170,154, 61,112,164,174,107,234,186,194, 57,209,146,180,181, -163,118, 22,103, 53,149, 45,225, 57,214,146,181, 36,161,233, 66,131, 51,198, 10,170, 84,233,114,136,203, 37, 45,134, 64,142,146, - 93,129, 50, 56, 50, 1,241, 91, 39, 25,106, 48,140, 1,162, 72,146, 66, 89,171,200,204, 65, 86, 19, 83, 84, 53, 41,203, 68, 70, - 70, 26, 16,133, 11,160,140,198,182, 51, 50, 3, 41, 5,180,177,184,198,178,180, 13,174,246,244,189,103, 28, 51, 67, 8,204,198, - 72,223,143,210,145, 14, 35,195,232, 73, 41,160,114, 68,169, 68,213,180,204,231, 51,116, 6, 87,213,220,168, 28,218, 10,105,211, -213, 21, 41,120, 62,246,226,115,228, 20, 88,156, 46,168,103, 21,201,247,156,158,157, 82, 57,203,172,109,200, 40,134, 97,160,105, - 22, 37, 37, 83, 84,238,214, 88,250,161,163,117,114,137, 23,225,190, 4,178,100,107,168,107, 89,233,228,105,242, 80,214, 90, 28, -157,209, 31,222,220,229, 3, 41,244, 67,194,146,114,249, 76,211, 28, 60,229,103,243, 38, 38,114,166, 15,114,225,233,251,158,110, - 87,209,205, 26,186, 82,188,181, 82, 40, 43, 22, 55, 99, 37, 27,161,174, 43,170,202,137,120,210, 74,168, 83,142,169,172, 86,190, -139, 10,254, 40, 69,242,218, 68,175, 76,105,246,105,115,165, 6,237, 53, 96, 5,243,170,143,118,230,250,232,252,146,207, 83, 10, -123, 65,228,230, 56,146,172,101,212,254,218,232, 63,166,140, 79,208,143, 35,235,174, 99,236, 58, 54, 93,207,102,183,229,118,223, -113, 54,142, 44,110, 6,234,152,176, 46,160,173,104, 64,254, 7, 81,212,127, 37,163,249, 61,111,190,136, 58, 76,177, 15,237,247, - 28,211, 3,165,147,132,141,170, 84, 68, 65, 9,101,165,224,239, 54, 91,201, 2, 46, 89,218, 85, 85,211,117, 59, 18, 2, 78,240, - 36,178, 78,212,206,114,227,230, 41,151, 79,206, 89,156, 44,229, 1,219, 68,182,193,176, 94,247,108,198,145,168,160,243, 3,163, - 31, 64, 25,252, 40, 9, 71,117,229, 48, 57, 97,171,138,246,228, 6, 39,139, 83,170,230,132,186,110,112,214,210,182, 13,203,197, -156,232, 61,143, 31, 63,230, 47,254,212, 79,240,224,225, 99,206, 47,174,208,202,112,251,121,207,173, 59,119,176,179,150,175,189, -254, 58,227,112,151,222,123,208,137,223,253,143,253, 30,134,126,203,118,187, 37, 19,217,174,215, 88,165, 72, 62,162,179,162,219, -245,108,155,142,202,213,164, 44,249,200,195,213,138,198, 90,114, 24,153,153,204, 73,165, 48,166, 69,229, 40, 74,211,164, 9,211, -248, 43, 5,116, 74,232, 4,198,106, 42,163,105, 42, 75, 93, 89,172,214,194,242,215,250, 67,166, 52,135, 93,123,230, 72,247,160, - 14,214,150,233,159,122, 42,234,229, 54,127,192,194, 22,142,179, 82,101,124,170,142,148,166,101,148,181,223,191, 43,140,205, 88, - 19, 81,121, 36, 6, 69, 24, 69, 81, 78,142,152, 56,162,188, 67, 87,101, 20,173, 45, 90, 23,210,215,116, 41, 41,250, 11, 82, 57, - 82, 98, 64,165, 80, 48,154,115, 78, 78,192,186,150, 49, 36,130,210, 88,231,132,214,102, 93, 1,211,148,241,217,209,247,167,180, -222,123, 93,165, 43, 54,101,215,101, 80, 70, 99, 84,102,220, 93, 50,174, 31,179,108, 64, 87,167, 5, 37,234,233,187,157,116,143, - 74,118,175,171,213,134,205,118, 71,219,182,108,119, 59,121,238, 77, 67, 51,215,184,106,198,233,169,161, 27, 60, 24, 9, 66,249, -218,215,127,145, 31,248,245,191,129, 91,119,238, 16,117, 77,196, 20, 27, 77, 89,159,232, 3,236, 67,229,194,137, 54, 65,126, 14, - 30,168, 34,201,121,146,115,244, 67, 71,174, 44, 23,221,134,203,245,154,205,174,163, 78,153,214, 56,146,207, 12, 99,198, 85, 74, -246,230, 90,137,191, 56, 37,170, 36,249,215,209,251,178, 11, 85, 12, 62,224, 3, 92,109, 6,124, 86, 12, 62, 98,181,120,157,189, - 31,233,123, 79, 86, 20,124,180, 76,223,140, 46,239,165,186,162,174, 90,234,170,166,174,106,172,149, 75,148,177, 22, 87, 85, 52, -101,188,106,173,162,170, 14,122, 11,235, 28, 49, 43,108,249,249,107, 93,149,169,202, 36,190,205, 88,103, 81, 36,194, 48, 8,231, -126,148,176,142,172, 20, 86, 75,183, 26,179, 98, 12,158,108, 44,218, 71,250,212, 65, 89, 27, 77,171,217,156, 82,233,163, 65, 69, - 89,255, 40,171,132, 70,151, 68,252,153,181, 69, 25, 77,180,137,228, 35,174,140,233,173,211,180, 85,194,182,145,161, 15, 88, 31, -240,163,199,182, 21, 49, 38,154, 81,200,104,193, 75, 74, 87, 46,204,242,138, 76, 10, 1,103, 20,206, 8,106, 24,149,176,206,161, -245, 12,147, 51,139, 69, 75,179,172,105,230, 13,126,183,225,236,185,219,180,179,133,172, 13,148, 46,147, 20, 71, 55,120,193, 76, - 91,139,209,153, 77,183,229,230,233, 29,214,155, 29, 89, 85, 50,214,213, 14, 83, 59,170,166,150, 75, 49,135,130, 23,203,100, 37, - 29,133, 27,125, 55, 75,235, 36,162, 61,176,216,143,226,136,243,209, 57,146,243,145,144, 58,239,185, 49, 57, 75,240, 75, 55,140, -184, 93, 71,179,169,169, 92, 69, 85,201, 4,193,166,188,143, 11,183, 90, 38,122,117, 85,209,212, 21,245,232,241, 33, 10,196, 50, -167,239, 46,250, 58, 10, 94,158,152, 20,123,225,246, 52,170,209,170, 92,178,211,126, 10,118,152,206, 73, 76,172, 62, 26,199,171, - 73, 48, 56, 97,235,202, 27, 50,146, 74,164,114,249,125, 28, 98,204, 69,152, 42, 56,221,115, 31,217,244, 3,155, 93,199,213,122, -203,115,219,129, 91, 59,207,217, 45,143,173,101,253,102,173,197,170,143,184, 85,253, 74,198,238,127,163, 74,248, 95,201,231,121, -198, 62,167,228,134, 24, 50,165, 0,201,173, 59, 21,153,191,182,229, 33, 80, 73,110,204, 42,145, 74, 38,116, 12, 30,103, 43,230, -179,154,197, 98, 73, 93,183, 60,188,247, 30, 99, 8,152,170,146, 23,163,228, 56, 47,230,115,108, 81, 81,239,250,158,110,179, 99, - 23, 51, 99, 10, 92,108, 59,118,163, 39,107,176, 85,121,147,212,150,128,220,234, 99, 55,162, 76,160, 25,192,174, 59,124,184,135, - 81, 18,160, 80,215, 78,216,194, 77,195, 11,207, 63,207,139, 47,190,200,213,195,247,121,120,255, 33, 55,111,220,228,226,201, 57, - 95,248,204,231,248,228, 23, 62,199,106,189,230,203,223,243,125,184,170,226,141,111,125,147,247,222,127,143,221,118, 77,109, 21, - 63,246, 99, 63,198,111,254,225,191,131,213,250,138, 15, 62,184, 71, 68,222,240,227, 56, 22,213,127, 70, 23,241, 73,179,152, 51, -175, 26, 94,189,179, 96, 97, 6, 76,106, 8, 73,209, 5,200,218,177,235, 37,155, 93,231,136,201, 1,155, 51, 22,139,213,153,202, - 40,106,107,168,157, 40,140,181,226, 8,204,112,132, 60,221,147, 2,143,222, 10,215,108, 32,165,224,105,246,255,156,222,192,106, - 10,232, 41,251, 78,173,165,216,236, 71, 98, 89, 18,150,166,217, 64, 78,138, 20, 34, 62, 71,100,209, 29,138,165, 80, 50,231, 77, -172,208, 49,200,135,149, 72, 76,180,151,184, 89,145,139,151, 46, 86,214, 64, 18,195, 40, 93,135,181,150,106, 54,227, 76,215, 52, -179,196,152, 50, 65, 75, 78,182,115, 50,194, 55, 69, 57,175,141, 46,248, 80,189,127, 77,180,146, 95, 75, 87,168,100, 21, 84,196, - 84, 99,191,102, 8, 35,126,216,144, 66,207,233,201, 2,239, 51, 90, 91, 90, 53,103, 28,122,156,177,108, 55, 27,238,189,255, 62, -239,222,253,128,249,124,206,141,155,183,169,154,150, 97, 76,140, 99,160,178, 53, 84,144,178, 38, 43, 67,191, 27,184,220, 94,240, -223,253,169, 63,193,255,248,119,254, 14,176, 51,218,229, 25, 40,197,118,179,161,110, 26, 41, 98,211,129,153,100,237, 97,115, 41, - 80,106, 71, 54, 14, 85,215,232, 81, 70,151,175,191,241, 77,126,246, 47,253, 28,233,226, 1,126, 16,241,234,102, 24, 49, 88,114, - 18, 34, 89,206, 1, 50,146,175,173, 52,227,224, 49, 74, 49, 14, 17,165, 42, 70, 31,112,149,146,212,179, 32, 54,186,136, 92, 24, -235, 90,113,117,185, 38, 43, 85,232,139,150,193,135, 50, 81,200, 7,107, 90,233, 62, 52,101,101, 16, 35, 57,201, 1,235, 42,135, -173,107,234,198, 81, 87, 86, 10,156, 86, 88, 39,222,235,172, 4,149,171,141, 37,163,100,231,238,196,230, 38,158,229,136, 86, 72, - 94,117,140,165,139,135,188,247,156,139, 77, 80,153,204, 56,110, 14, 48,169,201,168, 88,158, 31, 93,242,182,147, 47,201,141,218, -145,181,140,140,179, 86, 66,149,203,242, 61, 40, 39,186, 14,114, 89,215,100,112, 46, 19,213,128,169,106,124,237,169,114, 34,196, - 76, 21, 18,141,143,178, 11, 30, 61, 41, 30, 82,199, 84,138, 56,131, 88, 3,157,136,243, 92, 83, 50, 14,156,163,153, 85,216, 70, - 46, 14,138,200,205, 59,119,168, 27,241,247,199, 32, 5,116,244, 94,162, 69, 67, 36,198, 17,101, 43, 82, 12, 24,235,200,218,145, -162, 97,140, 34,234, 82, 85,133,169, 43,178, 18,106,168, 78, 83,140,105, 46, 40,214,201, 79,254,209,235,216, 41,110,152,163,252, -136,107,140,145,163, 95, 31,232,147, 71, 73,129, 64, 44, 43,181, 97,244,116,131,103,219, 13,212,117, 71,237,164, 32,214,245, 81, -247,172,132, 42, 89, 85,242,222,157,154, 18,173,194, 52, 99,120,166,212,237, 53,239, 71,194, 57,181,103,199, 78,126,123, 43, 81, -187,198, 98, 74,147,169,148,190,238,114, 57, 26,189, 43, 93, 38, 54,147, 43, 75,233,130,252,133,156, 3, 38,219, 2, 47, 50,215, -240,205,162,217, 41,151, 33,192, 39,133, 79,145,188,238, 24, 70, 79, 63, 4,250,110,100,220,141,204, 22, 21,117,237, 74, 92,172, - 57, 40,156, 83, 74, 7, 5, 96,230, 25,184, 11, 71,226,181,143, 34,186,253,245, 20,239,107,136,218, 15,161,201,125, 20,124, 6, -101,202, 62, 70,110,204,170,220,224,180,158,252,208, 34,134,146,215, 87, 30,162,166, 22, 78,112,221,212,180,117,131, 43,183,162, -249, 98, 65, 55, 12, 60,119,118,147, 87,110,157,162,181, 4,222,247,222,211,220, 94,112,239,209, 35,190,253,224,156,251,143,183, -172,119,158,144, 20, 85, 51,167,106,151, 84,117, 35,246,245,228,233,251, 53, 62,139, 45,143, 36, 1, 29, 99,191,165,235, 54, 50, -218, 3, 76, 25,139,174,102, 51,134, 97,224,237,111,183, 44, 42, 71,142,112,254,232,156,237,213,150,205,213,150, 87, 94,123,141, - 79,191,242, 9,158, 59,187,201,162,169,184,125,231, 57,190,240,185,207,115,235,206,109,126,234,167,126,146, 63,243,167,255, 36, -255,253, 95,249, 37, 86,171, 13,191,243,183,255, 78,222,125,239,125,126,252,207,254, 57,174,174, 86,104,165, 8,227, 40, 5, 56, -238,200, 24,172,110,153,217,204, 11,167, 53,117,142,228,164,217,230,134, 39, 15, 87,188,252,242, 11,152,213, 21,249,210, 11, 45, - 42,169, 34, 78,211, 56,173,169,140,161,178, 7, 15,176,158, 0, 26,215, 68, 49, 71, 55,108,125, 61, 46, 87,113, 72, 21,201,197, -146,144, 75,241,223,235, 41,178,222,123,210, 35, 71,251,169,146, 85,109,178, 41,152,128,120, 68,123, 74,152, 56,177,215, 41,189, -146, 8, 39, 93, 86, 18,115,156,132,188,166,146, 70,233, 36, 9, 91, 57,147,116, 33,218,229, 41,253, 72,237, 81,174,202,214,184, - 22,148, 83,184,100, 72,198, 18,109,181, 79,185,147,125, 88, 9, 91,208,135,128, 33,173,244, 83,182,158, 82,228,139,117,172,223, -109,121,252,240, 3,102,198,243,226,157, 91,124,251,141,111,176,156,181,180, 77, 3, 40,194, 32, 65, 59,179, 90,172,137, 55,111, -220,228,241,197, 5,222, 7,182,219,142,217,201, 13,154,186,225,226,241, 19, 54,155,173, 36, 51,161,233,124,226,241,229,138,102, -177, 96,136,129, 95,252,249,191, 68, 63, 6,126,240,171, 63,196,197,147, 39,188,249,230, 91,216,202,242,183,253,240,223,201,216, -117,100, 37,113,195, 86,105,146, 10,228,216,243,224,193,123,196,113,160, 54,154,110,125,201,195, 7,247,184,127,239, 46, 23,143, -159, 48,222,127,196,205, 74,172,122,221,144,113, 90, 70,130,147,211,196, 89, 67, 24,189,136,169,178,224,117,167,117,138, 53,142, - 20, 36, 95, 32,102, 69,214,154, 49, 6, 57,236,172,101, 12, 3,161,184, 8, 70, 95, 4, 71, 74,149,245, 24, 37,195,219,202, 52, - 33, 79,133, 51, 18,131,136,243,246,143,208,196,100,119,150,122,138,208, 84, 98, 59,155,152,222, 5,135,112,205,163, 44,143,141, - 46,133, 85, 34, 54,197,251, 91,158,213,164,192, 32,223, 67,241,114,203, 74, 38,202,229, 38, 70,121,191,147, 75,128,141, 71,233, - 44, 54, 66,165, 37, 65, 48, 37, 48, 6,165, 44,218, 53,132,161, 35,147, 48,202,202,215, 31,163, 52, 18, 51, 77, 12, 1, 21, 53, - 54,103,178,178, 84, 49, 49,250, 72,240,161,176, 48, 98,129,182, 36,226, 56,136, 5, 77, 35,133, 91, 67, 51,107,168,106, 41, 94, -174,182,168, 74,149,166,198,178, 88, 46, 81, 74, 83, 85, 21, 93, 24,246, 22, 84, 91,214, 92, 41, 10,105,177,170, 28,131,143,162, -187,176,142, 24, 16, 33, 46,128,115, 18,135,170, 20,185,160, 91, 67, 8,251,143,105, 61,122,157,228,249,209,132,151,235,199,252, -161,152,231,107,139, 61, 14,136,214, 9, 89, 86,212,243,195, 24,216,245, 3,205,174, 47, 46, 8, 17,116,106, 99,196, 34, 87,132, -174, 50,253, 43,250, 28,107,240,209,160,178, 92, 14, 39, 72, 90,126,202,137,197,177, 9,247, 40,109, 78,208,136, 22,157, 45, 58, -218, 61,100,106,178,169, 82,168,111,170, 8,228,152, 72,146,250, 16,203,178, 95, 95,148, 45, 78, 84,169,196, 72,235, 35,133,253, - 52,217,148, 14, 94,165, 44,151,129,156, 25, 66, 18, 46,192,197,154, 20, 51,126, 8,156,156,136, 96,208, 8, 7,193, 94, 47,234, - 71,192,151, 15,235,150,175,199,103,126, 52,156,230, 56,192,229,111, 70, 55,127,252,156, 92, 83, 94,239,181, 13, 83, 12,103, 65, - 64,106, 35, 7,123,137,110,173,156,140,144, 69, 88, 99,176,218, 97,148,101,183,235,121,114,177,226,135,190,242, 27,185, 61,111, -232,250,129,119,223,191,199, 55,190,245, 30,239, 61,186,224,193,229,154,157,151,192,128,170,110,121,233,227, 31, 71,161, 25,135, -145,208, 15, 12, 93, 7,217,227,140, 28,108, 22,141, 50, 10,173, 2, 93,191,147, 32,123, 50,131, 15,251, 31,238,110,119, 1,218, -176, 90, 95,112,101, 29,173,210,220,123,242,152,147,118, 46, 29, 67, 85,241,217,213,154, 87, 95,254, 56, 79,238,125,192,110,117, -197,242,228, 38,171,203, 43,254,145,255,201, 63,202,151,191,231, 75,252,193, 63,248,239,241,237,119,222,229,143,252,103,255, 25, -223,255,253, 95,225,159,254,167,254, 25,254,252,159,255, 73,190,246,181,175, 51,134, 94, 50,211, 53, 40, 55, 99,219,237,120,241, -197,207, 48,111, 27, 92, 86, 12, 25,198,161,229,237, 7,239,243,213,191,253,135,233,190,246, 11, 52, 78, 17,209,164,104,247,118, - 54,138,226, 55,151,241,218,132, 74,206,121,194,189, 22, 1, 76, 9,209,217, 43, 72,211,225, 86, 62, 41, 67,133, 43,160, 14,214, - 32,165,143,160, 13,135,110, 29,196, 99, 29,211,196,139,201, 68,157, 15,225, 40,123,152, 75, 1, 92, 25, 8, 49,224,227, 64, 21, - 50,117,200,184, 26, 76,149,112, 21, 84, 85,177, 56,218,114,107,206,134,140,116,235,162, 6, 55,147,100,110,159,125,160,209, 84, - 56,148,146,104,205, 84, 24,214,202, 88, 74, 74, 69,193,170,170, 61,193,112,159,104,151,143,126, 93,124,245, 42, 70,206,239,127, -135, 71,239,125,139, 59,103,115, 22, 55,150, 52,117,195,208,245, 92, 93,174,184,188, 90,179,221,118,168,156, 57, 89,206, 89, 46, -102,220,121,225, 5, 78,111,221,228,253, 15,238,243,232,241, 37,171,171, 21,183,110,220, 32, 7,143,142, 35, 58, 5, 1, 79,164, - 68,232,119, 60, 92, 93,241,242, 39, 94,225,193,221,247,217,172, 87,252,220,184, 37,198,200,147, 39,231, 60,124,244,144,153,150, -117,205,110, 24, 73,170,230,133, 23, 95,162,105, 91,174,206, 47,121,252,232,161, 48,243,201,248,110, 75,240, 61,202,100,250, 97, -160,181,142,202, 26,198, 20,217,165, 72,149,101, 91,238,163,172,185, 84, 22, 43, 98,206,106, 31,173,233,163, 39, 68,141, 65, 17, - 83, 64,103, 87,252,199, 18,218, 81,213, 21,227, 24, 72, 89,188,237,104, 75,223, 7,241, 62,167, 36, 17,172,198,148, 9,103, 57, -212,224, 40, 89, 78,124,189,131,247, 52,177, 46, 99, 91, 41,252, 41,150, 40, 81, 35,250, 12,125,244, 60,202, 26, 93, 16,164,130, -245,206, 68,193, 15,138,197, 40, 79, 79,217,254,182, 64,206,146,224, 23, 66, 40,146, 42,176,101,255,172, 85,145,176, 41,113, 75, -136,158, 65,131,146, 61, 59, 90, 17,162,228, 16,232,202,129,178, 37, 80, 37,137,245, 54,137,159, 61,133,128, 42,218, 17,179, 79, -212, 83, 88,101, 48, 37, 36, 37, 86,134,232,125,233,206, 51,169,210, 80,176,189, 85, 83, 73,228,103, 91,225, 42,115, 32,215, 89, -209,204, 24, 52, 51, 87,201,133, 54,202,217,238,156,219, 7, 93, 89,103, 25,131,103,232,123,218,217, 92, 46, 76, 24,198, 16,193, - 86,132,156,112,214,146, 20,140, 81, 84, 5, 42,136,183,223,143, 30,239,143,139,250,245,110, 83, 29,219, 96,167,243,225,175,231, -184,127,170,113,204, 89,228,170, 99, 76, 48,122, 92, 55, 80, 91,131,179, 2, 94,202, 57,203, 68, 77,137, 24, 82,112,222,165, 81, -209,147,237,241,218, 59,254,163, 39,196,211, 58, 96,143,142, 45, 5,219, 84, 82,103,242, 81,134,201,113,160,152, 50, 7,187,238, -196,179,184, 70,155, 59, 96,237, 50,250,154,221,245,186, 62, 71,239,129, 87, 70,155,253, 37, 73, 23, 80, 88,200,138,109,239,201, - 23, 87,140,227, 64, 93, 87,162, 65,146, 23, 64, 93, 19,163, 61, 45,102,248,176,174,252,195,254,253,184,224,127,120,134,246,223, - 28,143,251,211, 75,130, 92,200,109,211, 27, 82, 44, 40,114,149, 79, 90,210,217, 42, 43,105, 73,163, 31, 25,148,230,198,217, 45, -140,171,240,222,243,157,247,222,231,191,250,147,127,134,215, 94,125,129, 15, 62,184,207,189,251, 23, 92,109, 6, 66, 82,120, 52, - 41, 91, 78,110,220,230,133, 23, 63, 70,138,158,110,125, 69, 26,118, 60,119,182,224,149,207,190,200,114,217, 50, 95,204,196,235, - 27, 37,187,125,183,235,216,238,182, 44, 78,150,248,148,121,247,253, 15,120,235, 59,239,179,237,250, 61,235, 58, 43,195, 54, 68, -242,172, 37,249,145, 52, 40,174,186, 45,205,233, 41,219,190,227,239,254, 45,127, 55, 31,188,253, 6,119,223,251,128, 71,151,151, - 12, 99,228,207,252,233,159,224,183,252,189,127, 15,255,194,191,248,251,248,183,255,157,223,207,106,187,225, 39,127,234,207,243, -237,239,188,195, 63,244, 15,254,131,252,173,191,241, 55,242, 95,255,215,255, 37,119,239,190,203, 48,116, 40, 51, 67, 69,232, 2, - 60,186, 92,115,182,108, 89,123,197,207,191,254, 30,203, 59,175,210, 46,206,196,159,173, 34, 74,101, 70,101,136,200,206, 45,150, -219,124,136, 1, 19, 21, 65,139,151, 63,151,157,220,225, 25, 72,207,132,182, 80,216,255,135,203, 96,190,198, 84, 46, 57,134,135, -212,182, 41, 4, 48, 79,221,127, 56, 2, 2, 31, 84,176,199,183,105, 93,232, 92,117, 93,211, 54,129, 89,155,136, 81, 83,103, 75, -133, 19,222,182,170, 48, 90,242,174,181,171,228,112, 53, 71,118,146,189,232, 79, 20,207, 89, 75,128,131, 20,251, 98, 19, 49,210, -153, 83,198,104, 73, 29, 82,236, 14, 72, 98,245,108,111, 34, 39, 11,143,238,189, 71,149,119,220,123,251, 27,220, 79,129,223,252, -155,255, 46,124,204,188,255,198,155,212, 77,203,174,144,178,172,181,216, 33, 80,213,137,166,117,104,231,120,225,197,151, 88,239, - 70, 98,244,144, 2, 58,121,108,142,132, 41,178, 49, 8,200,229,124,179,225,209,189,251,156,222,188,193,227,135, 15,184,124,244, -128,170,174, 81,192,246,242,130,159,250,137, 31,167, 46, 98,179,213,102, 71,238, 55,188,250,234,171,248,237, 57,111,252,210,207, - 81, 91,205,173,179, 19, 82,202,124,251,238, 61,238, 62,184,199,195,139, 21,207,147, 73,141,101,200,176,141,129, 62, 38,218,146, -220, 5,224,135, 32, 93,127,140,120,149, 73, 74, 19, 66,201,145, 63,112, 55,112, 6,118, 33, 80, 23,161, 99,191,235,100,111,157, -196, 37,225, 51,152,114, 67,119, 90, 81, 85,166, 64,167,142,139,114,249, 59,125, 33,132,133, 88,198,209, 73, 98,116, 17, 59,157, -113,134, 28, 19, 33,121,220,145, 29,143, 44,121,239, 49, 75,146, 88, 82,145, 52,137,102,141, 41,145,181,105,111,171,242,251, 81, -191,221,239, 58,141,177, 34,200,211,197,169, 81,126,173, 74, 80,142,114, 26, 76,222,143,109, 15,211,197, 50,221,113,149,124,173, - 5,145, 58, 17,215,178, 31,101,162,100, 28, 57,136,243, 39,149,105, 80,178,134, 96, 32,232,140, 85,145, 28,188,124, 46,228, 18, - 81,183, 13, 85, 83, 97, 42, 67,214,133,207,160, 21,211, 0, 44, 75, 5,192,104, 75,223, 15,164,148,104,219, 22,239,165,232,165, -224, 81, 10,134,221,192,114,126, 34, 58,146,148,240, 73,163,156,198,199, 32, 23,187, 24, 8,101, 31,157,125, 96, 28, 70,198, 97, - 44,185,243,161,236,212,205,181, 6,144,163,105, 94,254,144, 44, 8,173, 37,113, 79,231, 41, 22, 91, 95, 27,183, 63, 19, 28,118, -141, 76,151, 24,134,192,214, 14,114, 33, 42,180,202,186,174, 69,232, 87,242,198, 39,114,157, 86,106, 31,193, 45,164, 56,245, 93, -106, 76,222,135,176,236,199,235,186,136, 80,141,189, 86,227,174,223, 66, 14,163,245,195,173,230, 89, 72,139,220, 25,115,193, 24, - 23,240,213,181,194,126,200,107, 48,214, 96, 1,147, 4,144, 54, 33,106,173, 51,232,202,146,181,161, 31,101, 13,150,201,216,186, -114,135,104,238,227,130, 94,110,184,233,104, 7, 18, 11, 10, 53, 23, 8, 11, 71,121,219, 40,245, 76,178,215,241,247,163, 10,139, - 93,237,243, 98,143,198, 30,197,210,150, 21, 79,135,122,126, 36,131, 92,125,200,139, 41, 63, 3,189, 7, 24,164,156, 5,250,144, -165, 75,108,172,193, 39,133, 81,150,147,229, 41, 85, 91,113,118,227, 20, 63, 26, 30, 92,172, 56,191,188,194, 89, 75, 86,153, 16, - 69,237,174, 82,197,199, 95,254, 4,203,121,195,184,187,130, 48,240,153, 23,111,241,137,151, 62,199,199, 63,246, 60,143,238,127, -192,147, 39, 79,184,119,254,136,243,203, 21, 87,235, 29, 40, 75, 24, 7,172,206,124,236,197,231,121,233,227,175,242,210,115,119, -104,170,138,229,233, 13,238,222,127,200, 59,239,221,101,181,217, 17,149,162, 31, 50,139,166,102,187, 93,241,137,151, 94,230,147, -175,126,156,247,223,121,135, 95,252,133, 95,228,135,255,142,223,204, 39, 63,253,121,126,246,103,126,138,203,203, 13,231, 31,220, -229,143,255,177, 63,206, 63,242, 35,255, 56,255,218,255,238,223,230, 95,249,125,255, 2,187,221,134,247,222,123,135,127,255, 15, -254,251,252,250,175,252, 32,255,252, 63,255, 47,241, 99,127,242,199,248,229, 55,126,153,111,126,243, 45, 84, 54,220,123,231, 46, -172, 46,168,102, 13,239, 62, 94, 81, 47,159,227, 43, 95,249, 44,111,188,254,117,130,239,167, 0,194, 18,151,150,100,142,158,216, -131, 34,116,144, 7,198, 24,117,200, 62,191,166, 82, 45,251,244,114, 25, 56,206, 28, 63,236,204, 11,170,180, 20,111, 81,195,170, -242, 49,189,137, 14, 69, 86,232, 75, 7,204,103, 86, 7,230,191,100, 33, 91,154, 70,192, 42,117,210,100, 44, 74, 87, 24, 83,227, -234, 6, 87,181,104, 87,163, 92, 13,174, 42, 36,166, 90, 66, 92,140, 69,219,114, 75, 46,163,251,125,194, 92,121,142, 20,182, 28, -198,121,207,160,103, 74,168, 83,135,160,169, 61, 72,167,188,103,140,202,144, 4, 56,242,238,183,191,141,238,206,121,225,102,203, - 11,183,207,248,198, 55,190,201,189, 15,238,177,186,184,228, 91,111,125,155,219,207,189, 72, 68, 81,215,141, 48,170,163,167,239, -119, 52,245,162,168,105,229, 48,218,118, 61,221,110, 71,165, 19, 70, 69, 44, 69,157,159, 50,195, 32,161, 54,235,213,154,118, 54, - 99,232,122,118,126,196,123, 79, 8,145,245,102,205,108, 54,227,206,157, 59,248,186,226,242,201, 57,239, 40,232,214,151,108, 55, -107,174,158, 60,228,198,141, 19,110,222,248, 56,174,174, 89, 15, 3,223,122,251,109,134, 97, 36, 87,154,117,231,217, 40,197, 42, -101, 28,226,156,144, 49,108,137, 69,214, 9, 67,198, 23,207,242,224,161, 31, 18, 78, 37, 17,170, 41, 77,109, 21,102,200,152, 44, - 49,158, 99,200, 36,157,137,217,208,197,184,143,183,157, 84,198, 19,148, 67,198,168,121,191, 35,165,116,220,130, 36,150,206,127, - 28, 70, 12, 80, 57,139,114,142, 17, 47, 33, 48,198,146, 40,177,206, 26,114, 10,196, 80,230,240,197,151,157,147,136,218, 38, 37, -178,116,251,153, 20, 18,193, 75, 81,207, 33,144, 66, 32,199, 67,226,164, 8, 26, 37,196, 69, 89, 43,126,120,103,161,150, 73,221, - 20, 80,111, 93, 75, 10,126, 2,102,148, 34, 26,166,210, 39, 29,117, 46, 99,221, 44,151, 19, 85, 14,122,148,162,178,197, 71, 30, -189, 20,127, 43,196,196,233,156, 52,214, 82,183, 45,218, 57,112,138,100, 74,135,169, 21, 36, 15, 99, 79, 26, 71,198,174,195, 76, - 19, 56, 37,175,161,177,194,136, 8, 94,180, 70, 35, 80,217,134, 49,102,198,177, 71, 89, 75, 8, 81,114, 17,156,149, 49, 59, 74, -194, 93,124,241,140,143, 35,195, 24, 36, 15, 64,179, 23,187, 29, 9,198,247,240,182, 61, 74, 57,171, 61,169,109, 31,144,178, 47, -178, 82, 23,210,113, 29,226,217,105, 94,206,194,142,240,163,162,211,194, 79,208, 74,162,109,235, 16,177,133,212, 54,173, 47, 82, - 76, 71,217, 32, 83,202,228,148,177,126,172,122, 63, 26,243, 31, 97, 95, 49, 90, 66, 85,172, 21,180,178, 50, 69,208,150, 15,106, -121, 37,171,225,163,132,172,167,102, 1,121,175,238,167,104,143,242,132,205,156,240,211, 28,162,197,173,214, 56, 99,168,140, 61, -180, 55, 74, 97,157,197, 90, 9,156,170,139, 64,212, 32,221,124,202, 9, 91, 87,118,143,136,204, 89, 61,181, 63, 47,251,132,105, - 89,159, 19, 49,196,114,208, 7, 98, 25, 33,164,124,204,121, 87, 71,204,176,227,162,126, 56,252,164,176,155,253,218,254, 56, 93, -141, 15,217,167,231,167, 43,249,135,117,254,234,200,138,160, 14,170, 69, 48,133, 40,151,133,130, 53, 42,206,206,110,113,251,214, - 29,218,185,163, 31, 94,229,253,123,239,179,219,238,112,201, 99,114,121, 33,109,230,198,157, 23, 88,220,184, 77, 55, 38,116,222, -241,133,215, 94,224, 75,159,251, 52,227,230,146,111,191,245, 22, 63,254,245, 95,100,181,222,162,141, 37,145,184,220, 14, 60, 90, -143,104,103,137, 62,112,115, 86, 19,222,189,199,119,222,127,196,249,106,139,210,112,235,198, 41, 57,195, 23, 63,253, 42, 87,151, - 43, 30,156, 95,241,100,189,193, 84,134, 79,124,226, 69,126,211, 15,253, 16,163,207,252,210, 55,190, 78,192,242,223,254,196, 79, -243,213,191,229,215,242, 59,255,129,223,193, 31,251,191,255, 95,249,224,254, 99,170,118,198,159,248,127,253,183,252,147,255,212, -143,242,191,254,231,127, 31,255,251,127,247, 15, 48,250, 45,253, 85,199,127,247,227,127,134,183,190,115,151,255,213,255,242, 95, -228, 51,159,255,181,252,244, 79,252,105, 30,191,243, 54,231,239,125, 64, 88,159,209,222,186, 77,123,114,135,182, 50, 60,122,247, -117, 78,218, 36,129, 12, 49,227, 35,132, 36,147,141,132,240,188,149, 79, 48, 89,152,244, 20,206,195, 33,163,248,153,124,241,130, -121, 76, 71, 8,216,242,198,165,236,158,229,141,165,247,221,203,222,147, 90, 18,220,246,194,187, 28, 65,165,253,159, 73, 69,220, - 54,125,158, 54, 75, 80, 72, 72,185, 16,165, 42, 73,101,115,226, 83,214,206,161, 92,133,114, 66, 92, 83, 86, 86, 11, 74, 59,180, -177, 40, 43,243,211,148,101,231,169,212,180, 54, 82,251,175,109,218,245, 75,230, 77, 57,172,138,127, 53, 23, 36,176, 36,199,141, - 37, 56, 38,179,126,252,144, 86,121, 82,240, 60,126,235,107,196,245, 35,238,124,254,179,124,242, 19,159,228,221, 15,158,240,250, - 55,191,133,246, 29, 23, 87,107,134, 44,232,208,155, 55, 12,179,198,201,222, 56, 12,140,131,101,182, 88,226,180,102, 49,155,241, -248,193, 67, 54,171, 43, 78,230, 53,149,211,248, 33,161,115, 34,120,207,118,183, 35,219,154,113, 24,120,244,224, 17,119,239,222, - 37,133,145,211,179, 83, 22,139, 5,198, 40,174, 86, 87, 60,120, 16,153,207, 37, 52,102, 49, 95,112,229,206,247, 23,250,211,211, -155,108,186,129,171,123,247,185,247,193, 61, 54,151, 87, 56, 35,135,240,106, 8,108,172, 97,173,160, 81, 80,165,196,152,160,213, -154,193, 71,234, 70,227,140,162,239,165, 67,206, 25,252,152,137, 85,162, 41,249,226,139,153,231,106, 8, 24,163, 8, 57,227,209, -100, 29,241,209, 50, 36,193, 52, 43,163,174, 93, 20,149,150,203,214,190,225,136, 7, 11,149,144,193, 52,222, 39, 58, 58,129,252, -228,102,191, 10, 42, 97,158, 40, 28,198, 30, 8,148, 33,142, 24,103,229,194, 25, 35, 89,137, 29, 47,169,140,182, 78,254, 30,159, - 8, 99,196,143, 98,129,138, 33,144,252,136,202,177, 60,175, 10,109, 42,249,176, 21,198,214, 96,107,116, 93,201, 51,229,148,132, - 6,121,128, 81,148,214,169, 76, 86,202, 74, 64,133,120,180, 74,148,192, 39,116, 36,251,176, 7, 23, 77,228, 65,152, 38, 72,138, - 62, 69,234,217,172,252, 25,133,113, 53,186,170, 68,252, 89, 41,148, 77,228,108,228,232,235,131, 40,242,135,129,237,213,138,218, - 54, 82,140,116,102, 12, 18,218, 98,180,193,102, 67, 76, 1, 91, 59,161,218, 70,131, 31, 3,201, 56, 98, 62, 52, 97,193,123, 66, - 66,112,213, 33,209,123,207, 48,122, 6, 47, 29,188, 41, 86, 98,246,105,102, 89,176,202,121,154, 4,151,157,243, 94,229, 61, 69, - 47,235, 82,248, 15, 11,182, 61,164,102,191,214, 59,106, 30,143,234, 64, 8,145, 97,244,123, 48, 89,204,153,161,138,184,114, 73, - 10, 69, 84, 23, 98,220, 99,169,247, 21, 42, 23,218,100, 62,164, 64,102,117, 32,158,230,107,236, 83, 25,171,103, 37,107,185,125, -148,120,190,158,100,122, 56, 51,142,226,151,143,167,217,164,242, 61, 31,160, 85, 73,101,146,202, 34,170, 60, 10,144,153, 58,114, -103, 77, 25, 20, 30,224, 55,117,229,168, 43, 71, 85,137,128, 89, 21,187,111, 74, 9,235,172,221,147,176,184,118,235, 80,135,208, -141,163, 66, 31, 66, 40, 35, 89, 83,198,179,105,175,126, 60, 22, 24,236,173, 74,215, 34,113,202,155, 86, 29,190,169,167, 67, 94, -126,181,169,112,215,235,123, 62,112,195,201,251, 12,248, 12,232,218, 49, 95, 44,202,109,199,136,247, 90,105,116, 78,244,227,134, -190,207, 96, 22,124,254,139,127, 11,243, 69,203,221, 15,222,230, 83,159,120,142,143,191,252,121,238,190,243, 46,223,120,253,155, -188,255,157,183, 56,127,114,193,217,141, 37,102,214,114,113,126,197,173,147, 22,103,165, 24,249, 32,123,180,237, 48,210,214,150, -109, 63, 48,196, 64,242,208, 63,124, 66,202,112,247,209, 57, 31,123,233, 5,190,242,149,175,240,206,187,239,242,238, 59,239,112, -255,241, 5, 63,253,243,127,153, 7, 23,151,156,175, 59,176, 21, 47,119, 91,214,171,115,116, 50,252,125,191,227,119,243,127,249, -195,255, 39, 30, 61,124, 27, 99, 45,255,207, 63,246, 95,240,219,255,129,223,206,147,203, 39,252,123,255,254,255,161,196,102, 6, -190,249,198, 55,248, 87,255,181,255, 45,255,198,239,255, 3,188,242,226,239,226, 79,252,177, 63,202,176,190,228,254,189, 15, 56, - 83,138,187,111,191,197,103, 63,253, 42, 58,246,244,219,142, 56,110,241, 99, 34, 68,161,104, 9, 89, 53, 18, 16,187,210, 48,193, - 87,212, 20,176, 80,198,175,249,200,131,122,116, 17, 76, 37,103,125,122,142, 20,234,232, 89,143,251, 8,195,169, 53,218,191,153, - 39, 62,249, 53, 3,124,161,197, 77,221,214,193,151, 69, 42,185,246,198, 72, 12,102, 93,215,212, 37,126,177,106, 26,234,186,198, - 85, 98,243, 80, 86,188,229,170, 0,140,148, 78,211,167, 17, 81, 16,177, 28, 24,229,162,161, 10, 44,166, 76, 13,210,244,126,200, -215,239,224,186,172, 17, 12, 17,162,116, 68,111,252,226,207,240,252,188,226,249,219,183,248,220,171, 47,242,205,191,114,151, 95, -254,218, 95,229,236,206,139,132,126,199,235,111,191,201, 75,207,221,226,228,236,148, 49, 36, 54,155,181, 60,139,102, 73,240,138, -104, 29,163,247,204, 81, 84,206,176,152, 53,228, 48,208,109,215,204,108, 36,102, 65, 24,143, 17,214,235, 21,219,245,138,122,190, - 68, 43,197,110,183,101,189, 94, 3,137,186,109,153,207, 21,179,197,130,140,162,170,107,230, 51, 1,184,156,156,158,144,149,102, -183,219, 8, 47, 65,107,250, 97,100,181, 94,163, 20,188,252,177,151,185,124,255, 62,179,232,121,252,228,146, 93, 8,140, 17, 42, -205,190, 67,143, 49,147,124,134,214,144, 20,100,163,165, 11, 53, 10, 31, 50,149,171, 32,139,224,109, 62,111,137, 23,107,146,201, -248,156,132,236,135, 60, 79, 49, 20,214, 63, 7, 42,223,158, 38, 89,122, 42, 97, 7,132,253, 28, 39, 5,217,171,107,113,177, 98, -143, 89, 21,216,253,161,157,139, 58, 95,246,253,210, 31, 7,239,139, 13, 43,239,145,210, 86,110, 48,114, 62,165, 36,123,108, 63, - 50, 12, 3, 33,248,195,249, 22, 39,190, 68, 81,230, 91,183, 39,248, 41,235, 80,206, 8,210, 43,151,120,155,161,180,175, 49,239, -139, 53, 49, 19,125,220,219,162, 38, 70, 67, 46,236,115,229, 71,121,178,140, 17,166,132, 22,155,103,170, 43, 90, 43,232, 86,241, -191, 27,148,115,162,166,159, 28, 24, 90,163,188,116,252,132, 72, 30, 70,178,143,172, 47,215,130,230, 45,100,197,113,236,101,103, - 75,198,217,138,193, 15,178,206,170, 43,238, 63,186, 39, 56, 88, 36,149,210, 56,209, 84, 8,136, 71,240,174,163,143, 12,165,168, -123,127,136, 71,229, 40, 65,243, 88,103,114, 13, 43,173,132, 90,137,150,122, 99,203,205,114,130,206,100,100, 42, 28, 75,243, 16, -139,221,109,234, 98, 39,124,172, 42,122,157,148, 50,227,232, 11, 88, 62, 81, 85, 65, 10, 97,105, 86,199, 16, 24, 75,168,203,177, - 86,108,175, 17,123,134,247,206,179,150,221, 2,221, 58, 38,198,125, 88, 66,229, 71, 69, 87,239,215, 71,251, 73,198, 81,173, 59, -254,159,150,191,203, 28, 81,233,172,145, 21,160,181,186, 68,218, 90, 41,232,206, 74, 81, 55, 70, 8,140, 5,201,109, 37,103,120, -130,134, 28,122,235,167, 85,188,211,136, 53, 70, 67,138, 18, 73,233, 75, 65,151, 66,159,246,187,236,105, 15,118, 80,208,231,195, -245, 71, 29, 5,174,252,127,197, 34, 87,172, 74,228,253,140,120,175,198,173, 28, 89,213, 68,149,209, 70,179,221,174,209, 10,156, -214,244,187,142,182,210, 44, 78,102,124,242,211,223,135,113, 51, 30,221,191,203,223,246, 27,126,128,231,111,183,252,197,159,253, - 57, 30, 60,120, 76,101,160,235,119, 84,141, 40,130,183,187,142, 93, 31,104, 77,199,114, 57,199,173, 6, 98,148,120,203,152,224, -201,213, 22,175, 20, 67, 57, 19,116, 58,224,118,222,189,255,136,199, 23, 43, 42,173,185,121,227, 12, 87,215,188,254,198, 91,244, - 49, 98,218, 22, 21, 53, 15, 31,220,163,223, 4,254,212, 79,252, 52,187,224,249,135,127,247,143,240,211, 63,249,227,188,243,230, -123,220,197,240, 19, 63,241,231,248,189,191,247,127,198,232,119,252, 7,127,240,255,184, 31,233,221,123,240, 30,255,202,191,254, -175,242,239,252, 27,191,159,175,254, 29, 63,204,127,247, 95,253, 87,220,185,243, 2,221,106,205, 15,126,241, 11,204,102,134, 52, -110,233,194,134,152, 70, 82, 18,238,117,156,214,127,229, 22, 26,163,108,136,212,196, 77,159,158,147,242,179, 84,124,152, 75,226, -152, 20, 56,133,178, 28, 44,105, 50,190, 62, 8,213,246,123,116,241, 8, 28, 88,210,185,132, 67, 24, 25,195,235,107, 98, 17,133, -115,226, 81,157,118,197, 85,101, 5, 52, 81,201,131, 47,192,151,242,166, 75,185,140, 54,165, 64, 68, 47,178, 39, 83, 73, 66, 27, -202, 2,150,164, 4,227,200, 68,154,154,110,240,165,203,216, 43, 51, 73,104, 50,201, 15, 12,219, 43,172,239, 80, 42,114,249,224, - 33, 15,223,250, 6, 55, 95,121,129,109,220,210,141,129,216,111,121,251,157,247,248,190,211, 91,204,106,203,110,179,230,188,114, -184,197, 9, 89, 69,250,190,231,234,242,130, 74,103, 76, 14, 56,187,164,138,145, 24, 37,208,103,222, 84, 56,157,217, 94, 93,210, -154,196,234,234,146,110, 76,140, 49,243,238,221,251,120, 12,237,124, 78,219, 52,116,151, 59,110,223,190,205,124, 33, 92,248,237, -110, 71, 85, 85,156,156,158,177, 88,204, 9, 33,210,204,230,135,206, 53, 36,140,117,251,176,160, 27,183,110,113,235,185,231,121, -180, 56, 71, 15, 3,219,199,143, 25,140,226,241,227, 43, 60,169, 36,177,201,138, 37, 23, 84,168,236, 89, 51, 73, 73,230,118,202, -146,212,150,146,194,232, 92,120,220, 6,159,215, 36, 50,157, 31,139,224, 80,151, 16,160, 61, 70, 30,163, 53,174,146,152, 90, 82, -198, 76, 36, 67,178,116,202,169,124,228, 76,223,245,144, 18,166, 50,140,218,160,181, 47, 63, 95,201,180,119, 70,239, 19, 8,115, - 54,168,168, 75,206,125,185,108,202, 76, 94,186,196,164, 24,250,158, 16,179, 4,218,120, 47, 35,119,239,137,126, 36,134,233, 98, - 32, 89, 1,146,124,105, 37, 95,221, 88,137,241, 53, 14,140, 4,200, 40, 51, 69,252, 78,139,237, 88, 96, 79, 17,178,222,163, 87, - 21,162,211,152,138,150,214, 78, 6,195,229, 34, 48, 77, 63,149, 86,184,170,194,100, 89, 41,152,178, 78, 18,152,146, 76, 84,115, - 10,232,193,147, 67,134,232, 81, 33, 16,255, 63,180,253,217,147,101, 87,118,230,137,253,246,112,198, 59,249, 28, 30, 51, 2, 9, - 36,144, 3,115, 6,147,243, 88, 85,100,145, 44, 14,213, 53, 88, 85,203,164,146,117, 61,182, 76, 50,153,254, 0,246,131, 30,101, -146,245,131, 76,166,150,153, 36,211,216,234, 50,171, 42,235, 26,154, 85,236, 34,153,153,100, 50,153,137, 4, 18, 51, 16, 0, 34, - 16,163,207,126,231,123,166,189,183, 30,246, 62,247, 94,143, 8, 36,201, 86, 9, 48, 55,120, 4, 60, 60,220,253,158,115,214, 94, -107,125,223,239, 43, 74,108,213, 48, 62, 31, 7,159,181, 96, 49,155, 7,104,146, 8, 92, 0, 79,213,139,226,152,218, 25,156,242, - 16,175,166, 41,177,196,200, 88,209, 24, 95,196,141, 49,126,229, 81,215, 20,101, 77, 89,249,172, 0, 16, 68, 90, 61,181, 30, 93, - 38, 49, 98,195, 40,219,121, 62,185,246, 32,160,118,101, 42,150, 1, 92, 97,133,103,140,135,175, 24,223,125,218,165,197,109,173, -151,176,118, 57,219, 55,198, 80,215,254, 9, 83, 55,214,187,127,194,178,175,105,140,231, 37,212, 13,198,154,213,243,107,173,152, -187, 53, 52,249,147,135,144, 37, 71, 67,138, 39,132,128,226,169,102,244,201,229,240,179,180,101,206, 61,225,232, 18, 23, 67,178, -124, 71,206,114,167,174,131, 75, 71, 71,146, 36,142,137,219,162, 30,107,226, 72, 7, 70,134,215,166, 88,107, 3, 32, 44,112,137, -215, 79, 38, 79,170,240, 90,113,147,181, 46,228, 69, 27, 31,228, 16,148,161,198, 88, 76,227,179,164,253,219,202,110,244,228, 1, - 72, 60,113,124,123,246, 55,238, 62, 85,100,247,227,172,111,254,251, 8,187,144, 86,129, 29,112,164, 82,107,112, 62, 14, 52, 78, - 34,148,140,232,228, 41,139,197, 28,165, 98, 16, 25,183,158,255, 12,105, 46, 40,203, 51,126,253,111,125,147,217,249, 9,223,254, -247,223, 99,182,152, 96, 22, 83, 68,150,161,133, 65, 7,149,105, 81,248, 76,114,157,104,170,198, 95,100, 89, 22, 81, 86,126,143, - 86, 89, 71, 45,188,232,197, 45, 25, 76, 46, 92,227,134,170,153,163,112,204,138, 5,159,255,220,203, 60,127,235,121, 62,248,224, - 67,206,207,199, 94, 21,171, 34, 38,147, 51,238, 61,254,136,239,255, 80, 51,153,205,120,229, 27,191, 72, 57,254,215, 28,156, 62, -228,221,183, 51, 58, 29,197,243,183,158,163,223,239, 51, 28,158,135,241,160,230,224,224, 49,255,135,255,234,191,226,127,245, 63, -255, 95, 48, 58, 27,241,189, 63,249, 35, 18, 21,113,244,201, 61, 58, 29,205,214,165, 46,150, 10, 43, 93, 24, 97,179,220, 7, 53, - 97,183, 40,132, 69,216, 85,103,106,157, 93,187,160, 87,188,246,165, 34, 93,248, 40, 64,127, 48,144, 23, 2,121,214,116, 51,126, -220, 45, 85,208, 64,132,155,194,173, 20,166,237, 56,190,253,179, 74,234,181,223,247,187,125, 21, 8, 98, 82, 43,111, 61, 87, 97, - 76, 31,188, 34,206,134,194,216, 42, 85,195, 3,101, 60, 62,231,232,224, 17, 74, 74,186,189, 14,151,111, 61,231, 81,139, 34, 6, -153,248,245, 67,232, 80,252,181,161,137,178, 20,129,242, 63, 11,107,113,182,166,174, 23, 60,252,248, 99,206, 31,223,227,250,238, -128, 84, 43, 30,124,240, 62, 7, 31,223,102, 96,103,140,147, 24,135,226,228,228,156, 71,143, 14,232,124,240, 62, 66, 56,226, 36, - 97, 56,158,178,219,219, 8, 57,227,150,170,158, 51, 60,247,254, 99, 37,125, 56, 68, 89,204,201,179,140, 60,141,217,217,220,228, -240,224, 17,216,138,249, 98, 65,103,176, 77, 57, 43, 56, 61, 59, 99,119,255, 10, 73,146, 16,167, 25,231,195, 49,189, 16, 0,145, -101, 25,163,209,136,197, 98,225,147, 0,175, 92,165,170, 60, 3,123, 62,159,179,189,189,197,254,254, 62,247,238,223,227,202,149, -171, 44, 22,115,164,194,163, 55,211,148, 36, 75, 57, 19,150,141, 75, 59,236, 40,197,244,193, 49, 38, 64, 64,140,241,211,175,198, - 16,128, 62, 14,219, 24,159,197, 32,253,255, 47,203, 38,100,141,107,210, 88, 16, 73,144, 74, 80,154, 21,224,200, 88, 23,246,203, -225,160,164, 60, 72,166,141,246, 80, 82,160, 5,248,144, 73,207,156,104,240,193, 41, 18,129, 17,146, 70, 10,106, 97,144,162, 34, -144, 69,124,183, 45, 9, 22,159, 8,156, 69, 42, 31,241, 42,148, 71,231,214,117,237,109,166, 65,235, 81,215,181,143,144,109,124, - 66, 98, 93, 86,152,166,161, 41,107,172,115,193, 71,220,230, 98,251,206, 95, 71,177,199,115, 42,239,148,240,221,183,195,136, 38, -120,149,181, 47,186,117, 19,106,187, 47,248,182,197, 43, 7, 95,179,223,131,107,144, 33,183,188, 49,190, 33,177, 97,100,219, 54, - 86, 38,160, 74,149,143,224,116,194,219,242,104,157, 75,117,131,171, 26,132, 53,184,166,194, 25,139, 41, 13,139,233,130, 56,138, - 40,202, 10, 99, 26, 86, 2,233,128, 78,109, 28,105, 22,161,226,136,218, 54,104,161, 88, 20, 11,154,180,231,161, 92,225, 57, 95, -214,134,170,241, 59,244, 42, 8, 22,141, 9,216,238, 16,204,180,116,126,180, 55,187,244, 54,223,214, 17,227, 59, 79, 17, 82,225, - 2,113, 82,171, 48, 8, 89,227,188,215,134,186, 33, 76, 85, 46, 6,129,121,241,164, 13, 28,121,187,124, 43,171, 26, 33, 26, 31, -145, 27,198,106,141,241,217,236,237,116,198,173,249,228,219,189,253,133,181, 55,159,214,177,203,149, 10, 94,170,139,182, 59,177, - 22, 55,254, 12,187,246,143,167,165,174,144,186, 79,199,214,134,132,192, 48,134, 79, 34,159, 27,159, 36,109, 97,247,220, 5,161, -252, 51,216, 90,131, 38, 72,254,151,123,234, 16,204,161,130, 81,191, 61, 45,136, 53,219,146,167, 8,153,229,232,189, 49,205, 18, -171,233, 95,100,127,202,106,140, 13,191,239,213,158,118,201,212,181, 23,208,162,127, 85,184,205, 95,165,147,111,156, 68,171,246, -103,189, 28, 23, 96,133,240,157,131,138,200,179,156,110, 55,231,227,143,238,242,224,193, 29,207, 76,126,249, 39, 56, 61,155, 51, -216,232, 81, 86,167,124,227, 43, 47,112,248,240, 61,222,248,193,155, 12,143,167,164,169, 67, 42, 75,148,167, 36,221, 46, 69, 99, -121,116, 52,162,177,150,110, 63,103,180,168,153, 22, 37, 72,207,175,182, 97, 80,168,180,246, 41, 77,202, 43,132,215,167, 60,173, -205,198, 2,206, 52,188,249,246,123,124,230,230, 13,254,206,175,253,109,110,191,247, 1,227,209,132,163,209,156,210, 22,140,199, -143, 57, 58,233,147, 38,125,110,236, 95,227,103,126,233,151,249,227, 63,250, 99, 30,220,125,159, 63,251,246,127,199,253, 71,159, - 96,108,179,138,209,116, 22,225, 42,222,120,235, 13,254, 55,255,229,127,201,255,250,191,248, 47, 56, 61, 62,225,224,195,247,112, -179, 33, 7,143, 14,125, 98,212, 32,193, 42,135,105, 73, 72,237,202,226,194,177,107, 5,152,145,226,217, 39,213,229, 69, 40,130, -158, 92, 60, 89,212,131,215,179,181,181,137,150,176, 36, 87,163,119,199, 90, 81, 95, 33,100,219,160,132, 86,135, 97,157, 91, 37, - 37,105,129,210,120,209,155,106,199,252,190, 40, 27, 83,135, 61,125,131,108, 26,132,112,156,157, 30,240,198,107, 63,160, 46,231, -236,110,111,241,167,239,191,199,111,254,222,239,209,219,189, 68, 62,216, 3, 81, 99,132, 98, 60, 58, 99,115,163, 71,234, 12, 56, -133,152,207, 65, 72,234,217, 2,217, 52,200, 88,161, 92, 77,206,130,121, 61,165, 60, 93,160,147, 4, 51, 29, 83, 76, 39, 76, 38, - 51, 54, 58, 57,231,231, 35,110,127,116,151,247, 63,254,132, 90, 68,108,110,109,147,230, 25,103,227, 5,101, 93,123, 46,187,105, -192, 90,138,197,130, 97, 40, 74, 90, 57,104, 74,154,126,159, 88, 69, 92,190,188,207,100, 50, 38,237,118,216,187,118,147,254,198, - 46,227,241,132,135, 71, 39,108,109,111,163,226, 24,135, 32,201,114,226,204, 11, 5,187,253, 62, 55,111,221,194, 58,199,240,124, -200,222,254, 62,198, 24, 30, 62,124, 72,127, 99, 64,148,248, 56, 83, 7,204, 22, 5, 73,146, 82,214, 11,178, 44, 99,120, 52,164, -172, 74, 26, 28,249,160,207,213, 56,227,232,116,140, 89, 84,126,252,238,189,138, 32,125, 66,155, 13, 1, 32,206,212, 8,225,131, -129,140,245,129, 41, 58,142,137, 26, 71, 55,209, 56,211, 80, 57,208, 65, 0,232, 39,170,110,137,236,245,226,103,175,215, 81,194, -250,192, 22, 17,160, 68, 56,156,109,112, 13, 56, 29, 33, 92,236,139,183,113, 52,194,132,161,160, 11,188,138, 16, 16,238, 86,177, -153,203,107,214,250, 76,121, 0,219, 24, 31,196, 22,132,115, 77,221,248,213, 70,240,195,155,160,228, 23,107,170, 94, 29, 14, 42, -173,245, 83,170,216, 23, 89,169,188, 51, 68,218,176, 63, 23, 72,169,151,221,157, 23,163,152,149,166, 74, 71, 33, 60,104, 37, 15, -183,206,171,215, 81, 62,202,117,217,216,132, 6, 80, 69,145,135,212, 90, 31, 22,132, 18, 8,235, 35, 94,133, 53,184,218,224, 26, -131, 48, 13,212, 53,174,174,153, 79,103,148, 69, 77,154,118,169,235, 41, 90,235,101,186,162, 16,146,249,162,242, 43,172, 56,163, - 52,150,198, 89,104,252, 10,211, 24,139, 85,202,143,220, 27, 31, 40, 83, 85, 13, 85,109,168,106,191,171, 94,214, 14,215,106,166, -196, 19,210, 40,187, 28, 76,203,144, 43, 31, 73, 65, 18, 43, 47,244,138,181, 71,175,134,113,185, 9,226,220,170,110,168, 27,111, - 11,108, 3,101, 86, 63, 39, 15,191,105,107, 79, 21,220, 16, 38, 20,240,186, 17, 75,225,235,122,209,111, 51,219,185, 96,187, 19, -171,142,189,157,146,184,167,157, 86,171, 16, 40,249,148,246,107, 77,105,247,233, 97,101, 79, 64,118, 62, 85,250,189, 86,224,165, - 20, 62,131, 67,249,104,225, 40,140,220,147,128,192,141, 34,237, 67,150,194,115,181,105, 28, 58, 44,145,150, 5, 91,138,213, 28, -191, 45,232, 81,164,151,136,188, 86,165,106,173,183, 61,248,174, 92, 99, 77,176, 63, 93, 40,234,254,253,166,246,176,127, 19, 62, -198, 88,187, 84, 65,183,177,117,207, 26, 99,252,101, 59,247,167,138, 62,130,235, 55,111,113,116,120,128, 45,231,173, 20, 15,132, -242,131, 84,161, 72,163,132,221,237, 29,170,170,228,244,244,152,205,173, 13, 54, 55,119, 57, 59,159,177,189,191,139, 53,115, 94, -184,113,131,135, 31,125,196, 39, 31,125,196,124, 54,161,180,134,142,142,208,145, 64, 38, 49,105,119,147,135,159, 60,228,124,110, - 80, 81, 68, 83, 72,182,250,187,100, 91, 30, 75,105,165,164, 42, 27, 78,143,143,105,202, 18, 37,189, 93, 70, 9, 25,198, 72, 79, -104, 34,133, 31, 97, 90, 26, 62,186,119, 15,245,167,127,202,111,255,198,223,230,193,189,123,228, 7,143,185,125,231, 99,170,217, -156,195, 71,143,201,147, 1,239,124,240, 1, 63,241, 15,127,151,175,124,109,198,244,143,254,144, 89, 63,227,240,145,163,116, 14, -164,194, 8,175, 48,149, 52,140,199,231,124,239,213, 87,249,103,255,242,223,240,155,255,201,239,241,127,254,223,253,111,145, 38, -163,107, 44, 90,117,144, 42,162, 17,181,231,148, 35, 80,194,231,201,183,118,152,101,180, 40,235,133,220, 46, 69,143, 23, 47,123, -185, 28,141,175,198, 72,226, 2, 19,125, 37,156,243,201, 26, 34,116,126,182,245,136,175, 91,222,194, 97, 66, 5,175, 38, 82,249, -108, 45,103,145, 90,160,180, 39, 8,250,208, 23, 21,114,175,229,114, 42,208,122,154,125, 55, 82,130,173,121,243,213,239,113,122, -244,144, 44,150,188,123,255, 54,119, 63,190,203,255,254,206,199,252,214,223,253, 93, 26,145,241,252,103,191,192,108,182, 32,141, - 5, 91,157,203, 8,215, 96, 10, 11, 33,125,171, 25,142,153,156, 28,211,233,230,228, 27, 61, 54, 82, 56,154, 13,185,127,239,144, -203,151,246,105,202,146, 56, 73,169,209,232,180, 75, 81,157, 81, 89,137,145, 41,231,227, 25,221, 94, 31,169, 34,116, 2,101, 93, -211,205, 50,143, 90, 45, 42,239, 26, 48, 6,161, 21,146,138,122, 30, 49,155,140,201,146,148, 44,239,113,227,249, 23,184,116,245, - 42, 42, 74, 16, 66,179,119, 89, 16,165, 57, 31,222,185, 67,237,160,108, 28,157,222, 0, 21,107,106,227,175, 77,161, 52,166,170, -208,177, 15, 43,153, 47, 22, 1,121,155,160,148, 98, 60,153, 16,197, 49,221,110,215,243,192,243, 12,133, 34,205, 82,159,208, 22, -107,191,227,243,243, 23,172, 82,158,234, 70,155,121,237,227, 88,189,146,208,162, 21, 52, 70, 34,133,101, 81,213,228, 54, 70, 68, - 26,109, 27,122,113,204,188, 50, 30,109,236,132, 23,161,181, 57,213, 65, 9, 29,197, 18,169, 67,254,180, 2, 37,195,216,221,121, -136,143,112,254,184,236, 5, 88,126,199,221,212, 6, 45,188,168,168,181,229, 90, 43,124,214,119, 56, 52, 56,219, 96,156,193, 10, -136,162,216,143,195,219,221,189,243,123, 89,225, 31,110,222,123, 28,212,245,214, 9, 47,190, 12, 32, 16,144, 88, 39,177, 78,172, -165,180,121, 93,134, 23, 97,122, 70,134,176,198, 67,149,214, 59, 86,103, 2,156,198, 44,137,117, 75,112, 82,187,219,149,224,180, -135, 45,201,112,168,109,145,166, 46, 76, 25,150,162,176,166,246,154, 3, 33, 16, 77, 3,193, 86, 22,122,182, 48, 61,105, 24, 14, - 71, 32,189, 75,164,170, 74, 63,209, 10,139, 48,165, 52,117, 61, 35,203, 58, 68,113,202,162,110,168,173, 35, 86,210, 23, 19,169, -189,128, 48, 28,245,151,123,238,246,249,111,237, 42,145,113,109, 76,125,113,109,219,102,103,182, 83, 14, 65, 26, 71,228,105, 68, -146,104,210, 36, 34,142,147, 48, 62,118,222, 5, 98,253, 36,160,106, 68,208,112,153,165,144,187,213, 93, 24,107,105, 26,191,211, - 87, 85, 67, 89, 86,148,149, 95,173,173,186,114,150, 90,177,101, 87, 46, 68, 16,253,138,165,107,237,130, 24,175,157,166,182,113, -224,238,217,190,234,103, 53,156,159,214,149, 95,252,204,226, 83,145,232,171,103,238, 90, 97,199,175,163, 86,141, 76, 72,138, 11, - 49,209,235,248, 89, 41, 37,250, 89, 99,238,117, 56,191, 87,223,233,101,112,197,186,189,173, 9,227, 15, 47,148,243, 39,219,102, - 57,126, 55,171,110,190,177,193, 87,106,131, 88,193, 81, 47,199, 33,246,130,255,248,175,218,169,127, 90,215,126,243,185, 91,252, -230,111,252, 38,255,183,255,203,255,137,166, 44,194,139,232, 59, 7, 29,199,108,109,110,177,181,217,231,241,163,251,104,173, 73, - 59, 29, 70,179, 41, 27,219, 27,204,202, 49, 95,251,252,231,249,209,159,127,135,106,116, 70, 34, 18,138,185,101, 99, 43,161,168, - 43,180,141, 40,167, 53, 39, 15, 62, 65,165, 29,190,242,147, 95, 98,239,210, 21,210, 56, 97, 49,155,178,119,105,151,131,163, 35, -246,175, 94, 99, 54, 91,176,217,237, 18, 73,193,163,131,135,124,255,213, 31,112,255,193,125,228,154,104,143,112,177, 11, 90, 84, - 41,148,214,242,222, 39, 31,115,233,141,215,248,189,223,249, 29,254,240,223,255,183,244,143, 51,142,143,166, 76, 71, 99,234,102, -202,241,217, 1,255,225, 79,254,130,223,250, 91,191,200,189,219,111,145,198,146,249,124,204,237,187,159,160,162, 8, 83,251,159, -113, 36, 29,105,156, 80, 84, 37,255,175,255,230,255,205,223,254,181, 95,229,249,151, 95,230,248,195,247,176,165, 33, 75,251, 12, - 54,251, 28, 14,143,194, 88,221,211,178,252, 8,201,174,217, 4,237, 42, 90,114,205,206, 32, 46, 28,184, 60, 40,102,229,202, 16, -203,240,157, 11,111,107,176, 66,255,119, 40,255,144, 22, 43, 91,155,148, 43, 23,133, 20,114,217,169,123, 5,112, 0,157,132, 20, - 55, 29, 70,119, 82,251,189,163, 12, 92,230,213,186,200,171,166, 93, 93, 83, 21, 99,238,125,252, 1,245, 98,196,105,181, 96,123, -115,147,126, 39,227,124, 54,230,232,224,128, 89, 97,121,235,205,119,232,245,122,124,225,165,231,233,171,133,247,139,167, 57,170, -147,227,170, 26,187, 24, 50, 63, 63,164, 28, 57, 98,246,113, 70,208,207, 35,152,121,229,122,154, 36,116,187, 3,102, 69,195,104, - 86, 32,116,204,231,190,240,101, 68,103,155,114, 49,163,177,126, 55,175,227,132,233,116, 70, 55,203,136,162,136,121, 51, 9,164, - 44, 95, 48,181,141, 81,141, 70, 58, 88,204, 11,242,218, 34,116,194,104,178,160, 59,136, 49,117, 65, 93,215,108,110,109,115,173, -110,184,247,232, 0, 91,215, 72,173,169,235,134,170, 90,208,235,246,208, 42, 90,174,203,146,216,115, 25,196,218,207,180, 40, 12, -251,151, 46, 81, 85, 37, 77, 93,161,179,140,114, 81,248,149,133,240, 15, 89,140,197,214, 13, 56, 71,109,131,160,208,249, 93,165, - 86, 80,215,134, 72,203, 0, 99,241, 86, 28, 83, 53,212,149,193, 56, 71, 81, 85,164, 73, 70, 39,142, 40,171, 2, 99, 3,102,213, -132,204, 60,173, 72,117,176, 82,134, 21,137, 23, 64, 25, 26, 83,161,173, 70,248,106,226,119,139,218, 95, 51, 46,248,143, 91,165, -180, 9,197,188,237,152,140, 49,168,160, 29, 48, 97, 74,214,178,186,235,218,250, 17,174,113,136, 56, 10, 93,156, 15,242, 89,185, - 31, 28, 66, 74, 34,229, 49,163, 44, 83,198,252, 62, 61, 10, 98, 57, 41,181,215,134,132,192, 32, 63,212,212,172,188,194,126, 4, -109,155, 64,210,112,254,239,182,181, 69,199,169,255,121, 90,127,176, 80, 90, 5, 32, 14, 40,169,112, 77,179,252, 51, 75, 85,181, - 49, 62,254, 86, 11, 92, 85,249,137, 73,221,128, 49, 97,245, 96,150,197,221, 26, 24,141, 39, 68, 73, 26,126, 38, 13,113,148, 32, -149,183,168,249,209,190, 36,142, 83,172,105,147,233, 26,186,218,211, 0,163, 56,241,159,223,137,181,206,213, 11, 97,109, 75,127, -187, 0, 77, 17,203, 67,253,133,157,117,248,147, 82, 18,162,169, 99,242, 44, 33,203,124,254,121,146,100, 1,223,139,183,161, 53, - 13, 85, 99,150,142, 28, 47,112, 19,203,195,143,175, 59, 13,101, 85, 83, 85, 53, 81, 89,133,209,127, 21, 14, 1,126,165,216, 22, - 97, 41, 86,212, 55,159,232, 24,166,128,210,173,237,201,185,104,196, 14, 7, 2,177, 62,248,119, 79, 51, 8, 62,141,209,242,236, -145,251, 90,212,235, 51, 26,188,103, 54,238, 98,181, 18, 87, 33, 84,107, 21,143,189,242,238,183,111,234,197, 27,251,191,191, 84, -191, 35,150,169, 90,109,244,165, 8,106, 63, 17,102,251, 4,117,158, 84,254,230, 90, 26,225, 67,150,114, 20,112,124,145,246,135, -129, 72,249,211, 68, 20,233,160,220,243,121,216, 74,137,208,129,249,139,192, 61,195, 72,224,184,120,130,114, 63, 38,131,189,253, -128,209,120,206,239,252,222,223,227,235, 63,243, 11,188,117,251, 14,147,194, 7, 33,108, 12,186,244,183, 46,147,100, 93,186, 81, -205,163,123, 31,208,217,216,160,150, 25, 73, 62,160, 88,204,248,249,175,125,145,183,127,248, 67, 62,124,239,109, 16, 11,154,166, -228,124, 92,115,105,175,203,209,180,225,100, 14, 58,217,226,107,175,252, 44, 95,252,242, 79, 48, 62, 63,225,243, 55,175,179,213, -233,241,221, 87,223, 96,127,208,197,206,198, 92,218,187,140,138, 58,124,251, 15,255, 61,167,119,222, 35,142, 99,126,242,155, 63, -197,175,254,226, 47, 51,155, 76, 56, 63, 63,247,157,105,235,141,181, 43, 3, 94, 24,133,112,116,112,140,214, 49,127,231,239,255, - 19,190,247,173, 63,102,116,126, 72, 19, 41,242,126,143, 65, 22,161,108,205,241,120,198, 47,253,202,111,112,114,231, 14,227,195, - 71,212,182,228,124, 62,195, 53, 13,145,133,218, 9,154,122,142,165, 96, 54,159, 48, 45, 13,255,228,127,252, 63,225, 79,254,240, - 63, 96,202,194, 3, 89,146, 46, 70, 41, 74, 59,199, 81, 34,157, 2, 19,121,155, 5,107, 41, 74,206,122, 11, 87,155,121,220,222, - 41,173, 17, 85,138,181,145,150, 88,203, 31,110,201,112,161, 32, 47,187,120, 21, 14, 9,210,219,108, 2, 39, 29,161,150,251,243, -118,124,175,117,224,173, 75, 63,218,215, 64,162, 35,242, 36, 33,203,210, 16,236,225,255, 27,167,169,223,115,234,224, 49,247,203, - 55,207, 88,168,231,124,240,230,247, 57,120,112,155, 98, 62,199,168, 28,213,217,101, 82,103,152,120,192,239,254,227,255, 17, 63, -255,235,127,147, 47,126,249,101,164,171, 40,206,206,153,142,103,168,188, 79,146,118, 16,206,139,149,100,164, 56, 63, 63, 33,149, - 17,105,150,144,119, 58, 24, 33, 73,187, 93,242,188,235,149,202, 85,133,177,142,206,246, 14,215,110,222, 32, 78, 61,244, 37,235, -246, 49, 72,154,186,194,212, 6,103,252,195,123, 81,148,104,173, 48,117,233,163, 68,173, 79,149,139,211, 14, 27, 59, 59,204,202, -138,225,120, 76,150,165,108,244,123,104, 42,164,169, 41,102, 99, 58, 89, 70, 81,248,191,175,177,142, 72,107,138,249, 28, 37, 4, - 81,164, 89,204,166, 28, 60,122, 72, 55,203,232,230, 25,199, 71,135,108, 12,122, 12,135,167, 76, 70,231,148,197,140,243,179, 19, -238,223,187, 11,117, 77,170, 35,102,211, 49,199, 39,199,204,139, 2,219,120, 97,212,241,233, 41,166, 49, 36, 56, 50, 41, 73,148, - 68, 73,136,148,239,154,173, 84, 52,141,135,199,184, 80, 28,147, 84,209,233,102,228,169,102, 81, 46,120, 60, 90,208,168, 20,156, - 65,135,177,113,146,106, 58, 93,208,177, 69, 69, 14, 33, 29, 66,106,210, 52, 35, 10,168, 87, 21,210,177,252,184, 81,181, 40,110, -127,233, 41, 47,102,212, 65,115,161,148, 10, 41,132,126, 93,132, 37, 56,147,253,231, 17,200, 64,158,243, 65, 40,173,210,165,170, -189,181,179, 50,126,141,215, 56,135, 84, 17, 73,156,147,102, 93,116,228, 11,156,140, 37,105, 39, 35,235,244,233,244, 55, 72, 58, - 61, 68,154, 67,148,225, 84,140, 17, 26,233, 36,194, 53,184,166,192,214, 37,210,250,152, 95, 97, 42,176,198,119,183,206,173, 89, -172,196,202,246,107,220, 82,192,135,245,153,245, 66,133,152, 96,239, 45,241, 22, 62, 99,188, 53,206,248,130,238,156,133,218, 34, -109,133, 48, 53,212, 80, 77, 45, 31,223,254,196,127,127,243, 17, 85, 89, 34, 84, 66,156,118,104,170,154,162, 88, 32,227,136,164, -219, 67,233,148,209,100,204,168,156,208,143,123,148,165,197,108,110,160, 6, 61,234,166, 93,185, 26,154,208,165, 91,235,188,134, - 66,136, 0,129,138, 72,211,200,167, 58,182,221,186, 23,141, 96,141,165, 54, 13, 2, 72, 35, 77,150, 70,228,105, 76,150, 39,100, -121, 74,158,251,112,158, 86,232,170, 35, 29,196,175, 17, 89, 18,135,251, 59, 33,203,114,178, 44, 35,205, 82, 63,130,142, 60, 12, - 72,133,233,156, 49, 22,131,103, 33, 88,227,213,238, 34, 60,155,180,246, 73,147,145, 2,173,180,175, 75, 74,145,165, 62,143,163, -147,166,164, 73, 68,154, 68, 68,177,207, 64,208,145,246, 97, 43,170,253,111,155,176, 38, 62,149,115,255,227,114, 76,156,107,252, -129, 72,172, 42, 93,171,253, 49,117, 69, 85,150,148, 69, 73,177,168, 88, 44, 74, 15, 8, 2,159,236, 23,154,107,173,125,173,245, - 1, 82,114, 53, 61,119,126,114,174, 94,188,113,233,247,133, 92,169,143, 87, 99,211,213, 40,179,149,215,139,181,253,233,250,239, - 47,201, 55, 74,173,172, 98,122, 61, 53,201, 91, 62,148, 86,104,165,194,168, 84,133, 67,129, 8,106,231, 21,130,246,201,241,132, -120,194,130, 32,158,241,195,107,223,175,108, 69,167,223,227,231,126,241,151,248,155,191,254, 91,108,239, 94, 97, 94, 24, 4, 49, - 81,148,177,183, 61,224,193,221,219, 72, 41,200,250, 27, 8,229, 47,140, 47,125,238, 37, 62,124,247, 61, 62,188,253, 26,147,209, - 28, 91, 73,174, 95,191, 66, 69,205,209,121, 1, 58,231, 27,223,248, 6, 95,255,242,215,185,119,255, 1, 63,251,115, 63,195,225, -227, 7, 20,227, 17,111,189,245, 54,181, 20,100,177,160,215,201,249,214,159,125,143,195,211, 51,132,157,243,210,243,151,232,110, -108,114,231,147,123,252,232,245,215,248,233,159,250, 41,126,230,167,127,150,199,135, 7, 76,103, 51,223, 9,133, 37,155, 91,218, -253,188, 23,244,228,248,132,221,189,203,252,204, 79,189,194,127,255,237,111, 83, 24, 71, 47,213,244,100,195,120, 52, 70,103,125, -190,246,245,175,179,152,142, 25, 15,207, 0,193,116, 58, 99, 94, 84,126,151, 36,101,200,123,118, 88, 43,120,124,120,198,223,254, - 91,127, 27, 44, 60,184,255, 9,105,150,250,196,163, 98, 78,164,125,174,184,112,107,105,107,159, 18,129,251,151,120, 15,214,130, - 94,196,133,172,241,245, 87,115, 69,156,146,107, 57,236, 33, 0, 37, 16,186,164, 88, 93,127,109,103, 41,133, 23, 57,197, 81, 68, -150,249, 98,158,101, 62,177, 43, 73, 19,127, 35,198, 17, 66,201, 11, 98, 62, 28, 40, 26, 78, 79, 30,115,255,147,187, 20,149,161, -180,154,173, 75, 55,184,113,235,121,126,229,111,252, 50,157, 44, 65, 54, 5, 81,164,232, 38, 9,166, 44,120,247,237,119,160,105, -200,149, 68, 98, 64, 89,146,204,255,191,243,195, 99,162, 56,245,133,218, 9,242,222, 6, 89,183,199,230,214, 54,189,193, 22,183, - 62,251, 18,187,151,246, 73,178, 14, 82,199, 28, 29,159,144,102, 25, 89,150, 6,175,105,138,115,126, 28,236,130,224, 80, 10, 15, -210,136,162, 8,227, 32, 78, 50, 46, 95,187, 70,146,230, 28, 30, 30, 97,112,108,239,108,145,199,138,166, 42,177,198, 80,150, 21, -113,156, 50, 43, 10,111,177, 18, 80,149, 37, 85, 85,145, 36, 49,139,197,130,241,112,136,115,142, 56,138, 56, 27,158, 48,155, 77, -121,252,248, 49, 90, 41,238,222,185,131, 49,150,241,120,204,108, 58,165, 42, 61,117,108, 94, 86, 44, 22, 5,101, 85, 49, 26,142, - 56, 25,142,217,218,218,240,108,253,170, 33, 81, 18,141, 67, 75, 15, 2, 42,235, 26,108,120,221,130,151, 60,207, 19, 54,183, 6, - 24,107,144,113,194, 39, 71, 35,162, 36,193,212, 13, 42,100,100, 39,137, 38,235, 8,164,183,134,248,108,116,173,124, 70, 67,232, -144,149, 82,171,168, 91, 21, 48,173, 1, 37,235,218, 67,226, 69,184,159, 47,144, 79, 16,204,214, 33, 98,214,249, 21,161,181,126, - 37, 88,214, 13,101,227,213,221, 77,109,151, 58,129,180,211, 69,197, 41, 34, 8,211,148,146,232, 40, 70, 39, 25,105,183, 75,156, -117, 16, 81, 12, 90,226, 84, 43,205,181, 8, 91,131,173,176, 77,133,116, 94, 55, 99,234,210,171,212,133, 12, 83,245,182,176, 7, -212,108, 8, 75, 89, 2,187,172,161, 93,145,186,214, 82,212,238,172,156, 9, 30,248,112, 8,176,190, 64, 8, 26,255,126,229, 56, -122,124,204, 39,119,238, 18, 73,201,240,228,136, 52,203,105,172, 63, 72,107, 41,153, 76, 38, 36,121,135, 56,237, 97, 12,204, 22, - 51, 10, 83,209,139, 50,138,202, 16, 95,218, 67,230,121,192, 69,187, 37,120,202, 6, 22,133, 13, 93,107,164, 36, 73, 28, 70,233, -145,127,198, 47,239,239,118,178,107,188, 56,208,127, 92, 18, 58,245,213, 91,154,132, 67, 91,176, 8,182,107,162, 36, 77, 72,210, -148, 52, 75, 73,243,140, 44,247, 7,248, 52,246, 69, 95, 7,170,159, 23,209,182, 5,221,219,241, 90,241,158, 82,138, 40,208, 0, -227,240,185, 35, 29, 17, 69,138, 60, 77,232,118, 50, 58,121, 66,150,196,164, 73,132,142,124,188,179, 10, 69,189, 21, 38,250, 6, - 87,173,124,234, 63,142,144,246, 84, 81,183,254,117, 92, 71,157,187,139, 69,189,174, 42,202,162,162, 40, 42,138,181,162,238,163, -113,253,179,111,117,160, 13, 13,177,107,197,193,254, 57,173, 94,184,182,251,251, 75,165,113,107,245, 8,210,253, 54,254,114, 89, -212,197,197, 7,246,210,119,248, 4,132,222,255, 0, 37, 74,251, 28,105,213, 22,114, 37,195,175, 87,111, 44, 79,212, 92,200,209, -125, 42, 28,227, 9, 47,225,179, 10,186, 31,103, 87,156,158,159,115,120,124, 74,221, 56,238,221,123,196,124, 90, 49, 28, 21,116, - 51,205,233,227,187,140,199, 35, 58, 27,155,160,124, 97,184,178,179,201,124,120,194, 15,127,240, 3,112, 53,189, 52, 34, 77, 98, - 10, 99, 57,153,150,100,219, 87,248,230, 79,190,194,103,159,191,193,243,207,221,228,165,207,190,192,159,126,231,219,236, 95,218, -195, 84, 53, 73,146,243,133,175,254, 20,145, 72, 72,226, 1,151,174,188, 64,111,176,141,171, 75,104, 10,106, 99, 57, 31,142,216, -191,180,207,199, 31,127,204,241,241, 49,191,253,219,191, 67,175,223,227,227, 59, 31,211, 88,179,220,167, 5, 61, 34, 82, 10, 22, -139, 5, 39,135, 71,124,233, 43, 95,165,183,181,207, 59,239,189, 15,179,115,114, 51, 39,201,114, 84, 62,224,224,240,144,175,190, -242, 13,190,255,253, 31,160,106,203,228,244,156,162,174, 88, 40,135,212, 18, 83, 55,193, 1,172,168,138,134,209,120,206, 63,249, -167,255,132, 63,248,131, 63,160,223,239,210,235,246, 57, 59, 57,164,155,197, 56,219,248,241,162,112, 63,246, 50,253,113, 98, 69, -177, 70,126,146,114, 45,193, 77,172, 70,119,203,221,155, 16, 1,216, 34,151, 34,205, 22,186,208,142,238,219,232,213,229,190, 92, -248, 27, 43,142,180, 63,185,231, 41,121,230, 79,249, 73,154, 16,167, 73,216, 37,171,176,235, 91,141, 13,149,116, 28, 30, 62,194, - 33, 56, 25, 78,216,190,116,157,221, 75,215,184,126,227, 50,219,253,156, 94, 18, 65, 49, 67,150, 37,182,174, 88, 44, 22,148,101, - 73,174, 20,253, 65, 15,157, 70, 1,180,231,136, 84, 76, 44, 99, 58,155, 91,232, 44,167,172, 13,243,162, 34,235, 13,136,243, 46, -155,123,187,136,200,195, 60, 44,254,161, 48,159, 23, 60,124,248,144, 72, 41, 54,250,125,162,216,103,173,139,176, 11, 94,207, 94, - 78,210, 60,164, 4, 42,242, 78,151,173,173, 45,102,179, 25, 39,167, 39,244,122, 29,118, 6, 93,191,155,181,150,170,174,112, 72, -234,198,231,177, 11,188, 37,104, 49,159, 19, 71, 17, 77,237,247,142,121, 39,167,170, 74,134,163, 51, 38,147, 49, 85, 85,178, 49, -216,164, 88,148, 84, 85, 77,183,211,163,147,231, 88,107, 24, 79,103, 12,135, 99,142,143, 79,152,205, 22, 12,199, 99,170,144,162, -214, 20, 21,177, 80, 68, 64,228, 28,105,164,208, 90, 82,213, 6,107,124, 50,150,195, 11,112,227, 68,209,237,119, 49,214, 18,231, - 93,142,207,167, 88, 33,169,170, 42,228, 50,224, 5, 83, 29,223,113,131, 37,138,252,161, 45,138,162, 85,194, 86, 20, 7,239,241, - 90,164,111, 75, 27,108,201,131,142,229, 68,199,219, 17, 87,174,225,213, 53, 38, 47,228, 91,180,206,168,170, 49, 52, 22,154,218, - 82, 22,126,164, 75,221,120, 56, 75,146,121, 45,129, 16, 33,116, 37,236,135, 35, 77,154,250,172,119, 17,198,238, 43,232,141, 5, - 87,226,108,137,169,106,164, 19,208, 24,108, 93,161,176, 56,211, 44,133,125,237, 14,223,153,128, 78,198,119,153,206,218, 48, 0, - 11,227,247,150, 95, 47, 86,227, 95, 97, 45, 52, 77, 88,118, 7,124, 50, 65, 27, 80, 89, 62,120,231, 54,167,199, 39, 72, 28,211, -209,144, 36,201,145, 58,161, 44,107,210, 36,101, 60,157,209,221,216, 33,202, 58, 44, 22, 37,211,233, 24, 29, 71, 40, 43,104,156, -160,115,245, 50, 36,217,154,112,108,165,133,106,227, 86,101,176,179, 37,177,239,114, 99,173,131,250, 92,132,159,190,183, 64, 55, -141, 7,235, 68,218, 23,255, 52, 77, 73,146,136, 36,245, 69, 62, 78,162,144,128, 40,131,179,192,119,236, 81, 28, 17, 39, 49,113, -146,144,100, 9,113, 18, 19, 37,113,184, 70,252,225, 68,134, 44, 9, 23,248,255, 38,116,233, 88,143,147, 86,202, 43,199,147, 88, -147,198,145,255,251,226,136, 52,246, 25,243,157, 44,166,147,197,164,177,127,182,168, 16,225,171,180, 90, 22,117, 95,204,219,247, -255,135, 20,245,149, 72,252,217, 69,189,166, 46, 75,202,178,164, 92,148, 20, 69, 69, 85,251, 68, 57, 17,154, 25, 63,225,190,216, - 72,175,174,109,255,186,168, 91, 87,182,127,127,153,170, 69, 32, 1, 5, 20,162,210,109,158,181,122,202,146,244,172,194,122,161, -139, 15,182,156,213, 23,208,190,133,209,187, 10,169, 58,172,162, 60, 87, 22, 3,214, 66, 59, 86,185,218,171,157,199,167,119,234, - 10,199,116, 60,229,209,253, 7,188,249,163, 55,120,252,240, 1,179,201, 24, 41, 44,195,195,123, 44, 38, 39,168, 36, 33, 31,108, - 16, 39, 9,105,164, 72,133,225,181,239,127,151,211,179, 83, 82,221, 33,142, 52,121, 79,115,112, 58,167,191,243, 28, 47,125,233, -203,236,239,109, 82, 78, 70,124,247,219,223,226,198,245,107, 68, 73,194,254,254, 21,223, 85,197,146,141,157, 45,166,227, 17, 73, -154,176,177,181, 73, 89,142, 73,226,154,110, 23,148,138,105,140,227,229,207,126,150,247,222,123,151,155, 55,111,242,207,255,197, - 63,231, 87,126,245, 87,249,249,159,255,121, 94,127,227,117,202,208, 93, 95, 40,126,192,116, 60, 98,255,242,117,126,253,119,254, - 62,175,189,250, 67, 6,162, 64, 21, 19,146, 94,151,162,209,196,113,202,206,149,171,228,157, 62, 31,191,245, 14, 81,211, 48,169, -230,204,108,237,237, 92, 97, 97, 47,144,222, 87, 44, 53,191,253,247,254, 62, 31,126,252, 49,143, 31, 62, 32, 75, 19,142, 30, 63, -102,208,237,120,186,154,240, 99,246,214,230,127,225,109,213, 63, 92,184,150,197,234,157,101, 18,145, 20, 23,199,241,207,178, 35, -182, 60,229, 85,247,190,178, 79,174,135, 27,172, 58,117,181,188, 30,226, 72,147,165, 9,157, 48,186, 75,179,140, 36,203,136,211, -108, 57,126,111, 45,115,171, 3, 3,140, 70, 99,238,221,127,128, 78, 50, 94,252,236,231,249,252, 23,191,200,243,183,174, 97,171, - 25, 71, 15,238,241,209,187,239, 99,138,130,254, 96, 16, 66, 56, 36,169,138,125, 71,211,235, 17, 15, 6, 24,231,147,250, 36,177, - 15,248,136, 82,162, 36,165,104,188, 66, 88,199, 9, 40,205,108, 54,103, 60,154,224, 28, 76,166,115,170,186,226,225,253, 7, 84, -197,130,141,126,143, 56,214,228,121,238,247,185, 97, 71, 73, 24, 89,198,105, 78,214,233,145, 36, 41,221,110,151,205,141, 13, 6, -131, 62,117, 85,242,232,225,125,182, 7, 61,242,196, 71,101, 54,193,131, 43,116, 68, 81,122, 8,199, 98,177, 96, 58,157, 4,143, -250,192,143,237,226, 56, 28,216,253,107,145,231, 29,250,253, 62, 91,155,219,100, 89,135,141,141, 77,122,221,142,143,108,157, 45, - 24,143, 39, 12,207,199, 88, 7,113, 28,211,235,245, 40, 27,203,100, 58,195, 52, 13,137,144,100, 18,175,221, 72, 53, 69, 97,150, -121,229, 77, 99,209, 65,100,183,189,189,141,147,146,188,215,103, 52,157, 49,154, 45, 2, 43,220, 5,188, 43, 68,169, 69,105, 95, -192, 34,173,194, 40, 54, 9, 9, 91,138, 56,100,169,123,108,174,244,157, 96, 8,231, 96, 25,225,203,242, 57,229,159, 43,173, 23, - 90, 46,133,125, 34, 28, 4,156, 16, 33,229,205,187,116,106,227,130,186,219, 80, 87, 13, 85, 81,210, 76,167,222, 13,162, 53, 70, -128, 49, 53,166, 88, 32,170,210,219,197, 92, 19,214,135, 22,233,227,144, 16,174, 66, 52, 21,152, 5,216,106,105, 43, 83, 8,104, -106, 76, 49, 67,186,102,185,106, 19,107,148, 66,130,162,189, 13,129, 18,161,179,195,217,176, 47, 95,123,230, 89, 3, 77,248, 60, -198, 4, 44,173,245, 69,199,203,195, 89, 76, 22,188,243,198, 59,184,166,161, 42, 22,212,101, 9, 50, 34, 78,186, 30, 30, 83, 86, -212, 64, 54,216,166, 81,158,166, 55, 25,141,208,105,140,173,106,172,142,200,175, 92,198, 69,113,144,193,174,197, 95,135, 78,221, -133,239, 65,171, 80,212, 99, 95,104,229,154,237,181,237,210,155,218,107, 1,148, 86,164, 65,189, 29,199,138, 40,214, 75, 50,218, - 82, 88, 27,132,137, 42,242,153, 29, 58,142,137,211,152, 56, 73,151, 99,241,168, 93,203,169,112, 29, 56, 86, 26,175,160,235,242, -135,101, 47,246, 78,151,163,252,132, 60,245, 93,121,146, 68,228, 89, 66, 39,243, 59,254, 52,120,191,117,164, 2,135, 64,135,103, -137,199,195,250, 49,188, 94, 75,169,116,127,253,162,238,214,133,242, 14,231, 76,128, 29,213, 52,107,157,122, 89, 84, 84,149,183, - 83,182,130, 97,191,202, 86, 79, 21,245,246, 75,176,214,162,110,238,239,252,254, 58,238,115,217, 45,173, 11, 31,150,241,146, 79, -119,233,159,214,201,121, 27, 10, 97, 68, 22,186, 47,229,191,176, 85,160,252, 42,204, 99,169, 10,119,235,194, 43,177, 20,198, 40, -185, 58, 88, 60,203, 78,208, 2,102,148,147, 40, 39,188,159,181,156,179,152,143, 24, 15, 15,152,142,143,160,153,161,132,160,179, -185, 77,167,191, 65,164, 37,123,155, 61,222,248,225,171,220,189,115,111,153, 40,182,181,179,205,241,249,156,205,221,171,124,230, -179,159,229, 39,190,242, 85,142, 30, 61, 98,122,126,202,243,207, 93,195, 15,157, 34,146, 44,231,252,228,144, 36, 86, 92,187,122, -147,241,104,202, 55,190,254,147, 44,230, 51, 46, 95,218, 33,209,130,106, 81,208,239,111,114,126,126,206,221,143,239,176,187,189, -195,171, 63,124,149,237,173, 29,190,243,157,239,240,220,173, 91,252,167,255,248, 31,243,173,111,127,107,249,160, 91, 23,148,251, - 7,152,102,111,255, 58, 95,251,218,215,120,245,219,255,158,190, 54,116, 6,219,100,157, 13,186,189, 62,181,140,121,229,149,159, -226, 47,254,228, 91,164,210, 80, 53, 5,231,139,249, 50,154,178, 29,113, 11,225, 40,203,146,159,248,234, 43,188,248,194,103, 56, -120,244,216,119,163,139, 5, 77,109,200,242,140,198,121,196,200, 50,146,116, 93,223,176,100,252,187, 21,226, 82,172,148,151,235, -170,142,245,189,250, 18,244,193,186,183, 93, 46, 31,176,171,110, 94,172, 16,146, 97, 13,212,142,221, 85,200, 49,111, 11,123,162, - 35,178, 44,241,167,236, 78, 70,150,231, 36,105, 70,148, 36,168,120,173, 83, 95,191,222,148, 34,138, 99,254,228, 91,223,230,210, -222, 37, 34, 29,113,245,242,101,250,189,140, 56, 82,188,255,206,187,220,255,228, 19,170,198,248,252,232, 44, 99,176,181,131, 84, - 17,198, 88,202,162, 32, 74, 98,162, 44, 7, 17, 33,163,212,143,112, 43, 47, 62, 75,179,140,186,170, 73, 18, 95, 60,135,103,231, - 60,248,228, 46, 69, 89,146, 36, 9,213,162,224,225,131, 7,140,135, 67,250,189, 14,121,154,144,103, 25, 74, 71,204, 23,139,160, - 0, 86, 40, 29,209,235,247, 67, 68, 35,244,178,156, 60,139,201,146,136,253, 75, 59, 36,177,230,232,209,131,240,144, 74,168,235, - 50, 40,209, 37,141,113, 68,113,204,124, 54,243,130, 55, 4,253,141, 1,113, 28, 99,172, 35, 73, 18,186,189, 14,214, 90,118,119, -119,233,100, 61,156,131,237,237,109,226, 56, 97, 81, 44, 56, 58, 58, 66, 8, 73,183,215,103, 52,158,176,179,179,203,230,214, 22, -227,233,148,209,116,202,172,242,128,165, 76, 8,122, 90,161,165, 33, 73, 53,101,225, 53, 85, 72, 15, 96,177,214,162,148,162,219, -237,178,181,179, 71,131,160,172,106,142, 78,206,168,172, 63,184, 74,231, 72, 35, 80,137,243, 60,107,173, 67,113, 72,136, 90,110, -124,232,210, 85,184, 46,252, 36, 39, 36,110,173,117, 42, 82,170,167, 98, 61,219, 17,229,186,112,217, 6, 50,166,181, 94,184, 91, - 91, 71,227, 4,149,177, 84,149,161,170, 74,234,162,160, 28,158, 33,108,237,149, 37,166,198, 20, 83,154,233, 8, 59, 31, 99,203, - 25,213, 98,140,173, 10,168, 23,136,186, 68, 52,115,100, 61, 67,154, 5,110, 49, 69,152, 5,182, 44, 16,141,247,229,139,178,192, -206, 71,168,118,108,238,188, 15,157,229,155, 23, 3,182, 42,124,137,143,125,109,109,122,166, 42, 49,198, 79, 75,132,245, 97, 62, -194, 26,191,171,111, 5,184,109,225,168, 26, 30,223, 63,228,227,247, 63, 66, 43,197,108, 50, 34,138, 19,156,136, 64,197, 40,173, -189,128, 46,239,162,187, 3,140,136, 80,194, 49, 60, 62,246,184,216,170,193, 70, 49,189,171,215,145, 58,241,135,140, 64,118,116, -203, 84, 79,135,177, 30, 60,211, 22,245, 36,246,105,152, 75,252,119, 16, 91, 54,141,161,110,106,156,243, 62,245, 56,210,196,145, - 47,182, 81,164, 66,129,110,159, 9, 50, 76, 45,125, 68,175,239,152,253,142, 61,138, 99, 84, 20,249,183, 54,150,116, 45, 17,206, -219,220, 90, 87,150, 93,138,215,226,200, 79, 95,243, 36, 38,203, 82,127,239,165, 94,147,147,103,137,223,239,167,254, 80,226, 11, -186, 66, 69, 26, 21,133,206, 60,132, 64, 41, 21,249,176,167,101,252,248,143,159, 92, 94, 92, 91,250,215,213, 94,208,130,133,223, - 51, 30, 69, 92,151,158, 98, 88,134,241,123, 85,213, 30,137, 28, 58,117,221,174,176, 3, 93, 78,181, 83,138, 53,251,158,186,113, -105,243,247,215, 49,177,235,233, 57,237, 13, 36,214, 44, 74,207,242,150, 63,235,215,114,173,135, 91,239,190,132, 92,197,201,201, -117,204, 94,171,166, 12,223,123, 27, 26,175,195,254, 76,135,206, 94,133,189, 70,155,233,126,209,234,230, 3,189,221,146,253,220, - 32,168, 81,210,248, 55, 33,112, 50, 98,251,242, 85,226, 36, 97,163,147, 97, 22, 83,126,244,250,155, 12,103, 37,137, 84,164,157, -136,105,209, 16,119,118,185,118,243, 26, 55,110,238,209,137, 82,230,211,146, 27, 55,174, 97, 77, 65,167,211,225,203, 95,254, 6, -223,127,245, 53,158,191,117,141,217,248,140,233,112, 76, 20, 41, 78,207, 14,169,138, 49,139,241, 41,199, 7, 15, 57, 59, 61,195, - 56,120,225,133,231,249,240,131,219, 76,199, 83,158,127,254, 51, 60, 58,120,196,214,214, 54,223,253,179,239,210, 31,244,249,167, -255,244,159,242,111,254,237,191,189,192, 12, 22,194,115,205, 23,147, 49, 27,253, 30,191,242,203,127,139,247,222,126,155,163, 71, - 15, 89, 20, 53,215, 66, 12,236,162,210,124,225, 11, 95, 38,209,142,215,127,240, 29, 98,233, 83,148,138,198,132,194, 32,189,248, - 8,239, 68,144, 58,227,239,253,221,191,207, 91,111,189,205,221,123,119, 89, 20, 37,101,109,217,191,188, 79, 85,207, 16,152,101, -167,254,228,107,188,138, 84,117, 79,228, 4,184,117, 64, 48,235,209, 76, 79, 97,250,215,186,240,118,252,190, 60,157, 47,187,115, -121, 65,175,177, 18,203,249,235,166,221,169,231,185,199,194,166,121, 78, 20,128, 41, 42, 14,108,247,118,180, 47, 61,198, 84,235, - 8, 99, 28,111,189,241, 38,177, 86, 28, 63,126,200, 70, 39,101, 99,115,147, 69, 89,115,237,198,115,124,246, 11, 95,196, 42,197, -131,131, 67, 54,119,246,216,189,245, 60, 66, 43, 38,103,167,212,243, 25,174,170,136,148,246,193, 45,210,143, 8,133,116,184,198, - 35, 76,243, 94,151, 98, 60,242,106,251,249,140, 59, 31,221,166, 92, 44,112,214, 49, 24,244,105,170,138, 98, 49, 71,224,188, 2, - 56,205, 16, 65, 40, 23,197, 9, 85,109,145, 90,147,100, 57,101, 85,129, 49,228,113, 68,162, 4, 90, 88, 98, 45, 25,244, 58,108, - 13,250, 52, 85, 73,177,152,224,172,207,150, 46,203,198, 63,208,156, 39, 26, 42,165,136,130, 23, 58,142, 19,140,177,116, 58, 29, -250,131,190, 87,220,207, 11, 54, 55,183, 24, 13,135,108,108, 12,136, 34,205,120, 52,102, 60,153,160,148,166,211,233,146,166, 25, -157, 78, 23,169, 52,227,233,140,143,238, 61,100, 97,173,127, 93,140, 99, 43,142,144,206,144,247, 18,154,178, 13,102,241, 28,119, -161, 4,117, 99, 25, 12,250, 12,182,183,153,149, 37,157, 78,206,131,135,143, 89,212,222, 50, 22, 9,200, 34,136, 50,252,131, 84, - 41, 15,215,136, 98, 34, 29,163,132,242,221,246,242,128,167, 66,130, 85,155,110, 21,112,169,225,112,184,124,254,180,186,140,181, -148, 54,169,218,130,196,210, 19,221, 24,255,117, 52,214,127,173, 69, 89, 82,151, 37,182,170, 40, 71,199, 84,179, 49, 90, 88,108, - 49,135,249, 20, 22, 35,170,233, 41,245,252,156,122, 54,166,158, 14,169,167, 67, 40, 38,152,217, 16, 51, 59,135,217, 16, 89, 22, - 80,206,125, 16,139,245,172,119, 55, 27, 35,202,105, 56, 40,176, 20,201,186, 54, 28, 62, 80, 15,125,106, 89,216,175, 59,231, 61, -231,206, 93,232,230,165,107,255,124,232,210, 91, 47,184,240, 36, 62, 83, 53,188,251,230,187, 12,207, 70,104, 33,153,140,206,201, -242, 14, 78,198, 76, 22, 5,113,146,113, 54, 26,209,219,222,163,209, 41,149, 16, 68, 56,134,199, 71,100,121,238,239,155,188, 67, -247,234, 21,164,140,124, 67,167, 88, 78,214,150,108,118, 99,151,154,135,150,112,166,213,202,154,218, 42,213,107,211, 44,147,220, -124,147, 39, 66,129,146, 75, 64,144,135,251,176,188,103, 91, 82,159,210, 17, 90,199,129,222,231,113,207, 75,193,218,218,170,174, - 37,154, 26,107,177, 1,132,214,194,178,226,200, 31, 56,178, 52,165,155,167,116, 50, 63,229,203,178,148, 78,150,146,165,254,208, -236,245, 0,114, 25, 35, 44,149,242, 1, 80, 58, 36, 59,182, 5,190, 69,226,138,191,250,248,125,117,164, 12,177,172, 97, 53, 65, - 16,184,217,186,166,174, 42,170,178,166, 88, 84, 20, 69, 73, 89, 53, 30, 29, 44,101, 16,159, 43,191,114,208,107,207, 68, 33, 67, - 36, 70, 0,115, 93,223,243, 69,221,133,249,149, 92, 18,115,188,175,113, 57,142, 23, 23,243,103,127,156,104,106,105,222,183, 43, -179,125,187, 11,107, 67,228, 87,187, 25,183,196,202,182,116, 32, 23, 50, 99,151, 55,241,218,168,161, 45, 4,237, 88,118,125,236, -239,132,192, 8,175, 44, 68,174,198,114, 33,245, 24,231, 4,121,111,147,237, 75,251,212,117,197,222, 70,151, 55,127,248, 67, 62, -188,251, 8, 25, 69,236,110,164, 84, 6, 92,220,227,133,151, 95,230,249, 91,183, 40, 38, 83,180, 45,217,221,187,204,209,201, 25, - 73, 2,211,233,140,143, 62,126,192,249,249,132, 63,250,195,127,203,241,225,125, 62,254,224,125,238,220,189,205, 98, 49, 98, 49, - 63,229,241,253,143,176,117,197,213,171, 55,249,224,246, 7,188,253,214,155,252,210, 47,254, 34, 47,191,244, 18, 63,120,245, 85, -190,244,165, 47,115, 54, 28, 50, 24,108,240,253,239,127,143, 27, 55,110,242,171,191,242, 43,124,231, 79,191,179, 20,252,120, 73, -175, 70,217,154,205,110,134, 33,225,235, 95,255, 41,190,247,167,223,225,244,124, 72,172, 5, 82,198, 52, 54,101,182,104,248,165, - 95,254, 89,126,248,253, 63, 65, 22, 51, 54,163,132,227,217,140, 10,159,253,141,240, 73, 90,206, 90, 70,195, 57,191,247,219,191, -203,100, 58,103, 60, 29,241,201,253,123,212,141,227,234,149, 43,212,213, 4,225,234,224, 59, 22,203,228,162,139,169,108,159, 94, -212, 47,184, 63,214, 36,143, 75,181,168,115,203, 7,176,191,174,214, 59,115,133, 82,173,194, 83, 95,120,205,245,154,173, 82, 74, -239,166, 72,211,132,124,109,252, 30,167, 57, 58, 73,208, 81,228, 41,115, 34,236,224,165, 68,104,205,193,193, 33,111,191,245, 22, -229,124, 78, 93,204,185,178,189,129,107, 10,238, 63, 62, 68,198, 41,151,111,222, 96,235,242,101, 18,191, 51,225,218,245,231,194, -168,207, 49, 57, 58, 96,114,240, 24, 89, 21,244,123, 25, 81, 18, 97,154,154,114, 62,197, 54, 53,227,225,144,217,104, 68, 51,159, - 51, 61, 31,178, 24,143, 16,214, 48, 58, 59,101, 60, 30,163,180,242,105, 98, 74, 81, 85, 21, 85, 93,161,173, 65, 56, 88, 20, 37, -141,131, 52,237, 80, 86, 53,211,217,156, 36, 77, 61,172,168,169,137,133, 35,194, 17, 71,210,219,229,109, 67,172, 20, 89, 28,113, -124,116,192,249,249, 41,198,194,124, 81, 99,172, 66, 69, 49, 85, 93,163,180,199,123, 70, 81, 68,150,119,232,116,187, 72,169,216, -220,220,198, 57, 56, 63, 59,103,103,123,155,162, 40, 40, 43,111,255, 44,203, 10, 29, 69,116, 58, 93,178, 44,167, 40, 42,102,139, - 5,157, 78,151,178,174,249,240,222, 61,230,198, 32,165, 32,119,130,190, 20,164, 49,196,153, 66, 6,132,180,197,135, 84, 32, 60, -150, 53, 75, 82, 84, 20, 83, 90,203,214,230,128,143, 63,185,207,180,244,161, 48, 49,142, 60, 2,149, 9,146,196,243,251,211, 56, - 70, 43, 77,164,163,165,224, 74,173, 95, 3,226,162,206,167, 69, 14, 59,215,142,225, 87,249,213, 66,180, 88,226,149, 40,211,186, -181,103,143,115,212,214, 35,119, 27, 99,105,170,102,217, 53,217,197,144,249,248, 12,170, 26, 55,159, 66, 49, 69,212,115,104,166, -216,114, 78, 61, 27, 83, 77, 70, 44,134,103, 44,198,103,152,249, 8,170, 9,178,156, 33,234, 26,105, 27, 95,160, 45, 80,150,212, -147,115,100, 51, 7, 97, 86, 15,245,160, 60,147,109,174,128, 9,153, 4, 1, 84, 19,150,196,161,171, 55,190,168,135,113,189, 11, -191,246,133,194,174,162, 63,173, 97, 58,154,242,250, 15, 94, 71, 90,137,109, 74,176, 6, 21, 39,136, 40,245, 83,137,186,198, 10, - 72,250, 3, 42, 17, 97,181, 34,114,134,249,249,144,238,160,199, 98, 81, 16,245,251,228,123,123, 40, 21,163, 36,203,149, 71, 59, - 93,107, 1, 48,214,177, 92,137,197, 97, 52, 44,214, 92, 97,214,249,241,187,143,122, 13,135,128, 48, 74,246, 90, 43,207,182,247, -128,169,150, 87,161,150, 49,167, 74, 69,161, 75,142, 67, 65, 15,224, 31,177,246, 58,175,241,227, 61,217,180, 9, 99,120,239,223, -137,148, 38,137, 34,242, 52,165,219,201,232,118, 82,242, 60, 35,207, 51,178, 52, 38, 77, 19,146,184,237,130,213,138,241,174,159, - 81,212,165,190, 56,105,254, 49, 69,253,169, 46,222,121, 7,208,122, 78,201,178, 83,111,218,162, 94,122,207,125, 89, 81, 86,158, - 95,209,174,156,116, 40,232,190,176,175,138,122, 43, 46, 6,124, 81,151, 50, 92, 88,237,200, 83,182,226,182,213,248,221,231,189, - 94,244,234,185, 79, 25, 51, 56,231,150,209,167,173, 92,197, 4,127,167,107,163,231,240, 96, 7,191, 3,241,197,188,245,187, 59, -103,150,169, 52,235,187,120, 25,140,246,178, 69,147,182,251, 89,185,194,253, 8, 37, 46, 32,251,220,133,112, 1,205,165,253,203, - 36, 89, 68,191,147, 81, 77,103,252,232,213,215, 40,171, 26,173,225,198,141, 61, 78, 71, 53,159,255,210,215,217,186,180,207,245, -155, 55, 73, 84,132,194, 48, 31,141,217,236,119,185,115,231, 35, 14,142, 78,184,125,251, 35, 78,143,143,185,122,105,159,205,254, - 22,157,238, 38,131,141, 77,182,119,247, 72,226, 1,113,212, 3,161,120,227,205,215,217,220, 24,240,252,115,183,120,248,224, 33, -183,111,127,196, 55, 94,121,133,211,225,136, 56,203,216,222,221,225,147,187,119,249,254, 95,124,159,127,248, 15,254, 1,145,142, -184,253,254, 7, 75, 42,155,115,142, 75,253, 62,163,225, 25,189,193, 46, 63,247,171,191, 74, 61,124,192,163,219,183,121,116, 50, - 69, 39, 93,116,166,168, 22,134,151, 95,250, 9,250, 91, 25,175,189,250,109,154,211, 17, 70, 41,102, 38,208,226, 2,114, 82, 34, -169,172,230,235,175,252, 44, 55,175, 93,226,240,225, 3,176, 53,179,249,194, 83,198,164,243, 2,191,101, 82,218, 90,198,222,242, -125,119, 49,123,207,137, 11, 50,185,139, 28,126,247, 12, 52,255, 10,181, 40,132, 88, 34,101, 91, 20,162, 63,133,250, 81, 83,123, -242,215, 82,250, 83,122,200, 30, 78, 90,161, 92, 59,122,239,100, 68,105, 28, 44,103,209, 74,204, 18,198,238, 14,248,195,127,253, -175,120,231,213,191, 96, 35,247, 22,150,211,243, 49,163, 73,193,151, 94,121,133,237, 75,151, 24,108,237,120, 65,150,210,164, 74, - 32,235, 10,105, 26,100,146,145,167, 25,179,241,144,225,232,156, 78,175, 79,214, 31, 96,235,134,233,233, 25,195,227, 83, 14, 15, - 15, 41,230, 11, 22,211, 9,139,217,140,211,243, 49,198, 89, 6,155, 27,212, 54, 98, 56, 45,136,147,132,205,205, 62, 66, 10,108, -237,104, 76,141,138, 98,102,101, 67,213, 52, 68,169, 47,198,199,199, 39,244, 58, 61, 76, 83, 98,194,200,210,119, 54,146, 44,139, -137,181, 66, 88,255,103, 59,131,109,250,155,187,108,239, 92,162,191,177,201,172,172,252, 24, 91, 72,102,211, 25,117, 93, 51, 28, -142,232,111,108, 32,117, 4, 82, 17,199, 62, 48, 6, 1,113, 18,211,201, 50,154,186, 70, 72, 65,154,231, 30,178, 34, 60, 71,218, -154,134,166, 44,176,245,130, 60, 77,249,248,254, 67,198,139,130, 72, 75, 98,235, 72, 5,244, 18, 79, 6,115,206, 11,245, 12, 80, -150,150,110, 55,103, 50,169,232,100, 41, 73,150, 81,184,134,172,215,231,236,209, 9,179, 69,197,185,115,200, 72,208,111, 36, 89, - 87, 17,167, 26,169,172, 87,191, 71, 49, 90,249,177,187, 12,118, 89, 25, 70,233, 74, 5, 47,116,216,244,202, 16,102,226,156, 93, -237, 57, 67, 17,151,235,215,102,152, 16,185, 0, 62,114, 2, 12, 80, 91, 23,146, 5, 3, 2, 59,228, 89, 84,139, 25,102, 54,198, -140, 78, 89,156, 13,185,123,239,152, 15, 31,156,114,190, 48,228,105, 70, 7, 11,213, 28,204, 2,211, 20, 56,103,189,141, 80, 72, -132, 83, 68, 82,163, 29,136,178,196,204, 38,212,243, 49, 74,121, 63,190, 8, 22, 79,107,252,193,110,125, 65,224,150,124,123, 19, -246,234, 30,158,131, 51, 97,138, 23, 22, 99, 33,170,149,176,115,245,164,111,131, 51,130,187,183,239,113,239,227, 7,228, 73, 76, - 93, 46, 80, 74, 80, 56,141, 83, 49, 58,138, 25,143,198,116,187, 3, 92,148, 81, 37, 41, 40,141,157,207,169,230, 19,122,189,140, -241,162,160,187,123,137,108,115,211,179, 36, 34,137,212,173,234, 59, 68,215, 58,223, 17,251, 96, 28,252,189, 27,169, 37,174,121, -105,129, 13,161, 58, 77,227,217, 36, 34,112, 41,252, 14, 93, 6, 87,212,106, 58,231,215,180,122,213, 41,183,157,185,246, 10,116, - 31,123, 42,151,228, 53, 31, 28,214, 98, 95,253, 62,189, 9,147,129,198, 52, 56,227, 9,148,113, 20,121,183, 76,238, 39,124, 89, -158,145,102, 73,216,213, 71,232, 40,124, 13,218,139, 30,165,146,126, 4,175, 52, 74,135,228, 71,173, 61, 65, 80,168,139,220,142, - 31,163,243,186, 56, 81,182, 23, 28, 63,109, 22,133,109, 90,161,156, 47,228, 69, 81, 82, 44, 10,170,170,193, 26,191,126,209,203, - 78,189,117,152,249, 67,136,159, 74,177,212,202,168,231, 46,111,254,190, 23,182,173,198,226,237, 7, 47,149,234, 50, 88,207, 66, -234, 90,123, 81,217, 39, 54,174, 43, 51,125, 24,165,175,189,176,214,173,129, 34, 92,232,204,141, 91,178,131, 91, 52,160, 23, 55, -120,228,163, 90,190,208,161,160,175,157,190,151, 49,174, 98,181,159,127, 18,116,178, 92, 2,136, 22, 81,170,201,243, 14, 74,193, -165,221,109,110,191,251, 62, 7, 15, 15, 73, 34, 65,156,104, 74, 11,187,151,111,112,237,198, 45,190,246,141,111,112,239,206, 71, - 84,229,140,157,173, 29,142, 30, 61,228,141, 31,254,144,243,225, 24,235, 4,183,158,123,158,253,221, 75,212, 69,195,100,178, 64, - 39, 49, 22, 67,183, 63, 64,168, 20,235, 34,166,179, 17, 58,169,153, 79,167,220,189,115,143,126,167,203,215,191,254, 13, 62,252, -232, 35,190,246,141,175,115,247,222, 39,244,123, 93,234,186,164,219,233,240,230,155,111,241,159,255,231,255, 51,254,226, 47,254, -130,241,100, 18, 38, 22, 2,217, 52, 88,103,232,246,123, 92,187,117,147, 95,250,230,151,248,240, 7,223,101, 56, 42,136, 58, 61, - 68,226,104, 74, 1, 46,229,107, 63,253, 53,110,191,247, 42,229,241, 1,141,132, 81,213, 96, 90,245,119,136, 6, 52, 40, 54,119, - 47,243, 27,127,235,215,248,232,237,183, 72,133,163,105, 26, 14, 14, 30,115,253,242, 46,213, 98,238,163, 0,195, 65,201,173, 69, - 68, 58,177,150,204,182, 60,137,187, 11,239,179, 62,197, 89, 67, 39,138, 16, 33,233, 4,225,128,214,170,189,195,141,172,214,108, -144,202,171, 90, 35,189, 58, 61,183,145,135, 74,120,128, 69,154,133,162,222,233,144,230, 9, 81, 26,163,147,196,135,107, 72,143, -237, 20,178, 29,221, 10, 30,126,248, 30, 15,222,127,139, 23,111, 92,102, 54, 29,243,234,107,111,240,187,191,247,247, 65, 74, 78, - 78,143,145,192,160,215,243, 55,184,146, 52, 77, 73,221, 84, 72, 29, 19,119,187,196,145,166,168, 74,132,148,116,123, 61,198,167, -103, 76,206,206, 40,138,146, 69, 89,145,229, 25, 91, 27, 3,102,243, 5,247, 14,142,169,157,163,211,239,113, 62, 42, 57, 31, 23, -116,122, 57, 27,219,125,242, 36, 65, 32,153,204, 39, 24, 39, 49, 66, 51,153,207,168, 77, 77, 81, 20, 84,139,134, 52, 73,176,214, - 7, 80,216,208,133,197,218, 39,182,101,177, 70,184, 26, 43, 52,113, 54, 64, 70, 41, 8,136,210,148,107,207,221,162,155,119,152, -142,198,116,187, 29,143,161,117,144,164, 9,123,151, 46,249,174,201, 26, 58,221, 14,131,126, 63,100,183, 39, 68,113,132,177, 13, - 78,192,249,112, 24,242,197, 3,154,181, 46,104,138, 25,121,146,208, 56,120,116,120,136, 49,142, 8, 72,129,126,170,145, 52,196, - 73,228,169,117,133, 15,162, 73,210,136,170,108,136,195,132,165,209, 48, 45, 11,236,164,100, 58, 91,112,232, 60, 14,117,208, 40, -242, 92,144,100,138, 40,150,203,215, 90, 5, 47,113, 59,169,107, 17,196,178, 29,181, 47,187, 58,233, 39, 30,139, 5,139, 98, 65, -146,196, 75, 26,161, 8, 83, 34, 25, 82,182, 68,112,220, 56, 41,176, 2, 26, 39, 48, 78,248,195, 72, 59, 45, 52,214,239,215,235, - 6,202, 57,197,217, 33,143,238, 30,240,241,157, 17,143,143, 38,124,124,239,152,131, 79, 14,216,205, 5,219,221, 8,105,203,160, - 72,151,116,147,140,110,148, 96,206, 39,124,244,198, 7, 20,143, 31,225, 70,231,212,227, 83,242, 44, 90,101, 2,173,217,136, 91, -176,249, 50, 85, 82,128,179, 62,149, 14,227,247,239,174,221,183,135, 67,139,112, 65, 84,103, 67, 32,202, 82, 32,104, 48,149,228, -213, 63,255, 17, 77, 81,162, 37,212, 85,129,210,154, 90,166,160, 98,140,105, 40,230, 37,105,167,135,204,187, 20, 1,113,107,167, - 19, 76,179, 32, 73, 53,227,178,100,243,202, 53,226, 78,207,239,175,117, 91, 96, 69, 56,144,176, 68,134, 91,107, 16,176, 44, 52, -237,215,232,130, 82,223, 25,150,207,118,107,219,245, 8,203, 46, 61,214,171, 14, 84,173, 61, 11, 68, 59,141, 81, 10,161,253, 91, -203, 76, 89,214,129,117,103, 84, 88,101,216,160, 38,111, 66, 40,146,181, 54,216, 96,189, 91,161,157,238, 37,185,183,201,249,130, - 30,173, 33,209, 87,201,108, 42,140,223,219,162,238,227,155,163, 21,250,247,175, 80,204,159,197,144, 95, 6, 98, 57,183,204,134, - 55, 77,229,133,114,101,237,189,234, 69, 73, 89,122,157,149,144,129, 7, 19,233, 37,243,101, 53, 85, 8,220,134, 96,235, 83,159, -185,186,253,251, 90,203, 37, 8,102,101, 63,107, 79, 79, 43,139,145, 90, 75,221, 90,239,203,150, 81,167, 23, 60,229,173, 79,148, - 11,227, 90, 90,191, 99,248,102, 90,174,239, 58,133,206,217,128,171, 21,225, 64, 33,212,218,180, 64, 92,164,154,181,130,172,144, -100, 36, 3,133, 76, 10, 15,153,104, 71, 51, 2,129,179, 48,155, 77, 25, 12,250,196, 74,242,193, 91,111,115,118,122, 78,150,101, -136, 56,102, 97, 53,183,110,221,226,133,207, 60,199,199,239,191, 67, 44, 29, 85, 49,231,240,240,144, 60,207, 25,141, 38, 88, 39, -217,217,218, 35,214, 41, 82, 37,140,102, 5,139,178, 90,250, 7,141,243, 60,239,166,174,144, 88,234,170, 34,203, 58,100,105,198, -209,225, 17,247,238,125,194, 23,190,240, 57,166,211, 17,159,255,220, 75, 60,184,119,151,217,116, 66,150,166, 60, 62, 56,164, 40, - 74,126,235,183,127,135, 63,250,163, 63,242,230,152,128,131,140,156, 35,205, 35,166,243, 5,191,241,119,254, 30,119,222,121,139, -163, 15, 63,160,168,230, 24,153,161,162,140,209, 98,202,207,254,226,207,243,248,238,135,184,217, 33, 70,214,156,205, 42,138,144, - 61, 45,133,162,211, 25,144,244,122,168, 40,227,119,127,235,215,249,228,189,219,148,163, 49,211,179, 51, 98, 5,123,187, 3,102, -179,145, 47,234,107, 57,245,235,239, 95,152,206, 60, 49,130,247,137,104,254, 48,247,100,124, 33,237, 88,214, 31,177,214, 40, 84, -171, 61,105,155,241, 44,130,181, 82,173,237,217, 91,225,158,192,119, 5,105, 26,147,119,114,242,110, 70,146,182,170,216, 36, 4, -108, 40, 15, 10, 9, 55,168,169, 11,126,240,167,223, 98,118,122, 72,130,229,181, 31,126,159,157,157, 77,182, 55,250, 28, 63,186, -207,124,116,142,105,106,242, 78, 78,119,208, 67,164, 49, 42,143,137,179,132, 98,116,142, 43,102, 72, 83, 33,157,161,156,207, 72, -164, 36,209,145,183,222,196, 41,105,183,199,165,203,123,196, 81, 68,156, 36,228,189, 1, 58,142,216,219,221,229,228,116,200,193, -225, 49, 82, 75,250,189, 14, 74,250,100,186,209,116, 76, 81, 89,146,180,195,124,177, 96, 94, 44,200,210,156,162,168,151, 2,196, - 80,247,136,148, 36,139, 37,253, 44, 33, 75,180, 79,198, 82, 49, 22, 65,183,155,163,112,152,198,160,117, 76, 39,239, 17, 71, 49, -231,195,115,226, 52,101,255,242, 62,206, 26, 14, 30, 63, 36,146, 18, 29,172, 71,105, 28, 99,155, 26,165, 37, 89, 26, 83, 21, 5, - 69, 81, 82, 87, 53, 82, 8,172, 49, 36, 90,161, 4, 84,139, 5,145,132, 65,175,195,209,217, 57,163, 89, 1,214,145, 0,131, 84, -163, 48, 8, 41,169,140,163, 40,125,148,171,142, 36, 77, 99,137,148, 6, 12, 58,211, 12,199, 19, 34, 20,163,233,148,145,115, 24, - 43,232, 58, 73,172, 13,113,226,149,189, 58,210, 8,180,239,214,218,135, 87,187, 31, 95,138, 47,229,242,173,237,208, 35,229, 31, -206,173,240, 82, 0, 66, 9,175, 96,142,244,178, 48,160,100, 64,156, 58,154,144,147,109,240,113,187,126,113,236, 39,136, 69, 99, -104,154,138,122, 54,101, 49,156, 33, 42, 75,102, 5, 3, 1, 29,105, 41,167, 99,118, 7,154, 88,251,164,199, 60, 74, 81,214,241, -254,107,175,243,253,255,238, 79,121,252,254, 7,136,242,140, 68,195,214,238, 22, 81, 30,131, 48,136, 40,196,180,134,245,144, 11, -138,214,214,169,226,237,109, 54,140,224,195,174,125,137,240,246,186,129, 22,238,227,183, 28,225,231, 33,253, 10, 98,120, 58,225, -237, 55,223, 37,209, 17,206, 53,190,176, 57,129,149, 9, 8,201,108, 50, 37, 78, 51, 92, 20,163,122,125, 22, 18,180,214,204, 79, -143, 73,252,183,207,162, 54,108, 94,190,138,206, 59,136,128, 9,143,180, 23,144,181,207, 98, 27,216,240,174, 45,212,161, 9, 91, - 30, 60,194,171, 96, 77,136, 82, 53,198, 43,185, 91, 6,124, 0,144, 69, 97, 63,172,117, 43,126,148, 79,237,205,125, 3,160,195, -234, 85, 5, 42,167,255,119,197,229, 95,241,219,109,219, 36,134,166,177, 85,232,199, 73, 68,154,121,182, 69, 22,216, 22, 58, 14, -205,132,148, 75,110,125, 59, 61, 20,218,231,160, 72,237, 17,224, 66, 71, 94, 99,240, 68, 81,255,180,226,254, 36,249, 84,132,125, -186,187,144, 47, 29,214, 5, 77, 80,191,151, 94, 36,231,133,114, 13,198,186,112,192,144,203, 98,174, 46, 20,244,213, 52,218, 90, -139,122,249,230,165,223,143, 34,189,156,215,199, 45, 83, 86,235,229, 56, 34, 90,210,223,164,103, 49,183,197, 84,178, 82,196,203, -117,184, 88,187,203, 90, 21,122, 25, 78,103,173, 74, 81,182, 76,222, 0, 79,112,107, 97, 47, 23, 31,248,114,121, 17,173,212,239, -110,229, 93,127,226, 7, 6, 23,109, 81,203,194,190,132,234, 40,190,242,165, 47,241,232,222, 93, 62,124,247, 61,234,218,146,117, -115,230, 70,112,235,165,159, 96,123,107,147, 68, 54,136,106,198,240,228,132,155, 55,110, 80,213, 21,143,143, 14,137,147,148,237, -205, 29, 92, 35, 40, 22, 13, 22,197,120, 81, 48, 28, 79,160,170,169,235, 18,173, 36,184,134,217,108, 66,177, 40, 89,204, 11, 16, -146, 40,138,232, 15,122, 56,219,240,224,193, 39, 92,190,180,203,143, 94,253, 62,223,248,250, 87, 24, 14,207,185,117,235,121, 6, -131, 77, 30, 31, 28,243,202, 79,126,147,131,195, 35, 30, 31, 29, 81,153, 6, 37, 28,159,217,219, 36, 78,165, 31,239,111,222,224, -197, 27, 87, 57,254,209, 31,209,152,134,243, 34,166,196,161, 83,197,222,254, 13,110, 93,189,202,251,111,126,139,147,179, 99,226, - 60, 97,178,176, 24,171,137,116, 15,169, 82,162, 36, 3,169,249,197,159,251, 37,170,201,148,225,163,199,236, 12,186,116, 18,197, -206,238,128,179,225,233, 18,102,240,151, 49, 12,125, 99, 46, 86,169, 71,150, 11,216,154,101, 6,146, 99, 41,132,108, 53, 19,237, - 30,244,169,152,223,245,155, 20, 31,180,225, 90, 22,119, 24, 77,106, 37, 72,210,152,188,147,145,229, 25,113,154,160,147,196, 71, - 82,234,208,165,175, 89,217,100,164,216,232,230,124,231, 15,255, 29,183, 63,120,135,155, 55,111,176,185, 57, 32,142, 34,202,217, -152,186,156, 83, 85, 37, 8, 65,191,223, 35,235,118,253, 13,227, 12,162, 41, 24,158, 28, 98,155,146,106,177,224,236,248,152,106, - 62,103,115, 99,131,188,191, 65,190,185, 77,127,123,123, 9,201, 72,178,140,172, 59, 64, 72, 69,191,223, 39,207,251,124,120,247, - 46, 82, 74,246,246,246,232,230, 93, 4,142,243,225,136, 69, 81,163,163, 4,231,240,190,219, 36, 97, 56, 28, 35,133,247,201, 90, -219,160, 4,116,178,132, 60,213,116,178,152, 68, 71, 84,198, 49, 43,107,170,198,146, 37, 17, 18,131,214, 26,235, 32,138, 19,250, - 27, 27,116,186, 29,138,178, 96, 58, 29, 35,156,227,236,244, 4, 83,215, 8, 33,200,211,132, 94, 55,247, 95,199,249, 41,155, 27, - 27, 68,145,166, 40,138,224,113, 95, 32,112,228,177, 87, 9,151,243, 41,166,152,225,170, 5,165,181,220,125,116, 12, 50, 66, 56, - 75,166,156,207,249,142, 99, 12,154, 69,229,161, 46, 82, 75,172, 53, 20, 69,133,176,150, 56, 85,204,203, 2,140, 99, 58, 47,169, -164,100, 81, 91, 98, 33, 73,164, 37,138, 64, 69,146, 56,142, 81, 42, 70, 74, 15, 33,105,131,191,218,110,125,201, 55, 8, 15,248, -246, 89, 34,148, 87, 81, 35, 86,224, 34,161,229,178,195,179, 66, 6,140,171, 14,224, 20,137,145, 26, 39, 21, 86,250, 28, 56, 41, -117, 64,199,224, 99,120,157,195, 53, 53,182,170,112, 85, 73, 42, 29, 91, 61,201,238,142, 98,239,114, 78,172, 45, 66, 58,148,214, -222, 58, 40, 28,218, 25,158,123,110,147, 91,159,221,103,247,250, 62,251,183,174,147,108,111, 80, 71, 18,153,103,184,214, 34, 37, -228,178, 32,250, 41,168, 13, 66, 67,127,141, 59,227,149,240,206,239, 6,194,226,203, 55, 69, 24, 23, 50,204, 91,181,184,196, 73, - 73, 99, 5,175,191,250, 38,147,243, 9, 73,228, 95,159,186,105,112, 40,162,204,147,225,202,162, 36,206,114, 84,191, 79,147, 36, -148, 66, 34,129,217,233, 49, 91,131, 46,243, 98, 78, 35, 53,219, 87,174, 35, 18,207,125, 88, 31,251,182,124, 17,236, 42,128,197, - 5,117,188, 84,242,105,214,185,101,137, 4,111,179, 33,148, 36,144, 71, 67,168, 75,164,137,244, 42,175, 92, 41,189, 26,247,135, -220, 7,161, 86, 20,202,245,167,139, 92,198,153,134, 6,100, 45,185,205, 7,142, 25,159,107,161,189,152, 47, 77,227,192,182, 88, -217,227, 86,122,173,213, 20,152, 86, 79,166, 61,255,222, 55, 11,218,199,227, 94,240,169,115,129,115,223,186, 86, 28, 79,200,140, -214,106,214,170,216,135, 78,221, 54, 75,161,156, 39,202,249, 55, 47,148,115, 23, 68,195,190, 9, 18, 23,242,224,173,245, 34,232, -186,105,208, 75, 97, 3,171, 0, 14,173, 20, 81, 75,240,106,205,238,237,220, 62, 68, 30, 34,220, 26, 72,100,157, 8,214, 10, 85, -196, 26, 40,236,201, 96, 22,175,195, 82, 66, 16, 57, 9, 17,222, 38,230, 20,194, 69, 40,185,130,241,183,129, 12,106,121,177, 8, -148,208, 75,206,179,114, 62,219,217,134,120, 62,107, 89, 42, 51,157, 3, 39, 47, 66,253,187,189, 46,105,146,112,118,114,130, 20, -142, 36,129, 36,207,153, 23, 48, 24,108,161, 20,228,169,192,204, 27,174, 93,190, 4,198, 50,159, 78,185,114,245, 50,174,182, 28, - 62, 60,161,152,214, 40,157, 18,117, 34,116,236,125,209,253, 78, 66, 89,205,113, 86, 48,155, 78,177,182, 97, 49,171,112, 70, 96, -148,247,241, 74, 9,189, 65,143,186,140,248,209,107,175,241, 19, 95,120,137, 65, 39,229,236,244,140,126,127,147, 31,124,255, 7, - 72,157,241,255,249,175,255, 27,254,209, 63,250, 79,249,225,235,175, 45,113,151,105, 28,163,112,124,248,222, 59,136,238,183,248, - 95,254, 79,255, 1, 87,174,239,113,124,251, 1,167, 39, 39,104, 91,115,229,185,125,190,251,103,223,227, 63,251, 71,127,151,180, -191, 73,164, 31,177,153,116,120,116,214, 80,155, 8, 33,187,204, 22,150, 40, 79, 24, 13,167,188,251,254, 7, 60,119,245, 10, 31, -189,158,208, 85,138, 60,106,232,101, 25,113, 20, 83,215,139, 53,177,155,120, 2,137,124, 49,115,120, 29, 12, 36,240,118, 27, 43, - 37, 70, 58,148, 20, 88,105,113,202,243,186,149,112, 40, 28,181,108,252,222,118, 13, 17,226,111, 88, 15,226,105,132, 64, 75, 31, -149, 41,165,244,129, 21,202, 63, 56, 44,142,166,241, 5,163,189, 1,101,235,138, 8, 15, 76,199,170, 91,179,225,100,220,223,218, - 99,231,242,117, 50, 95, 61, 56, 62, 27,178,123,233, 26, 89,183,195,108, 58, 97, 50, 28,114,247,131, 15,136,133,228,101, 11,121, -175,131,173, 75,180,114,100, 89,130,107, 28,121,183, 79, 99, 14, 24, 77,103,148,101, 77,156,192,124, 54, 39,235, 15,188,194,218, - 89, 84, 20,145,197, 17,103,195, 49,179,217,130,141,237, 13,118,247,118,152, 76,231, 76,166, 5, 27,131, 1,121,183,195,238,222, - 30,167,103, 31, 83, 45, 74,159, 57,158,119,168, 66, 68,103, 85, 87,164, 73, 12, 14,170,170, 66,144, 33,132,194, 24, 71, 81, 53, -140, 43,195,112, 50,227,210,222, 30, 77,211, 16,139, 54, 33,203, 80,150,115,186,145, 98,103,103, 3, 33, 29,103,103, 25,143, 30, - 29,112,109,127,223, 39,166,229, 29,159, 67, 46, 4,157, 44, 99, 40,252,195,181,169,161,155,229, 40, 36,211,209,136,166,134,210, - 57, 6,157,156, 52,142,153,157, 23, 8, 91, 97,231, 11,148,243,113,194, 11, 33, 24,214,142,174,246,152,214,147,241,140, 40, 74, - 60,239, 93, 8, 84,236, 99,136,139, 69, 69, 63,132,185, 72,229,239,219,190, 84, 76,133,101,138,163, 87, 66, 90, 56,146,220, 7, -180, 68, 26, 31,216,179, 28,247,138, 11,246,199, 54,217,172, 77,152,244, 60,117,131,179,171,157,110,219,248,214,214,248,215,197, -249,176, 16,159,166,166,112, 97,250,227, 11,184, 66,106,223, 5, 43, 33,208,206,145, 88,129,232,110,194,118, 73, 86,213,168, 88, - 99,103, 99,226,216, 18,103,130,100,144, 18,119, 83,162, 88,177,121,105,143,221, 43, 87,232,102, 41, 52, 87, 48,162, 65, 39, 41, - 82, 71,232, 78, 15,155,230,168, 52,195, 74, 95, 28,156,106, 57, 28, 43,198, 56,206,249,232,212,240, 32,179,214,160,156, 95, 45, - 88,235,104,156, 3,235,139,184, 53, 22,173,244,170,160,227, 16, 40, 78,142,207, 56,120,124, 12,206,139,207,202,218,129,212, 72, - 25, 83, 53, 53,117, 93,147,196,254, 96, 97,226,136, 74,123, 1,177,171,189,118, 35,201, 50,206,199,231, 68, 89, 7,180,191,143, -188, 80,213,175,194,132, 2,101,253,248,216, 24, 75, 82, 69,148,117,132,113,102,205,146,235,150,246, 96,223,206,185,181,251, 52, - 36, 65, 74,187,108,180,218,105,223,242,208,191,150,170, 38,195,218, 86, 10,235,119,249,126, 95,129, 8, 33, 56,158,204,103,189, -179, 1,111, 67,211, 73, 76,218,100,212,117,237,189,248, 85,205,130, 18,112, 75, 17, 95,155, 91, 33,228, 69,226,165, 64, 34,157, - 10,235, 98,187,202,145, 8, 52,194, 39, 27,201, 79, 11, 26, 91,190,255, 36,248, 93,172,108,112,246, 25,122,163,214, 45,246,228, - 63,214,249,215, 95, 25,135, 50,134,186, 89, 53, 44,198,132, 21,169,243,107, 84,157,198,209,242,116,229, 99,222,220, 26, 36,166, -245,149, 7,160,204, 90,144,251,106,167,245,236, 24,206,103,165,216, 60,237,223, 99,153, 24, 36,156, 90,138,195, 84,179, 10,105, - 88,191, 64,252, 73, 76,132,208, 7,133, 67, 47, 63,143,181, 22, 67, 56,193,134, 17,255, 42,165,199,255,125,181,115, 12, 54, 6, -188,250,234, 15,153,207,166, 36,169,192, 20, 48,173, 74,174,220,124,153,173, 94,135, 88,207,184,125,251, 45,158,191,241, 60,151, -247,174,113,231,147, 71,244,123,125,186,105,204,220,204,253,206, 10, 75,167,219,193,226,200,243,148,126,175, 3,198,219,150, 58, -217,128,241,228,148,178, 44,113,206, 16,233, 20,231, 26, 31,167,169, 35,138,166,196, 9, 71,150,199,220,191,127,143,233, 98,206, -215,191,254, 21,238, 63, 60,225, 23,127,225,151, 57, 60, 58,231,232,241, 1,121, 28,243,217,231,159,231,195,143,222,131, 6,142, - 78,135, 92, 31, 92, 69, 69, 17,199,143,238,112,247,241, 25, 55,191,250,211, 60, 28,253, 59,204,241, 24,109,107, 70,167,135,116, -178, 75, 28,159, 13,185,246,194, 23,249,240,221,247,217,232,118,233, 68, 51,230,149,135,107, 88, 23, 51,157, 54,196,166,224,237, -119, 63,228,167,255,241, 63,196, 36, 41,103,103, 15,216,221, 72, 48,117,141, 86, 17, 84,139, 11, 69,124,233,129,253,180,198,253, - 2,130, 95, 44, 67, 43,156, 19, 75,129,164, 10,184, 90,171,164,223,214,186, 26,101, 45, 70,250,120, 75,235, 44,177,211, 40,227, - 79,205, 70, 26,111,103, 90,162, 11,107,127,232, 20, 16,107, 31,101,235, 66,118,186, 88, 45,194,150,162,138,229,105,216,195,147, - 1,201,205,231, 94,192, 93,218,231,193,131,187, 8,109,201,251, 3, 92, 93,147, 9,197,100, 50, 99, 49, 91,112,247,195,143,144, -117,195,181,203,251, 12, 54,251,184, 60,162,183,179,143,107, 44, 66, 40,110,216,136,147,163, 35,106, 25,161,133,198,184,154,178, -170, 81, 18,104,106,132,171,137, 59, 9,157, 78,159,249,108, 66, 66,195,151,190,242, 69, 94,123,237,109, 14, 15, 79,216, 28, 12, -184,188, 55,160,172, 43,206,142,199, 20, 69, 77,150,103,100,221,140, 69,229,167, 61, 77,101,124,114, 25, 80,213,181,239,118, 7, - 93, 26, 99, 57,159,204, 56,154,213, 72, 21, 81, 54,126,247,171, 36, 8,229, 35, 69,141, 41, 41, 22,142, 78,183,199,214, 70,151, -186, 44,248,236, 11,207,243, 71,127,252, 45,226, 52, 37,206,114,250,253, 1, 27,253, 62,105,154,176,127,105, 31,107, 44,113, 20, - 51,232, 71, 65,141, 13, 85, 83,177,168, 43,108, 49,227,248,240,128,225,233, 57, 69, 85,114,114,120, 66,228, 96, 97, 27, 42,225, -152, 91,152, 57,137, 43, 42,198,165, 97, 43,213,148,214,139,100,165,244,129, 28, 66, 43,206,143, 70,164,187,125,138,178, 68, 99, - 73,107, 24, 72,197,185, 49, 84, 86,178, 40, 29, 73, 97,200,114,183,220,211,122,113,152, 12,175,223, 26,135,184, 13,197,104,243, -186, 3, 72,198,226, 99, 90, 91, 28,103, 11,164,177,107,199,188,218, 88,148,138,252,254, 92,250,125,165,146,106, 25,255, 43,133, - 32,118, 14,229, 64,139, 30, 8,131,117, 13,113, 30, 65,145, 99, 41,208,218,161, 98,137,234,102,116, 6,125, 6, 87,174,144,239, -110,123,161,152,173,209,206,249,116, 55,157,160,211, 14, 58,237, 18,176,121, 56,105,112, 81,184,167,172, 89,170,218,145, 4,223, -186,197,184,102,233, 80,171,202, 38, 60, 3, 37,126,234,238,191,247, 40,246,227,104, 43, 5, 38,172, 23, 63,254,248, 1,141,241, -247,156,214,154, 2,129, 69,146, 36, 57,101, 99, 40,235, 25, 91,253,109, 22, 74, 81, 71, 49,196, 49,162,242,187,251, 40,210, 30, -202,131, 36, 74, 82, 92, 43, 52, 13,163,223, 72,251, 73, 71,235,110, 50,141, 37,137,189,226,189,110, 84, 16, 57,175, 28, 79,214, -134,144, 39, 97,151,108, 10,132, 63,216,107,213,238,134, 35,111, 89,214,173, 77,121, 61,162,123, 61, 45,205,173,136,122,132,105, -237,218,225,174,181,213,185, 56, 66, 59, 75,236, 12, 89,147,250,162, 94, 55,129,215, 99, 86,128,155,229, 36, 55,208, 47,181, 66, - 56, 17, 4,222, 22,108, 3,118, 93,164,245, 12,202,233, 51,194,197,126, 44, 70, 91,172, 40,255, 45, 94,215,134,215,205,173,133, -201,172,146, 49, 87, 59, 79,223,205, 75, 26,107, 80, 70,122,164,178,168,151,113,182, 46,252,220,154,166, 65,235, 40,236, 49, 66, - 44,158,183,139,172, 83,220, 90,250,219, 10,226, 32, 3, 2,178, 85, 72, 63,235,155, 93,137,166,159,254,102, 69,187, 71,112,107, -228,176, 54, 54, 78, 10, 42,109,215, 48,132, 43, 98,143, 88,138,177,214,181,162, 50, 28,114, 37, 17, 64,212, 22,115,183,178,200, - 57,255, 39, 21,146, 56, 75, 56, 63, 57,103, 52, 26,145,166, 17,196,130,163,217,130,207,239, 95, 38,166,228,133,231,246,121,103, -254,136, 79, 30, 60,224,240,160, 96, 54, 41,120,241,197,235,184,106,129, 45,102, 40,229,200,122, 25, 86, 57,202,106,225, 1, 25, -166, 98, 58, 57, 69,200,156,119,222,186, 77,146, 41, 54,182, 98,156,105,124,120, 64,156, 80,215, 53,198, 25,148,214, 36, 90,210, - 84,130,211,227, 83,186, 27,219,232, 40,162,215,237,177,181,181,195,116,234,225, 3,127,240,111,254, 53,191,254, 55,127,133,255, -227,135,239,162,133,226,108, 86,162, 30,157, 66, 18,243,245,203, 55,120,120,112,194,213,175,253, 18,229, 31,255, 1, 40,184,122, -117,159, 8, 71,181, 24,243,207,254,197, 63,231, 87,127,234,235,124,114,243,135, 76,138, 9,155,221,136,147,121,137,181, 21,200, -152,166, 49,184,133,227,222,131,199,212, 90, 82, 40, 69,227, 44,103,195, 51, 46,119,246,233,117, 7, 12, 23,227, 11,202,245, 11, -187, 33, 39,159, 58, 69,138, 11, 59, 34,231,111, 16,225, 33, 54,202, 73, 79, 77,114, 14, 29,226, 21,173,173, 48,198,162,164, 70, -107,127, 49,214,141,162, 14,171, 32,185,182, 66, 81,203,194,236, 87, 66,137,214,212,141,166,110,170,165, 16,198,143,189,228, 82, -229,188,126, 83, 72,124,232,197,135,239,190,131,178,198, 83,206, 54, 55,113,103,142,197,116, 70,183, 59, 64,197, 29,172, 72, 49, -166,102, 81,149, 28,157, 29,161,116,131,141, 46,179,213,191,142,173, 29,198,105,132,142,217,186,249, 2,253,189,203, 76, 39, 19, -102, 69, 69,119, 99, 3,148,198, 84, 11, 31,168, 16,212,185, 82, 8,206,135, 35,172,180, 92,191,113,131,201,164,228,221,183,111, -179, 40, 10,106,219, 97, 58, 26, 17,107,201,193,233, 9,117,217, 33, 73,182,233,247, 58,108,111,246,120,120,255, 17,166,242, 5, -182, 44, 74,142, 79, 78,201,211,136, 60,221,230,124, 56,162,208, 29, 34,173, 57,159, 44,200,180,192,233, 16, 99, 28,249,200,210, -122, 49, 65, 56, 67,214,233,145, 37, 9,163,201,156,173,173,109,142,143, 79,184,114,229, 38, 8, 24,157, 13, 89, 36, 49,253,141, -126,152,166, 74,242,174,103,105, 47, 22, 11, 22,179, 57,194, 26,154, 98, 78,167,147,177, 88,228,156,207, 43,162,184, 67, 39, 51, - 84, 85,133,113, 48, 53,142, 74,101, 52,101,129, 74, 52,211,178,194, 74,197,162,106,232,198,158, 2,103,173, 67, 90,201,116, 52, -165,108, 44,177, 82, 52,101, 67, 47, 73, 57,181,134,194, 42,226,170, 65, 78, 26,210,184, 32,146, 10,171, 21, 78, 69, 56, 25,225, -156,183, 80,137,240,102,132, 37,110,187, 91,225, 81,187, 72,225,139, 33,126,210,216, 34,125,101,240,119, 91, 97, 1,131,116,194, - 23, 27,185, 54, 74,150, 2, 33,125,120,140,107, 12, 82, 58,210, 72, 16,101, 17,164,154, 56,145, 36,219, 93,116, 51, 67, 80,147, - 68,150,142,104,200, 19, 77,183,215,165,187,181,131,234,118, 17, 90,160, 92,141, 51, 46, 20,244, 12,153,118, 32,206, 32, 73, 65, -106,172,169, 16,194,248, 75,213,130,107,108,187,125,198, 41, 16, 86, 32,140,192, 10,143,174,245, 97, 29,128, 10,251,126,240,201, -112, 82,226,155,102,255,245, 47, 22, 21,167,103, 35,170,202,144,233,152,186,174,124, 62,187,214, 52, 78, 80, 11, 71, 35, 4, 42, -246, 46,145, 90,107, 76,104,216,156,177, 72,237, 35,162,107, 99,201,226, 4,235, 68,184, 46,220, 18, 36,165,219, 3, 68,164,208, -117, 8,233,210, 17, 81, 20,194, 94,214, 1, 90,136,149,165, 89,248,162, 43,164,255, 28,113, 44, 61, 34, 54,241, 8, 88,239,118, - 88,217, 91,125,231,110, 81,238,233,201,224,211,113,165, 98, 21,227,221, 82,232, 26, 67,154, 37,116,234, 28, 99, 12, 2,225, 29, - 30,130,149,147,234,201,209,121, 27, 7,173, 36,202,170,167, 8,152, 23,243,206,197,179, 35,194, 5, 79,141,222,219,189,192,178, -150,185,167, 59,122,150, 54,204, 39,243, 49, 86,131, 28, 95,203,252,100,218, 56,139,180,222,178,186, 76,163,116,126,138,167,117, - 8,144, 0,177,204,186,125,114,159,189, 28,191,183, 39,223, 22,189, 41,197,133,221,182, 12, 99, 50,177,198,147, 93, 21,130, 11, - 25,107, 56, 28,202, 89,172,242,221,156,210, 38,196,179, 74,116, 43,172,176,110,233,107,124, 82, 76,237,214, 58,199,213,239,133, - 48, 83,231,130,181,115,101,169,192, 65,131,160,147,231,140,198, 67, 22,139, 5, 91,251, 57,229,204,209,219,216,161,147,119, 24, -228,150,135,247, 63, 97,115,107,147, 78,190,205,155,175,223,101,111,107,159,243,179,115,178,184, 33,141, 35, 6,155, 61, 26,145, - 50, 91, 24,100,237,112,117,197,116, 60, 34, 79, 83,230,115, 75,222, 29, 32,132,135,129,224, 20, 69,227, 71,127, 89, 39, 35, 78, - 98,138,170,192,154,138, 72, 69, 36,121,135,219,183, 63,228,206,195, 3,126,235, 55,127,143,131,131, 17, 87, 46, 95,229,124, 56, -228,206, 71, 31,241, 59,191,245,107,116,243,156, 98, 90,211, 80,115,116, 50,194, 41,193, 91,175,125,159, 23,191,244,203,124,225, - 11, 63,205,209,204, 82, 55, 53, 71,135,135,188,248,252,139, 28, 60,120,192,230,214, 46,215,158,255, 28, 14, 56,120,248,104,153, -147,238, 79,118, 30, 44, 99,106,195,189,123,247, 48, 8, 58,131, 13,138,121,159,179,199,199, 36,233, 57,253,172,179,140, 72,109, -127,194,171,139,240,105,155,218,133,155, 46, 92,132,194, 6,102,181, 8,168, 70, 11, 66,248,177,188,148, 18,101,195, 40, 73,121, - 27,145,148,146,186,150, 84, 33, 43, 64,174,173,118,116,139,146, 21,146, 40, 86,216,200, 67, 34,154,186,198,154, 6, 23, 8, 93, -226,137,149,207,250, 74,160,156,207,120,251,245,215,168,207, 78,208,182,194, 57,131,194,224,234, 10, 41, 36, 81,146,163,163,132, -162,156, 51, 47, 70,244,183,123,164, 27, 93,140,210,204, 75,131, 41, 43,156, 80, 40, 45, 72, 51, 77,220, 29,208, 79, 50,198, 71, - 7,156, 29, 29,177,115,253, 38, 74,107, 22,101,227,137, 92,117, 77,222,201,232,117, 59, 76, 38, 99,182,171,130,171,215,174,242, -240,254, 1,195,209,144, 52,113,204,231, 5,179,233,148,126,175,203,206,206, 22, 90,251,168,205,189,157,109,142, 31, 31, 48, 30, -158,145, 36, 9,206, 52,156, 12, 71,152,166, 98, 50,157, 17, 39, 49, 87,158,191,225,247,191,117,193,108, 81,161, 83, 77, 39,207, - 73, 58, 61,226, 88, 98, 77,205,249,240, 28,240, 34,184, 71,143, 15,217,217,222, 2, 33,216, 28,244, 73,210,152,170,170, 56, 31, -157, 83,149, 11,182,119,183,169,155, 26,225, 26,210, 56,230,250,213,171, 62,212,101, 50, 70,154,134,189,173, 13, 14,143,142,249, - 76,109,249,137,113,193,172,134, 55,239,124,196,159,124,247,207,105,170,154,243,162,161,167, 5,113,172, 24, 79, 43, 18, 9,243, -178,166, 19, 71, 62, 69,205,120, 53,180, 86,154,217, 98,129, 70,162,133, 64, 88, 67,170, 36,211,198,144, 26,137, 94, 88, 22,179, -154, 56,154, 35,149, 67,170, 28, 37,148, 79, 13,108,237, 80,210,139,227,106, 83, 67,227,119,189,106, 73, 51,244,145,169, 86,216, -112,184, 98, 25,219,105,140,245,169,109,194,163, 75,253,180,111,149,236,214,250,126,157, 54, 64,132,164, 38, 22,146,184, 73,145, -253,140,180, 28,144,218, 5,145, 2, 73, 73,108, 23, 36, 90,120, 69,114, 27, 38,148,104,112,177,223, 3,235, 8,210, 28,155,102, -216, 40,133, 56, 6, 29, 33,106,133,172,107,156,105,150,145,170,206, 47,168,189,232, 79,130, 78, 52, 86, 72,108,101,113,202,239, -175, 17, 2, 29, 69,190, 25,146, 18, 43,220,114,253, 88, 89,203,112, 50,163, 44, 42,159,247,144,166, 68,177,230,244,188, 36,237, - 14,176, 50, 98, 54,157,208,233,116, 81, 81, 12, 74,161,243,148,210,250,102,199,195,121,116,112, 5, 8,207,179, 95, 71,161, 10, - 46, 52, 96,254,153,221,120, 69,118,184,103,149, 84, 24, 97, 86, 49,169,173,144, 45,212, 12,132,207, 2, 73, 35, 69,146,104, 79, -113, 75, 18,178, 52, 33, 77, 98,226, 88, 47, 27, 74,177, 38,122, 19,107, 14, 26,255,133,178, 6,112, 89,153,171,215,131,198, 92, - 28,225, 76, 74,158,187,144,200, 39,168,170, 10,156, 37,106, 65, 55,114, 77,119,181, 30,183, 43,196, 50,125,174, 21,236,174,249, -231, 46,194,181, 86, 88,185, 11,224,176,165, 71,168,157, 24,182, 69,187, 85, 68,182,188,142,181,134,245,211,162, 87,219,177,253, -242,181, 88,130,226, 86, 83,106,107,124,180,121, 85, 87,104, 37,212, 42,228,254, 9,168, 76,123, 90, 18,161,237, 86, 75, 91,147, - 31,129,135, 71,239, 82,233, 46,151,202, 65,183,150,191, 45,158,254, 74,197, 90,172,106,216,135,105,169, 48, 18, 26, 9, 77, 72, -120, 50,141,193, 57, 79, 3, 91, 1,239, 86, 63,178, 11,169,171,203,175,217, 46, 25,242, 45, 52,165,229,218, 11, 7, 29, 37,233, -230,138, 69,100, 40, 22,115, 78, 38,146, 23,191,244, 89,174,239,237, 82, 13,239,211, 73,251, 76,102, 35,100,234,168, 22,167, 40, -177, 1, 86, 35,101,130, 78, 35, 50,237,252, 94, 44, 50,216,186,160,151,118,217,251,202,215,137,187, 25,200,132,172, 51,160,110, - 12, 58, 82, 72,105,105,234, 5,182,158,240,209,135,183,201,123, 61,170,179, 35,138,170, 96, 49, 95,160, 68, 66,164, 12, 47,223, -186, 73, 49, 58,231,225,189,251,188,240,249,175, 49,154, 20,212,229,156,217,120,204, 11,159,251, 60,223,251,193, 27, 52, 86,210, -139,225,165, 91,151, 56, 58,155,242,224,193,135,116,122,191, 73,190,255,121,212,221, 63,163, 40, 27,238, 31,205,216,234,244, 40, -103, 51, 70, 11,131,147,138, 65,183, 67,226, 20,234,100, 24, 20,163, 6,215,212, 32, 29,135,143,238, 48, 63, 63,226,242,102,151, - 15, 63,177,108, 14, 46,115,240,201, 61,174, 61,119,149, 36,206, 88,148, 69,184,200,219,107, 72,134, 61,229, 90, 28,110,155, 33, -188, 34,206, 44,127,237,239,191, 48,126,111,213,153,120, 74,150,113, 62,172, 66, 26,183,162,203, 9,129,172,253,117,163,194,190, -172,197,124,202, 80,176,147, 38, 66,164,150,186,246,214, 28, 63,190,180,107,135, 63, 63,113,178, 33,187,221,235, 42, 5,211,179, - 57,101,105,121,243,157,247,184,190,191, 69, 47,141,112, 77,205,240,228, 8,157, 38,244,227,136, 72,106, 30, 31, 30,112,118,126, -159,179,131, 59, 60,255,153, 47,178,119, 85, 17, 77, 53,121,167, 67,158,165, 40,233,125,219,157, 60, 39,137, 53, 27,253,140,123, -159, 28,241,248, 99,195,149,207,188, 76,186,113,137,209,249, 17,167, 39,247,121,238,214,115, 60,247,220,117, 62,190,243, 49,163, -227, 19,118,247,174,112,237,202, 54,163,201,152, 36,219,192,170, 57, 91,187,151,232,166, 49,229, 98,134,146, 2,131,101,103,163, -199, 43,175,124,131,127,255,239,254,144,241,112,136, 86,130,217,116,194,217,112,194, 71,143, 79,249,155,127,243,215,112,197,148, - 78,175, 79,229, 20, 78, 39, 68,189, 77,140,107,168,203,154,170,130, 36, 77,185,188,127,205, 11,222,164,161, 92,140,137,116,196, -151, 62,255, 34,179,241, 4,179, 88,208,212, 21,202,149,228, 73,138,116, 21, 90, 24, 76, 89, 48,153, 25,100,148, 50,155, 47,168, - 22, 11,242, 88, 19,199,138,189,237, 30,103,231, 35,140,174, 81,166,225, 87,191,244, 34, 61,187,224, 15,255,252,117, 78,107,135, - 18,146, 69, 85,179,208,254,181, 50,198,191, 9, 41, 49,141,161,182,144, 16, 19, 43, 69, 85, 89, 76,164,160, 49,108, 72,193, 1, -150,142,141,233,212,138,106,214,176,200,107,148,145,196,117,130,198, 33,165,239,206,193, 63, 27,132,240,169,103, 90, 27,112,218, -103,145,203,214, 42, 38,151, 98, 55,156, 64, 58,133,177, 2, 21,172, 91, 46, 52, 32, 86, 72,156,136, 2, 18,217,235,122,148,146, -232, 88,135,117,163,135,174,120,251, 88, 76,108,115,114,105,136, 92,131,116, 21, 52, 5,218,213, 68,194, 18,197, 18,165, 29, 50, -137, 33,242, 25,235, 66, 39,136, 56,131, 40,245,197, 92, 71,160, 52, 40, 11,162,128,170,240, 10,119,106, 47, 6, 13,246, 48, 41, -149,159, 54,134, 46,153,112,111, 88, 7,202,121,193,152, 85, 14,235, 12,174, 6, 21,101, 76, 22, 5,103,211,146,102, 54,195, 84, - 83,116, 71,251, 46, 95, 70, 24,145, 96,101, 68, 83, 65,222,239,227,164,166, 22, 22, 34, 9,181, 9,137,122,160,162,152,186,177, - 62,110, 54,201, 66,110,186, 89, 50,213,219,167,124, 43, 32,147, 50,120,215, 3,152, 76, 4,177,148, 53,214,175, 72, 85, 72,123, - 20,218, 31,208, 4, 36, 90,144,197,138, 60,141,124,252,106, 22,145, 38,146, 56,150,232, 72, 44,227,149,165,192, 51, 6,194,212, - 85,184,245,198, 80, 92,116,230,184,167,105,149, 74,107, 92, 18, 19, 91, 75,102,253,250, 51,214, 10,103,109, 16,133, 7,251,154, - 12,142, 7, 15,229,101, 25, 5, 36, 36,200,229,145,228, 2,179,195,139,136,213,242, 47, 94,175,101,109,226,222,211,157, 40,171, -117, 2, 43,165,186, 8,110, 33,143,250, 93,125, 46,193,211,147, 0,133, 64, 11,129,150, 97,104, 35, 89,186,186, 90,123,120, 89, - 54,104,228,234, 4,208,126,144, 88,247,172, 45,171,166,127, 80,170,213,208,226,153,249,230, 23,235,247,218,200,189, 61,125,137, - 39,190,207, 64,124,243, 10,191,240,102,125,124,158, 81,114,181,159,185, 48,206,121,154,102,183,132,205, 44,119, 58,110, 13,138, -226, 85,217, 18,205, 98,238,247,131, 89,234, 5, 9,181,129,205,141, 45,102,147, 49,123,219, 91,196, 17, 56, 97,121,252,232, 33, - 87, 47, 95,194,153,154,249,116,142, 18, 41,253,141, 14,149,107,144, 81,196,230,230, 46, 55,175,220,228,227,247, 63,228,224,248, - 17,189,141, 14,143, 15,142,137, 83,159,187,188, 40,230, 36,137, 36,137, 21,157, 60,102,115, 99,155,173,237,125, 94,126,241, 11, -188,255,254, 91, 60,184,119, 7, 91,195,198,198, 22,101,105,121,237,181,215,184,254,252, 75, 56,106,174,221,184,202, 39,119,230, -188,246,218,155,252,204,207,254, 12,223,249,139, 87, 3,255, 89, 49, 24,244, 25, 79, 75,186,121, 66,146, 36, 92,186,126, 19,247, -189, 63, 99, 86, 44, 16,147, 41,151,119,246, 88, 44, 10,156,147,108,239,238, 50, 57,123, 76, 85, 54,104,225,177,185,142, 42,204, -252, 28,147,209, 41,247,239,125,194,198, 70,159,114, 49, 35, 17,134,147,163, 35,164, 22,184,140,165, 15,212,173,150, 62, 23, 71, - 75, 79,210,228,254,178,188,251,240, 66,250, 67,154, 79,131,147,193,123,187, 62, 70,147, 33,136,163,221,123,181, 93, 59,210, 99, - 52,149,112,212,117, 74, 83,215,152, 48,126,122,230, 9,119,237,197, 63, 59,126,196,230,102,159, 56, 73,249,222, 95,188,206,139, -207, 93,230,249,155, 87, 56, 57, 61,128,200, 49, 60, 59,165, 44, 26, 78, 78,142, 73,115, 13,141,224,116,188, 96,110, 30,241,220, - 11, 41, 11,215, 80, 76,199,116, 59, 25, 46, 73,188,240, 74,116, 80, 81, 74,222,223,228,241,163, 35,122,131, 35, 6,187,123,100, -121, 78,119,176,137,177,160,227,136, 75,151,175,242,209, 71, 31,147,117, 55,248,204,103, 95,192, 57,193,201,201, 41,247,238,223, - 39, 18, 48,137, 52,189, 60,195, 57,201,233,104, 4, 42, 98,247,242, 21,190,249,211,223,228,238, 71, 31, 97, 77,195,254,213,107, -140,230, 5,159,121,233,139, 92,189,126,131,242,252, 49,195,209,148,217, 98,193,254,165, 75,140, 39, 99,148,173,137,133,165,105, -106,210, 44,163, 76, 98, 54, 55, 54, 81,113, 66,175,219, 37,206, 59,244, 55, 54,112, 88,198,163, 49, 27,155, 27,244, 92, 31,165, -181,183,132, 69,154, 70, 10,202,178,166,113, 21, 91,219, 59,156,159,158, 98,154,146, 56,138,209,194, 5, 74,154,101, 60,158, 82, - 46,134,124,227,243, 47, 48,156,140,249,243, 55, 62,196,184,136,218,121, 17,211, 2, 75,207, 10, 10,235,200,252,178,216,191,246, -198, 46,215,115, 74,174, 30,144,153,146, 20,182, 97,129, 36,170, 29,233,194, 98,147,134, 58,106,208,145,241,107, 19,113,241,186, - 82, 50,196, 89,138,214, 24,212, 74, 46,221, 18,148,229, 19, 74, 77,216, 13,107,164,181,254,192,103, 5, 66, 24,164,169,188,138, -222, 42, 48, 6, 97, 5, 81,236,119,189,137, 90,233,136, 16, 9,177,130, 68, 57,180, 48,196,194, 32,155, 25,182,156, 35,109,233, - 69, 97, 58,242, 29,112,146, 32,162, 12,116, 2, 81,130,147,113,248,127,254,255, 47, 31,106,146,176,111,182, 8,219,128,173,150, - 7,140,229,197, 44, 21,166,170, 49, 38,236,232,157,163,177,198,143,196,157, 47,148,214, 58,238, 63,120,196,124, 81, 97, 76, 29, - 66, 63, 34,166,179, 25,121,167, 75,237, 44, 85, 85, 16, 7, 11,102, 99, 45, 73, 55,163, 16, 18, 33,108,152,102, 24,191,159,119, -132,195,143, 92,227, 78,240, 68, 63, 41, 2, 7,190,117, 25,124, 74, 30,136,184, 24,213,173, 37,196,145, 15,235,201,179,196,147, -220, 66,135,238,127,230,171, 8,238,191, 60,222, 89,112,177,194,112,225,249,225,148, 47,236, 81, 20, 97,147, 20, 44, 24,173,125, -184,142,148,168,200,187, 75,214, 27, 10,132,244, 37,125,249, 60, 10, 12,128, 31,251,112,249,235,255,115,225, 16,176,242, 7, 45, -113,233, 23,127,111, 61, 9, 85, 60,161,130,151,216, 37,184, 45, 88,194, 27,131,110, 71,212,254, 40,228,219,155, 22,118, 33,156, -127,176,218,144, 79, 40,145,152,144,229, 43,165,239,186, 68, 40,166,173,138, 81,224,144, 46,156,220,228,186,167,221, 44,125,149, -136,139,249, 31,180, 22,183,128,181, 81, 45,101,204, 10, 47,146, 89,126,102,177, 58, 44, 56,119, 33, 31,199, 61,137,168, 93,223, - 97, 8,129,179,142, 72, 38,204,138,134,249,116, 70,127, 67, 49,156, 85,168,120,131, 36, 77,184,124,105, 7, 45, 22,156,156, 60, - 34,210, 62,145,169,223, 25,208, 44, 28, 39,211, 49, 73,226, 79, 67, 91,131, 13,122,131, 77, 30, 31,158,114,116,118,196,233,217, - 57,147,201, 24, 99,231, 36,145, 64,201,134, 60, 73,201,226, 20,235, 26,230,211,115,102, 99,131,112, 49, 31,127,240,144,141,141, - 77, 46, 95,222,226,214,141,207,240,222,187,239,162,132,162,168,252, 62,243,210,254, 14,175,189,245, 22,184,136, 44,205,121,239, -253,143,249,207,254,198, 47,121,213,169, 53, 68, 74,112,255,254, 67,138, 26,222,126,253, 53,110,223,190,205, 87, 94,249, 41,254, -229, 63,255,175,169, 26, 67, 81, 87, 28, 28, 29,177,185,185,205,100, 50,231,243, 95,252, 10,135,247, 62,226,116,116, 68, 36, 64, - 57,131, 19, 77,216,231, 9, 26, 83,241,232,224,128,207, 93,187,206,233,209, 99,116, 22,129,181, 28, 29,159,208,123,110, 55,140, - 44, 27,164, 92, 9, 86,120,130, 37,248,164, 15,243,105, 97,164, 88,142,239,159, 42,242,206,121, 5,178,115,207, 72,115, 91, 27, - 95,133, 49,149, 12, 99, 83, 27,168, 95,118,105,133,252,241, 55,145,181, 13, 15,238,127,196,100, 58,226,234,245, 27,236,109,110, - 82,204,206,104,108,195,246,206,128,241,249, 1,105,210,101, 50,173,208, 58, 97,103,255, 26,183, 62,251, 50,121,111,143,162, 40, - 25,158, 28,162,149, 34, 77, 83,108,149, 99,123, 93,172,169, 17, 88,210,110,143,254,230, 54,211,241,132,209,241, 67, 58,137, 36, -142, 98,118,119,247,176, 14,138,218,208, 56,152, 21, 5,143, 15,143,184,121,243, 57,162, 56, 98, 81, 46,184,113,243, 26,212, 13, -143,239,223,163,223,237,146,119,187,108,237,238,115,114,126, 70, 85, 20,124,225, 11,159,231,235, 95,253, 10,206, 58,206,134, 67, - 70,211,130, 40,235, 50, 25, 77, 72,117,198, 98,122, 78, 99, 5, 15, 31, 63,102,103,208, 97,119,144, 99, 77, 73,132, 37,178, 18, - 87, 53,140,135, 6, 21,103,188,244,242, 75,164,157, 62,139,170, 34,235,166, 24,103, 25, 78,198,108,109,110,146,101, 25,211,201, -148,218, 84,108,108,109,144,102, 61, 70,211, 57, 81,148,240,153, 23, 63,203,240,248,144,243,227, 3, 34,169,232,118,186, 94,189, -109, 26,108, 53, 39,239, 68,124,249,179,207,241,193,135,159, 48,171, 12, 40,129, 54,150,210, 58,250, 90, 49,175,106, 58, 82, 1, - 13,206, 88,154,202, 44,139,185, 18,122, 73,130,235,201,136,185,169,152, 9,136, 13,184, 66,224, 74, 65,149, 55, 40,219,160, 27, - 25,196, 66,194,167,181, 33,131, 96,204,250,231, 85,171, 36, 15, 83, 36,215,170,149,195,117,100,140,193, 81, 19, 65,176, 72,130, -182,254,192, 39,181,246, 29, 33, 50,248,154,157,223, 75,122, 74, 18, 42, 10, 32, 46, 9, 66, 59,132, 6, 37, 45,145, 73,176,105, -234, 9,140,174,198,105, 13, 42, 65,168, 4,151,100, 56, 29, 35,227, 12, 17,165, 56,169,177, 23,185,113, 94,119,111,106,104, 42, - 47, 4,148,109,246,184,195, 26,135,107, 28,182,177,148, 85, 13, 50, 66, 73,141, 17,190,185,114, 8,111,253,138,115, 30, 60, 62, - 94, 90,213,108,240,175,235, 56,166, 26,142, 24, 12, 6, 52, 69,205, 98, 54, 35,207, 50,132,148, 20,174, 33, 73, 83,143,104,166, - 9,107, 50,191,243,174,154, 2,157, 38,160,148, 63, 56,216,112,159,173,177, 69, 60, 66,250, 34, 76, 69, 60, 25,225, 25, 36, 97, -173, 40, 77, 73,129,142, 36,113,172, 73, 18,143,101, 77, 83,159,146, 22, 71, 62,165,173, 21, 67, 91,203, 19, 79,245, 53,212, 56, -226,153,129, 94, 79,233,182,218,142, 61,210, 68, 54,246,207,129,200, 23,117, 65,136, 4,143, 60,181,142, 53,235,171,144, 34,104, - 9, 86,129, 83,255,145,106,249,197,231,222,122,244,229,210,253,176, 54,121, 88, 67,114, 95, 92, 45,200,101, 70,194,210,212, 23, -174, 25,159, 54,104,208,214,218,101,134,247, 69, 26, 91,136, 41,116, 14, 39,109,240,222,217,144,124, 21,132, 21, 98,101, 99,243, -234, 76, 95,220,109,216,159,138,181,244, 52,255,193,238,130,112,238,211,204,251,178,253,109,185,138,132, 93,158,224,196,147,160, -210, 39, 3,102, 46,254,215,135, 60,248,111, 95,203,196,143,182, 11,131, 86, 62, 73,107,123,235, 18, 74, 73, 62,250,224, 29,226, - 4,170, 98,138,214,254,107,143,181,162,104,230,108,246,123, 84,101, 69,175,219, 67, 42,197,143, 94,125,149,162,178,100,249,192, -239,254, 17, 68, 73,206, 27,111,189, 69,214,233,114,245,234, 53,164, 20,244,123, 57, 81,156,114,126,248, 0,173, 50,250,157, 93, - 48, 53, 31,126,240, 62,141, 43,217,216,236,114, 62,156,210,147,187, 76,230,115, 30, 63,126,200,193,193, 67,246,246,159,163,219, -233,249,204,223, 52,163,223,235, 50, 25, 14,153,205,107,175, 59,176,130,141,243, 51,254,244,219,223,225,103,126,238,167, 49,206, -171,123,203,186, 36,142, 61,128,101, 54,171,248,226,103,191,202, 31,253,219, 63,160, 90, 28,178,221,223, 96, 50,172,252,248, 91, - 8,156,240,222,200, 71, 7, 71,252,236,151,191,204,124, 58,164,116, 9,141,105,152,142, 11,210,106,227, 98,142,253, 51,110,179, -245, 78,253, 73,167,195, 95, 70, 88,106, 19, 1,151,227,251, 11,162,145, 53, 43,221,167,172,154,214, 55, 49, 23,233,117, 23,178, -129,113,214,122,139, 88, 53,231,209,163, 7,216,133,161,159,229, 92,218,221, 36,137, 42, 22,179, 83,186,105,194,217,217, 33,221, -141, 75, 24, 17,243,252, 11,159,227,210,149,231, 57,159, 46,152, 21, 67, 14, 63,185,195,124, 54,101,115,176, 65,127, 48,160,215, -235,178,179,187,139,107, 54,104,154,154,126,175,195, 78, 63,103,120,116,192,226, 44, 38,234,244,169, 85,140,211, 49,139,178, 98, -231,242, 62, 95,253,122,206,209,225, 17, 74, 75, 62,249,228, 14, 31,223,249,136, 65,183, 75, 81, 54,244, 54, 54, 24, 77, 39, 24, -235,216,142, 18,174, 93,185,194,157,251, 15,120,248,240, 33,253, 94,207, 11,158, 44, 62,184, 38,203, 56, 59, 57, 33, 78, 52, 58, - 78,152, 45, 22,148,243, 9,243,209, 49,229,102,135,157,126, 70, 30, 41,138,166, 36, 78, 18,175, 29,136, 34,102,211, 49, 78,106, -178,110,135,198,150,244, 6, 61,148, 86, 62, 81,206, 57,180, 84,212, 69,197,209,193, 17,121,191,207,246,246, 14, 72,205,104, 52, -198, 52,134,237,173, 29,250,157,196,223, 19,117, 67,156,229,126,252, 11,124,238,229, 23,217,252,211, 31,114,114,112, 70, 30, 71, - 84,166, 1, 36,165,146,216,162,162, 78, 52,169, 80,224,188,110, 70,167,241,146,189,174,148,198,214, 53,145, 51, 36, 74, 82, 89, - 75,109,161,174, 36,182, 22,212,166, 33,113, 13,206,233, 11,147,183, 86,192, 11, 96, 92,131,196, 71,142,218,176, 99, 20,214,199, -144, 74,214,210, 2,241,250,141, 54,251,196, 52, 22,140, 66, 89,231,215, 64, 58,194, 9, 11,202,128,176,184,196, 65,211, 16, 89, - 73, 92, 75, 18, 37,145,202,249, 0,159, 52, 2,157,162, 19,141, 83, 37,182,169, 16, 10,164,140,128,144,228,165, 20,104,133, 83, -222, 67,110,219,180, 68,231,112, 86,130,212,126,204,219, 62, 22,165, 31, 93, 75,169,252,253, 41, 28, 85, 83,179,168,141,143,232, -149, 18,227,239,224, 0,218,137,169,157,224,209,209, 9,221,193, 54,135, 15,143, 41, 22, 5, 91, 27, 3, 63, 70, 15,140,114,172, -193,154, 10,103, 35,116,172, 49,141, 37,202,115,132,109,252, 62, 61, 52,117, 50,138, 40,138, 41, 34,142, 16, 90, 97, 28,158, 91, - 31,156, 68,198,216, 96, 83,107,239,181, 53, 97, 42,226, 41,161,247, 82,232, 42, 61, 18, 54, 10, 41,124, 81,164, 67,162, 91,228, - 97, 77,193,167, 46, 37,203,140,118,255, 87,216,103,213,246, 31,147, 55,226, 46, 30, 0,132, 8,185,236,145,159, 70, 44,139,122, -235, 4,108, 51,210,197,138,238,214, 30, 70, 90, 64,140,120,162,202,184, 31,223,204,124,154,152,239, 89,211, 76,231,158, 96,121, -240,116,247,254,164, 32,112,125,178,224,214,232,157, 38,164,211, 53,141, 65, 87,141, 65,181,254, 98,185,202, 48, 23, 86, 32,164, -241,234,101,235,133, 3,203,128, 23,107,195, 55, 78,240, 14,138,229,159,105, 71, 49, 82, 6,218, 81,123, 80,112,172,246,239,194, -219, 78,158,252, 70,151,106,119, 39,158, 56, 9, 62, 1,192, 23,238,194, 8,230,226, 67, 95,114, 49,240,123, 53,146,201,210,140, -225,135,119,216,232,105,170, 69,133, 82, 25, 89,127, 19,103, 29,253, 78,194,245,155, 87,153, 78,135, 60,126,248, 9, 14, 71, 85, - 22, 94,220,133,225,115,159,251, 28,143, 31, 61,162, 42, 75,108, 85,147, 72,159, 7,156,119, 58, 68,105, 7,161, 21,253,237,203, -204,230, 51,230,181,193, 54,134,162,172,153, 77, 71, 84,101,197,238,118,159,199,143, 63, 97, 99, 99,128,115, 21, 59,187, 27, 76, -167, 83,122,131, 13, 6, 91,219,124,255,135,223,227,234,141, 27, 28, 29,157,240,249,159,120,133,241,232, 46,105,150,241,225, 71, -119,184,245,220, 45, 62,120,231, 45,138,178,164, 42,253,131,244,253, 15,111,243,252,231,239, 3, 63, 75,158,119,152, 79,103, 84, -229,140, 69, 53,103, 56, 30, 49,154,206,217,249,210,231,216,189,244, 28,231,103, 83,204,188, 65,210,132,211,151,255,249, 91, 7, -199,167,103,196, 89,202,230, 70, 31, 97, 22,212, 56,166,181, 31, 81,213,117,181, 2, 36,172, 93,106,226,153, 23,232, 95,109, 4, -255, 36,101,233, 73,127,167, 88, 79,130, 16,235,211, 22, 46, 40, 76,151,211, 26,231,158,185, 6, 16,194,171, 93, 35,173,113, 13, - 40, 25,177,152, 45,188,128, 79,119,113,210,103, 1, 68, 81, 70, 36, 28,219, 66, 48,154, 47,120,254,179, 47,177,189,115,153,186, -241,163,221, 56,246,167,226,195,195, 67, 78,143,142, 73,179,132,110, 64,172,110,108,108,176,185,177,193, 70,191,135,118, 13,143, - 30, 60, 96,255,242,140,221, 43,207, 97,117,202,227,179, 33, 50, 73,217,217,217, 69, 73,137,105,106,138,197,148, 52,209,116,179, -132,249,108,206,193,227, 67, 58,105, 70, 81, 84, 40, 89, 48,159, 79,113,174, 33,141, 21, 31,222,185,199,205,155, 55,184,122,245, - 26,105,154,122,108,166,242, 2, 46,154,154,243,115,199,209,227, 9,135, 7,143,176,213,140,243, 3,248,204,141,203,100, 81, 68, - 89,150, 60,247,220, 45, 18, 4,102, 50,162,167, 99,166,227, 51,192,144, 37,154,222,181,203, 76, 39, 83, 14, 31, 31,210,237,245, -217,236,245, 25,143, 39, 28,159,159, 18,105,205,195, 7, 15, 56, 62, 57, 35, 75, 19, 52,150,205, 94,134,116,134,126,127, 64,218, -233,241,181,111,254, 52, 63,241,141,175,243,195,239,125,151,121,237,109, 97,165,177,100, 6, 42,231,232, 72,205,184,105,216, 20, -146,133, 49,100, 82,133, 76, 8,223,101,106, 37,131,181, 76,210,246, 28,145,244,244,188,202,192,188,118,228, 13,164,181,161,169, - 42, 26,180,231, 85,104,237,141,107, 54,232,103, 2, 3, 29, 39, 49,182, 1,137,231, 93, 24,139,148, 22, 43,236,178,192,200,208, -221, 75, 33,113,198,208,216,134,166, 22, 80,148,129,128,151, 16,197, 21,153,241, 57, 9,117,221,128,105,136,140,163,108, 26,166, - 69,137, 43,102,216,186, 36,235,196,108, 95,222, 97,103,103,203,187,129,172,163,158, 22, 84,205,196,211,215, 54, 59, 68,221, 30, -116, 37, 34, 2, 17,123,150,130,107, 59,146,198,248,183,150,173, 97, 5, 77,237, 87, 23,126,207,107, 17,194, 80, 25,139,142, 3, - 84, 73,105, 44,214,231, 33,160, 80, 34,226,189,219, 31,210, 56,129,116,126, 50,163,164, 36,203,114, 76,211,208,233,246, 60,255, -188,174,201,226, 24,211,212,204,138, 57,162,147, 35,147, 24, 81, 58,180, 80, 52,172,208,205,141,131, 88, 71, 88, 60, 11, 95,172, - 77,198, 76, 99,151,112, 49,214,152,250, 79,238,144,151, 58,152, 54,129, 77,249,130, 30,135, 32,146,184,141, 91,141,252,120,220, -191,175, 86,208,151,165, 54, 76, 92, 20, 59,179, 54, 49, 20,226,137, 49,246,211, 65, 99,109, 17,116,106, 77, 48,169, 91,122,159, - 11, 63,103,121, 17, 96,182,238, 73, 95,195,208,138, 39, 28, 53,207,226,186,127,218,196,224,199,218,220,220,106,109,108,157,123, - 66, 54,207,133,110,124, 9,248,122,226,185,231, 1, 64,102,201,215,215, 85,101, 9, 7,222, 0,134,247, 30,184,150,222,230, 5, - 42, 94,240, 36, 77, 0,208,180,167, 32,105, 47, 72,239, 47,218,224,228, 82, 57,216,238, 94,124, 49,246, 31,171,132, 93,123, 64, -139,149,240,205,173, 94,208, 86, 56,208, 42, 63,219, 17,188,104,125,201,110,245,199, 5, 23,131, 27, 46,238,127,130,208, 79, 71, - 44,230,115, 20,158,222, 52, 43, 42,250,121,159, 94,167,203, 64, 11, 18,165, 24,149, 37,243,233,132,126, 55,163,110, 74,146, 52, -227,198,141,107,124,252,201, 93,164, 20, 76,134,231, 20, 69, 73,156,118,216,222,187, 74,154, 86,156, 28, 28,243,224,225, 67, 94, -122,249, 37,146, 52, 70, 41, 73, 93,150, 76,134, 67,174, 93,189,201,241,129,100,120, 62,229,165,151, 62,203,123,239,189,133,165, - 98, 92,140,209, 58,163,187,209,227,209,225, 1, 47,190,240, 89, 38,147, 5, 87,175, 60, 71,146,116,216,191,188,207,189,187, 31, -145,191,221,231,197,207,188,192,193,221, 59,228,121,202,217,124, 78, 89, 27,172, 53, 12,207,135, 52,139,138, 78,154,114, 58,153, - 32, 99,133,117, 13, 39,231, 39, 60, 58, 56, 32,202, 94, 33,206,122,236,238, 94,162, 25,142,225,228,204,143, 34,105, 16,141,165, -211,219, 32, 78,124, 6,249,246,246, 22,103,247, 62,100, 94, 27, 68,150,251, 16,131,198,143,250,108,136,129,108, 49,173,235, 60, -247,191, 10,235,248,175, 55,153, 90,243, 31,175, 17,230,214, 89,207,127,213,147,123, 20, 69,216,166,225,232,209, 99,222,126,253, - 61,226, 40, 99, 58, 29,113, 62, 62,163,223,189,132, 64, 97, 26,133,173, 36,131,205, 61,146, 62,236, 93,185, 70, 85, 90,154,106, - 78, 85,142,137, 35,199,181, 27,207,113,114,114,198, 15, 95,253, 62, 91,155, 3,175,216,142, 35,118,118,182,232,166, 25,155,155, - 91,244,250,125, 78, 78,135,156,205,224,149,157, 91,104,161,217,223,189,204,224,210,142, 7,176,204, 38, 92,187,114,153, 72, 43, - 6,121,202,254,246, 38,239,126,112,143, 52,233,146,165, 41,231, 39, 39,216,166, 98,123,103, 19, 37, 29, 91, 91, 27,196,113,206, -193,193, 99,202,173, 45,122,221,156,188,147, 50,157, 77, 72, 84, 77,154, 40,122,217, 54,253, 94,204,195,251, 61,180, 4,170, 57, -145,176,108,108,110,241,230, 59,111,179, 53, 47,217,239, 15, 80, 82,178,152,141,233,246, 7, 84,179, 17,206,198,212, 8,186, 89, - 70,189,209,227,228,248, 4, 37, 21,253,222, 96,169,214,159, 79,253,155,176, 57,166,156,147, 48,240,201, 99, 56,100,149,128,176, - 92,186,188,199,207,252,234,175,242,157,255,240,109,226, 72,135,112, 20,144,206,119,220, 37, 14, 19,107,230,133, 97, 16,197, 62, -199,220, 58,104,204, 42,157,209,121,129, 93,229, 44,145,131, 60,210,212,214, 48,169, 29,105,101, 73, 42, 16,113,131, 81, 13, 66, - 58,255, 12, 10, 15, 90, 99, 26,148,210,152,186, 21,105,249,124,105, 39, 88, 10,207, 28, 38,172, 22, 87, 96, 42,165,212, 50,107, -219,186,134,186,174,189,207, 89,107,106,165,104, 38, 49,115,165,136,172,197,149, 37,118, 58,167, 25,143,105, 70, 35,204, 98,140, -116, 13, 73, 39,226,100,183, 75,245,153,231,217,220,218,162,169,107,206, 79, 78, 40,103, 51,159, 9,223,237,208,221,222,166,187, -123,137,120, 99, 11,213,239, 33,178, 20,161,180,159, 90, 26,227, 71,239, 85,129,171,188, 98, 29, 2, 61, 13,137,210, 30, 18,175, -163, 4,165, 98, 63,117,136, 34,140,169,145, 82,161, 85,204,163, 71,135,156,158,143,232, 14,182, 25,158,143,160,241,207,237, 60, -239,112,116,124,204,222,222, 37, 30, 62,120, 72, 28,105, 22,243, 57, 81,154, 49, 91,204,217,220,223,243,133,174,165, 58,138, 80, - 80,132,247,169,171, 72, 99,132,223,167, 27,227, 2,198,219,239,109,133,116, 75,209,107, 75,195,123,178,155,108, 9,163, 42,164, - 46,250,188,116, 69, 20,251, 48,161, 54, 97,172,101,197,171,144, 13,208,142, 80,172, 93, 89,188,158,181,144,118,159, 18, 40,182, -158, 57,225,214,187, 91, 21,162, 73,173, 92,139,181,118, 97,133, 19,194,103,108,224, 6, 60,107, 52,176, 62,130, 23, 60,179, 65, -121,178,144,255,216, 26,126, 97,159,206, 5,145,241, 69,189, 88,120, 22, 6, 59,230, 42,176, 70,248, 53,120, 88, 43,121,188,186, -127,141,106, 99,209,117,221, 96,140, 90, 27,151,216, 0,135,183, 33,134,117,181, 23,145,225,102, 90,118,227,235, 24,206, 39, 50, -215,219,192,251,245,177,193,122,152,189,146,161,195, 95, 55,217, 47,145,162,110,169,116,111, 73, 57,171, 29,188, 11,167,241,149, - 1,114, 61, 20,246, 89, 3, 99, 33,124,151,208,212,158,168, 52, 30, 85,244,246,188,210, 51,239,244,152,207,231,228,123, 9,194, - 24,122,157,174, 39, 57, 41,137, 49, 6, 29,105,198,147, 17,231,195,115,110, 92,191, 78, 30,199,140,134, 67, 78,207,199, 20,139, - 5,121,167,131, 49,135,212,101,197,116, 52, 38,142, 54, 25,143, 71,212,101,193,102,191, 79, 93,148,140,199, 5, 95,254,210, 87, -120,251,173,215,233,246,186,244, 55, 59, 32, 35, 30, 62, 58,231,254,251, 31,145,100, 17, 91,189, 30,199,199, 67, 94,249,230,207, -211, 52,142,247,111,127,192, 55,191,254,101,162,110,143, 94, 18, 49, 28,141,168, 5, 20, 65,163,105,157,227,236,236, 12,225, 32, -138, 34, 63, 90,108, 74,142,142, 15, 80, 58,103, 52,153, 80,154,134,193,214,128,225,105, 68,199, 36,104, 21,148,239,194, 43,108, -139, 69,193,201,241, 25, 81,164, 48,206,210,219, 28,176, 37, 51, 30, 79, 74,166,211,169,215,244,200, 39, 20,158, 75,188,204,255, -127,255,121,194, 22,250,148,111,243,153,133,253,201, 27,206, 58,166,147, 49,111,189,241, 22,243, 89,197, 98, 94,210,235,117,216, -219,217, 68,106,193,100, 58, 67, 52, 18,165,114,202,218,145,247,251, 52,141,225,248,248,152,210, 52, 68, 73, 77,150, 71,232,164, -203,139, 47,127,142,243,225,144,183,223,120,141,205,126, 23,209, 73,121,120,255, 30, 89,156,114,124,116,198,141, 23, 94, 98,251, -202,103,232,109,236,114,255,112, 68, 20,151, 36,177,162,172, 23, 92,185,118,149,180,147, 51, 61, 59, 13, 19, 2,127,163,166,105, - 70,180,155, 81, 22, 5,157,110, 23,211, 44,152,207,167, 72, 12, 82,150, 94,251,209,235,241,248,209, 3,138, 98,202,139,159,253, - 12, 91,253, 28,209,204,152,143, 70, 44,138,138,141,222, 6,238,242, 30, 90, 72,178, 72, 48, 29, 14, 33,138,249,226,151, 95, 97, -119,107,128, 86, 2, 83,150,152,166,130,166,164, 42,231,152, 38,246,127, 95, 85,178,189,217,103,107,208,231,224,241, 33,101, 49, - 39, 75, 99,166,179, 25,166,170,188, 3,193, 25,146, 36, 70, 75, 65, 93,206, 56,126, 60,100,107,111,143, 81,189,192, 22, 99,250, - 27, 27,220,188,126,133,111,124,245, 39,120,253,222, 1,139,186,102, 32, 19,166,182,194, 58,199, 68,212, 36,214, 81,133,135,110, -131,207,158, 55,198, 19,232, 26,107,209, 82, 82, 10,207, 8, 23,206, 18, 43, 77,209, 52,140,139,154,222, 2,108, 44,105,116,140, -144,208, 24,185,180,158,181,235,193, 54,120,166, 69, 74,138,128,178,118,214,250,142, 87,201, 37,162,212,218, 21,171,220, 52, 53, -166,153,211,148, 37,206, 26, 79,158,195, 49,179,150,217,104, 76,125, 52,161, 30, 78,169,198, 83,220,124, 78,236, 12,145,176,164, -169, 96, 99, 51,194, 30, 75,212,217, 67, 78,251, 3, 76, 99, 40,231, 11, 98,169, 73,163,152, 70,103, 44,210, 7,156,228, 29,162, -141, 45,242,221,109,242,173, 45,146, 94, 7,221,233, 64,164, 17,174,193, 84, 5,214, 6,255,180,142,130,198, 32,116,205,149, 35, -142, 83,207, 79,211, 49, 14,207,237, 23, 8,234, 69,197,189, 59,159, 96, 67, 72,213,232,240,156,249,120, 74,154,102, 88,103,137, -226, 4, 99,253, 3, 63,137,227, 0,194,242,118,208, 78,191, 79,221,142,113,195,189, 38,149,164,105, 26, 47,154,148, 42,248,161, - 45, 24, 71,211,248,169,133, 31,189,235, 0, 9,147, 33, 93,243, 98,103, 44,150, 98, 46,175,125,104,209,178,177,110, 59,116, 77, -164,189, 40, 78,201,150,137, 18,200,114,174, 29, 47,251,151, 82, 60,235,192,143,123,102, 19,192,143, 41,240, 66, 8,159,212, 40, -236,234,247, 60,248, 98,201, 96,247,211,100,241,169,253, 66, 59,206, 23,252,120,248,204,179,166,143, 79, 47, 48,215, 82, 47,215, - 58,245, 11, 19,137, 39,186,114,156, 11, 65, 53, 62, 37,207,186, 96,235,172, 13,101, 89, 82, 85,134,186,105,168,235, 6, 93,213, - 30,180, 64,128,207,172,119,215, 74,136, 37, 81,110,245, 13,177,242, 3,139, 85,113,111,199,246,170, 45,224,178, 45,254,114,217, -197,175,211,231,228, 90,108,222,122, 55,189,250,161, 60, 61, 18, 89,122,253,172,187,160, 80, 20,235,136, 90,231,150, 54, 44, 17, -130, 25, 86, 22,130,134, 89, 49, 37,221,212,140,138,134,233, 28,146, 40, 65,201,148,211,225,132,198, 53,136, 72,208,217,216, 12, - 99, 59, 65, 83,149, 60,126,116,198,205,235, 55,176,174, 97, 81, 45,168,108, 77,217,148,220,189,243, 33,157,222, 22,221, 88,179, -187,183, 71,109,193,138,152, 89, 97,249,204,173,207,128, 41,153, 14, 79,201,122, 17,175,189,249, 42, 89,156,162,147, 20, 39, 52, -239,191,119,155,189,205,109, 94,249,210, 23,248,236, 23, 62,207,255,243,255,250,127,231,231,127,250, 23, 40,203, 25,184,154,235, -151,247,249,179, 63,249, 22,131, 75,251,252,222,239,253, 54, 78, 41,156,105,188,226,213,121,223,103,156,104,206, 71, 99, 68,156, -251,192,150,208, 41, 77,139,154,186, 42, 73,243,156,253, 65,202,105,172, 25,107,127, 49, 72,106,111,203, 80, 17,210, 57, 78,142, - 30,162,116, 8,144, 80, 17,163,197, 25,187, 91, 59,212,118, 14, 74, 34,131, 51,225,162,246,245,233,155,237,211,119,232, 65,228, -184,126,131,173,135, 1, 5,160,197,250,190,168,101,253,171,214,230, 22, 20,182, 74, 11,143, 83, 77, 34, 34,173,151, 93,141,183, -164,132, 45,156, 16,254,215, 1,217, 58, 58,122,196,191,250,103,255, 15, 54, 58,155,228,221, 28, 65, 67, 81, 84,236,110,238,115, - 94, 54, 76, 23, 99, 34, 37,216, 76,186, 8, 33, 57, 59,122, 64, 83, 7, 10, 87, 39, 67,187, 62,105, 63,101,107,179,207, 79,126, -243,155, 36,121,135,199, 15, 31,179,185,179,237, 19,208, 74,131,213,154, 91, 95,253, 38, 55,111,220,162, 56, 27,115,244,232, 33, -166,154, 18, 13,186, 84, 83,199,248,228,140,238,214, 22,221,205, 75,222, 91,111, 45,211,201,152,110,167,203,116, 50,162,169, 22, - 12, 71,103, 60,126,252,136, 78,167,195,245,235,215,217,238,119,185,121,181,135,142, 4, 81, 26, 83, 86, 21,103,199, 39, 92,218, -223,102, 99,163,135,169, 74, 68,221,208,177, 13,143, 70, 67, 14,199, 19,242, 52,229,198,238, 46, 90,123, 59, 87, 89,150,100, 27, - 3,164,210, 44, 22, 11,198, 69, 69,191,219, 69,162, 40,231, 53,186, 23,133,135,169, 33, 75, 37,231,167, 67,164,204,185,190,191, -139,180,142,106,190,240,227,211, 72, 82,215, 53,189, 60,166,104,230,184,102,142, 35, 66, 19, 83,205,103,228,177,226, 55,126,229, -103,121,243,163,143,121,253,221, 59,204,155,146, 26,111,133, 45, 42,152,162, 57,179,134, 65,164,160,110, 16, 66,178,192,162, 35, -137,171, 33,113,146,153,115,204,241, 88,225, 28,136,132,163, 40, 97, 54, 83, 36,137,194,197,198,211,204,140, 65, 59,208, 2,164, -112, 72,103,144, 78,130,177, 56,209, 96,141, 8,170,112,233, 31,210,182,241,250, 12,169,124, 66,154, 5,179,124, 70,249,189,105, -211, 24,154,197,130,114, 52, 97,122,114,194,228,116,200,252,124, 66, 61,171,113,141, 64, 33, 72,132, 32,195,146, 56, 75, 37,160, - 25, 87,212,155, 2,230, 53,139,238, 25, 66, 7,114, 93,156, 82, 56,137, 54, 49,206, 65, 93, 53,160, 20, 38,150,200,110,138,238, -229,116, 46, 95,161,179,127,153,205,173, 1, 89, 39, 69,104, 65,156,229,225,235,212, 96,189, 56,185,118,142,134,208,241,106, 63, - 93,240,170,125,197,221,187,247, 40,107,160, 19, 33,148,196,212, 37,197, 98,198,214,206, 22,211,249,130,110, 39, 99, 49,157,160, -165,160, 44,203,165,136, 42,221,200,137,178,132, 58,132,225,248, 36, 59,175, 79,104,234, 18, 39, 53, 78,121, 82,167,176,198, 39, -217,153,136,218, 52,136,198, 55, 89, 42, 52, 74,222, 31, 93, 47,189,245, 82, 58,148, 0, 84, 32,198, 41, 69,172, 34,226, 72,134, - 98,238, 59,244, 54, 78, 85, 4,182,187, 12, 28, 10,175,199, 90, 5,247, 32, 86,228,184, 37, 47,176,197,183, 94,104,225,196, 74, - 56,189,156,232,186, 37,183,100,249,220,106,169,132, 75, 55,149, 67,216,246,179,123, 71,129, 13, 30,138, 11,246,115,119, 17,126, -243,172,117,223,167, 30, 46,158, 60, 28, 56,177,202, 56, 17,225,123, 89, 87,143, 11,183, 22,158, 33,150, 99,121,159,200,215, 96, -141,164, 9,126,209,198, 88,234,186,161,168, 12,101,109,168,106,235, 69,158,101,213, 32,149, 88,141,223,215, 5, 14, 98, 13,167, - 23,186,112, 88, 21, 83,183, 86,212,101,136, 30,212,203,152,195,192,213, 13, 85, 87, 46, 19,112,218,206,126, 37,162, 91,177,157, -151, 92,165,229, 79, 84,240,244, 94, 67, 62,131, 96,183, 44,240,171, 40,229,229,235, 32, 3, 38,180,155,166,161, 51,133, 40,137, -137,103, 53,157, 52,163,219,233,146,208, 80, 53,134,241,116,206,230,246, 37,134,103, 71,116, 98,197,108, 92,209, 73, 59, 8, 20, -179,233, 57, 39,103, 39,220,184,121, 19, 35, 20, 90,231,220,249,248, 46,159,251,194,151,153, 55, 13,198,249, 2,179,181,187, 79, -213, 56,108, 85,113,122,118,138,144,150,126, 63,103,179,183,205,227,195, 71,196,249, 54,207,221,186, 78, 47,206,185,253,193,123, -188,123,251, 3,126,250,149,111,242,218,155, 63,228,171, 63,249, 83,124,120,239, 35,186,105, 78,167,211, 35,214, 17,113,146, 82, - 27, 11, 74,162, 26,159,116, 36,133, 96, 62,159, 17, 37, 26,161,162, 48,253, 0,173, 35,156, 19, 52,101,197,233,233, 25,145,107, -216,236,245, 56, 24, 77,188, 14,194,129, 16,138, 74, 42, 68, 99,168,235, 57, 8,135,214,154,227,163, 49,103,195, 33, 73,218,103, -115,167, 71, 99, 10, 15,118,129,255,225,166,142,139,231,179,139,197, 93,132,140,224,245,132,182, 96,213,104,109,109,173, 32,170, - 45,234,137, 82, 36,113, 76,146, 36, 68, 1, 49,185,124, 8,172,188, 55, 97,125,227,104,102, 83,134,199,135, 28, 31, 28,113,227, -234, 85,122,221, 28, 44, 84, 85,141, 84,154, 94,191,207,104, 60,228,116, 56,102,171,223, 33,150,142, 98,177, 0,169, 41,230, 17, -231,167, 39,164,221,156,188,211, 71, 38, 29, 94,120,249,139,252,202,175,253,118,176,123,157,113,112,239, 1, 86,194,112, 60,163, -123,114, 74, 63,138, 16, 52, 76,199, 19,178,216,122,145,105,153, 83, 78, 20,105,127,131,166, 54,164,131, 62, 59,253, 62,213,120, - 76,175,147,208, 84, 5,219, 91, 27,140, 70, 67, 78,207, 70,108,110,239,211,137,107,164,242, 9, 83, 69, 9,113,146,251,125,105, -146, 80, 84, 13, 89,183, 67,108, 28,162,174,233,118, 58,124,124,124,138,149,154,178,113, 72, 87,163,180,239,148,202, 98, 65,183, -215,243,246, 29,173,208, 81,140, 48, 80,153,154, 69, 93,161, 83, 15, 76,217,216,217, 36,205, 99, 78,207,134, 84,197,140,231,111, - 92,227,242,254, 21,166, 85,193,108, 54,225,248,225, 67,202,178, 36, 78, 83, 36,144,103, 49,166,105, 80,218,145,198, 49, 87, 47, -237,242,159,252,218,223,224,133, 27, 31,240,167,175,190,193,189,195, 19,132,118, 52, 53,156,227, 21,212,113, 28, 99, 10, 71, 55, - 86,212,162,193, 56,239, 11,142,129, 72, 41, 10,103,105, 2, 42, 85, 57, 63, 22,158,206, 28, 89,218,160, 50,137, 80, 2, 39, 29, - 85,227,173, 95, 82,123, 63,177, 31, 81, 46,151,211, 30, 45,107, 27, 84,152,208,217, 0,121,241,246, 55,141, 49, 53,214,249, 67, -161, 78,123,100, 34,102, 90, 11,106, 59,167,113, 49,184,132, 56,113,244,186, 29,226,164,131,148, 26,211, 52,184, 98,129,173,230, -148,245, 2, 99,107,202, 97,205,180,170,201,114, 67,148, 4,142,188, 40,136,147, 4, 33, 74, 34, 33,201,117, 76, 55,143, 72,148, -198, 24,193,238, 96,155,189,235, 55, 73,247,118,200, 58, 25, 66, 11, 42, 83,249,107, 92,233,160, 55,208,212,149, 89, 50,194,189, - 34,188, 9,207, 96,205,120, 56,229,224,248,148, 56,239,162,123,221, 37,196, 72, 71,154,188,211,165,156, 79,201,211,148,225,201, - 49, 82, 64,217, 52, 24, 7, 58, 73,200,186, 29, 84, 20, 65,211, 98,119,252,195, 82, 40, 29,236,174, 62,176,196,135, 52,249,206, -182, 17,146,198, 72, 68,227,191, 71,237, 2, 72,202, 58,207,138,112,118,109,212,237,237,203,126,228, 30, 17, 71, 49, 73, 36,194, -254,124, 5,248, 89,165, 51,202,101, 67,232,195,184,220,114,237,235,214,129, 47,226, 73, 67,237,133,205,237, 19,138,120,177,246, -177,114, 53,210, 94, 51, 79, 9,111,129, 95, 29, 11, 90, 38,128,120,106,161,189,110, 50,255,255,249, 31,233, 4,110, 61,178, 92, - 56,158, 9,128, 95,219,221,183, 49,213, 34, 76,173, 77, 99, 48, 56,234,218, 80, 53, 13, 85,221, 80,215,190, 83,183,214,160,203, -198,162,108,235, 83, 95, 47,186,171,113,187, 88, 31,183,179,190,223, 92,219,175,135,194, 93,183, 93,248,178,168,203,149, 79, 93, -172,198, 24,106, 45, 27,253,162, 0, 97, 21,207,249, 36,166,207,127, 93,173,119, 84, 92, 76, 99, 91, 83,226,183, 30, 74,183,214, -193, 75, 9, 89,146,248, 27, 44, 73,161, 42,137,149, 64, 9,199,253,251,159,176,255,194, 46, 78, 58,158,219,191,194, 71,119, 63, - 6, 98,132, 86,108,239,108,114,255,225, 9, 89, 83,177,191,191,207,222,165, 61, 38,147, 9,123,187,123,228,221, 77,116,220,225, -225,227,135,220,188,114,137,199,199,231,148,243, 41, 87,174, 94,103,120,126, 66,181, 88,176,168, 26,166,211, 41,199,135,199, 12, -186, 39,116,122, 29,246, 46, 93,230,241,227, 7,116, 7,125,162, 88,179,127,249, 26,239,125,124,155,211,225, 57,223,253,222,159, -177,119,229, 42,121,183,203,116, 60, 99,111,239, 18, 81, 20, 81, 91, 75, 26,107,108, 8,175, 17, 66,146,103, 41,163,243,211,149, -215,213, 89,172,245,164,170,197,108, 78, 83,123,202,208,108,182,160, 40, 42,154,160,172, 21, 50, 80,183,108, 21,110, 66,111,221, - 25,141,103, 52,141, 37, 75,115,178, 44, 97, 60, 41, 46,236,119,254, 99,122, 53,219, 98,173,149, 34,142,162,176, 99,211, 23, 10, -187,146, 42, 68, 52,134,130,175, 5,177, 10, 10,218, 36, 33,138, 19,148, 86,107, 26, 10, 95,200, 5, 62,249,175,156, 78,248,151, -255,252, 95,112,237,250,117, 62,254,240, 14,111,188,241, 35,190,248,249,151,185,118,101, 63,216,184,198, 76,199, 99,164,138,152, - 76,198,116,179, 20, 99, 42,178, 52,166,168, 74, 36, 6,219, 72, 70,103, 21,143, 31,159, 48,173, 12,191,240, 43,191,198,214,238, - 37,206, 71, 19, 22,198, 49,109, 42,138,233,148,108,146,112,119, 58,101,103,119, 27,155, 72, 22,231, 11,202,137,196,106, 75, 53, -143, 49,182,162, 49, 5,147,249,130,230, 0,118,118,119,104, 74,195,201,241, 49,121,154, 16, 73,193,238, 55,190,193,131,135, 7, - 28, 28,157,178,211,237, 6,123,169,161,110,106,108,227, 72,211, 20,172, 35,141, 83,154,198,162, 54, 4,103, 71, 39, 84, 77, 67, -150,117, 88, 44, 10,191, 82,210,130, 88,121, 49,154,146, 80,204,167, 68,113,140,116,254,247, 85, 18,145,200, 4,131,165, 9,226, -179,218, 24, 68,214, 33,237, 84, 20,211, 57,179,233, 24, 25,165, 36,177, 66,233, 30, 59,131,151,136, 36,204,166, 35,138,249,156, -249,172,100,111,127,131, 52,239, 82, 25,203,198,214, 54, 63,243,213,175,176,191,177,201,115,251,251,188,243,209, 29,126,244,238, - 7, 28, 12,199, 52, 66,114, 62, 47, 80,101, 77,220, 30,178,133, 90, 58,104, 44, 22,225,132,199, 39, 24,139,210, 17,166, 49, 62, -202,184,177, 20,243,138,184,227,208, 74,120, 55, 85, 99, 64,121, 69,252,114,173,219,122,141,195,168,210,227,224,205,154,168,201, -143,246,173,243,169, 87, 62,153, 55,246, 73,108,202,145,111,108,147,230,125,118,247, 43,234,217,130,197,120,138,182,138, 60,235, -161,146,132,193,230, 38,105, 28, 17,107,135,107, 74,220,124,134,153, 77,208,210, 97, 77, 65,158,199,104, 29, 17,197, 9, 73,214, - 65, 71,130, 44,142,176,101,137, 4,202,186, 36, 29,116,216,187,118,133,120,187,139,205,124,128,140,144,130, 40,242, 2, 72,130, - 58,222, 6, 52,108, 59,150, 22, 64, 93, 87,196,113,194,108, 94,112,239,225, 33, 34, 74,137,210,156, 94,127,147,251,159,124, 66, -221, 24,146, 36, 37, 73, 18, 48,141, 79,248,115,190,123, 42,234, 5, 66, 43,116,154,146,182,233,131, 33, 40,169,157,178, 42,165, -252,179, 59,136,219,214, 15,225,198, 24,170, 58,236,216,173,165, 49,106, 57, 90,174, 27,191,207,109,167,117,126, 45, 18,138,120, -240,159,199,177,159,246,232,245,136,213,240,113, 23,158,223, 75, 90,160,193,218, 16,222, 19,120, 21,159,246,236,105,167,198, 23, -167,133,173, 35,107,117,224,147, 79,137,118, 87,211,222,118, 50,188,194,197,174,125,172,112, 79,215,221,191,134, 54,232,194,251, -238,175,246,137,150,202,125, 9, 90,203,112,102,241, 76, 1,107,188,158,170,118,150,170,246,194, 56,143,216,246,207, 9, 39, 28, -186,110, 12, 54,164,252,248, 83,147, 11,105,108,107,251, 3,187,150,143,190, 38, 96, 82,172,197,174,178, 18,206,181,187,120,191, - 95,105, 59, 51,123,225,207, 10,231,158,218, 77,136,139,166,245,181,221,234,197, 9,194,147,211,131, 85,130,147,135,227, 8,225, -150,120,114, 63,118,243, 95,119,222,233,114,229,242, 62,143, 30,222,227,234,206, 54,135,231,231,104, 45,217,216,232, 82, 53, 5, -221, 94,151,195,131,199, 28, 29,159,242,171,191,240,211,220,126,239, 29,172,115,116, 54,123, 62,222, 51, 74,249,139,239,255, 57, -253, 65,159, 91,159,121, 25, 21, 37,108,110,111, 49, 28,141, 57, 61,122,196,205, 43,215,121,227,157, 15,121,241,249,231,249,139, -247,223, 99,103,107,131, 52,203,105,202,130, 47,190,252, 18, 56,120,248,248,128, 31,188,246, 35,110, 61,247, 28,127,241,195,215, - 25,143, 70,140,171,134,203,123,151,184,121,235, 57,190,255,250,235, 84,101,197,251,183,111, 51,155,205,249,194,151,190,204,217, -104,136, 20,146,178,172,125,216,129, 16, 52,214,114,255,193,125,222,122,231, 13,127,138,199,123,235,133,107, 72,147,152,186, 42, -153, 78,231, 44,230,133,255,115,214,195,120,164,240, 2, 28,143,250,130, 56,210,204,139,146,147,211,115,162, 56,241,167, 87,233, - 99, 10, 89, 63, 81,254, 71, 42,234, 98,169,203,144,203,124,224, 40,210,196,137, 63,213,235,200, 23,247,245,162,190,126,186,111, -179,181,147, 36, 37,138, 34,148,246,217,198,237, 3, 81, 58,239,206,168,202,130,239,126,251, 91, 60,122,248,136, 76, 71,124,254, -115,159,227,228,228,136,195,163, 67,146, 72,113,237,234, 85,146, 52,229,244,244, 20, 83,212, 52, 70,144,229, 61, 30,221,251,144, - 27,215,246, 73, 34, 73, 81, 22, 84, 69, 77, 81, 41,140,147,148,243,146, 78, 18, 51, 30,158, 97,140,161,174, 11,146, 78,202,157, - 15,222,231, 82,183,143,114, 27,140,243,136, 44, 79,200,210,148,106, 94, 48, 77, 4, 81,167,131, 22,146,133,177, 24,225,175, 67, -173, 4,181,173,105,202,130,209,249, 57, 73,156,176,177,153,208,205, 50,132, 51,124,120,251, 54, 55,246,183,217,216,204, 81, 1, - 78, 98,170,154, 98, 62, 71, 71,146, 52, 75, 65, 43,250, 59, 91, 60, 28, 78, 88,204, 23, 44,230, 37, 39,103,103, 36, 91, 57,177, -138,168, 49, 88,167,168,107,203, 98, 33, 24, 12, 6, 76,166, 37, 82, 40,132,210,116,250,126, 18,100,173, 35,235,118, 61,114,210, - 84,152,178, 68, 1, 58,150,204,102, 83,166,139, 25,187,253, 1,198, 88,180, 78,200,114, 69, 89, 46, 56, 57, 27,114,115,123,143, - 94,154,115,118,124,202,246,246, 0,201,117, 18,237,115,223, 95,124,238, 22,127,246,198, 27,220, 63, 58,161,168,106,206, 15, 79, - 72,240,202,239,174,138,112, 77,133,138, 21,182,105,136,165, 38,106,154,144,228,231,119,173, 6, 79, 37, 91, 20,142,184, 48,196, -177, 37,210, 30,186,226, 66,129,145,194,210, 88,139,116, 45,142, 52, 12, 95,173, 89, 61, 23, 16,254,123, 22,248,223,119, 96, 76, -229, 83,254,100,179, 18, 37, 73, 48, 74, 32, 59, 41,145,112, 80, 26, 74, 81,250,207, 93,140,105, 68,202, 70,222,163,211,223, 36, -222,219, 65, 41, 73,172, 0, 83,147, 36, 26,219, 24,210, 44,195, 57, 80,229,130,178, 88, 80,105, 16, 90,146, 95,218, 97,231,234, - 62,186,155, 65, 2, 66, 25,132, 86,129, 95,166, 16, 45,213,204, 65,211,184,150, 12,186, 36,143, 73, 9,117, 89,112,255,222, 17, -139,202, 66,146,208,223,217, 70, 72, 77, 93, 86,126, 18,146,166,104,173,113,113,226,187,183,198, 39, 33,214,181, 33,235,118,137, -242,156, 56,207,189,139,162,241, 41,125,166,181,115,233,176, 95, 14, 93,187, 93, 22,116, 23,138,172,239,204,155,198, 46, 11,114, - 91,240,173,241, 83, 18,133, 88,118,223,177,214,164,145, 34,141, 86, 96,153, 56,168,220,149,146,203, 3,203, 5,175, 88,187, 54, -181,109,122,219, 26,138,252,175,144, 93,254,244, 42, 80,172, 14,124,235,163,114, 46,226,174, 47,114,221,197, 5,107,217, 95,187, - 59, 15,217, 4,114,237,137,105,255, 90, 15,200, 21,180, 39, 10, 77, 79,235,219, 23, 66, 96, 91,235, 90, 24,189, 55, 77,227,217, - 29,206, 96,157, 63, 8,235, 85, 15, 38,150, 49,151, 88, 48, 34,112,146,221, 42, 95, 86,172,137, 10,218, 45,132, 20, 65, 21,223, -194, 31, 96,109,247,206,218,104,148,167,138,248,167,165,186,173,139,215,253,231,145, 79,120, 31, 87,187,147,245,189,253,250,126, -127,213,188,185,176, 26,128,186,177,108,111,111,179,152,143,152, 79,199, 72,107, 24,142,206,216,222,222,162,108, 38,108,232,132, -162,154,162,100,195,119,190,251, 93,110, 94,222,166,219, 25,208,221,180,148,115,131,138, 98, 62,255,133, 47,177,189,189,201,120, - 58,103, 54,155,130, 83, 12, 54,186,188,245,250,187,108,110, 12,136, 48,100,145,230,149,175,125,141,110, 47, 99, 52, 60,229,253, -201, 24,140,163,170, 11,126,254,231,126, 14,221,217,224,143,191,245,199,116,187, 61,126,234, 39,127,146,239,124,239, 85,142, 79, - 79,120,120,120,128,150,146,166,170,152, 45, 22, 28,157, 15,249,209, 91,111,177,177,189,129, 84, 10, 99,205,106,106, 35, 37, 39, -167,103, 60,122,124,196,162, 44,151,115,110, 31, 86,224,136, 98, 63,194,158, 76,166,164,105,234, 89,199,129, 14, 39, 90,191, 44, -142, 44,207, 41, 42, 75, 99, 29, 78, 10,174, 92,187,202,163,199,143,216,218,187,133,115, 38,224, 41,237, 19, 55,206,143,247, 99, -186, 39,252,162, 79, 90,216,124, 2, 96, 59,146, 11, 5, 61,140,212,227, 56, 38,142,227,101, 81,215,107,227,120,169, 53, 90, 74, - 52,130, 56,209, 68,113,236,197, 69, 74,133, 81,154, 95,154, 58,219,240,232,147,187,252,219,127,245,223,178,187,179,205,124, 50, - 67, 72,184,117,235, 51, 88,211, 80, 44,230,124,112,251, 67, 58,157,156,221, 75,251, 60,124,116, 72,222,219, 64,165, 29, 22,181, -227,254,163, 35,174, 93,217,131,186,162, 92,204, 41, 10, 75,109, 96,127,239, 50,195,163, 7, 24,161,168,194,205,116, 58, 28,162, -132, 97, 58, 60,229,133, 23,111, 96, 19, 73,154,104, 58,155, 27,148,147, 49,181, 76, 24, 21, 6,234, 5,221,205,148,221,221, 61, -164, 20, 20, 85,197,124, 58, 65, 9,139,198, 34,154, 10,217, 84,236,110, 14, 16,226, 6, 15, 31, 60, 34,237,228,196, 73,140,173, - 75,154,166, 38,235,245,209, 74,209,216, 6, 91, 26,175, 45,200, 83,118,118,119,120,240,248,148,163, 71, 7,220,153,143, 25, 29, - 75, 46,109,245,169,141, 97,123,123,135, 75,151,247, 25,142,198, 68,113, 74,158,101,104,124, 70,248,244,108,232,173, 80, 90, 82, - 87, 13,105,158,147,229, 29, 92,175, 98,120, 50,100, 50,155, 49, 94,204,105,156,197,246,123, 40, 33,136,147, 24, 23, 71, 97, 84, - 41,104,234,134, 56, 19,108,108,111,115,120,124,192,254,205, 43,236,236,109, 35, 36, 12,134, 51,182, 6,191,192,247,223,124,155, - 59, 7, 7, 52,181, 97,124, 54, 2, 99, 61,234,210, 57, 82, 33, 3, 29,205, 4,173, 72,128,145,106, 65,229,124,108,110,209, 56, -244, 2,146, 12,162, 4,234,186, 14,226, 80,177,150,110,197, 50,134,213, 79, 95, 13,194,133,140,103,188,104,210, 5, 38,185, 8, -191,182,182, 6, 87,248,144,148, 48,166,247, 22,174, 6, 29, 57,132,180,152,166,193,218,130,106, 54,131,185, 38, 90,228, 68,189, - 30, 34,141, 49,145,196, 41, 65, 36, 4,166,150, 68, 81,204, 98, 52,199,212, 6,213,212, 56, 9, 73, 55,167,191,183, 69,103,103, -128,238,164, 84,202,162,195,132,176,193,174, 70,224,248,175,213,107,176, 77,176,143,201,101, 56,146,169, 45,143, 15,142,168, 27, - 65,141,162,191,181, 77,212,233, 48, 60, 57, 33, 75, 83,134,206,209,217, 24,224,132,160,211,239, 51, 62, 61,161,110,106,148,246, - 83,176, 56, 73, 80,105,134,206, 50,132,242, 98, 52, 41, 2, 90, 87, 72, 92,235,171,119, 46, 88,239, 4,198,121, 50,159,119, 10, -180, 8,102,115,161,195,109,139,125, 91, 69,100, 24,189, 39, 73, 76,146,198, 36,105, 20, 10,185,242,226, 56, 45,130,218,125,237, - 57,205,122,204,246,106,183,238, 39,136,114,181,119, 23, 23, 39,183, 23, 1, 87, 79, 60,159,130,182, 70, 56,150,135, 64,108, 75, - 27,196,175, 21, 5, 23, 59,245,150, 88,234,214,246,230,225, 95, 27,236,125,106,205, 70,246,108,149,187, 91,170,248,215,131, 86, - 86, 93,187,120,182, 61,173,109,153, 91,250, 94,232,212,149,112,104,121,241,179, 90, 99,151, 29,250,242,115, 88,139, 14,137,167, - 90, 46,247,214,171,174,251, 66, 1,191, 96, 11,251,148,111, 97,121, 58, 94, 59,249,132,125, 16,214, 92, 8, 6, 88,118,222,238, -211,139, 58,242, 98,122, 77,139,124, 92,165,224, 93,140,128, 21, 98,245,119, 44,157, 10, 98,109, 44,135,247,124,142, 70, 19,198, -211, 57, 90, 69, 84, 14,242, 78,234,147,166,128,110,191, 75, 39,147,100,177,164, 42, 43,110, 60,127,157,162, 88, 48,153, 28, 50, -157, 23, 96, 35,102,163, 41,179,233, 8,233, 12,215,111,252,127,121,251,175, 39, 75,183, 51,189, 19,251, 45,243,217,109,211,103, -150,183,199,225, 28,224, 0, 13,160,209,222,136, 61, 36,155,106, 74, 61, 51, 36,131, 23,163, 11, 94, 40,230, 66,250, 7, 20,138, - 80,255, 17, 10, 93, 72,186, 80, 40,228, 70,156, 17, 53, 28, 14,217,156,110,160, 27,104,160, 97, 15,204,241,167,124,101, 85, 86, -165,207,220,254,115,107, 45, 93,172,111,155,204,170, 58, 64,147,138, 57, 39,118,100,102,165,223,185,247,247,174,247,125,159,231, -247, 92,102,156, 23,196,141, 22,113, 28, 16,134,138,131,189,231, 72, 44,135,187,207,120,188,189,141,142, 20,237,118,202,235,175, -189,201, 15,254,246,175,185,117,235, 58,113, 18, 99,165, 70,203,136,139,155,107,108, 63,124, 68, 85,148, 44,173, 44, 17, 4,154, -163,189, 35, 66,169,184,176,121,145,219,111,125,137, 43, 91,155,140,198, 99,138,170,244,118,157, 5, 33,199,219,239,124,137, 55, -222,122,135,247, 63,252, 25,134,250, 96,163, 4,189,254, 41,101,153,145,229,147,217,131, 42, 12, 67,180,210, 51, 34,155,212, 17, - 82, 88,218,237,174, 87,177, 10,216,216,220,228,105,239,132, 76, 9,202,178,172, 11,186,241,147,143, 95, 1, 2,241,210,120, 93, -193,217,216, 86,225, 60, 55,121, 42,146, 11, 20, 65,224,139,122, 28,199,196,113, 60, 47,234, 98,142, 67,244,156,102,141,146,126, - 26, 19, 4,170,238,210,107,177,143, 84,222,150,226, 28,119, 62,120,159,191,250, 31,254, 61,210, 86, 60,217,126,194,230,250, 38, -206, 24,242,162,162,209, 72,185,120,249, 10,101, 89,242,224,254, 61,210, 36,161,179,180, 76,167,221,161,114,146,147, 81,193,179, -189, 83, 42, 39, 8,181,164, 18, 1, 97, 34,105, 68, 9,173,102, 74,239,248, 16,169, 20,121,150, 49, 30,143, 65, 5, 44,119, 27, -216,108,194,201,233, 62,114,164,168,210, 6, 43,221,101, 70,101,197,222,238, 49,205,182, 33, 74, 83, 90,107,155, 68,113, 66,160, - 4,163, 65, 73, 89,140, 72, 66, 69,178,210, 37, 31, 79,104, 55, 98,114, 11,215,174, 94, 68,105,201,241,225, 1,105,179, 67,154, - 68, 28, 29, 30,179,187,251,156, 48, 9, 89,219, 90,167, 40, 75, 44, 6, 25,104, 46, 93,190, 72,179,209,161,127,114,196,189,251, -119, 56, 18,134, 64,223, 98, 99,115,139,206,202, 26, 65,210,224,210,210, 42, 69, 89,130,148,152,178,182, 69,105,197,104, 48, 32, -110, 52,104, 52,155,168, 64, 35, 8, 72, 26, 13,168, 96, 50,201,153,148, 57, 79,182,119, 60,120, 39,105,160, 36,152,202,160,180, - 36, 76, 98,226,102,138, 12, 3,108, 94,144,180,219, 88, 91,177,180,177,194,175,255,230,215,185,243,217, 61, 30, 63,122,198, 55, -222,249, 2, 73, 24,145,151,158,113, 62, 56,233, 83, 72,136,165,170, 71,163,117,188,103, 32,102,113,204,206,248,122,108,133,160, -168, 96, 50,176,132,169, 67, 5, 22, 41, 43, 66, 93, 18,168,202,167,158,205, 82, 25,189,210, 93,214, 44, 5, 91,153, 89,145,146, - 82,227, 68, 13,158,241,246, 25, 48,118,186, 88,245, 1,165,214, 7, 4,137,170,244,215, 45, 4, 81, 32, 17,149,197,230, 5, 85, -105, 25, 77, 20,140, 19,154,113, 68, 20, 4, 56, 41,169,132,160,148,245,238, 83, 41,162, 56, 38,106, 55,105, 44,117,104, 44,183, - 9, 59, 77,136, 53, 4,126,178, 80, 19,115,230, 22, 77, 33, 61, 41, 79,105, 42,227, 47,208,206,250, 41,133, 49, 22,172,100, 56, -200, 24,246,115, 84,220, 33,208,154,116,169,139,140, 52,149,169, 40,243, 9,206, 89,226,102, 74, 16, 70,132,129, 38,219, 45, 17, - 66, 35,132,242,222,101,165, 81, 81, 68,216,104, 80, 42, 63, 77,213, 18,159,210,166,252, 74, 78,135,161,159,224, 77,157, 74,110, - 14,127, 49,214, 71,232, 58,103, 22,108, 92,204,162, 63,167,129, 95,170, 70,212, 6,225,162, 31,221, 39,255,105, 37,208,122,250, -177,231,247,228, 98, 46,168, 93,224,159,136, 51, 2,107,249,202,174,253,165, 29,188, 88, 8,123,161, 94,221,212, 69, 94,188,244, - 32,176, 72, 58, 21,103, 9,112,181,161,119, 58, 70, 23, 47, 17,205,205,222,119,222, 75,190, 8,233,226,252,161, 68,188, 56,124, - 23,110,118,253,211,245, 65,171,114, 53,246,188, 22,206, 77, 39, 36,150,169, 45,180,110,106, 4,232, 51, 29,246,130,128,109, 17, - 4, 48,199,124,206, 95, 78,137,111,179,127, 95, 16, 28,200,185,212,111,238,189,155,243, 66,206, 64, 97,196, 44,243,110, 33,118, -206,206,199, 32,103,138,254,140, 57,204,194,110,223,158,217,243,159,193,208, 10, 63,126,183,214,120,104, 71, 16,210,106,117,120, -252,240, 33, 77, 45, 41,141,143, 25,172,156,227,180,223,103, 57,109,211,109, 54,185,122,249, 6,210, 5, 8,165, 41,243, 33, 74, -107,172,149,148,110,194, 23,191,244, 21, 14,119,119,200,199, 19,126,237,215,190,194, 95,127,247,123, 62, 78, 48, 80,126,239,165, - 35, 34,173,160, 42,113,178, 98,216, 47,232, 92,232,146, 52, 90,244,135, 61,246, 14,246,105,180, 52,151, 47, 94,229,227,143,222, - 35,159,244,177, 42,100,127,111,143, 63,248,195, 63,224,161,187,207,246,246, 51, 46,221, 90,225,193,163, 71, 92,217,186,192,201, -233, 41, 2, 57, 19,174, 56, 33, 81, 82,179,190,121,129,175,254,250,111,243,127,251,127,252, 95,253,154, 65, 88,156,112,148,166, -224,116,112, 74,191,223, 35,203, 38,140, 70, 67,146, 52,198,216,178,126,178, 76,159,212, 1,215,175, 93,231,248,244, 20,235, 28, -105, 43,165, 43, 43,150,187, 75, 88,155, 47, 8, 58, 62,127,167,254, 42,184,194,226, 19,255,188,208,206,143,223, 64, 73,191,107, -155,226, 35,167,157,186, 82,231, 59,245, 41,120,197,255,205,195,122, 63, 55,219,165,214,143,169, 34,207,249,206,183,190,201,253, -207, 62,101,109,101,149,222,225, 41,167,167, 61,150,150,150, 64, 74, 84, 24,146,180,218, 68,198,176,186,190, 69, 89, 20,132, 81, -192,202,250, 26, 79,159, 62, 33, 72, 91, 36,173, 22, 31,221,125,192, 82,167, 77,154,198,180,151, 58, 92,188,124,157, 36,241, 46, -131, 98, 50,198, 20, 5,197,112, 72, 97, 44,151,174, 93,129,229,148,251,119, 62,161, 21, 37,148,165,161,189,190, 70,123,109,139, -211, 97, 70,218, 89,161, 40, 74,238,125,246, 25,202,148, 44,119,189,152, 9, 87,145,101, 57,177, 80, 56, 83,176,253,232, 62, 23, -174, 94, 37,141, 3,182, 46,108,114,241,210, 5,180,200,113,197,132,126,127,192,238,222, 33,235,197, 38,227,241,152, 56, 74, 9, - 59,109,242,201,144,225,201,136, 78, 51,229,159,252,233, 63,230,249,225, 51, 14,118,247,184,114,233, 50,198, 88,242,178,100,148, -149,148, 66,179,185,185,229, 85,183,166,100, 52, 24, 80, 86, 21,205,118, 27,180,244,227, 87, 5, 84,194,199,225, 42,133,177, 21, -173,102,139,141,245, 13,142,142, 78,113,109, 67,154,132, 56,103,137,146,136, 48,137,168, 76,129, 18, 49, 81,179,129, 19,154,193, -233, 17, 34, 8,144,137,230,202,173,107, 8, 29, 32, 31, 62,227,107, 95,124,155,254,104,132, 17, 48, 24,143, 25, 85, 5,177,212, - 24,107, 80,224,221, 38, 82, 64,101,169, 92,229,249, 8,190,246, 97,149,102, 84, 89,118,142,114,194, 72,160,149, 37,210, 5,186, - 78,219, 82, 74,215, 8,217,202, 23,111,103,234, 11,171,173,181,115, 10,171,236,172,123,155,131,139,106,182,185,245,159,235,108, -137, 45,115,132,169,144, 88,164,208, 72,225,208, 26,180, 10, 80,194,239,243, 51, 59,166,156, 76,136,202,192,139,193,116, 64, 20, - 69,196, 81, 64,179,211,166,209,106,162,154, 41, 65,167,137, 77, 67, 74,109, 81, 84, 40, 35,137,234, 24, 90,175,221,149,179, 98, -101, 17,179, 32, 43,159,137,173,113,214,224,140,227,244,164,199, 47,126,250, 49,151, 46,221,192, 88, 69,220, 74, 9, 27,113,205, - 47, 23, 12,250, 61,154,173, 6,105,171, 65, 16,132, 20,227,140,210, 90,194, 36, 98,208, 31, 82,149,126, 10, 18, 38, 9, 58,138, - 49,182,168,159,123,202, 31,156,181, 68, 26,229, 15, 63, 2, 31, 40, 51, 75, 17,243,205,130, 49,198, 51,231, 23, 58, 79,223,185, -215, 9,158,106,110, 87, 11, 3,229, 5,190,129, 38,212, 1, 65,232,167, 5, 74,122, 43,179,172,199,239, 44,212, 4, 87,103, 52, -156,189,182,139, 89, 97,151,126,180,240, 75, 60,224,110,225, 90, 48, 63, 42, 56,177,168,149,175,197,105,246, 28,192, 76,156,231, -156, 48,207, 16, 57, 83,187,120,165,242,125, 86,192, 61, 16,161,126,125, 97,114, 89, 7,164,185, 58,179,221,205,110,103,113,215, - 66, 72,127, 31, 41,233,187,111,159, 33,236, 15,123, 53,167,223,152,122, 37,226,188, 22, 46,152, 93, 43, 5,218,123, 58,197, 28, -224, 34,230, 95,248, 60, 57,103, 58, 74,159,223, 17,211, 61,185,156,167,244, 44,118,246,159, 19, 34, 47,220, 75,252,200,130, 5, - 19,130,152, 5,201,204, 79, 52,110,102, 97, 19,103,148,206,115,165,188,168,249,245, 66,206, 15, 22,254,180,234, 99, 43,117, 24, -209,105,119,120,114,255, 57, 65, 51,101,216, 59,225,230,173,107, 60,186,255,148,163,231, 21,237,246, 42,173,230, 42,229,184,224, -248,232,136, 75, 87,175,208,127,250,156,172, 40, 41,171,138, 15, 62,186,131, 51, 19,126,239,119,190,202,123, 63,253, 91, 78, 14, -119,209, 65, 68, 24, 53,216,123,126,192,106,119,157,201,104, 72, 24, 41,156,240,233, 64,167,131, 62, 75,171,203,220,188,182,201, -246,227,231,140,135,240,229, 47,127,149,131,189,199, 20, 69,204,218,198, 69,126,246,225,251,252,229, 95,252, 37, 95,249,226,187, -168,231,123, 36, 73,196,151,191,248, 54, 97,160,120,250,228, 96,118,178, 11,149,154, 77, 58,132,208, 12, 70, 99,138,194,251,108, -165,246,227,117, 41,253, 62, 70, 41,205,112, 60,166,127,122,204,131,227, 83,159, 45, 45,165,143,110,180, 14,165, 35, 46, 92,220, - 66,217,156,246, 82,151,178, 44, 72,180, 34, 73, 90,244,199,249,194, 88,234,124, 66,222,175,188, 94, 58,195, 46,118,245,105,243, - 76, 72, 65,253,115,106, 29,248, 81,252, 20, 25, 89, 71, 57, 42, 33, 23, 58,117, 47,154,145,136,217, 58, 1, 4,166, 22, 88,149, - 89,198,207,126,242, 67,178,225,128, 34,155, 48,234,247,248,250,215,191,202,206,211,231,168, 48, 32,142, 98,148, 14, 41,139,138, - 60,203,209, 58, 68, 34,137,146,136,194, 24,130, 56,101,253,194,101,180, 20,172,174, 95,192, 85, 5, 72, 65,107,169,203,165, 91, -175,243,217, 71, 31,113,184,183, 71, 35,138, 61, 22,212, 57,242, 73, 65, 20, 38, 28,156, 30, 48, 41, 42,182, 86,219,148, 69, 69, - 16, 69, 92,184,124,153,180,149,115,114,124,132, 51, 5, 85, 57, 97,247,241, 61,154, 73,200,234,242, 18,171,203,109,112,150, 81, - 86, 18, 6, 49, 82,107,158,237,238,113, 33,140, 41,138,202,171,197,235,206,110,125, 99,131, 86,187, 75, 24, 40,178,241, 8, 97, - 33,104,132,132, 81, 76, 16, 87,156,238, 31,145,166, 49, 43,221, 22,141, 56, 66,235,152,194,192,225,193, 51,130, 40,100,171,217, - 33,203,114,130,154,121,189,124, 97, 11,234, 2,146,149, 5, 78,248,192, 19, 33, 3, 28, 5, 58,140,104,119,150, 56, 29, 14,184, -124,229, 26, 81,152,128,169, 8,149, 35, 8, 3, 84,168,153, 20,133,207,214,174, 59,227, 36,109, 16,135,161, 15, 38, 65, 96,109, -201,214,214, 26, 69,150,147,156,142,184,121,101,139,131, 81,143, 86,187, 73,255,224,148, 86, 8,161,177,132, 2, 74, 3, 82,251, -149,204,148, 67, 46,173,163,172,252,197, 55, 8, 52,187,147, 2,121, 82,112, 43,136,104, 20, 25,149,148,148, 50, 64,169, 10, 99, -100,221,103,212,249,108,114,118, 53,192,154,202,239,197,149,242,133, 97,250,252,193,147,209, 76, 29,136,129, 53, 56, 83, 33,173, -169,175,103, 6, 48,126, 20, 45,124,175, 22,196, 65, 93,140, 21, 78, 7, 88, 29,226,194, 24,151,196,184, 36,194,180, 82,138, 70, - 72,210,136,169, 2,137,243, 51, 52,108,229, 39, 18, 30,194,101, 33,168,215, 97,181, 32, 76, 34,189,181,206, 24,172, 48, 40,161, - 48,149,160,223,155,112,231,147,123, 76, 70, 19,118, 30, 63, 1, 21,114,225,181,155, 52,194, 16,180,160,168, 74,114, 83,178,186, -182, 69,146, 54,253,202,173, 63,192, 56, 8,162,136, 98,114,136,169,140,159,170,164, 41, 58, 12,168, 10, 83,115,217,253,104,219, -107, 87,188, 7,222, 85,114, 22,119,108, 0,171,234,209,187,240, 35,231,178, 44,189,255,189, 46, 92, 82, 42, 2,237,115,232, 3, -188, 22, 70,235, 41,250, 53,240, 98,185,186, 83,247,152,117,231, 57, 40, 11,226,184,105, 24,151, 56,195,255,158, 23,244, 57,128, - 74,206,248,239,211, 86,146, 87, 94,151,196, 28, 39,238,196, 25,103,204, 66,250, 41,103,153,101,231, 49,228,245,105,195,250, 78, - 93, 50, 77,140,115, 51, 77,216,244,237, 69,158,187,123, 1, 50,195,172,120, 91, 55,133,121, 89,255,120,115,182,206,177, 48,126, - 61,228,230, 36, 60,127, 61, 12,252,180,162, 50, 84, 37,243,144, 34,166,214, 63,135,146,146, 80, 9, 66,237, 15,102,122,186,179, - 88, 12,213, 88,180,158,137,115,112,152,197, 78, 93, 45,158,168, 16, 47, 13,148, 95,204,184,158,142, 86,206,135,130,156, 63,125, -201, 51,197,222,157,155, 22,136,179,136, 25,113,230, 79, 80, 95, 96,124, 28,157, 56, 23, 0, 51,152,228,148,198,208,136, 21,105, - 2, 5,150,193,209, 51,198, 39,151,112, 34, 34, 89, 89,161,127,116,204,143,190,251, 35,190,252,206, 23, 81, 58,166,127,124,192, -241,193, 46,105, 28,242, 39,255,240, 31,241,139, 95,220,225,238,253, 15,113,161,100, 48, 58, 70,218,138,108, 0, 97,103,137,170, - 60,160,204, 75,182, 31,223,167,179,190, 68,111, 48, 68, 11, 65,110, 42,174,221,188,201,206,147,123,100,195, 62,195,227, 9,253, -107,215, 89,191,120,153,229,205,101,222,127,255,125,162,180,129, 53,134,103,123, 7,172,109,108,114,114,124, 64,255,201, 67,190, -252, 79,254, 25,223,255,219,111,251, 83, 49,176,212, 72,137,131,136,222,160, 32, 77, 26,140,178, 9,227, 81, 15,137,247,176, 98, - 5, 43, 75,171, 92,216,220,228,240, 96,143,178,172, 48, 69, 78,225,188, 96,199, 73, 1,165,244,204,103,161, 89, 93, 94,102,180, -247, 12,165, 52,229,120,136,156, 12, 9,211, 37,191,175,153,121, 37,197, 47,237,200,207, 40, 61, 92, 29, 96,120,198,115, 50, 79, -203, 67,137, 89, 58,223,116,164, 38,229,130, 88, 72,212,209,153,206,191, 95, 10,137,181, 14, 41, 61, 30,212, 63, 33, 61,215,221, - 90,139, 69, 32, 76,197,179,237,199,236, 63,125, 66, 35,142,216, 88, 95,231,228,248,132,193,160,199,218,198, 26,227,162, 36, 73, - 83, 86,150,150,209, 74,114, 58, 62,166,200, 38,164, 62,174,143,194, 56,218,157,101,164, 12, 25,143, 71, 44, 45,173,224, 92, 69, -101, 45, 91, 23,175, 96, 92,128, 49,142, 32,208,244, 6,167,236,238,238,241,165, 47,127,153,214, 74,204,254,209,144, 73,230,248, -226,151,127,147, 70,179,129, 10,148, 31,139, 22,150,201,100,194,206,147,199,220,186,126, 25,157,180,217,125,182,195, 94,191,207, -112, 48, 70,218, 18,169, 20,163, 73,201,230,133, 54, 81,220, 0, 33, 24,143, 51,154,173, 22, 81, 28, 18, 4, 13,202,124,194,225, -254, 46, 85,149, 83,101,150, 78,186, 10,194,145,143, 39,232, 52,165,177,180, 76, 24, 69,140,122, 39, 84,195,156, 70, 20, 83, 88, - 1, 82, 19,183, 87, 88, 93, 93, 35,144, 37,174,204,124, 40,147,138, 40,203,138, 48, 8, 61,158, 83,105,178,113, 78, 67,199, 96, -253,223,187,114,128, 82, 52, 26,109,122,163, 12,227, 74,150,151,186, 68,162,194, 58, 8,147, 38, 97, 75,145, 23,185,183, 75, 9, - 40, 50, 47,176, 19,198,161,141, 36, 63, 29,240,236,217, 14, 81, 28,211,108, 42,214, 86,154,132,166,162, 28,103, 76,172,227, 20, -139, 22,144,214,118, 25,105, 44,186,126, 8,104, 41,105,200,136,113, 89,160,140,223, 13,143,100,192, 39, 39, 5,141, 68,208, 81, - 2, 43, 11,170,192, 98,116,133, 81,202, 91,216,170,122, 7,138,245, 83,189,217,174,212,249,145,183, 3, 39, 37,216,250, 96,235, -188,120,206,217,218, 31, 44, 36, 96,234, 93,118, 9,149,103, 31, 56,225, 53, 39, 82, 56, 4, 26, 29, 40, 47, 6, 75, 19,194, 48, - 38,138, 35,210,102, 66,156,132,196,145, 38,144, 2, 79,129,119, 4,245, 70,212, 24,131, 12, 66, 68,160,106, 33,175, 4,148,143, -151,182,126, 79,154, 23, 25, 74,131, 51,138,108, 2,247,239, 60, 5, 35,233, 54,189,216,242,249,246, 99,142,118,159, 80, 86, 35, - 86,175, 94,246, 95, 51, 12, 73,219, 29,162, 56, 65, 43,141, 80, 39,136, 64,163,170,128,178,168,136, 26, 9,113,187, 73,208, 72, -252, 69, 95, 5, 40, 25, 96,164, 67, 40,141, 86, 1,129,182,181, 69,145,217,120,220, 89,208, 82, 96,167,241,203,248,200,228,162, -244, 25, 20,254, 33,226,239,111, 29,120, 4,174,148,222,162, 26,106, 61, 47,236,129,246,211, 0, 33,144, 88, 95,220,229,212, 22, - 93, 71,123, 59,127,221,246, 53,184,246,208, 79,173, 92,181,143,221,223, 95,117,179,105,229, 12, 21,251,242, 70,194,175,254,166, - 25,230,110, 97,140, 62, 21,179, 45,238,169,207,162,200,167,242,182,105,100,153,173, 3,109,106,131, 92,173,205,120,217,232,125, - 6,145, 57,131,118,245, 69,124,246,118, 93,204,253, 36,198,212, 24, 94, 63,149,153,254, 64, 94,115,164,168,194,160,214, 55,128, - 40,235,201,147,155, 10, 26, 33, 16,130, 64, 73,180,114,115, 82,159,170, 71, 27,174,246, 62,139, 51,133,218,157,139, 59, 60,187, -115,144,175, 82,175,191,162, 88,191,138,192,243,249, 69,226,101, 74, 71, 94, 80,199,191,138, 74, 54, 63, 72, 56, 6,189, 83, 54, -215, 55, 56,122,124, 15,107,160,217,142, 57,232, 29, 19, 69, 1, 73,179,129, 52,134, 70,156,178,190,113,129,227,254,136,160, 25, - 32,117,201,181, 43,151,249,228,227,247,185,119,239, 51,194, 80, 51, 24, 12, 25, 14,114,118,158, 30,146,234, 54,163, 81, 73,208, -245,126,242, 40,214,228,249,144,229,238, 21, 30,220,255,140, 52, 78,104,139, 22, 61, 42,108,149, 51, 26,158,144, 52, 86, 65, 88, -226,164, 65, 85,250,145, 91,146, 52,200,198, 19,118, 15, 14, 73,226, 6,227,124, 82,239, 2, 29, 7, 7,187, 8, 33, 8, 85, 64, - 81, 20,140, 71, 25,105,115,141,164,209,242,208, 92,227,159, 24, 66,105, 58, 75,203,172,172,174,177,178,188,194,201,193, 14,206, -230,100,249,144,126,127,136, 68, 82, 86, 85, 45,128,116, 40, 37,233, 38, 13,238,125,248, 83,142,159,238, 80, 28,239,209,137, 3, -186, 27,151, 48,166,250,143,136, 22, 92, 12,122,121, 53,101,233,165,182,143,250,129, 38,157,157,241, 15,172,169,144, 82, 97, 42, -139, 84,154,162, 50, 68, 74, 83, 89,135,113,240,244,233, 14, 91, 75,109,122,123, 59,116, 26, 17,195,129,240, 92,241,184,201,193, -176,160, 69, 76,187,213,164,217,110,145,118,154,236, 60,217, 97,144,141, 8, 66,141, 11, 3,194, 70,131, 36,105, 50, 26,142,113, - 42,100,117,163,131,115,150, 60, 31, 81, 20, 57,119,238, 63,100,117,169,203,155,239,124, 25,225, 42,238,220,249,140,145,145,220, -254,194,187,236, 62,223,231,238,221,123,220,186,121,139,180,179,194,193,209, 1,151, 47, 95, 98,255,233, 83, 78,250, 57, 87,174, - 92,167,213,108,240,236,233, 67, 20,150, 11,151,175,176,180,180,132, 16,146, 32, 10, 24,141, 70,152,114,204, 48,243, 4,182,102, - 20, 32,243,146, 82, 86, 8,215,160,202,188, 30, 98,115,115,139,211,147, 99,142, 14, 15,137,162, 49,205,182, 66, 58,199,100, 48, -164,177,212, 37, 74, 83, 38,147, 49,165,144,100,163, 17,163,113, 69,127, 92,178,127,220, 35, 77, 98,226,118,140,195,122,197,184, -149, 20,185,161, 24, 15, 17, 66, 18,167,169, 23,190,230, 99, 36, 62,211,189,118,185, 82, 20, 5,163,225, 0, 29, 70, 20,105, 66, -101, 10,164, 82, 4,177, 65,105,229,247,232,206, 81,150, 37,133,245, 12,116,237, 12, 65, 18,179,188,186,198,233,201, 9,163,209, -152, 70,218, 64, 9,216,126,248,152, 80,105,116,160,201, 42, 67,174, 4,185,242, 10,125, 53, 37, 69, 74, 15,138,210, 58,244, 0, -148,122, 15,218, 80,146,163, 28, 62,221,205,105,197, 13, 54,181,160, 85, 78, 80,129, 99,142,241,246,112, 38,191, 55,149,243,145, -160,195,143,250, 69, 61,206, 92,232,206,252, 20, 72,248,162, 98, 1, 35,252,129,203, 86,179,200, 44, 33,124,177, 11,180, 32, 12, - 21, 81, 20, 16, 39, 49, 73, 35, 34,142, 19,162, 56, 34, 74, 35,226,216,119,167, 50,144, 62,179, 91,207, 41,136, 74,123,111,253, - 52, 27,221,185,169, 63,219, 82,217,138,162,204,189, 88,185, 84,216,202,241,241, 71,159, 50, 26, 78, 88,238, 54, 17,206, 50,232, - 13,105, 45,181,121,184,243,132,231, 79,158,240,201,157,207,184,126,245, 6,155,171,107,232, 32, 36,106, 52, 16, 72, 76,253, 60, -234,245,122,132,113,132,142, 66,116, 28, 19,197,201,108,218,170,181,194,168,169,111,188,172, 21,233,243,176,144,233,116, 12, 64, - 89,111,123, 22,117,103,108,173,163, 42, 61, 47,131, 64,212, 17,217,190, 56,120,235,169, 71,191,234, 32,152,221,148,154,106,158, - 76, 61,226,247,195,148,153,109, 12,113,198,229, 52,237,204,229, 25,177,156,152,177, 81,196, 52,181,243,115,132, 62,194,113,230, -154,114,102, 35,124,134, 92,186, 80,128,237,194, 40,221,214,193, 82,114, 90,176,235,110, 90, 24,236,130, 8,248,236,141,121, 33, -183,110,214,149, 91, 99,234,135, 82, 93,204,173,239,206,109,101,176,198,107, 57,166,197, 94,212, 58,133,243,225, 45,214, 26,191, - 38,170, 65,113, 76, 1,113,117, 81,159,254, 13,245,204, 90,224,196, 92,132,198, 89,177,220,108,180,189, 48,126, 63,255, 49,175, -234,210, 95,134,202, 59,111,217,123, 85,125,127,245, 33, 65,252,202,135,130,197, 67, 71, 54, 30,113,249,173,215,121,182,180,196, -184, 63,164,159,231, 84,121,238,119,113, 90, 19, 80, 34, 84,136, 14,155,108,239,238,115,245,246, 10,101,101, 56,220,125,204,141, -235,215, 49,166,162,223, 31,242,235, 95,255,117,190,251,237, 31,210,105,109, 50, 62,205, 25, 13,199, 52,172, 87,139,142, 70, 61, -198,147, 33,249,184,143,194,103,195,223,255,228, 83,154,237,148, 56, 54, 52,218, 41,198,150,124,255,135,127, 67,218,217, 96,243, -210, 69,214, 86, 55, 56, 81, 39, 68, 81, 66, 24, 68,156,246,251,252,103,255,249, 63,227,191,254,255,252, 75, 78, 79,143, 25, 13, - 7,132,129,166, 40,115,170,202, 1,154, 56,136,216,188,112,145,231,187,207,176,117,184,142, 84, 33, 66, 5,156,246,250, 88, 83, - 50,234,239,163,117,137,149, 30, 86, 96, 77,173,120, 81, 14,235, 12,141, 52, 37, 9, 52,131,131,125,204,112, 64,224, 44, 54,155, -208, 59, 57,193, 44, 64,103,126,105, 40,193, 11, 97,193,245,147, 97, 97,167,126,126,253,114,126, 39,117,230,164,237, 28, 56,131, -116, 22, 45, 52,141, 70, 66, 24, 70, 12,198,185,231,238,135, 33,149,243, 29,212,233, 73,143, 70,179,193,131, 7,247,113,197,132, -213,213, 85,150,215, 54, 40, 12,124,122,231, 1, 84, 22, 29,197, 4, 81,194, 36, 43,216,191,251,144,118,183, 75, 51, 8, 73,211, -132,149,213, 85,210,164,193,112, 48, 98,148, 85,172,108, 46, 81, 22, 5,131, 65, 15, 29, 68,116,210, 38, 69,105, 72, 91, 13, 70, -165,101,208, 27,176,118,233, 38,239,126,227,247, 64, 72,130,230, 50, 46,136,105,183, 91,228,214,114,225,234,117,198,227,140,149, -245, 11,244,250, 3, 14,142,143, 89, 91, 89,162,180,130, 7,143, 31,243,149, 47, 47, 51,202, 43,250,189, 62,157,181,117,150, 87, - 47, 32,195, 30, 75,221, 22,137, 22, 80,140,177,229, 4, 35, 13, 70, 57,208, 33,147,178, 68, 7, 33,205,102,135,251, 15, 30,209, -234,116, 9,198, 99, 63,242,140, 99, 76,150,161,162,136,238,133,139,196,205, 38,207, 31, 61, 97,124,116,192,120, 52,193,148, 57, - 31,125,248,115,190,242,165, 47,160, 82, 63, 42, 21,206,119,196,214, 26,202,162, 32,199,144, 54,155,254,226, 37,180,247,144, 11, -234,216, 93,193,100, 52, 68,151, 37, 89,154,226, 76, 78,179,213,172,197,171, 22,155,103,200,180,129,114, 16, 40, 47,242,170,242, - 10, 83, 20, 52,151,151, 89, 91,223, 34,234, 13, 8,195,128,213,110,151,181,149, 46,186, 82, 12,141,101, 52, 26,147,105,205, 4, -137,113,165,143, 22,117, 62, 22,216, 88, 75,172, 5, 97, 32,125, 46,189,148, 36,165,143, 78, 61, 42,225,135, 79, 39,252,206,237, -132,200, 20,232,210,239,133, 69, 85,235, 52,172, 64,214, 28,243,169,240,118,234,160,153,141, 75, 23,217, 72, 82,162,235,137,144, -180, 2,225, 36,194, 42,148, 45, 61,200,198,121, 63,125, 24,248, 16,167, 56, 8,136,226,144, 56,209, 68,177, 34,138, 37, 97, 44, -137, 66, 65, 20,105, 15,243, 82,254,160, 33,213, 84,124,236,167, 78,174,246, 61,171,122,143, 46,240, 56, 86,191, 39, 45, 81, 72, -164, 9,248,217,123, 31, 49,232,143, 9,180,246,241,161,129, 34, 43, 42, 66, 44, 95,250,202,187,124,114,239, 30,149,117, 60,158, - 84,220,184,117,155, 40,137,145, 81, 4, 22,132, 86, 4, 97, 72, 81,248,245, 81,144, 36,168, 40, 34,105, 36,160,235,144, 21,173, - 49,218, 80, 85,245,235,198,160,181, 94,128, 61,205, 93, 75, 65, 93,164,202,202, 7,163,212,126,183,186, 0,214,235, 48,225,187, -122,173,228,140,231, 62,181,171,170, 64,123, 50,233,108, 10,238,230, 73,160, 44,230, 59,112,102,151, 62, 77,174,155,114, 82,168, -173,210,179,209,252,185,209,251,171,136,110,231, 27,135, 23,197,110, 62, 24,224, 76,183,109, 23, 82,212,172,245, 29,117,101, 16, -162,244, 26,136, 5,229,188, 59,167, 51,152,119,231,117, 81, 55,115, 75, 32,245,116,209,152, 10,103, 12,198, 84,190,160, 87, 21, -166, 42,113, 85,229,175,125,216,154,230, 58,229, 47,216,217, 4, 64, 72, 80,181,214, 65, 9,225, 5,136, 74,212, 98,196,105, 81, -175,187,242, 41, 11, 88,158,233,190, 95,236,136,231, 99,122, 94,180,162,157,243,148,159,217, 80, 76, 79, 50,128, 19,238,151,198, -212, 9,241,170,130,206, 47,133,231,159,183, 62, 8, 1,101,145,163,164, 98,125,125,147,201,112, 64,156,229,244,198, 71,236,239, - 61, 7, 29,243,193, 47,126,192,181, 75, 87, 25, 76, 96,125,235, 34,227, 73,206,201,222, 33, 46,159,208,108,166, 52, 5, 84,197, -132,189,103,125,222,184,245, 6,151, 54,183,248,206, 95,125,143, 32, 40,125,220,233,120,204,202, 70,135, 36,109,113,120,184,207, -133,205, 77,142,247, 79, 89,233,118, 48,194,144,196, 9,163,188, 79, 16, 69,196,137, 87,169, 74, 36,207,119,118, 57, 58, 62,226, - 31,254,195, 63,230, 47,190,249, 77, 42, 99,248,203,111,125,139,102,171,205,243,231,207,168,172,167, 5,205,125, 31,138, 48, 73, -185,112,105,139,127,253,223,253,171, 90, 83,160, 80,129,143, 93,109,181, 90,180, 91, 9,217,222, 93,130,192,208, 94,110, 83,238, -142,188,223,209,249,145, 23, 50, 96,237,194, 6,107,107,171, 72,103,104, 53, 35, 42, 49, 33, 10, 52,167,163, 30, 85,104,124,214, -240, 52,221,232, 87,140, 21,156,133, 23,138,179, 73,247, 47,211, 85, 44,138, 67,166,153,192,181,153, 24,101, 45,167,199, 71,236, -236, 60,245, 99,193, 32,160, 40,161,179,180,204,214,165, 75,188,241,214,219, 62,255, 57,207,168,138,156,221,131, 19,174, 95,191, -198,202,214, 5,250,189, 19,150,186, 29,254,249, 63,249, 83,170,202,178,189,189,195, 40,115,132,113,147,166,136, 40, 75, 75, 81, - 58, 86,214,151,105,117,214,121,246,100,155,211,147, 99, 90,157, 46, 40, 73, 16,199,172, 55, 82,138,124,130,196,178, 20,197,228, -121,193,147,157,103,172,172,174,145,180,187,244,199, 57, 65,224, 15, 81,183,223,124,139,211,211, 83,150,150,186, 76, 70, 99,130, - 40,101,169,219,101, 37,203, 57, 62, 62, 66, 6, 1, 95,120,231, 29,154,205, 38, 59,207,247,217,220,218,226,100, 48,100,148,229, -180, 27, 41,101, 81,208, 27, 14,233, 94,186, 72,162, 59,148,147, 17,227, 81,143,192, 26,132,179, 24, 43, 40,138,146, 40, 86,124, -241,221, 47,123,244,105, 81, 82, 20,165, 47, 70, 74, 83, 24, 67, 8,132, 73,131,229,245, 77,156,211, 4,199,254,112,230,172,225, -251,127,251, 93,222,124,253, 38,151, 46,108,208,237, 6, 96,253, 46,174,176, 57,217,184,162, 52, 21,221,181,245, 90,147, 35, 8, -194,152,178, 40,235,100,185, 17,167,207,159,161,176, 44,117,219,132,129,198,153,146,170,168,144, 74, 99, 6, 6, 25, 68, 68,141, - 20,146, 8, 59, 26, 99,198, 35,170,210,162,155, 45, 26, 34,192, 85, 37,175,191,246, 26,223,248,250,215,248,151,127,254, 45,159, -253, 13,100,198, 48,112,142,134,214, 84,194,225,140, 35,116, 94,124,133, 16, 4,129,196, 85,254,241,212,144,142,134, 18,244,173, - 96, 55,119,252,244,193, 9,191,123,179,141,214, 32, 75,131,148, 37,170, 18, 4, 90,225,106,186,227,153, 53,158,245, 9,133, 98, -166,243,144,136,160, 46,100, 90,161,132, 67, 82,121,244, 44, 6,237, 74,168, 25, 16, 74,130, 86,138, 56, 10,136, 2, 47,254, 10, - 67, 73, 24, 10,130,208,161,180, 65, 40,239,123, 23, 74,227,164, 67,105,129,212,210, 11,249,166,231, 11, 37,253,161,193,249,233, -128,197, 97,156,193, 84, 21,210,249,245,217, 79,127,242, 1,207,118, 14,232,118,150,137,227,144,202,148, 24, 87,146, 52, 35, 90, -221, 6, 50,208,124,125,233,171,252,224,123, 63, 96,116,210, 35, 31, 79, 72,211, 20, 17,104,202,162, 34,140,252,152,221, 58,139, - 12, 52,113,179, 65,208,108, 16,165, 49,165,117, 62, 75, 92,213, 25,241,211,155,241,169,105, 8, 47,160,243,156,145,250, 80, 34, -124,188,173,150, 30,221,172,165,196, 5,218,227,122,181, 34,168,129, 53, 94,220, 42,209,218, 23,118,169, 37, 82,123,205,140, 82, - 98, 38,138, 22,152,185,152,122,186,176, 63,207,131, 19, 11, 81,219,115, 5,183, 31,199,159, 19, 90,191,106, 10,248,170,105,160, -155, 42,212,167,187,252,197,127, 59,167, 13,246, 88, 90,129, 16, 85,125, 40,147, 62,177,212,169,133, 32,178, 41, 3,127,225, 96, - 48, 61, 36,212,226, 66, 99, 13, 24, 55, 27,181, 27, 83,249,110,221,248,195,156,169, 12,148, 37,206,150, 62, 54, 24, 55, 59, 40, -201, 25, 96,199,206,173,236,210,175, 2, 2,237, 51,234, 67, 45, 9, 3, 93, 3,189,106,161,196,244,162, 43,207,248,201, 95,236, -162,207,236,221, 95,209, 77,191,204,143,126,102,215, 80,255,209, 94,149,108,243, 50, 47,251, 47, 43,220,191,108,116, 47,234,108, -237,254,112,128,142, 98, 63, 66, 20,150,245,110,202,195,187,119,249, 71,255,249, 63, 39, 54, 99,170,113,134, 29,143, 89,238, 54, -185,191,253,132,219, 87, 46,114,255,211, 79,217,218,186, 72,144,196, 40,229, 24,244, 78,120,120,247, 14, 31, 72, 77,153,151, 24, - 10,164,128,162,200, 57,220, 63, 34, 78, 37,198, 90,222,121,251, 58,249,112,140,138, 82,134, 89,129, 10, 19,214,150,150, 40, 77, -197,165,203,215,232,247, 74, 46,110,172,115, 55, 73,168,218, 29,172,245, 33, 45,111,189,253, 5,218,173, 14,161,214,220,185,123, -159,202, 88, 12, 83,251,136, 36,140, 34,190,240,246, 59, 36, 73,196,195,251,159, 81, 7,224,145, 38, 13, 47,252,210,138, 72, 75, -250,131, 35,132,203, 57, 29, 15,169,240,136, 73,132,195, 42, 65, 37, 4,237,110,155,193,224,148,163,195, 61,180,114, 52,151, 91, -180,187, 45,118, 75, 73, 89, 12,126,245,238,252,204,201, 88,188,152,170,244, 57,211,152,243,227, 51, 91, 91,121,138,124,196, 47, -222,251, 33,119,239,124,198,229, 43,151,136,226,132,202, 74,118,247,158, 49,202, 38,164,173, 22,171, 43,171,100,163, 33,163,222, - 41, 23,182, 46,210, 93,187,192,243,253, 67, 58,205,152, 43, 23, 47, 16, 74, 11,213,152,165, 36, 96,119,247, 0,235,250,188,241, -214,155, 52, 90, 45,172,117, 68,113,196,209,225, 9, 56, 71,146, 68,196, 81, 72, 24,199, 52, 26, 41,197,100, 76, 26, 74,138, 60, - 7,103, 72,226,144,235,215,174,121,114, 83,145, 19, 5,138,108,212, 67,235, 0, 97, 43, 4,142, 44,203,232, 46,117,177, 78,240, -124,255,128, 36,142,184,120,249, 34,195,222, 9, 81,148,178,188,178,130,117,142, 86,167,203,181, 27, 55,249,171,191,248,119,148, -197,132, 86,187, 77,254,188, 32,203, 11,110, 94,191, 74,103,105,149,160,145, 80,101, 99, 79, 60, 19, 62, 97, 48,136, 82,132,130, -170,202, 17, 82, 51,232, 15, 72,148, 66,100, 25, 50, 10,177,149, 69, 37, 17, 73, 35,101,121,165, 75, 20, 5, 52,210,152,178, 40, - 88,238, 52,176, 56, 14, 79, 6,140,243,130,141,181, 53, 2, 21, 34,180, 35,159,140,233,198, 77,156, 21,168, 40, 36,108, 8,168, - 10,130, 34,163,152, 76, 88,106,183, 24, 13,250, 12, 78, 79, 72, 67,141, 41, 27,200, 88, 82,228, 37, 86,106,164,142, 48, 69, 73, -160,106,145,106,160,208,173, 38,167,123, 71,148, 90,179,122,229, 42, 54,159,160,142,246,185,120,233, 2,171, 43,203, 60, 59,221, - 70, 1, 74, 43,242,162, 34,142, 21, 85, 29,233,156, 57, 75, 36, 5,165, 53,232, 64, 81,225,188, 22,160,128, 68, 10,148,147,228, - 88,246,134,134, 79, 30, 13,248,226,141,200, 59, 35,148, 65, 41, 79,217,242,151,126, 89,139,178,228,220, 98, 59,203, 26,156,107, -132,130, 40,156, 9,185, 2, 25,162,133, 67, 11,175, 88,199, 85,179,113,168, 18, 16,135,154, 64,123,171,145, 79, 29,147,168, 0, -148,118, 62,107, 93,129,172,187,107,111,113,211, 80, 3, 89,230,250,158, 26,111, 59, 77, 71, 67, 32,241,194,192,191,249,171,239, -113,116, 48,161,209,232,250, 36, 59,103,152,100, 19, 15,183, 17,138, 70,171,193,202,198, 58,135, 7, 71,188,254,198,235, 28, 31, -246,106, 6,187, 69, 7, 33,147,194,160,162,128,172,204,209, 90, 81,148, 37, 73,167, 77,212,105,163,194, 16, 91, 86, 53,217, 77, - 82, 77, 11,113,253, 50, 8,245, 44,197,110,234, 80,177,245, 30, 70, 27,139,214,138, 56, 8,192, 57,116, 37,107,141,154,156,119, -136,117,234,154, 84, 26,165,213, 76,193,173,180,242,123,250,217,200,219,205,252,247,240, 43,164, 46, 78, 39,200, 11, 32, 26,225, -206,174,114, 95, 54,249,155, 9,216,236, 66,136,203,172,171, 92, 24,199,187,249,132,112,234,103,119,214, 97,141, 31,149,207,103, -246, 94,235, 83,115,123,153, 99,225,235,143,159, 9,224,108,237, 18, 48,184, 90, 4,103,173,127,221, 84,181, 14,200,120,164,171, - 53,254,117, 83,143,226, 49,149,183, 87,138,249,130, 97,102, 29,159, 77, 4,188,232, 50,208,146, 32,144,196,129, 95, 7,133,245, - 1, 85,171,250, 1,231,189,110,231,130, 91, 22, 81,180, 51,117,252,124, 76,255,226,251,120,233, 56,229,204,222,194,186,153,183, -206,185, 95,214,113,139,115, 19,130, 23, 71,239,191,108,143,207,185,132,175,222,160,207,234,198, 6,247, 62,253, 0, 97, 75,150, -210,136,103, 59,199,156,158, 14, 56, 26,101,184,241,152, 36,214, 28,239, 63, 33, 82,150,195,253, 61, 86,150, 55,216,218,186,130, - 17,142,131,221, 93,150,151,154,228,227, 1,182, 52,228,249,132,102, 43,198,153,156, 72,107,164, 80,100,147, 18,165, 75,126,254, -139,159,243,238, 23,223,225,253, 79,238,226, 84, 74,233, 34, 94,187,241, 14,223,249,238, 95,176,188,186,238,125,194,195, 19,254, -244, 79,254, 49,159,222,187,203,221,187,159,113,243,214, 13,142, 15,143, 16,198,241,181,175,126,149,247,222,251,126,125, 0, 18, - 8, 97, 48,206,114,237,250, 85, 94,127,253, 54,166, 42,216,125,246,196, 23, 21, 1,227,209, 8, 41, 99, 34,173,104,198, 17,119, -142,246,161, 97, 57, 25,141, 40, 17, 8, 21, 34,176, 88,109,145, 56,222,184,253, 26,189,195, 67,242,193,128, 73,191,135,106, 4, - 68,233, 50,102, 80,242, 63,218,127,103, 60,157,162,142,228,180,152, 34,103, 50,236,129,201,201,199, 3, 86, 87,186,180, 91, 75, -220,123,188,195,127,245,255,254,255,178,186,177,206,210, 82,135,241,176,207,209,222,115, 94,187,253, 26,197,168,143,201,199, 28, - 12,142,233,247,142,105, 55,155, 68, 58, 32,142, 67,154,169,230,217,179,231,140,122,171,104, 81,177,191,127,232,199,147, 66,144, - 38, 1, 75,157, 22, 97, 26, 18,198, 33, 91,155,107,216, 34,231,244, 96,159, 65, 85, 80, 20, 5,217,100,140, 14, 34,111,253, 75, - 98,122, 7,187,132, 90, 18, 53,218, 56,103,104, 70, 33,121,158,209, 59,173,104,180,218, 52,219, 13,162, 32, 64, 58,203,250,234, - 42,237, 86,147,141,245, 85,126,244,163, 31,115,218,239, 35,181,230,246, 27, 95, 96, 50,158,112,229,218, 85,138,178, 32,155,140, -120,248,248, 17,113,160,216, 92, 95, 65, 43,137, 51,150, 48, 72,137,210, 6, 58, 12, 60, 88, 40, 9, 65,104, 68, 24, 81, 77, 38, -152,178,244, 57,227, 85,137, 16, 41, 42,212, 52, 59, 77,162, 72, 83,100, 99, 6,167,199, 76, 38, 57, 78, 64,119,105,141, 70,179, - 69,220, 88, 34, 76, 26, 68, 74,209,172, 42,191,134,146, 33,194,121,191,178, 19, 80, 85, 21, 75, 75, 93,218,141,148,245,213, 85, -134,131, 1,163, 81,143,124, 28, 83, 21, 3,116, 16,208,236, 46, 81, 21, 19,164,138,177,147, 9,227,211, 99,100, 28, 17,183, 90, - 52, 86, 87,232, 92,104, 32,157,162, 28,156,178, 30, 74,222,253,242,187,124,251,135, 63,229,254,147,231,148,214,160, 48,116,219, - 41,121,158, 97, 45, 4, 90, 83, 9, 5,198, 32,169, 72, 67,141, 82, 6,172, 67, 75, 69,130, 32,197,171,226,157, 20,236, 13, 12, - 15,183,143,185,125,125,131, 64, 43, 74, 81,162,107,151,132,146, 26, 91, 11,225,165,208,179, 73,228,244,129, 39,149,170, 65, 44, -114,150,235, 29, 77, 17,187,210,214,241,208,166, 78,127, 51, 4,181,194, 56,168,173, 70, 74, 75,212, 20,129, 26, 42, 84, 52,199, - 23,187,233, 46, 88,168,218, 70, 55,207, 6,151,106,161,219,172,139,135, 34,228,199, 63,252, 41,159,252,252, 51, 46,223,120, 19, -173, 67,140, 53,104, 21, 80, 26, 67, 81, 20, 4, 58,194, 58,207, 8, 88,221, 88, 99,231,249, 62, 50, 10,104,116,218, 76,178,156, -142,246,145,169, 42,140,252,193, 70, 43,168, 12,173,165, 37,226,102,115,182,151,158,238,203,167, 5, 93,107,133, 49, 10,231,206, - 22,245,169,247, 31, 32,212, 22, 27, 42,112, 26, 33, 29,101, 41,124,138,155,131,160, 70, 55,107,223, 37,122,237,192, 84,228,166, - 68,173, 13,154, 22, 77,137,116, 11, 45,177,251,149,182,121,231,180, 83, 98,158, 11,242, 42, 1,239, 34, 94,125,241, 99, 22, 10, -250,226, 78,125,246,117,236,180,203,174, 85,230,214, 46,152,227,170, 90,175, 1, 78,201, 51,121,238,211,251,202,213,170,118,107, -231, 47,125,241,174, 51,233,205,124,252, 62, 45,254,211, 3,128,173, 42, 31,172,229, 92,205, 8,240,135,186,153,133,109,161, 83, -151,194,239,208,163, 80, 19,133,190,160,123, 27,164, 69, 75,229,247, 80,194, 45,176,221, 95, 24,193,159,229,175,207, 10,171,112, - 47,121,255,203,133,115,179, 95, 94,248,157,150,125, 73,170,205,175,134, 2, 20,159,187,199,255,124, 60,169,227,248,228,132,141, -245, 53,150,150,151, 57, 26,247, 24,244,251,184,178,226,233,211,167, 92,188,113, 19, 57,238,115,180,179, 67, 18, 8,118,119,247, - 89,187,113,139, 52, 89,226,232,232,152,225,120, 88, 51,152, 53,141, 70, 76,145,229, 8,153,226,180, 38,155, 12,104,164, 41, 17, -146, 70,107,133,206,114,131,189,131,231,108,239, 60,225,237, 47,189,201,103,247,247, 24, 77, 44, 65,212,226,194,229,155,252,232, -199,239,113,249,194, 69,108,105,185,119,247, 30,203, 27,235,124,252,201, 71,188,246,250, 27,180, 90, 45,180, 84, 28, 28,236, 49, - 24,143,177, 66,205, 84,156, 73, 24,114, 97,115,131,245,245, 53,142, 14,247,201,179, 33, 96,105, 53,154, 40, 29,162,133, 36,141, - 35,178, 81,159, 34,207,232,219,146, 18,225,243,147,157, 66, 56, 9,210, 17,201,144,119,223,122,155, 39,247, 31, 64, 94,160,172, -165,119,114, 76,107,181, 69, 85,169,255, 17,107,186, 59, 23,147,235, 61, 27, 85, 89, 96,138,140,229, 78,147,241,112,192,221,207, -238, 16, 4, 17,221,181, 13,222,184,125,145, 91, 55,174,114,122,116, 72, 43,142,184,245,181, 95,163, 28,157,112,120,124,204,112, - 52,162,179,212, 37,138, 66,186,203,171,140, 70, 19, 6,217,144, 70, 34,104, 54, 36,167,199,207,201,198, 94,188, 37,144, 44, 45, - 45, 17, 71,138, 36,242, 17,187, 23, 46,110,250,241,160,176,116,154, 41,154,138,209,200,213, 99,232, 33,253, 94,143,178,213,160, -202, 39,148, 74, 98,138, 28, 99, 32,105, 52, 88,219,220,100,239,240,128,113, 54,161,217,110, 1,117,231, 34, 5,101,145,209,110, - 54,121,231,157,183,249,203,111,126, 11, 7,108, 93,184,194,165,102,147, 50,159,208, 78, 26, 44,119, 90, 44,183, 19,132,205,137, -146,148,188,168,216, 63, 56,226,194,133, 54, 82, 5, 53,198, 83, 80,148, 57, 89, 89, 16, 42, 77,163,219,229,232,249, 14,227,241, -152,102,183,227,225, 19,105, 2,161, 66,137,136,245,181,101, 26, 73,130,177,130,135,219, 79,107,205, 72, 74, 86, 90,140,203, 16, - 66, 33, 3, 77,216,236, 80, 21, 69,141,133,246,150,174, 48, 12,200,179, 9, 85, 94, 96, 77, 69,187,149, 34,241,135, 15, 29, 8, - 4,113,205, 54, 87,184, 42,247, 52, 44, 99,137,163, 16, 25,197,158,103,174, 67,108,233,208,205, 38,101, 57,225,181, 55, 94,231, -143,255,254,127,194,227,103,207,153, 20, 57,217, 96,136,150,146,147,145, 37,210,202,199, 10,215,158,237, 73, 81, 17, 42,233, 5, -110,206,163, 94, 35, 33,104, 82, 50,169, 28,198, 73, 10, 17,112,114,154,243,248,241, 1,183,111,111,160,165,166, 50, 22, 37, 42, -180,170,230,129, 82,138, 89,118, 4,117,242,159, 80,218,119,213,117,140,171, 20,222, 70,148, 68, 1, 97, 32,102, 22, 44, 91,149, -216,170, 32, 84,130, 40,208,190, 43, 85, 18, 33,157, 47,234,161, 70, 69, 33, 50, 8, 9,227, 8,165, 3,175,115,145,129, 15,131, - 49,245, 10, 75, 56,132,174,169,138,178,206,195,168,167, 5,223,251,206,119,217,254,236, 9, 43,157, 53,191,105,214,146, 64, 11, -138, 34, 35,138, 21,166, 42,145,194, 34,177,228,121,134,142, 19, 54, 46,109,209, 27,222,247, 59,116,173, 9,164, 36, 74, 82,138, - 40,242,142, 38, 28, 42,208,164,205, 38,141, 78, 27,165,213, 12,160, 98, 42,223,177, 7,129,158,121,158,167,215,233,233, 30,119, -218, 25, 2,136,208,250,162,239,141,110, 72, 41,252, 72,185,182, 27, 6,129,158, 69,171,106,173,231, 35,254, 26, 7, 45,101,125, -128,177,158,243,143,112, 51,110,191,120,229,220,238, 92,193, 22,231,220, 86,191,132,147,113,102,135,254,194, 40,158,179,227,251, -105,188,233, 66,109,242,138,116, 59,223, 18,224,237,104,194,152,179, 2, 54,103,107, 66,225, 52, 80,104, 94,224,103, 35,246,170, -238,198,157,183,223,250, 32,156,233, 1,162,222,151, 91, 51,155, 44, 76,187,123, 83, 25,202,178,162, 44, 61,234, 91,214,194, 56, -165, 60,220, 39,172,221, 5,186,190,175, 45,248,157,186, 82,117, 84,229,185, 52,180,105,152,188, 88,160,206,157, 9,116, 65,156, -217,113,139,115,129, 47,139, 59,245,133,251,205,175,134,237, 43,196, 87,231,146,217,120, 9, 32,224,243,199,237,226,115, 14, 5, -150, 44, 27, 99,170,138,141,205, 75,140,135, 3,134,123,143,145, 85,197,253,247,127,206,141,127,254, 95,240,248,199,223, 69,217, -146,201,160,226,242,230, 21,158, 29,157,242,251,191,243, 5, 6,123, 59, 24,161,176, 74, 82,149, 21,191,241, 27, 95,229,199,127, -251,183, 20,165, 38,140,187, 60,127,254,140,180,153, 66, 81, 50,113, 6, 55, 24,243,133,119,191,198,183,255,230,219,228, 54,224, -214,213, 27, 60,124,178,199,247,190,253,151,124,229,203, 95,230,218,230, 22,191,248,233, 79,249,254,253, 31, 48, 44, 11, 38, 31, - 58,214,183, 46,210, 94, 90, 38, 27, 13,121,253,141, 91,124,231,187,127, 67, 97, 42,156, 12,144,194, 17,227,184,208,214,132,118, - 66,163,217,224, 47,191,245, 77,160, 68, 41,197,106, 51, 38, 10, 91, 44, 95,121,147,183,222,126,135,163,199, 63, 33,112,134, 97, -169, 57, 24, 89,223, 57,184,137, 23, 5,161,105, 54, 86,184,178,117,137,111,125,247,187,140,178,138, 50, 47, 56,234,245,105,244, -115, 8,194, 87, 90, 14,207,167,172,189,188, 76,251, 7,166, 16,226,172, 40, 67,204,189,163, 78,204, 87,105, 30, 50,226,234, 68, - 56, 67, 41, 36,147,170, 64,138,130, 86, 8,187, 39, 37, 59, 7, 19,108,163,100,101,228,248, 79,255,201, 63,102,127,239,144,205, -110,151,110,224,120,244,240, 83,170,162,226,163, 15, 62,228,245, 47,125,137,214,114, 23,161, 3,138,170,226,249,147, 39,236,237, - 60,165,172,134, 52,147, 38,101, 54,164,223,239, 49,153,100, 68,113, 64,105, 70,116,219, 93,148,150, 52, 26, 77, 66, 29, 80,102, - 57,161,116, 88, 81, 34,165, 33, 73, 19,116, 20,114,114,122,194,209,209,152,103,207, 78, 88, 89, 90, 66, 10,193,225,241,177,191, -167, 78, 14,168,170, 9,203,171,235,148,198, 17, 41, 77, 49,201, 24, 22, 5,194,149, 52,211,136, 64, 24, 54, 55,214,120,243,157, -183,105,180,187, 4, 74,248,209,120,183, 77, 40, 21, 39, 71,123, 28, 29,101,172,175, 47, 17,167, 77,116, 36, 8,123, 19,146,102, -138, 19,206,223, 71,214,121, 79,191, 41, 40,198, 67,172,131,102,218,100,111,255, 57, 81, 18,250, 46,169,118,213,234, 32, 36,105, - 47, 97,117,202,157,187, 15, 24,151, 22,113, 58, 32, 31,246, 88, 95, 95,161,213,110,249, 61,106, 33,169,202, 33, 65, 20, 67,145, -205, 46, 46, 90, 75, 38,101,238,247,250,166,100,146, 21, 68, 73,131, 70,163,225, 71,214,129,166, 48, 37,142, 18, 33,193,102, 37, - 70,104,143,113, 45,114,100,172, 16,174,162,154,140,253, 78, 85,105, 26,145,228,183,191,242, 69,182,239,127,131,239,252,228,167, - 28, 71, 13,238, 62,126,142,171, 28, 65, 40,176,174,196, 73, 65,133,100, 82,130,116,190,219,141,235,136,222,208, 65, 44, 36, 90, - 24, 63,213,145, 96,156,228,228, 56,231,254,103,123,188,254,198,229,217,184,183, 40, 74, 63,221,192,161,148,239,126, 28, 21, 74, -106, 28, 83, 69,181,158,221,148,210,132,113, 76, 16,121, 59,150,214,194, 19,230,130, 8,103, 42,148,112,168, 58,164, 68, 43,233, -139,172,242,221,186,212,254,254, 86, 58, 64, 41,141, 12, 66,111,205,180,162, 86, 77, 27,112, 22, 77,224,239, 43,107,124,234, 89, -169,249,214,191,249, 75,158,109, 63,163, 42, 43,111, 75,139, 99,132,130, 48,116, 4,202,122, 70, 62,126,228,235,108, 70,158,157, - 82,212,161, 45, 91,151, 47,251,180,180,201, 24, 81,228,126,191,173, 21, 42,138, 16,194, 55, 31, 81,146, 16, 52, 18,207, 33,176, - 32,148,243,170,244,170,196, 24, 73, 16, 8,140,149,216,186, 83,159, 42,175,167, 93,171,176,142, 50,112, 4,198,167, 6,218, 0, - 16, 21,202,213,121, 12, 90, 17,199,154, 32,210,168, 80, 35,181,242,254,117,165,208, 82,207,133,110,202, 59, 18, 28,198, 63,249, -235, 28, 10, 87,139, 5,221,180,177,156, 1, 92, 22, 65, 50,115,197,187,199, 65,251,245,197, 92,144,187,192, 63,153,142,210, 63, - 71,232,235, 22, 97, 94,204,196, 70, 94,241,110,124, 81,157,171,225,109,221, 57,251,238, 27,165,230,215,190,105, 30,186,173, 11, -120, 93,212,167,227,120,103,189, 78,196,204,186,246,106,238, 75,159,213,197,233, 46,222,107,104,166, 24,227,178,244,220,130,162, - 44,168, 42,131, 53,254,194,169,132, 32,144,117,184,149,146, 53, 90,121,154,154,103,209,211, 4,172,105, 16,139, 60,211, 9,187, -217, 73,242,124, 55,254,170,226,122,230, 64, 48,165,243,188,160, 12,116, 24,241,162,192,225,151, 41,233,207,203,229, 95,222,217, -203,207,107,215,177,206,210,239,247,216,220,218,226,206,103, 31,209,233,164, 28, 29,159, 34, 38, 67,142,159,239,178,178,117,137, -222,211,156,178, 24,242,224,209, 93,190,254,141,223,224,223,254,187,127,203,229,213, 54,175,191,241, 22,185,117,252,248,189,247, - 48,227, 83,146, 52,101,103,127,192,229,173, 46,110,251, 33,215,111,221,224,227,207, 62,101, 69, 71, 60,122,246,140, 48, 10,249, -173,223,248, 45,190,255,227,247, 72,219, 75, 4,161, 96, 99, 99,137, 15, 63,126,159, 48,138,120,227, 75, 95,226,234,228, 54,255, -250,207,255, 45, 34,140,144, 74,113,249,242, 21,170,108,194,112, 52,228,241,211,109,255,112, 51,149,239, 10, 2, 72,219, 29, 54, -183, 46,210, 59,220,227,195,247,126,232,189,182, 65, 64, 86,248,189,239,218,202, 26, 23,183,214,249,222, 15, 31,211,108,182, 56, - 58,238, 51, 41,188,151, 91, 42,229,195, 23,132,230,242,214, 37, 92, 89,242,116,251, 49,206, 24,142,123,167,132,105,130, 83,129, - 63,113,202, 23, 73, 77,127,215, 29,251,223, 57,236, 5,137, 53, 26,167, 3, 90,237, 85, 86,215, 55, 24, 31, 62, 71, 9, 63,134, -106,183,219,252,175,254,203,255, 5, 7, 39, 71,236,237,237,161, 75,195, 68,150,172, 92,190,232, 61,248, 31,191, 79, 26,133,168, -178,226,100,255,136,157,103, 59,228,121, 65,137, 97,255,176,199,104,180,207, 91,239,124, 25,169, 29, 90,197, 60,120,120,151, 94, -239,152, 27, 55,110,176, 62,206,184,114,237, 58,227,193,169, 23,230, 37, 49,101, 85, 49,201, 11,130, 48, 37,212,154,238,242, 18, -131,225,128,143,159,125,204, 27,111,190,197,201,225, 17,130,146, 60,243,225, 29,206, 20,140, 71, 67,210,102,155,170, 44, 9,116, - 64,101,124,135, 55, 49, 25,205, 36, 70, 40,205,213,203, 87,216, 61, 60,166,202,114, 2, 41,209,210,210,109, 55,217, 92,189,205, -227,237, 71,236, 31,157,130,142, 41, 10,195,112, 60,102,146,101,180, 91, 13,239, 41,119, 37,224,136,181, 36,136, 3,202, 73,142, - 84,138,110,167, 67, 62,153,248,145, 92,146, 82,230, 57,147,241, 24, 99,125,108,107,167,219,225,227, 79, 62, 37,137, 3, 86, 91, - 9,161, 22, 52,210,168, 22,116,105, 63, 10,204,199,148,166, 36, 12, 67,172, 49, 68, 65,200, 68, 7, 12, 70,125, 78,143, 79,102, -196,191, 34,175,232,245,188, 37,112,101,181,203, 36,203,144, 74, 32,195,168,102,248,199, 84,101,142, 49,134, 32, 44,145,166, 36, - 27, 78,136,116,200,120,216,167,219, 72,248,189,223,248, 42,159,222,187,203, 94,111,215,167,166,105, 77,110, 44,129,246,187,103, - 21, 4, 12, 70, 5, 50, 47, 73,147,128,202, 81, 79, 20, 65, 11,133, 42,203,218,210,104,189,167, 94, 8,134,131,156, 59,119, 30, -115,235,245,139,168, 78,138,196, 33,170,186, 43, 52, 10, 53,219, 41,218,218,255,124, 14, 67, 42, 61,110, 88,232, 0,166, 59, 97, - 41, 61,181,218,122, 92,114, 16, 42,130,200, 31,158, 4,198,135, 86,105,233, 19,215,116, 0,210,239,208,125,196,149,170, 3,178, - 36, 86, 75,191, 57,151,245, 58,210, 56,242,113,193,119,190,249, 61, 30,124,246,128,165,165,101, 78, 38, 39,116,155, 77,164, 82, - 32, 28,113, 18, 19, 7,138,209, 48,163,172, 74,162, 72, 80,153,130,170,200, 17,132,228,185, 97,115,115,195,187, 28, 76,197,201, -225, 1, 54,109, 16, 8, 8,194, 16, 35, 36, 75,107, 27,132,113, 74, 18,167, 62,143, 93,131,118, 14, 91, 85,232, 64,215, 66, 45, - 77, 96,173, 95,111,219,243, 69,125,174, 61,176,198, 98,172, 47,129, 74,121, 29,150, 87,185, 75,162, 56, 36,140,130, 89, 32,211, -153, 40,229,250,235,205,174, 35,117, 77,152, 22,233, 69,102,165,157,238,219,103,188,254,179,234,181,122,142, 92,167,112, 58,102, -108,153, 90, 51,229,234, 3,193,249, 14,253,252,203,105,227, 56, 21,203,205,225, 49,117, 71,111,234, 34,237,103,240,224,132,183, -177,213,157,185, 96,161,168, 79,109,112,214,226,168,139,117, 77,128,243,205,123, 45,144,155,146, 11,207,216,191, 22,166,221,162, -190, 63, 42, 63,197, 48,198,213,177,170,149,135, 18,213, 63,231,212, 94, 57, 69,243,158,229,223,131,122,243,230,133, 63,155, 70, -240,169, 26,166, 47,165, 64, 77,233, 93, 11,190,197, 23,111,204, 62,254,252, 77,212, 24,208,249,219, 83,116,171, 59, 35,196,155, -130,253, 95,245,117, 94,122,171,127, 41, 89,139, 34,149, 60,247,115, 75,249,138,207,245, 15, 70, 91, 26,110,222,184,198,100,212, -167, 42, 38, 20,227, 49, 85, 97,121,178,179,195, 63,250,167,255,132,163,163, 62,150, 10, 25, 57,250,187,187,188,245,214,219,244, -250,167,188,113,235, 38,131,254,128,195,253,125,191,187, 8, 34, 6,147,130,168,145, 34, 48,108,110,172,147,229, 19,168, 12, 73, - 18, 51, 30,141, 25, 14, 71, 92,121,227, 77,190,253,183,223,103, 56, 30,177,187,183,203,179,221,231, 4,113,204, 32, 47, 40,138, -138,253,103, 79, 89, 89, 93,227,247,127,239, 15,216,126,244,152,229,165, 46, 63,250,201,143,216, 63, 58,172, 31,222, 62, 72,192, - 57,201,149,155,111,241,238,151,191,198,221,247,127,198,253, 79, 63,172,179,181, 59, 44,173,108,209, 93,222,228,250,245, 27,164, - 50, 99,231,206,207,112, 2,182,247, 78, 56, 26,229, 84, 40,148, 10, 60,119,221, 41,254,248,143,254, 1,235,237, 22,191,248,209, -247,232, 31,237,209, 72, 99, 54,175, 94,160, 16, 14, 35,167, 84,191, 87,163, 24,127, 85, 6,243,203, 14,123, 82,202, 25,243, 61, -168, 73,114, 62,146, 49, 68,171,132, 80, 37,104,169,232, 52, 99,122,167,135,228, 85,198,112,148,241,238, 59,111,242,246, 27,215, - 57, 62, 62,102, 52,169,232, 52, 27,188,253,133,215, 81,105,155, 94, 54, 33,203, 38,252,252,199, 63,227,224,201, 30, 79,238,111, -115,124,124,196,254,233, 9, 63,250,249, 7,124,240,201, 35,194,184,197,181,171, 55,216,222,126,194,100, 52,166,221,106,147,198, - 9, 58, 12,177,166,164,119,124, 72, 39,137, 48,197, 4,172,101, 82,148, 20,149,143,171,117,245,147,108, 48, 24,179,186,178,202, -234,202,106, 61,217,242,163, 89, 83,228,100,147, 17,166, 42, 57,216,219,101,121,169,131,198, 32,108,129, 51, 5,189,147, 99,198, -163, 9,167, 39, 3, 70,227, 9,161, 10, 81, 86,144,143,135, 30, 33, 42, 43,130, 64,209, 93, 94,162, 40, 13,214,121, 81,206,227, -199,219,148,121, 81,163, 55,149, 15, 66, 81, 2, 41, 44, 90,122,223,111, 62,201, 16,206, 81,228, 5,195,225,152, 80,107,146, 36, -161, 42, 75, 78, 79, 78, 24, 14, 6,116, 90, 77, 6,253, 30,119, 62,249,152,110,171, 53,139,193, 76,210,184,190, 64,123, 60,104, - 89,100,184,170, 68, 74, 73, 81, 20,196, 81,138, 67,178,253,228, 41,205,102,131, 80, 9,108,229,161, 25, 30,215, 6,113, 24, 35, -145, 32, 52, 73,167, 51, 27, 65,122, 75,167, 65, 84, 21,186,102, 83, 7, 58,100,116,124, 76,163, 17,115,229,218,101,126,241,139, - 15, 72,162, 8, 33, 4,163,225,164, 30,107,107,162,200,199,140, 22,198, 17,134,186,198,180, 8, 10,107, 40,149,100,108, 45,133, -241,240,152,166, 0,141, 35,210, 14,132,161, 55,236,147,164, 1, 73, 20,214,141,138,143,147,152, 61, 6, 37,245,158, 87,121,109, - 66, 93, 44,148, 86, 4,181,216,107,102,197, 82,218,171,210,103,163,105,129,172,223,175,117,128, 10, 2,132,146, 62, 56, 37,136, -144, 58,192, 9, 89,103,146,187, 25, 53,108,166, 51,114, 2, 87, 9, 6,253,140,127,251,175,255, 45, 71,123, 39,152,202, 17,167, - 77, 42,231, 72, 27, 13,100, 16, 32, 48, 52, 27, 1,221,110,147,178,200, 40,202,140, 32, 84, 68, 73,236,109,106, 81,204,104,156, -147, 54,218,180, 90,109,112,142,126,175, 71,149, 77, 8,149,100,208,239,209, 27, 14,217,184,124,149,205,107,215,136, 91,157,250, - 0,195, 76,173,205,180,147,156, 22,195,218, 23,174, 85,157,138, 40,228, 66, 64,150, 56, 67, 76,147,210, 79, 4,124,110, 67, 64, - 28,249, 64,166,121, 40, 83, 80,167, 40,250,251, 80,200, 5,255,182, 57,227, 23,171,193, 44,246, 44,164,170,126, 60, 82, 11,239, -164,242,180,180, 89,120, 87, 93,232, 93,109, 57,116,181, 45,208, 57,139, 39,162,219, 58,179,194,206, 59,113,225, 22, 90,249,154, - 20,231,252, 4,197, 85, 21,182,242,246, 50, 83, 21, 24, 83,249, 48, 31, 83,205,187,254,122,154,232,191, 76,253,115,215, 36, 66, -166,163,115,103,112,174,154,117,238, 56,131,168,247,235,206, 26,172, 55, 23,215,117,208,205,114, 74,196, 2,201,206, 24, 40, 75, - 67,158, 87,140,179,156, 73, 94, 80, 84,134,178,242, 95, 83, 74, 49,187,223,163, 48, 34, 8, 2, 63, 29, 81, 26,132,168, 59,117, - 41, 17,142,153,144,100,126, 1,118,204,115,234,231, 34,186,197,208,122,113,174,115, 94, 28,157,191,176, 83,151,206,143,221, 61, - 97,246,156,117,109,126,210, 16,139, 10,188, 23, 44,115,188, 52,153,231,151, 9,229,234, 24, 39,172,117,228,101, 73,111, 48,224, -214,237,155, 28,239, 63,103,107,179,205,157,207,142,152,100,123,252,205, 95,125,155,215,222,122,135,159,253,100,159,173,205,117, -118,239, 63,162,215,235,241,149, 95,251, 26,219, 79,182,249,228,147,187, 36, 81,200, 59, 95,252, 18,223,250,171,191, 97,121,125, -139,201,100,194,175,255,238,239,241,173,111,126,139,110,156, 50,210, 57,178, 84,196,237, 22,187, 7, 7,116,175,104, 58, 75, 43, -252,233,159,252, 3,222,255,233,123, 12,122, 61,134, 69, 70, 20,199,252,224,111,191, 79,138,228,205,155,175,241,239,255,221,159, -115,249,210,101,242, 44,227,209,227,199, 51,239,130,178, 22,229,192, 56, 65,165, 82,158, 60,219,231,238, 71, 63, 39, 31, 13, 17, - 66, 33, 80,100,149, 36, 76,219,164,129,100,231,222, 71,228,147, 17,174,217,101,156, 59, 74, 35,137,226,200,147,176, 84, 64,148, -180,248,202,187, 95,226,206,251,191,192, 20, 25, 97, 20,176,117,121,139,220, 21,160, 37,214,189,156,233,240, 31,210,169,255, 50, -208,208,153, 39, 50, 6, 39, 11, 63, 6, 68,209,236, 94,160,187,113,141,231,251, 71,188,245,198, 5, 26,137,162,127,124,204, 74, -167,139, 8, 74, 78, 15,159,240, 23,255,230,125,210,181, 11,220,127,126,204,251, 31,126,200,241,193, 49,163, 65,129,181,158, 87, -221,207,114,194, 56, 98,148, 87,188,245,238, 87,217,188,180,197,104,120,204,206,227,135, 72,155, 82,230, 25,207,247,119,137, 34, -205,214,234, 18,189,131,103, 68,113,236, 45, 91, 50,196,212,207, 50,169, 3,170,202, 80,228, 5, 27, 27,107, 20,121,134,192,146, -132, 1, 97,183,141, 45, 51,158,237, 28,112,176,191, 75,150,231,104, 5,171, 43, 43, 28, 31, 30,242,108,103,135, 40,136, 88, 90, - 93,167,189,180, 66, 94, 9,174, 94,187, 73,183,217,196,149, 21,249,120,200, 36,180,132,161,162, 25, 46,211,108,117,233, 44,175, - 32,165,226,228,232,136, 7,247,238, 50, 25,246, 88, 91,233,210,105, 37,190,192, 7,190,179,212, 82, 98,157, 79,239, 75,226, 4, - 55,158, 48, 25, 13, 81, 74, 16,169,128,149, 78,155,202, 24,130, 72,241,165,183,223,224,224,249, 14,219, 79,119,136,211,152,188, -240, 99,189, 48,244,207,125,107, 12,178, 22,238, 20,165, 69, 72, 69, 86, 11,216, 42, 43,208, 97, 68,212, 8,235, 52,192, 0, 81, -227, 69,199,185,247,238, 98, 11,170,163, 67,226, 52,241,177, 67, 14,162, 40,194,150, 21,121, 94,161,162,148,236,100, 56, 75, 78, -188,121,229, 2,255,252, 79,255, 17,255,135,255,243,255,157, 72, 9,100,160, 25,100, 21, 86, 24,116, 85, 98, 37, 84, 22,198,149, - 87, 32, 43,169, 61,174,213, 26,130, 58,182,179,172,163, 54,168,119,141,129, 6, 41, 45, 79,158, 62,199,150, 5,155,171, 43, 30, -121,106, 12, 66, 58,164,116,216, 74,160,116,133,160, 66,184,170,110, 4, 37,206, 84, 20,121,129,214,194, 31, 36, 42,227,187,230, -133, 0, 19,107, 61,239,161, 50,118,238,111, 87,178, 46, 58, 1, 66,250, 29,181, 43,202, 5,145, 85,221, 12, 90,143, 55,222,223, - 57,224, 7,223,253, 49,195,147, 9,101,105,145, 50, 96,146,231,232, 48,194, 8,137,194, 18,134, 1,163,201,132,110, 55,246,143, -223,113,189,218,178, 21, 56,141,173, 74, 58,173,148,253,253,103,220,190,253, 22,105,154, 50,122, 56, 32,114, 21, 89,239,148, 56, - 12, 81,105, 74, 99,109,133,180,187, 68, 24,198,148,166,168,119,217, 22, 93, 25,156,209, 88,109, 48, 65, 80,219, 73, 61, 80,102, - 54,173,181,182, 94, 31,248, 78, 52, 8,106, 49,157,172,119,198,181,123, 65, 43, 53,235,208, 61, 18,118,158,153,238,167,192,243, - 48,146,233, 56,123,122,144, 16, 47,185,166, 76,213,241,214, 58,168, 12, 86, 25,132,177,160,106,225,162,240,149,103,198, 81,183, -231,186,243, 26, 97,107,207, 67,173, 22,246,231,114,166,211,171, 5,109,166,170, 33, 48, 37,212, 93,186, 47,214,211,172,120, 47, -204,196, 10,132,171, 94, 16, 2, 76,149,246, 82,184,249, 4, 1, 87, 31, 50,168, 29, 20, 83,138,157,123,193, 6,108,107, 98,157, -169,124, 30, 73, 94, 26,138,178, 34, 47, 74, 95,204,167,171, 8, 41,106,119,129,246,135,158, 89,114,155,255,122,149,113,168,119, -110, 93,252, 51,175,128,175,187,241,197,174, 92,248,174, 96,222,181, 79,187, 97, 81,171, 75,229, 12,232, 63,253,220,197,156,115, -185,192,238, 21,117,136,200,226,215,153,125,173,233,235, 11, 57,187, 74,202, 51, 31,179,248, 62,113,238,227, 85,157,144,228,191, -167,247, 74,122, 62,243,185,201,130,192,159, 26, 61,141,153,171,151, 47,113,176,255,156,195,253, 3,172,113,196, 73,200,147,237, -103,124,245, 15,126, 15,107, 42, 78,158,238,240, 71,255,240,239,243,253, 31,254, 24, 37,180,167,139,125,122,143,215,110,223,228, -240,168,207,133,107, 55,248,249,135, 31,113,220, 59,229,209,179,231, 92,191,113,147,193,104,194,205,215,223,228,189,247,223,231, - 43,191,254,155, 52,218,203,116,151, 87, 57, 62, 60,100,116,114,204,224,244,132,175,127,229,215, 8,195,144,251,247, 31, 18,171, -136,215,111,222, 98,105,109,141,222,176,207, 55,126,227, 27,252,187, 63,255,239, 25, 78,198, 51, 86,123,168,188,157,198,201,144, -225,184,224,249,211,109,220,100, 64,127, 56,194, 74, 13, 42,160,176,154,165,118,135, 43, 43, 41, 31,255,228, 59, 72,105, 25, 91, -205,246,254, 41,153,161, 78,101,147,132, 65,202,229,203, 55,248,227, 63,252, 67,190,253,231,255,134,227, 3,223, 85, 46, 45, 47, -145, 59, 67,238,124,230,183, 64,254,210,162,252, 42, 59,227,231,233, 26,166,143, 47, 29,212,226,158, 96,126,170, 15, 66, 65, 16, -120,149,179, 16, 10, 33, 21,173, 86,155,123,119,238,211,109,182,104, 45, 45,145, 70, 33,205,214, 18,107,235,235, 52, 84,201,238, -163, 79,185,255,224, 17,255,254,175,127,206,195,231,167,216,180,201,195,163, 62, 71,121,193,216, 56,176,130, 86,146, 50,170, 74, - 94,187,125,157,175,124,233,117, 92, 49,228,248,224, 57,195,225, 41,227,209,136,222,233, 41, 90, 10,134,189, 19,150,218, 77, 86, -151,150,112,206, 50,153,100, 72, 44,113,160, 8,181,164,200,114, 78,143, 14,105, 38, 9,249,176,207,120,112, 90, 91,217, 38,140, -198, 99,239,171, 14, 67,170,162,100,123,251, 17,143, 31, 61,226,112,239,128, 86,171,205,218,198, 38,198, 66, 89, 57,172, 19,252, -226, 23,191,160,219,106,146,196, 1,214,249,139,109,218,104, 80, 25,232, 15, 38,116,218,109,170,124, 66, 18,133, 92,220,218, 98, -127,127,151,124, 60,166,213,104, 32,149,223,167, 89,107, 41,138,114, 78,223, 18, 18,231,224,228,228, 4,132,160,172, 10,175,109, -168, 59,162, 52,137,185,114,229, 50, 31,124,240, 49, 39, 39, 39,180,219, 77,186,157, 54,129, 14,208, 74,131, 3, 29,106, 38,131, -190, 39, 15, 74,143, 47,213,161, 38, 77, 83, 90,173, 6, 97,172, 80,161, 34,105,196,126, 12, 29, 4, 80, 11,116, 26,205, 70, 61, -158,207,145, 14,148, 0, 83,148,216,178,228,180,119,202,225,193, 17,166,178,100,227, 9, 65,232, 35,100,187,157, 37,126,246,179, -143, 57, 60,233, 81, 56,193,160,240,227,201, 40, 84,228,149,161,172,179,181, 99,237,193, 39, 86,120,169, 86,233, 32, 51,254,114, -217, 18,130, 72, 66,164, 5, 58, 0, 25,128,212,142,188,204, 49,149, 33, 73, 18, 2,173,106, 10,230, 20, 47, 90, 35,135,241,169, - 86, 2, 63, 34,245, 96, 30, 57,215, 23,213,120,102, 95,224,204, 76, 82, 45, 22, 68, 86,162,190, 6, 89,231,144, 78,248, 90, 80, -121,255,241,116,108,237,172,196,217,128, 59,119, 31,241,237,111,125,143,108, 82, 1,138,178,112, 88, 36,133, 49,180,187,203, 20, - 85, 69, 28,105,154,173,148,178,204,208,218,107,129,180,242,247,103, 16,249, 24, 85, 33, 37, 81,156, 98,173, 32, 74,155,180,187, - 75,152,170, 98,220, 59, 98, 60, 28,145, 87,150, 66, 72, 46,220,188,201,210,198, 70,237,157,159,239,111,125,135,238,139,150,152, -118,208,178, 14,122, 82,178, 22, 99,201,133, 36, 53,113,102, 76, 44,132,168,237,106,154, 32,244,222,253,197,248,100,143,134, 85, -245, 42, 65,212,123,103, 63,225,153,130, 89, 48,182, 30,190,219, 51, 1, 98,243, 68, 54,191, 14,145,114,138,140, 21, 11,194, 44, - 59, 27,121, 51,227,166,251,174,216,213,246,177,233,239,231, 63,102,218, 85,219,250,230, 81,194,174,238,160,157,245, 0, 24, 87, -249,194,110,109,181,240,241,117,218, 95, 93,203,212,116,226, 88, 95,207,212,130,213, 78, 10,255,120, 16, 44,140,242,103,106,122, -127,208,176,118, 58, 45,153,255, 56,206, 58,140, 1, 83, 89,223,165, 23, 21,227, 73,193, 56, 47, 40, 42, 75,101,234,248,215, 41, - 83, 65,201, 89,135,111,141,165,172, 12, 69,229,247,239,234,157,215, 46,253,153, 84,226,236, 24, 91, 76, 9,101, 98, 94,236,229, -139, 24,193,249,120, 93,190, 80,148,117, 93,244,117, 93, 76,103, 95,179,126,125, 42,158,152,127,158, 90, 64, 21, 78,227, 54, 23, -255, 93,204,254,205,167,119,249,226,173,228,252, 99,212,194,207,177, 88,240,167, 55, 61, 85,100, 42,141, 49,150, 70, 35,161,221, -110,240,217,167,119,252, 88,222, 58, 26, 65,200, 47, 62,254,132,127,240,247,255, 33,207,158,236, 82, 74,193,229, 75, 23,184,123, -127,155, 79,238,220,227,181, 27, 87, 57, 62, 62,225,233,254, 49,119, 31,110, 99,172,229,127,246, 63,255, 19,238,221,127, 64, 28, -198,136, 80,147, 4, 49,207, 78,142,233,245, 7, 4,113,196, 79,126,242, 99,110, 92,185,204,195,123,119,185,117,235, 54,159,125, -118,135, 79, 62,187,195,133,205, 13,222,253,210,151,184,121,235, 53,142,135, 61, 90, 75, 29, 62,249,236, 19, 30, 63,126, 92,167, -239,120,209, 83, 20,196,232, 32,225,198,245,155,148,227, 33,161, 52, 28, 29, 31,145, 89, 7, 65,136, 14, 20, 42, 72,184,118,113, -139, 85,157,243,244,254,135,140, 42,195,209,168,224,104,152,225,116,140,148,138, 56,140,137,194,148,223,249,157, 63,228,194,202, - 18, 63,253,254,119, 72,162,136, 86,171,193,164,200, 16, 74, 81,214,223,247,151,133,183,252, 42,227,247,151,233, 45,206, 20,245, - 32,152,141,145,130, 96,186,143,147,117, 88,139,196, 74,229,199,155,166,162, 21, 37,172,111,173,209,110,182, 8,162, 22,151,174, -223,226, 23, 63,255, 17,207,158, 61,229,147, 71, 7,124,186, 51, 32, 19,146,147, 73, 78,102, 28,102, 26, 92, 3, 4, 97,194,164, - 44,176,197,132, 47,189,113, 3, 81,142,216,219,121,194,163, 7,143,217,219, 63, 97,101,101,137,165, 78,155,118,187, 69, 85, 85, -220,127,240,128,231,207,118,200,134, 61,170,108,132,173, 50,182, 31, 62,228,195,247,127,193,222,179,103,116, 26, 49,197,100,192, -224,228,144,113,150,131, 10,216,220,186,192,107,111,126,129,205,205, 45, 58,221, 14, 91, 27, 27,172,174,174,177,186,190,133, 19, -138,193, 56, 99,105,117,157,102,103,137, 48,142, 57, 58, 62,230, 39,239,253,128,188,152,144, 23, 5, 66, 40,154,173, 46, 78, 72, - 30,111, 63,225,217,211,109, 30, 61,184,203,253,187,119, 25, 14, 6,116,219,109,174, 94,185, 66,156,196, 52, 26, 13,194, 32,164, - 52,134,147, 94,223, 11,220,234,156,101,103, 45,141, 86,139, 48,138,121,250,116,135,193,176, 79,167,211, 66, 41,137,169, 10,223, -213,200,144,209,104, 76, 24, 6, 36,113, 76, 24, 6,254,185, 36,132, 15, 6,170, 59,161,180,145,122,202,152, 20, 52,146,216, 71, - 21,103, 99,194, 58,160, 99, 58, 54,157, 30, 26, 68,221,209, 4, 82,122,223,180, 14,209, 81,140, 51,142,180,217, 70, 69, 41,207, -182,119,188,119,186,225, 35,111,145, 1, 74, 5,124,239,199, 63,198,133, 49,167,227, 28,128, 68,251, 68,198, 97, 97, 9,148, 38, - 9,148, 31,125,214, 30, 94,131,100, 82, 57, 74,235,104, 1,177,148,132,210,213, 69,221, 33,180, 64,105, 73,101, 28,227, 73, 78, -156,196, 68, 97, 88, 31,232,235,105,160,181, 94,233,239,124,177,169,202,130,170, 44,102,160, 25,137,155, 93,212, 93,229, 9,135, -202,219, 51,188, 56,169,238, 8,197,212,155,108,124,151,235,140, 47, 20,170,198,155, 90, 3,101, 33,248,230, 95,126,151,159,254, -228, 99,156, 11,169, 74,139, 19,138, 44, 43,144, 58, 32,175, 42, 90,237, 14,167,189, 30,113,172,105,119,155, 68,113, 64, 94,140, -233,118, 91, 8, 12, 85,145,225,156,245, 99,127,237,197,125,141,118,135, 81, 86,208,104,119, 72, 27, 13,246,158, 63,161, 42, 13, -195, 97, 70,123,109,157,245,107, 87,105,173,174,248, 48, 27,124,138,163, 88,240, 85,139, 51,227,247,186, 41,154,238,194,229, 66, -212,169, 91, 20,188,214,227,119,229, 11,122, 24,132, 68, 97,176, 80,208, 3, 47,216,156, 34,200,103,246,184, 26,139, 90, 23,201, -185, 76,214,157, 3,150,213, 10, 27, 89, 7,240,212,217, 0,211, 40, 85, 55,251,187,204,249,233,204,248,233, 21,118, 22,206,179, -112,179,139, 5,221,212, 34, 54,255,249,182,126,191,171, 45,101,166,254, 26,211,189,186,172,215, 13, 98, 90,195, 88,160,226,213, -169,151, 78,184, 90,103, 87,119,221,117,170,175,183,232,214, 58, 50,231,124,218,175,117, 51,150,252,116, 21, 98,140, 23,185,149, -165, 37, 47, 42,178,172,168, 71,239, 21,165,113, 84,117,168,140,146,126, 69, 52,173,149, 2,127, 32,168,172, 63, 52, 84,149, 69, -125,241,245,203,127,166,106, 74,207,244,143,160,234,144,141,121, 23,237, 79, 77,234,133,253,186,127, 16,204,119,240,243,155, 58, -119, 0, 56, 3,165,153,125,238,217, 61,248,226,247, 83,139, 7,138,115, 63,203,217,151,103, 15, 19,243,195,128,172,247,245,231, - 52, 0, 74,123,255,170,115, 20,101,198,213,171, 87,217,222,126,202,254,222, 33,166,172, 24, 79, 50, 38, 39,125, 14,143,122,124, -245,119,255, 39,252,224,251, 63, 32,160,224,181, 47,188,131, 69,243,248,193,125,178, 44,163,189,178,193,202,198, 22,237, 78,147, -227,131,231, 12, 6, 3, 2, 37,217,121,242,132, 36,137,232,116, 59, 52, 59, 77, 30, 61,121, 72, 40, 36, 56,203,214,165,203, 28, -158,158,242,112,251, 9,221,229, 46,127,244,247,126, 31, 83, 85,252,236,253,143,232,141, 71,200, 64,243,195, 31,254,112,118,250, -215, 58, 32,196, 33,100, 72,148,118,105, 37, 9,121,127, 31,103,114, 78,199, 25,185, 10,188, 15, 20, 75,210,104,242,246,173, 27, -244,159,124,198,184,119, 68, 25, 52,216, 31,140,201,140, 32, 72, 26, 68, 81, 66, 18, 39,164,105,139, 63,253,211,127,198,243, 71, -247,249,236,131,159,215,105,110,245,190, 74,107,170,202,204,236, 48,191,220,247, 47, 94, 10, 28, 58, 63, 81,251,149,139,186,142, -208, 42, 38,144,190,171, 48, 18,178, 98,204,163, 59,159,208, 80,130, 11,151,215, 41,242,146,181, 11, 55, 24, 84,146,143,238,124, -198,223,190,247, 17,191,120, 60,164,143,162, 16, 22, 99,252,138, 71,214, 74, 90, 35, 28, 85,189,251, 85,182, 36,116, 5,235,157, - 6, 71,187,123,124,246,217, 99,246, 14,198,116,218, 49,157, 78,139,139,151,174,176,186,190,201,105,239,148,157,237, 7,148,227, - 30,143,239,127,202, 71, 31,188,207,100, 56, 68, 90, 88, 95, 89, 70, 99, 56,220,219, 33,159, 12, 72, 58,203, 92,187,249, 58,183, - 94,127,147,253,163, 99,142, 79, 78,125,154, 94, 16, 50, 24,142,177, 78,209,238, 46,211, 94, 90, 97,117, 99,147,180,213, 38, 73, - 27, 92,191,121,157, 27, 55,175,176,177,185, 65,154, 52, 73, 27, 93,198,163,156,253,131, 67,214,214,215, 88, 89,106,209,109,166, - 92,188,120,145,131,253, 3,126,254,179,159, 51, 26,143,235,204,249, 4,156,224,201,211,103,148,198,146, 52, 26, 40,169,106, 65, -152, 97,146, 23, 84,149, 37,140,162, 89,147,229,247,186, 94, 57, 95, 84,158, 11,222,237,180, 57, 62, 62,162,217,104,176,212,233, - 32,133,164, 40,114, 78, 79, 78,234,195,149,164, 50, 37,214, 20,128, 33, 84,146,124, 48, 36, 27,141, 80, 24,108, 89,224,170,138, - 36,246, 86,202, 60,207,200,198, 99,164, 80, 56,227, 24, 14, 70, 76,198, 25, 50, 8, 40, 75,131,214, 33,141, 86,155, 86,103,137, -245,203,151,136,210, 6,157,165, 21,110,191,249, 14,223,255,225,247,249,244,209, 51, 50,227,109, 87,177,242, 69,103, 88,122, 39, - 65, 36,220,172,195,210, 82, 97,145,100,214, 81, 24, 75, 3, 65, 34, 64, 11, 75, 24, 8,100, 32, 16,218,211,219,116, 16, 83, 57, -193,112, 56, 36, 14, 67,226, 40,240,201,127,194, 91,172, 36,118,118,225,183,149, 47,236,214,122, 14,253, 52, 73,203, 23,245,122, - 52, 91,243,191,125, 33,177,245,219, 85, 13, 35,113, 84,101, 85,135, 14,249,107, 86, 85, 25,202,210,241,175,254,213,127,207,119, -255,230, 39,116, 90, 27, 12, 71,185,183,237, 25, 63,105, 17,245,245, 53, 73, 82, 14,142, 14,105,181, 34,132,180,116,151, 58, 12, -134, 61,194,192, 91, 46,173, 41,168, 76, 69, 16, 70,104, 29,225,132, 34,140, 18,140, 80, 32, 21,221,181, 85,202, 98,204,100,232, -181, 27, 27, 87,174,178,121,227, 58,186,153,214, 53,217,206, 83,196,166,123,109, 59,183,114,249, 66,186,224, 99,159,197, 26,207, -226,206,102, 91,209,169,234, 61, 8,207, 63,135,235,209,176,154, 95,251,103, 22,177,170,242,171, 9,107,102, 99,119, 95, 28, 23, -147,219, 22, 3,194,252,253, 50, 29,183, 51,109,212,107,251,152,179,190,219,247,252,116, 59, 47,196,179,151,182, 30,165,207,133, -111,211,223,247,172,183,220, 64, 85,157, 59, 20,248,191,189,172, 5,125,242, 37, 48, 54,183, 88,208,167, 7,151,154,144, 55,179, -198, 89, 48,214,214,233,108,174,254,246,238,108, 58,107,173, 90,175,140,165,168, 42,138,188,100,146,229,140,198, 57,121, 81, 11, -228,132, 68,235,105, 60,117, 52, 79,190, 83,114,142,211, 21, 10,135, 64,203,169,103, 83,190, 24,210, 34,167, 41, 71,139,119,246, -212,235, 57,243,178,191, 60, 80,101,113,148,114, 94, 61,253,178,221,236, 98,145,112,231,236,112, 11, 25,171,243,127,249, 37, 94, -245,151, 22,163,122,255,236,207,170,146,178,178, 60,217,217,229, 27,191,249, 59, 28, 31,246, 56, 58,216,243, 42,115, 35,185,247, -209,135,196,203, 43,252,254, 31,252, 1,223,249,246,191,227,198, 23, 90, 8, 41, 89,218,188,192,189, 59,247,201,212, 49, 95,189, -113,139,189,231,219,180,147, 24,181,181,206,227, 39,207,216, 88, 89,225,195, 79, 62, 70, 7, 33, 27,151, 47,147,164, 13, 46,174, -174,242,232,225, 67,158, 60,127,198,104, 52,228,141,215, 95, 99,115,125,141,159,127,240, 1, 82, 6,172, 93,216,162,112,134,127, -255,205,191,240, 86, 23, 4,113, 16, 81, 90,139,208, 17,101, 94,210, 93, 15, 25,103, 61,150,149,226,116, 56,164,130,217,254, 59, -140,154,172,116, 58, 44, 37, 1,119, 14,119,145, 58, 32, 43, 13,167,163,140, 48,237, 16, 68, 1, 50,148, 20,165,229,234,250, 69, -174, 92,218,224,131,239,254,247, 40, 12,163,222, 9,221,230, 38,141, 78,147,147,241,192,159,232,221,252,201, 59, 85,138,186, 87, - 24, 7,207,253,133,120,249,218,125, 1, 17,251,146,109,186, 91, 80,158, 10, 59,101, 98, 11,134,131, 33,255,250,191,249,151, 68, -249, 49,205, 27, 91,216,108,131, 60, 87, 4, 73,202,199,247, 31,241,227, 15,238,241,254,246,128,161, 85, 24, 29, 34, 92, 78, 36, - 33,148,130,118,179, 65,171,211, 98, 82, 85, 92,187,117,139,189, 39,123,156,238, 61,227, 91,127,243, 51,170, 94, 31, 81, 12, 72, - 34,197,250,122, 66,175,215,103, 50, 89,153,193, 27,150,150,150,176,217, 58, 75,237,148,108,220,224,147,207,238,112,113,115,131, - 43, 87,174,147,151, 21,198, 85, 4, 67,205,197,205, 75,172, 92,185,197,209,201, 49,221,229,101, 6,189, 94,157,117, 30,208,235, - 15, 89,219,188, 64,171,179, 68, 20, 39,140, 38, 25, 75,203, 43,179, 11, 84, 35,141,105,221,184, 72, 18, 37,164, 73,155,214,242, - 26,123, 79,159,210,106, 55,176, 46, 67,218, 18,147, 79, 72,155, 77,218,205, 38,215,175, 95, 99, 52, 24,249,195, 99, 32, 73,194, - 6, 71,135,167, 44,175,174, 80,230, 21, 34,168, 59,103, 1, 42,212,164,141,148, 52, 77,192, 89, 38,227,145,135, 93, 8,239,104, -185,125,253, 18,131,147, 67, 30, 60,184, 79,146, 38, 60,124,240,136, 52,142, 89,238,118, 61,207, 62, 74,144, 58,164, 52,214,243, -168,173,183,110, 13,250, 67,172,149,228,227,146,124,156,209,110, 53, 73,210,132, 42,155, 80, 84, 37,206, 73, 70,163, 17,206, 10, -116, 16,179,191,127,200, 96, 56,160,217,238,144,196, 17,161, 10, 24, 79,252, 72,218,228, 61, 26,237, 54, 81,179, 67,148, 54,248, -223,252,239,254,183,124,248, 47,254,215,244,119,142, 48, 14, 38,149,207,138,182, 66, 50,113,160, 10, 67,170, 36, 74,248,139,163, - 22, 16,212,249, 43,185,112, 84,194,191, 33, 23,140, 27,190,139, 49, 4,161, 70, 32,120,190,119, 72, 89, 84,108,109,108,120, 76, -174,112,168,250,176, 99,141,193, 88,111, 5,204,134, 21,167,166,192, 52, 83,170, 48,172,189,233,222,183,110, 43,137, 14,180,207, -113, 83, 10, 66,141, 43, 53,132, 33,166,168, 80, 65,132,140, 20, 86, 72, 74,107, 40,141,165, 44, 37,251,251,167,228,149,224,184, - 63, 70, 74,139, 10, 36,121,101,233,143,198, 44,135, 49, 81, 28,211, 31,143,200,243, 49,198,142,193,133,148,197,132,102,154,112, -112,176,207,218,146, 15,206,169, 76,137,181,165, 79,241,138, 34,191,199,150,138, 44,159, 96, 77, 73,107,105,157,195,103, 39,132, - 97,128, 43, 43, 26,113,130,147, 1, 78,218,185,206,220,129, 11,234,238, 84, 87, 88,163,209,182,222, 85, 59, 53,215, 85, 77,175, -223, 51, 34,168,245, 33,118,213,252, 57,175,106,165,123,160,188, 87, 90, 46,160,160,157,115, 84,198,167,185, 97,167, 94,237,250, - 0, 52, 21,223, 97,231,170,246,105,226,166, 59,187,255,198, 90,132,169,252,110, 90,152, 57,199,127,234, 68,179,115,176,217, 76, -252,119,142,243, 62,157, 68, 44,106,192, 92,173,227,169, 91,106,127, 64,112,103, 87, 0, 78,184,153, 16,207, 15, 21,166,233,114, - 53,123,222, 67, 93,234,251,135, 90,131, 0,214,201,250, 12,106,177, 78,213, 47, 69,237,128, 19, 51, 6,142, 1,156,243, 33, 60, -101,173,101,201, 42,203, 36, 55,228,165,245,225, 60,245, 74, 36, 8, 52,113, 20,250,117,153,174,155, 89,193,252,123, 59,129, 52, - 18, 45,197,180,139,118, 83,188, 46, 82,190,100, 28, 34,206,101,206,214, 74,206, 51,197,216,189, 60, 31,253,124, 97,255, 60,180, - 44,224, 5, 9,175,234, 16, 95,129,136,125, 89, 2,220,121, 75,156,227, 44, 34,207, 26, 75, 54, 41,105,173,116,248,226,187, 95, -228,163, 15,126,204,225,193,200,199,154, 42,195,251,127,251,151, 72, 55,226,107,191,253,123,252,213,183,190, 69, 26,134,252,206, - 31,254, 61,122, 89,197,209,254, 1,127,249,205,255,129,165, 36,230,107,239,190,197,205, 75, 27,252,198,151,191,200,113,111,204, -205, 27,215,216, 61, 60,230,240,228,148,201,112,192,123,143, 30,162,132,160,213,238,240,187,191,245, 13,180, 80, 60,126,252,152, - 59,247,238,241, 27,191,245, 91,140,170,156,191,254,235,191,166, 42,203,249,131, 9,136,194, 8,235, 52, 23, 54, 59,244,199,135, -184,178,100, 43,104,114, 88,148, 8, 37,136, 67,141, 34,164,221,222,228,221,215,223,166,232, 31,146,155,156,220, 58, 14,142, 79, - 16, 65,125,186, 11, 37, 81, 43, 36,155,196,252,246,111,253, 62,178,234, 19,139, 49, 49,134,188, 42, 88, 91,234, 48, 9,192, 40, -111,103,161,178,179,100,162, 57, 30,102, 65, 1, 60,221,175, 77,209,155,139, 92,247,133,221,216,203, 69,113,231, 99, 92, 23,252, -240, 88,160,196,214,211,158, 70,148,114,101,109,131,167,159, 62, 33,210,150,221,167, 79,217,186,241, 22,143,159, 60,224,241,163, -135,124,118,255, 9,185, 3, 43, 5,210, 89, 2, 17,178,218, 77, 9,156,225,221,183,223,228,187, 63,124,143, 73, 89,113,122,210, -103,101,117,157,227,172,194,104,201, 95,255,228, 19, 94,223, 74,185,253,198, 77, 46,222,126,131,221,221,125,198,253, 62,135,135, -135,172,173, 45, 99,109,133, 17,146, 94,102,200, 10, 71,115,121, 13, 41, 67,170,202, 48, 24, 13,233, 13, 7, 8, 39,201, 10, 71, - 89,228, 8, 83,114,188,247,156, 42, 31,211,110, 54,232, 46, 47,147, 54, 90,108,108, 93,152, 93, 16,165,214,156,158, 28,115,114, -114, 66, 81,148,124,227, 27,223,192, 25, 71,158,151, 24, 59, 70,199, 99,142, 79, 78,136,211,192,231,129, 35, 25, 12,199, 12, 71, - 3,172, 49,108,109,109, 16,223,104,146, 13, 79,233,247, 79,217,125,182,207,160, 63, 36,109, 52,104,164, 9, 73, 24,214, 36, 56, -127, 1,139, 98,141,146,126,226, 3,102, 22,178, 33, 5,216, 98,200,187,239,188, 65,187,213,228,253, 15, 62, 66,169, 8, 33, 21, - 78, 56,162, 36, 37,136,188,114, 94, 43, 79, 15,203,199, 19,138,162,240,151,223, 48,161,185,148,120, 37,122, 62,198,140, 10,132, -246, 86, 41,164, 70,202,128,225,104, 66,171, 25,114, 97, 99,147,125, 37,233, 15,251,108,173, 93,129,170, 98,212,235, 99,170,138, -138, 24,153, 56,116,216, 64, 52,224,173,219, 87,249, 63,253, 31,255,247,252,211,255,226,191,228,232,228, 4,131,164, 44,253, 85, -123,104, 10, 80, 26, 87,214,113,148,182,162, 29,134,232,172,194, 10,200,128,170,206, 72,151,206, 33,172, 15,188, 80, 78,160,176, - 72, 87,161, 3,255, 59, 30,246, 6,228,165, 97,107, 99,141, 86, 18,130, 43,235,149,131, 64, 9,135, 49,134, 42, 47,153,152, 18, - 81,230, 20, 51, 90,151, 7,207, 68, 81,128,214,158,160,102,165,196,150, 1, 65, 24, 33,156, 39,202,137,208, 55, 13,149,169,175, -167, 72,140, 21, 12, 70, 5,198, 66, 86, 77, 56,220,123,206,230,198, 58, 78, 6,148, 66, 51,177, 80, 21, 5,170,168, 88, 91,239, -176,188, 20,146, 38, 14, 87,141, 48,101,197,230,250, 6,187,207,159,176,180,212,241, 1, 59,227, 33,113,218, 38,172,159, 53,170, - 6,136, 25, 83, 17, 69, 13,162, 36, 69, 5, 18,103,114,100,229, 16, 66, 97,165,159,158,120,229, 63, 72,229,185,253, 66,107,164, - 53, 40,171,253,117,231,197, 49, 27,106,225, 26,106,140,153,217,217,168,199,210,114,186, 6,157, 22, 9,231, 41,121,117,164, 27, -162, 78, 41,155,117,197,206,249,231,172,152,142,176,125, 39,186,120, 13,169,229, 99,245,106,131,121,144,184,144,115,190, 69,157, -162, 86, 7,140,207, 10,184,125, 73,192,202, 98,113, 18,179, 48, 24, 55,123, 57,181,206, 57, 59,167,182, 33, 60, 8,105, 90,128, -231, 58,138,121, 45,241,123,126,102, 5,123,218,145,251,141,140,168, 63, 86,204,149, 24,210,130, 85, 32,109, 61,193, 0, 43,235, -209,187,129,188,116, 76, 10,203,164, 52,254, 49, 45, 21, 82, 11,194, 64,147,198, 33,113, 18,215, 66, 68,253, 66, 96,218,148, 78, -167,222,125,227,234,159,249,241, 56,179,113,248,249,113,234,226, 46,125,246,246, 57,187,195, 76,196,182,240, 49,175,122,249, 42, -155,220,236,227,166,251,242,250,228, 55, 35, 19,189,228,243, 62,239,237, 23,222,247,130,213, 77,122,235,210,100,204,237, 91,183, - 56, 57, 62,101, 56, 24,131,169, 8,180, 99,117,181,195, 71, 31,125,202,104,144,241,123,191,253,219,220,187,119,151, 52,109,177, -117,225, 2,101,145,243,229, 47,126,145, 56, 84, 60,186,255,144,163,131, 61, 6,131, 17,143, 31,111,179,251,124,159, 79, 62,185, -203,100, 50,162,145,164,172, 47,175,178,177,186,206,165,205, 11,108,110,108,210,239, 15,216,222,126,194,215,190,246, 53, 6,163, - 49,127,253,189,239, 82,213,148,162, 41, 19,177,170, 42,146, 36,225,194,218, 5,116, 26,208,223,123,206,107,221, 14, 39,253, 62, -135, 85, 69, 37, 52,206, 42,194, 32,101,185,213,225,237,219,215, 56,222,125,136,115, 5, 71,195, 49,123,253,140, 40, 13, 64, 4, -168, 40,162,114,146,118,123,149,127,254,159,254,103,156, 62,187,207,193,246, 3,132,117,172,175,175,161,227,144, 97,145, 81,213, -132, 40, 49,205, 34,158,247,217,231,200,124,175,166, 7,186, 95, 97,175,174,166,163,187,115,150,182, 80,251,241,157,208,126,167, -174,165,226,210,198, 10,195,147,103, 92,189,188,137,173,224,244,232,128, 79, 63,254,144,191,250,219,159,241,228,104, 64, 41, 66, -148, 12,105, 37, 49, 27,203,109, 46,109,172,210,140, 67,142, 15,246,107, 60,107,135,229,229, 85,238, 63,124,136,147,138, 73,149, -131,128,113, 94,241, 47,254,151,255,130,102,119,153,165,149, 53, 54, 47, 92,196, 58,199,157,123,247,216,219,219,103,117,109, 13, -161, 36,155, 23, 46,176,177,121,137, 39, 59,207, 41, 74,195,113,175,207,218,230, 22, 72,201,193,222, 1, 97, 20, 17,198, 49,199, -199,199, 52, 27, 45,174, 94,191,142,144, 62, 22, 54, 73, 18,202,178, 96, 52, 26, 81, 86, 37,205,102,147,229,229,101,170,170,196, - 90, 67,160,235, 76,120,227, 40,178, 9,187,187, 59,228,217,136,147,163, 3,138,201,132,229,110,151, 52,137,124,178, 26,146, 60, -203, 24,142, 6,117, 66, 88, 66, 94,102,244,251,167,180, 90, 13,226, 56, 38, 10, 52,113,160, 73, 35,141, 45,115,156,241, 12,244, -209,112, 76, 54,201,201,139,210,123,149, 5, 40, 29,210,106,119,105,182, 58,124,240,193, 7,132, 97,200,234,250,154, 87,248, 23, - 69, 13,159, 81, 53,213,170,194,152,106,182, 58,211, 81, 72,123,115, 29,162,136,254,112,224, 15, 4, 86,224, 80, 68, 81,204,112, - 56, 66, 41, 77,158,231,132, 81,192,242, 82,135, 86, 51, 65,107,201,202,198, 6, 74, 11,154,205,148,168,153, 16, 44,119, 65, 43, -156, 82, 92,186,120,141, 27,183,110,243,239,191,245, 23,104,107,136, 43, 67, 43, 14,201,157, 69, 24,127, 51,245,101, 54, 14, 66, - 50, 11,131,170, 34,112,208, 20,130,134,115,132, 90,160, 35,137, 14,167, 22, 86,137, 80,170,222, 67, 7, 72,229,247,253,131, 65, - 31,173, 20, 81, 24,213, 86, 79,233,161, 62, 90,251, 14, 8, 31,213, 90, 25,207,146, 47,203, 90,133,108, 37,198,128, 80, 33, 78, - 40,156,208, 40,237,105,114, 50, 8,176,194, 71,215,250,108,115,137,181,134,170,114,252,226,231, 31,113,112,120,236,191, 78, 81, - 32,157,100,146,149,232, 32,246,209,171,197, 24, 45, 13,166, 26,209,110, 10, 54, 55,215,188,149,173,200,232,180, 91,104, 45, 57, - 58, 60, 32,142, 52, 97, 24, 33,164, 38, 78,154, 8, 29,146, 54,155, 76,242, 98, 38,156,171,170,130,209,112, 72,163,213, 66,197, - 33,237,149, 21,172,231,180,214,142,174,122,159,238,166, 74,116, 55,155,200,157,191,126, 46, 10, 92,207,215,132,233,222,125,250, -186, 23,182, 77,139,140,157,227,193,141,169, 81,169,213,108,159, 62,231,159,184, 51, 22,106,199,153, 30,178,254, 25,188, 45,109, -106,137,243,216,212,106, 38,134,155,237,196,167,249,228, 83,225,155,181,184, 58, 13,205,218, 69, 81,156, 89,192,179,206, 45,117, -118,102, 67,115,179,183,173,179,179,157,248,140,243,238,196,244, 28,225,253,228,214,205, 10,180, 91,160,207, 81, 31, 0, 22,225, -105, 78, 44,164,204, 77,179,226,133,160,172, 42,242,194,115, 49, 38,147,140,178,168,252, 40, 93, 43,162, 40,162,145,198, 52,154, - 62,151, 34, 77, 19,175, 17,137,194,217,181, 51, 8,194, 89,177,215,103,194, 91,102,133,240,229,193, 44,231,255, 77,184, 87,195, -104, 88,132,137, 77, 67, 61,156,152,157,195,188,175,117,126, 34, 58, 59,226,159,219,230,156, 59,155,202,230,156,120, 65,141, 41, - 94,176,191,137,133, 60,245,179, 9,111, 44,172,136,102, 39, 54, 7, 79,119,158,241,214, 23,190, 76,149, 11, 2,181,237,199, 89, -197, 0, 81, 90,158,223,191,199,127,119,124,194,239,254,193,239,241,100,231, 25,199,199,167, 28, 29,159,112, 97,125,157,102,167, -203,215,190,246, 53,158, 60,221,161,209,236,208,153,148,156,244, 71,116, 55,111,250, 88,207,102,147,231,219,143, 56, 60,220,103, -109,125,147,135,143,159,176,180,178,204,215,126,227,183,248,241, 79,127,204,253, 71,143,106,181,185,168,115,142,245,236,193,148, -101, 19,130, 48,224,233,222, 54, 75, 8, 26, 66,112,223,228, 20, 90,160, 8,208, 97, 3,137,230,250,197, 11, 60,188,243, 33,123, - 59,119, 25, 23, 35,158, 28,101,184, 36, 32, 12, 21, 78, 8,130, 40,165, 18,154, 55,223,124,131, 88,149, 60,188,255, 41, 39,187, -207,176,214,209,236, 44, 51,174, 74,202,178,242,251, 47,107, 17, 74,176, 24,162, 39,206,119,216,130,255, 63,254,119, 54, 6,179, - 14,210,154,205,242,211, 52,229, 11,239,124,145,205,149,132,254,233,152,254,225, 51, 78,159, 63,196,100, 57,113,179,195, 23,223, -254, 58,221, 56, 33, 27, 30, 96,237,132, 50, 27,115,124,120,204, 31,252,246,111,114,241,242, 85, 12,154,131,227, 30,198, 56, 62, -125,248,136, 74, 72,134, 56, 66, 37,113, 81,139, 72, 22,100,147,130, 81, 57,193, 42,197,198,133, 75, 28,237,239, 81,213, 42,102, -100, 72,110, 37,199,195,156,175,124,237, 13,134,147, 33, 43,107, 43,236,238,236,160,162,140,237,237,109,150, 86,150,233, 44,173, -160, 2, 77,127, 48, 64,168,128,178, 50, 28, 28, 30,112,114,124,136, 82,154,139, 23, 47, 18,199, 33,113,156, 48, 26, 53,249,248, -163, 15,233,180, 98,207,253,214, 33,215,174, 93, 35, 13, 3, 98, 37,232, 46,173,178,243,116, 7, 87, 25,154,173,136, 36,137, 81, - 74,178,191,191,135,210,130, 36, 13, 65, 57,190,244,238, 23,121,252,232, 33, 71,199, 7,148,249,216, 11,104,164,164, 17, 7, 4, - 74, 82, 26,203,112,146,177,186,182, 65,160, 67,111, 91, 2,132, 12,144,202,103, 92, 95,185,126,149, 73, 49, 97,103,231, 9, 87, -135, 87,233,118,218,245,225,210,119, 90, 90,107, 84,236,195,138,172,169, 80, 65,136, 12, 3, 42, 9,201,214, 58,203, 74,146,245, -250,222,114, 4,190,179, 80, 83, 59, 86,151,170,204,137,130, 0,227, 12,165,112, 20,166, 98,229,230, 13, 6, 7,207, 25,155, 18, -237, 42,100,144,160, 2,133,235,245,249,199,255,248,239,241,175,254,252, 15,249, 55,255,207,127,205,141, 40,100,236, 44,167,214, - 11,140, 42, 4, 85,233, 71,164, 73,225,213,249,126, 14, 49,237,144, 4,198, 76,241,163, 94,212, 36,100, 13, 46,147, 2,161,133, - 7,194,212, 69,103,239,248,132, 34, 47, 88, 95, 93, 37, 10, 67,172, 53, 40, 1, 74,122,148,242,244, 48,107,235,177,188,176,130, -210, 74, 20, 33,165, 85, 56, 2,164,140, 48, 50,192, 72, 69, 85, 25,210, 56,162,189,212, 70,160, 41,138, 9, 14, 75,168, 53,141, - 52,193,148, 5, 96,189, 74,125, 60, 65,168, 16,203, 0,173,154,244,135,135, 4,203, 41, 58,118, 12, 7, 5, 82, 94,162,170, 38, - 36,113, 72,191,119, 66, 28, 39, 52, 27, 45,242,124, 66,156,164,158, 41, 80,149,184,202,127,205,178,200, 41,139, 2,227, 20, 73, -171, 69,179,219, 5, 97,169,242, 33,152, 12, 33, 99,164, 86,179, 76,111, 41, 53, 66, 91, 76,165,145,218,160,140,242,158,160, 5, - 52,236,249,195,250, 98, 65,159, 22,197,197,169,172,115, 22, 91, 89,159, 62,231,132, 63, 52,212, 44,243,105, 81,247,196, 58, 63, -193, 16, 98, 10,102,159, 79, 8,196,249,213,156,173, 22,192, 44,102,118, 53,154,225,102, 29,103,104,114,231,225, 51,231, 81,177, - 51, 88,205,185,108, 17,231,220,204, 51, 63,175,206,139,227, 97, 89,231,150,248, 7,149,117,110,150,145,226,206,212, 21,129, 91, -216, 87,250, 62, 77,248, 9, 82,253,184,163,118, 84, 56, 87, 79,174, 43,131,144,101, 93, 48, 61, 45, 79,233, 0, 45, 37, 65,160, - 8,195,128, 70, 51, 38,109,132,196,113,228, 15,168,181, 85,208, 24,139, 49, 6, 83,185, 89,237,211,211, 46,251, 87, 98,167,191, -112,171,199,244,184,249, 62,132,133,144,151,115,121,236, 44,142, 49, 94,117, 80,168, 79, 51, 47,140,206, 63,199, 35,253, 42,242, -220, 75, 95,175,105,128,179,144, 0,239,138, 97,146,229, 4, 65,202,181, 91, 55,233,245, 14, 8,116, 73, 16, 54, 56, 62,174,252, -126,247,244,132,255,234,191,254,111,248,202, 87,126,141,219,183,111,209,109,183,177,192,103,159,222, 65, 43,197, 74,167, 73, 49, -238, 19,234, 16, 81,142, 89, 95,106, 51,232, 29,242,252,201, 3,198,101,197,216, 24, 78,243,140,238,198, 38,143,119,158,240,254, - 71, 31, 50, 28, 13,207,140,162,149, 80, 84,166,154, 77, 21, 74, 83,113,127,251, 30, 50,159,176,222,108,242,236,248,132,147,202, -103, 67,135, 65, 76,144, 54,120,243,250, 13, 26,145,228,103, 63,251, 5, 42, 40, 57,205, 11, 38,206,143,238, 13,150,110,167, 67, -216, 88,194, 16,242,229,119,222,230,100,255, 1,247, 62,120,143,157,135, 15, 88,217,220,164,176, 5, 89, 89, 32,165, 66, 11, 75, - 37, 44, 78,120,161,153, 93, 28, 69, 33,206,250, 50, 95,178,238, 88, 60, 72,189,154,191,127,222,147,186,200,104,166, 54,138,248, - 39,152, 64, 81, 20, 37, 65,156, 50, 24, 79,176, 66,163, 67,175,244, 54, 22,126,243,183,126,135,229,141,235, 28, 61,122, 0, 85, - 78,163, 17,243,243, 79, 62,225, 55,190,242, 46,105,163,193,246,163,199,200, 48, 37, 12, 99, 86,154, 45,150, 26, 41, 71,163, 33, - 89, 89, 50,204, 12, 89,110,216,106,166,100,163, 1, 39, 85,206,254,222, 46,155, 27, 27, 92,190,114, 5, 83, 85, 60,122,244,144, -231,251, 71,180,186, 43,252,225,223,251, 79,216,220,216, 96, 92, 76,152,228, 19, 84, 16,179,178,190, 73,167,149,146,164, 9, 78, - 40,223,133,149, 5,167, 71, 39, 12,199, 19,210, 36,166,219,110, 97, 42,195,209,193, 62,141, 70,211,199,181, 58,203, 87,190,244, - 37,180, 18,180, 90, 45,142, 78,142, 9, 67, 69, 28,106,178,241,144, 92, 11,122, 39,167, 20,121,129,117, 13,172, 53, 28, 28, 28, -227, 42, 71,154,164, 72,225,128,138,202,228, 92,186,180,197,198,218, 50, 90, 74,122,199, 39, 12,135,125, 40, 39,117,124,165,194, -201,128,209, 56, 39, 78, 18, 2,165,253,133,192, 90,111,125, 9, 67,140,173,184,113,243, 6,215,111, 92,197, 85,198, 35, 94, 67, - 77, 85, 24,223,229, 74,225, 39,103, 74, 50, 26, 13,105,133, 1, 74, 11,191,215, 53, 21,113,183, 77, 49,206,113,166, 68,106, 9, - 82,178,121,233, 50, 71, 71,135,132, 73,140, 14, 36,214,228,148, 54, 32, 94, 91, 35, 76, 90,136, 64,147,232, 75,100,189, 35, 31, - 21, 26,131, 12, 5,163,147,125,154,205, 6,255,244,159,254, 9,223,249,111,255,156,150,142,145,182, 64, 87, 6,161, 20, 10,197, -184,202,113, 6, 6,121, 65, 16, 37,179, 3,255,116, 76,106,166, 20, 50,108,173,226, 22,245,234,193,119, 70, 74,250, 60,121,225, -252,116,114,144,149, 84,251,135, 44,119, 59,116,154, 13, 31, 55, 92, 23,247,233, 5, 28, 28, 66,106, 80, 26,131,196, 72,141,145, - 26,165, 35, 8, 60,185,173,180,208,238,180,232, 46,119,144, 90, 96, 10, 15, 25, 17, 88,132, 48, 68, 97,128,146, 14, 37, 43, 38, -101, 70,238, 4, 58,196, 39, 14, 38,138,201,184,207, 64,143,232, 54,187,164,113, 76, 62, 25, 32,169,176, 22,210, 70,155,201,120, - 68,150,101, 52, 26, 49, 32,169,170,138, 44, 27,147,132, 49,206, 84,196, 81,128,169, 10,242, 74, 16, 39, 41,221,213, 85,178,193, - 9,145,168,176,147, 1, 58,136, 49, 72,172,170,139,186, 86, 88,231, 69,109,214, 24, 92, 96,177,194,204, 56, 34, 83,141,203,116, - 39, 59, 93,171,121, 72,140, 31, 43,203,154,142,183, 24,111,235,189,231,178, 86,212,155,121, 48, 76, 85,121,158,194,148,125, 34, -167,182,217, 23, 19,214,102,241,168,245, 95,214,205, 50, 65,207, 38,170, 77, 11,231,226, 40,221, 89, 55,179,233,213,136,188, 25, -241,237,204, 14, 87, 44,224,203,103, 32, 26,183, 80,212, 23, 14, 4, 83, 53,194, 52, 99, 94,170, 26,205, 42,102, 81,211,179,175, -185,112, 42,153,133,155,213,247,151, 47,239,213, 60,153, 78,212,212,188,188, 64, 7, 1, 66, 22,254,159,165,167,127,250,213,169, - 38, 78, 34,146, 56, 38,142,189,195, 96, 74,128,181, 53, 7, 97, 22,201, 90, 55,184,250,124,230,249,231, 69,168,190,248,114,118, -133, 63,251,249,127,135,232,212,151,221,102,254,246,151, 1,254,207, 81,104, 94, 44, 42,226,213,241,171,245, 29, 54, 99,143, 59, - 87,199,150,250, 24,206,131,227, 3,186,173, 54, 55,110,222,226,228,232, 57,121, 54, 33,137, 4,121,233,106, 8,146,227, 71, 63, -254, 17,205,180,193, 27,111,188,201,230,230, 38, 95,255,141,223,100, 60,236,179,179,183,199, 96, 48,100,255,224,152,245,245, 11, -244,198, 19,174, 92,187, 70, 37, 29,151,182, 46,144, 87,134,135,143, 30,113,247,222, 61,142, 79,142,231,163,152,233, 78,168, 30, -247, 77,149,232,206,248, 39, 64,158,141, 88,215,154,113, 89,177, 91,148,148, 66, 16, 90,127,226,110, 52, 98,174, 94,218,224,167, -223,251,107, 84,168,153,152,138, 94,102, 17, 65,224,119,121, 78,161,130,136,102,218, 98,107,235, 10,111,220,188,196,119,254,219, -255, 11, 39,135, 59,104, 12,217,100, 68,137,193, 40, 1, 6,175, 24,175, 51,158,177,243, 19,249, 11,165,248, 60, 71,249,115, 2, - 21,206,255, 45,220,231,125,157, 25,176,193,205,232, 76, 85, 85,113,114,218, 35, 32, 3, 17, 34,100,194, 73, 17,162,226,132,110, -171,205,225,243, 39,196,202, 80,133, 1, 63,248,209,123,220,184,114,137,171, 55,110,240,224,254, 3,150,151, 87,136, 66, 77,171, -221,228,245,215,110,177,253,116,155,188, 8,232, 27, 75,150, 85, 60,184,119,159,245,215, 47, 49, 56,122, 78,214,239,179,212, 74, - 9,164, 35, 8,189, 5,240,250,141,155, 28, 28, 28,144, 52, 98, 86,150, 58,140, 71, 67,140,128,193,112,194, 96, 60, 33, 81, 1, -141, 86,135,227,227, 35, 78,251,125,210,102,155,195,163, 99, 28, 2, 21,132,148,185, 35, 27,121,157, 68, 85, 25,198,163, 17,198, - 24, 86,150, 87, 57,156,140, 49,149, 65,202, 61,132,132, 48,212,180, 26, 41, 38,207, 24,245, 78, 25, 14,134,244, 7, 67,210,198, - 37,198,227, 49,135,123, 71, 92,190,116,217, 91,175,242, 28, 45, 4,101,158, 97, 42,131, 18, 2, 99, 61,178,179,209,108, 19, 72, - 24, 14, 7, 76,242,146,246,114, 23,131, 36, 47, 61,203, 58,137, 67, 92,101,200,198, 35, 58, 73,204,104, 60, 65, 8, 65,168, 3, - 68,164, 40,203, 28, 99, 75,180, 84, 56,231,163, 34, 21,130, 48, 10,253, 8,222, 25,108,145, 17,198, 1,100, 35,164,142,105, 52, - 27,140,203, 1, 78, 42,207,203,178,142,149,205, 13,180, 18,104,145, 80,142,135,216, 80, 17, 54,155,136, 36,133,202, 18, 36, 41, -102, 50,130,162,194, 77, 50,164, 11,177,147, 1,213,201, 30,175, 95,218, 98,169,211, 38, 82, 9,131,147, 35, 84,125, 1, 44,140, -161,170,197,113,227,202,210,138,196,188,115,171, 5, 72,126,207,202, 44,112,106,250, 17, 98,161,248, 40,165,235, 78,201,239,155, -141,144,156, 12, 71,228,101, 65,187,209,160,213, 72, 16,202,179,203,103, 33, 87,210, 19,187,194, 48, 66, 5, 33, 34, 80, 30,194, - 34, 45, 65, 18,211,238,248,100, 62,148,168,135,197, 83,171,150,191,173,173, 54,113,102,140, 10, 35,160,196, 88, 65, 26, 53,177, - 24,172,201,145, 20,152,202, 97,109, 76, 18, 46, 99,242,194,239,161,171, 18,155, 36, 52, 26, 9,195,225,144,189,221,125,214, 55, -215,136,145, 4, 73, 74, 85,102,152,170, 36, 10, 2,138, 60, 71,232, 24, 29, 70,116,151,150,217,237, 31,144,157, 30, 48, 72, 82, - 58,141,101,108,160,253,232, 91,122,106,159, 80, 22,161, 21,210, 4, 40,107, 17, 14,172, 16,103, 11,171,173,247,198, 82,122,207, -254, 12,247, 58,151,201, 78, 33, 43,211,103,186,177,213, 25,168,204,140,246,134,173, 19,206,196, 28,197, 90,139,222,108, 29, 18, -227,236, 60, 80, 69,212,121, 29, 76,187,223, 41, 86,118, 38, 74,155,238,210,235,162,110, 23,179,205,125,177, 61,147,115,190, 24, -241, 60,141,222, 93,200, 77,247, 77,244,249, 46,127, 26,249,190,192,130,168,121,246,139,130,187, 89, 65, 95,108,100,235,207,153, -234, 12, 28,212,201,127,211,107,159,215,117, 85,198,214,235,139,233, 99, 77,214,170,251,186,217,171,215, 72,231,215, 34,103, 86, -221,204,115, 87,244,121, 17,218,171, 68, 78,191, 10, 18,244, 85,138,231,179,175,139, 51,111, 47, 76,219,235,137,193,124,231,125, -166,104, 44, 70,184, 46,204,134,167, 31,247, 74, 53,252,130, 52, 91,214, 98, 26,123, 46, 60,198, 58,135,181, 21,141, 78,131,221, -221, 93,186,205, 54, 81, 20,112,116,120,192,242,106,206,163,237, 35, 8, 35,138,188,192, 57, 65, 18, 71,188,247,222,123,252,228, - 39, 63, 97,117,121,133,141,205, 77,186,203, 93,218, 91,107,172, 92,123,203, 43, 95,141,225,222,225, 9, 71, 71,167,188,119,247, - 30,199,199,135,100, 89,118,230, 48,228,156,123, 73,158,248, 60,142, 79, 73, 65, 83,123, 1,217,147,201,152,177, 16, 72,161,113, - 65, 72,212, 72,120,237,234, 37, 62,122,255,199,140,199, 61,130, 56,228,116, 84,146, 57, 65,170, 67,180, 80,196,173, 21,132,142, -192, 56,126,253, 75, 95, 38,239, 31,208, 59,218, 38, 9, 21,153, 53,116,187, 45, 38,197, 4, 43, 67, 15,137, 48,126,191,229,166, -112, 90,203,108,207,239,167, 90,246,151,142,223, 29, 47,142,187,206, 31, 8,102, 46,136, 89,103, 63,127, 2,217, 41, 24, 67, 88, - 64, 17,198, 17, 81,156,112,255,206, 93,174,223,122,157,103,135, 25,101,122,129,183,111, 92,231,104,119,143,173,173, 53,238,124, -124,151,143,239,220,165,217,108,113,227,214,109,122,163, 9, 59,123, 7, 60,121,190,203,107,175,191,206,233,104,200,157,251, 15, - 80,161,196,148,121,253,132,145,124,243, 91,223,164, 89,188,197,147,199, 15, 24, 78,114, 54,183, 46,146,132,146, 52, 14,201,138, -156,110,183, 75, 28, 39, 28,238,238,240,209,207,127, 74, 28,167, 36,237, 22, 34,138,136,227, 4,147,151,244, 71, 19,210, 86,135, - 10, 15, 60, 90, 93, 91,101,127,127, 31, 76, 65,145, 85, 94,232, 53, 28,146,101, 57,167, 39,167,148,101,201,197,139,151,189,181, -172, 52, 32, 36,105, 35,194,148, 57,237, 86,147,120, 26,161,170, 2,186, 43,203, 44,175,172, 80,149, 57,221, 78, 7,140, 97, 60, - 26,226, 74, 77, 86, 84,180,154, 77,194, 48,164, 42, 75, 80,154,188, 40, 57, 61, 61,165, 42, 75,198, 89, 70, 97, 5, 43,151,110, - 16,134, 33, 74, 9, 40, 11,242, 44, 35,137, 35, 6,195, 49,206,180,169,138,137,223,163, 11, 77, 28, 69, 8, 69,157,208, 85,225, -156, 64, 7, 33, 56, 71, 16, 6,148,101, 78,239,244,152, 86,187, 77,172, 37, 78, 74, 42,211,199, 57, 77, 24, 41, 10,167,136,163, -152, 32,137,144,218,147,183,132, 41, 8,226, 16,145, 6,136,192, 65,237,183,150, 85,137,178, 21, 34,203,161,172,112, 81, 68, 57, - 25, 48, 60, 48,148,131,138,210,193,206, 96,232,175, 7, 14, 10, 83, 97,240,223,211, 72, 75, 85,249,199,138, 16,222, 62,228, 9, - 99, 83, 53,181, 92,200,245,157, 70, 89,122,138,165, 14,165, 23, 0, 58,188,117, 73, 9, 31,163, 41, 37,133,115,140,202, 2, 59, - 17,196, 97, 68, 28, 9,194,122, 87,169,180,223,203, 75, 29, 16, 68, 1,113, 26,145, 54, 19,154,141,148, 56, 12, 9, 67, 13,194, -206,248,229, 62,243,218,243,105,133,131,110,167, 81,135,116, 76, 72, 18,191, 67,149,170, 66, 41,139, 49, 25, 74,218, 25,225,110, - 50,202,176,109, 75, 80,139, 23,171, 34,199, 41, 72,146,148,241,120,204,120,156,209, 89, 94,161,145, 38, 84,206, 95,244,165,210, - 94, 77, 93, 79,187,194, 40,162,211, 72, 56,221,127, 70,144,180, 73, 71, 99,212, 82,130,145, 14,225, 20, 82, 25,176, 62,208, 70, -105,139,181,218, 71,162,158,139, 92,253,220,137,234, 66,242,166, 91,216,215, 79, 75,230,244, 50,109,169,109,128,211, 11,137,168, - 67, 83,156,172, 21,245, 2, 39,253,223,192, 45, 8,221,132,152,254, 37,231, 13,144,117,243,233,222,153, 44,118, 55,247,125,207, - 89,236,211, 3,197,252, 90,235,156, 59,215, 88,156,189, 38,249, 14,219,214, 56, 87,175, 76, 23, 83, 17,223, 52,205, 79,107,159, - 17,160, 22, 2, 50,164, 56, 43, 34, 23,162,118, 91,205,249,242, 14,176,210, 46, 68,188, 66, 69, 9, 82,214,215, 62,127, 63,248, -233,144,153, 77, 59,230,117, 66,250, 53,192,116,141,237,166, 28,124,255, 41,182,118, 40,232, 87,103,152,243, 43, 51,190, 95,149, - 93,254,242,238,249,252, 62,252,229,183,197,255, 22, 79,135,142,186,147,124, 69,103,254,194,231, 47,252, 46,114, 97, 63,239,106, -107,140,144,126, 8,228,172, 37, 47, 39,172,109,174,179,187,253,140,155,215,174,162,116, 68,127,100, 24,103,142, 79,158,236,227, -148,164,170, 12,199, 39, 39, 84,149,223, 15,157,246,122, 28, 28,236, 19, 5,146,202, 66, 97,157,127, 98, 9, 65,229, 60,233,231, -252,253,234,220, 44,107, 8, 33,164,207, 37,126, 89,135,235, 32,145, 48, 46, 12,125, 41,145, 68,196, 34,196, 68, 1,151,175, 94, -166,234,159,176,183,187,237, 89,207,227, 49,131,204,160,226, 20,173, 99,226, 48, 34,136, 27, 24, 39, 88, 89, 90,230,246,213,203, -252,240,187,255, 47,170,172, 71, 28, 73,154,173,150,191, 31,133, 64,168,218, 14, 36,197, 25, 70,181,148,126, 4, 47,167, 91, 10, -241,106, 30,252,203, 34, 15, 63,239,113, 51, 11,246, 49, 62, 43,184,170, 42,170,170,244,196, 63, 63, 71, 35,208,126,151, 91,150, - 37, 81,156,144,151, 57,159, 60,120, 74, 17,172,241,100,183,199,114, 55,165,154,244,216,220, 90,102,235,242,239,243,189,239,191, - 71, 94, 24, 94,127,237, 18,123,123,123,124,239, 7, 63,228,100,216, 39, 47, 13, 7,253, 62,113,160,105, 54, 18,242,158,167,245, -221,223,222, 97,251, 89, 3,108, 65, 32, 44, 39,135,123, 28, 31, 31,179,117,241, 10, 81,218, 36, 12, 52,101, 62,198,148, 25,223, -249,235,191,102,107,107,131,219,111,190, 69,212,238,128,144,244, 70, 35,214,229, 38, 22,191, 3, 91, 93, 89, 97, 52, 30,162,132, -160,215, 59, 97,121,105,133,254, 96,136,169, 74, 46,108,109,178,181,185,137, 49,142,123,247,239, 1,130,119,190,248,107,172,172, -174,114,231,238,167, 60,218,126,130, 45, 11,150, 59,109,110, 93,191,206,133, 11, 23,144,145,166,172, 42,142, 14,143, 80, 86,162, - 28, 40,225,152,140,198, 60,219,221,231,202,149, 43,180,181,247,128, 7, 97,204,202,218, 26,237,110,151,195,195, 99, 70,135, 7, - 76, 70, 19,198, 69, 73,107,105,153, 64, 90, 2,145, 80,140,135,148,121, 78, 18, 69,244, 78,143, 9, 34, 47,184,137,195, 24, 83, - 26, 42,235,125,186, 73, 28,205,159, 75,129, 6, 43, 49,214,135, 33,197,129,194,133, 26,161, 36,163,254, 16, 25, 38, 4,113,131, -180,213, 65, 69, 30,192,132, 48,216,162,172, 33,222,222,135, 92,245,143, 40, 42,129,176, 16, 33,168, 78,143, 24, 31,157,208,110, - 47, 49, 50,138,157,237,199,180,150, 87, 25,143, 5,121, 81,113,216, 31, 16, 3,101,173,122, 6, 31,119,234,156,165, 2,138,170, -170,245, 58,110,158,187,237,106,190,186,181,243,161,173, 93, 8,216,174, 31,170, 90, 41, 60,174,205,175,179,132,146,117, 58,156, -191,149,128,182, 14,237,220,124, 93,167, 36, 73, 18,146, 54, 27,164,205,152, 36, 13,137,131,192,219,221,116, 77,169,115,204,194, - 70,100, 61, 98,182,206,177,177,177,234, 11,191,242, 96, 91, 36, 56,231, 69,155, 69,225,234,125,115,229,131,112,106, 28,113,187, -211, 34, 47, 10,140,181,148, 85, 70, 85,131, 81,122,189, 62, 43,235,107, 88, 99,234,136,223,105,238, 54, 68,137,207, 82,111,196, - 1, 73, 28,113,106, 13,189,147, 35,210,225,128,230,210,178,255,123,206, 68,195,202,243, 13,148, 23, 42,250,169, 28, 47,168,199, - 95, 22,200, 53, 45,190, 30, 23,187, 80,176,103,153,223,117,145, 23, 11, 7, 5, 83,213,244, 55,137,181,117, 34,155,162,254, 89, -228,236, 58, 63, 31,191,139,217,152,155,218, 17,180, 32,118,127,113,120, 56, 19,180,217, 25,252,101,241,128,114,230,107,215,126, -242,105,199, 34, 22, 28, 61, 78,120, 54,187,155,122,209,241, 28,122,165, 3,148, 14,113,218,179,232, 61,211,126,177, 51,167, 22, -194,185,121,170,220, 66, 3,227,157, 67,115,113,162, 53, 22,170,106,166,216,175,234,107,161, 88, 16, 20, 71, 81, 72, 20,134,158, -199, 47,181,103, 64, 56,191, 75,119,211,223,161,142,178,157,254,157,212, 87,222,186, 62, 87,191,207,216,239,191, 66,177,172,215, - 45,175, 4,145,204,162, 92,197,108,196,193,153,127,155, 27,250,103, 74,122,196,130, 95,241,243, 1, 39, 51,228,236, 66,254,187, -156,126,205,197,183,153,127,204,162,250,112,254,115, 45, 62,232, 28,227,241,152,213,245, 85, 62,254,228, 19,110,221,126, 13,235, - 12,205,102,194, 96, 52,161,215, 31, 35,129,188,172,102, 39,207, 40,128, 52, 82, 40,229, 24,142, 75, 10, 99,169,156,163,114,130, -106,106,147, 88,176, 69,156,241, 41,178, 8,106, 17, 47,245,239, 77, 42, 71, 6, 88,167,145, 42, 32,142, 35,110, 95,218, 98,171, -147,114,255,179, 95, 80, 81, 50,182,134,222,184, 68,138,128, 36,136,209, 58, 68, 68, 17,205, 72, 32, 84,194,239,254,238,239, 19, -152, 62,159,252,205,191,243, 23,210,124,130,106, 47,161,210, 14, 81, 28,123,175,227,212,141, 34, 4, 74,168, 41, 40,105,129, 69, - 48,127,162, 77,199, 97,110,150,116,196,108, 28, 53, 67, 74,184,197,212,188,133, 0, 31,225, 59,139, 64, 7, 40,225, 89,216,178, -254,223, 31,182,132,135,199, 88, 3,213,132,227,253,199,236, 61,125,204,100, 48, 34, 31, 79,120,242,100,151, 86,187,139, 83,240, - 96,251, 1,131,209,144,175,125,229,235, 72, 39,137,164, 96,181,157,114,101,107,141, 75, 23, 55,121,182,183,199,195,157, 61, 78, - 39,185,255,153, 42,131, 40, 42, 4,142, 92, 8,172, 18,252,225,175,127,157, 91,183,222,100,229,242, 13,156,140, 57, 56,236, 51, - 25, 14, 17,229,152,231, 15, 63,161, 24,247, 41, 69,196,250,250, 26,215,174, 93, 37,142, 35,226, 36, 97, 48,202,113, 42, 98,169, -211,228, 96,239, 57,171,203,203,100,147, 49,195,126,143, 73, 54,228,225,195,251, 96, 75,180, 51,188,249,250,109, 2, 29, 82, 89, - 71,175, 63,230,218,205,215,249,250, 55,126,155, 27,151, 86,185,116, 97,147,183,191,248, 14,105,163, 77,146, 54,249,163, 63,250, - 35,190,244,206,219, 44, 45,181, 57, 61, 60, 96,112,210,227,228,224,216, 31,172,108,197,210,210, 50, 82,135, 52,151, 86,137,147, - 20, 33, 4,141, 36,193, 86, 21,194, 73,164, 80,116,151,150, 9,226,136,167,207,158,211,104, 52, 89,233,116, 73,211, 24, 21, 5, - 76,202, 49,213,120,132, 14, 98,114, 35,217, 63,234,209,104,117, 80, 74,162,181, 67, 58,203,179,167, 59, 4, 90, 34,149, 47, 0, - 40,141, 74, 27, 68, 73,196,160,183,135, 41,115,198,131, 30,227,222, 0,165, 3, 12,146,194, 58,194,164,141, 10, 4,194,142,113, -147, 19,164,153, 32,109,133, 48, 14,161, 2,138, 94,159,225,254, 51,196,104, 64,104, 5, 39,123, 39,228,227,140, 48, 12,184,243, -233, 67,118,159, 62, 37, 9, 66,150,215, 47,240,183, 63,253,136,187, 59,123,100, 8, 10,111,141,198,212,220,114, 89, 23, 74, 35, - 37, 85, 29, 28,211,144,130, 20, 8,177,196,145, 32,136, 4, 42, 0, 33, 53, 82,251, 92,115, 85, 3,174,230,164, 74,133, 22,158, -164,167, 23,108, 89, 82, 80, 7,203, 40,132, 82, 53, 14,213, 39,145, 37,105, 72,146, 4, 36,145, 23, 35,106,165,234,224,151, 26, -118, 5, 53,164,198,135,236,248,127,241,163,213, 31,252,248,199, 32, 13,105,172,144,206, 96, 41,144, 74, 16, 71, 33,163,193, 8, -173, 44,157, 86, 64,218,140, 80,129, 70, 74,201, 56,203, 22,246,203, 32,180,194, 10, 75,101, 42, 86,215, 86,105,180,154, 12, 39, - 57, 82,133, 32, 3,156,138, 16,182,242,250, 24, 83, 50,169, 12,195,209,136,165, 86, 74, 99,105, 13, 84,224,249,249,128,176, 22, -105,166,236,115,127, 40,168,147,189,253, 36, 99,198, 63,119, 24,103, 48,206,212,120, 93, 59,243,110, 79, 35,101,167, 0, 30,234, -152,210,217,248,184, 86,148,155,202,103,131, 87,149, 7, 68,205,148,229, 51, 45,141,152,209,215,102, 96,150,154, 39, 98,107,181, -185,127, 41,102,215,205,133,245,247, 44,173,117,106, 41, 51,142, 51,202,117,235,188,150,196,213, 7, 17, 31, 53, 59,133,204,185, -217, 53,203, 78, 15,136,245,251,164, 20,179,224, 26, 21,134,232, 48, 66, 69,145,143, 30, 14, 3,164,214,200, 32, 64, 6,254,250, - 44,180, 94,232,228,107,168,215,140,140,167,144, 4, 11, 62,123,131, 41, 43,138, 44,103, 50, 26, 51, 30,101,245, 52,216, 32,165, - 35,136, 20,141, 52,245,215,156, 56, 34,136, 60,212,103, 74,214,155, 89, 4, 22, 88,242,214,190,180, 83,255, 15, 11,235,248,229, -193, 29,175,136, 74,253, 15,144, 82,203, 87,236,204, 63,247,251,212,177,118,159,247,243, 76,199, 55,135,135,135, 92,185,122,149, -239,255,224,251,152,202,210,105,119,249,253,223,249,117,126,248,147,159, 51, 24,103,236,236,157,208,104,132,228,121, 73, 26,135, -140, 71, 25,205,134,166,213,212,244,199,134,204,250,113,254,116,244, 50, 61, 64,184,151,237,149, 23,100,150,139, 58,139,133,180, -122, 2,169,145, 50, 34, 12, 18,214, 59, 93, 46, 46,175,240,224,211, 15,177, 78,211, 47, 44,163,162, 68, 7, 9,145, 14,125,192, - 71, 85, 16, 71, 13,130, 32,100,105,117,141, 75,155,235,124,250,131,111,162,170,146, 98,148, 99,131,152, 50, 43,105,175,198, 51, - 61,196,212,199, 63, 61,232,136,217, 40,108,170,242,116,243,184,195,133, 95,230,151,133,188,156, 5, 15,205,127, 65,255,196,178, -190, 59,159,158,210,165, 63,116,185,202, 98, 5, 84, 98,194,120, 60,228,248,244,148,227,253, 67,146,102,147,181,181,117,162, 70, -202,147,135,219,132,129,228,194,214, 38, 0, 43,221, 54,225,205, 43,252,224, 71, 63,224,163,143, 63,228,181,183,222, 98,125,115, -139,143,238, 63, 70, 66,125,241,118, 52,227,144, 40,110,241,240,228,104,198, 97,119,245,250,165,217,108,112,237,234, 37,218,141, -132,167, 15,239, 17,134, 1,135, 7,251,136,164,226,143,255,248,127,202,163,199,143, 56, 58, 29,112,177,189,194,214,214, 50, 89, - 94, 16,104,191,119, 29,141, 70, 88,107, 56, 57, 57, 33,155,140,248,194,155, 95,160,170, 74,194, 32,100,239,240,132, 40, 74,185, -127,255, 17,121,101,248,226,151,127,141,103,207,118,168, 58, 33,173, 78,135, 34,207,185,116,233, 34,171, 43, 93,202,124,194,206, -206,128,209,224,196,175, 95,218, 13,180, 22,156,158,156,178,178,113,153,184,213, 32, 77, 83,156, 84, 28, 31, 30,128, 21,228,101, -233, 5,120,194, 99,117,173,113, 36,113,147,110,123,137,254,209, 49,131, 86,155,200,116,168,108, 6,182, 64, 83,225, 76, 70, 62, -156,112,122,112, 72,167,145,144, 73, 75, 18, 72,146, 56, 37, 12, 2, 4, 80,149, 37,133, 49, 36, 74,227,202,138,102,103,153, 75, -151,111, 83,142, 70, 80, 86,228, 89, 73,152, 44, 65,146,210, 31,103,236, 61,127, 76, 26, 41,218,141, 0,107, 10,100,160,144, 81, -138, 11, 19, 2, 52, 74,104, 76, 86, 48,177, 32, 74,141,112,138,113,110,184,247,222,251,156, 14, 74,210, 32,226,224,176, 71,145, -244,104,181,154, 72, 41, 48,204, 5, 69, 98, 81,225,140, 32,175,170, 25,182, 83, 46, 60,179,220,172, 56,212, 13, 0,194,103,169, - 27, 11,202,183,122, 66,250, 80, 15,185,144, 30,168,132,207, 88,240, 97, 34,211,242, 54,199,152, 74, 89,235,198,102, 42,233, 57, -176,107,234,117,246,235,170, 69,198,131,159,115, 53,155, 13, 58,157,132,227,211,156, 40, 14,145,194, 96,132,164,178, 22, 89,239, - 89,157, 5, 29,104,194, 40, 4, 28,147,108, 76,229,115,101,209, 73,128, 20,130,102,154,208, 72, 35,132,242, 22,199,209,104, 12, - 50,102,156,229,158,143,110,125, 94, 64,145,151, 68,113, 76,179,213,230,232,228,132,221,157, 39, 52, 46,222, 66,117, 34,144, 96, -133,239, 62,167,182, 42,127,171,234,177,112,173, 86,183,102, 6,116,153, 93,155,220, 66,218,218, 2, 71,126,206,173,224,140,247, -219, 88, 75,105, 43, 42, 99,235, 76,112,127,223,123,148,183, 79,203,243, 59, 99,102, 4,208,185, 2, 78,128,176, 11,187,233, 5, - 21,246,204, 19,255,178,107,233,220,101, 53,229, 54,156,209,126,205,214,185, 51,122, 12,118,186, 18,119,211,221,116, 77,186,155, - 98,115,235, 98,173,130, 0, 57, 45,230, 82, 46,236,213,231, 63,147, 19,188, 32,254, 19, 83,167,128,153, 78, 16,252,164,215,212, -246,188,178, 40,168,202,114, 54, 85,208, 90,215,214,181,136, 40,142, 8,194, 96,102, 33,180,214,250,239, 61, 19,203,177,144, 34, - 40,255,227,138,250,226, 69,253, 87, 45,232,175,202, 96,255, 15,249,158,159, 71,146,251,187,124,205,121,247,239, 69,115, 85, 85, -113,112,112,192,213,107, 55,217,126,244,136,131,131, 3,222, 88, 93,225, 79,254,193, 31,242,139, 15, 62,102,216, 31,209,106,198, -244,156, 33, 14, 52,185,112,140, 71, 37, 6,203, 82, 39,102, 48, 41, 25,101,211,196, 35,102, 10, 73,193, 89,167,196, 25,251,223, - 34, 88,199,205,134, 65, 88,169, 64,249,136,199,164,145,210, 94,238,240,225,167, 31,225,138, 49,253,172,100, 92, 9,156, 12, 17, - 65, 92,243,157, 61,250,210,228, 25,101,220,228,107,239,190, 75,126,114,192,254,195,251,216,211, 1, 69,238, 80, 97, 76,179,213, - 69, 7,122, 78,134, 2, 76,189, 18, 88,100,200,201, 26,174,224,147,132,188,112, 69, 44, 60, 41,126,149,195,220,252, 99,220,236, - 52,108,140, 57,147,252, 55,101, 35, 91,235, 48,202, 80, 97,193, 12, 57, 62,237, 97,156,224,205,119,222,101,255,228,148,103,123, - 61, 78,203, 67,110,222,184,198,241,233, 17,131,222, 49,163, 65,143, 73,239,132,241,224, 4,107, 13,247,158,236,242,217,206, 62, -173, 78,147, 48,212, 20,121, 73, 35,142,184,118,101,147,209,225, 17, 43,203, 43, 60, 27,156, 82, 86, 5, 15, 30, 62, 97,173, 25, - 48,204,134,100,147,130,131,131, 67,138,118,155,253,195, 35, 94,187,121, 5, 25, 68, 8,157,250,117, 64,148,178,179,127,194,187, - 27, 91,116,187, 29,222,255,249,207,216, 27, 58, 90,205, 22,159,125,246, 25,214, 86, 76, 38, 19, 54, 55,215,105,181,219,236,237, - 31, 97,149,230,198,229,235, 4, 58, 66,132, 41,173,118,135,225,176,135,192, 50,206,115, 30, 62,122, 68, 86, 20, 8, 41,137, 3, -133, 80, 14,147,141, 49,197, 24, 25,104,202,210, 39, 73,201, 64, 51,204, 38,112,122,204,178,116, 4, 65,224,173, 83,206, 71,195, -234, 32,194, 9, 73, 81, 26,132,146, 68, 82,243,218,235,111,208, 59,220,231,224,217, 83,242,227,125,146, 36, 32, 74, 52, 74, 24, -132,132, 52,212, 8, 91, 49,236,247, 89, 93,233,210,104,166, 20, 89, 49,243,164,107,165,200,202,194,235, 16,148,194, 88, 72,146, - 46, 38,243,182,215, 32,145, 4,141, 54,193,242, 50,205, 36,226,224,209, 39,220,127,255,231, 92,189,184, 73, 24, 40,162,118,155, -184, 25,161, 90, 93, 48,150,114,239, 25,157,118,151,225, 96,200, 73,127,200,160, 95,176,253,244, 57,207,119,119,113, 68,236,229, - 99, 58,221, 46,147, 96,159, 75,155,155, 72,103, 49, 82,188, 18,126, 48,189, 40,215,129,194,117,188,170, 91, 24,169,158, 21, 99, - 10,177,112,120,150, 32,164,171, 9,155, 83,142, 6,179, 12,117,191, 14,247,108,244, 25,155,124,154,186, 85,115,195,103,250, 24, -103,193,201, 89, 69,147,181, 5, 10,225, 15, 14, 86, 64,154,198,172,173,109,114,218,239,163,181,255,126,121,105, 65, 24,202, 98, -136,192, 18, 6,126,122, 96,141,171,133, 83, 10,165,124, 65,213,218,143, 93,139,124,226,243,203,163,148,201,100, 76,220,234,146, - 52, 27, 88,153, 48,201,124,103, 61, 25,143,104, 38, 33, 97,160, 25, 13, 6,172, 46, 45,131, 51,156,238,239,177,210,104,249,131, - 31,202,107, 0,132,244,226, 56,177,144, 15,238,230, 33, 40,212,209,166,130,233,235,102, 30, 87, 90, 23,118,129, 15,178,169, 21, -101,115,143,183, 49, 84,166, 34, 55,198, 23,175,202, 31,150, 68, 29, 20,166,181, 68,217,169,112, 78,212, 33, 37,246,108, 77,145, -212, 89, 32,139,123,107, 57, 91, 17,138,151, 58,105,236,124,219,226,230, 96, 25, 49,157,156,202, 41, 57,110, 58, 73,117,245,225, -112, 58, 81,173,127,223, 26, 46, 51, 61,244,248,226,174,124, 65,215, 26, 37,213, 89, 1,223, 20,190,229,206,234,139,112,130,105, - 22, 13,194, 79, 72,168,168,173,104, 21,121, 94, 80,148,229, 52, 54, 21,132, 36,138, 3, 26, 13,239,172,137,162,144, 32, 12,234, - 76,142, 57, 75, 96, 90,196,173,181, 24,231,127, 39, 45, 4,234, 43,111, 94,251, 51,177,208,173, 73,241,226,248,253,101,187,238, -105, 52,235, 43,247,226, 47, 41,224,191,140, 36,119,198,167,254,119, 12, 13,249,101, 69, 93, 44,128, 13, 94,246,223, 20, 78,224, -247,187,150, 60,207, 25, 12,134,108, 93,184, 8, 66,242,209, 7,239,227,140,225,237,183, 94,227,250,213, 11, 44, 45,117,120,244, -104,135, 40, 20, 40, 5, 81, 44,177,206,162,148,156,243,144,234,199,150,173,255,232,103, 18,131,197,130, 74,112,190, 97,175,199, -208,211,222, 94, 98,165,223,229,133,113, 68, 26,135,156,158, 28, 96, 77,129, 16,142, 78,154,208, 8, 34, 42, 83,160, 2, 69, 24, -132, 40, 37,137,226,216,195, 79,226, 54,191,245,181,175,242,217,143,191,207,224,217, 99,108, 54,162,114, 2, 17,183, 89,185,176, - 85, 63, 73,168,187,242,179, 20,191,179,194, 70,177,240, 0,125,113,218,240,178,191,211,249,195,222, 89, 77, 5,103, 68,147,182, -182,148, 88,252, 94,201, 86, 53, 87,220, 22, 30,145,185,177,201,234,250, 22,143,118,118,217, 61, 56,229,176, 55,224,181,219,215, -185,124,105,147, 34, 27,147,141,199,108,173,118,217,121,242,152,251,219,207,200,157, 32,171, 44,227, 44, 99,115,109, 9, 76,133, - 53,150,219,183,175,211, 74, 18,118,182,159, 50,204,115,140,115, 44, 37, 33, 87,214,155,148,217,128,211,147, 99,182,183,159,211, -235,245,201,178,220, 67, 99,242,146,102,146,162,195, 24,161, 67, 94,123,227,109,150,150, 58, 28,237,239, 50,238,159,210, 72, 18, - 26,141, 6, 65,160,152, 76, 38,164,105,138,177,176,191,127,196,164,116,220,120,253, 11, 76,242,146,241,100, 66,210,104, 80, 85, - 37,227,225, 0, 37,125,138,218,120, 50, 97, 60, 30,251,168,214,110,155, 36, 84,196,181, 13, 12, 87, 17, 69, 17, 89, 89, 18,196, - 17,173,118,139, 70,171, 65,220,136, 9, 2, 69,158,141,145, 66, 50, 26,101,196, 73,138,142, 99,226,110,151,168,219, 37, 76, 83, -194, 52, 34,141, 2,170,201,152,227,253,231, 12,251, 61,242, 34, 99,156,229,232, 40,197, 10, 77,179,189,196,165,203, 87,232, 13, -250, 76,242,156, 70,146,210,235,157, 50, 25, 15,105, 52,210,153, 2, 92,214, 65, 74, 85, 89,113,116,112,136, 84,202,231, 39,216, -202, 31,244,176,164,237, 38,174,170,184,243,225,135,104, 1,166,170, 72, 58, 45,100, 26, 49,216,221,165,236,251,125,254,233,201, - 41,187,187,199,140, 39, 21,219, 79,159, 49, 24,141, 41, 42,199, 36, 43, 40, 12,232, 56,101,253,226, 69,190,253,253, 31, 50,169, -217,221,226, 37,207,105, 41,188, 34, 59, 5, 90, 66,146, 58, 71, 32, 28, 97, 44, 8, 34,252, 8, 94,249,189,177,174,113,166,126, -205, 16,204, 66, 75,180,244,209,161,179, 0, 40, 37, 9,234,192,168,249, 77, 17, 6,154,112,154, 44,168,124,158,250,148,191, 61, - 87, 33, 79,187, 77,234, 24,206,233,229,222, 23,164,147,211, 30,159,124,114,151, 40, 22, 4,129, 15,204, 18,206,145, 77, 74,180, -128, 78, 59,160,145, 70,196, 81, 68, 16,120, 4,172,172, 69, 84, 74, 43,159, 83, 30, 40,138, 44, 35, 77, 83,242,162,162,217,234, -208,232,172, 48,202, 42, 31,234, 97, 44,152,138,241,224,148, 64,250,131, 76,239,244,132, 70,154,226,100,136,147, 1, 81,163,225, - 53, 69,198,131, 97,140,173,176, 85, 89,115,207,167, 72,212,233,104,221,205, 96, 53,206,212, 42,118, 83,199,219,205, 84,107,204, -198,218,214, 24,170,178,162,170, 12,121,145, 83, 20, 37, 69,101,234,125,177,155,141,222,221, 57,176,213,220,250,181, 48,232,168, - 73,115,178, 30, 93, 11,181, 48,210,174, 51,214,133,170, 71,221,211,247,207,166, 15,117, 14,187,156,142,192, 61,132, 72,214, 31, - 43,245, 52,163,125, 26, 32,230, 31, 15, 98,118, 77,156,186,215,124, 49,215, 65,128, 10, 3,180, 14,145, 97,136,210,122,246,253, - 56, 51,241,152,130,101,196,188, 8,203,179, 84, 86,172,197,150, 37,101,150, 51, 25, 79, 24, 14,134,140,199,153, 7, 67,213, 89, -233,141, 70, 99, 6,154, 9, 34, 31,146, 51, 75, 60,149,114,150, 47, 63,251,221,102,135, 15,241,119,235,212, 95, 68, 8,126,206, -216,253, 87, 96,179,191,236,243, 22, 11,199,171,124,234,159,215,157,159,231,204,159, 69,233,189, 98, 44,239, 94, 20,222, 9,169, - 41,178, 9, 15, 31,109,179,190,177,193,173,215,110,115,255,222, 93,238,222,253,148,203, 87,174,240,214, 23,222,161,119,114,130, -113,208, 27, 14,121,250,124, 31, 29, 4,228, 69,229,193, 11,211, 81,224,212, 50, 40,230,209,129, 66, 74, 92,101,102,234,123,137, - 34,212, 1, 81,168, 73,227,152,205,245, 53, 90,205, 38,205,102,131, 88, 7,132,202,119,155, 85, 62,193, 86, 57,137, 22, 72, 42, -170,201,152,147,222, 0,179, 59, 96, 76,137,146, 33, 82, 70, 32, 67,180, 84,124,229,157,183,201, 79,143, 48,163, 30,161,150,156, - 76, 10,140, 82, 92, 88, 91, 67, 6, 1,142,170, 22,159,212, 97, 14,245,207,123,126,154, 32,241, 86, 23, 41, 36,182, 6, 64,136, -255, 80, 0,205,194,254,171,114, 53, 76,194, 85, 88,235,247,185, 66, 20, 20, 40, 86, 90, 13, 58,157, 14,250,198, 13,164, 12, 56, -233,143, 73,218, 29, 84,120,194, 86,171,193,238,147,135, 92,186,188,193,181,139,235,188,255,243,143, 56,221,221, 38,203,198, 30, -124, 97, 45,129,242,118, 17,229, 44, 95,126,251, 13,222,255,232, 62,119,239, 63,224,205, 27,215,144, 74,146, 4, 17,216,146,167, -251, 71,244,250,125, 98,237,187, 28,225, 42, 70,195,138,215,110, 93,227,254,189, 7,196,161, 38,137, 18,198,253, 30, 78,231,132, - 23,182,216,127,246,132, 34, 27, 83,149, 19, 70,253,130,165, 78,139,141,181, 21, 76, 85, 48, 24, 78, 56, 29,140,184,125,251, 45, -110,220,126,131,195,126,143,162,202,201, 38, 99, 70,227, 49,221, 78,147,102,171,225, 35, 91, 11,203,104, 56,100, 50, 26,210,109, - 94, 66, 73,136, 2,237, 17,159,213,132, 34,207,193, 66, 85, 25, 86,214, 87, 89, 89, 93,165,211,109, 16, 54, 83,156, 53,104, 37, -232,159,244,121,178,189, 77, 81, 22,172,172,173,211,136, 52, 40, 80,177, 36,141, 83,146, 84,161, 92,142, 20,190, 35,159, 88,135, - 54, 10,167, 99,134,195,156,113, 86,176,113, 41,164,213, 93,225,228,248,144,172, 40,217,216,220, 96,216,239, 81,230, 57, 81, 28, -121, 15,186, 9,252, 20,171, 24, 81, 85, 99,156,211, 88, 39,252,110,184, 20,136,202,129,141,184,120,245, 6,249, 96,128, 43, 38, - 4,129,226,224,193, 29, 86,243, 33,249,201,136, 88, 69, 28, 30,159,114,116,112,196,233,241,136,225,216,208,105,119,184,118,253, - 42,237,165,117, 14, 14,142,216,217,217, 99,127,239,128,139, 55,110,114,109,107,131,147,135,219,152, 26,126,240,130, 45,201, 89, - 2,152,119,234, 51, 97,149, 23,169, 77, 53, 54, 74,121,136,135,146, 83, 50, 37,179,177,253,153,116,199, 89,168, 20,103, 83, 30, -235,232, 99,191,225,117,179,215, 93, 29,238, 98,235,189,128,143,117,102, 30, 70, 82,119,129, 8,223,229,126,225,173,155,252,197, - 95, 42,170, 58, 60, 68,105, 95,132, 3,237,136, 18, 77,146,250, 61,173,115,194,243, 2,234, 56,211,162, 40, 25, 14,135, 4, 65, - 64, 26,199, 52,146,148,210, 89, 66, 29,242,124,119, 23,226, 14,113,107,133,124,144,213,227,115,195,120, 52, 32,148,150, 64, 75, -132,173,168,138,140,234,244, 24,157, 54,105,173, 45,123, 75,219, 76,192,101,235, 14,211,205, 58,242,105,122,218,180, 83,199,214, - 29, 58,211,174,125,225, 99,157,243,251,242,169,232,213,152, 26,138, 82,249, 21,219,153, 16,147,186,229,153,142,213, 49, 88, 33, -234, 14,254,108,147, 39,153,194,208,234, 2,166,117,173,145,168, 11,153, 80, 47, 88, 99,231,161, 42,204,220, 52,152,133,152,214, -233,238,121,193,244,238,106,208,146,135,239,212, 52, 58, 83, 97,169,167,137,114,161, 99, 87,211, 72, 88,127,112,152,206, 96,167, -186,128, 41, 88,118, 38,140,147,202,139, 54,133,156,221,167,198,121, 96, 76, 85, 86,228, 89, 70,158, 23, 84,198,103,126, 4, 90, - 19, 39, 33,141, 52, 33, 77, 19,162, 36,170, 19,249,228, 75,189,252,174,158, 44,251,169,176,197, 34,254,227,199,239, 47,219,173, - 47,178,115,255, 46,176,152,207,251,122,159, 87,132,207,115,229,127,149,145,240, 75,119,245,103, 50,225,189, 77,164,172, 10,182, -159, 60,101,121,185,203,151,191,250, 53,118,158,108, 51,232,247,249,214,183,254, 2,165, 34,110,189,241, 22,151,116,192, 59, 95, -137,217,219,223,103,111,239,144,131,227, 19, 38,165, 99, 48, 46, 25,229, 5, 69, 81,224,156, 35,144,138, 40, 8,137,163,136,102, -210,160,211,110,179,190,178,194,114,203,147,162, 54, 86, 87,112,182, 32, 14, 3,194, 64, 49, 26,244, 49,167, 99,154, 74,163, 27, - 41, 46, 14, 72,211,152, 40,148,140, 70,125,246,158, 63, 35, 90,238,178, 55, 30, 48, 25,231,181, 53, 66, 2,154, 86,218,226,107, -239,188,197,163,143,126,129,166, 98, 48, 24,114, 50,201, 88,187,176, 69,123,185,141,169, 31,176, 47,216, 4,234,251,206, 56,247, - 82,154,212,116, 66,227,220,231, 41,223, 95,181, 83,159, 27, 51,172,243,214,163,178,242, 79,124, 89, 85,136,210,219,194,172, 19, -164, 27, 43,148, 69,238,187,222,195, 99,242,194,177,178,182, 65,150, 25,168, 12,199,135, 59,244, 14, 12,169,190, 64,255,232,144, -163,211, 17, 73, 51,225,234,149,203,228, 15,158, 98,113,148,206,146, 15, 70, 92,187,116,137, 94,191,224,209,222, 99, 84, 24, 34, -148, 98, 99, 99,139,251,207,183, 57, 26,100,236, 30, 28,177,218, 12, 56, 61, 61, 69, 74,199,107,183,175, 98,138,138,102,218, 96, -125,117, 5, 37, 65,216, 10,105, 39, 28, 60,185, 79,220,104,208,239,247,216,126,178, 77, 43,138,113,101,206, 96, 50, 98,152,229, -116, 87, 54,248,181,175,255, 38,235, 27, 87,113, 2,214, 87,215, 25, 14,250, 76,226,144, 97,191, 71,167,211, 38,137, 2,156,181, - 76,198, 19,180,128,201,160,135, 18, 80,140, 39, 36,237, 38, 42, 8,105,164, 45, 34, 29, 82, 10, 77,117, 60,164, 42, 12,249,100, - 66,166, 29, 26,131,108, 36,196,141,148,163,231,251, 8,107,201,134,125,250,210, 34, 69, 65,212,108, 33,226,168,134,159, 56, 26, -203, 93, 92,101,185,116,243,150, 39,179,229,254, 62, 95, 14, 27, 60,250,233,207, 88, 90,238,178,178,186, 76,187,213,244, 83, 4, - 97,233,180,219,117, 58, 89,133, 41,189,111, 93,106,197,184,127, 66,153,143, 40,148,240,116, 43,101, 9,173, 68, 25, 65, 89,121, - 31,242,149,235, 87, 9,147, 16,161,160, 56, 57, 98,114,218,163, 28, 21,156,244, 15, 41,138, 17, 59, 79,182,105, 52,150,104,196, - 1,221,213, 37,214,183,214,137, 27, 75,220,126,253, 13, 62,252,232, 14,159,126,252, 49,189,131,125,110, 92,190,200, 47, 30, 62, -193,204,184,113, 47,245,234, 16, 8,208, 78, 32,103,125,223,220, 93, 50,141,127,214,117, 74,163, 18,178,190,205, 35,153,103,201, -100, 51, 33,157,239,222,245, 20, 94, 83,167, 70, 6, 74,249,143, 95, 16, 39, 77,199,201, 30,143,106,103, 22, 41, 37,228, 28,182, -226, 44, 72,207,239, 95, 89,233,112,114,210, 99, 48, 46,104,183,197,255,143,182, 63, 15,178, 45,203,206,251,176,223,222,251,140, -119,204,155,227,155,199,154,187,186,170,171, 27, 13,160,187,209, 13, 98,224, 4,146,160, 56, 25, 33,202,142,160, 21,146,172,160, -100,202, 22, 35, 36, 51,108, 82,176,101,138,182,131,182, 34,172,160,109, 42,108,146, 22, 67, 38, 77, 75, 34, 65, 0,196,208, 0, -129,102, 99,238, 70,117, 87,215,248,230, 57,231,204,155,119, 56,243,217,123,251,143,125,238,205,155,111,170,106, 0,124, 21, 25, - 47,235,189,204,151,153,247,158,123,214, 94,107,125,223,239,195,247, 32,244,125,218,173, 54, 97,168,156,195,221, 44,218, 66,221, -247,150,101, 25,135,135,135, 76,253,128, 94,183,231,242,212,219, 17,203,253,101,242,100,138, 23,180,169,138,124, 94,152, 77, 93, - 49, 25, 13, 49,186, 34, 12,124,242, 52,193,215,138,122,122,132,201, 83,108, 16, 53, 66, 51,237,114,200,173,118,249,226,118, 6, - 52,105,210,233,230,130,184,102,204, 62, 35,178,105,219,196,205,186, 34, 94,206,132,112, 70, 83,107, 51, 79, 30,211,198, 56, 32, -144, 93, 88,103, 75,144, 86,206,199,232,139,214,230, 69, 31,182, 83,196, 59,161,163,242,124,188, 32,152,143,190,101, 99, 47,123, - 42,188,198, 28,123,231, 49, 11,150, 54, 99, 79, 22,245,230,227, 22,243,217,141,214, 24,221, 56,172,230,195,203,133,245,196, 76, -237,219,160, 10,197,252,106, 99, 65, 67, 65,179,162,108,126,110, 33,230,158, 45,219, 28,146,140,174,169,170,146, 60,207, 93,174, - 66,147,236,231, 41, 73,232,187, 92,122,223,247,241, 2, 31, 79, 57,107, 35, 70, 52, 7,150,153,248,207,233, 20,234,186,162,174, -106,167,160,175,170,223,191, 80,238,241, 66,251,188, 98,250,113,201,106,207,251,183,159,215,217, 63,175,208,127,215,163,251,249, - 40, 77, 97, 76,137,244, 20,121, 90,241,112,107,135,131,209,136, 23,175, 92, 38,242,165,219,181,239, 30,242,187,223,252, 38,227, -180,192,250,145,243,244, 10,151,134, 54,157,230, 24, 25,208,237, 14, 88,234,117, 88, 93, 30, 16, 72,111,206,176, 54, 85,205,232, - 96, 72,103,176,140, 30,238, 67,153, 51,206, 71, 96, 74, 90,107, 3,130, 56,160, 72, 71,248,158,143,148, 5,158, 39, 88, 90,237, - 35,149,160, 40,114,186, 43, 61, 42, 33, 25,151,134,112,146, 83, 23,123,120,210, 39, 80, 46, 45,234,139,159,255, 60,217,112,143, -195,237,135,228,195, 3,210,170, 66,181, 58,156,123,225, 42,149,117,214, 49, 99, 23, 3,114,142,145,186,207,154,118, 44,198, 34, -242, 60, 47,250,115,175,141,217, 94,157,185,253,197, 24,115,130,251,236, 71, 49, 82, 8,138,188, 36,203, 10,242,170, 34,205, 45, -249,193, 33,111,189,245, 22, 38, 79,185,117,173,198,146,243,224,206,117,150,151, 34, 14,199, 57, 59,195,156,149, 13,201, 43, 47, - 92,230,254,189, 59,120, 81, 68, 93,187,189,213,198,218, 6,219,163, 29, 90,189, 14,231,206,157,231, 32,169,168, 42, 67,107,208, -102,227,244,121,182,110,189,199,238,254, 24, 63,136, 48,218,242,240,254, 67,246,118, 19,170,188,164,211,141, 57,181,177, 6,166, - 66,231, 99, 70, 7, 30,155,123, 7,116, 7,203,140, 14, 15,209, 69,206, 40, 73,120,253,173,207,145,214, 32, 84, 72,105, 36,107, -171,203,100,211, 67,164,176, 40, 33,104,181, 34,130,192,169,176,181, 53, 40, 41,177, 85, 77, 54, 77,200,166, 41,129,144,174,131, -147, 18,169, 11, 60, 9,165,209,164,211, 12, 63,156,128,169,169, 83, 69, 62,242,232, 44, 47, 17, 69, 29,132, 53,120, 66, 96,171, -130,108, 82, 35,109, 65,175, 46,240,219, 45, 84, 28,161,171,146,233,112,130,244, 66,132, 31, 35,140, 69,167, 71,110,204,170, 53, -159,123,243,117,118,119,183,217,223,188,195,153, 51,167, 81, 66, 80,100, 57,251, 89, 66,183,221,162,174, 43,198,147, 9, 23, 46, - 94, 66, 96,168,139,156, 42,203,169, 93,182, 41, 74, 10,200, 50,116, 93, 96,152, 98, 4, 20, 85, 73,105, 2,124,229,113,176, 63, - 34,159,166, 20,121, 5, 8,222,126,251,119, 57,181,190,206,229, 75, 23,152, 76,114, 52, 6,105, 75,246, 15,182,201,106,203, 27, -111,126, 26, 15,203, 71,215,175,241,202,213, 75,120,191,246, 59, 84,181,125,102, 65, 87,178,217,169,219, 38,231, 90,112, 34,154, -121,177,104,251,190,239,186,245,217,232,189, 97,101,203, 38, 75, 94, 45,100, 78,120,158,114,241,192,158, 71,224,121, 46, 67,126, - 30, 71, 58,147, 87,193,226, 92,107,190,207,229,120,173,230,104,116,238,127,195, 40,228,149,151, 95,230, 87,127,245,215,240, 61, - 9, 86,224,123,174, 59,243,125,247,245,132,176, 84,117, 69,150,229,148,101,133,148, 19,103, 57,140, 34,124,223, 35, 47, 74, 44, - 9,126,224,211, 89, 90,113,235,145, 32, 32, 79,166, 28,238, 29,208,110,119,208,101, 78,158, 78,241,132,161, 44, 50,186,221, 46, -121, 81, 48,240, 98,210,163, 3, 70, 7,187,116, 54,206,186, 14,118, 22, 39, 59,239,206,205,137, 14,214, 46,136,254, 26,105,185, -203, 28,159,241,240,171,138, 74,215, 20,245,140,149,110,169,141,105, 38,113,238,181, 62,195, 19, 99,229,241,218, 68, 41,231,249, -247,132,131, 20, 53,207,195, 19,124,121,207,195,107, 10,186, 23,132, 72,207,137, 65,133,242,142,197,115,246, 56,118,138, 70,245, -238, 14, 88,141,215,123,238, 91, 55,115, 81,159, 69,206,145,185,243,159,215,104,106,217,116,219, 86, 65,109,231,121,233,199,201, -117, 11, 5,125, 70,212,107,196,113, 98,150, 13, 43,142, 31,178,185, 54,207,184,207,213,141,141,183,174,107,234,210, 21, 99,221, - 8, 59,177, 26,235,201,147,252,150,198, 53,111,180,157,179, 66,102,150, 67, 99, 12, 85, 93,185, 67, 65, 85,163,107,167,233,241, - 62,238,198,252,180,142,121,150,204, 53, 59,161,184,166,107,129,185,142,192, 10,251, 68,162,218,227,239, 63,171,240,138, 5, 93, -252,252,125,251,201, 5,111,207,252,251,103, 6,136, 90,119,163, 53,218,141,229,132,131,100,120,190,196, 22,110,167,109,140,100, - 60,205,120,247,131,143, 88, 91, 30,112,233,210,139,172,174,166,220,187,123, 15,187,179,203, 81, 86,145,233, 18, 63,104, 17,199, - 93,150, 86, 78,145, 23,181, 67,193, 22, 83,134,155, 5, 82, 11, 76, 61,101,125,176,140,206, 45,171,237, 14,170, 44,145,182,226, -194,198, 58, 73, 58, 69,170,144, 78,167,139, 12, 44,101,230, 65,123,133,178,244,216,122,180, 73,125,176, 71, 81,104,100, 9,147, -236, 16,107,107,176, 33, 73, 97,209, 90, 56,101,169,134,183, 94,121,157,207,189,246, 2,111,127,253,231,136, 67, 77,233,149, 32, - 42, 78,157, 62,139, 84, 1,194,211, 77,135, 33, 23, 16,176,226,177,117,202,252,217, 61,126,238,231, 88, 96,158,185, 67,159, 79, -195,236, 66,151,143,120, 2, 54, 35,158, 66, 6,164, 81, 18,123,148, 84,233, 33,101, 54, 70,104, 75, 39,142, 40,138,156,100,120, - 64, 57,218,225,197,139,231,233,183,223,226,103,190,250,203,236, 31,142, 57,189,182,204, 11, 47,116,184,251,104,151,123,247,238, -243,153, 55, 62,197,198,218, 26, 69, 81,176,182,182, 70, 16,132, 92,188, 48,224,238,195,219,124,231, 91, 31, 81,214,240,112,103, - 7,133,229,220,234, 50,167,214, 87, 89, 31,124, 31,185,134,163,131, 67, 62,248,246,123, 76,143, 18,148, 23,178,113,238, 37,242, - 98,194,230,246, 14,203, 75, 1,217, 56,101,148,150,188,248,234,103, 88, 26,108,240,192,222, 39, 43,114,190,248,163, 63,196, 36, - 45, 81, 69, 77,232, 7,136, 50, 97,180,147,128, 45,144,166,164,204, 39, 76,167, 19,150,218, 1, 50,244, 41,210,140,113,146,242, -225,135,239,177,179,189, 73,232, 27,210,165, 37,150,151, 6,116, 90, 29,116,145, 18,248,146,189,225,152, 59,183,238,114, 54, 75, -241, 79,175,225,229, 30, 90, 26,166, 71,251, 68, 81,151,189,189, 49,214, 72,170, 92, 99, 77,133, 53, 25, 82, 23,116,203, 62,245, - 52, 36, 43, 53,211,164,116,200,221, 90,211,233,116, 8, 90, 49,217,116, 74,224, 11,202,124,194,114,223, 71,170,128,155,183,110, -113,246,204,121,124, 47,112, 97, 68,184,238,124,121, 53,118,104, 76, 21, 98,133,199,254,222, 30,182, 87, 18, 80, 83, 78,221,168, - 50, 8, 3,188,168, 67,220, 13, 9,100, 77,114,120,196, 48,133,233,184,162,204,107,134,147, 17, 55,111,188,195,122, 91,210,245, - 2,198,251, 83, 76,145,241,237,111,127,131,238,249, 53,118,139,138,187,143,106, 62,255,185, 47,241,249, 79,191, 66,119,107,155, - 94,110,241, 44, 72,229,138,132,156, 53,194,174, 30,162,180, 37, 68, 16, 2, 82, 24,172,180,120, 65, 83, 36,154,252,105, 23,210, -226,130, 90, 66,223,119,248, 77,165,240, 61,183, 55,119,232, 86, 80, 82,224,121, 14, 41,235, 73, 87, 96, 67, 79, 17,249, 77,193, -245,154,177,189,180,141,192, 78, 35,208, 11,118,220,153,120, 76,185, 53,149,173,221,168, 90,204, 60,233, 6, 91,151,188,249,153, - 79,243,213,175,254, 26,158, 39,145, 94, 72,220,242,177, 86, 99, 76,141,196, 39,244, 34,148,116, 32,153,162, 44, 9,131,192, 89, -253,165,219,221, 71, 81,136,231,123,172,172,172, 48,158,140,105,247, 6,120,190, 99,208,143, 71, 35, 66, 21,144, 36, 83,210,100, - 66, 24,184, 67,201,206,238, 1, 81, 24,145,249, 5, 86, 79,241, 14,246,104, 15, 6, 88, 33, 48,214,217,115,197,140,170, 54, 63, -164, 24,230,230,219, 70, 16,103, 76, 77, 93, 53, 5,169,210, 84,181,113,111,186,177,172,205,172, 99,218,162, 77, 35,124,117,225, -242,243,123,141,148,238, 49, 14,124,223, 29,148, 60,199, 94, 56, 25, 8,118, 76,251,148,205,115,163,148,155,226,121,190, 83,160, -179,208,169,243,216,228, 80, 44, 20,233,249,216,125, 70,170,107,132, 78,179, 53,175, 69,206, 15, 5, 86, 75, 60, 44,218, 72,132, -145, 14, 74,100,205,220,102,109,197,227, 52, 85,215,181,219, 5,225,253, 92,119, 47,142,189,233, 13, 82, 13,107, 53,162,174, 48, - 85, 69, 89,148,100, 69, 73, 89,214,232,218,173, 42,228,204, 97,161,196,252, 92,104,153, 97,110,157, 6, 66,155,227,201,137,174, - 53, 85, 81, 82,230, 5,117, 89, 82, 20, 37, 73,154,207, 58,117,203, 83,179, 83,159,163,110,183, 11, 65, 45,179, 88, 60, 33,143, -177,141,226, 25,251,246, 79,212, 65,219,199, 33, 53, 39,179,187, 63, 9,142,244,169, 66, 57,123,210,212, 38, 22,172, 7, 74,186, -109,136,108,152,246,206, 14,232, 46,172,249,248, 89, 42,180,134,131,225,152,233,244, 58, 27,171,107, 92,188,116, 25,164, 34, 30, -103,228,149,165,208,150, 52,175,152, 78, 15, 16,214, 52,169, 89, 62,186, 12,176, 70,208,237,247,233, 44,245,200, 18,139,242, 3, - 82, 37, 64,196,220, 62,156,242,112,115,135, 90, 73, 90,123, 9, 90,104,180, 82,156, 94,221,231,149, 83,151,121,245, 83, 47, 18, - 44,135, 68, 81, 15,175,244, 40,139, 67,134,201, 62, 55,111, 29,114,120,235, 33,190, 20,212,182,166,211,235,242,149, 47,126, 31, - 55,223,255, 6,117,145, 18,132, 6, 43,107,218,157,136,245,181, 85, 36, 2,109,155, 29,255,130,115,196, 46, 68,168,186,199,115, - 70, 44,122,172, 27,193, 60, 25,246,112,162, 43,159,101, 35,219,167,131,135,132, 61, 49,176, 58, 41,146,148, 72, 97, 80, 82,147, - 77, 15, 48, 85, 73, 94,104,130,238, 26,155, 15,239, 99,170,156, 95,219,121,200,206, 11,151, 57,125,241, 42,185, 86,236, 30,229, -148,213, 62, 47,190,112,149, 87, 94,238,130,144,236,238,237,242,234,235,175,115,255,222, 3,178,178, 36, 73, 82,206,174, 12,232, -181,218,124,235,131, 27,212, 65, 64, 73, 69,128, 37,148,146,241,209, 33,126,232,145,107, 15, 47,110,115,230,204, 41,246,212, 30, -175,189,249, 5,240, 91,148,197,136,124,188,205,189,251,219, 88, 33,185,242,202,167,105,119,150,201,243,130,238,234, 6,203, 81, -155,222,234, 89, 70, 15, 55,137,162,128, 98, 58,226,240,193, 77,148,208,244,250, 29, 74,237,180, 3,117,150,112,235,163, 15, 92, -212,237,116,194,112,154, 99,107, 77,224, 73,238,220,185,193, 78, 24,208,107,117, 24,116,251,116, 91, 49, 86, 90, 30,110,238,112, -227,214, 29,246,119,183,216,223, 90,229,252,198, 26,237,216,167,150, 22,233,197,236, 29, 36,156, 61,127,153,254,160,135, 31, 24, -194, 16,148, 46, 40, 39, 99,180, 10,217,220, 61, 66, 5, 49, 97, 20,129,174,240, 76, 13,190,135,173, 42,106, 93, 32,117, 14,182, -102,208,235,178,189,115, 68,154,230,156, 57,125, 26,165,124,132,231, 59, 46, 67,153, 83,150, 53,126, 20, 51, 88, 93,163,211,237, -146,229, 19, 54, 55,135,180,195,160, 57, 12, 10, 58, 75, 78,164, 38, 84, 69, 54, 26,115,176, 95, 98, 76, 72,150,103,220,184,246, - 17,235,203, 29,206, 14, 58,236,236, 76,184,113,247, 1,247,223,255, 22,210, 76,121,248,155, 21, 63,252, 19,127,138,247,174,125, -139, 95,252, 87,223,226,223,255,159,254,121, 94, 58,123, 17,243,112,151,192, 19,140, 43, 59,183,119,206,189, 36,214,226, 3,109, - 43, 8, 48,168,230,192,233,249, 2, 95, 57, 22,130, 43,222,222,188,128,184, 78, 93, 54,157,177,239,138,250, 66,119,174,148,112, -161, 56, 74,225,251,146,208,243, 8, 2,255,248, 0,224, 9,100, 19,115,234,186,239,153,250,219, 28, 19,173,172,152,251,136,133, -112,194, 50, 7,189,114, 74,233, 75,151, 47,178,188,178,194,193,225,161,251, 88, 41, 9, 61,133,174,116, 83, 59,221,194, 63,140, - 34,172, 53,132,161, 19,206,185,216, 83,195,210, 82,215,169,165,203, 28, 79,133,132, 97, 76,109, 96,154, 37,148, 85, 69,154,164, - 76,198, 83,234,170,164, 44, 44, 81, 20,114,247,222, 3, 46, 95,186,194,209,120, 10, 65, 1,251, 17,131,245, 85,252,184,229,198, -232,186, 65,182,218,227,159, 71, 10, 48,194,117,143,218, 84,232,202,165,247, 85,101, 77, 85,105,106,109,155, 4,187,153,239,156, - 38, 76,199, 21,115,151, 92,214, 8,221,154,201,136,106,220, 5,158,146, 4,158,215, 60,174, 22,185, 80,212, 23, 39,122,199,177, -172,199,188,120,169,164,131,101, 53,246,183,199,239, 65, 39,128, 57, 66, 52, 60, 17,231, 68, 16, 13,113,205,206,199,237,179, 90, - 44,221,250,193, 26,164,146, 88,237, 78, 19,194,136,199, 16, 34,143, 37,174,205, 19, 91, 30, 11,148, 17, 11, 46,167,230,123,192, - 2,181,198,150, 5,117, 81,144,101, 5,105, 90,144, 23,181,195, 69,131, 19, 99,134, 1,126,232, 8,134,110, 16,177,144, 0,103, -155,188, 89, 26, 81,119, 93, 83, 21, 37, 69, 86,144,167, 25, 89, 94, 50, 57, 46,234,207, 31,123, 63,107,156,122, 50, 1,109,241, - 99,142,207, 7,207,218,137,127,220,232,253,187,241,191,127, 55,251,250,231,126,238,194,110,253,216,230, 38, 23, 10,211, 73,140, -226,222,222, 30, 31,237,237, 53,113,150, 33, 74,122,116,130,136,186,212, 88, 33,241,195,144,192,119, 59,220,202, 10, 42, 11, 73, -154,178,157,108, 81,105,159, 86, 43,198,107,251, 12, 86, 79,113,106,101,153, 55,175, 92,165, 29, 69, 88, 91, 35,108,129,169,198, - 80,142,201, 39,143, 56, 74, 70,136,251, 9,168, 8,107,125, 98,175,162, 18,138, 23,174,190, 69, 86, 73,246,222,223, 71, 82,209, -137, 21,173,208,240,246,237, 15, 48,133,225,254,104,159,100, 50,226,226,197,203, 4,113,212, 4,182,240,196,228, 99, 14,231,121, - 26, 6, 86, 60,182, 50,121,202,116,231,120,100, 38,156,112,136, 5,134,191, 56, 38,234,205,195, 7, 22,174,157,217, 62, 83, 72, -231, 37, 71,212,140, 38, 19,103,183, 74, 75,178, 97,142,231,121, 76,211,154,131,105,206,230,239,126, 68,231,163,123,180,219, 45, -122,145, 36,140, 98,190,245,238, 45, 94,255,244,139, 92,188,112,145, 48,106, 83,215, 53,203, 43, 43,188,247,254,251,220,125,176, -197,133,157, 11,228, 70, 99,164,160,170,171,102,250,162, 57, 76,166,236,236, 31, 48,232, 68, 20, 86,145,166, 41,248,146,206,242, - 50,126,187,197,225,100,194,160,235,211, 10,214,152, 30, 37, 8, 17,179,182,118,133,241,100, 72,187,165, 8, 60, 15,105, 75,198, - 7,219,216, 98, 76, 93, 21, 12, 19,205,193,246, 67, 6,253, 14, 58, 11,153,100, 25,203,107, 27, 8,157,241,240,238, 29,238, 92, - 75, 49,149,166,213,221,160,191,212, 71, 88,197,214,214, 67, 36,134,126,167,197, 67, 1,173, 40, 38,108,181, 25, 79, 19,188,208, - 67,219,154, 71,219,155,152, 42,231,252,185, 51,200,184, 79, 59,236,178,185,123,135,163, 36,225, 13,255, 83,156, 57,179,238,216, -212, 66,243,112,107,155,238,202, 6,163,241, 8, 99,198, 44, 45, 45, 17, 72,137,205,115,231,139,174, 12,105, 54,193,247, 44, 81, -219,197,184, 10,109,185,126,237, 58,105,146,160, 60,201,250,218, 26,221, 78, 11,223,247,208, 85, 73,145, 36,128,229,197,151, 95, - 66,232,146,108, 50,162, 46,114,210, 36, 97,117,109,141, 78,111,137,209,116,196,209,209,144,163, 97, 66, 93, 7, 36,233,148,143, -174,125,135,182, 15, 23, 87, 95,226, 40,183,252,194,219,239,243,222,239, 94,163, 91, 22, 44,183, 20,253, 65,135,127,241,143,126, -153,191,240, 19, 63,198,127,241,119,255, 41,255,240,167,126,134,255,227, 95,253,143, 56,191,210,167,213,246, 16,163,227,160, 17, - 23,220, 97,144, 22, 98, 32, 22, 2,223,184,189,122,160,104,160, 57, 77,151,231, 9, 60, 95, 17, 4, 30, 97,224, 19, 6, 46,218, -215, 87,238,166,169,164,131,202, 72,233, 20,238, 82, 54,163,112,207,141,223,125,213, 64,101,212,177,178,125,214, 77, 46,198, 76, - 63,254, 26,112,100, 54,211,160,118, 77, 19,126,162,176,182, 70,121, 1, 95,254,242,231,249,167,255,236,231,169,170, 28,140,194, -243, 66,124,229,227, 9,213,120,228,157, 71, 60, 12, 67, 60,165,208, 90, 55,130,185,146,209,104,140,239,249, 60,122,180,201,210, -242, 58,211,201,148,184, 31, 50, 60, 60,164, 44, 74,114,149, 82, 20, 57,117,149,163,148,224,232,112, 31, 41,160,170, 10,178,188, - 32,104,197, 4,195, 33, 59, 55,111,209, 91, 93,163,183,188, 66, 86, 85,243, 17,180, 20,179,215,175,251,127,173,221,152,189, 40, -106,202,162,162,168, 42,234, 74,163, 13,110, 95,174,143,129, 49,179,218, 5,242, 68,188,245,204,117, 48, 91,113, 72, 41,240,149, - 68, 41, 15,165, 44, 82,152,231, 78, 89, 79,174,255, 22,132,106, 31, 87,212,103, 45,136,104,216, 4,246,216,105, 51,235, 47,236, - 76,204,108,164, 11,162,177, 10, 43, 21,182, 97,103, 24,183,236, 62,150, 28,137,197, 49,252,115,162,166,143,185, 48,205,222, 95, - 55, 0, 30, 67, 89, 86, 20, 89, 78,158,231, 78,228,214,248,206,131, 48, 32,140, 34, 55,245,242,221,122,235,132, 85,111,222,190, - 59, 24, 79, 85,107,202,178, 34, 75, 11,178,204,185, 90,146, 52, 67,189,245,234,165,159,148,143,161,238, 22, 49,177,207,235,124, -197, 51,199,223, 98,193, 19, 42,158,171,124,127,158,111,125,177,184, 62, 15, 42,243,120,222,251, 39, 45,238,143,255,185,209,199, -182,140,153,181,173,172,221,152,169, 94,224, 17, 43,233,108, 62,190,239,147,164, 9,202,243,232,117,150,156,133,194,243,209, 22, -210, 60, 35, 47,107,151, 8, 86,148, 72,191,133,140, 66,186, 43, 61,194,110,159,118,119,141,238,160, 75,153,143, 72,143,246, 56, -120,116,159,195,251, 31,113,248,232, 22,117,153, 51,232,250,136,241, 22,175,188,249, 5,222,250, 67,127,148,239,251,210, 23,185, -241,225,135,252,187,127,229,175,242, 23,255,189,255,144, 56,140, 40,146,146,191,254,191,255, 47, 57,216, 63,226,215,127,243, 55, - 64,192,155,175,189,129, 87,103, 12, 90,150, 60,211,248, 94, 64,171,213, 98,227,244, 25,144, 18, 35, 45, 86,186, 23,239,113,167, - 46,142, 19,136,102,235,147, 89,156,221, 9, 15,232, 12, 33,185,200, 95,126,242, 69,167,102, 54,144,102,103, 57,219, 81,158,200, - 95,110,126,247, 60,239,184,115,242, 60,162, 48, 64, 73,192,106,146, 52, 99,176,186, 78,171,219,231,229,151, 95,101,154,166,140, -106,193,254,180,164,170, 42,150, 90,110, 10,210, 94, 90,101,237,204, 25,199, 99,215,134,118,187,227,240,187,198,112,239,254, 3, -210,162,226,193,214,142,243,188,207, 22, 93,205,139, 92,104, 77,104, 10,166,251, 7, 28, 30,142,184,123,111,139,209,100, 74,119, -176, 14, 94,132, 23,120, 88, 61, 69, 1,145, 31,146, 21, 37,103,206,157,231,104, 60, 68, 9,131,169, 75, 38, 71, 7,248,210, 80, - 76,143,152, 28,238,160,116,194,112,239, 17,163,131, 29, 38,227, 17,101,145, 83,149, 57,233,116, 76,183,219,118,171,148,186,166, -221,234, 50,157, 78, 80, 74, 56,208,205,238, 30,113, 28,163,107, 67, 20,181, 64,121, 8, 21,224,251, 1,218, 64,167,211,163,221, -238,226,135, 49,119, 31,238, 16, 4, 33,151, 46,159, 39, 77, 71,124,248,193,187, 28,238,237, 81,103, 37, 82, 73,250,131, 37, 86, - 79,157, 97,237,204, 25,190,243,246,219,152,170,162, 72,166,148,233,132, 98, 58,164,152, 78,169,242, 20, 99,107, 38, 73, 66,146, - 87,132,173, 30, 27, 27, 27, 8, 33,216,218,124, 68,187, 21,209,239,118, 26, 59,151,231, 80,175, 70,147,231, 46, 18,212,247,125, -150,215,214,157,237, 10, 40,138, 18,173, 45, 55,110,220,163, 21, 15, 48, 6,222,121,231,155, 8, 81,242,242, 11, 23,104,121, 45, -126,235,198, 62,255,175,175,254, 22, 85, 97, 8, 13, 76, 10,141, 95, 9,122, 49, 28, 30, 37,156,126,245, 28,191,243,254, 29,126, -224,205,215,232, 32,249,149,119,222,103, 63, 45,155,162,126, 92,112, 2,160, 39,160, 43, 4, 93, 4,161,178, 68, 1,180, 90, 10, - 63,132, 32, 86,142,254, 22,197,196, 97, 76, 28,133, 4,129, 79, 20, 6, 4,161, 71, 16,184, 93,185,231,201,121, 33,247, 61, 53, -247,138, 59,235,219,236,205,141,223, 61,223,155,255,191,106, 48,161,178, 9,226, 16, 18,103,113,154,113,105, 77, 53,143,175, 85, -194,117,151,198,214,104, 93,113,234,204, 89,222,249,214,219,120,202, 52, 19, 49, 67, 20, 70,243,123,207, 60,251,161, 73,227,170, -171, 10, 41, 21, 88,168,181,158,211,214,122,253,101,218,221, 30, 65,212,230,230,237, 59,206,179,239, 41,166,211, 49, 90,151, 72, - 44,155, 91, 15, 57,119,238, 44, 85, 85,145,151, 25, 81, 20, 33,180,161,156, 38, 76, 71, 19,124,165, 26,197,189,158,143,217,235, -170,158,231,190, 23,165, 27, 21,231,121, 77, 81, 86,212,181, 67, 95, 59,117,251,140, 12,199,220, 18, 59,183,140, 41,133, 31, 4, - 4,129,187, 78,252, 89,214,183,175,154,105,137,187, 79,200,185,175,255, 41,247,255,134,234,167, 26,232,139,242, 60,119,143,117, -164,154, 70, 17, 46, 62,118, 74,187,176,120, 95,104, 50,237, 19,218,135,121,226,153,117,221,240,204,122,231, 82,211,124,164,239, -187,232, 97,207,119, 76,144, 5,161,223, 60, 45,206, 30,195,185,108,163, 27,114,193, 72,206,129, 80, 21, 25,211,241,148,201,100, - 74,150,185,162, 14,182,137, 87,109,211,238,180,136,226,216, 89,232,124,207,197,188,206,181,249,199, 99,107,163, 93, 65, 79,211, -156, 52,205, 72,179,140, 44, 47,152, 38,153,235,212,173, 93,160, 49, 61, 54,228,254,100, 15,216, 83,246,170,198,206,119,180, 79, - 43,230, 31,215,129, 63, 45,122,245,241,204, 93,196,226,174,221,206, 79, 79,207,234,252, 63,201,116, 64, 45, 32,104,133,116,169, - 60,162,217,233, 47,118,183, 82, 57, 59, 67,187,219,193, 34,152,102, 5, 7,195, 35,140,144, 68,189, 30, 27,231,206, 98,149, 71, - 89,105,198,211, 41, 89,145, 51,222,219,193,238,151, 72, 19,210,107,173,209,239, 41, 34, 79,242,165, 31,254,179,188,242,210,139, -252,242, 63,255,199,188,254,198,167,248,183,255,151,255, 43,160,228,239,252,111,255, 42,237,245,151,248,220, 87,126,156,149,142, -226,239,255,221,191,207,112,100,104, 13, 46, 66,120,138,223,248,237,247,249,247,135, 19, 60, 17,224,171, 8, 33, 32,240, 34, 46, -156,187,200,141,119,110, 49,157, 76,232,116,122, 28, 30,142, 88, 74, 75, 58,125,223,217,107, 16, 79,213, 55,156, 56,237, 62,197, -109, 96,159,209,161, 31, 43, 85,221,233,121,241,144, 53, 19, 37, 45, 78, 56,172, 53,142,242,181,112, 32,155, 11,148,148, 36,144, - 62, 54,240, 8,219, 93,234,202,176,178,178,198,185,243,231, 89, 94, 91,229,149,113,193, 55,190,253, 30, 55,223,127,135,218,192, - 43, 47,189,202,168,146, 44,111,156, 37, 12, 20,123,219, 91,220,189,119,159,189,189, 3,242,178,100, 52, 77, 81,158, 71,228,249, -148,198,193, 68, 66, 41,241,164, 79,169, 11,231,239,173,125,118, 15,247, 25, 78,106, 50, 3,231,206, 47,227,249,109,124, 63, 38, -157, 30, 33, 67, 67,161, 19,202,122, 76,101, 70,228,197, 14,129, 50,232,172, 96, 58, 57,100, 60, 25, 81,167, 71,164,211,132, 34, -155,178,190,188,132, 48, 21,123,123,251,140,167, 5,253,229, 37,194,131, 3, 90,157, 30, 23, 46, 92,160,174, 13,147,201,148,131, -225,152,149,213, 53, 38, 73,130, 82,138,115,231,175,242,232,193, 67,122,237, 14,239, 62,184,199,234,250,128,186,214, 84,218, 16, -199, 45,142, 14,167,220, 44,238,113,233,226, 5, 86, 87, 86,121,251,155,223,160, 63,104,241,210, 11,151,233, 93, 58,135,143,135, -212,134,233, 36,229,198,157,187,188,254,105,197,233, 51,103,249,236,155,111,112,255,206, 29,210,233,132, 97,154,144,101, 35, 48, -130,110,167, 75,171,235, 66,106,142,210,148,164, 24,114,233,252, 69,206,157, 61, 77, 93, 23, 78, 40, 87,149, 14,134, 18, 6, 24, -109, 9,124,159, 97,158, 83,229, 25, 97, 16, 16, 26,139, 21,146,195,225, 17,121,150, 50,158, 20,172, 44,159, 37,203,107,190,243, -238,183, 57, 26,237,115,254,236, 42, 8,193,158, 81,252,131,159,255, 26,187, 89,205,196,106,144,130,101, 33,153,102, 53, 81, 0, -123, 55,238,243,250,155, 63,128,146, 30, 59,187, 71, 44,175,157, 37,246, 98,148, 25,185, 14,182, 65,100, 98, 4,190,181, 68, 82, -224, 97,240,172,192,151,182,129,186,152,121,220,170,167, 92,225,142, 67,103, 23, 13, 67, 55, 74,247,253,227,131,230, 44,225, 74, - 53,221,152,148,174,219,247,125,213,116,154,238,207, 60,239,228,193, 84, 44,224,147, 17,246, 24,144, 34, 26,214,248, 76, 45,222, -120,184, 49,110,247,142,180,244, 58, 1, 95,252,194,231,248,173,223,250, 77,148,148, 84,101, 73, 38, 19,176, 46,108,166, 29,196, -142,111, 95, 59,194,152, 39, 21,166,185, 6,178, 60,167,172, 28,153,109,134, 85, 61, 26, 14,121,244,240, 17,131,193, 10,210,104, -146,201,152,229, 65,143,253,131, 93,116, 93, 49, 88,234,179,191,191, 79,173, 75,132,213, 36,163, 35,238,239, 15, 89, 61,117, 6, -164, 96, 80,157,166,183,186,140,105,178,185,171,178,162, 42,107,215, 81, 22, 21,101, 89, 83, 86,150, 74, 67, 93,187,181,220,108, -127,110, 27, 57,187, 43,230,205, 10,173,137, 14,149,158, 90, 16, 44, 54,218, 3,217, 76, 4,100,179,202,104, 8,125, 79,211,110, -205,217,112,115,209,222,236,222,212, 84,169,199,166,193, 79,212, 22, 97,177, 82, 52, 99,113,225,248, 64, 52, 49,127,200,249,191, -101,103,157, 55, 98, 33, 93, 77,156, 76, 90,155, 59, 30,204,177,237, 90, 60, 57,189, 62, 73,195,113,206, 8, 99,106,172,169,168, -171,146, 34, 43,201,211,156,170,168, 92,222,134, 16, 72, 79, 57,251, 90, 43,196, 11,220,225, 69,121,206,151,110,102,107,167,230, -176, 40,172,179,196,205,172,210,198, 58,242,254, 76,160, 88,107,253, 52,245,187,125,166, 47, 93,124, 12,158,245, 15,130, 56,247, -221,118,217,243,223,155, 34, 97,191,139,177,251,227, 63,159, 60, 97,219, 18,115, 53,173,120,140,248,102,155, 29,143,242, 61,130, - 40,226,238,189,135,180,122, 3, 46,188,112,137,170,214,108,237, 28,240,112,251, 22,147,220, 49,153,123,189, 14,131,213, 13, 46, - 92, 58,203,237, 59,215,249,195, 95,249, 19,124,239, 27, 95, 98,116,120,151,159,253,197, 95,224,251,126,232,223,228,212,153, 13, -126,245, 87,254, 21,239,124,112,151,189,169,192,234,154, 78,220,226,155,191,243,219,124,233, 7,126,132,101,213,229,236,169, 21, - 54,239,222,134,105, 70, 91,133, 28,236,237, 51, 25, 30,130,177, 72,161,192, 90,238, 63,216,226,194,159,254, 49,110,190,247,117, - 4, 21, 69,154,210,105,117,201,178,156,238, 82,220,220,104,228, 51,227, 84,231,197, 93,216, 19,118,145,231, 21,244,185, 82,117, -177, 19, 87, 51,160,131,156,199, 10, 46,198, 32,206,198,239,243,241,156,156,117, 64,146,192,147, 72, 17,115,176,183,203,237,219, -119,225,214, 61,190,245,237,119,249,226, 15,254, 32, 85,158,178,182,212,101,240, 61,159,229,214, 71, 31, 48, 41,225,244,185,139, -164,101,205,240,104,202,230,246, 46, 55,175, 93, 35,136, 2,164, 23, 96,165,203,186, 14, 60, 31, 81, 85, 14,217, 25,132,248, 66, - 50,170, 43,170, 90,179, 59, 76,121,237,204, 89,244,131, 7,108,116,123,248, 97,140, 49,134,228,232,128,233,209, 33, 58, 50,180, -195, 10, 41,114,172, 78, 56, 58,120, 72,236,119,209,149,165, 76, 71, 28,108, 63,160,215,186,140,178, 53,186, 42, 25, 14,199, 46, - 13,173,179, 66,103,165,195,135,215,110,240,214,231, 46, 96, 45,108,110,237, 51, 73, 75,162,246, 18,149,174,184,126,251, 1, 65, - 24,147, 76, 18,140,217,195, 23,150,209, 97, 65, 85, 21, 28, 28,222,163,219,109, 51, 26, 37, 84,149,192,243, 5,186, 54,220,190, -179,205,234,160,205, 96,185, 77, 85,245,121,112,247, 1,151, 47,156, 39,157, 36, 92,185,120, 5, 25,121,100,186,226,131,247,222, -103,127,103,135,149,165, 1,103, 78,173, 83,100, 41, 73, 58,229,112, 40,168, 43, 75, 82,212,156,221, 56,195,133,171, 87,248,214, -123, 31,113,243,163,247,177,218,162,155,209,173,203,113,223, 37,244, 4, 81,232,211,106,183, 40, 11,137,169, 74,226, 78, 23, 33, -132,227, 36,104,195,131,135, 15,241,165, 66,121, 29, 62,186,118,147,189,131,125, 38,227, 61,206,156,217, 96,169,215,163,182, 45, -254,254, 47,254, 38, 31,236, 30,209,246, 66, 86,207,157,101,247,209, 35,214,145, 84,166,162, 46,160,221,181, 28,221, 29,242,218, -249, 85,146, 73, 78,112,169, 79,191, 29,211,178, 6,131, 37,109,108, 65, 18, 75, 4, 68, 64,128, 69, 42,139, 31, 73,252, 8,164, -103, 81,190,179,159, 5,202,173,191,130, 38, 69, 45,240,189, 6, 26,115, 12,157, 17,243,188,139, 25, 76, 11, 36, 6, 37, 20, 82, -205, 4, 90, 52,104, 83,209,116,240,222,137,107,125, 70,163, 59, 46, 60,110,231,233,240,177,210,137,252,180, 65,250,142,215,168, - 77,197,151,190,248,121,222,253,206,183, 27, 92,168, 96, 50,153, 16,248, 33,198,119, 0, 26,229, 5,212,117,141, 82,174,241,247, -188, 0,207, 11, 8, 2,193, 36, 77, 8,252,144,178, 44, 9,252,128, 7,247, 54, 41,139,130,170, 44,144, 90, 83,228, 41, 66,118, -121,244,232, 1, 75,253, 30,202,147,148, 85,137,167,156,187, 98, 60, 25, 83, 27, 77,146, 78, 49, 91,219,104, 11, 85, 85,209,234, -245, 26, 69,123, 77, 93,215,205,200,189,166,172, 12, 85,109,155,253,185,105, 2,168,236, 44,199,214, 77, 46,213,226, 99, 34, 78, - 68,133, 50, 27,195,207, 24,178,214, 52,123,116,199,218, 63,153,218,189,160,177, 89,144, 54, 47, 54,158,159,168,169,108, 42,190, -152, 99, 56, 26, 46,127, 67,169, 19,230,184,224,207,254,110, 86,196,109,243, 38, 22,111,252,143,241, 59,236,162,145,237, 25,129, - 86,110, 50,224,184,250,186, 44,169,202,130, 34,205, 40,178,156,186,170,231, 56, 88,229, 73,194, 56, 36,140, 34,252,176,225,254, -123,106, 46, 28,158,147,112,140,179, 43,138, 74, 56, 34,167, 84, 72,233,185, 87,132,144,104, 3,149,214, 46, 79,253, 88,224,244, -252,189,250, 39,165,183,125,183,191,158, 53,130,127,252,228,245,188,169,129, 88,124, 18,158,211,133,126, 28,110, 86, 44,236,123, - 31,255,239,241, 52, 27, 99, 12,173, 86, 76,167,219,226,254,230, 54,183,110,223,227,212,198, 6, 97, 24,241,202, 11, 47,240,214, -247,124,129,247, 63,188, 70, 85, 85,156,191,112,133,238,160,205,183,190,245, 54, 15, 54,247,184,112,102,132,169, 43, 70,195, 29, -246,239,189,131,170,206,176,214,130, 95,123,231, 61, 62,124,255, 26,166, 46, 49,133, 97,243,254,109, 70,247,111,179, 42,214, 56, -123,102,192, 71,239,191,205,214, 71, 31,160,140,102,125, 99,137,107,215,190, 69,150, 14,137, 34,159, 44,203, 56, 56, 58, 36,108, -117, 80, 65, 64, 59, 14,216,221, 25,114,230,220, 37, 52, 21,179,140, 59, 97,213,252,194,156, 63, 22,143, 77, 67,172, 93, 44,244, - 79, 90,137, 30, 79,242,123,188,168, 31,143,221,189, 19,222,211,227,148,164,147, 69,221,107, 58,167, 40, 10,231, 55,200,205,157, -125,138,134, 96,134,177,236, 28, 13,121,235,141,215,185,122,106,153,183,223,221,226,165, 55, 63,207, 36, 41,104,103, 37,183,110, -221,226,230,157, 59,156, 90, 29, 32, 61,143,188,168,232,132, 49, 66, 42,170,218,160,171, 10,163, 28, 90, 50, 47, 50,132, 23, 96, - 17, 84, 66,114,148,101, 28,140,224,165,151, 78, 19, 68, 17,219, 71, 41,227,225, 46,173,229, 62, 58,217, 99, 56, 42,160,227,130, - 60,178, 35,216,123,116,128, 47,246, 8,164,165,168, 82,148,168,153, 30, 29, 2,138, 48,104,147,100, 37,105,234, 14, 15, 69,106, -185,183,157,210,187,183, 67,158,101,196,113,139, 36,183,220,188,123,207,117, 62, 26,194,208, 82, 22, 5,117,169,169, 43,195,160, -237,209,110,249,156, 59,191,206,218,202, 10, 74,121,206,182, 98, 33,138, 98, 30,237, 12,185,127,127,147, 7,187, 35,150,250, 7, - 4,126,192,230,118,130,180,150,237,253,132,254, 82,139,201,116,196,107,175,188,204,209,254, 62,129, 39,185,116,233, 2, 90,215, -244,250, 61,226,184,197,210,210, 58, 31,126,116,141,251, 15,182, 81, 81,155, 75, 23, 46,243,254,251,119,184,126,253, 6,117,145, - 50,232,119, 41,146, 41,189,118,204, 36,205, 57,200, 51,122,253, 30,158,231, 83,213,154,233, 36, 97,105,121,149,118, 28, 97,132, -228,149,151, 95,165, 46, 42,182,247, 70,220,188,113, 11,235,105,124,207,146,231, 41,189,179, 23,184,185,155,240,179,191,254, 46, -214,192,171, 47, 93,224, 31,253,211,255, 47,127,237,127,253,147, 92,251,185,127,193,107,107, 17,161, 41,144,161,199,209,157,123, -124,230,133,179, 12,143,246, 40,124,201, 90,183,205, 25, 95,144, 25, 65,165, 53,149,128,200, 10, 58, 66,208, 50, 16, 73,139, 84, -224,133, 2, 63,146,168, 16,148,175,240,252, 0,223, 11, 9,188,144,192,115,112,167,192,247, 9,125, 15,207, 63, 46, 60, 2, 57, - 31,255, 42, 41,143, 57,231,194, 52,150,170, 99, 16,205,227, 43, 65,113, 34,236,200,237,206,103,217,225,206,120,236, 97,133, 11, -217, 17, 2,180,174, 29,246, 20, 75,191,215,226, 71,127,248, 43,252,226, 87,191,234,198,179,218, 32, 35,167, 1, 72,211,148,118, - 91,224,123, 97, 51,169,169,209,218, 41,185,103, 17,176, 8, 65, 20,197,248,190,207,246,230,102, 19,150,162,121,112,231, 54,131, - 65,143,219,183,111, 49, 28, 30,112,250,212, 26,117, 93, 48,153,140, 16, 66, 33, 85,192,189,205,135, 46, 82,180, 21,115,239,250, - 53,214,142,142,184, 92,191,200,217,176,213, 8,225,106,138,170,162,170, 52, 85,101,209,181,235,208,107, 61,163,100, 10,247,115, - 41,183,186,152,145,217,102,135,242,121,103, 62,211, 29, 52,202,125,119,200,153,121,222, 77,115,128, 18, 96,229, 83, 11,227, 19, -187,191,231,212,141, 39,118,234, 79,104,130,152,123,254,141, 49,238, 48,103,236, 92,255, 99,133,108,214, 15, 98,230, 85,108, 66, -174, 30, 47,230, 60,145, 92,119, 12, 77, 19,141,184,120,193, 53,212,120,210,235,178,164,204, 50,178,212, 65,165,172,118,226, 56, -225,249,196,173,144, 86,187, 69, 20, 71, 4,161,235,214,165,242, 26,197,253,241,189, 19,227, 84,242,212,117, 99, 21,212,148, 85, - 73, 94, 20,110,162, 82, 85, 20,101,125,220,169,159, 44,160, 79, 25, 77, 63,102, 65,146, 79, 20, 97,158, 67, 25, 19,223, 85,113, -127,218,232,253, 89, 66,187,199, 15, 1,150,231,140,245,159, 2,149,155, 37,143, 45, 46, 29, 78, 20,248,199, 39, 24, 11,197, 76, -249, 46,126,178,219,235,242,169,254, 42,157, 86,155, 47,125,225,139,220,191,255,136,111,126,251, 93, 66,169,136,148,207,193,214, - 30,213,106,206, 65,149,209,138, 58,236,236,238,177, 59, 60, 32,240,115, 14,139,156,143, 30, 62, 32,247, 20, 50,140, 24, 30, 29, -114,235,189,111,209,243, 37, 42,153,176,185,121,159,189,221, 45, 86,122,130, 83, 23, 47,112,243,222, 14, 97,167,203,224,212, 6, - 97,183, 77,146, 77, 72,243, 49,210,171,209,178, 98,255,232,128, 66,151, 36, 69,225, 44,111,186,230,225,189,123,180,123,109,150, - 87, 58, 39, 25,244,226, 57,167,220, 39,222,127, 54,197, 79, 46,140,220,149, 60, 86,187,250,190,127,162,208, 47, 62,142,162,137, -193, 61, 89,212, 37,190,239,225,249, 1, 7,195, 33,211,172,224, 51,159,251, 30,238,220,188,197, 71, 31,125,196,246,221, 45,170, -116,202,235,175,190,204,103, 62,243, 38,119,247, 38,172,116, 87,216,220,188,199, 59,239,190,131,242, 3, 70,163, 17,113, 24, 82, -149, 25, 85,158,225,121, 30,105, 93, 80,105,237,132, 48, 13, 12,163, 40, 50, 12, 2, 63, 12,185,120,105, 3, 38,187, 76,142,134, - 24, 43,120,112,144,210,235, 7,244,130, 26,207, 20,140,134, 19, 38,123,208,107,199, 28, 14, 43,108,125,200,250, 90, 72, 86,142, -144,161, 15, 66, 58,196,105,105, 40,202, 9,181, 81,236, 31,100,156,111,175,176,115, 56, 34,205, 45, 7, 71, 57, 82,194, 36, 27, -113,106,125,131,157,157, 17, 86, 57,235, 88,150, 78, 17,158, 96,109,169,197,213, 75, 27, 92, 62,127,154,149, 65,151,229,193, 18, - 81, 28, 59,212,102, 81, 33,164,199,229,171, 87, 41,138,146, 71,247,239,241,246,123, 31,241,206,187, 55,184,183, 61,114,190,115, -160,253,240,144,165,150,194,199,112,184,125,192,197,139, 27,140, 39, 71,124,248,209, 50,173, 86,196,247,126,207,247,162, 75, 67, - 58,173,240,189,128, 7,247,238,208,233, 45,193,254,152, 51,235,167,216,195, 16,199, 17, 89,158,179,187,179,205, 75, 47, 92,225, -165, 23,175,224, 53, 20,182,186,214, 76,146,148,189,253, 67,118,183,119, 56,115,230, 12, 69,158,209, 10, 91, 76,166, 67,170, 90, -208, 27, 44, 83,218, 12, 91, 31, 82, 87, 25,147,180,230,191,253,217,175, 51, 45, 28,253,237,253, 91, 55,249, 27,255,233, 95,227, -230,237,123,108,151, 21, 43,189, 24, 41, 42,170, 90, 98,199, 41, 43,129,225,214,225, 35, 14,166, 67,214,150, 6, 44,121,130, 88, -250, 12,167, 25,194, 66, 91, 72, 58, 72, 98,171,241, 45, 40, 31,164, 15, 42,144, 4,145, 71, 24, 5, 4, 65,216, 88,217,220,117, -232, 55,157,122, 16,184,189,184,179, 74,169,249,157,204, 21, 24, 11,168,230, 90,181,141,157,169,233,222, 23,196,113, 79, 22,149, -230,198,210,132,159, 96,108,227, 43,174,157,139,198, 19, 88,131, 83,109, 55, 66, 83,173,107, 94,127,243,117, 62,248,224,125,238, -220,185, 79,183,219, 33,138, 98,130, 32,160, 46,114,151, 87,208,234, 97, 13,206,206,153, 78,233,118,187,232,218,221,175,166,211, - 4,207, 31,178,180, 60,101,111,127,159,188,112, 80, 19,229, 75,194, 40,228,222,189, 59,244,123, 61,122,189, 30,251,251,251, 84, - 69,137, 84, 62,251,251,251,236, 13,135, 20, 53,200, 86,159, 86,187, 75,167,187,196, 52,201,121,240, 96,139,181,181,117,170,202, -184, 34, 94, 27,106,237, 32, 50,198,186, 25,137, 35,171,113,236,245,111, 18,234,132, 20,115, 45,130,131,120, 53,200,220, 6, 32, - 51,211, 96,205, 82,222,176,245,113, 60,235,124,186, 97, 23, 58,243,133,194, 57, 47,166, 79,169, 40,207, 88, 15,158,200, 91,183, - 44, 24,198,143,213,245,243, 14,125, 30,196,178,216,192, 29, 55,114, 39,114, 57, 30, 31,104, 47,150,133,197,204,246,230,125, 71, -142,171, 40,203,130, 60,115,111,186,110, 30, 79, 33, 8, 66,159, 86, 59,166,213,110, 17,182, 98,188, 48,112,235, 74, 33,209,179, -245,124,243,195, 27,227,118,243,101, 81,144,103, 57,105,146,146, 36, 41, 69, 89,186,233, 74,229, 14,126,222, 44,141,102,182, 38, -144,139, 39,131, 5,182,187,108, 44, 80,199,211, 8, 49, 15, 79, 56, 81, 4, 79, 20,247,199, 31, 14,113,194,166,246, 73, 59,252, - 69, 68,222,199,141, 95,212, 99, 31,251, 56,118,118,254, 92,136, 25,113,221,141,217,177, 46,222,241, 36,154,125, 97,246, 46,103, -118, 2,220,137,183, 65, 70, 10,107,217, 88, 95,231,104,148,208,138, 67,222,254,230,239,176,188,178,202,214,246, 22,121,153, 98, -148,101,127,188,205,169,100, 21,240, 80, 86, 33,171,140,241,193, 45, 34, 95,226, 35, 57,220,185,206, 75,231, 6,132,237, 1, 37, - 17, 34, 59,228,220,198, 57,166, 47,189, 73,245,219,223,164,127,170, 77,119, 99,137,157, 95, 29,178,253, 96,135,159,253,153,255, - 31,215, 63,122,143,155, 55,239,240,127,249,191,253, 61,246, 15, 39, 28, 36, 71,152,192,163,172, 42,166, 73, 69, 59, 92, 97, 88, -111, 99,180, 97,124,116, 0, 86, 99,244, 5,172,106, 50,125, 79,244,233, 79,203, 39,150,199,238,126,123, 18, 28, 59, 95, 37, 46, - 68,232, 42, 49,139,173,148,243, 23,252, 98,167, 62,239,112, 56,190,102, 28,173,203,107,246,107, 78, 60, 19, 4, 62,105,105,121, -180,185,195,238,206, 62, 55,131, 27, 92,121,225, 10,185, 16, 76,222,189,201,157,221, 41, 71,249, 13, 94, 46, 60, 46, 94,185,204, -189,251,119,249,157,111,126,131, 32,246,233,117, 58, 4,128,153,230, 44,251, 10,163, 36,217,180,196, 8, 65, 13,248,141,143,191, - 18, 2,227, 11,148, 54,156, 13, 67,162,170,166, 28,215,236,238,214,224, 9, 6, 27, 49,120,112,255,238, 30, 93, 43, 49, 9, 24, -165, 56, 40, 50,172, 82,172,172, 13, 40,117, 74, 85,123,120, 97,155, 73,233, 68,102, 43,107, 29, 70,163, 3, 70,147, 20,229, 89, -210,209, 33,245, 56, 97,117,169, 71, 43, 94, 97, 60, 61,164, 42, 75,134,251,251,244, 58, 29,242, 36, 39,240, 5,161, 18,156, 63, -183,202,139,175, 92,225,234, 11, 23,104, 69, 1, 82,107,252,198,214, 82,107,205,112, 50,225,112, 56, 34, 41, 43,242, 52,163, 99, - 51,222,124,101,131,239,253,204, 37,110,222,216,226,231,126,243, 67,110,237,143, 24,213,138, 60, 13, 88, 82, 21,173,113,202,189, - 59,247, 41,173,100,227,236, 69,118,247, 14,249,218,175,252, 26,167,214,150,233, 45, 13, 24, 37, 41, 15, 54,183, 57, 24, 79, 89, -219, 56,227,212,182,182, 34,157,140,185,250,226, 75,180, 95,122,153,195,225, 1, 90,120,120, 18,170,218,165,109, 21, 69, 73,153, -231, 32, 20, 66,122,224,183,152,214,130, 68,123,136,160, 69,111,229, 20,123,195, 45,116,150,131, 47,249,234,219,215,120,231,222, - 8, 3,228,210, 80,151,146,255,246,159,255, 60, 90,192,154,182,212,129, 97,185, 35,169,166, 5,195,137, 34, 86, 45,250, 75, 49, -113, 16,210, 9, 91, 40,171,168,107,237,144,176, 82,208,177, 16, 91,131, 47, 12, 97, 0, 97, 27,130, 16, 66, 95, 46,216,215, 60, -188, 64, 33, 61,217, 56,199,164, 27,107, 42,209,216,211,100,115,175, 88,136, 9,158,145,232,230,240, 26, 55,181, 83,184,235,219, -221, 14,154,244,174,102,127, 62,179, 74, 27,235,178,221,133,177, 72, 93, 53,200, 16,235, 82,194,132,117,119, 25,161,154,172,119, -144, 70,226, 99,248,145, 31,249, 17,254,233,127,255, 63,224, 7, 49, 82, 40, 52, 16,117, 20, 82, 4,196, 97, 11, 33, 44,157, 78, -136, 49,154,170,206,168, 74, 67, 85,228,160, 13, 71, 71, 99,118,118,247,248,190, 47,124,129,225,100, 76,187,221,225,229, 87,175, -160,139,154,135, 15, 30,226,123,224,121,146,173,237, 45,192,199,232,154, 59,247,239,147,217,128,176,189, 76, 86, 7,248, 58,226, -254,238, 17,253, 82, 48, 48, 49,163,201, 35,148, 18,172,174,175,128, 54,104, 42,116,179,138,243, 60,217,132,177, 40,152,233, 22, -230,175,111, 23, 81, 58, 91,181, 33, 22, 1, 64, 52,130,175,102,143,109, 42,208, 22,137,158,131, 2,231,137,106,179,251,248, 44, - 63,164,153,156, 32, 5, 86, 10,140, 20,120, 56,102,190,155, 72,219, 39, 90, 14, 97,143,109,209,243,134,116,161,217,159, 39,118, -202, 5,202,221,220, 89,193,201,251,221,220,247,214, 8,107,141, 65, 24,215, 32, 8, 43,155,175, 47,142,113,179,243,189,191,155, -216, 56,129, 92, 73,157, 87,148,105, 73, 94,214,148, 90, 99,133,117, 44,132,200,195,143, 3,100,224, 33,131, 0,225,185, 38,193, - 52,185,176, 51, 18,158,214, 53,198, 84, 84, 89, 78,149, 37, 20, 73, 58,135, 58, 85, 53, 84, 13, 87,223, 87,222,239,141, 40,247, -113,227,242,143, 3,195, 28,143,173,126,111,163,251,103,145,233,158,183, 38,248,184,136, 80,241,148,166,222, 46, 62,169, 79,227, - 89, 9, 71, 66,210,117,205,100, 60, 98,185,215,231,238,195, 77,150, 87,215, 72,146, 41,135,135,251,148, 69, 70,150,165,236, 31, - 28, 80, 86,238,137, 78,178, 41, 85,149,211,235, 46,209,110,183,153, 76,134,236, 31,108,227,133, 10, 21, 72,190,250,203, 63,199, -222, 43, 87, 73, 15,247,105,213, 21,127,247,111,253, 77, 90,173,144,189,237,125, 36, 62, 63,251,143,255, 9,167, 78,173,243,198, - 11, 87,217,158, 20,100, 81,140,151,250, 84, 70,162,100,200,131,205, 93,206, 92,188,202,245,247,190,205,210,210, 10,147, 81,234, - 70,106,101, 69,216, 14, 92, 44,172,144,159,140,239,255,180,238,253, 57,207,199,211, 86, 36,179,110, 92, 52,184,196,217, 65,205, - 83, 2, 79, 53, 84, 47, 37,137,148, 68, 9,197,187, 31,125,192,193,246, 46,129, 80,220,248,240, 6,143, 30, 62,226,236,229, 43, -252,208, 31,249, 81,174, 93,191,129,180, 22,207,243,121,112,231, 46, 15,239,220,101,173,211, 33,175, 28,128, 65, 40, 15, 21,182, - 48,190,162, 52, 53,147, 60,161,106,190,174,215,172, 13,102,168, 69, 37, 64, 97, 56,218, 57,160, 40,106, 14, 74,203,122,183,197, - 82, 38, 8,234,154, 42, 55, 28, 86, 21,177,144,196,177,135,150,138, 51, 23,207, 98,172,179, 7, 69, 97, 72,183,219,161,219, 83, -180,194, 54,113,224, 19, 69, 43, 40,207,137,208,246,183, 15, 81, 6, 46, 94, 57, 71,110, 44,129,167, 24,111,103, 76, 68, 70, 29, -134,236, 15,167,180,164,224,202,133, 85, 94,122,241, 42,203,107,171,136,176,205,238, 40, 97,247,112,200,157,251,143,216,220,222, -103, 56, 74, 73,139, 10, 83,107,206,158, 63,199, 75, 47, 92,102,235,250, 71,156,107, 75,190,244,217, 23,249,222, 79, 95,228,213, -151, 46,241,139,191,241, 14, 63,255,141,143,120, 56, 45, 56,144,112, 88, 8,186, 67,193,114, 55,228,237,183,175, 19,196, 1,123, - 7,251,124,234,234, 25, 46,156,215, 92,186,122,149,254,218,105,118,246, 14, 48, 70,227,251, 30, 73,158,147, 74,120,248,224, 62, -103,206,158, 33, 80,138,107, 31,125, 72,232, 73,166,147, 49, 75,253, 37,234,170, 98, 58, 30, 83, 27, 88, 90, 62, 98,237,212, 89, -202,218,146, 79, 71,248,109, 31, 91, 79, 81,229,148, 52,133,180,213,225, 95,190,123,147, 68,231, 40,161, 29, 93, 84,216, 70,180, - 20, 33,100, 65,220,175,185,176,226,145, 71,134, 97, 10,165,182,220,184,191,205, 31,106,119,233,174,109, 32,252,128,122,154,208, -145, 2, 79, 64, 91, 24, 66, 1,190, 15, 81, 87, 17,183, 92,170, 85, 16, 52, 94,244,198,138,230, 55, 59,244, 89, 39,233, 41, 57, -183,171, 73,197,220, 70, 57, 19,246,138,121, 76,178, 99,125, 31, 23,119,121,194,194,182,248,126,227, 48,114, 93,166,177,160, 27, -152,203, 28,188,232,196,103,110, 55,238,138,157,169,103,153,228,150, 51,167, 78,241,253, 95,248, 2,191,249,155,191, 77,191, 55, -160, 44, 43,252,192, 67,226, 99,180,193, 83,150, 86, 20, 82,213, 53,121, 94,224, 7, 45,164,231, 64, 54, 65, 16,144,102, 41,167, -206,158,225,204,153, 13,146, 52, 65, 42, 15, 97, 37,127,241, 47,254, 69,110,221,186,206,237,187, 55,168,140, 37,207, 11,164,240, -217,217,155, 64,220,161,165, 74,194,184,164, 28,142, 48, 2,140, 12, 49,140,136,194, 16,165, 36, 69,181,205,217,179,103, 8,130, -144, 60,207,209, 74, 59, 29,145, 82, 78, 80,232,169, 5,109,129,152,119,234,114, 22,108, 34,196,177, 88, 86, 90,172,148,110, 58, -103, 13, 70, 55,170,245, 38, 31,221, 88, 57, 27,112, 44,236,171, 79,180,192,243,195,212,140,169, 97,165,108,120, 89,226, 41, 99, -240,231,235,128,236,227, 45,255, 49, 91,235,233, 28,148,134,166, 55,119,252,204, 80,216,115,142, 61,115, 11, 29, 11,226, 62,163, -107,234,170,164, 42, 29, 33, 48,205,114,106,173, 27, 41,130,154,147, 2,163, 40, 34, 8, 92,135, 46, 16,205,181,100,230,212,199, -186,118, 26,135,170,202,201,211,140,116,154, 48, 25, 79,153, 76,147,198,113,226,166, 52, 78, 40,234,127,119, 69,253,147, 20,230, - 79, 82,220,127,175, 62,242,223, 11,114,246,169,186,128,217,190,228, 99, 10, 61,243,209,207,211, 66,102,142,167, 8,101, 85,128, - 53,140, 39, 35,134,163, 33,201, 52, 33,138, 2,166,147, 17, 82, 24,119,115,240, 20,182,212, 88, 12,163,209,136, 91,183,110,113, -235,134, 19, 34,221,123,120,143,239,124,243, 27, 84, 89, 70, 89,229,220,189, 59,162,156,110,115,249,212, 41,126,224,251,191,159, -213,149, 1,189, 65, 15, 35, 60,242,218, 69, 42,164,197,148,221,237,219,172, 3,163, 81,129, 41, 53, 34,240,144,194,227,218,173, -219,252,153, 63,250, 3,252,234,207,255, 52,201, 36,165,213,238, 80, 25, 77, 94,148, 4,237,176, 81,141, 62,198,104,127, 82, 51, -247, 68, 31,255,201, 10,190,125, 34,112,224,196,227, 54,139,181,156,189, 40, 23,118,242, 66, 56, 33,216,157, 91,183, 57,125,250, - 44, 75,237, 22,183,110,126, 68, 86, 86,188,251,157,247,185,244,154,224,205, 55,223,164, 46, 11,118, 30, 62, 98,103,107,139, 58, -207,137,253, 0, 79, 26, 38,101,193, 97, 90,224,251, 33, 71,121,198, 52, 77, 41,154, 49, 91, 32, 5, 45, 47,192, 52, 62, 81,217, - 64,179,242,178, 68, 99,153,214,150, 3, 41, 24, 31,101,188,214,238,225,215,154, 90, 67,237, 73, 10,109,232,198, 62,203,203, 3, - 52,150,209,100, 2,198,178,186, 54,192,154,154,229, 65,143,100,146, 80,226, 83,150, 41,158, 50, 36,147,148,118, 43,102, 50, 77, - 88, 90, 93,226,222,163, 77,146,209, 4, 99, 4,195,170,230, 40,157,210,247, 5, 87, 78,111,240,210,139, 87,232,118,186, 76,179, -138,155,239,222,228,219,239, 95,231,206,246,144, 73, 89,207,111,116,224,198,113, 47,156,123,137,255,224, 63,251, 91,252,187,127, -254,127,196,240,254,125,210,163, 33,159,253,226,139,188,254,234,171,252,248, 15,188,201,114, 71,242, 75,223,186,201,189,189,156, -157, 28,242,160,197,120,191, 32, 28,142, 89,234,123,224,133,228,132,132,189,101, 14,198, 46,234, 84, 91,195,246,206, 54,175,190, -242, 10,254,242,128,163,195,125, 38,147, 49,123, 59, 91,156, 59,119,150,208, 87, 4,189,142, 11,120,241, 61,146,241, 8, 33,192, -247, 61,234,170,100, 50, 30, 35,188,128,218,122,140,234,146, 73,145, 16,162,201, 85,151, 27, 59,154,135,195, 9, 66, 25,151, 19, - 2, 88,105,177, 40, 60, 13,171, 29,203,133,243, 33, 81, 54,193,250, 18,225, 1,190, 96,146,164,228,149, 6, 63,192, 11, 99,194, - 73, 66,208,168,221, 35, 1,113, 4,113, 91,208,234, 5, 78,221, 30, 6,132,190, 34, 10,125,194,208, 39,108,172, 84,158,239, 17, - 6, 65,131,121,149,120, 13, 29, 78, 52,194,216,217, 88,214,217,171, 26,109,145,181, 39,136,150,162,185,227,203, 5,128,146, 56, -110, 7,143, 25, 15,194,204,239, 57,198,104,102,203,122, 93, 59, 27,154, 39, 29, 5, 77, 42,209,228,139,215, 88, 97,121,227,141, - 55,216,221,217, 99,123,107, 23,169, 36, 85,165,137,252,160,201,243, 22, 84,101,137, 31,198,236, 29,140,233,175,244,240, 98,119, -112,146, 94, 64,158, 23,236,237,108,211, 95,234,210,235,245,208, 6,138,188,196, 8,201,167, 62,253,105,240, 36,191,248,203,191, -138,242, 58,236,110,237,179, 63, 44, 81, 85,142,106, 27,142, 38, 83, 36, 62, 94, 16,145, 63,218,102, 60,205, 24, 44, 13,232,118, -218, 76,146, 20,172,164,213,138,105,119, 58,116,151, 92, 51, 80,235,186,177,154,185,157,186, 84, 51,151,192,241,154,237, 56, 77, -108, 65,119, 32, 92,232, 14, 6,215,177, 35, 26,184,139,104, 72,173,226,177,130,107,231,108, 11, 33,154, 3,151,176,115,251,173, -157,233,116,236, 39, 95, 33,158,172, 5,226,100, 70,137,253,152, 58,240,148,183, 89, 33,159, 21,120,187,192,221,182,198,161,192, -117, 89, 83,230, 37, 89,154, 81, 85,174, 0,207,234,134,187, 62,253,121,195, 99, 27, 78,253,220, 86,221, 8, 22, 29,193,175,162, - 44, 10,178, 52,101, 58, 73, 24, 79,166, 36, 73, 78, 85,187,207,145,194,101, 8, 40,165, 62,174,168,139,223, 87,167,254,180,200, - 86,219,216, 25, 30, 47,198, 79,132,202, 63, 39,153,237,187, 21,232, 61,213,114,240,172, 2,181, 40,186, 56, 49,190,127,242,123, -154,139,194,148,162,170, 10,170,170, 66, 73,193,185,243,231,121,225,234, 85,146,233,148,218, 24, 60, 37,185,125,235, 38, 8,197, -100, 60, 69,107,195,181,235, 35,167, 40,142, 3, 46,156,190, 64, 63,140,216, 88, 89,102,105,208, 35, 12,125,202,116,138,210,154, -237,241, 1, 91,163, 45,234, 50,163,229, 7,212,121,201,248,240,128,181,213,152,218,100,212,182,205,246,163, 45,231,157,164,198, -243, 12,119, 30,222,101,249,236, 95,224,252,197,171, 20,163, 9,211,163, 49,247, 30,221,115,254, 82,227, 86, 44,198,216,103,218, -255,158,167,129, 56,126, 60,196, 83, 21,159,207, 42,232,243,142, 93, 46, 30, 6, 23, 56, 3,205,233,219,143, 2,250, 43, 43,252, -198, 55,127,135,229,126,143,165,165, 37,142,118,246,104,245,150, 16, 69, 69, 58, 28, 18,199, 17,198,104,142,198, 71,238,243, 76, -133, 31, 40,168, 4,133,214,140,138, 4, 97,181,251, 90, 82, 16, 69, 17,212, 21, 26, 73, 13,152,230, 64, 97,177, 76,171,138,229, - 48,112,127, 14,248,113,139,173, 44,193,139, 3, 70,149,225,194,185, 21,234,209,152,149, 83, 27,132,173,152,251,143, 30,146,231, - 21,237, 56,162,214, 2,101, 53,201,100,132,209,150,201, 36, 33, 73, 38, 72, 41, 73,167, 57, 65, 52,224,236,229, 11, 36, 7, 7, -120, 85, 77,169,107, 50,223, 35, 43,106,148,144,116, 98,159,139, 23,207, 18,197, 49,219, 7,135,252,238,141, 91,220,222, 25, 49, - 46, 52, 37,130, 90,136,121, 78,183, 16,110,227,251,171,191,246, 27,252,241, 63,253,231,152, 28,236,176, 82,215,248,155, 21,245, - 47,125,132, 30, 11, 46, 92,189,192,231,222,120,145,203,231,214,249,103,191,248, 13,222,125, 48, 33,177, 26, 25,134,180,253,154, - 51,103,214, 88, 94,238,179,127,184,207,251,215,111, 19,199, 46, 17,112, 48, 24,224,121, 62,105,150, 98,235, 26,165, 20, 89,154, - 18,250,138, 60, 77, 8,123, 29, 60,207,195, 88, 75,150,229,132, 97, 4,184,200,201, 78,167,139,239,251,164, 69,141,106, 47,179, -187,255,128, 81,154, 19,166, 25, 94,107,141,239,188,253, 62,153,177,232,121,119,165,193, 42,164, 9,104,219,146,243, 29, 75, 71, - 25, 42, 27, 51,169,106, 50,235,225, 71,109, 94,125,225, 37,206,172,174, 83,158, 75,233,182, 91,100,135,194,141,219, 21,132, 33, -180,219,130,168,235, 19,181,124, 90, 97,139, 40, 8, 9,124,233,114,220, 67,159, 40, 10, 9,195,160, 9,101,113, 30,244,153,218, -218, 83,202, 89, 87,165,116,168, 84,173,143,193, 83,130,199, 66, 70,196, 44,254,227, 9,161, 41,243,206,241,120, 93,103,165,179, - 76, 41,229,205, 25,224,198, 58, 17,155, 80,198,249,172,133, 68, 74,237,190,190, 54, 32, 44, 95,249,202,151,249,229,175,254, 50, -123,251,135, 46,193, 44,112,118,175, 32,244, 49,104, 10, 3,211,220,112,243,189,107, 68,113,135, 65,127,137,184, 19,210,239,119, -233,117,123,212, 69,198,214,163, 17,103,207,157,199,139, 35, 39,152,242,125,222,248,204, 91,228, 90,240, 79,254,187,159,227,225, -131, 49, 70, 74, 58, 94, 76, 90,104,172,173,232,181, 91,104, 43,168, 43,195,206,222, 33,251, 7, 71,196,113, 72,183,221,161, 42, -107,214, 86, 87,209,181, 5, 90, 44, 45,117, 9,130,128,188,200, 93,183,222, 68,149, 74,117,108,101, 21, 51,253, 76,211, 81,207, -139,251, 44,235, 65, 58,206,175,197,121,176,157, 48,177,201, 5,183, 46,107,220, 90,129, 53, 26,225,205,214,128,170,177, 22, 51, - 79, 64,155,239,190,197,147,162,186,231, 21,244,199, 91,244,249,138,213,206, 18, 53,237, 2, 60,220,158,152,192, 31,239,248, 23, -212,237, 98,241,235, 52,133, 94, 27,108, 93,161,171,138,186,104,104,111, 89, 65,217, 20,105, 48,243,200,222,217,184, 94, 27,141, -173, 29, 39, 95,215, 78, 24, 57,139,177,213,117, 77, 85, 86,205, 30, 61,103,154,100, 76,166,206,151, 62,183, 19, 54, 66,227, 48, - 8, 29,251,253,153, 62,191,231,128,102, 62,174,184, 62,175, 99,183, 11, 69,242, 89, 93,251,243,146,216,158,182,103,127, 90, 8, -201, 83, 11,251,204,131,253,216,148,193, 26,243, 84,139,215,252, 52,198,211, 97, 43, 0, 97, 24,114,254,220, 89,172,149,124,207, -231, 63,207,191,252,149,175, 81, 27,205,181, 27,183, 17, 82,144,107,131, 31, 69,132, 97,200,250,218,128, 94,183,139, 39, 20, 81, - 16, 64, 93, 18,216,154,100,111,155,123,187,155, 76,215, 6,180,218, 45, 20,146, 80,120, 4, 97,204,218,250, 26,117,153, 17, 5, - 1, 86, 27,178, 94,151,178, 58,162, 29,120, 28,165, 16,183, 99,146,170, 66,138, 18, 93,167,236,238,237, 16,180, 59,200, 32,198, -243, 53,210, 43,136,219, 61,116, 51,252, 22, 11, 48,134,103, 58, 10,236,239,113,132, 98,159,173, 76,117, 47,122,154,142,200,206, -133,114, 44, 32, 21, 63,188,121,139,107,183,111, 50,201, 51, 38,105,198,214,158,194, 42, 65,128, 71,251,240,136,177,242,121,127, -103,139,110,183, 67, 16,135,164, 69,206, 56,207, 32, 53, 72,161, 28, 45, 14,129, 39, 29, 46, 52,244, 60, 23, 5, 89, 89, 10, 91, -185, 24, 72,225, 49, 83,161,100,214,144, 40,193,210,114,159,124, 56, 69, 26,131,215,246, 57,164, 70,251,146,241,116, 74, 47,240, - 28, 29, 48,138,121,180, 51,162, 29,194,202,160,207,209,112,204, 96, 41, 32, 75, 11,198,227,132,213,181,101,146,244,128,110, 43, - 70, 32,153,228, 5,189,158,199,100,123, 23,207, 15, 25,231, 5, 59, 89,133, 4, 6,158,228,234,185, 13,226,200,231,131,235, 55, -185,187,187,207,131, 81,202,176,178, 24, 33,209, 77, 1,153,221, 90,108,131,172,172,171,154,253,189, 7, 88, 79, 51, 2,138, 74, - 98,134, 30,191,250, 75, 31,176,177, 59,228,135,190,252,105, 46,117,187,252,232, 43, 23,145,250, 46,239,239, 37, 28,165, 22,218, -146,164,200,233, 21, 33,151,175,188, 64, 16, 4,100, 73, 66, 86,106,228,100, 74,224,249,140, 70, 35,250,109,103,171, 57,215,239, - 83,150, 57, 97,224, 97,173,101,119,111, 31, 33, 61,198,211,196,133,102, 24,219, 40,181,115,186, 97,135, 56,110,225, 85, 6,145, - 14,201,143,246, 8,131,128,195,188,230,254,225, 17,181,138,155,241,152, 70, 89,141,176,130,208,194,197,174,229,135, 63,219, 37, - 27,105,240,207,146,249, 37,137,153,114,245,202, 43,188,246,185, 43,156, 91, 30, 48,221,223,227,252,217,117, 70, 91, 15,136, 36, -116, 91, 18, 47,132,168, 27, 16,119, 29, 66, 53, 84,161, 27, 99,206,109,107,178, 25,197,187,162, 46,155,113,174, 20, 52, 49,170, -199,162, 46,139,117, 4, 49,115,220,125, 49,119,102,204,155,237,133,224,143,217,238,221, 62,134, 51, 21,200, 6, 5, 43,140,117, - 69, 92,184,165,173,231, 5,199, 5, 66,219,249,142,223,243,148,219,187, 26,135,147,254,202, 15,252, 0,191,240,139, 95, 37, 43, - 11, 20,224, 43,143, 90, 27,178,170,162,146, 1,239, 92,127,128,198,227,226,229, 85, 10,235,145, 22, 6, 47, 41, 89, 89,245, 16, - 42,196,152,130,189,221, 29, 86, 87, 78,161, 4,142,239,223,142,248,220, 91,111,177,183,159,241,247,255,155,159, 33,110, 71, 24, - 36,227, 73, 74,233, 91,116, 9, 89, 89,178,180,178,236, 20,248,141, 74, 95, 73,197,112,164,152, 76, 83, 58,237, 22,253, 81,196, -232,168, 75, 16, 6,172,175,175, 17,183,226,102,117, 97, 93,113,247,212,194, 52,206,137,206, 84,211, 77,155, 70,123,228,138,184, - 69,122, 62,101, 45,208, 86, 35, 2,133, 41, 43,180,133,178, 46, 81,248,110,244, 46,132, 83,232,203, 0,132,135,182,224,207,252, -226,226,164, 30,104,102, 67, 19, 79,177,190, 61,123,130,123,162, 8, 60,166,123, 59,190, 7, 90,219,140,215, 57, 46,230,214,204, -246,231,118,206,121,159,239,233, 27,230,188,235,210, 43,202,204,137,218,138,162,164,104,132,108,178,201, 76,119,171,162,227,137, -131, 53, 6,211,164,221, 25, 61, 35,208,185,224,151,178, 40,201,210,156, 36, 73, 25, 79, 82,166,105,142,174,181, 3,250, 40,133, - 31,184,131,108, 16, 4,199,157,250,211, 20,238,255,186,127,125, 82, 15,251, 31,244, 47, 49,139,207, 59,230, 26, 62, 93,113, 57, - 59, 0, 60, 38,189, 92, 28, 25,207,198, 40, 2,248,214,183,223,229,209,230, 33,158,239,211,237,247,249,212,107, 47, 19,134, 62, - 73, 81, 49,154, 78,201,242,156, 52,157,178, 59, 61, 66,152,134, 76,103, 52,175,191,112,137, 23, 95,121, 1, 95, 88, 58,189, 14, - 66,121,148,185,198,179, 62, 75,189, 54, 65,168, 24, 38, 41,187, 59,123, 84, 69, 73,232, 89, 44,154, 73, 61,101,100, 98,114,163, -208,194, 96,109,134, 39, 67,242,188,192,138,144,165,229, 13,174,223,223, 97, 58, 73,233,246,150, 8,162,150, 75,159,211,245,220, -189,240,123,141,169,125,222,112,231, 89,135,189,185,211, 96, 14,172, 57,249,247,117, 93,115,227,250,117,190,248,133, 47,178,181, -187, 77,150, 36,220,191,255,136,172,172, 9,163, 22, 86, 8,142, 38, 99,246, 15, 15, 81,161, 59,233, 6,161, 79,141,102,120,152, -226,251,238,223, 12,176,172,244, 98,170,162, 98,146, 22,115,206,189,187,175,168,249,129,114,105,169,207,104,116,196,118,146,179, - 46, 61,122,173, 54, 85, 93,208, 10, 66,116, 85, 51,232,199, 20, 73,193, 97, 81,210,233, 78, 88, 81, 17,145,175,232,118,218, 12, - 15, 71,116, 99, 31,163, 35,198,227, 9,190, 31,145,166, 53,121, 1,161, 15, 71,135, 21,167, 47,159, 71,120, 62,133,177,108, 62, -216,102, 98,156,152, 37, 86,240,217, 23,207,114,250,204, 10,105,158,242,104,127,200,163, 81,206,176,130, 90,138, 19, 98,196,153, -120,231,196,141,202, 10,188, 10,150, 61,133,213,112,246,211,159,226,236,167,174,242,247,254,201, 63, 33,166,226,181,179,103,137, - 91, 1, 95,121,227, 2,217, 55,174,115,109, 88,179,151, 24,190,125,115,143,228,116,206,121, 35,217,216, 88, 39, 73, 50,170,170, - 70,174,173,146,154, 28,107, 12,237, 40,166,215, 95,230, 96,111,135, 86,228,147,164, 25,105,150, 83, 25, 67, 50, 77,231, 49,161, -198, 88,188, 32, 4, 47,198,111, 45, 17, 68, 1, 70, 87,248,249,132,190,167,136, 58, 45,118,239,110, 17,232,156, 0, 69, 5, 40, - 99,136, 45, 72, 81, 51,136, 5, 63,246,133,243,124,250,165, 46,195, 29,184,240,218,151,104, 15,119,185,244,217, 37,218, 81, 72, -232, 73,100, 93,184,157,241,153,117,110,198,130, 94,232, 19,134, 22,191,227, 19,116, 34, 90, 97, 76,203,143, 8, 2, 71,139, 11, -155,209,186,239, 57, 52,172,211,188,200,121,178,218, 12, 42,229, 82, 1,157, 26,189,169, 51,115, 91,175,105,178,183, 93,103, 40, -143, 59,204, 57, 0, 69, 55,221,227, 44,244, 68,156, 88,204, 30,239,220,221, 13, 92,235, 6,138, 35, 36, 22,229,172, 72,118, 38, -200, 83,184, 69, 4,212,117, 73, 28,249,252,240, 31,250, 65,190,254,235,191, 65, 58, 77,157,143,222,243,168,240,120,247,250, 93, - 70,133, 96,117,109, 29, 47, 90, 34,234,244,137,218, 29,162,110, 11,225,181, 17, 50, 32,201, 15,155, 96,144, 3, 4, 10,233, 9, -218,180,241,195, 14,127,236, 71,191,140,231,133,252,131,127,252,207, 41,178,148,180, 16,244, 91,146, 34, 41, 8, 91, 30, 71, 71, - 7,120,210,119,235,196,162,192, 90,203, 52, 73,208, 90, 19,199, 17,235,131, 62,182, 54, 40, 79,146,231, 37, 43, 43,203,172,172, -174, 16,197,145, 43,122,114, 97,189, 38, 23,225, 30, 2,213,132,162,204, 80,167, 6,139, 17, 30,211, 50,231,254,195, 77,110,223, -190,199,225,254, 8,180,165,215,233,209,138, 66, 86, 6, 61,206,159, 63, 77, 47,140, 49, 66,225, 9,151,170,166,236,241, 98,228, - 68, 19,119, 76,100,253, 68, 26,170,239,190, 86,125,204,250,113,102,213, 53,110, 15,174,235,138, 42,111,186,244, 36,165, 40, 10, -234, 90, 35,133,211, 3,205, 72,123,243,209,187,157,141,221,205,156, 66,103, 27,107,100, 93, 85,228, 89, 70,158, 21, 76,167, 41, - 73,146, 81,150,122,174, 99, 8,131,128, 40,242,137, 35,231,117, 63,209,169,219, 79,108, 62,251,131, 41,232,207,203, 76,255,215, - 86,204,231, 8,212,199,246,228,143, 55,168,139,227,148,199,148,226, 79,250,179, 37,126, 43,230,181,215, 94,161,211,221,162,215, - 95,102,154,164,236,239,239,185, 48,140,218,146,228, 5,189,126, 7, 79,106,144,146,126,183, 15,218,146, 76, 70, 68,157,144,118, -183, 69,168, 4,126, 24,112, 52,201,200, 18,205, 82, 55,198,168,154, 66,151, 84, 10,252,149, 85,138,180, 70,245,123, 4, 45,197, -178,172,121, 33, 94,102,245,101,195,219, 55,190,195,205,187,239, 34,144, 4,170,205,205, 27,155,156, 62,115,129,235,223,249,160, -137, 44,116,207,110, 85,107, 60,121, 60,181,152,191, 0,254,128, 31,243,167, 21,116, 99, 12, 86,202,103, 30, 36,124,225, 17, 74, -143,223,250,245,223, 66,249,138,239,255,222,207,241,210,229, 43, 76,178,154, 73, 86, 97,109,201, 7, 31,188, 71,133,225,224,240, -112,238,192, 48, 89,233,196, 61,218,208, 10, 3,190,255, 51,159,226,223,249,183,254, 2,119,110,220,224,191,249, 71,255,140,131, - 73, 70,220,142,217, 62, 26,147,214,213,220,201,161,139, 20, 97,106, 42, 1, 91,147,132,141, 94, 15, 81, 11,116,161, 57,183,188, -132, 68,241,104, 47,161,163, 4,183,239, 60, 66, 5, 33, 86, 43,198,163,148,186, 40, 81,198,176, 87,215, 28, 14,115,206, 94,108, -211,237,175,176,179,239,108, 93, 82, 73, 90,126,196,254,120,202, 65,150, 51,198, 82,214,208,149,138,171, 27,109, 94,122, 97, 29, -131,225, 59, 31,220, 96,148, 25, 38,181,161,146, 46, 55, 89, 88,221,136,118,196,211,237,132, 86, 33,172,166, 47, 20, 75,194, 16, -116, 44,127,234,223,252, 83,252,212,207,255, 20,211, 2,126,225,253, 27,172,246,125,206, 71,150, 23,150, 67,118,199,150,163,218, -103,168,107,238,236, 78, 41,178,187,140,142,198,156, 57,125,138,170,168,184,117,243, 14, 47,188,112,149, 86, 39,102,239,240,136, - 48, 90, 7,169,216,217,221,199, 83,146,168, 21, 19,197,109,186,189, 37, 76,173,241,252, 16,223, 15, 8,227, 54,210,115,191, 91, - 25,240,112,154,179, 61, 44,208, 38, 64, 91,193, 70,175,224,207,127,190,195,214,161,224,163,131, 2, 35,219, 92, 30,156,161,215, - 83, 92, 62,223,227,205, 11, 33,121, 49, 66,245,206,242, 96,235, 16, 47, 20,232,108,138,167, 13,173,206, 26,195,163,125,218, 43, - 3,186,171, 75, 68,177, 34,142, 60,226,174,135,106, 7,248, 81, 72,228,181,105,121, 33, 94,232, 53,193, 45,178,137,182,117,251, -254, 32, 8,230,249,232, 82, 58,129,151, 53, 6,164, 90, 88,253, 52, 80, 18, 99,154,238,218,145,206,142, 41,150, 6,107,196, 60, -238,114,230,153, 54,198, 32,156, 79,237,100,114,151,153,173,230, 84, 51, 26, 93,160, 95,206, 70,254,179, 2,176, 48,169, 50, 66, - 80, 27, 77,167,221,230, 7,190,244, 37,126,247,155,111, 51, 26,141, 17,192, 71,119,183,185,118,231,144,160,183, 65,105, 61, 14, -134, 19, 44, 30,101,105,217,221, 59,228,250,245,155,188,242,210, 21, 58,221, 21,170,108,159,201,100,130, 20,138, 40,246,169, 14, - 50,226,118, 69,212,178,124,229, 43,159,103, 82,215,252,215,255,240,103, 72,178,138, 42,169, 24, 44,117, 64,149,216, 50, 69, 88, -151, 98,183,180,180, 68,146,166,136,102,119, 94,153,154, 64, 56,173,193,233, 51,167, 57, 26,142,157, 61, 43, 47, 88, 89, 89,165, -183,220,195,247,220,186,193, 44,218,139, 23, 89, 22, 77, 81,215,192,209,209,136, 95,254, 87,191,197, 79,255,220,175,112,227,222, - 3,166,121,141, 48,138,192, 11,232,180,218, 92, 58,127,142,183,222,124,157,219,219, 67,206,174,118,121,237,149, 23, 88, 93,233, - 32,133,231,184, 2, 11, 80,149,121, 13, 89,152, 38,219,167,172, 74,159, 63, 88,180,159,224,131, 78,234,138, 26, 52,215, 99,159, -122,108, 59,171,203,146, 34,203,201,146,148,178, 40,209,250, 88, 32, 28, 4,129,243,163,123, 30,202,243,230, 86,236,121,116,239, -236, 96,160,157,125, 45,203, 82,210, 36, 97, 58,201, 72,167, 41, 69, 81, 97, 44, 4, 82,225,249, 14,125,220,138, 66,162, 56, 36, - 12, 67,212,231, 94,187,240,147,178,241,110, 44,176, 91,142, 79,182, 60, 37, 79,123,126, 17,219, 57, 59,119,150,253,250,180,241, -244,211,118,235,143, 63,144,139, 31,251, 56,108,230, 89,123,251, 79,162,188,127,226,207,197, 99,102, 59,187,248,188, 53,123,140, -185,218, 80, 83, 84, 53,101, 93,163,181,105, 78,244, 13,175,188,185,105, 56, 28,165,154,251, 97,183,182,182,184,113,243, 54,135, -135,251,152,170,164, 29, 69,132, 81, 15,109, 21, 90, 10,164,239, 44, 32,121, 94, 48,205, 10,146,170, 38,110,247, 89, 93, 59, 67, -127,176, 78,167,191, 78,216, 89, 33,236,175,209, 90, 59, 69,171,211,103,146, 85, 24,169,240,162, 16, 21,121,200, 64,145,151, 5, -105, 82,112,243,198, 61,172,242, 57, 28, 79,152,166, 21,120, 45,218,189,101, 46, 93,186,200,155,159,186,202, 7,239,188,131,173, - 42,130,208, 39,136, 67,164,239,200, 78,199,193, 45, 98,145,206,112, 98, 63, 36,143,165,111,199,234,207,121,204,161,120,234,212, -194, 29,114, 92,102,248,140,218,165, 22,224, 51,204,197, 72, 13,134, 81,186,157,144,106,132, 54, 59, 59,123,188,251,209,117,138, -186,230,209,195, 7,236,108,111, 83, 22, 37, 74,121,220,122,116,151,189,221,125,222,124,229,101,166,163, 49,121, 89,147,213,154, - 73, 94, 35, 53,188,241,210, 21,254,242,191,253, 63,225,223,250,243, 63,206,203, 87, 47,240,198, 27,159,230, 75, 95,254, 34,223, -247,125,223,195,159,254,211,127,130,105,146,114,237,246, 29, 76, 35,106,242,173,165, 43, 36,149,177, 84, 8,210,170, 38, 8,125, -186,145, 79, 91, 57,107, 82, 89, 84,164,165,166, 86,150,210,104, 58, 97, 72, 53,206,241,149,219,199,230,121,197,169,139,103, 88, - 62,181, 76, 8,196,161,199,242,169, 13,202, 60,103,165,187,196, 4,203,245,173, 61, 34,223,199, 22, 53,129, 39,248,212,165, 37, -150,187, 17,191,253,206, 29, 30,238, 38, 76, 75, 77,102,172,251,190, 0,105,155, 65,146,120,204, 9, 58,123,147, 22,139,100,201, -214,188,226, 73,178,173,109,110,252,210,215, 25, 31, 78,153,234,148, 47,127,254, 20,239, 92,223,231, 48, 43,233, 4,154, 0,203, -118,102, 24,225, 58,199, 58, 55,244,186, 17, 81, 32, 88, 90,234, 17,197, 81,195, 26, 7,141, 37, 77, 11,162,184,135,144, 33,221, -238, 82,179,115, 23,180,226,152, 78,183,143,192,162,117, 73, 93, 87,148,101,197,100,154,178,178,178, 78,212, 25,176,191,191,207, -157,187,247,176, 6,146,163, 35,206,174,172,178,214,233,176, 28, 24, 94,218,232,112,101, 57,102, 41,204, 81,213, 24,116, 77, 94, - 10, 14,199, 25,198, 86,180, 34,133,194, 58, 53,112,220, 70, 70,109, 14,167, 57,147,195, 29,246, 54,111,211,237,119,136,219, 49, - 81, 20,209,142, 98,226, 32, 34, 12,124,130,224, 56,180, 37,240, 61,134, 7,251, 68, 65, 64,167,221,198, 83,162,225,142,207,162, - 86,103, 72,226,198,117,225, 29, 99, 95,143, 85,237,114,158, 7, 39,132,117,100,185,230,240, 46,103, 62,108, 37, 17,141, 69, 14, -121,236,170,152, 99, 71,109,243,118,108,252, 4,219,136,243,148, 56,246, 93, 53,207,169, 49,134,178,114,187,212,208,247, 25,172, - 44,147,106,203,183, 62,124,192,239,188,179, 3,126,140, 10, 2,164,112,252,248,180,168, 25,167, 5, 42,136,169,234,146,118, 59, -160,223,239,178,180,188,198,180, 48, 8, 63,166,170,220, 56,247,232,112, 68, 93,129,181, 5, 87, 47,159,227,202,149, 75,220,184, -187,201,246,112, 66, 94,185,194,145, 78, 19,146, 36, 35,244, 61, 66, 79,129,173, 73,178,132,162, 44,230, 56,210,162,118,118, 44, - 4,140,142, 70, 20,121, 65,149,231,152,162,194,179, 78, 71,224,135, 33, 40,137,109, 2,112,220,218,195, 96,165, 34,183,138,175, -253,214,183,248, 91,255,229,255,131,255,254,103,127,133,173,253, 67,178,202, 98, 16, 24, 33,208,214,144,150, 5,219, 7,123, 92, -187,125, 27,233, 7, 96, 21, 71,227,148,131,225,132, 86,111,224,174, 63,233, 14,243, 46, 2,183, 41,175,198,130,149,115, 75,218, - 19,173,152, 61,134,160,139, 70,177,110,102, 30,167, 38,100, 10,163,155,195,155, 70,204, 57,252,238,160, 39,148, 66, 41, 7,133, -177,205,189,202, 34, 23,130,190,154,177,123, 93, 82,231, 25, 69, 90, 48, 29, 79,152, 78, 82,138,188, 68, 91,103,109,140, 67,143, - 86, 59, 34,142, 35,130, 40,112, 78,135, 6,136, 99,106,131,169, 12,186,121, 78,234,178,162,200, 10,210, 52, 39, 73, 75,146,164, - 36,205, 75,140, 53,115,237, 72, 28, 7, 14, 92,211, 10, 8, 91,238,223, 84,159,125,245,194, 79,206,118,230, 39, 11,102,131, 77, -125, 28,159,186, 88, 64, 23,212,203, 98, 1,213,250,180, 98,251,100, 65,126,190, 37,234,227,138,250,199, 5,189, 60,149, 58,244, - 4,155,247,241,231,220,160,103,145,118,149,166,172,106,202,230,119,173,221,232, 72, 10,231,207,156, 21,245, 57, 75, 90, 10,124, - 63, 68,121, 30, 91, 59,219,110, 52,236,251,116,218,109,202, 74, 32,195,136,202,130,244, 98, 6,189, 13, 58,173, 13,186,189, 51, -156,189,252, 18, 65, 39, 2,169,152, 36, 9,195,209, 17,183,110, 93,227,240,104,151, 52, 29,113, 52, 28,241,246,183,191,197,165, -139,231, 56,125,122,149, 86,164,216,222,122,200, 15,255,161, 31,226,242,197,211,124,248,254, 55,249, 19,127,230,199, 88, 89, 91, -227,218,205, 7,248,241, 18,126,208, 97,125,253, 12,127,248,143,126,133, 91, 55,111,130, 54,196,237, 22,185,201,233,246, 90,212, - 85,190,104,218,124,198, 20,221,156, 68,239,216,227, 64,132,103, 21,245, 69,127,250,226,255, 47,170,219,141,117,188,234,185,111, - 84, 48,103,236, 23, 69,193,123, 31,124,192,193,104, 76, 16, 4,116,219,109, 90,113, 68, 81,148,236, 30, 28,242,104,119, 7,105, - 32, 80,138,188, 40, 73,203,146,172,172, 17, 82,241,249, 79,191,206, 95,249,119,254, 18,159,126,245, 5,150,122, 45, 71, 13,243, - 61, 78,157, 57,195, 75, 47,191,196,229, 43, 23,121,241,197,151,249,234,191,252, 26,163,233, 20, 33, 32, 22,138,181, 86,135,188, - 40,230, 66,185,178, 44,137,125,143, 78,164,176,182, 98,169,215, 99,146,228, 72, 95,144,164, 37,171,189, 46,201,120,130, 23, 8, - 58,203, 61,140, 54,108, 92, 56,133,161, 32,182, 37,189,110,196,164, 72,152,140, 38,180,194,136,123,195, 49, 71,147, 28,145, 87, -244,162, 24, 60,205,217, 21,159,195,225,152,111, 61, 24, 51,205, 45, 93, 41,136,141,160,237,249, 84,214, 82, 9, 87,180,149,145, - 14,233,107,143,139, 4,246, 24,135,220,182,134,215, 37,108, 68,208, 33, 71, 11,143,137, 41,249,193,207,173,241,242,167,222,226, - 23,126,243, 22,158, 16,132, 6,118, 19,205,212, 66,109, 21,161,178, 40,107,136,164,164,200, 11, 14,135, 99,166, 89,198,112, 56, -100,121,109,141,165,165,101,132, 84, 20, 89,129,174, 43, 60, 97,193, 58,126,117,153,166,248, 74, 80,151,110,202,225, 41,137,174, -107,140,214,172,111,172, 83,228, 25,183,111,223, 64, 88,203,189,219,247, 24,141,142,220, 1, 55, 75,241,171, 49,117,121, 8, 85, - 74,167, 21, 17, 4, 17,202,143,104,119, 98,250, 75,109,150, 7, 75,172, 46, 47, 19,183,219,180,186, 3,114, 13,126,212,102,239, -209, 93,146,163, 29,226, 56, 38,142, 34, 90, 81, 76,236, 7, 68, 65,224,172,108,179,124,238,192, 35,244, 3, 58,157, 22,157,118, -219,121,213,103,248, 97,217, 36,175,121,202,253,153, 82, 40,207,145,208,102,225, 44,243,107,117,126, 77, 51,183,181, 9, 41,231, - 62,108,165,142, 67, 75,102,217, 16, 82, 28,143,132,221,245,236, 49,203,249,126, 28, 47,106,173, 89, 92,231,206,167,134, 85,229, - 64, 37,194, 90, 60,223, 35,106,119,201, 42,143,223,125,247, 17,219,195,140, 78, 55,160, 27,121,132, 18,166,211, 12,107,160,221, -106,209,239,182, 9, 26,198, 67,220,233,145, 20,154,168,213, 65, 24, 67, 50, 30,115,116, 56, 36,207,115,210,100,140, 68,211,142, - 67,190,239, 11, 95,224,189, 27,119,216, 59, 58,114, 89,235, 69, 77,213, 76,186, 90,113, 72,154, 78, 27, 54,187, 43,148,181,214, - 20,101, 73, 94,228, 36,105, 74, 50,157,162,171, 18, 83,214,100, 73, 66, 50,157, 82, 20, 5,194, 83,132,113,212,208,249,220,190, -221, 8,197, 48, 41,248,191,255,189,127,196,255,245,239,254, 67,238,108,238, 82, 91, 49,111, 27,230, 69,209, 13,230,177, 88,202, -186, 98,115,107,135,201, 40,165,221, 29, 96, 9,248,232,198,109,162,184, 67,171,221, 37, 10, 34,119,232,106,130,110, 88, 80,205, - 47,138,162,237,226,182,124,129, 57,107,230,222,114, 59,247,160, 31,115,221, 45, 86,187,107,218,217, 19,221,170, 68,121, 30, 66, - 45,132,202,136, 38,211,221, 90, 96,134,131, 45, 40,210,148,116,154, 50, 29, 39,228, 89, 78, 85,107, 44, 22,233, 9,226, 56, 32, -138, 99,130, 48, 64,121,142, 26,103,140,161,170,106,170, 82, 83, 21, 21,117, 89,185,110,191,170, 41,202,146,178,212,228, 69, 69, - 86,214,110,189,162,164,115,120,132, 62,113, 28,210,106,199, 4, 81,232, 14, 10,193, 66, 81,127,154,194, 92, 46, 20,251,167, 21, -117,113,162,168, 31,191, 24,158, 87,136, 31,175,168,207,235,194,255, 32,138,250,227, 93,186,125, 92, 67,192, 73, 0,191,110, 20, -135,117,237, 10,122, 81,214,148,181,203, 15,158,125,173, 89, 81,119,182, 25, 15,223,243,241,154,128,151,178,172,185,127,255, 33, -173,184, 69,191,215,103, 48, 88,166,191,180, 70,216,234,224,199, 17,173,118, 12,104,246, 14,182,152,230, 99,202,116,140, 29,143, -185,119,235, 54,103,207,158, 71,133, 49,147,194,112, 56, 46, 89,217,184,192,103, 63,247, 38,105, 62,225,251,191,248, 5,254,216, -143,255, 41,214, 78,159,225,253,143,174,241, 71,254,204,159,161,211,139,185,118,227,125,150,214, 79, 49, 46,106,174,223,126,136, - 10, 58,196,173, 30, 82,250,252,241, 63,254,135, 26, 36, 35,104, 83,113, 56,218,231,194,249, 83, 76,199,135,243, 19,238,227,202, -208, 19, 65, 21,199,146,186,121, 49,127, 90, 81, 95, 68,195, 46,226, 98, 23, 11,252,172,168,219,199, 56,251,238,198,225,222,223, -219,219,229,237,111,189,141,242, 2, 94,127,233, 21,206,174,175, 19,122, 62,126, 24,115, 56, 73,232,246,250,120,210, 99, 52,157, -226,183, 90, 76,139, 2,163,107,206, 46, 47,243, 31,255,229,255, 25,167,215, 87,136,163,128, 48,244, 8, 66, 31,233, 7, 13, 71, -217, 67, 72,201,202, 96,133,157, 71,219,188,251,206,187,206, 39, 92, 27,218, 81,192,218,114,159, 34,207,145,214,208,142,124,234, -188,192,148, 37,189, 94,139,188, 41,198,105, 90, 16, 7, 46, 26, 54,138, 37, 37, 21,253,245, 37,138,162, 66,120, 80,102, 71, 12, - 34, 69, 50, 25,178,189,123,192,209, 97, 65,111,208,231,168,132,195,253, 17,129,180, 24, 5,190, 39,232, 8,184,179, 59, 97, 55, -119,193, 36,171, 74,178,100, 33,246, 20, 19, 93,147, 75,199,165,158,171,107,155, 81,166, 93,196, 87, 90, 67, 23,120, 93, 8,214, - 58,150,238,138, 37,209,150, 67, 99,121,237,149, 30, 63,242, 71,190,204,111,189,183,201,253,237,148,110,183,141, 46, 10,166,165, -164, 16, 10,101, 13,190, 49,148,147,140,100,146, 33,148, 15,202,227,202,203,175, 32,172, 96, 58,153,160,235,156,178, 24, 99,170, - 4, 83,103, 84, 89, 70, 58, 25, 51, 26,238, 49,220,219,162, 72, 39, 14,185, 42,192, 19,141, 90,217,143,185,112,233, 18,219,155, - 15,233,117, 35,164, 40,192, 36,108,172,182, 88, 91,109,177,180,212,163,219,237,186,155, 82, 20, 53,157,143, 34, 10, 67, 58,157, - 86,211,105,135,132, 81,139,168,221, 67, 6, 49, 65,220, 97,124,176,197,112,119,147, 40, 12,136,195,208, 21,243, 70,104, 20, 53, -221,121, 16, 6, 4, 77,118,122,187, 21, 59, 66,161,114,163,120,207,115,172,119,169,148, 75, 37,155, 5,179,204, 72,104, 11,252, -246,197,123, 26,182, 97,205, 47,164, 10,206,175,103,213,100,110, 47,222, 19, 79, 76, 24,197, 60, 91,220, 24,230, 4, 49, 26, 23, - 3, 51,226, 26,199,212, 48,107, 44,117,165,155,200,108,131, 18,130, 56,104, 83,100, 5, 31,221,217, 33,205, 43, 20,134,170, 40, -201,147,140, 65,183, 67,160, 28,107, 33, 10, 34,124, 63,160,213,138,177, 22,246,247,118,233,196, 62,189, 78,196,116, 60, 36, 43, -115,202,170,196,234,154,253,221, 29,178, 44,103,227,236, 89, 62,184,121,143,229,245, 85,130, 40, 96, 50, 73, 9,226,134,104,102, - 45,186, 40,240, 4,136,134, 99, 31,248, 94,147, 96, 89,187,191,175, 53,181, 54, 24,171,201,203, 12, 99, 12,217, 52, 65, 90,104, -183,218,120,158,143, 70,114,127,111,194,255,230, 63,255,219,252,244, 47,126,157,164,168, 92,135, 43,101,179, 8,125,250,196,214, - 54,129, 49,227,113,194,131,135,155,212,198,178, 50, 88, 99, 60, 74,184,115,251, 33,129,223, 97, 48, 88,113,160, 22,171, 49,212, -174, 17,105,238, 79,243,164,201,167,221,235, 27, 97,154,104, 14, 83,114,214,180,104,237, 58,126, 99,176, 13,111,192, 54, 97, 51, - 66, 74,119, 31,105,138,186,104,138,250,172,168, 88,107, 78,168,221,167,147, 41,201, 52, 37, 47, 74, 55,249, 53, 6,207,147,132, -126,128, 31, 56,150,130, 83,252,219,102, 42, 92, 53,201,119,117,115, 29,185,111, 85, 55, 57,245,174, 22, 85, 24, 83, 55,249, 3, -174, 83,111,181, 35, 23, 6, 19,185,209,187,231,121,127,176, 69,253, 89, 99,247, 79, 26,206,242,113,135,129,223,111, 81, 63,105, - 63,120, 10,112,198, 52, 23,106,229,248,199,174, 75,119, 35,120,109, 78, 22,117,207,243, 8,195,208,117, 3,205,137, 95, 8,199, -156,110,181,218,156, 61,123, 30, 33,157,122, 58,205,199, 76,178, 33,123,195,237, 6, 52, 16, 82, 87, 22,229,135,108,172,159,231, -133,203,111,176,181, 63,230,207,254,196,255,152,203, 47,190, 74, 85, 9,148,240,249,129,239,255, 1,226,118,196,163,205, 45,110, -223,189,207,181,235, 55,121,240, 96,155,180,208,188,243,157,143,248,246,187, 55, 89,217,120,145,180,242,153,102,134,173,237, 61, - 38,163, 3,138,228,144, 59, 55,223,225, 95,252,119,255,136, 95,252,231,255, 3, 55, 62,120,151,213,229, 30,161, 39, 72,167, 99, -183,102,176,134,197,216,194,197,149,199,241, 72,233,147, 23,245,197, 46,125, 49,157,237,241,162, 62,155,238, 28,163,101,155,143, -149,138,186, 46,185,117,231, 54, 7,251, 99,116,154,225, 91, 75, 24, 4,168, 40,100,152, 36,244,123, 3,214,215, 79,177,189,191, -207, 97, 50,166,172, 43, 66, 33,249,247,254,226, 79,240,169, 23,175, 16, 5, 30, 81,228,198, 80, 94,224, 35,253,230, 69,232,121, - 40,169,216,186,255,128,150,231,179,253,112,147, 42, 47,121,233,133,203,188,246,202, 85,190,240,153,151,105,139,154,149,126,139, - 55, 95,125,129, 87, 47,109,208,111,121, 76, 38, 83,118, 15, 18,162, 86,140, 82,130,100, 90,224,251,146,179,103, 6,196,237,128, -184, 21, 50, 28, 38,140,134, 19, 98, 95,176,220,239,146,166, 41,211,105,225, 4, 43,173, 14, 15,246,198, 12,194, 22, 71, 73, 74, - 41, 13,189, 86, 7, 95, 27, 30,140, 42, 66, 63,198, 55,134,182,181,180,125,201,160, 31, 51,202, 75,114, 51,147, 96, 53,126,232, - 25,120, 99,230,145,198, 34, 13,172, 11,197, 43, 50, 64,149, 26,124,193,126,110,153,248,240,185,207, 15,120,241,213,211, 76, 68, -143,159,249,218, 7,132, 49, 12, 2,205, 81,106, 24, 11,139,178,150,192, 90,214,122, 29,206,156, 58, 77,127,101,149,243, 87, 46, - 81, 91,215, 41,182,162,144,186, 74,240,188,138, 64, 89, 2, 9, 65,163,212, 61,125,250, 20, 97, 24,176,190,190,222, 36,134, 85, -128, 91, 39,137,160,195,217,115, 23,136, 91, 45,246,246,118,240,164, 70, 87, 83, 48, 41, 43,131, 37, 46, 94,188,204,250,250, 58, -221,110, 15,111,118,115, 4, 60,229, 0, 78,182,214, 20,101, 65, 85, 25,144, 62, 65,220,161,172, 53,233,104,159,253,173, 7,180, -227,102,220,238,249, 78,245, 30, 52,133, 60,240,231,239,251,158, 55,143, 69,150,194, 1,103, 92, 81,110,174, 69,142, 89,238, 51, -187,213,252,239,164, 88, 24,209,186,195,237, 44,181,145,197,226, 47,165, 67,166, 10,117,236,102,183, 98, 94, 80,102,230, 43,151, - 98, 38, 30,195,151, 31,175, 46,101,115, 16, 56,254, 0,225, 14, 0,238, 78,142,168, 52,186,172,240,253,136,131,225,136, 91,155, - 99,198,121,197,254, 56, 39, 43, 13, 27,167, 86, 81,194, 16, 71, 1, 81, 20, 16,199, 33,237, 56, 34,110,119,152, 76,198, 72, 97, -232,182, 92, 54,247,238,193, 33,181,182, 76,134, 71, 72,171,217, 63,216, 35,173, 53,155,135, 35,222,191,245,144, 81,154, 55, 17, -211, 26,139, 98,125,101,153, 65,187, 75,153,165, 4,190, 34, 10, 35,132,176,120, 74,146, 23,121,115,127,108,162, 88, 77, 9, 82, -163,132,196,228, 21,101,150, 83,100, 57,210,243, 24,142,167,252,229,255,228, 39,121,251,189,107,212, 72,199,243, 21, 14,215, 44, -229, 83,114, 37, 30,171, 5,149,169,201,138,140,173,237,109,246, 15, 14, 88, 93,221,192,247, 90,220,191,191,205,222,193, 33,203, - 43,203,132,145,143,165, 70, 10, 61,191,209, 47, 38,118,206,168,108,115,253,152, 49, 46,172,178,217, 95, 99,220,232,220, 54,145, -183, 24, 39, 82, 51,141, 96,109, 38, 0,124,178,168,203,249,164, 69, 24,247, 92, 21, 89, 78, 50, 77, 25,143,167,100,105, 78, 85, - 85,212,198, 77,102,102, 86,203, 32, 60,222,169,207,121, 29,205,117,229, 86,185,199, 35,249,178,170,201,138,146, 36,203,201,178, -140,186,174, 17,205, 65, 53,138, 3,218,237,118,163,122,119,202,119, 33,196,211,125,234, 31, 7,144,121,106,145, 22,207, 87,180, - 63,110,113,250,110,116, 89,143,139,234, 30, 23,216, 61, 77,120,245,248,199, 60,237,231, 89,180,193, 61,238, 77, 63, 30, 17, 47, - 20,183, 5, 65,217, 19, 95,175, 25,211,221,190,118,131, 7, 15,119,168,106,203,249, 11,231,169, 12,248,126,151, 83,171, 3,180, - 58,160,223, 63,205, 27,175,189,197,221,219,247, 41,234,154, 75,151, 46, 49, 30, 30,144,235,130, 95,248,149,159,103, 56, 60,224, -212,234, 26,113, 16,242,246,183,126,135,254, 96,137, 23, 95,124, 3, 97, 45,166,170,168,107, 77, 93,249,212, 53,156, 59,125,150, - 94, 43,166,221,110, 17,248, 30, 95,120,249, 50, 59,155,247,249,232,253,239,144,167, 19,214, 7,203,116,123,125,164,242, 88, 90, - 90,230,224,112,159, 7,155, 15, 26,159,246,243, 19,134,158,182, 30, 89,140,100,125,246,227,234, 16,154, 66,186,100, 43,132, 89, -152,144, 44,200,100, 23, 14, 4,179,235,173,219,235,211,110,119, 88, 25, 88,162, 48,162, 42, 11,118,182, 70,140,235,138,237,189, - 35, 30,153, 45,148,231,163, 34,159,184, 21,147,165, 41, 63,248,253,223,203,231,223,120,221, 17,198,102, 89,215,158, 43,228,136, -102, 95,106, 32,203, 51,222,255,206,183,185,119,243, 54, 63,248,189,159,227,203, 95,252, 18,251,195,125, 14,247,238, 67, 54,100, - 37,212,100, 71, 35,178,157,130, 86,191,195,114,203, 35,241, 44,221, 94,200,221,209,136,211,131, 46,203, 65,151, 44,201, 28,232, - 36,244,217,124,176,199,229, 75, 87,120,112,247, 33, 59,155, 35,172,241, 88, 95, 93,166,172, 74,234,218, 98, 38, 57,190, 31, 56, -161,140,128,164,180,216,225, 4, 43, 44, 90,131, 53, 57, 45,165,144, 72,214, 7, 93,254,216, 31,253, 33,142,126,234,231, 24, 30, -165,104,100, 19, 16, 97,231,251,221,185,224,170, 41,246, 3,169, 72,132, 65,214, 1,229, 81,192,118, 85, 16,158,173,240,163, 8, - 21,180,121,225,106, 23, 29, 70,220,221,203,184,218,182, 4, 82,160, 12, 4,158,160,219,246, 9,219, 1,211, 50,229,202,197, 87, -169,209, 32, 12,166,174,216,223, 31,177,178,220,162, 44, 11,140,213, 8, 63, 68,160,232,116,123, 88, 21, 18,246, 66, 76,232,115, -229, 83, 87, 8,188,128, 86,220,161, 44, 53,227, 2, 62,122,255, 35, 94,127,235, 45, 66, 63,226,253,239,252, 22,107,203, 75,132, - 34,199,151,224, 53, 60,246,193, 96,141,162, 40,153,102, 25,101,161, 27,239,174,160,168,106,164, 23, 96,144,212,198, 98,180, 38, - 77, 50, 76, 93, 57,176,140,239,187,195,180,239, 17,120,126,147,211,173,240, 61,183, 15,247,154,209,186,148,224, 9,217,240,218, -105,174,199,227,235,110, 22, 89, 42,173,125, 98, 15, 55, 7,147, 8, 39,118, 51,166,129,133,204,212,219,198, 98,106,141, 82, 94, - 67, 13,179, 78, 48, 39,103,175, 11, 3, 10, 4, 10,107, 68,147,165,173, 49, 22,188, 89, 4,177,105, 14,212,178,129, 38, 27,219, -192, 87,220, 4,208,177,209, 29, 59, 94,152,138,216,215,188,118,229, 12,143,118,199,124,112,152,145, 11,193,186, 31,144, 10, 31, -105, 13,113,153,177, 44, 90, 24,157, 97,234, 18, 37, 90, 4,126, 64,167,219, 98,253,204, 6,185,129,237,195, 9, 82,248,212, 89, - 66, 28, 10, 54,247, 71,236,235, 3, 70,211, 41, 37,206,130,231, 1,195,188, 98,156, 31,178,119, 48,228,194, 82,151, 83,107, 75, - 20,186,134, 60,197,243, 67, 87,220,154,233, 69,150,185,112,146,209,196,112, 48, 12, 24,117,143, 56,127,234, 12,166,214,206, 70, -106, 13, 81,127,137, 83,203, 43,220,188,117, 15,172,165, 50,218,133,193, 72,133, 69,159,136, 78,125,252,126,100,140,193, 10,235, -108,127, 69,197,141, 59,215, 25,143, 71,252,217, 31,255,179,244,186, 61,174,221,124, 64, 82, 20,124,229,203,159,165,215,245,156, -101,146,153,195, 97, 70,101,211,115,122, 31, 77,247,143,177,206, 90, 56, 27,183, 55, 95,203,145,113,204, 28, 7,126,194,241,244, -248, 84,102,134, 9, 23, 18,211,228,165,235,170,164, 46, 42,178, 52, 37,203,114,178,178,116,205,160, 0,223, 83,196,161,179, 53, -135, 97, 83,128,229,108, 86,225,244, 57, 8, 11,210,125,125,151, 91, 95,187,176,150,188, 36,203,220, 1,129,166, 97,242,125,159, - 40,140, 92,156,112, 51,181,154,137, 46,159,218,169, 63,109,164,254,212, 78, 93, 62,185, 83,255,228,152, 86,251,137,246,239,223, - 45,161,238, 89,202,234,197, 4,183,199,119,234,115, 88, 74, 67,121,170,203,106,222,169,207,198,239,110,167,238,254, 9,247,160, -186,157,250,140, 51,173, 60, 5, 6,178,172,100, 56, 28,209,238,116, 89, 59,125,134, 78,175,207, 96,229, 12, 47,188,250,105,182, -246, 14,169,106,205,195,123,247, 56, 58,218, 35, 43, 70, 28,236,111,163,179,140, 79,191,250, 42,177, 31,114,106,245, 20,157,214, -128, 32,232,209,234,172,208,107,183,105, 5, 49,129,244, 25,116,251,244, 90, 93,234,188, 96,208,237,115,229, 84,143, 79, 93,234, -177, 18, 75, 90,182,164, 30,237, 19,214, 37, 47,159, 63, 71,212,196,244, 73,207,195, 11, 67,231,137,173,106,142,142, 70,160,220, -133,248,180,135,245,132,146,119,225, 1, 51,230, 24,188, 96,236,201,206,254,137,184, 85, 79, 62,217,161, 31,191, 58,230,227,119, - 55,198, 20,243,221,164, 31,134, 72,229,179,189,119, 64, 24,132,116, 58, 49, 78, 84,107, 73,210,148,179,103,207,144, 38,137, 27, -253,153,154, 64,193, 79,252, 27,127,146,203,167, 55, 28, 71,191,229, 19,181, 98,194, 56,198,247, 93,218,145, 64, 32, 12,124,248, -157,107,220,188,246, 62,191,251,219,191, 73, 93,106,231, 41,174,114,198,251, 15,209,211, 67, 90,161,162,221,106,225, 9,203,209, -254, 30, 27, 43, 3, 14, 14,198,140, 43,195,195,164,164, 21, 5,116,124,133, 41,115, 86,215, 86,137,131,152,100,156, 32, 61,159, -195,221, 33, 73,166,121, 48, 42, 17, 65,155,225,222, 20, 63,106,131, 39, 73, 42,205, 97,146, 51,169,107, 74, 4,133,182,244, 2, -197,165,203,103, 81, 29,159,182, 31, 33,210,146,126,109, 16,121, 66,216,241,217,154,166,140,140,160, 34,196, 72, 15,221,136,114, -204,124, 62,108, 89, 18,150,203,161, 36, 80, 6,188,128,212, 74,118, 49, 92,125,101,192,235,175,191, 70,171,125,137,221, 3,248, -234,191,250, 22, 73, 90,162, 11, 87,154,106,171, 88,237,120,244, 98,159,193,160,199, 96,109,149,176,221,118,209,164,210, 21, 40, - 95, 9,116, 93, 19, 5, 49,117,109,248,212,235,175,115,241,202, 21, 46, 92,188,204,185,203, 87, 56,117,238, 60,221,165, 21,214, - 79,159,165,183, 52,160,210, 22, 33, 37,203,131, 21,150,151, 87, 56, 26, 39,172,174,159, 65, 55, 9,157, 23,207, 95, 96,101,121, -133,186, 9, 10,193, 42,130,208,197,162,250,158,114, 49,165, 42, 68, 27,199, 16,232,244, 7,180,186, 75, 8, 63,194, 90,193,209, -254, 38,217,248,176, 73, 89,115,157,122,232, 53,212, 56,175, 65,194,122, 46, 59,221, 83, 30,126, 35,206,156, 89,216,132,116, 69, -121,118, 63,147, 66, 28,103, 84, 72,123, 2, 36,117, 2, 7,203,113, 42,155, 20,174,163, 23, 51,203,161,144, 77,225,158,225, 97, -155, 44, 9,225, 80,199,194,226, 60,199, 85, 77, 85,214,152, 90,187,136,228,217,247, 49,203, 23, 95,176, 41,206,196,116,162, 9, -150,209,218, 5,232,140, 39, 19, 38,211, 20, 83, 90,198, 73, 77, 90,186, 48,148,181,149,101,124, 15,150,251, 45,150, 58, 33,177, - 47, 48,117,141, 23, 68,140, 39, 9,131,229, 21,162, 86, 23,235,197, 68,253,117,100,208, 37,201, 74,182,247, 15,121,116, 56,230, -219, 55,183,121,116, 88, 80, 90,136,162, 8,107, 44,169,117, 8,223, 64, 74,164,182, 76,243,156,164, 42,161,214,120, 77, 55, 89, -215, 46,168, 6, 99,168,203, 98,254,250, 54,198,146,101, 5, 73,154,204, 71,253,232,154, 31,251, 99, 63, 74, 43, 12,184,115,251, - 46,101, 85, 29,143,197,191, 27,195, 77,179, 18,156,166, 83, 30,110, 62, 98,109,109,131, 40,238,144,229, 37,155,155,155,156, 63, -123,142,192,247, 27,129, 91,141,105,240,172,117, 89, 81, 87, 21,117,179,171,174, 11, 87,120,171,162,164, 42,221,155,174,102,251, -243, 70, 40,103, 12, 88,189, 48,126,111,200,121, 77,135, 46, 61, 23, 82, 35,165, 59,120,155,218,253,187, 69,214, 32, 92, 71, 83, -166, 73, 74,150,149, 84,181, 27,167,135,190, 34,142, 34, 7, 68,106,172,108,179,157,255, 9,134, 94, 83,195,170,162, 36, 77,156, - 31,125,154,100,164,153, 91,111,168, 70, 59,209,110,187, 85,110,171, 21, 19,134,110,164, 47,149,194, 24,243, 49, 68, 57,241,252, -206,253,105,132,158,103, 21,241,167,209,225,158, 70,251,249,184,247,159,101, 85, 16,143,165,245,124,210, 73,195,226,231,204, 78, -240,166,121,161, 90, 51, 67, 0,138, 99,248,140, 56,249,115,206,212,178,179,177, 92,167,221,230,202,165,203,244, 87,214, 57, 24, - 29, 49,201, 82,146,124,151,247,239,188,207,210,218,105,170,220,178,212, 95,165, 21,196,248, 65, 64,165, 45, 81,212, 97,208,237, -208,243, 21,171,221, 46,129,167, 40,242, 2, 43, 32, 23, 22, 97,106,138, 52, 67,228, 25,121, 50,129,116, 66,232, 89,202, 68, 50, - 60,212,104, 35, 73,210,146,178,246,160, 53, 96, 98, 52,217, 96,131, 58,205, 33, 10,152,232,138,105, 86, 34,181, 70,120,146,218, - 86,104, 52,202,202,103, 62, 30,207,125,248, 62, 38,230,240,105,148,185, 39,236,139,226,164, 77,196,117, 65,112,247,254, 35,110, - 63,216, 68, 9,193, 82,236,115,102,181, 71, 43,138,232, 6,146,213,149, 37, 70,195, 67,180,129, 64, 72,250,253, 1,103, 79,173, - 59,142,119,208, 32, 64, 3,223,165,231,121, 18, 79, 72, 48,150, 27,215,174,115,237,253,235,236,239,238,209,110,199, 32, 52, 89, - 50,197, 86, 25, 58, 25,145, 7,208,238,172,227, 73,205,193,209,136, 36,171,120,255,195,187,180,123, 3,250,129, 66, 28,109, 49, - 60, 72, 56,119,113,131,210,207, 24,101, 37, 81,167, 79, 33, 36,249,225, 46,166,174, 16,190,207,168,172,249,224,209, 1, 87,250, -203,236, 28,236,177, 34,218, 68,113,135,145,153, 82, 56,222, 31, 53, 26,237, 11,250,161,207,198,233, 21,234,210,195, 63, 3,193, -248,144,205,131, 61,252, 65,196,165, 65,155,228, 48,167, 16, 53, 82,128,175, 4,161, 39,233,181, 91,116, 90, 17,203,253, 22, 23, -219, 45,206,183, 98, 58,162, 38, 14, 67,182, 38, 7,172,234, 14, 66, 30,241,207,254,217,215, 24, 13,191,134, 8, 35, 62,119,169, -195,173,135,154,116,148, 18,251,150,115,202,227,204,250, 41,194, 80, 80, 91,205,242,233,179,132,173, 14,182,200, 8,189, 0,227, -213,164,101,202,242,202, 26,237,184,205,133,115,103, 88,234,183, 89, 89,233,187,131,108, 24,209,237,245,153, 38, 83,252, 32,194, -214,110,167, 90, 87, 5,195,244, 1, 97,103,153,245,139, 47, 33,148,226,252,149,151,169,139,156,202,102,196,113,155, 32, 44,200, -178, 97,131,211, 52, 13,227, 65,161, 77, 77, 86,104, 64, 81,155,154,188,168, 9,202, 26, 79, 22,212, 86, 54, 78, 10, 87,184, 93, -241,118, 29,251,172,160, 43,213,248,209, 27,125,134, 39, 29,141,173, 9, 95,127,194,105, 51,123,173,107,109, 65, 59,145,230,236, - 26,116, 28,115,133,197, 52,187, 86,131,105,240,164, 2, 7,150, 17,158,116,171, 58, 91, 99,204, 44,156, 72, 34,240, 28,250, 66, - 59,254, 69, 61, 27, 79, 87, 37, 70, 27,180,242,176,129, 19,193, 9,137, 35,236, 89,135, 72,157,237, 81,133,144, 8, 5,182,150, - 24, 25, 98,189,138,184, 21, 17,123,150,229, 80,240,169,165,144, 78,153, 50,174, 74,246,239,221,101,237,181, 43,244,218, 93, 34, - 63, 32, 84,138, 86,232,130, 91, 70,227, 41,225,193,152,160,181,132, 12,150, 8,123,138,171, 27, 87,121,245,141,207,241,175,190, -246, 47,249,206,195,175,115,144, 24,202,230,222,166,155,172,116,163, 4,133,181, 76, 53, 8, 93, 17, 26, 67,158,106,170, 48, 71, - 8, 73,171,219,165,221,105, 81,215, 21,117,153,227,171, 38,155, 92, 11,138, 82,131,202, 41,109, 77, 90,164,148,217,148,108, 52, - 36, 59,218,227,207,253,240,247,241,214,167, 94,225,111,254, 87,255, 79,238,238,236,146,107,139, 80,158, 43,252,207,187, 71, 91, - 57, 15,129,154,173,164,182,119,119,249,169,127,241,211,252,241, 63,250, 39,185,114,241, 50, 69,161,249,245,223,248, 54, 95,249, -226,103,241, 69,133,174,167,152,186, 66, 87,204, 65, 46, 70,155,249,120,221,189,239,132,121,226, 68,100,244,236, 16,103,155,196, -190, 69, 24,215, 66, 2,155,177, 32, 27,139,174,209,115,132,235,204,147,158,103, 5, 85,169,155,245, 68, 77,224, 43,180,241,154, -181,110,229, 64, 61,139, 24, 93,117,172,233, 48,198, 64,221,124,159,198, 77,121,156,208, 78, 52,177,187,174, 75, 15,103,196, 68, -207, 59, 30,227, 55,215,182,247,113,129, 39,207, 31, 91, 47,168, 10,197, 98,177,158, 39, 12, 62,118,227,230,132, 5,224,121,133, -247,113,113,246,179,208,177,139,127,254,228,136, 95, 60,181, 51,127,218,207,227,132, 25,102,254,187,123, 59,238, 74,159, 23, 18, -224,108, 90, 2,169, 60,148,239,243,224,209, 35, 42, 60,226,126,159,246,210, 42,210,239, 83, 91, 69, 85,107,150,251,203,248, 86, -144,142,143,216, 59,216, 5,155, 19,213, 7, 28,141,129,184,195,114,120,137,131,163,140,160,213,162,208,154, 32,106, 17, 71, 62, -194,104,202,162,160,180,134,168,215,165,180, 53,247,118,199,124,180,121,200,225,209,144,113,154, 48, 74, 18,146,178, 96,156, 78, - 73,146, 12,146, 2, 47, 80,108,156, 90, 99,173,223,166, 23,122, 40, 91, 99,168, 27,181,238,179,215, 28,207, 60,188,217,143,225, - 12,204, 93, 34,246, 24,225,104, 23, 56,250,141,149,206, 88,211, 36, 86, 25,199,114,110,178,135,151,250, 61,247, 28, 8,200,171, -138, 44, 47,232, 4, 1,253,200, 39,157, 30,129,112, 10,117,109, 13,221,211,107,180,226,134,108,229,169, 38,233,200, 71,121, 65, - 35,146, 18,220,189,117,131,221, 71,247,217,121,120, 31,101, 5,253,254, 18, 73, 90,160,203, 41, 59, 15,238,177,183,117,192,203, -175, 92,160,168, 42,146, 60,229,204,169,117, 14,176,212,181, 96,227,252, 5,138,221, 17,177, 20, 4, 66,176,187, 63,228,165, 43, -231,240, 3, 24, 77, 70,248,173,152,233,184, 68,123,146,172, 50, 4,221, 30, 66, 72,198,117,141,241, 60, 90,157, 30,126,187, 67, -107,148, 81,212, 6, 93, 57,107, 76,166, 13,121,146,210,107,135,132,113,128,234,132,172,157,191,196, 32, 56,135,180,134,139, 50, -228,139,181, 65, 6, 18, 83, 23, 4, 30,132,202, 34,155,113,172, 53,154,201, 40, 33,201, 39, 72, 95, 48,214, 57,155,233, 30,213, -200, 67, 84, 6,227,213,196, 65,132,242, 11, 60,149,115,245, 84, 68,182, 26,146, 78, 39, 44,247, 87, 80, 97, 11, 63, 80,244, 6, - 61,206, 95,184, 0, 6,234, 52,193,164, 83,172,244,104,181,251,156, 59,119,137, 86, 20, 51, 30,143, 16, 88,210,116,202,185,115, -103,200,203, 18, 63, 8, 89, 89, 93,195, 98,169,203,146, 60,241, 17, 85, 65, 39, 12,200,117,194,104,239, 17,253,181,243, 12, 86, -151, 41,175, 92,101,114,184, 71, 93, 36,164, 89,197, 52,201, 56,123,102, 3,223, 23, 84, 85, 69,154, 89,144, 62,227,100, 74,173, - 33,136, 44, 97, 90, 16,245, 45,121,150, 51,158,186, 28,247, 93, 95, 17, 6,190,179, 73,122,199, 98, 55, 79, 74,148, 39, 92, 23, - 57,119,253, 29,239,203,143,239, 53, 51,127,121, 35, 94,179,110,114, 33, 27,194, 91, 93, 55,196, 56, 37,155, 68,182,102, 60,110, -102, 49,193,141,199,188,185,134,235,218,156,196,201,206,243, 90,220,205,222, 83, 18,163, 45,101,211, 13, 90,235, 10,231, 60, 44, - 70, 55, 72,217,197,215, 12, 78,188, 37,155,175, 45,149,219,227, 6,113,140, 31, 6, 88, 91,209, 22, 25,167, 60, 75,207, 19, 88, - 93,179,222,239,163,243, 18,219,118,253, 89, 16,120,228, 85,205,131,205, 29,240, 34,106, 43, 57,119,241, 10,190, 23,184, 3, 82, - 16,241,133, 31,249, 49,202,104,153,107,255,224,255,131,173, 82,132,192,117,214, 66, 56, 20,142,128,194, 88,124, 41, 49, 82, 49, -206, 43, 68,101, 16,114,138,145,146,179,167, 87,137,227, 0,172,239,210,212, 68,128,182, 10,161, 36,149,174,201,243,148, 72, 9, - 90,190,123, 27, 85, 83,140,174, 56,123,254, 10,127,235,175,253,207,249,235,127,251,239,112,237,254, 22,149, 54, 88, 36, 82,216, -147,170,245, 19, 34,168,197, 40, 53, 87, 88,106,171, 25, 77,199,252,210,175,124,149, 63,255,167,255, 28,231, 78,157,102, 50, 41, -184,118,227, 1,231, 79,247,160,204, 48,101,147,104, 87, 85, 96, 27,206,190,177,141, 24,205,204,239, 67,190,167,240, 27,193,179, -242, 84, 99,121, 4, 37,103,209,169,141, 88, 18,129, 21, 53,210, 54, 14, 30,221,220,183,106, 67,145, 23,228,137,115, 4, 76,167, - 41,105,150,147, 23, 5,121, 81,160,155,112,159,178,170,201,202, 18,148,179,239, 25, 99,221,215,243, 21, 74, 58,116,177,109, 44, -128,122,126, 13, 55,147, 79,229,116, 35, 88,219, 8,228,130,227,108, 3,207,111, 14,161,199,117,204,123, 46,234,149,103,243,215, -143, 31,116, 49,223,151, 26,251,100, 97, 63,142, 54, 60, 86,133,218,103, 6,222,139,167, 56,173,196, 83,196, 20, 60, 55,133,231, -217,133, 73,204,127,174, 39,219, 75,225, 94,236, 52,123, 28, 23,158,215, 92, 72,174,179, 56, 22,186,200,121,202,217, 28, 98, 33, -124,148,244,136,194,144, 23, 95,126, 17, 47,232, 64,208, 34, 47,157,146,114,124,180, 79,149, 85,232,209, 17, 74, 8,166,147, 17, -117, 85,208,110,133,196, 94,151,192, 15,168,165, 98, 47, 41, 40,181, 38,221,217,166, 40, 10, 48,150,162,172, 56,154, 78, 25,142, - 71, 76, 19,103, 29, 73,210, 41, 85,145, 34,132, 70, 96, 49,186, 34, 8, 66,132,133,208,143,104,133, 45,252,216,195, 23,134, 83, -145, 36,246, 52, 70,184,200, 63,165,157,176,103,177, 81,127,218,243,252,184,222,224,241,147,209, 83,119, 97, 51,139,200,236,125, - 99, 49, 86, 59, 15,105,163,126,119, 68, 63,179, 32, 48, 50,115, 33,209,139, 87,206,115,227,194,105, 30,110,238, 98, 52, 24, 45, - 72, 39, 19,218, 10,142, 38, 41, 42,136, 48, 86, 81,151, 5,237,118,203,133, 68, 8,133,240,125,100, 16,184,130,238,249,248,210, - 99,111,235, 1,223,254,230,111,163,139,156, 7,183,222,163,179,180,130,198,146,140,143,208, 89,202,206,230, 35,174, 92,121,129, -195,195, 67,242,124,204,234, 90,159,110,216, 97,100,106,192,103, 60, 62,162, 21, 74,186, 74,162, 17,100,198, 80,150, 57, 45,105, -153, 38, 41,173, 86,151,163, 36, 96,191, 46, 56,119,229, 69,206,182,186, 60,124,244,136,135,123, 59,172,118, 99,214,207, 94, 32, -155,140,217, 8, 36,133,180,148, 66, 19, 8,159,170,182, 12,211,156,190,174,137,170, 17,211,163, 9,165,178,236, 42, 65, 24,250, - 24,235, 40, 38, 97, 32,169,171,140,192,179, 20,202,130,169, 8, 60, 15, 93,213, 76, 39, 5, 74, 42,210, 86,136, 65, 51,240,218, - 76,252, 20,171, 12, 81,171, 69,187,221, 33, 43, 74,138, 81,130, 87, 39,172,246, 86,176, 43,203,180,122,107,104,235,145,101, 41, -231,206,159, 35, 27,143,156,135,222,148, 36, 85,193,218,250, 25,250, 75, 61, 52,154,178, 72, 89, 91,238,145, 76, 70,196,126,155, - 34,203,233,244,251,212,117,221,248,145, 5, 94,168,136,166, 1,170, 84,232, 60,193, 51, 32,178, 35, 14, 55, 43,162,165,117, 86, - 79,157,161, 53, 88, 37, 27,238,179, 82,150,140,146, 20,141, 64, 89,139,242, 3, 76, 90, 82, 86, 2, 99, 27,241,145, 12, 8,226, - 46, 94, 24,179,127, 52,114,152,210,158, 91,119,121, 74, 18,122, 30,158,175,240,149,196,151,194, 21,116, 65,147, 41, 48, 43,230, -199, 59,116,105,221, 74, 97,174, 19, 49,205,117,111, 4, 88,133,213, 18,109, 45, 18,131, 49, 18,101,105,174, 77,139,149,118, 30, - 64, 4,242,248, 62,166,155,123,146, 60,134,201, 24,109,209,104,132,116, 34, 48,109,192,212,198,141,125,171,122,254,122,210, 82, -162, 61,183,162,178,218,209, 13,153, 57,220,140,105,226, 61, 37,138, 26, 95, 26, 60, 37,200, 11, 77, 86, 11,188, 94, 15, 81,106, - 84, 82, 35, 70, 21,235, 23,151,233,118, 98, 98,229, 64, 56,194,151,132,237,136, 71, 91, 9,223,252,206,117,106, 25,146,231, 83, -166, 71,187, 92,185,252, 2, 71, 69,136,245, 54,176, 42,228, 7,127,248,143,208, 31, 12,248,233,159,251, 5,238,111,110,177,123, - 56, 36, 45,220,138,160,153, 81,144,152,154,105, 86, 99,164,199,161,213,100,147,130,196, 30, 17,182,125, 6, 58, 68, 97,209, 22, -194,200, 35, 8, 66,183,154,171, 53,182,214, 40, 63, 32, 43, 10,166, 69,129,242,187,148, 69,206,116,231, 62,189,165,101,254,179, -255,240, 47,241, 95,252,157,255, 55,239,223,219,162,178, 51,191,183, 70, 41,137,209,122,161,182, 88, 12,181, 11,127,121,236,158, - 95,155,138,221,195, 45,190,246,107,191,196, 79,252, 27, 63, 65, 24,132,220,122,176,131,181,154,174, 41, 17,101, 74, 90,231,212, -186,154, 7,163,104, 99,209,198, 96,172,115, 35,120, 74, 18,248, 30, 97, 24, 16, 7,126, 19,250,163,240,125,137,239,187,123, 85, - 93, 55,223,143, 52,120,181, 65,170, 10,252, 38,113, 82, 42,116,109,200,146,140, 52, 73, 25,143, 38,140,166, 41,147,172, 32, 73, -115,178,172,108,170,141, 66,200, 26, 67,137, 54, 80,107, 75, 21,106,162, 40, 32,192,161,140,133, 53,200, 6,104,236,174,205,102, -180,111,108,163,215,114,215,138,239,121,196,161,115,127, 4,202, 57,175,164,240,220, 68,201, 26, 12, 60,157,253,254, 73, 68,107, -207, 27,133, 63,173,243,123, 82,200,246,251, 67,198,254,129,227, 77,127, 31,191,164,176, 4,162,230,104,127,159,221,189, 3,132, - 23, 50, 78, 50,210,210,162, 81,244,186,203,212, 73,226,186, 74,161, 49, 82,144,219, 2, 25, 24,198,117,206,214,253,187,205,133, -145, 80,150, 37,101,153, 99,180,179, 47, 8, 93, 55, 79,181,123,169,245, 59, 62,107,253, 54,151,214, 61,250,209,128,141,193,128, -188,168,209, 40, 52, 62,155,219, 7,212,181, 96,101,125,131,229,245, 1,197,116, 66,167, 21, 80,154, 10,107,220, 13, 72, 26,225, -174,155, 63,112,148,226,241,184,221, 44,176,244,229, 2, 69,206,206,181, 20,178,249,115, 78,164, 30,245, 58, 29, 58,173, 24, 9, - 46, 46, 54, 77, 25, 44,181,240,165, 98,111,107, 31, 29,182, 24,172,172, 51, 30, 29,178,178,188,140,167,188, 6, 96, 19,224,171, -208,121,144,165,165,204,166,124,253,107,191, 74,145, 22,124,248,222,251, 76,179,148,193,198,105,116, 85, 16,248,138,225,193,132, -151,174,158,163, 40,115,178, 82,112,243, 81, 70, 29,244,241, 66,201,157,173,156, 80,149,172, 40, 31, 35, 96,181,167, 56,152, 84, -108,108,172,115,231,225, 14, 47,156, 93,166,178, 62,104, 69,161, 21,221,238, 18,171,131, 1,211, 36,165, 35, 45,178,219,166,223, -138, 72, 70, 19, 2,105,241,173,166, 37, 12, 5, 6,116,129, 52, 80,166, 83,242,105, 4,181,194, 19, 80, 22,110,119,233,251, 62, -121, 89, 98,140,166, 29, 7, 40,105,104, 69, 30,113,224,209,138, 98,194, 32,196, 40, 77,224, 57,245,108, 81,102, 20,121, 9, 56, - 56, 74,127,121,153,149,213, 85, 44,130,157,189, 67, 90,177,162, 61,232, 82,171,152,168,187,140, 85, 49,251, 71, 9,167,207,158, - 39, 47, 42, 36,150,178, 40, 9,124,159,193,202, 42,113, 43, 70, 97, 41,242,148,184, 21,162,164,165,211,142,168,203, 2, 76,133, -169, 51,242,105,206,232,208,163,183,182,140,182, 37, 66,213,248,177, 4,237,145,231, 21,166, 40, 24,141, 82,218, 6,194, 56,164, -215, 27,176,212,191, 66,111,101, 29,217, 91,229,250,251,191, 75, 39,128, 80,105,202,202, 48, 29, 79,241,149,207,249, 75,151, 24, - 77, 18,150, 7,125, 38,163, 33,221, 86,155,118, 28, 51,221,189,235,110,186,202,197,245,134, 13,250,213, 83,141, 58, 93, 54,126, -234, 5, 75,218,137,236, 6,187,232, 17,159, 5,119,208,140, 55,155,238, 92, 58,124,169,110,178,207, 79, 34,140,197, 9,135,140, -157, 11, 22, 57,161, 37,178,141,138, 90,107, 77,109,204, 19,247, 52,207,243, 48,198,144,231, 57, 66,137, 6, 70,211, 28, 26, 22, -217,243,205,228,111, 6, 35,202,179, 18, 37,125,226,184, 77,187,107,208, 3, 77, 81, 12, 89, 89, 91,193, 10,139, 31,120,132,161, -243, 60,203,160,197,222,193, 22,247,182, 14,121,241,197,148,206,133, 53,108,149,146,140, 14, 88,187,252, 42, 15,135, 71,136,176, - 75,165, 53,159,125,227,117,222,124,249, 60, 70,151, 28, 29,236,179,187,185,201,141, 59,247,185,126,119,139,237,195, 49,219,251, -135, 28, 77, 10, 74, 83,147, 43, 73,106, 45,219,147, 18,245, 96,143,151,207,159,130,162, 36, 79, 82, 78,157,241,144,109, 65,212, -106, 97, 76, 72, 41, 61, 84, 16, 82, 34, 57, 76, 74, 16,153,115, 53,148, 5,181, 53, 12,214,207,241,159,255,181,255,136,255,244, -127,247,127,230,230,230, 30,229, 66, 66,155,157, 89, 3,159, 24,177, 62,121,175, 55,192,181,155,215,249,250,215,127,133, 31,255, -147,127,138, 78,111,137,205,173, 29, 46,109,172, 49, 25,151, 28,141, 15,169,117,233,154, 35,235, 10,250,226,191,231, 44,102,206, -235,157, 71,225,188,176, 7, 77, 81, 7,129, 54, 77, 51,215,120,213,101,147, 37, 79,195, 39,168,107, 67,154, 53, 76,246,241,148, -163, 73,194,120,154,145,165, 57,101, 89, 35,165, 68, 27,199, 63,169,117,141, 53,181, 19,232, 97,231,145,181, 82,186,137,165,240, - 36, 90, 27,202,178,116, 92,129, 52,165,200,115,116, 93, 97,173,153,107,185,194, 48, 32, 8,188,121,190, 61,194,204,149,252,194, - 24, 87,212,191, 91, 21,250, 83,119,215,207, 65,141, 62, 77,249,254,244, 56,188, 79, 86,172,159, 53,114,255,189,226, 75,127,223, - 72, 84,107,144,166, 66,218,154, 60,155, 16,181,221, 9, 78, 53, 68,181,186, 76,169,202,140, 36, 29,147, 21, 5,135,163, 35,210, - 60, 33,207, 83,202,186,166,172, 29, 7, 30,163, 9,149, 36, 84,130, 94, 39,102, 99,109,157,165,150,135, 48, 21, 85,145,210, 14, - 61,214,250, 45, 62,245,226, 37,178,201, 33,201,100, 76, 85,164,196, 94, 68,187,191,198,222, 81,134,239, 11,198,201,152,190,233, -208,139,215, 81, 65, 31, 99,106,108,165,169,140,113, 35,182,127, 13, 60,224,197, 21,134, 49, 98, 65, 4,226, 20,167,179,157,209, - 92, 96, 39, 45, 82,207, 70, 81,141, 39, 83,131,239,121,124,207, 91,159,101,111,103, 31, 83,150, 8, 83, 49,157, 78, 89, 95, 89, - 98, 99,165, 71,233,119,200,234,138,201,104, 66,224,135,115,134,188, 39, 61, 36, 78, 44,165,108,205,175,124,237, 95,242,254,187, -239, 18,201,144, 7,247,182,216, 56,189,129,177,134, 44,157, 82,100, 9,189, 78,140, 39, 44, 15,182,183, 56, 24,215, 8, 60,222, -185,190,195,173,251,135, 4,181, 37, 48, 37,173, 56, 33,108,121, 68,182, 98, 16, 67,175, 19,113,116, 0,155,163,148,193, 96,157, - 44,211,236, 12,167,244, 58, 93,170, 60, 35, 48, 53,103, 87,150, 24, 7,146,225,225, 17,215,110,222, 38,192,176,178, 54,160,149, -164, 24, 36,121, 94,207,215, 17,163,225, 1, 83,233,158,235,170, 42,221, 90,192,166, 40, 79,208,235,181, 92, 54,188,130,118,187, -195, 96,169,199, 82,183,131,175, 20,166,174,201,166,123, 12,143, 14, 73,178, 4,109,192,247, 35, 78,159, 59,195,218,234, 41,172, -149,140, 38, 83, 54, 78, 95,224,124,171, 79, 77,192,206, 48,229, 96,156,226, 69,150,229,193, 10, 85,161,201,146, 28, 93, 21,172, -173, 12, 8, 67,133, 54,150,118, 43,162, 19, 7, 20,162, 34, 8, 20, 82,184, 49,225, 40, 25,179,183,179,205, 57,255, 20,237, 94, -159,108,114,196,210,250, 50, 65,232,209,234,180,168,173,139, 86, 21, 53,120,190,207,169,254, 50, 70, 42, 34,169,169,147, 67,188, -238, 42,209, 96,131,179, 47, 42, 74,173,217,125,112,139, 48, 14, 24, 30, 78, 25, 44,175, 49,154,140,233,117, 98,210, 52, 37, 79, - 39,232,202, 32,194,128, 51, 27,103,184,189,115, 27, 95, 10,124,233,246,229,202, 81,212,241,154, 8, 7, 49,115, 37,219,227,130, - 62,179, 34,205, 67, 54,102, 25,221,139, 66, 80,123, 28,218, 97,140, 65,227,212,234, 70, 59, 37,189,242,229,137,233,159,174,205, -124,165, 40,149, 60,161, 23, 17, 11, 7, 5, 99,204,124,175,142, 21, 40,233, 70,187, 66, 8,151,125, 93,107,242, 52, 71,251,190, -211, 9,248,254, 28, 95,109,102,235, 42,225, 33,132,161,174,114,124, 63,164,211,237,177,127,148,225,133, 33, 81,175, 75,191,178, - 72, 95,114,235,246, 77, 86, 90, 30,233,114,155,115,151,207,147,150,154,251,155,251, 40, 4,105,150,113,116,116,200,217,149, 62, -131, 94,155,229,142, 79,166, 45,239,223,121, 68, 16,119,145, 43, 93,122,158,135,180, 25,103,206, 12,248,252, 70,132,248,158, 23, -168,241,153,148,176, 59, 74,217, 60, 24,115,243,222, 35,222,187,179,197,195, 71,155,236,239,186, 44,137, 91,247,118,176, 18,178, - 66, 35,251, 25,203, 24, 12,146,168,213, 37,108, 53,254,127,207,105, 13, 38,105, 78, 38, 13, 81,232,147,167, 41,226, 96,135,149, -211,231,249,175,255, 79,127,157,191,244,191,248, 27,220, 63, 56,162,178, 51,162,162, 56,206, 80,255, 24,130,171,181, 80, 99,249, -141,111,252, 38,127,228, 15,127,133,151,207, 92,226,104,120,128,106, 15, 16,121, 77,100, 44, 55,110, 94, 39,203, 82,140,173, 1, -139, 18,238,185, 83, 56,139, 98, 24, 6,116,202,152,170,172, 40,130,192,113, 15, 2, 73,224,185,239, 69,107, 61,183, 38,202, 38, -225, 71, 10,217,192,107, 4,165,214,100,121, 65,146,102, 76,147,148,113,146, 48,158, 56,148,171,174, 13, 74,121,212,214, 82, 91, - 77,101,106, 7,181, 49,199, 59,243,186,174,168,202,210,165,182, 73,137, 54,150, 44,205,153, 78, 18,166, 73, 66,150,229, 13,141, - 14,103,153,246, 92,190,193, 12,156,132, 56,222,237, 91,109, 78, 10,229,158, 86, 32,221, 11, 65, 60,183, 67, 62,238,192,158, 12, - 61,249,253,134,183,124, 55,159,243,123,233,240,159,202,156,127, 86, 54,252,220, 74,244,244,209,189,149,138,176,221,161,213, 27, - 32,253,136,200,135,221,189, 33,247, 30,220,100, 52, 73,169,106, 77,217,144,133,132, 16, 8,107, 27, 15,172, 83,154, 6,202,208, -110, 71,172,245,123,116, 99,159,181,229, 30, 75,189, 22,201,104,155, 48,244,105,183, 54, 8, 60, 73, 43,244,136,219, 49, 89, 34, -233,245,150,216,219, 25,113,250,244, 57,150,215,206,114,106, 29, 46, 95,188,204,141,219, 55,201,138,140,233,116, 76,145, 38,156, - 61,115,154,196, 20, 46,161, 12,176, 74, 44, 56,208,159,167,105,176,223,125, 97,119, 77, 7,152,227,108,117, 33,205, 60,234, 85, -138,198, 6, 98,102,116, 57,195,108,226,134,116,143,203, 82,175,235,132, 42, 74,145, 21, 5,113,224, 51, 28, 39,172,172,172,241, -222,237, 77,108,216,198,147,138,193,210, 82,195, 7,112, 47, 56,223,243,145, 64,150, 36,124,244,254,187,152,178, 38,183,130,207, -124,230,115,180,186, 17,119,238,221, 99, 50, 26, 98,139, 4,107,106, 30,109,237, 83,215,138,216, 90,162,192,217,141, 38,121,141, - 80, 62,157, 56,102,127,152,112,174, 53, 96,165, 31, 35, 39, 37,202,212,180, 58, 29,118,135, 9, 37, 83,150,151,215,248,210,151, -191,194,119,190,243, 14,187,251,123, 44,247, 90,232,170, 64, 72,200,141,229,197,171,151,184,125,243, 54,125,235, 58, 47,154, 67, -149, 81, 10,227,133, 24, 83, 97,138,154,189,233, 8, 79, 9, 42, 13, 42,112,215, 71, 93, 87,248,126,200,202,202, 18,203,253, 54, -113,224, 83,155,146, 60, 47, 40,179,156, 60, 61,164,172,114,252,192,167, 29,196, 44, 45,175,209,237, 46,227,251, 49,163,113,130, -144, 1,113,103,137,218,250, 36, 89, 77,187,187,196, 81, 82,227, 55,235,137,209,120,130, 31, 6,156, 59,123,214, 69, 0,135, 30, - 43,131, 62,189,182,135, 39, 52,135,219, 35, 14,118,198,244,218, 17,237, 40, 34,240, 21, 2,152, 78, 18,162,160, 69,103,105,137, - 42, 45,144,190, 66,202, 0,161, 66,188, 72, 50, 8, 91,180,186, 75,100,121, 65, 94,150, 84,233, 16,223,243, 81,113, 76,105,192, -163,166,221,106,113,233,242,139,216,170,192,243, 34, 76, 93,178,187,121, 7, 93, 87,108,172,175, 32, 61, 71, 9,147, 86, 83,151, -185, 59, 48, 73,133,191,160,104, 87,114,166,100,127, 76, 65,108, 31,103,116,207,151,213, 79,218,214, 16,243, 53,154, 49,141,255, -191,201, 60,183,243,188, 22, 55,250,181,122,102,115,117,215,175, 53,156,200, 79,159,195,149, 22, 68,159, 90,235,185,144,238, 24, - 19,171, 26, 11,148,118,247, 86,123,172,122,158,189,238,116,109,155,233,147,243, 69,207, 0, 56,113, 28, 51,173, 45, 81,203,249, -172,247,134,123, 36,117, 74,215,239,241,240,225,144, 81, 54, 69, 70,203,220,127,180,141,231,123, 76, 39, 9,195,195, 33,253, 80, - 48, 62, 58,100,105,125,153,115,171, 27,124,116,103, 27,233, 71,236,142, 10,212,160, 69,145, 66,167,213, 33,240, 36,170, 78,177, - 54, 37,240, 60,186,171, 45,206, 47,183,120,235,226, 10,127,230,251,223,226,240,104,194,163,189, 61, 62,188,115,151, 95,123,231, - 67,110, 60,220,103, 82, 25,174, 61,220,227,197,211,107, 44, 7, 93, 20,138,216,243,104,135, 18,207, 86, 8, 83,146, 91,103,239, -155,230, 5,117, 93,209,173, 74,140,174, 88, 94, 89,227,191,250,155,127,141,191,242,159,253,109,238,109,239, 80, 90,176,162, 17, - 15, 10,187,248,148, 61,165,249, 18, 32,156,218, 59, 55, 5, 63,245,211, 63,197, 11, 87, 47,115,245,234, 85,210,194,176,118,238, - 50,155,119, 43, 94,254,244,103,249,246, 59,223,230, 96,111, 7, 41, 52,158,176,120,202,162,132, 3, 18,149, 77,214,189, 54,150, -168,210, 20, 69,229, 58,117,207, 61, 55,149,174,169,155,143,153,129,160,132,105, 10,190,133,178, 33,237, 57, 31,121, 78,146, 23, -142,223, 80, 58,144,141, 16,181, 75,221, 83, 2, 79, 9, 38,158,164, 29, 59,213,122, 28, 7,206,150, 22,249,238, 53,162, 20,218, - 24,178, 44,103, 58, 77,157,130, 62,119,152, 94, 23,173,234,205, 15,142,117,237, 32, 52,218, 88,180,117,120, 89,163, 13,198, 56, -107,226,179, 85,227,246,233, 65, 38,207,235,144,159,214, 69, 63,203, 71, 46,254, 53,133,136, 60, 45, 58,246, 89,105, 59, 79, 0, -114, 56,153, 2,180,136,141,124, 12, 75,180, 16, 38, 32,209,194,195,143, 3,186, 75, 53,135,163, 9,211, 36,229,250,141, 27,100, -121,137,193,141,200,132, 39, 49, 6, 90, 81, 27,105, 45, 85, 86, 52,234, 93, 55,130,107, 43, 73, 44, 44, 27, 75, 93, 34, 79,144, - 28,238, 81,213, 41,173,184,239,118,132, 42,100,176,113,150,222,250, 89,198, 57,140,134, 71,168, 94, 72,229, 69, 36,149, 97,146, - 37,148, 69, 65, 50, 25,177,187,191,143, 14,198,212,101, 73, 82,228,196, 75, 29,108,232,110, 16,152, 69,183,248, 39,123, 92,103, -157,207,227,165,254,137,155,168,177,104, 92, 71, 35,173,116,217,208,230,248,177, 52,104,164,180,184,193,132,235,212,103,193, 22, -198, 24, 12, 53,158,239, 17,183,218, 60,216,220,102,169,211,193,132, 30,163, 52, 67,166, 41,157,118,204, 81, 97,232,118,186,148, -101, 69,173, 53,202,147,110,156, 41, 44,158, 82,108,239, 30,208,105,247,233, 95, 93, 70,224,145, 76, 19,110,221,188,206,100, 50, - 65, 88, 75,160, 20,117,145,177, 60, 88, 98,111, 63,165, 21, 66, 86,106, 58, 81, 64,174, 43,194, 56, 98, 63,153,240,218,149, 13, -142,166, 71, 12,186, 45, 66,207,112,184,127,132, 81, 1,211,210,208, 69, 17, 72,193,189,155, 31,146,140, 15, 9,122,109,174,223, -218, 1, 33,168,140,227,151,223,186,247,128,110,183, 67,146,166,244,250, 61,138,163, 4, 83, 87,120,113,139,131,188, 32,212,150, - 72, 42,116,101,241,164,194, 87,142, 58, 83,102,150, 48, 48, 8,105,177,166, 34, 73, 70,164,147, 26,163, 75, 55,249, 51, 22,173, - 43,167, 70,143, 90,116,187, 75,180,187, 75, 8,225, 83,148,134, 44,175, 64,122,148,149,133,192, 3, 79,146,229, 37,113,220, 66, - 42,137,169, 75,186,157,152,213,181, 13,130,208,167,221, 10, 56,189,182,194,234,114,143,110,203,167,223,137,248,204,167, 95, 37, -155, 30,177,187,189,137, 41, 75,103,233,145, 2, 95,121,120, 42,196,247, 34,176, 30,202, 11,209,165,198,160,192, 86,128,165,170, -114,172,173, 65,151,232, 82, 83, 38, 37, 82, 8,114, 27, 18,183,122,248, 66,160,189,128, 36,203,105,245, 7, 20, 89, 66,183,223, - 35, 73, 18, 86,215,214, 17, 42,192,243, 5, 97,171,131, 20, 78,140, 23, 46,192,140,230,201, 86,141, 36, 67,201,197,113,185, 93, -120,157, 54, 64,151,198,190,249,248,107,221, 54, 83, 37, 39,130, 58,190, 55, 24, 99,154,131,167,105, 26, 22, 53,247, 61,195, 76, -177,174, 65,136,249, 72,119,102, 81, 43,202,146, 60,203,136,194,214,252,243,103,223,239,241, 84, 83,160,141, 43,248,181, 49,160, -205,188,161,176, 51,132,105,173,231,196,186, 48, 10,105,181, 32,142,114,188, 52, 71, 69, 33,158, 49,100, 85,194,233, 51, 27,156, - 94, 94,226,244,234,128, 92, 23,236, 62,218, 36, 27, 13,209,117, 69, 81, 20,228, 69, 73,146, 21,236, 30, 14, 89, 62,220,167,237, -197,132,158, 96,146,102,172,174,109,144, 90, 73,180,114,145,247,183,238, 19, 92, 92,166,101, 44, 45, 81,224, 55,230,187,192,186, -215,106, 29, 20,116, 67,159,193,210, 58,231,206, 46,243,198,167, 95,229,206,230, 33,215,239, 62,224,195,107,183,184,191,185, 79, - 45, 2,132, 10, 16, 54, 32, 18,138,149,126, 68,149, 85,164,181,161,210, 53, 71, 19,232,183, 35, 68,154,225,123, 30,137, 18, 12, -206,246,248,155,255,201,127,192,127,252, 55,254, 15,236, 38, 57,249,124,140, 40, 62,166,169,104, 32, 50, 74, 80, 27,248,214, 7, - 31,242,224,225, 38,175,189,250, 58, 55,110, 95, 99,249,211,159,102,227,244, 89, 30,110,110, 98, 68,192,151,255,208, 31,230, 27, -191,253,235, 20,217, 24, 99, 44,190,106,158, 79, 81,163,148, 19, 50, 86,149,110, 28, 22, 18, 37, 93,119, 94,213, 85,179,143,111, -168,128,214,137,231, 12, 2,173, 13,149,214,148,117, 77, 81,212, 20, 85, 69, 94, 22,212, 90, 83,215, 78, 97,111, 26,149,189,139, -106,117, 26,137,184, 33, 40,182, 98,151, 97, 16,197, 1,129, 31,160,164, 19, 83,231,101, 65,146,185,188,244,170,170, 80,210, 35, -240, 29, 75,160,170,106,138,162,116,171, 75,227,214, 21,149,214,232,133,162,174,222,122,229,252, 79, 62,147,244,246,156,155,252, - 83, 41,112,207,241,143,159,124,123,140, 70,247,137,121,241, 79, 39,207, 61,219,107,253,248,199,136,103, 66,108,142,163,239,154, -157, 88,131, 64,172,106, 7, 2,208,198, 1, 36, 28,251,189,161, 88,133,206,163,238, 80,177,142, 52, 20,197, 49,237, 86,204,246, -230, 67,168, 51, 54,150, 91,248, 88, 86,151,122,132,126,128,244,124,180, 21, 40, 21,224,135, 49,161, 31,186,156,103, 41,105,183, -219,180, 90, 45,218,157, 14,211, 44,113,153,196,190,143, 70, 81,105, 73, 94, 24, 38,211,156,187,247, 30,113,253,250, 45,238, 62, -216,100,235,224,144,164,206,185,187,249,128, 97, 54,101,119, 60,194, 6, 1,147, 82, 19,134, 29,210, 36,163,221,110, 19,183,219, - 78,109,219, 48, 14, 62,238,185, 21,139,110,134,185, 79,125,134,111,228, 68,110,250,113, 32,134,156,219, 52,102, 90,151,227, 8, - 91, 39, 62,156,125,222,140,169, 61,219,133,130,219,143, 10, 64, 42,143,193,234, 42, 15, 55, 55, 9,219, 29, 30,236, 13, 25,103, - 37,161,173,144, 74,161,241, 88, 30, 44,163,203,156,183,222,252, 20,237, 86, 72,208, 14,137, 91, 17, 74,122,124,253, 87,190, 78, -145, 85, 8,225,177,181,189, 73,145,167,164,211, 49, 81, 24,210, 10,125,202, 52, 33, 25,141, 25,141, 10, 70, 73, 77, 90,106,142, - 42,195,168,212, 20,198,210,233,196,232,178,160,211, 13,168,117,197,116,152,211,138, 35, 74, 35, 32,108, 17,182,122,172, 47, 15, - 56,216,188,143, 40,166, 8, 93,131, 21,164,101, 77,169, 33,106,197, 24, 43,232,119, 99, 94,121,225, 2,187, 91,155,244,186, 45, - 14,142, 18, 74, 44,163,188,160,210,134, 88, 91,148, 85,232,218,193, 48,148,148,196, 97, 64, 20, 41, 90,237, 16, 93,215, 76,199, - 99,178,116, 10,166, 70, 87, 5, 86, 87, 88, 91,227, 43,233, 34, 28,195,136, 48,238, 98,172, 71, 93, 75,106, 45, 41, 43,205,193, -112,200, 52,171,156,141,206, 42,106, 35, 40,203, 18, 79, 74, 34, 95, 17, 70, 62, 66, 10,206,159, 63,135,146,150, 44, 57, 34, 79, - 70,148,101,142,239, 41, 90,113, 68,191,215,101,125, 99,157,149,229, 21, 6,131,101,150, 87, 87, 8,162,176,193, 13, 40,138,186, - 2, 41, 48,218, 80,102, 5,186,206,169,170,146,170, 42, 16, 2,170, 34,199, 19, 22,223, 19, 40, 63,230,119,190,241, 30, 85,101, - 56,117,238, 2, 69, 94, 82,100, 41,253,126,135,100,114, 68, 85, 38, 92,184,112, 17, 33, 21,113,187, 67, 89,105, 58,157, 46, 82, -249, 36,135,123,248,194, 52, 54, 54, 7,218,240,148, 63,183,243,204, 17,174,179,208, 21,129,227, 31,204, 57, 9, 51,114,161,187, -222,102,161, 44, 51,154,156,108,118,234,199,231, 2,251,216,225, 93,158, 32,149,205,236,109,182, 1,201, 44, 2, 76,102,172,112, -107, 4, 39,163,163, 22,179, 16,102,240, 39, 7, 97,145, 98, 70, 39,147,205,148, 96,150,211,109,169,181, 97,154, 22,238,192,214, - 80,220,168, 42,116, 85,146,219,138,184, 19, 17, 74,197, 82,175, 79,167,219, 65,231, 5,211,180,102,115,103,232,188,204,177,143, -231,123, 88, 20,190, 39, 89,221, 56,195,205, 7,123, 72, 63, 38,203, 50,242, 50,103,237,212, 41, 76, 19,187,170, 76,129,103, 43, -144, 10,173, 2,132,148,248,210, 66, 40,241, 98,151, 91,223,109,183, 89,237,245, 57,181,212,227,210,202,128,171,231,207, 16,183, - 66, 30, 62,122,228, 14, 52, 81,136, 39,192, 84, 37,113, 43,102, 90, 84, 88,160, 40, 74,132,146, 14,200, 84, 22, 78,127, 80,228, -156, 90, 93, 38,140, 90,188,253,238, 53, 74,251, 20, 86,251, 51,126,121,194, 97, 86,173,116, 24, 85,105, 4,111,125,250, 77,172, -209,140, 70, 67,122,157, 14,113,167,203,215,190,254,107, 92,188,116,133,211,167, 78,177,191,183, 3, 77, 56,151, 21, 78,220,109, -141, 91,123,104,173,169,170,202, 41,213,243,146,255, 63,109,255,245, 36, 89,150,231,119, 98,159,115,206, 61, 87,185, 10,153,145, - 58,171, 42, 75,181,168, 22, 51, 61, 2,211, 24,204,130, 24, 0, 3,177,182,160, 88, 26,215, 8, 35, 31,200, 63,128,102,124, 32, - 31, 97,198, 71, 62,242,129, 15, 52,174,237, 3,105,220, 93,236,114,185, 32,176, 52, 18, 3, 16,192,204, 96, 48,221, 35, 90, 76, -139,234, 82, 89, 85, 41, 66,135,203, 43,143,224,195,185,215,221, 35, 43,179,186,122, 6,180, 50,183,136,140,242,240,136,112,191, -126,126,191,223,247,247, 21, 69, 85,179, 44, 42, 86, 69,205,170,172, 89,149, 21,203,162, 98, 90,148,204, 87, 5,243,101,193, 98, - 85,176, 88,149, 20, 69, 96,187,215,157, 65, 88,240,176, 9,123,124,219,249,159,180,198,210, 90, 71, 99, 28,214,121,140,243,225, -107, 77,112, 45,173,170,134,197,162, 96,182, 92, 49, 91,172, 88,150,193,229,207,123,144, 34,234,200,160,193,139,223, 57,135,105, -205, 26,250, 47,171,134,178,170, 41,171,230, 58, 81,238,179,189,144,224,101,129,243,159,153,134, 63, 71, 43,254, 34,232,228,243, -140, 79,254, 50,112,250,139, 72,124,155,251,108,150,201, 61,121,235, 69,242,180,235,150,183,219, 70, 44, 47,213,196, 33,113,200, -142, 51,175, 48,152, 98,202,222, 32,194,212, 21,123,145, 98, 60, 24, 50, 85, 6,235,106,116,146, 96, 68, 96,140, 70, 30,170,197, - 28, 99, 12, 87,171,154,101,219,242,233,249, 25,166,173, 73, 18,137, 38, 48,123,243, 44,103,144,164,140,242,148, 27,187,187,188, -118,247, 21,118, 6, 25,183,110,220, 32, 25, 36, 44,138, 21, 50, 78,105, 93,132,210, 3, 62,125,124, 74, 93, 25, 30,127,252, 8, -107,234, 32,197,232, 33,198, 62, 63,250,255, 31,123,245,110, 82,151, 82, 6,171,203,231,154, 52,215, 51,159,251, 56, 75,233,240, - 62, 76, 69,173,113, 72, 29,225, 60,140,119, 38,164,195, 33, 31,124,252, 4,219, 53, 17,101, 99, 24,166, 67,218,162, 98, 62,155, -161,104,105,219, 54, 92,244, 18, 60,150, 79, 62,249,132,249,178, 36, 77, 6, 84, 85, 25,154, 0,223, 50, 25, 14, 89,173,150,124, -242,201, 35,154, 85, 65, 91, 52, 44, 11, 65, 97, 60, 37, 17, 51,103,131, 36, 71, 88, 46,151, 11, 52,142,170,109,144,120,150,203, - 22, 47,106, 38, 55,246,248,217,179, 75,142,238,189,202,135,239,253,140,119, 94,185,201, 64, 52,156, 94, 76,105,100,196,170, 50, - 36,113, 30, 28,199, 4,164,145,100,118,121,140,150,150, 73, 22,113,251, 96,192, 39,231, 11, 26, 75,151,122, 5,177, 3,213,255, -253,206, 6,195,147,198, 5,104,222,123, 98, 13,210, 74, 26,105, 80,194,226, 59,158,142,215, 18,165,193,137,134, 56,181, 68,222, -135,192, 9,116,208,143, 11,197,170, 44, 73,198,158, 36, 73, 72, 7, 41,198, 26, 76,219, 80, 46,167,232, 52,227,237,251,247, 56, - 59,125, 70, 91,175, 24,101,154,166, 48, 44, 23, 83, 76, 91, 17, 43, 65, 36,198, 93, 19, 17,206, 8,165, 37,173,111,240, 88,124, - 91,226,156, 36,202, 84,231,207,175,176,149,195, 59, 67,219, 58,116, 20, 97, 76,133, 76, 6, 36, 73,194, 31,253,241,247,248,167, -191,251, 93,190,245, 75,191, 66,148, 77,184,115,235, 54,131, 60,225,252,217,199, 28,236,141,152, 95, 62, 69, 39, 9, 22, 65,109, -108, 8,215, 49, 54,152,156, 0, 73,156,172,243, 5, 84, 20,109, 10,114,183, 22,147, 29,225,104,123, 90,239,217,238,129,135,102, -113,174, 13, 16,120,231,221,174,122, 67, 25,209, 59, 40,218,224, 0,231,122,137,149, 64, 74,191,150, 85, 5,215,183,205, 98,210, -123,183,142,212,220,232,223, 67,145, 55,173,217,138, 90, 13,231,135,181,157, 66, 72,138,224, 72,183,101,200,212,155, 55, 33, 5, -194, 89,156, 13,201,144,105,150,145,102, 37, 8, 24, 13, 51, 86,117, 70,101, 29,205,106, 25, 76, 86, 76,104, 34,150,203, 2,165, - 37,131, 84,243,165, 55, 94,227,147,227, 25,109,211, 34, 85,140, 33, 98,186,170,120,118, 54, 99,255,106,201,124, 58,229,206,238, -109,206,175,166, 12,227, 29,158, 62,250,128,219,247,238,115, 53, 59, 35,145, 6, 95,175, 80,113,140,211,161, 65,210,214,116, 46, -141, 26, 8,206,141, 89, 22, 49,153, 36,220,186, 49,224,214,116,194,205,163, 29,222,122,245, 46,223,253,193,143, 57,126,246, 12, -125,239, 14, 66,106, 62,248,243,247,120,240,250,195,192, 88, 23,146,101, 25,178,218,119, 71, 3,150,101,203, 48, 41, 88,158, 60, -230,119,126,235,215,248,253,239,253,136,127,251,195,159, 97,191, 32,225, 71,116,198, 48,189, 35,219, 31,126,231,143,249, 27,191, -249, 91,124,227,107, 95,229, 7, 63,250, 33, 59,227, 33,203,162,226,183,255,230,223,228, 63,255,207,255, 11,126,249,235,239,176, -183,119,131,203,147,167,107,164,196,117,153,229,214, 90,148,220,248, 5,248,206,230,215, 88, 27, 52,252, 62,172, 16,157,247,180, -216,110, 39, 30,214, 44, 97, 66,238,206, 62, 31, 86,172,206,133,137, 38,172, 24,109,199, 78,183,120, 39, 49,214, 0, 53,173,113, - 84, 85,203, 50, 42,131,140, 18, 73,107, 12,181,105,105, 76,139,245, 14, 29,105, 76,228, 17,168, 46, 9,206, 5,111,139, 56, 32, -103,214,121, 90,107,105,109,135, 32, 56,135,250,230,219, 15,254, 81,232, 68,197,214,174,169, 51, 68,232, 40, 40,108,193,209,107, - 88, 26,185,214,103,126,145, 73,187, 23,199,191, 40, 56, 97,219,117,108,123,114,127,254,235, 47,131,214,175, 55, 0, 47,147,180, -125, 22,123,216, 46,250,190,183, 7,180, 97,223,101, 91, 75,107, 76,103,215,103, 3, 11,178,219,177,125,102, 82,143, 21,145,238, - 15,152,240, 98,206,175, 46, 41,138,101, 23, 17, 24, 28,155,138,178, 96,182, 44,176, 34,188,161,235,213,156,114,181, 96,182,152, - 83, 86, 5,117, 93,210,212, 13,222, 90,198,131,156,131,253, 67, 30,190,242, 37, 30,190,242, 22,175,221,127,157,215, 94,125,155, -219,119, 94,227,254,189,215,184,117,243, 54,123, 59, 19,226, 72, 32,124, 19, 38, 57, 15,231, 87, 83,140, 51,188,247,222,143, 56, - 63,159,242,233,227,143, 81,145,103, 52,206,194,239,226, 35,240,186,211,164,246, 76, 96,185, 9, 37, 20,155,169,123,205, 50,237, -236, 74,195, 69,221,105,208,183,159,255,222, 15,187, 35,186,244,123,117,191,109,187,219,221,250,176, 5, 41,100,183, 55,188,110, -191,216, 55, 6, 18,197,209,209, 77, 26, 99, 56,187,186,162,113,129,120,180, 40,107, 18, 45,195,155, 81,192, 87,223,121,135,155, - 71,135,164, 73,132,117,142,223,255,215,191, 79, 26, 39,204,102, 83, 22,179, 43,172, 41,241,214, 96,171,146, 85,121,193,114,117, -197,114, 89,115, 57,133, 74, 38,156, 25,199,212,121, 10, 1,153, 84, 8, 37,168,189, 9,186,231, 88,115,152,197, 88,215, 48, 57, - 58, 96, 94, 54,212,171, 6, 89, 22, 20,171,146, 69,213,114,103,119,135,123, 7, 67,198,153, 37,141, 64, 16,177, 88,150, 40, 5, -117, 85, 50,189,156, 35, 85,196,197,249,156, 44,209,100,145, 68,227, 17,214,227,157, 32,137, 34,188, 15,111,122,175, 36, 94,122, - 84,228,137, 36,248, 86,224,170, 48,197,183, 6,202, 66, 81,173, 28,202, 11, 26, 39,168, 26, 79, 20,103, 68,113,138,144, 26,231, - 21,117,235,105,156,224,244,114,134,206, 71, 28,221,186, 67, 20, 39,172, 86, 75,140,169,169,234, 21,214, 91, 30,190,250, 42,203, -233, 21,171,217,148, 88,194,124, 62,197, 24, 67,181, 90, 81,175,230,184,186, 64,218, 18, 45, 45, 66, 56,100, 36, 88,204,103, 68, - 8, 76,219,226,189,197,217, 22, 45, 21,113,148, 32,165,166,110, 42,164,109, 16,214,163,148, 70,185, 26,237, 27, 42,171,249, 79, -255,235,127,197, 31,252,225,159,177,155, 73,142,246, 6,164,195, 33,251,183,110, 99,125,139,107, 86,236,223,126,149,186,117, 72, -149,128,206, 17,201, 78, 40,132,171, 41,205,242,138, 36, 78,136,226, 4, 21,233,224,146,168, 55,159,171, 78,207, 45, 35,141,140, - 52, 74,107,148,142, 59,159,238,192, 88, 14, 1, 26, 42,124, 77,202,117,140,102,159,184, 21,166,231, 64,128,114, 62, 56,186,225, - 55,122, 97,223,235,164,101, 23,125,219, 77,118,214,118, 7,118,119,192,123,231,105, 58, 7,185,170, 40, 49,214, 32,149, 10, 81, -159,157,135, 60, 42,236,202,149, 14, 13, 10, 74,225,133, 32,210,113,208, 37,235, 32,205, 84, 42, 9,200,158, 13,133, 66,105,152, - 76, 70,212,214,241,209,211,243,192,255, 0,116,228, 25, 38,138, 36,130, 52,141,209,217,144, 85,105, 88,150, 45,247,238,191, 22, - 32,222, 72, 34,109, 48, 77,186, 88,182, 44,219,240,123,156, 60,123,134,232, 26,153, 69, 81,176, 51, 72,193, 25, 70,195, 17, 90, -107,148, 80,129,144,230, 93,183,238,114,212,157,139, 92, 93, 55, 56, 15, 73,146, 48, 24, 12, 24, 13,115, 14,118,199,152,182,225, -244,236, 28,175, 18, 62,121,118,206,253,123,247,209, 66,145,116,153,235,198, 54, 1, 85,241,130,193, 48, 71, 43, 79,170, 28, 95, -122,227, 13,254,213, 31,126,143,210,118,113,204,222,246,241,244,155,168,236,231,112,228, 30,209, 0,168,219, 32, 33,251,202, 87, -190, 74,146,100, 44,139,146,162, 40, 24, 15, 7, 52, 85,193,233,233, 41,217, 96,196,254,205,219, 92, 94, 93, 2,193,222, 21,239, - 48,206,208,154,224, 30, 90, 27, 71,211, 77,207,109,231, 38,106,187,162,105,187, 41,219,217, 78, 30,103,131, 68, 46, 76,228, 30, -227,108,215, 48, 4,182,187,117, 6,231, 76,199,175,216,248,204,219, 46,226,187,110, 2, 79,166,168,106,150,101,201,170, 44, 40, -235, 58, 24,215,244,166, 57,157,175, 71,176,143,237, 33,120, 67, 81, 53, 44, 87, 21,171, 85,197,170,108, 40,203,134,162,168, 80, -223,124, 59,216,196,250,107,148,232,141, 77,236,245,194,185, 85,248,187,201,247,243,130, 85, 62, 47,121,237,249,148, 54, 62, 39, - 56,230,243,166,248,207,203, 88,255,188,157,251,139,100, 88, 88,183, 9,185, 55,129, 32,209,154,176, 55,177,221,139, 39,248,108, - 81,143,116, 32, 49,200, 14,166, 51,173, 97,185, 90, 50,155, 77, 73,210, 4,135,167, 44, 43,102,243, 21, 6,193,229,188,160, 40, - 42,176, 6,213,161, 0,163,209,136,241,112,200,141,253, 61,222,122,253, 53,238,221,190,205,112, 48, 96, 52, 30, 98, 77,201,124, -122,206,108,113,197,179,211, 99,102,243, 75,138,229,101, 48,182,104, 45,182,173,217, 59,220,229,236,234,138, 69,217, 50, 28,238, - 49, 30,236,114, 99,255, 6,123,187,187,104, 29,100, 95,190, 11, 84, 93,103, 13,139,151,191,102,219, 67,143,191,230,250,230,159, - 67, 64, 36, 66,201,181, 76,141,173,116,164,235,132,165, 78, 32,209, 27,101,110, 93, 83, 61, 91,185, 55,251,113, 93,196,113, 28, -199, 24,107,120,255,163, 71,225,160,141, 18,118,119, 38,196,145, 66, 41,201,120, 60,225,230,205, 3, 94,123,112,155, 81,158,242, -222, 79,223,227,248,233, 51,210, 56,102, 62,189,162,169, 75, 22,179, 75,202,170, 96, 86, 76,241,179, 57, 73,229, 57,191,172, 57, -182,240,180,181,212,128, 13,249, 28,196,214,145, 72,137,115,158,253, 81,198,249,180,228,112,152,128,111, 25,237,238,114,117,181, - 64, 57,129,244,142,186, 53,120,173,144,110, 73, 22,195,238,206,132,189,221, 9,195, 81,130,146,142,197,116, 69, 26, 39, 76,139, -166,139,149,117,148,101,203,254, 48,167, 89,148,196,120, 74, 5, 42, 2, 73,216,165, 71, 34, 34, 38, 4,180,180,181,167,106, 4, -198, 72, 90, 33,153, 85,158,139,169,163,174, 5,203,165,161, 40,130, 83, 86, 8,154,208,120,169,113, 94, 82, 55,150,211,139, 41, - 34,138, 25,141,119, 17, 42, 98, 54, 95,208,182, 13, 87, 87,151, 44, 22, 11,222,120,237,117, 98, 37,168,139, 57,174, 89,210,148, - 75,164, 55,156,157, 28,243,241,227, 99,222,123,255, 35,202,213, 18,233, 44,105,172,201, 59, 57,153,180,142,139,243, 11, 76,219, -128,179,212,117,133,115,142, 52,201, 80, 82,225, 92,131, 45,150,196, 74, 99, 60, 8,215, 32,156, 97, 86,194, 63,254,239,254,128, - 91, 55,239,242,149,135,247,216,223, 25,145, 12,135,129, 88,154,106,158, 61,126, 68,146, 79,130, 76, 77,199,160, 18, 26,235,208, -194, 83, 79, 79, 81,222, 6,232, 93, 7,146, 95,159,133,222,127,140,226,104,221, 88,174,139,120, 20, 33, 58,227,142,254,235, 66, - 6, 39, 47,157,132, 98, 25,233,120,157, 19,160,250,108,117, 21, 33,149,238,180,209,157,140, 41, 10,246,176,206,249,181,124,206, -119,137,142,206,185,173, 93,252,150, 35,101,119,232,247,239, 15,217, 71,189,234,168,107, 58, 54,183,158, 0,181,206, 44, 80, 17, - 73,150,161,180, 70, 72, 73, 28,199, 44,150, 51,118,247,118, 56, 60, 60,228,244,252,130,203,249,138, 79,159,158, 80,172,230,236, -140, 18, 30,190,122,151, 36,146,232, 44, 67,198, 57,211,162,161, 54,112,112,176, 79, 30, 11, 98,217,146,105,193,120,239,128, 71, -207, 46, 89,212,142,225,104, 18,208, 15, 29, 81, 86, 53, 42,210,212,171, 5,247,111,221,192, 52, 37,145, 12,186,241, 40,214, 88, -103,200, 7, 57,113,156,116,206,102, 49,113, 28,175,205,124,172, 13, 41,100,177,142,201,135, 3,170,166,225,253,143, 62,225,228, -252,138, 7,119,239, 16, 43,133, 18, 16,105,133,177,109,112, 3,116, 30, 29,107, 98, 45, 72,132,229,245, 55,222,164,242,154, 63, -249,209,123,244,218, 5,255,162, 93,225, 86,133,247,207,125,253,242,242,146,183,223,124,155,251,247, 31,240,238,123,239,241,229, -183,191,196,249,217, 41,187, 59, 19, 62,248,232, 67,140,117,196, 89,206,238,100,196,229,229, 69,199, 30,183, 29, 84,238, 49,222, -135,253,185,221,114,158,235, 94,219,141,194,199,175, 33,251,254,245,182,221,180,239, 58,115, 27,219,125,127,120, 12,214, 14,165, -235,235,195, 19,118,242,157, 99,156,233, 87,190,198,225,108,215, 52,154, 45, 52, 96,221,120,132,102,163,172, 55,140,251,229,170, -160, 40,107,138, 50,124,237,165,240,123,207,100,126,145, 22, 93,108, 89,165,190,200,210,245,231,195,229, 47,215,178,255,101,201, -115,207, 67,239,207,175, 12, 94,202,166,124,225,138, 64,126,161,223,105,141,103,116,247,211, 58, 98,119,119,151,147,147,103,156, -156,157,227, 12, 40,161,200,178, 24,233, 53,122, 48,160,113,146, 97, 22, 82,222, 46, 46,167,104, 29,209, 84, 37,103,103,103, 84, -203, 37, 81,167,201,189,123,255, 46, 89,172,184,119,251, 22,195,201, 14,113, 58,228, 96,103,194, 40,145,140,178,140, 68, 74,198, - 3,144,218,227,117,206, 96,110,105, 91, 77, 45, 64,170,146,200, 91,124,235,144, 81, 26,156,138,164,197, 9,211, 73,125,228,139, -149, 10,207,169, 26,182, 27,159, 23,189,194,107, 66, 81,111,165,248, 2, 91,206,107,178,159, 78,250,102,157, 67, 56,219,125,175, -236, 76, 67, 4, 10,135,236,126,214,171,247,238,241,215,126,253, 91,124,240,232, 99,164, 30,113,126,242,140,182, 44,152,140, 6, - 92,205,102,252,147,127,250, 79,249,229,111,188, 77, 44,225,207,255,236, 7, 12,243, 33,143, 63,126,196, 32,203, 88,181, 53, 31, -127,252, 49, 77,181, 2, 91,177, 55,156,112,190,178, 92, 22, 32,149, 6,233, 40,164,101,132,100, 79, 72,246,156, 96,172,135, 44, -149,229,201,124,193,101,236,249,209,178,228, 77,173, 41,230, 75, 70, 89,198,188, 90, 48,153, 28, 80, 57, 88,186,150,201,193, 8, -145, 36,252,240, 39,159,242,240,225,109,242,168,225,225,173,148,189,244, 6,143,143,151, 12, 99, 13, 14,134, 89, 74, 93, 86, 40, - 39, 56,204, 19,164,112,220, 61, 28,243,228,211,115,226, 8,140,129,198,130,119, 18,229, 99,132,104,105, 61,180, 94, 81,183,134, -133,119,120,175,200, 74,203,209, 72,112,123, 71, 97,157,229,242,114, 69,101,192,171, 5, 73, 58,225,224,240, 22,113,150, 97,125, -208,249,151, 69, 77, 81,150,148,101,137,181,150, 7,119,239, 49, 72, 50,150,243, 75,202, 98,134,179, 13,214, 57, 62,249,240,152, -119,223,123,202, 69, 13,173,131,227,203,160,183,157,205, 23,252,242, 87,223, 98,127,156, 49, 24,142, 72,148, 98,186,152, 81,170, -176, 87,111,155,150, 52, 73,201,178, 28, 45,192, 10, 40,203, 2,146, 28,223,180,160, 4, 85, 19,156,212,126,245, 91,223,226, 27, - 95,121,133,233,229, 49,137,214,180, 77,201,104,156, 17,233, 4,156, 65,235,136,213,170,192,122,139,198, 99,171, 21,229,114, 70, - 26, 73, 34,181,177,195,236,209,157, 77,124,234,117,203,226, 62,251,188, 31, 66,250,224, 14,133, 39, 81, 97,247,110,173,237,242, - 7,130,226, 2, 17, 58,201, 78,130,220, 65,178, 13,116,166, 46,161,142, 4, 66, 85,200, 91, 17, 72, 84,135, 74,117,102, 51,214, - 6,212,171, 51,112,137,116, 28,188,194,149, 70,233, 4,157, 36, 68, 73, 76, 20,199,161,201, 96,147,213, 30, 37, 91, 3, 73, 36, - 58,155,227, 8, 21,107,226, 44,225,134, 61, 34,203, 50,206,207, 46,121,248,218, 3, 86,149,225,143,254,228, 93,238,220,206,249, -213, 95,249, 6,187,131, 44, 40, 40, 84,204,213,101,197,170,243, 25,176,182, 10,154,108,101, 25, 12,134, 8,103,137, 35,133, 83, - 2,103, 13,198,180, 8, 41, 41,234,146,221,253, 67, 46, 79, 46,152,151,134,195,193, 8,233,106,156,179,228,121,142, 82,146,166, -105,214, 78,162,190,155, 62,131,163,153,196, 56,135,117,130,201,120,132, 19, 18,132, 70,234, 4,248, 49,143, 30, 61,226,225,131, - 7,100,105, 28,200,150, 73,138,113, 14, 61,200,185,156,205,144, 34, 39,145,142,217,249, 51,254,167,255,195,191,203,255,237,159, -253,115,206,139, 22,107,229,115, 85,187,127,157, 94,206,157,155, 47,230,252,127,254,249, 63,231,245,215,223,224,230,205, 91,252, -238,191,248, 93,254,246,223,250,109,222,127,255, 61,190,244,165, 47, 83, 86, 13,255,252,119,127,151,255,205,255,250,127,197,227, - 79, 63,161,169,203,238,241,252, 86, 25,176,155, 48,175, 45, 39,204,254,124,235, 11,124,144,239,134, 9,221,185,237, 38,207, 95, -251,184, 93, 79, 59, 79, 29,236,250,220,235,234,159,227,133,245, 84, 56,129,113,142,214, 70, 52,205, 38,155,192, 19,174, 55,211, -161, 69, 61,145,111,109, 19,251, 82,121,215,203,164,110,235,169,254,197,123,115,241,115, 44, 72,183,229, 82,127, 81,189,249, 95, - 70,182, 38,186, 96,250,107, 18,148,231,168,221, 27,213,139,216,146,186,189,216, 89,173,135,233,250,239,243,120, 70,227, 9,111, -189,253,101,236,143,127, 68,154, 68, 68,120,218,214,115,124, 81, 82,172, 22,212, 70, 98,202, 18, 37, 5,141, 49,100,113, 76, 58, - 24,113,243,181,215, 24, 15,114,210, 56, 14,161, 13, 55,110,146,198, 17,163, 44, 39,138, 83,140, 19, 84, 5, 40,227,192,204,184, -106, 47, 57,121,214,146,165, 67,158,156,205,249,244,217, 21, 63,125,247, 61, 48, 53, 71,123,138,139,203, 25, 94, 13, 57,188,245, - 10,174,179,189,116,210, 93, 35, 0,125, 33,123,216,109, 69,196, 75,154,192, 94, 15,236,241, 47, 68, 95,164,220, 76,233, 61, 52, -239,172,195,120,137,148, 1,154, 18,194, 99,145,200,142,148,232,132,231,157,183,223,226,246,209, 13,254,213,239,125, 23, 87,149, - 72,239, 88, 21, 5,201, 96,192,217,179, 25,127,248,189,159,242,245,215, 30,112,252,233, 83, 70,163, 33, 2, 79, 50, 30,178, 59, -153,176,183,179, 67, 91,106,104, 75,126,242,209, 25,211, 74,208, 68,154,149, 9, 7,120,100, 33,151,144, 8, 79, 19, 75,206, 92, -193,188, 10,251,236, 73, 29,209,150, 53,245,110,134,181, 37,119,110,223,102, 53, 43, 56,189,184, 96, 81,215, 52,120,158,124, 50, - 71,221,144,236,236,238,240,147, 31,127,194,221,219, 3, 84, 36,136,163,156,183,223,184,195,199,207,158,114,113,177, 66,120,203, - 32,139,152,205,102,140, 82, 13,206, 34,102, 5,247,198, 25,131,124,192,233, 85,193,233,162,162,113, 21,145, 18, 76,164, 71,155, -208, 50,182,128,147, 2,107, 37,141,112, 76, 14, 50,146,212,211,182, 48, 95, 57, 6,187, 25, 7, 71, 55,104, 93,132, 65,176,187, -119,192,211,147, 19, 70,121, 68,107,195,225,139,119,124,237,171, 95,193, 52, 45, 87,231,231,204, 23,151, 92, 45, 46,184,152,205, -120,122,177,228,241, 73, 73,101, 5,181, 16, 56, 28,243, 39, 83, 46,202,154,218, 25, 70,195,156, 87, 15, 71, 12,243, 43,134, 7, - 71,212,197, 10, 25, 69, 29, 81, 12,150,179, 25,137,142, 80,145, 39, 75,227, 48, 97, 8, 1,145,198,123,199,197,229, 28,231, 28, - 73, 28, 49, 26,239, 32, 58, 41, 24, 38, 64,211, 8, 69, 83, 87, 16,103, 8,165,195,106,162,173, 56,125,250,136, 84,208,105,114, -195,196,188,205,126, 95,239,161, 59, 14,135,115,193, 85,171,143, 82, 21, 82,224,188,192,185,176,165, 21, 82,160,163, 40, 56,115, - 37,201,154,240,102, 76,208, 14, 11, 92,167, 7, 14, 16,123, 20, 43,240,225,177,149,128, 40,210,180,117,189,206,216, 14,107,206, -205,174,189,255,121, 72, 80, 50,130,110, 10,142,146,152, 56, 77, 72,179,140, 56, 73, 80,177, 94, 51,221, 5,225,239,235, 11,128, -148, 10,226, 94,206,214,189, 63, 91,195,206,193, 62,206, 88,132, 18,236,237,141,249,230, 55,190,138,243, 45,227, 73,198,141,195, - 9,195, 56,166,105, 44,142,132,214, 52, 84,141, 67,170,152,249,124, 65, 66, 68, 54,144, 88,211,118,171,136,176, 66,177,166, 97, - 60, 30,113,124,122, 65,150, 13, 56, 59, 57, 99,152, 14,120,122,177, 32, 83, 57, 59,153, 96,103, 48, 34,201,114,132,168,201,178, -156,162, 88, 5, 51, 23, 44, 82, 70,196,137, 14, 18, 76,107,192, 71,104, 36,142, 60, 32,110,226,117,134,121,206,119,255,228,123, -124,250,233, 99, 94,121,112,143, 76,167,157, 2,163, 98, 85,149, 68, 50, 40, 8,146, 56, 69,152,154,216, 21,220,221, 31,113,177, - 56, 14,121,229,126, 59, 8,106,125,106,188,148,225,228,129,239,253,249, 15,248,254, 15,127,192,183,126,233,151,249,227,239,126, -135, 63,254,147, 63,229, 55,126,253,175, 16, 39, 25,127,250,103,223,103, 48, 24,241,224,149,135,188,245,229,119,248,222,159,124, -167,103, 2,175, 79,174, 53,176,255,220, 89,183, 65, 40, 89, 95,107,155, 2,239,215, 86,232,206,250, 53,218,232,185,142,130,175, -173,178, 61, 91,214,184,215, 19, 66,183, 11,187, 16,162,115,161,115,212, 98, 99,122,180, 38,118,247,190, 8, 94,172,127, 7,245, -245, 55,239,254,163,151, 77,182,207,231,169,191,128, 83,246,133, 72,110, 47,102,184,115,157, 53,253, 18, 38, 60, 95,128,129,255, - 69, 27,130, 23, 69,182,110,119, 85,116,158,190,214,133, 93,186,177,225,214,118, 31,173,117,107,246,251,154,245,174,187,196,182, - 46,111,186,127, 92,235, 28, 77,219,114,113, 53,165, 40,150, 1, 10,158, 46,137,211, 28, 33, 19, 38,187,123,236, 76, 38,236,239, - 77,184,113,120, 64,170, 99,156,109, 57,216,223, 39,142, 34,150,139, 37, 82, 10, 78, 78,159, 98,155,146,186, 92,112,122,246,140, -217,124, 74, 93, 46,168, 86, 87,164,113, 65, 85, 60,197, 54,134,197,172, 33, 73,246, 56, 62,187,224,244,244, 17, 7,135,154,253, - 93, 65, 62, 76, 48, 64,148,228,120, 25,173,119,231,188,100,197,209, 31,116,242,186,178,241, 26,204,248,252, 69,183, 14, 38,232, -155, 4,252,203,227,112,123, 27,207,117, 66,149,216, 24,128,248, 48,225,120,239, 54,175, 73, 71, 72, 25,230, 25,111,220,187,203, - 43, 55,247, 81,174, 37,138, 34,206,231, 43,106, 15,127,246,163,119,185,115,112,128,182, 45,121,150,114,176,191, 71, 89,174,194, -190,218, 24,170,229, 18,191, 50,124, 48, 45,120,108, 61, 75,107,201,101, 68,234, 61,169, 20, 33,254,212,123, 22,206, 97,187, 3, -196,122,208,232,240, 70,179,134, 60, 17,204,174,174,104, 90,135, 74, 6, 24, 66, 52,102, 92,195,114, 94,114,235,238, 1, 73,226, - 57, 63, 94, 82, 55, 18, 82,141,165,226,230,126, 70, 26,135, 67, 35, 73,116,216,183,122,130, 23,188,143, 24,141, 71, 44,202, 10, -163, 52,211,178,162, 21, 14, 41, 29, 89,228, 73,165,199, 11,203,104, 71,163, 83, 69, 85,183, 76, 50,184,117, 24,177, 51, 26,178, -179,187, 71, 62, 74, 25,237,236,144,100, 35,118, 15,111,132,125,173,148,232, 56,198, 56, 79, 89, 85,164, 89,202,107,175, 60,192, -152,150,217,213, 37,213,114,193,229,236,146, 71, 79,142,249,201,163, 41, 79,102, 45, 83,167,168, 72,105,165,192, 8, 65,139,103, - 90, 4,227,159, 72,180,220,216, 29, 17,199, 17, 94, 8, 98, 29,138, 69,164, 52,186, 59,212,165,148,228,121, 74, 44, 69, 48,222, - 32,194, 54, 53, 77,221,176, 50,154, 89,233,185,113,120, 68, 93,149, 76, 38, 35, 6,131,140, 44,209,104, 45,185,186,188, 8,206, - 89, 94, 80,182,158, 88,107,206,158,124,140, 41,231,196, 50,200, 20,149,138,214,193, 27,170,211,236,174,213, 22,178, 11,197, 80, -178,219,155,203, 13,207, 99,157, 3, 44,144,170,219,105, 75, 73, 20, 71, 33,198, 87,134,143,253,245,187,134,234, 59, 20, 64,105, -141,142, 19, 34, 29, 82,176, 34, 29,246,248,253,125,195,249, 44, 64, 73,100,191,167,143,194,247,232, 56, 76,231,105,158,147,100, - 25, 81,146,160,226, 56,192,238, 73,152,214, 67,138, 72,248,121,189,218, 69,196, 49, 40, 25, 52,234, 82,132,253,123,164,153, 93, -205,144, 82, 18,167, 25, 82, 69,220,186,125,196,206,206,128,209, 48, 11,206,138, 34, 97,190,106,185,154,215, 28,159,206, 40,138, -134,247,222,125,151,197,197, 41,222, 86,100,249,144,120,184,203,201,180, 66, 38, 57,198,122,180, 78,104,140, 35,207, 7,120,231, -200,242, 33,243,217,148, 91, 7, 19, 82, 97, 48,109,141,247,138, 52, 31,146,143,198, 12,242,160,208, 73,210,132,241,100,180,134, -194,189,247,129,157,221,241,166,156,245, 84, 93,254,119,146,230, 60,250,232, 17,194, 11,242,193, 32, 52, 49,206, 34,156, 13, 42, - 14, 37,201,226,168,107,140, 36,217, 96,194, 31,127,255,199, 88, 23, 92, 52, 17,155,148,251,109, 10,247,243, 50,173, 62,152,167, -109, 91,150,203, 5, 95,253,242, 59,124,237,107, 95,227, 31,255,151,255, 5,247,238,221,229,205,183,222,230,254, 43,175,242,107, -191,254,235,236,239,237,113,184,191,207,135, 31,188, 79, 89,174,240, 29,169,119, 61,181,139,151,172,131,187,194,109,157, 93,243, - 42,174,185,104,250,235, 72,130,232, 72,225, 91,174,231,159,153,252,175,173,128,121, 46, 39, 99, 43, 68,198,174,161,254,110,191, -239, 54, 60, 39,183,245, 24,234, 27,111,221,251, 71, 47, 39,185,189, 56, 78,181,255,127,159,183, 83,127, 17,241,237,249,199,254, - 60,249,217,207,133,188,191,128,123,221, 47,100,114,227,125, 23,167,187,145,180, 89,107,131, 79,175, 13, 4, 5,235,194, 14, 57, - 82,138, 56,214,225,214,201,217, 98,173, 3,251,182,243,141, 55, 29, 20, 87, 87, 13,171,197,130, 68,107,118,119,119,208, 58, 33, -201,134,129, 12,163, 68, 32, 83, 93, 93, 50,159, 77, 3, 51,185, 88,177, 92, 46,104,219, 26,173, 21, 73, 98,240,118,193,225,126, -206,120,146, 48, 24, 40,134, 3, 79, 18, 21,164, 81, 67,181,152,177,186, 90,112,252,228,140,214,120,172,112,236,238, 15,201,115, -133,111, 27,110,222,190, 79,235, 35,106, 7, 94,168, 23,216, 9,189, 40,114,151,181,209,142,223,186, 96,214, 23,208, 53, 11, 76, -185, 85,212,197,122,167,254,252, 99,110, 26,183,109,149,193,214, 27,214, 19,118,115,222,108,117,193,129,117,218,167,137, 71,145, - 98,119, 50,228,238,173, 35,132,138, 56, 62,191,164,108,130,142, 84,182, 13,223,254,213, 95,198, 58,131,214,130, 79, 30,125,200, - 40,207,248,209, 15,127,204,116, 54,229,248,170, 96,190,178,232, 40,166,241,193,135, 93, 9,184, 63,220,101, 71, 39,152,214,112, - 37, 28, 75, 28,141,247,180, 30,116,224, 67,147,167, 17,121, 34,169, 86, 13, 58, 75,153, 87,150, 91,119,110,177, 42,150,236, 68, - 9,141,181,248, 68,112,112,184, 71, 44, 29,139, 69,201,147,139,130,210, 89,118,118,119,144, 74, 48, 72, 99,148,112,236,237,142, - 89,174,106,230,165,229,188,177,232, 68, 97,188, 99,190, 44,241, 14,118, 99,201, 94, 12,183, 14,134,232, 84, 17, 43, 56,186,149, -179, 51,137, 72,163,136, 97, 34,121,112,111, 76,164, 53,181,177, 24, 15,198, 75,170,214, 4, 15,124, 41,105,219, 96,242,209,180, - 13,163,201,152,225,104,128,105,107,170,114,201,229,229, 9,214, 20, 52,109,203,229,180,228, 98, 22, 76,137,250,226,231, 59,246, - 46, 66, 98,113, 20,165, 33,166,229,230,254,152, 97,150,226, 92, 64,161,158, 29,159,226,124,136,205, 77,179, 12, 33, 5,163,241, - 16,229, 29,197,170,198,138, 8,211,148,248,182,197, 71, 67, 38,135,247, 80, 82,146,231, 3,162, 72, 49, 25,230,212,213,146, 56, -137, 49,214,177, 90, 44,113, 81,140, 37, 98, 49,157,113,252,201, 7, 12,116, 8,106,137,162,144, 70, 37,213,134, 92, 41, 59, 98, - 38, 66, 4,130,220, 22,233, 77,118,187,243,112, 50,203,110,250,246, 91,169, 88,221,254, 90, 74,148,140,130,247,118,119,247, 40, -138, 16,157,165,171,140, 84, 96, 32,199, 61,100,222, 49,239, 59, 41, 93,127, 31,165, 2, 49, 47,210, 49, 58, 78,136,147, 4,157, -164,232, 52, 37,201, 50,146, 52, 67, 39, 41,145,142,137,162, 24,149,132,162,237, 5, 97, 95,175, 20, 34, 82,161, 89,232,136,115, -200, 8,162, 40, 20,124, 17,225,157,231,242,236, 2, 47, 20,181, 9,112,107,158,103,193,202, 87, 41, 36, 17,166, 5, 45, 19,172, -151, 28,159, 93,241,241, 39,143,121,245,193, 93,246,198, 25,206, 84, 60,126,118, 70, 52,220,195,197, 67,106, 23,136, 36,195,209, -136,170,105,187,129,198,144, 14, 39, 84, 85,193, 78, 38, 25,199,161,161,149, 81,204,124, 62,167,173,107, 34,173,209, 73, 76,146, - 36, 40, 41,137,147,152, 56, 78,200,243,148, 52,137,215, 40,104,120,126, 52,197,114, 21, 28, 51,133,230,227,143, 62,102, 56, 28, - 50,154,140, 72,147, 8, 76,139,146,132,115, 46, 78, 66,227,134,224, 87,127,229, 87,104,154,138,179,227, 51,202,162,222,148,242, -190,232, 10,127,125,183,238,183,253, 52,194,121, 62,159,207,121,245,254,171,188,241,198,235, 28,159, 28,243,222,123,239, 17, 39, - 41,119,238,222, 67,199, 9,206, 88, 62,250,240,125,238,223,189,205,179, 39,159, 34,241, 72, 9,113,151, 49,160,187, 8, 95,221, -133, 6, 73, 33,215,177,185,215, 98,168,251, 97,199,117,193, 47,221, 74, 39,164,169, 69, 93, 12,117,119,139,212, 70,121,209,173, -129, 66,147, 26,194,123,162,245,215, 69,248,188,147,105,246,134, 75,108,197, 97,111, 36,154, 27,249,177,232,220,248, 62,191,168, - 35, 62,103, 42, 22, 47,156,212, 95,154,205,126,237, 49,174, 55, 4,159, 87,208, 95,148,204,246, 69,253,199,159,191,125,238,253, -187, 14, 41, 76,234,157,182,176,211,169,247,250, 66,119,109, 82, 15, 68,185,245,212, 30,105, 84, 96,189, 5,249,131, 7,235,130, - 55,112, 85, 20, 68, 66,160,165,164,105, 29,151,243,101, 64, 1, 76,195,213,229, 57,243,217, 28, 65, 8,115,240,206, 34,165,224, -240, 96,159,253,253, 61, 18, 45,144,206, 16, 73,207,225,193, 1, 73, 28,209, 54, 5,203,233, 41,237,162,102,246,108,206,236,252, -140, 40,242,164,131,152, 87,223,120, 72,146,142, 80,164, 84,133, 96,119,255, 46,103,151, 11,108,199,236, 21,235,247,132,223,172, - 22, 94,128,166,108, 19,229,182,187,192,207, 48,223, 63, 51,169,111,138,250,139, 16,152,107, 25,235, 66,210,191, 85,186, 69,230, -250, 13,187, 22, 43,116, 82, 15,239, 5, 13,129,165,172, 35,201,237, 91,183,185,119,247, 46, 7,187, 59,248,170, 96,122,121,201, -151,222,122,141,243,139, 83,150,203, 25, 59,227, 17,207, 30, 63,230, 7,223,255,128, 73,158,114,121, 81, 48,119,158,101,107,185, - 61, 25,177, 35, 66, 44,227,194, 91,158, 85, 5, 53,158, 2,135,118,130,129, 8, 19, 82,229, 12, 75, 25,118,177,123,163, 36, 4, - 67, 88,137,215, 9,101, 91,115,176, 59, 64, 69,142,105,211,208, 74, 77, 89,148,188,122,123,128,162,162,105, 60, 79,174, 60,143, -206, 23,236,238,238,177, 51,204, 48,197, 18,219,212,236,236, 12,145, 2, 92, 99,200,148,197,213, 45, 17,144,197,154,129,214,200, -198,210,122,199,180,178, 52,181,101,152, 27,226,216,115,208, 93, 15,198, 22,212,109,203,254,225, 33,217, 96, 4, 82,177, 90, 21, - 28, 28,222,160,172,202,206, 44,195,114,243,230, 77,100,164,130,110, 28, 75, 89, 44,152,207, 46, 48,166, 32, 75, 83,198,249, 16, - 87,149,196,206,242,224,112,200,157,253,148,166,168, 66, 3,235,187,169,214,123, 68, 99, 56, 28, 37,236, 12,243,144,124, 38, 20, -198,194,116, 54, 95,239,148, 17,130,209,100, 12,198, 82, 44, 43,234,214,226,154, 10,211, 52, 76, 11,203,222,209, 3,188,247,232, - 36, 38,203, 82,134,131, 24,211, 84, 8, 41, 89,150, 37,182,105,209,217,152,211,203, 25,255,238, 15,126,143,221, 44, 34, 85, 16, - 71, 97,178,141,244,102, 50, 15, 83,247,182, 55,194, 70, 18,182,109,244, 18,174,101, 7, 88,132, 0,165, 4,206, 25,116,164, 73, - 98,189, 81,171, 16,138,190,236,208, 67,213,253, 28,191, 38,198,234,112,232,198,122, 93,124,251,247,125, 20,233,176, 43,215, 93, - 58, 96, 28,119, 83,122, 70,156,164, 68,113,130,142, 99, 84, 28,135,162,173, 20, 68,170,243,183,149, 8,185, 33,177, 6, 72, 95, -130, 80,120,165,130,132, 76,134, 70,188, 94,149,172,150, 5,113,154, 97,157, 32, 78, 82,148, 14,150,161,193, 56, 5,118,198,187, -228,105,196,197,229, 21, 79, 78,206,112, 2, 94,127,120,159,135, 15,142,120,251,205, 7,164,163,125, 30, 29, 79, 57,155, 87,236, - 31,221, 33,207, 7, 88,235, 88,174, 10,132,240,148,197,130,225,238, 33,231,231,167,220,221, 31,177, 63, 80,100,113,130,208, 41, - 77,211,226,156,165, 44, 75,234,170,194,180,109, 72, 25, 83,225, 57, 22, 34, 88, 60,103,105,194, 32, 31, 16,199,233, 90,119, 63, -155, 87,184,214,225,173,231,211,199, 79, 56,188,113, 64,158,198,220,186,113,192,108,122,134,214, 26,135, 64, 71, 26,215,182,100, -113,204, 32,205,185,115,243, 6,171,178,226,242,106, 22,194,182,214,147,224,231, 24,169,116,235, 79,107, 29,182,177,252,210, 47, -125,147,123,119,239,242,143,255,241,127,197,227, 39, 79,104,109,144, 26,126,248,254,123,124,250,241,135,129,220,154,166,156,157, - 30,163, 4,221,173,111, 28,187, 92,129, 62,182,204,119,241,173,136,107,131, 71, 95,228, 69,119, 93,134, 34,222,165, 8,110,173, -140, 34,213,249, 37,200, 77,193,142,148, 90,127,236,111,235,244, 65, 41,215,206,137, 61,178,173,186,226,223,223,119,219, 39, 37, - 92,143, 42,192,239,189,124,233, 51,112,195,231, 26,202,188,124, 82, 23, 47, 41, 22,215, 27,134,173,136, 68,196,181,207,229, 22, -100,177,109,108, 35, 94,246, 74,110,237,180,253,103,194, 98,182, 37,121,159,229,196, 93,255,188,123,209,214,147,122, 7,193,111, - 49,224,133, 8, 19, 99,172, 35,226, 56, 10,209,125, 81, 68,172,187, 3,165, 79,172,179,126,205,126,188,188, 56,167, 44,150, 44, -230, 11,180,210, 84,181, 9, 69,202, 54, 20,197,138, 52,137,137,227, 12, 80,212,109, 77, 26, 71, 8, 23, 12, 70,166, 87, 51,242, -124,194,193,193, 29, 6,195, 93,178, 60, 99,181,152,130,169,176,165,163, 89, 90,246,246,115,118,246,115,110,220, 62, 34,206,134, - 76, 23, 13,171,210, 16,235, 9,163,201, 30, 23,151, 23,212,214,224,187,245,128, 92, 79,210,221,115, 45,215,244, 1,132,112,168, -126, 2,223, 58,244,228,182,124,177,187, 48,251, 11, 56, 82,146, 40,146,221, 84, 37,187,238, 52, 28, 56,253,243, 19, 58, 87, 21, - 2, 19,186,207,163,238, 66,143,162, 64, 10, 12, 31,101,184,111,164,214, 23,175,232,166, 72, 39,100, 96,147,118, 77,216,209,225, - 1, 59,195,140,119,222,126,133,111,127,235,155,156, 95,156,115,117,117, 65, 42, 36,171,233,156,239,253,232,103,204, 86, 13,198, -194,121,109, 41, 61,164, 42, 34,106, 26, 82, 28,214,195,204, 25,140,135, 88, 40,108,119,144, 87,206, 82,226,176, 74, 96,100,176, -237, 84,214, 49, 25, 36,204,231, 21,249,120,204,233, 98,137,141, 64,197, 96,156, 97, 94, 24, 82, 5, 89,234,201, 82,141,109, 29, -138,136,162,114,124,116,124,197,194, 88,238, 62,184, 75,170, 35, 46, 79, 47,144,214,178, 59,208,228, 90, 18,203, 62, 68, 36, 2, - 4,113, 12, 6, 71,150, 69, 28,238, 13, 2, 51, 89,133,169,106, 50,158,112,227,198, 1,121, 62,160,110, 45,187,251, 7,160, 20, -141, 13,146,156, 36,209,232, 88,177,179, 51,217,188,158, 2,218,170,164,173, 42,188, 51, 84,229, 42, 28, 20,206,225,218,154,195, - 73,198,171,119, 14,130, 55,248,172, 64,116,196,159,200,123, 18,224,238,254,144,195, 73,206,206, 56, 39,142,130,157,238,104, 50, -225,209, 39,143,209,157,255,126, 20,135,169,166,173, 91,102,179, 5, 77,221, 2,142,162, 44,153, 47, 91,226,124,130,140, 99,156, - 53, 12, 7, 41,216,150, 88, 43, 90,235,168,234, 22,103, 44, 69,235,249,111,254,233,255,155,167, 79,159,113,184,191,199,100,144, -161, 35,209, 29,134,106, 51,137,116,236,118,213, 49,221,233,246,229,219,230, 71,253,199,222, 9, 81, 42, 21,118,237, 61,217, 78, -200,245,185, 19,206,177,238, 49,214, 14,112,161,153,149, 29,116, 31,162,124, 59,104, 95,116,166, 49, 82, 33,186, 41, 93, 70, 49, - 82,107, 84,172, 81, 81, 68,148,164, 1,170,215,157,116, 45,214,235,162, 30, 88,248,155,223,161,255,253, 69,231, 39, 47,149,134, - 40, 56, 80,246, 97, 34,229, 98,133,107,131, 94,188,172, 27,140, 11,146,168,166,173,241, 30,110,221,190, 19, 12,146,202, 5,103, - 23,151,156, 95,205,104, 77,195,104,148,144,196, 30,173, 21, 98,116,131, 21, 41,232, 1,113,146,161, 35, 69,211,212,196,113,198, -124,177, 36,141,195, 20, 94,172, 10,114, 45, 57, 26,165,184,182, 66,165, 89,224,176, 36,193,124,198, 57, 31, 8,141,214, 6,153, - 91,107,137,227, 56, 68,133, 70,225, 26,150, 74,145,198, 9,177,214, 32, 53,117, 93, 81,215, 13, 87, 23,151,216,186,100,111,111, - 72,150,107,170,186,130, 14,137,144,162, 95,117,165,188,250,234, 43,224, 28,183,143,110, 16, 9,193,201,233, 69,144,120,193,117, -247, 44,191, 5,116, 75,209, 7,135, 2,112,121,121,197,235, 15,223,224,173, 55,222,226,252,228,132,147,167,159,208,150,115, 78, -158,126,196,197,217, 41,121,150, 33,145,236,238,238, 82, 22, 5, 69, 89,116,158, 7, 91,245,198,187,245,227,173, 37,189,157,132, - 45, 24,214,116, 65, 49, 93,100,110,104, 2,194,153, 26,154,196,222,210,216,175,207,216,222,222,184,175,113,242,154, 33,219, 54, -200,212,203,132,251,141,169,188,118,102,198,145, 10,105,109,113, 24, 50,251,226,190,222,169, 63,175, 37, 95,135,140,138,151, 77, -235, 98,187, 18,188,116,127,254, 34,173,185, 20, 34,100, 20,119,255,109,191,193,250,212,162,205,147,202,102, 79,225,251, 2,190, -185,255,250,141,233,183,229, 87,207,181, 1, 66, 92, 43,238,222,191,200, 55, 47,176, 25,233,204, 2,174, 21,245,206,246,207, 90, - 11,248, 32,105,211,161,219,143, 34,133,142,163,174,112, 69,244,215,193,134, 61,105,169,170,130,233,236,146,201,120,200,112, 48, -228,252,244,138,186, 49,136, 72, 34, 53,196, 73,130, 49,193, 53, 46,203, 50, 34,105, 49,117, 65, 44, 61, 69, 93,144, 15, 71,140, -247, 14,113, 2,148,114, 20,203,115,134, 3, 65, 85, 20, 88, 11, 71,183,111, 32,164, 96, 85,150, 60, 61, 62, 35,202, 71,196,131, - 9,141,113, 36,137,160, 46, 23, 20,101,129, 23,221, 68,176,214,138,139,117, 71,170,164, 32,146,116, 30,197, 93,167, 41, 67,214, -111,223, 45,246,176,144,142,228, 86,193, 86, 36,177, 34,214,253, 45,132,170, 36,113,184,197,177,234, 62, 87, 36, 90,145,232,168, -187, 41,226, 72,174, 63,198, 58, 60, 86, 28, 73,146, 88,145,198,225,190,186,235,100,131,219,156,193, 89,211,173, 17,100, 96,224, -182, 37,135,187, 35, 92, 85,241,225, 7, 31, 48, 26,231,232,170,229, 39,223,255, 25,159,206,150, 44,188, 96, 86, 58,206,157, 39, -209, 26,107, 77,152,138, 71, 99,170,142,153, 90,122,207,220, 57,140,135,214,123,172, 12,200,128,235, 94, 71, 39,160,109, 29,177, - 15,214,176,101,211, 48,216, 25,241,233,197,140,189,221, 29,110,238, 31,176,147,165, 76,167, 43, 22,133, 99,188,187,199, 56, 83, -228, 84,104,219, 50,173, 28,159, 44, 42,126,118,114,133, 74, 99, 94,123,112, 7,105, 61,173,105, 88, 20, 53, 66, 10, 98, 21,225, - 45,104,237,176,190,225,246,173,140, 84,123, 60, 45,249, 40,163,168, 13, 66, 4, 19, 22,239, 21, 89,150,113,124,122, 70,213, 90, - 80, 17,135, 71, 71,196,113,140, 20,158,178, 44,153, 77,167, 68,145,196, 25,131,244, 14, 83,215, 72, 15,137, 78,112, 62,104,140, -145, 48,222,233,246,162, 82, 49,189, 90, 48,208,146,221, 44,129,178, 97,172, 4,123,105,196,173,131, 1,195, 92, 17,107,201, 48, -209, 88,111, 73,243,140,167,199,167, 88, 75, 72,145,114, 45,121,170,209, 42, 97,185,172, 16,222, 83,155,150,162,113, 24,227, 89, - 22, 21,147,221, 61,202,213,156,209, 32,195,152, 22, 47,228, 90, 91,123, 57,157,242,255,252,127,253, 46,171,218, 80, 89,137,245, -130, 27,251,187, 12, 34, 31,228,116, 34, 92, 7,107,219,213,174,217, 19,114, 35,169, 92, 23,248, 45,203, 85,223,249,185, 43,165, -214, 73, 91,170,135,209, 59,243,154, 62, 21,173,127, 12,223,125, 45, 76,223,138, 40, 14,136,156, 95, 15, 34,114,227,233,160, 58, -136, 92, 42,100,191,111,143,162,181, 78, 94, 40,137,212,186,147,182,133, 9,221,211, 57,206,173, 35,194,131, 43,159, 16, 34,152, - 47, 65, 40,142, 82,133,221,186,144,204, 47, 46, 73,100, 20,224,238, 44, 70, 70,129,245,223, 90,195,141,155, 71, 65,251,220, 54, -120,231, 56, 59, 95,112,113,185,160, 44, 86, 33,154, 89, 0, 34,230, 95,253,233,123, 28,188,242, 38, 86, 68,140,135, 3, 34, 1, - 90, 41, 80,193, 94, 56,236,214,106, 84, 28, 51,202,114, 30,222,220, 97,156, 41,166,171,130, 85,177, 98, 50,158, 80, 85, 53,174, -147,178, 54, 77, 75, 89,213, 24,227,184,186,152, 81,148, 53, 85,211, 6,149,141, 16,224, 2, 65,211,135, 49, 19,165, 35,218,178, - 98,126,113,206,238,206,128,108,156,112,113, 53, 39, 77, 6, 8,111,209,202,179,183,183, 67,164, 53,123,123,187,236,140,134, 76, -180,228,230,254, 14,187,163, 17, 79,159,157, 81, 54, 77,112,170,148, 93,202,221, 26,129,239,124, 53,182,248,116, 94, 8, 86,203, -130, 95,255,214,175,241,218,253,251,252,232,207,190,195, 36,245,236, 14,194,117, 80,150, 21, 81, 20,147,166, 35,134,147, 29, 78, - 78, 78,240,180,235, 97,213,227,240,210,111,209,243,186,167,200,155, 80,212,157,199, 88,191, 14,200,146,235, 60,130,205,138,104, -157, 83,208, 87,154,126, 5,185,110, 60,187,234,191,101, 71, 46,186,161,170, 91,130,118,215, 93, 55, 52,169,240, 49,142,194, 64, - 25,175,207,207,184, 43,234,234,122, 81,255,204,199,159, 59,125, 63,183,103,127, 41, 41,238, 5,147,252,207,209,165,191, 92, 30, -247,115,224,247,191,128,244,173,103, 45,250, 32, 8,188, 54,169,183,207,105, 9,251, 8,197, 48,169,235,245,238, 68,119,147,195, - 6,210, 15,146, 3,231, 28,117, 93, 50,157, 94, 48,200, 19,154,186,101, 85, 84,136, 40, 66,167, 49,168, 16,242, 96, 93, 48,231, - 79, 18, 77,154, 68,184,182, 13, 5, 51, 5, 29,123,246,246, 70,236,239,143,200, 50,197,229,217, 41,229,170, 64,160,136, 68,194, -251,239, 62,101,185,108,152, 45,174,208,131,132,201,222, 93,156,159,224,172, 65, 43,193,116,122, 73, 89,215, 88,161,240, 94,110, -144,144,190,179, 84, 98,189,227, 81, 81,208,211,134,207,229, 90, 54,164,186, 29, 78, 20, 5,163, 29, 29, 73,146, 14,173,136,117, -180, 70, 46,250,206,241, 90, 97,215, 42, 88,147,198, 58, 20,244,245,247,108, 16,143,117, 83,208, 55, 0,235, 70, 73, 5, 56, 12, - 66,214, 61, 96,141, 33,141, 53,194,135,136,213,178, 40,104,138, 42,168, 4,134, 41, 63,250,211, 63,229,114,186,196,196,146,121, - 27,214, 32, 18, 23,118,102,137, 98,110, 44,211,170,102,110, 12,165,247,180,157,126, 95, 69, 33,190,210,109,173,107,156,216,200, - 80, 76,107,208, 82, 97,140, 37,213, 41,177,212, 60, 59,189, 32, 79,115,226, 40,102,144,101,120,111, 40,150, 75,238,221,190,137, - 19, 37,113,214,144,226, 17, 6, 22,181,227,241, 85,201, 39,151, 51, 38,135,123, 28, 29,236,144, 38, 14,233, 13,174, 14,197,183, -169, 91,118,247, 82,100,162,185,156,149, 44, 11,195,124,209,176, 90,121,148,116,156,157, 94, 49,155,206,112, 82,112,239,149, 87, -137,147, 60, 24,191,212, 77,103,218, 35,193,193,217,217, 57,251,187,251,129, 8, 38,163, 53,161,203,121,143, 84,221,138, 68, 10, -146, 52,197, 58, 71, 81, 20, 20,101,133,146, 14,165,130, 10, 97,255, 96,194,141,131, 17,194,215,196,202,146, 37, 10,233, 3,188, -217, 24, 67,150, 5, 27,226, 40, 82,184, 62,235,221,121,156, 13,111,211,197, 98, 30, 10, 25, 17,173,151,140, 38, 59,140,242,156, - 60, 75,104,219, 38, 52,205,206,113,114,122,198, 7,159, 60,230,227,103, 39,172, 42,139, 84, 17,139,233, 37,119,143,246,152,228, - 9,186, 75,176,146, 82,109,246,234, 29,105, 78, 72,113, 77,122,219, 23,253,254,125,216,195,242,189,131,228,134,104, 23, 2, 52, -100,151,158,230, 1,209,105,201, 3,209,174,103,208,247,198, 52,172,237, 93,251,251,171,222,221, 78,200,141,193,205,218,159, 62, -236,224,133,220,216,191, 34,229,122, 24, 90,219, 41, 75,177, 97, 65,119, 13, 10,170,187,111, 71,234,107,234,154,229,213,140, 44, - 73, 41,203,138, 36, 77, 3, 91, 95, 74,210, 36, 99,114,112,192,167, 31, 61,194,182, 22,124,196, 98, 97,120,244,201, 51, 30,125, -252, 9,109, 85,161,188,228,211,143, 79,248,238,159,127,196,215,126,233, 87,208,113, 74, 93,148, 12, 6, 25,170,115, 37, 59,187, -184,100, 52, 24,144,166,225, 53,204, 99, 69, 84, 94, 33, 77, 73,182,179,195,222,222, 62,109,211, 82,108, 77,236, 61,175, 96,144, - 15, 40,203,154,198, 24,156,247, 76,167, 83, 22,139, 69,231,215,177,226,244,114,198,162,168,152, 47, 11,148,210, 44,231, 75,210, - 44,231,147, 39, 1,233,201,146,152, 65, 26, 35,156,101, 50, 26,144,101, 57,249, 96,200,238,206,132,157, 76, 48, 76, 20,187,227, - 33, 7,251, 59, 60,121,118,194,162,108,240,196, 93,193, 19,235, 90, 30, 86,139,190, 27, 70,195, 0,115,122,114,202,195, 87, 95, -229,205,215, 31, 50,189, 60,229,244,228, 41, 89,170,137,162, 4,169, 52, 77,109,209, 58,230,224, 96,159,229, 98, 70, 89,172,214, -138,134,126, 54,236,253, 51,172,237, 76,102,140,233, 36,124,110, 29,205,218, 79,224, 61,129,178, 47,216,155, 85, 99,255,120,242, -185,113,124, 11,250, 94,175, 23, 58,187,224,174,217,236,149, 74, 97, 66,239,208,225,126, 50,143, 59,219,228,174, 6, 69, 74,110, - 36,109,127, 89,233,216,231, 69,175,254, 34,137,108,219,240,254, 95, 36, 22,213,255,130,236,247, 95,188, 29,248,249,125,198,243, - 13, 77,150,101, 72, 41, 41,203, 37,163,193, 14, 96,169,170,146,209, 48, 9,161, 39, 70,160,181,166,105, 27, 90,211, 34,243, 12, -161, 99,116,156, 98,205,156, 68, 75,166,151,207, 88, 46,207, 57,216,223, 71,170,140,182, 81, 20,171, 25,153, 16,220,186,243, 42, -109,179, 36, 25,120,222,120,243, 75,156, 79, 45,229,170,232,118, 61,253,133, 33,187,195,214,227, 4,215,248, 13, 82,244,126,217, -161, 11,220,112,144,196,218, 34,215,251,206, 86, 87,136, 64, 58,234, 67, 44, 58,153,154,220, 34,126,244, 23,241,122, 47, 37,122, -107,206,254,107,106,253,184, 27, 22,252, 6,218,239,191,207, 57,143, 49,158, 6,131,244, 62,216, 71,122, 79, 26, 37,220, 60, 60, -100, 57,187, 34,114, 57,167,207, 30,243,224,214,109,138,249, 21, 63,248,209,247,241,222,176,127, 52,100, 49,109,168,219, 26, 33, - 36,147, 46,246,178,150,142, 10, 48,210,227,145,108, 98,223,183,152,172, 91,116,194,126, 81,100,133,167,192,227, 90, 67,174, 34, -218,233,130,131,253, 67, 46,139, 21, 31, 60, 57, 97,127,144,115,255,246, 77,134,121, 66, 49,191,224,170,178, 12, 70,187,180,118, -197,157,125,193, 32, 83,184, 83,195,167, 21,156,175, 12,255,250,199,143,120,117, 55,227,245,163, 29, 84,234,137, 92,137,173, 44, -137, 4, 83,183,148,117, 75, 28,199, 12, 82, 69,154,198, 12, 6, 57, 66, 73,210, 60, 99, 48, 24, 98,132,101,182, 88,160, 84, 72, -120, 18, 30,164, 8,123, 75, 33, 60,105,154,208, 84,213,186,144, 69, 58, 66,106, 21,156, 7,173, 9,154,106,225, 89, 44,230,157, -209,143, 38,203, 98,138,217, 28, 33, 60,123,147, 28,169, 21, 10,139,136, 36,117, 89, 82, 44, 83,166, 40,188,240, 52,214, 48, 30, -237, 83, 87, 37,105, 18, 81,139, 64,164, 44,138,146, 36,202,104,186, 16, 24,215, 57,113, 41, 9, 90, 4,217,152, 86,193, 17, 80, -197,154,162, 88,241,241,147,167,252,249,207, 62,226,228, 98, 78, 58,156,160, 59, 88,251,211,147, 51,110,238,189,134,246,144, 2, -198, 89, 4, 10,213, 21,112,107,109,135, 50,200, 46, 87, 32, 88,186,186,174, 97,145, 34,234, 98, 82, 85,183, 46,114, 93,184, 87, - 55, 89,119,205, 66,104,230, 85,215, 16,136,117,178,155,186, 70, 80,242, 91,228,225,235, 7, 85, 47, 73,235,215, 3,235,207,165, -236, 52,240, 93,172,106,111,155,172,228, 90,246, 41,232,201,126, 97, 42,239,211, 12, 69,159,207,238,109,112,153, 20, 2,157,198, -104, 99,104,170, 6,128,166,110,185,115,255, 62,197,108,129,148, 1, 97, 88,213, 13,195,241, 8,173, 35, 30,127,114,204,222,110, -198, 56, 77,249,233, 15,223, 39,209, 57,182,110, 24,236,236, 83, 10,168,234, 10,111, 13,168,208,136, 15, 70, 67,202,114,202, 96, -178, 75, 93, 87,232,189, 4,239, 13,151,151,151, 72,169, 24, 15, 71,236,239,239,119, 41,130,102, 61, 16,149,101,201,238,222, 30, - 23, 87,151, 24,235, 80, 81,140, 20, 4,115,159,198,146,101, 41,205,249, 21,198, 89, 26,107, 65, 68,252,244,167, 31, 49,222, 31, -243,250, 27,183,144,190,166,105, 42, 90, 87, 51,159,207,145, 82,179,183,223, 32, 5, 12, 6, 49,119,212, 4,173, 32,146,142, 72, -252, 38,255,247,127,249,239,248,240,116, 70,233,195,107, 29, 38, 89,123,109,106,119, 29,161,206, 11,207,127,251, 79,255, 9, 95, -255,202,151,248,229, 95,253, 53, 62,120,239,199, 20,149, 97, 55, 19,172, 86, 75,146, 76,208, 52, 21, 85, 85,240,240,225, 67, 78, - 79,159,134,148, 60,194,115,239,187, 29,125,112,147, 13,200,109, 47, 35,179,107, 73, 89, 71,196, 92,251, 34,116,106, 30, 28,194, -201,205,235,127, 77,250,214,101, 97,172,125, 59,122,172,161, 27, 42,122,214,123,247,239,174,141, 92,123, 27,244, 10, 16,221, 25, -113, 73,217, 5, 16,123,241,217, 73,253,250, 78, 93,188,208, 6,246, 69, 12,118, 33, 94,126,223, 23,147,240, 94,190,123,223,232, -247, 94,180,207,223,182,178,245, 47, 44,234, 47,139,125,221,206, 63,126, 81, 59,176,113,149,219, 4,186, 24,227,104,140,237,118, -234,225, 77, 25, 69, 17, 73, 28,135, 73,189,155, 54,183, 39,117, 16,215, 67, 98,188,229,226,226, 28,103,234, 46,240, 33,194, 9, - 73, 54, 24,210, 90,139, 55,130,229,170,198, 58, 72,211,132,189,189, 29,156,113,204,103, 43,156, 49, 28, 30,222,232, 88,198, 57, -120,197,173,155,247,185,184, 88, 50,159,150,124,245, 43, 95,230,232,104,143, 56, 22, 60,120,240, 10,251,251,183,168,154,208,186, - 90, 23,236, 70,151,139, 25,243,213, 2,219, 17,206,100,207,210, 84,226, 58,251,178,131,119, 2,228, 30, 72,184, 27,248,189,251, - 92, 9,226, 72,160, 35,129,238,160,248, 13,116,174, 58, 72, 94, 6, 70,171,222,124,174,181, 90,195,245,122,107,103,174, 35,217, -133,147,116, 80,126, 47, 19,140, 58,146, 72, 96,234,117,217,201, 65, 26,118,184,187,203,193,206,152,213,108, 74, 91,149,232, 72, - 82, 21, 43,206,159, 62,229,241,167, 39,120, 37,152,215,150,171, 69, 67,227, 33, 79, 83,110,103, 9, 30, 75,233, 60,133, 3, 35, - 4,206, 75, 4,221,129, 44,197, 90,110,178, 33,116,208, 65,124, 42,120, 62, 11,104,133,160,116, 14, 39, 5,141,115, 28,221,187, -205,213,124, 78, 89, 86,228,131, 12,180, 96, 48,158,112,113, 53,103,144, 12, 24, 36, 3, 80, 13,135, 7, 67, 82, 4,170,134,178, - 53, 84, 30, 46, 11,203,179,171, 2,161,130, 4, 74,105,129, 23, 30,231, 64, 43,141,173, 90, 48, 22,225, 61, 69,177,164,172, 86, - 88,223,178,172, 22, 44, 86, 11,156,179,116, 52, 66,164,240, 44,230, 87,148,229, 2,227, 90,140,173, 81,194,227,109,141,146,142, -178, 92,208, 52,101,240, 63,183,129,113,108,141, 9, 28,146, 78, 58,228,157, 69, 11, 21, 98, 67,141,167, 92, 21,172,230, 43,138, -101,133,105, 44,137,214,100,121, 70,156, 68,221,110, 47,102,181, 12,147,141,245,134, 52, 77, 72,147, 44, 76, 52, 54,120,233,123, - 33, 25, 12, 39,120, 20, 89,158,133,251, 58, 71, 89,213, 56, 20,211,101,193,191,249,131, 63,228,124, 94,224,164, 38, 78, 51,170, -186, 66, 71, 18,211,212,220, 60,186, 73,172, 4,105, 28, 93, 35, 94,110, 27,205, 8, 37,215, 40,139,144, 98, 61,197,247,178,164, -245, 68, 45, 55,251,240, 72,235,110, 39,222, 77,227, 29, 74, 21,166,172,160,113,143,186,199, 9,239,145,237,159,191, 77,198,219, -178,216, 22, 98, 75,108, 21,236,147, 67, 40,226,150, 4, 84,201,181, 33,231, 38,178,186,155,137,122,187, 90,252, 90, 85, 2, 96, -234,134,166,170,104,155, 6,103, 60, 85, 85,225,188, 39, 31, 14, 24, 76,118,184, 60, 63, 91,159,105, 42, 82,196,105,198,159,124, -255,207,105, 91,195, 95,255, 15,126,137,193, 32, 67,107,197,178,178,188,242,198,219,236,221, 56, 2, 33,104,154,154,209,112,208, -253, 30,125,184,146, 39,138, 19, 18, 5, 95,121,245,136,221, 97, 66, 60,154, 48, 26,141, 72,146, 4,231,108,176,135,117,225,156, - 76,210,132, 56, 78,214, 62, 2,190,243, 21,216,158, 32,173,247, 68, 58,102,190, 92,118,215, 85,201,147,199, 79,121,245,213,215, -217,217, 25, 50, 26,196,216,182, 34, 86,132,189,190,142,137,227, 20,157, 36,196, 89, 26,166, 82, 21, 38,246, 97, 18,115, 99, 50, -102,113,126,193,229,114,137, 17, 33,208,197,111,177,224,221, 86, 38, 59, 8,230,243, 25,247,239,223,227,245,135,175,114,113,118, -198,114,190,192, 54, 53,131, 65,142,247,130, 56, 13,202,132,253,131, 3,158, 61, 59,166,174,106,132,183, 93, 77,112,157,227, 92, -128,219,173,181, 97,213,177,150,150,109,138,180,184,230,200, 41,186,179, 51, 12, 76,194,135, 72,171,237,198,111,123, 15,188,217, -177,247,141,227,117,226,151,128,117, 96, 81,212, 21,244,168,147, 83,171,206,173,175,103,195,191, 20,126,223, 38,202,189, 28, 78, -231, 11, 23,234,107, 63,227,231,232,223,123,226,202,139,153,245, 98, 93, 52, 95, 56,169, 11,126,174, 77,236,243, 83,123,111, 14, -240, 60, 81,110,147,212,102, 2,251,189, 51,172,233,119,234,113,172,215, 58,245,235, 69,253,122,140,163,119,142,166, 46, 40, 87, - 11, 76,219,146,164, 3,134,147, 93, 90, 15,117, 99,104,107,240,196,164,217,136,180,115,153, 59,216, 59,192, 26, 65,156, 12,184, -121,251, 30, 73, 58,164, 42, 27,210, 56, 67, 71, 49, 31,124,240, 33, 69, 81,243,202, 43,247, 25,141, 19,238,222, 61, 34, 77, 70, -193, 70,180, 40, 64,118, 46,114,109,205,124,126,197,213,124,134,239, 73, 44,162, 47,210,172, 25,158, 61,219,178,255,183,146,116, - 23,230,214,126, 72,110,164, 24,129,165,185,197,242,236, 97, 71,169, 66,177, 87, 91,123,119,181,217,191, 71, 29, 99, 55,138,250, -239,103, 35,249, 80, 1,242,143,162,240,245,190,251, 12, 94,202,208,122,193,100, 52, 65, 1,139,203, 11,202,229,140, 44,137,240, -166,229,236,228, 41,243,203, 41,139, 85,201, 89,105, 56, 89, 90,148, 23, 40, 31,138, 94,166, 34,166, 85, 67,131,192, 0,134,158, -215,225,215, 74,128,151,129, 48,253,212,238, 36, 88,225,177,128,145,176,108,106,156, 51, 28,238, 12,105,203,138,229,114, 69,150, -107,118,247,119, 40,202, 18, 97, 20,203,105,197,248,112,130,243, 5, 67,229, 25, 9, 9,141,193,120,207,194, 43, 26, 39,185, 90, -213, 76,203, 6,226, 24,149, 38,120, 25, 19,197, 67,172,241, 44, 22, 13, 77,109, 2, 59, 91,121, 60, 6, 99, 27,164, 80, 52, 69, - 77,177, 88,177,156,205, 40,150, 11,218,182, 10, 50, 73, 83,211, 26,131,242, 30, 83,215, 44,103, 51,202,213,138,186, 42,105,170, -154,213, 98,133, 20, 18, 37,161,173,235, 16,207,187, 92,134,130,107, 28,179, 89, 69, 85, 25,146, 36,172, 65,156,181, 68,145,194, -122, 24,140,242,192,187,136, 4, 82, 40,164,140,152,207,103, 24,103,136, 99,205,100,180, 67, 83, 7, 57,157,117, 6,144, 36,201, - 0,165,131,212, 75, 69, 33, 94,178,108, 13,151,203,130,127,252,255,248, 39, 44,107,131,210,113, 96, 97, 75, 73,146,164,120,103, -105,155, 22,132,228,254,237, 27,196,194, 6,194,153,138,214, 41,107,125,184,139,236,174,195, 0, 73,234, 77, 52,235, 11,224,119, -239,253,250,190, 98,171,240,211,187,187,173,253, 51,228,150,118, 93,117, 59,211, 45,232,116, 27, 70,237, 11,122, 47, 57,146, 91, - 60,159,109,134,253, 26,126, 15,197,194, 91, 27,110,158,181,195,220, 6,249,220, 56, 85, 90,235, 16,214, 17, 9,137, 49, 14, 25, -105,178,209,136, 56,205, 72,178, 12,235, 28, 85, 29,144,145,193, 48,200, 11,223,122,227, 21,254,202,111,188,195, 91,111, 61,228, -246,157,219, 32, 20,139,162, 97,184,179,199,104,111,159,214, 89,134,131, 1,182,109,113,214, 19,199, 1, 77,212, 90, 32, 34,141, -111, 43,190,250,224, 6, 90, 88,230,125, 70,120, 29,162, 64, 71,227, 17,163,221, 29,146, 52, 13, 67,137,119, 84,117, 69,221, 54, - 33,202,119, 48, 8, 73,109, 90, 17, 71, 81, 72, 32,140, 53, 66,107,230,211, 25,171,249,138,170, 44,113,214,114,116,107,143, 36, - 17,100,113,216, 13,143, 6,121,119,142, 10,246, 15,143,152, 21, 21,147,157, 29,164, 15,182,193,121, 18, 49, 78, 52, 55, 70, 49, -103,103, 23, 76, 87, 21,109,103,142,217, 35,146,193, 90, 54,164, 30,122, 66, 19, 57,159,205,248, 43,191,254,235,236, 78,118,248, -211, 63,253, 83, 38,195,148, 52,209, 68,145, 6, 33, 25, 12,135,161, 57,145,154,213, 98,138, 86, 46,156,137, 91,210, 50, 37,195, -234,210,173,147, 43, 55,254, 29,120,223, 69, 19, 75, 18,173, 73,147,152, 44, 13,171,133, 36,214,235, 53,101, 18,199,235,218, 17, -190,166,137,147, 40,220, 71,107, 98, 29,135, 33, 81,111,166,112,181,182,237,238,206,234,109,191,134,238, 28, 70,108,154, 72,245, -181, 55,238,252,163,237,240,142,235,201,107,226,223, 91, 81,255,108,179,240,121,137,108,254, 11,233,207,191,232,164,254, 69, 18, -224,124,231, 63, 78, 47,105,187, 86,212,131,164,205,190,180,168,235,206,124, 70,109,180,218,126, 99,161, 26, 32,170, 37,197,114, -134, 53,142,170, 6, 71, 20,220,179,100,140,105, 5,117, 11, 42,210, 24,107,217,219,221, 99,152,143, 80, 50,165, 50, 30, 84,140, -115, 1, 42, 30,142,114,210, 76,210,154, 5, 71, 55, 15,201,146, 9,210, 43, 38,195, 93, 46,206, 47,130, 53,104,101,184,113,116, -135,203,217, 28,124,203,114,113,197,170, 44,176,221, 14, 74,138,142, 1,223, 65,221,253,197, 43,183, 58, 75,185, 38,110,200, 13, - 99,179, 99, 13,175,239,187, 53,201, 92, 43,250, 91, 59,250,232, 57,137,135,236, 80,129,117,243,176, 70, 11,250,199, 13, 69,189, -135,233,251, 55, 77,211, 52,164,249, 14,222, 56,154, 98,197,163,247,127,198,238,100,200,199, 31,189,207,217,233, 51,234,170,228, -228,233, 5,113, 62,228,227, 69,205,210,121,134, 82,147,248,160, 64, 88, 24, 67, 37,160, 21,146,186,151, 48, 10,143, 23,238,243, -215, 70,253,250,161, 31,222,125,152, 6,113,221, 10,162,106, 72,140,225, 27,111,190, 66, 53,159, 83, 86, 37,137, 86,236,141, 39, -156,157,156, 49, 30,143,136,227,132, 97, 62, 66,120,131,181, 43, 6,169, 68, 59, 71,217, 58,140, 3,135,166,176,150,243,178,230, -108,217,114, 85, 26,158, 76, 75,150, 22, 84,150, 5, 91, 82,231,200, 19,141, 22, 2, 87,183,148,133, 5, 43, 41,151, 21,171,121, - 65, 93, 53, 33, 93, 76,202,160,117,246,130,186,172, 89, 94,206, 88,205,150, 84,203,138,170,172, 41, 87, 85, 88,205, 88,131,240, -142,213,114,201,106,185, 36, 79,147,142,223,144, 48, 24,164,120, 90,100,231,220, 37,149,196, 57, 65, 89, 89,198,147, 1, 89,170, -145,157, 36, 80,201,136,198,154,192,191,144,162, 91, 7,164,120, 92,167, 92, 80, 32, 34,116,156,162,162, 8,143,164,106, 90, 42, -227,249,189,127,247, 93,222,253,240, 99,140, 15,236, 96,211, 6, 27,214, 88,107,218,214, 32,101, 68, 81, 55, 60,188,123,196,120, - 16,161,132, 92, 23,237, 72,117,140,223, 40, 90, 75,222,122, 72,114,219,113, 46,138,116,103,204,210,249,190, 71,113, 88, 87,116, -147,105, 88, 5,109, 79,221,126, 51,145,119, 19,251,102,231, 46, 55, 72, 78,103,122,211,189, 89, 58,214,181,216,144,158,164,186, - 38,165,245,130,245,190, 21,239,176,109,139,183,174,115,167,237, 88,246, 29, 33, 88,116, 86,168,222,134, 16, 35,219,180,212,171, - 18,211, 26, 16,146,124, 56,162,237,214, 23,113,150,145,164, 9, 73,150, 81, 20, 43,218,166, 14,182,179, 29, 58,230,132, 69,233, - 4,165, 83, 22,139, 10, 84,194,193,157,187, 44,171,154, 72, 41,156, 9, 73,111, 30, 69,235, 12, 69,177, 12, 49,205, 77,201,151, -239, 29,176, 55, 74, 25,239, 31,132,248,230, 52, 93, 15, 42,171,229, 18, 41, 4,105,150,145,231, 57,249,206,152,193,104,136,177, -109,144, 85, 90,195,116,122, 21,164,111,132,220,111,169, 53, 82, 72,180, 16, 68, 66, 50,155, 94,113,231,222, 13,242,129, 38,142, - 4,206,212,104, 29,118,244,222, 11,134,163, 17,197,170, 64, 9,193,104, 50, 92,203, 13,181,130,131,157, 33,135,131,148,147,227, - 83,206, 86, 13, 70, 0, 62,234,106,150,223,210,175, 7, 40,123, 54,155,114,239,246, 93,190,250,165,175,240,244,241, 19,102,231, - 79, 72,226, 64,132, 12,205,234, 24,239, 5, 7, 7, 7, 44,103, 83, 98,229,136, 59, 2,112,239, 67, 18, 69, 29,177, 18,137, 19, -162,155,220,123,219,216,112,189,103,137, 38, 79,117,200, 74,207, 50,134, 89, 74,158,167, 12,178,148, 44, 77, 72,179,152,180, 43, -246, 89,150,132, 91,247,239, 60,217,106, 2,180, 70,119, 63, 79,178,221, 60,116,151,153,236, 24,246, 93,237,246, 93,163,105,189, - 11, 59,245, 23,249,183,255,251,180,109,253, 76, 17,126,206, 26,246,179,197,217, 93, 91, 84,191,200, 74,246,243,246,237, 47,179, -182,253,188, 44,245,107,237,196,150,117,223, 47,180, 90,127,193,186, 65,118,221,121,154, 13,136,227,140,186,108, 67, 32, 70,212, - 34,164,198, 52,142,157,201, 62, 66, 85, 44,139,146,157,221, 49, 58,138, 65,104,170,122,133, 65,242,225,199, 79, 25,164, 17, 89, -236,241,110,137, 16, 3,178,161,231,193,221, 27, 80,167, 44,151,176, 88, 8,134,163, 29, 46,167,167,212,149,229,236,120,198, 98, -118, 73,158,245, 90, 86,215,217,101,138,142, 61, 42,131,223,250,115,174, 70,235,110,164, 35,138,136, 53,138,209, 65,212,242,229, - 90,255,235, 22,194,215,205, 32,174, 57,209, 93, 11,124,225, 57,169, 97,120,147,172,191,151, 0,229,230,249, 0,131, 70,196,138, -103,143, 62,228,232, 96, 31,233, 93,103,168,114,202,124, 90,178, 90, 89,202,133,161,180, 14,131, 32,209, 9, 67, 41,185, 50, 13, - 75, 1, 13,146,198, 7,120,174,239,230,123,133, 76, 80, 62,189,120, 53,227,164, 71,248, 16, 89, 27, 9, 80, 14,146, 72,113,235, -112,143,175,191,122,155, 47,191,114,159, 27,187,187,188,127,231,136,223,253,189,239, 80, 92,206,160,108, 57,186,181,139,142,225, -241,163, 51,238,222, 60, 34, 29,239, 16, 31, 90,226,178,101,148,165,232,203,138,143,206, 27, 46,140,101,129,192, 18,216,247,171, - 38, 76,149,103,101, 75, 94, 54,220, 27, 15, 80, 74,211, 24,137,240,193,207,189,108, 91, 34, 21, 14,253,166,241, 36, 14,242, 97, - 66,150,140,113, 2,150,197,146,229,229, 12, 87, 26, 76, 21,252, 5,134,163, 8,148, 67,106,201,106,182,100,126, 57, 71,134,161, -136,170, 40,177, 86,146, 13,146, 80,124,157, 37, 73, 36,214, 58,188,133,214, 4,111,239,217,116, 65,154, 0, 62, 33,213, 80, 20, -117,128, 47,163, 64, 18, 91, 46, 23,228,233,168,123, 62, 55, 19,176,119,225, 61,221,180,150, 85,213,114,190, 88,241,231, 63,125, - 23,165, 19,106, 99, 72,117,152,112, 80,193,206, 84, 72,137, 74, 18, 22,101,205, 79,222,255,144,155,191,252, 38, 82, 71,221,164, - 18,109,236, 55, 5,200, 40, 48,171,123, 28, 83, 74,185,190,194,164, 80,107, 89,154, 68,173,127, 23,219,187,153,245,122,206,206, -124,219, 58,177,182,152, 21,235,216, 84,183, 33, 13,111, 37, 56, 95, 31,128, 54,123,208, 94,133,115,205,157,179,135,226,187,201, -182,143, 63,238, 35, 13,189,181,235, 68, 54,225, 67, 35,133, 11,129, 34, 74, 40,154,170,238, 60, 35, 4,113,102,105, 76, 75, 22, -141, 66,163, 33, 33, 27, 13,184,157,189, 66, 57, 91, 80, 45, 11, 34, 29,209,182, 21, 85, 45,104,188,192,203,136, 52,141, 57, 95, - 45, 88, 45,151,236,238,238,129, 53, 84,214,128,147,196,217,128,243,171,115,146, 36, 93,175, 19, 86,101,197, 66,128,107,131,199, -123,164, 53, 59,187,187, 56,107,169,234, 26,169, 36,199,207,158,145,164, 9,105, 26,147, 13,114,118,118,199,200,104, 31,211,182, -232, 72,210, 84, 53,210, 0,109, 67,177,152,225,108,141, 84,158,209, 40,101, 60,202,195,107, 97, 45, 58,137,104, 10, 75, 81, 20, -196, 81,204,104,156,224,141, 97, 24, 71, 44,230, 87, 12, 6, 9,201,112,132, 21,130, 49,129, 80,252, 87,223, 9,147,248,213, 63, -251,183,188,123, 85, 98,187,213, 34,120,108,119,238,132,233,213, 83,181, 13,255,228,191,251,103,124,243, 43,239,240,237,111,255, - 53,254,175,255,231, 63,101, 52, 26, 32, 84,132,169, 91, 22,243, 25, 90,167, 32, 20,247, 31, 60, 96,117,169,112,182,197,117,233, -109,198,134,204,246,162,168, 17, 85, 13,117,219,177,223, 93,231, 36, 39, 58, 94, 74,194, 40, 75, 25, 14, 7, 12,242, 60, 32, 22, - 81, 88,171, 4,141,187, 95,219,203,186, 46,196,106,157,242,215,203,229, 58,100,184,105, 26,138,178,164,138, 2, 82,212,182,110, -147, 0,103,196,218, 89,207,246, 10,144, 46,211, 32, 10,184, 69,119, 82,247, 31,187,176, 15,255, 28, 12,254,178, 80,151,237, 41, -253, 69, 59,244, 23, 21,112,215,127,191,247,207,177,233, 61, 10,217, 29,246, 27,226,193,245, 2,240,242,130, 43,253,117, 1,250, -243,141,128, 23, 47, 46,252,189,127,238,181,157,120,160, 55,172, 53, 18,215, 27,137, 77,119,191,230, 31,248,231, 67, 1,187, 92, - 52,233, 72,243, 28,165,115, 68, 84, 49, 26, 4, 95,232,214, 57, 20, 10, 99,194,139,147,196, 17,229,114, 69, 51,217,101,229, 74, -100, 20,113,180, 55,230,201,227, 39,120, 99, 41,234, 21,220, 72,192, 90, 98,169,153, 62,187,224, 96,148,147,140, 71, 44, 76,197, - 64, 75,116,154,226, 23,103,192, 5,162, 58, 3, 57, 96,181, 92, 97,141, 71, 70, 97,218,183, 42, 92,252, 17, 91,246,184, 46,120, - 92, 7,217, 94, 32, 67, 9, 1,194,129,144,221,107,228, 29,253, 96, 27, 26,150, 30,170,116, 72, 25, 24,162, 82, 8,112,129,108, -231, 44,221,222, 62, 60,134, 20, 30,229,192, 11,187,158,134,214,175, 67, 39, 5,233,137,124, 65,250, 35, 49, 86, 32,163, 1, 55, - 14,111,241,147, 31,255,148,163,253, 29,246, 39, 41,174, 46,120,242,201, 19, 76, 93, 49,159,149,184, 70, 32, 99,205, 85,217, 34, -128, 55,246,198,136, 69, 73,107, 60,158,136,185,107,215, 57,205,107, 83,170,245,235,221, 59,144, 57,188,112, 29, 33,185, 47, 26, - 10,132, 15, 16,190,128,123,147,140,111,189,113,159,119,222,120,149, 27,187,227, 32,129,241, 6,229,167,188,243,230, 33,131,252, - 87,249,215,223,253, 49,103,211, 2, 61, 76,240, 10,246,239,222,231,221,247, 63, 69,137,154,175,127,237, 30,122, 92,227,210,146, -175, 14, 18,142, 38, 21,239, 63, 91,240,116, 5, 23, 22, 26,239, 49,194,118, 90, 39,199,194,194,123,211, 2, 45, 4,105, 36,200, - 19, 69,170, 51,118, 85, 8, 14,169,155, 22,231, 36, 67, 3, 3,167, 48,101, 69,219, 56, 22, 87, 37,203,185,193, 89, 71, 28, 69, - 32, 45,174, 67, 74,234,170,133, 38,164, 63,201, 36,162,114, 6, 29, 7, 79,148, 98, 86,134,164,168,214,145, 15, 50, 86,109, 73, -154,107,242, 97,152,214,151,203,130,189,189, 49,158, 24, 39, 20,101, 83, 4,251, 83,165,214,141, 79,181, 92, 17,235, 20,161, 98, -132,148, 56,223,144,167, 57,202, 75, 86,181,226,227, 89,193,127,246, 95,255,183,140, 4,248,182,162,168, 43, 6,233, 17, 74, 43, -150,171,130,225, 56,101, 56, 24, 80,215, 53,249,104,200,251,207, 46,121,120, 81,240,214,221, 61,116, 20, 8,104, 50,138,131, 79, - 11, 97, 53,161, 58,233, 87, 39, 74,223,242,189,160,211,148,111,229, 28,116,230, 30, 30,143, 13,139,152,245,245,168, 59, 29,126, - 79,150, 12, 38, 52, 98,235,204,146, 32,251,218,238, 63, 67,150,245,190, 35,196,121,186,120,225,112,177,245,208,104,136,250, 36, -144,248,250,130, 64,167,149, 18, 29, 33,202, 6,217,148, 80, 10, 99,195, 85,107,172, 35,137, 98,180, 80,172,102,115,162, 52, 65, - 43,181,241,161, 39,172,177,146, 52, 65, 39, 49,222, 24,218, 89,139,214, 57,117, 91,179,179, 51, 97, 60,202,120,116,118,140, 83, - 17,173, 11,153,230,216, 10,163,131,127,254,206,104,128,115, 26, 91, 89, 82,173, 57, 43, 10,234,170,101,160, 75,146, 44,167,170, -106,242,225,128, 85, 85,146, 36, 41,163,241,136,187,175,188,130,177, 45,243,171, 43,102,207, 78, 16, 34, 88,193,142,198, 99, 70, - 59,123, 8,239,152,205,166,140, 35,133,111,198, 84,139,130,103, 10,106, 41, 65, 68, 88, 31, 81, 55, 21,122,144,211, 58, 79, 91, - 54,228,106, 78,178,179,139, 23, 10,167,192,182,142,101, 81, 33,149,102,144,229, 36,120, 42,233, 73,148,226,219,226, 45,202, 98, -197,255,225,159,125,135, 39,181,193, 19, 3, 10, 41,236,230, 28,239,182,182,143, 30,127,194, 31,124,247,143,248,157,191,254, 55, -184,251,202, 87,184,188,248,152, 27,169,100,119,119,159,106,185,160, 25,236, 97, 76,176,202, 29,169, 91, 56, 51,195,183, 21,214, - 6, 84,109, 89,183, 68, 17, 40,233,145,222,225,173,166,109, 67, 82,102,164, 36, 89,162, 24,100, 49,227,241,144,241,104,192,120, -152,175,157,246, 88,175,127, 68, 40,238, 91,231,110,127, 51, 46,240,105,172,181,212, 77, 67,209,161, 41, 66,214,225,108,165,164, - 49,225,122,108,109,200, 87,112,141, 65, 43,133, 48,110,237,230,167,190,254,198,198, 81,238, 69,240,250,139, 12,102, 54,112,189, -255, 92,146,220,207,131,193, 63, 15,241,252,121,246,179,127,209, 9,154,151,248,213,251, 13, 94, 30, 66, 70,186,232,213,222,120, -166,237,188,223, 63, 11,191,135,253, 71,188, 5,251, 93, 67, 1,156,199,121,139,247,146,139,243, 75,138,178, 8,251,158, 40,200, - 94,234,218,178,170, 12,198,181,100,121,202,206,206,152, 68,107, 76,219,146, 37, 49,113, 20, 49,189,188, 34,142, 4,216,138, 65, -174,144,222,226, 90, 56, 59, 89,112,117,213,112,243,193, 67, 86,101,141,105, 27,164, 16,204,166, 51, 22,203, 5,117, 85,114,126, -121, 65, 99, 61, 6,137,113,116,242,155, 16, 80, 33, 59,200, 80, 74,185,153, 82,253, 38,213,202, 95,179,135,117,207, 57,244,185, -107,107,139,107,100,196,160,240,236,186, 82,191, 54,106,112, 29,227,211,246, 18, 17, 31, 90, 38,199,115,174,117,189, 35,159, 21, - 88, 43,200,210, 17,166,181,156,158,156, 96,154,130,203,243, 99, 30,127,252, 33, 39,199,207,152, 47,106,206, 46,106,132, 21, 40, -161,168,187, 1, 92,227,104, 90,195, 10,207,212, 57, 42, 33, 94,218, 10, 74, 31,138,118, 39, 26,238,250,223,110,157,128,101, 32, - 60,175,223,220,227, 63,252,173,111,241,119,191,253, 75,188,117,231,144,161,242,200,182, 4,111,131,231,181, 7,103, 28, 59, 59, -123, 60,124,237, 21,202,114,206,244, 98, 69, 83, 73,226, 76,178,179, 63,224,217,217, 57,109, 43, 56,186,121, 19,161, 12,222,213, - 56,215,146, 15, 98,242, 84, 99, 26, 67,219,134,215,196, 57,133,240, 9, 30,129, 21, 22,131,163,114,142,162, 53, 44, 74,195,172, -106, 89, 89, 71, 41, 21,141,138, 40,156,167, 17, 18,163, 52, 87,101,205,229,170,102, 94, 57,226,124,136,113, 4, 91,217,186,233, - 26,227,136,114, 97,144, 22,234,218,209, 52, 80,149,142, 68,128,183,129, 60, 24,117,123,186,214, 90,150,149,197, 19,194, 87,202, -162, 37,137, 37, 89,150, 32, 4,152,182, 97, 54,155,177,191,179,135,183,134, 97,158,163, 85, 68,211,180, 32, 4,249, 96,200,170, - 40,216,217, 61, 0, 4, 79,159, 29,243,127,252, 63,253,167,188,251,254,199,140,119,119, 73,179,132,209, 48,167,109, 61, 58, 78, -200, 7, 3,154,182,237,154, 75,168,170, 26, 21,197,204,166, 87,188,253,218,125,146, 40, 88,121,170, 72,175, 9,150, 74,199,107, -130,154,120,126, 29,180, 37, 43, 90,239,215,183,228,112,162,131,197,165,220,184, 29,174,207, 7,185,165,248,232, 36,102,162,111, - 70,197, 70,119,124,221, 53,132,235,182,201,235,253,252, 86, 56, 84, 7,185,111, 95,143, 82,201,117,155,176,150,208,245, 9,110, - 81,212,145, 26,131,193, 73,164, 53,198, 89,144,130,108, 56, 88,191,247,164, 82,172, 86, 43, 78,159, 29, 35,133,100, 60, 26, 19, - 39, 25, 69, 89, 49,155, 45,184,186,154,113, 54, 45,240,233,132,253,163,219,180, 85,129,169,235,144,190,151,166, 72, 41, 89, 46, -171, 64,128,139, 61, 55, 15,198,236, 14,115, 50, 25,145,229, 41, 73,158,226,241,232, 56, 34, 73, 98,156,119,204,166, 83,148, 20, -140,199, 99, 38, 7, 7, 8, 88, 59,206, 77, 47, 47, 89,204,231, 56, 28,227,193,144, 60,205,137,210,140,101, 85, 7,111,130,179, - 75,178,113,198, 32, 19,100, 17, 20,117,203,106,177, 96, 24, 43, 38,147, 29,178,201, 1,214,219, 78, 19,223,224,189, 39, 75, 19, - 86,171, 37,249, 32, 71,120, 79, 20, 75, 14,111, 28, 32,154,134,159,126,116, 76, 73, 32,177,110, 56, 13, 91, 13,151,243, 84,171, -130, 95,250,250, 55,185,123,235, 22,223,249,206,191, 37,207,195,170,167, 88, 53,180, 86, 48,222,221, 69,120,195,120, 16, 51,200, - 35, 6,185, 38,213,154, 88, 39, 72, 21,246,245,194,247,246,217,116,117,193, 16, 69,138,225, 32, 15,153, 12,147, 49, 59,227, 17, - 59,147,112, 27,141, 71, 12, 70, 3,242,193,128,193, 32, 15,235,138, 65, 70, 62,200,201,178,140, 52,207,200,243,192,143, 72,211, -164,115, 42, 85,107,204,218,247, 12,249, 46, 17, 46,216,105,247,126, 40,126, 77,118, 53, 93,100,184,250,218,235, 47,103,191,191, -136,176,246,124, 38,250, 53, 11,208, 95,208,191,253,139,134,181,252, 34, 69,253,229,172,121, 54,123,175, 95,164,168,219, 23, 23, -245, 36,214, 36, 73, 16,252,199,113,132, 86,209,214, 78,253,250,239, 99,156, 67,120,193,229,213,148,233,213, 37, 58, 86,193,196, - 70,105,154,214, 81, 59,199, 96,148,161,227,136, 52, 77, 48, 77,205,106, 49, 35,141, 53,179,171, 5,109, 29, 52,216, 59,147,140, -201, 48,195,181,158,166,240, 20, 5, 24, 50,188, 76,248,232,209,199, 68, 82, 16, 75,201,249,217, 5, 79,159, 30,131, 20,228,163, - 9,201, 96,196,108,185,162,237,119,174, 98,195,102,239,167,228,222,216,163,223, 25,186,245,222,153, 53, 11,244,229, 24,201,245, -204,164,237, 52,190,207,198,186, 94, 15, 60,216, 32,254, 91,200,136,144, 97,122, 70, 33,133,230,234,106, 70, 83, 55,156,159, 62, -163,169,150, 44,166,103,148,203, 25,243,217,146,227,147, 26,169, 52, 89, 28, 83,148, 13, 86,134,233,165, 53,142, 86,120,230,194, - 51, 23,159,137,128,120,238,183,239, 34, 21, 67,246,107,176, 6,197, 17, 11,199,131,189, 17,255,224, 55,190,202,223,251,171,191, -196,173, 97, 76,108, 43,148,173,137, 68,112, 23, 20, 74, 6,211, 41, 23,252,183, 5, 16,107,199,131,123,251,180,171, 21,167,199, - 51, 78,206, 79,217,191,117, 64, 54, 9, 54,168,243,101,201,238,222, 33,113, 42,240,194,146,197, 17, 90, 88,118,135, 9,137,244, -120,227,240, 70,224,136,194,206, 95, 58,144, 27,189,188, 71, 82, 75, 88,121, 88, 90,207,210, 56,230,173,229,108, 81,115,177,170, -104,162,152,165,243,204,107,131,147, 49, 68, 49,198, 67,221, 56, 86,149, 65,199,113, 88,241, 56,137, 78, 18,148, 86,152,214,130, - 3,219,130, 64, 5,197,135,131, 36,143,209,177, 68, 68,144, 36, 81, 32, 85,105,201,104,148,146,196,154,186, 92,241,236,201,105, -240, 44,136,100,144,222, 9, 79,221,148,232, 56, 38, 78,114,172,145,232, 56, 99,182,188,228, 95,255,139,255,142,199, 63,253, 8, - 12,156,172,106, 38, 71,135, 72, 83, 3, 81,120,175,180, 38, 56,135, 57,199, 96, 48,160,110, 26,242,241, 46,103, 23, 87,236,141, -135,220, 60,220, 35, 18, 30,221, 21,229,224,191,174,215,133, 58,138,244,122, 79,222,107, 51,123, 38,188,236, 12,104,122,109,123, -176,155,141, 58,253,123,180,214, 61, 59,231, 59,125, 58, 27, 45,185,216,192,239,107,131,171,107,158, 86, 27,139, 48,209, 25,104, -109,127,237,218,217, 35,174,147,105,233, 88,241,162,107,164,232, 96, 99, 31,112,123,164, 82,152,166,165,109,218,224,145,144,231, -200, 40,194,225,195,254,123, 43,144, 74, 9,133,105, 13,214, 24,166, 87, 51,132,144,164,249,128, 52, 27,176,152, 23,156, 79, 75, -106,145,242,214,151,223, 65,250, 16, 63,171,162,152,198, 58, 26, 99, 80,113,130,247, 22, 45, 61, 55, 15, 38,208,148,228, 73,196, -108,181, 2,160,109, 67,130,161,148, 50,144,126,147, 4, 41, 37,171,213,146,213, 98, 65, 62, 26, 49, 24,141, 40, 86, 43,170,170, - 34,207,115,108,107, 89,205,151, 52,117,205,213,108,202, 98, 89, 80, 20, 21,198, 56,226, 44, 38, 75, 96,152,105,154,214,162,148, - 98,146,105, 34,157,144, 79,118,195,207,136, 19,144, 34, 64,254, 81,112,221,180,192,120, 56,192, 75, 79, 28, 9,238,239,238,115, -242,244,152,143,174,230, 52,107,212,217, 95, 43,234,194,195,106,177,224,222,221,123,188,249,218, 67, 62,250,232, 3,140,105, 88, - 45, 86, 44,230, 5,198,194,100,103, 23, 4, 36,137, 96,127,111, 72,162,233,148, 58, 81, 87, 30, 58,210,174,117, 52,214, 82, 53, - 45,117,221,160,164,100, 52, 28,132, 66, 62, 30, 49,233,138,250,100, 60,102, 48, 30,145, 13, 6, 93,176, 79, 74,156, 38,235,143, -113,154, 4, 5, 65,154,144,164,241,186,160,247,196, 78,235, 66,142, 72,107, 66,150,122,211,134,143,182, 31,158, 58,195, 52,227, - 58,181,150, 53,168,175,189,113,247, 31,189, 60, 28,101, 91,175, 44,126,110, 81,255, 60, 15,247,151, 73,201, 94,148,228, 37,197, -203,154,136,191,228,164,254,146,162,126,173, 17,176, 97,199,211,135,186, 60, 95,212,123,214,109, 31,232, 18, 38,117, 77,220,153, - 89,188,184, 89, 8,172, 85,129,228,252,226,140, 44, 11,100, 8,225, 32,210, 9, 45,130, 56,209,100,105,202, 32,207,169,203,146, - 44,137,185,113,176,143,244,146, 60, 77, 41,171, 21,163, 97, 26, 96, 70, 23,209,148,146,233,172,194, 43,205,227,167,199,216,166, -230,254,205, 3,180, 55,152,186,198, 57, 71, 60, 24, 48,217, 59, 96,182, 44,185,154, 47,131,180, 70, 10,164,244, 29,171, 93,173, -147,173, 16,215, 53,227,207,251, 48,110,199,229,174, 3, 89,174,197,209,190, 36, 12, 81, 60,159,211,190,113,254,195,139, 78,139, -187,206,211,233, 14, 75,141, 20, 17, 55, 14,111,113,113, 49, 11, 18, 60, 60, 79, 31,189,207,217,179, 79, 80, 52,216,182, 70,250, -176, 16,118, 46, 98,222, 26, 86, 56, 86,214, 35, 68, 68,237, 29, 13, 80,116, 50,180,207,187,106,188,144,184,206,186, 83, 4, 96, -153,195, 44,230,183,191,245, 37,254,193,111,253, 50,175, 31,140, 81, 77, 65,134, 71,121,215,201, 1,117,215, 4,132,189,173, 64, - 7,215, 51, 28, 74, 84, 20,243,199,196, 81,197,112, 28, 51,157,151, 92,205, 91,162, 44,227,214,157,155,156,156, 94,208,212, 17, -249, 32, 37, 77, 83,132,177, 68,190,229, 96,103,200,120,160, 25,231, 2,229, 29,109, 27,236, 64,125,183,138, 16, 34, 90,123,132, - 91, 60, 94,132, 74,239, 59,239,112, 11, 52,198, 49, 91,213,204,202,134,202,194,162,110,169,157,199,199, 41, 70,199, 24,165,144, -177, 70,200,132,218, 88, 86,166,101,217, 24,100,172,145, 42,193,155, 64,248,145,145, 98, 94, 52,140, 38, 25,214,182,228, 73, 68, -150, 4, 31,243,166, 49, 40,105, 81,194, 81, 44,151,120,219, 34, 33,144,132,178, 12, 25, 9,100, 36, 25, 12, 71,196,113, 78, 81, - 52, 40, 37,121,250,236, 67,142, 63,253, 9,186,108,168, 11,207,133,241,232, 81, 78,130,197,185,224,177, 30,236, 95,195, 1,106, -173, 37,210, 17,179, 85,195,238,193, 17, 39,199, 79,153, 12, 50,246,118, 39,168, 14,214,150, 74,135,194,183, 21,226, 34, 35, 5, -178,119, 68,148, 91,156, 13,127,205,225,146, 45,216,189,247,144,223, 86,230,172, 37, 34, 66, 96,251,221,159, 16,244,237,109,111, -247,138,216, 50, 24,233, 25,239,221,215, 55,232,230,166,225,239, 19,199,214, 19,125,127, 31,221, 59, 82,186, 77,202,156, 8,112, -109, 20,105, 78,143, 79,136,147, 52, 72,223,186,124,243,225,206,206, 90, 75,239, 17, 72, 25, 81, 22,171, 64, 46,109, 91,140,241, - 92, 94, 6,183, 55, 37, 52,151,203,154,167, 87, 43, 86, 85,203,237,163, 27, 28,236,239, 34, 85, 76,146,229,196,137,198, 11, 65, - 81,150, 12,243,140, 97, 28,113,180, 63, 38,194,224,132, 39, 31, 13,201, 6,249,218,116,198, 57,135, 82,129, 16, 24,199, 26,188, -103,181, 88, 96,219,150,253,163, 35,246, 14, 14,194, 74, 70, 74,172,179, 88, 31,138,147,105, 12, 23, 87, 83,142,143, 79,137,243, -132, 97, 22,145, 72, 75,221, 26,164, 20,236,228, 9,145,142,217,187,113,135, 59,119,110, 81, 55, 53, 85,211,160,147,132,217,114, -193,209,237, 91,124,244,232, 17,187, 7,187,164, 90, 18,123, 67, 38,224,112,127,151, 31,191,255, 9,231,203, 58, 16,231,158,155, - 57,164, 16, 56,239,168,203,138,175,189,243, 14, 59,147, 9,223,253,195,127,199, 48,203,137,181,166,110, 90,146, 52,103, 56, 28, - 34,148,231,206,237,125,148, 12, 6, 94, 81, 71, 62,177, 93, 45,104,140,165,106, 13,101,213, 4, 52, 73, 10,198,131,156,221,241, -136,157,241,128,201, 36, 20,246,193, 56, 60,103,186, 75,232,139,186,155,210,186,251, 92,111,110, 58,234, 72,194, 98, 29,113,109, -218, 0,197,215,117, 75, 85, 55, 84,117, 19,138,186,219,202,117,119,118,109,132, 99,157,187, 94,212, 63, 11,195,251,207,132,113, - 60,191, 83, 23,226, 5, 6, 34, 95, 0,134,255,252,148,176,151, 59,205,125, 30, 10,240,153, 72,208, 45, 77,235,118,151,253, 34, -247,186, 77, 96,137,197,174, 19,218,174,179,223,123, 2,151,238,164, 7,189,129,126, 18,235,181,164,237,249,223, 47, 68,138,186, - 96,104, 32, 36, 87,211, 11,132,112, 12,242, 12, 44, 33,110,178, 49, 56,231, 73,146, 12,103, 61,197,106,133,179,150,213,114,129, - 18, 17,145,142,153, 45,151, 24,103,104,154,150,217,108,133,179, 10,215,237,156,188, 11,110, 95,195, 68,160,133, 5,103,153, 46, - 86,144,100,168, 56,101,190, 44, 40,234, 38,236,231,186, 9,189,135, 27,149,138,214, 83,250, 90,126,243,188, 84,103, 45,249,218, -112, 31,214,207,161,216, 50, 74,190,166,217,189, 62,169, 32,196, 22, 87,129, 77,250,219, 86,120,139,243,221,132,132, 70,136,152, -241,104,151, 36, 78, 40,150, 51,126,252,231,223,163,232, 38,116,225, 60,203, 85,197,249,101,193,233,172,101, 89, 55, 92, 88, 75, - 33, 5, 70,132, 64, 12, 25, 73, 42,107,177,128,245,242,243,209, 29,161, 9,243,169, 39,245,142,175, 63, 56,226, 31,254,206,183, -249,230, 43,135, 36,109,129,180, 14, 37, 68,231, 3, 45, 16, 74,135, 38, 64, 70,225,220, 23, 50,164,106, 9,129,148, 45, 74,148, - 44,174, 30,131, 95,160,226,154, 52, 78,152, 78, 11,170,194, 51, 25, 31,176, 51,217,227,252,242,156,214, 56,156, 9,161, 37, 73, -172,105,235, 21, 82,181, 8, 95,177,191,175,217,223,141, 49,141,165,105, 61,222,107,188, 83, 93, 49,233,184, 40,190,215,176,250, -206, 73,171, 51,176, 8, 76,200, 16, 60,129,160,180,134,105, 85,113, 89,150, 44,157, 97, 89, 55,168, 52, 69,101, 41,243,182,161, - 0, 22, 77,139,149, 10,225, 29,198, 91,172,146,120, 45, 72,179,148, 44,137, 72,165,164,173, 91,164,138,209, 17, 40,225,112,182, - 13,114, 27, 15,145,148,224, 45,163,241,160, 43, 58,154,209,120, 7,132,162, 88, 21,148,197,140,247,222,251, 51, 82,213,146, 3, -139,171,134,165,133, 69, 93,179,179, 51, 38, 82, 33,137,205, 58, 71, 28, 39, 20, 69,129, 82,138, 36, 73, 67,147,214, 26,188,135, -249,124,206,195, 87,239,147,165,113, 88, 35, 69, 27,232, 61,142,147,107,222,236, 27,200, 61, 90, 59,122,169,158, 25,184, 37,173, - 93, 55,169,114,147,221,208,231, 13,248,174, 8,175, 29,225, 58,207,246,245, 84, 46,187,235,122, 75, 82,212,135,181,176,157,161, - 32,214,105, 23, 29, 73,179, 43,244,221,180, 30, 6,130,126,242,234,245,247,106, 61,185, 75,169,104,235, 38, 64,175,157, 70,220, - 58,199,104,103,167,123,235,201,245,251, 55, 82,138,197,114, 65,154,100,193, 10, 53, 78, 89, 44,151,184,214,114,124, 62,231,120, - 86,112,118,121,197,120,144, 33, 37,212,181, 33,203, 7,228,121,198,222,254, 46, 58,142,201,146,148, 81, 22, 19, 43, 75,158, 75, -136, 21,113,150,130, 82, 65,123,222, 37,177,233, 40,162,109, 67, 20,114, 93,215,157, 44, 78,211,148, 37, 42,138,200, 71, 35,242, - 60, 99,180, 59, 98,180, 51, 38, 75, 98, 92,107, 88,204, 87,156, 95, 78,137,210,152, 60, 22,196, 88,202,166,193,154,150, 97, 34, - 73,210,140,124,188,139, 20,150,253,131,125,242,225,144,233,108,218,161, 19, 57,117, 83,227, 20,140,210,148,196,131,163, 37, 27, -166,164, 66,240,189,159,126,204,202,186,205, 74,102, 91, 3,142, 96, 58,159,241,246, 91,111,241,240,213, 87,249,225,247,191, 79, -172, 37,251,187, 99, 16,160,227,140,157,221, 3, 26,211,112,243,198, 14,137, 10,129, 78,222, 11,156,181,212,109, 67,221, 24,170, - 38, 24, 68, 21,101, 69, 89, 85, 72, 33, 24,228, 25, 59,221, 46,125, 60, 26, 48, 24,229,100,121, 78,156,166,161,145,238, 86, 63, - 33, 38,248,250,231, 66,117,122,246,238,154,180, 38,248,234, 87, 85, 77, 89, 55,148,101, 77, 81,134,162,222,116, 33, 99, 97,181, - 27,112,248, 32,175, 11,133,254,133, 69,125,155,184,246,249,182,175,219, 83,176,120, 41, 81,238,139, 78,210,219, 69,253,101, 83, - 60,159, 99, 46,243,115,101,108,226,197,191,219, 53, 6,124,167, 83,183,182,247,126,247,157, 69,172,127,161,164, 45,142, 67, 12, -235,139,224,247,237, 29,177,237, 94,128,203,203, 75,138, 98,201, 32, 13, 54,163,109,235, 89,150, 45, 66, 40, 60,138,186,106, 89, - 46,139,238, 32,130,186,174,200,134, 35, 44,146,195, 27,183, 65, 70, 44,150, 5, 81, 20,227,165,196,106, 65, 62, 26, 80,213, 43, -134,131,132,233,213, 5, 94, 69,156,207,150,120,157,240,232,211,167,148, 77, 75,221,182,120, 92, 87,204, 33,234,108, 48,101,111, -185, 41,196,245,195,174,243,168, 94, 23,235,181, 95,113,111, 82, 33,182,178, 2, 84, 39,177, 16,235,255,183,125,152,137, 53,195, -152,107, 1, 62,215,205,132,130, 30,216,122, 65,158,237, 32,124,196,227,199, 79,120,247, 39, 63,230,242,226, 24, 33, 12,159,126, -242, 9,171,210,240,232,211, 25,211,101,203,101,225,152, 89,104,181, 98,230, 60, 37,158,214, 65, 75, 8,101,105, 58, 71, 38,225, -163,112,144,190,108,167, 46, 5,202, 27,118,180,228,239,252,202,151,249,251,191,241, 13,118, 35,131,106,139, 78,142,163, 59, 29, -178,216, 2,235,187,181,133,216,124,238,112, 72,101,169, 86,151,212,229, 12,137,197,154,154, 97,230, 25,229, 9,171, 89,205,197, -217,156,225, 48, 99,103, 63,163,109, 29, 42, 74,120,242,236,148,221,253, 27,168, 88, 99,109,203, 32,141,136,104, 72,148,229,198, -206,144,157, 60, 11,236,116, 99,214, 86,185,194,135, 5,133,184,110,199,116,237,249, 12,245, 61,200,137,156, 12, 19,166,241,158, - 40,137,169,141, 97,182, 92, 82, 11, 71, 35, 5,173,146, 16,135, 32,145,210, 57,174,154,150,133,113,180, 94, 49, 30, 12,184, 58, -155, 81, 23,150, 85,213, 32,112,220,186,117,136,192, 82, 21, 5,109,109,176,173, 65,210,146,101, 57,145, 78,209,201,128,193, 96, - 66, 81,172, 48,166,230,217,147, 15,144,174, 68,171,128,187,148, 69, 67,181,106,153,149, 13,141,138,216,223,221, 9, 33, 50, 74, - 81,148, 21,131,193, 32,196,160, 74, 65,158,196,148,171,130,210,120,146,225,152, 36,137,121,112,239,230, 90, 42, 41,187,137, 89, -117,230, 45,219, 94,239,107,127,109,177,217,185,139, 45, 19,155,190,152,175, 39,233,109, 11, 79,217,161, 75,157,161,202,186,136, -247,239, 3,185,109, 11,218, 77, 88,207, 79,253,215, 10,124,103, 1, 26, 76, 32,144,244, 90,122,177,134,222,173,177,235, 92,113, - 0, 99, 3, 68,238,141, 5, 47,152, 47, 22, 65,151, 94,148, 72, 41, 25,100, 89,152,240,197, 6,253, 82, 42,162,109, 26,154,186, -161, 40, 74,162, 40,102, 58, 95, 80, 46, 87, 44,234,150,103, 87, 43,222,251,232, 19, 30,220,191,141,105,107, 26, 99, 41,139,138, - 98, 49, 71, 42,137,214, 49, 89,154, 49,204, 51,246,247, 50,118, 15, 50,198,251,187,164,195, 33,233, 32, 39,138,117,151,100, 23, -214, 29,233, 96, 16,204,127,122,148,161, 27,124, 86,203, 37,214, 26,210,209, 40,216, 97, 75, 72, 84,132,118,146,114, 89,178, 40, - 43,106,107, 73,148, 39,139, 60, 78, 10,172, 53, 76,178, 24,173, 99,210,209, 14,174, 45, 41,202, 21,198,182, 28,221,190, 69,211, -214,216,182, 37,142, 35, 78, 79, 78,217, 25,239,161,163, 8,167, 44,210, 27,246,134, 35, 30, 63, 62,225,227,211, 25,117,207,125, - 88, 43, 13,194, 25,108,130,223, 43,223,252,218, 55,240,198,240,225,207,126, 76,150, 42,242, 65, 70, 85, 27,146,116,132,214, 9, -187,147,148, 36, 10,164, 56,107, 61,109,107,168,234,154,162,170, 67, 65,175, 91,138,178,166,172,106,132, 16, 12,178,148,241, 32, - 99, 60, 76,201,243,140, 52, 75, 73,178,148, 40,209,248,174,177, 20,124,150, 60,222,155,209,120,191, 89,253,214, 85, 77, 89,214, - 44, 87, 37,171,238, 86, 84, 21,101, 55,169, 27, 99, 55, 60,164,158,100,215,185, 44,254, 66, 69,253,179, 19,243,117,246,251,203, -138,249, 47, 60,169,123,126,238, 78,253,249, 72,214,151,237,210,175,155,222,124,241,162, 30, 44, 1,251, 61,133,235, 36, 61,215, -119,234, 61,252,254,178,162,190,153,212,219,110,183,238, 41,170, 21,197,114, 65,158,166, 36, 58,193, 26,129,136, 82, 76, 11, 82, -165,168, 40, 33, 73, 51,100,164, 25,141,134, 12,134, 41,113, 58, 64,168, 1,113, 54,226,252,242, 18,112,100,105,204,172, 42, 16, -121,198,178,170,120,118,252, 12,239, 13,101, 85, 82,123,137,204,134,140, 39,251,200,206,201,201, 24,211, 37, 7,133, 20, 34,169, - 20,146,254, 96,234,139, 53,215, 76,126,158,123, 21,175,113, 39,174,235,123,123, 56,241,185,100,196, 23,185, 3,250,205, 30,221, -247, 16,146, 11,120,188,113, 30, 68,140,115, 2,137,102, 60, 24,241,228,241, 35,254,224,247,255, 29,195, 97, 68,237, 20,239,126, -120, 73,227, 35, 22, 70,115,101, 97,137, 96,225, 61,166,155,152,133, 87, 24,160,149, 14,167,232, 92,227,228,231, 22,245,196, 59, -238, 78, 50,254,147,191,245,109,126,249,213,155,228,182, 64, 57,139,148, 26,131,196,171,142, 84,133, 15,147,105,247,121,159, 92, -231,188,195, 43,176, 24,156,171, 40, 86, 83,112, 45,194,129,179, 2,218, 22,105, 11,246,119, 98,226,196,241,248,233, 49,159, 60, -185, 96, 52, 76, 25,142, 39, 60, 62,185, 96, 81, 89, 84,148,178, 51,158,144,233,132,213,229, 2,217,134,195,110,156,123, 14,247, - 19,172,179, 84, 45, 52, 46,216,246,110, 55, 24,189,145,164,151,157,102, 21,127, 61,119,218,175,135, 62,172,243, 12,242, 28,165, - 37, 86,120,140, 20, 24, 15,171,170,165,244,224,135, 3, 78,139,154,194,130, 5, 6,217,144,200, 43,170,162,165,105, 29, 89,170, - 25,143, 51, 36,142,186, 42,104, 27, 67, 93, 25,178, 84, 48,217,217, 65, 69, 3,164,204,201,242, 33,239,189,247, 46,222, 87,152, -106, 74,222,189, 30,149,247,212,101, 67, 59,109,104,157,228, 89,211, 18, 73,207,100, 52, 98, 48, 24,144,164, 25, 89,150,145, 36, - 9, 81, 20,177,147,197,140,135, 67,244,112,151,171, 85, 77, 85, 44, 41,230,151,188,241,240, 65, 48,198,233, 34, 46,183,145, 34, - 47, 8,251,114, 17, 84, 2, 61, 4,190,137,212,220,216, 21,203,126, 42,222, 26, 78,188,115,107, 13,250,118,228,235, 38,110,120, -195,182, 23,235, 4, 57,185, 5,189,111,116,239,125,197, 21,126,179,170,242,226,250,185,233, 59,147,170,186,109,176,198,172,127, -158,117, 14,111, 93,247,119, 70, 52,198, 16,197,154,166,170,113,214,173,221, 45,123,157, 78,175,119,143,181,230,242,234, 10,165, -162,144,130,231,225,242,244,140,202,120,254,205,119,191,199, 79, 62,252,144,251,119,238,176,191, 55,161,170, 91,172,245, 20,139, - 25,203,213,146,147,179, 83,180, 78, 73,180,226,198,126,206, 96, 32,186,252,247,173, 4, 60, 21, 28, 9,171,162,160,109,106,128, - 96,136, 19,199,120, 31, 92,239,178, 44, 99, 54,155, 82,153,134,193,120,136, 23, 14, 97, 12,178,113, 76,175, 22, 28,159, 93,178, -170,107,134,169, 34,143, 5,198,121,154,186,102,119,152, 48, 24,141,184,117,239, 21,246,247,194,164,111,186,216,215,253,189, 61, -202,213, 18,173, 20,139,171, 41, 58,203,136, 70, 3,148,179,164,194, 33, 34, 73,150,164,252,217, 15,222,231,194,184, 77,155,219, -123, 13,200,128,148,204,102, 83,190,246,229,119,120,237,238, 93,254,228,143,126, 15,173,109, 87,212, 45,142,132,209, 96, 76,170, - 61, 55,246, 6, 56,219,224,172,163,110, 29,101, 29,138,120,213, 89, 57, 23, 85, 77, 81, 86, 72,130,115,229,120,152, 49, 26,164, -228,121, 78,146, 5,195, 37,169,187, 8, 93, 1,146,141, 20,173, 87, 61,244,132,106,239,125,240, 71,105, 91,234,178,102,181, 42, - 88, 45, 75,138, 85,201,178,168, 88, 85, 53, 85, 93,135,130,238, 54,196,100,231, 58,141,150, 15, 36, 58,245,206,235,119,174, 69, -175, 94, 15,116, 17,159,137, 47,101,219,156,254,218,156, 32,215,182,250,222,139,173, 13,235,154, 37,242,210, 91, 15,249,246, 42, - 67,249,115,246,233, 47,211,171,111,119, 63,159,151, 17,223, 67, 49, 82,108, 88, 47, 65,209,228, 67, 81, 95, 79,235,207, 77,234, -157, 77,172,238,118,234,105, 28,135, 20, 50, 29, 12, 46, 94,180, 83,239, 25,140,166,219,213, 71,145, 98, 58,189, 2, 79,208,119, - 14, 71,180, 22, 34, 29,129, 80, 12,199, 99,226, 36,166,105,234,110, 93,231,152, 95,205,248,232,201,199,156,159, 60, 98,185, 92, - 16,105,195,238, 88,241,214,155,111,242,215,126,227, 87,249,181, 95,122,135,191,247,183,254, 58,223,252,198, 87, 24, 14, 51,140, -128,116, 48,192, 70, 57,101,219, 48, 91, 76,193, 27, 36, 62, 24,132, 8,181, 62,216,182,237,126,251,116,187, 80,112,221, 53,168, - 28,191,117, 41, 62,247,156,111,103,173,111, 51,227,157,219,252, 63,107, 93,136,163,117, 93,214,113,215, 56,245,187, 33,231,194, - 68,124,235,214, 3, 46, 47,102, 28, 63,125,198, 31,255,201, 31, 51,159,205,240, 66,240,195,159, 29, 51, 43, 59,200,214, 58, 74, -231,169,240, 24,194, 20,218, 19, 97, 92, 23,194,210,235,142, 55,235,132,144, 22, 37,144, 33, 34, 50,228,188,145, 8,193, 47,191, -122,147,255,249,223,251, 45,142,134, 49, 73, 0,236, 1,137,237, 82,184,164,236,104,124,129, 30,209,177, 81, 3,153,176,117, 22, -227, 4,214,169,224,246,102,166,180,213, 12, 5,120,235,169,170, 6,211,152, 46,115,186, 34, 77, 44, 71,251, 3,238,223,220,231, -147, 39,167,156, 93, 92,240,198,219, 95,225, 98, 86,114, 57, 47,248,244,217,148, 69,233,120,112,239, 62,213,106,133, 55, 13,131, - 44, 38, 17,158,221, 97,198,173,189, 29, 34,227, 40,171, 96, 70,225,133, 15,156, 32,185, 53,137,174,189,162,251, 38, 74,108, 49, - 69,229, 58,156,102,119,188, 19,156,213,144,200, 46,165,172,169, 13,181,245, 44, 26,131,139, 36,181,113,204, 87, 21, 94, 39, 8, -157,176, 59,152,176, 92, 85,224, 26,118, 38, 9, 90,120, 76,221, 18,233, 24,132, 33,201, 50,188,143, 81, 42,230,238,157, 91,184, -118,201,236,234, 49,131, 52,236,184, 17,158,178,169,168,235,138,213,178,161, 50, 80, 26,203,210,133,247,198, 32,141, 25,164, 25, - 66, 72,140,135,124, 52,102, 58,155,162,227,132,166,106,113,214,177,123, 48,225, 63,251,191,252,151,124,227, 43,111,113,239,240, - 8,105, 93,128,252,117,104, 84, 69,183,110,113,178, 19,149, 90,191, 14,197, 8,201,108, 42,228,152,139,237, 66,189,149, 63,220, - 29,192, 27, 23,184, 45, 72,191,135,196,165,216, 56,145,110, 69, 59,175,175,183,109, 51,172,222, 11,197,119,187, 82,228,150,187, -156, 8,137,108,221,227,211, 17,163,188,115, 88,179,113,184,236,211, 35,101,164,120,118,124,130, 71,146,166, 57,109,107,201,243, - 60, 88,144,122,183, 78,185, 84,221,153,190, 88, 46,113, 22,150,171,130,203,203, 41,171, 85, 9, 14, 62,250,240, 17, 73,146,178, -183,183, 31, 32,248,170, 0,231,201, 7, 17,214, 54, 92, 94,206,168,171,138, 97, 46, 57, 60,200, 2, 60, 28,233,110,221, 19,172, -120, 35,173,136,242,152,178, 44,169,150, 5,210,123,116,164,200, 39, 35, 84,162,105,218, 0,199,207,102, 83, 50, 21,119, 46,126, - 14,215, 84,204, 47,230,124,242,244,156,214, 90, 6,169, 34,214, 2,103, 91,218,186, 98,144, 13, 25, 77,118,120,248,250,235,100, -131,140, 36,201,208, 58, 97, 50,153,208,214, 53,131, 60, 65, 71, 2,215, 58,202,166,101, 52, 25, 33, 59,194, 88,217,180, 40, 36, -139,217,146,159,126,114,134, 1,156, 10,207,171,236,207, 8, 9,109, 83, 51,201,199,124,237, 75,239,112,117,118,206,197,197, 9, -105,154,162,162,152,162,168,217, 63,216, 67,107,201,254,222, 24, 65, 11,174,161, 53,193,216,171,174,107,170,186,161,108, 12,171, -178,162, 40, 67, 83,147,167, 89,128,222,135, 89, 55,169,119,141,105,172,215,198, 69, 98,107,168,233,189, 64,250,143,222,134,215, -188,109, 26,170,170,162, 40, 66, 49, 95, 22, 69, 87,212, 27,234,186,193, 88,115,109,167,238,125,112,185,180,107,248,253,245,151, - 79,234,159, 45,220,215,139,187,120,238,223,235,251,111, 89, 29,246,111,166,141,239,204, 11,138,186,184, 94,224,175,237,108,127, -142,164,237, 69,208,251,203, 26,130,235, 80,229, 38, 86,118, 19,237,234,215,197,204, 62, 63,169,119,217,232,155,148, 54,221, 37, -146,169,245,110,233, 58, 9,135,181, 89,191,237,166,163, 16,130, 16,118,243,211,217, 34,236, 98,116,208, 85,206, 87, 5,101, 93, -113,113,117,201,229,229, 5, 85, 93,178, 92, 46,168,234, 2,233, 96,231,104,143, 91, 7, 57, 55,111,222,227,224,112,192,193,110, -202,254,222, 77,138,171, 11, 14,246,198,212,245,138,221, 27, 7,236, 29, 30,240,213,111,254, 50,183,110,221,230, 63,254,135,255, - 75, 94,121,237, 53, 62,254,232,125,102,211,203,144, 84,118,237, 0,219, 72,181,251,104,193,141, 9,141,251,140,105,140,223,126, -158, 62,115,115,107, 40,168, 47,210,174, 99,111,134,228,174, 80,192,141, 11,171, 13,103,125,247,220,122,188, 11,154,253,131,195, -187,120, 98,148,138,200, 58,137,199,157,251,175,240,198,151,190,202,183,126,245,215,248,242, 55,127,141,183,191,242, 85,246, 15, -247,113,120,150,171, 5,198,154,112,224,118,246, 31, 78,110, 77,168,107,242,254,150, 21, 83, 55,197, 70,120, 70,145,226, 55,191, -254, 38,255,209,111,124,157,180, 45,193, 6,197,131, 35,200,237,124,111,204, 67,104, 72, 60, 2,235,193, 56,176, 34,240, 33, 12, - 14,235, 34,108,171, 80,180,216,230, 10,225,151, 8, 7,214,122,106, 83,227, 8,127, 59, 40,132,243, 72, 87, 35,221,130,189,189, - 29,188,181, 28, 63, 61, 14,222,219, 81,204,241,217, 37,109, 71,198,210,145,102,188,123,192,229,197,146,114, 85,147, 73,201, 56, -106,121,237,214,152,189,221, 29, 48, 53,109, 99, 54, 41,131,221, 11, 26,118,236, 91,174,144, 91, 77,122, 15,211, 59,231, 48,173, - 97,111, 50, 33,145, 18, 25, 76, 43,240, 54, 88,142, 90, 2,247, 34, 85,193,230,179,245,130,227,217, 28, 23, 41,198,183,142,168, -156,224,244,120,193,252,170,226,242, 34, 52,189, 81, 44, 25, 14, 7, 56, 39,201,243,148, 36, 22, 60,123,250, 65, 48, 77,242, 30, -132,198, 59,131, 51, 45,173,113, 20,214, 81, 20, 65, 90,247,204, 58,180,142, 56,220,217, 97,152,101,232, 36, 11,110,105, 73,130, -206, 82,218,166,229,112, 48, 1,103, 57,157,158,179,106, 27,174, 78, 78,249,141,175,255, 18, 31,254,244,167,100,147, 1, 42, 13, - 4,203, 8, 29,146,232,226,224,210,168,163,112, 77, 9, 21,133,228,180,238,128, 53,157, 17,140,232,162, 92,233,200,118,190,103, -163,119,206,250,253,254, 27,217, 5, 34,172,165,106,215,226,188, 59,182,122,199,186,239,249, 61,221,107, 67, 87,208, 55,112, 97, - 23,131,172, 2,252,207, 86, 68, 56, 29,140,106,140,233,114,186,101,167, 99, 14,242,174,214,132,166,179,105, 44,243,197,138, 72, - 71, 12,242,180, 99, 80,136, 53,122, 36,149, 12,178,206,162, 66, 8,201,233,217,148,139,139, 75, 22, 87, 51,148,208, 68,233,136, -100, 48,100,185,156, 82,151, 69, 88, 33,217,138, 72, 43,156, 15, 70, 63, 55,246,134,220,186, 49, 10, 32,136,247, 52, 69, 69,181, - 92,225,189, 69,106,137, 74, 53,233,112, 64, 83,214, 36, 58,194,180, 45, 50,137,208,195,140, 56,139, 65,120,114, 29, 97, 87, 13, - 73,150,227,101,139,240, 13,139,139, 57,239,127,114, 78,107, 76,104,248,148,195,182, 21, 88,207,104,178,203,254,225, 33,247, 30, -220, 69, 8,193,213,197,148,159,189,251, 62,211,171, 41,105,150, 16,199,138, 65,158, 96,140,103, 62,157,178, 55,153, 16,233,136, -198,122,126,246,238,251,148,171,130,221,201,152,159,188,255,152,105,211, 98,132,196,163,136,186,247,179,235,164,140, 87, 23, 87, -252,230,111,252, 22,131, 36,227,207,255,252, 7, 76, 38, 99,240,130,170, 44,217, 59, 56, 64,169,136,253,189, 29,180, 52,224,170, - 32,125,171, 44,117, 21,136,123, 85, 99, 88,149, 53, 69, 89,227,189, 39,207, 50, 70,163, 1,163,225,128, 44,203,200,210,140, 56, -137, 55,150,196,244, 1, 91,158,107,122,159, 94,175,110, 29,182,181,180,117, 77, 85,133, 9,125,177, 42, 88,116, 69,189,172, 90, -234,166, 89, 15, 68,126, 27, 13,222,178, 78,127, 97, 81,255, 5, 44,226,190,112, 94,218,207, 99,176, 95,203, 96, 23,159,255,125, - 95, 4,206,255,162,172,249,231, 19,219,252, 75, 38,245,182,155,212,251,162,174,227, 0,193,111, 34,239,212, 53, 34,225,166,168, -187,110,215, 17,164, 58,214, 56,156, 19,172,138,138,178,108,153,205,195,126, 60,210, 49,117, 99,113, 94,128, 8,241,158,113,156, -146,229, 67, 34, 52,175,127,245, 29,108,219,242, 55,255,246,127,200,239,252,253,191,207, 98,190,224,127,251,191,251,223,243,233, -167,143,249, 91,255,131,255, 17, 71,119, 31,224,100,194,173,135,111,211, 24, 73,217, 10,246, 15,110, 50,187,186,228,221,159,254, -136,243,211,227,181, 46, 93,108, 21, 55,216,138,170,191,150, 34,180, 41,234,107,215,163,173,143,125,193,118, 61, 17,176,155,186, -109,183,223,177,207,221,204, 86, 54,125,107,109,144,156,173,111,150,241,120,143, 91,183, 31,144, 12,119, 66, 34, 85,156,114,116, -235, 54, 22, 73,148,230,232,116,192,104, 56,196, 59,203,100, 56,224,238,157, 59,236,239,238, 51,159, 47, 40,202,114,253, 6,121, -145,132, 67,118,251,231,144,216, 37,144,222,113, 99, 24,243,119,127,253, 27,124,243,193, 45,100, 83,226,156, 9, 97, 13, 34,120, -109,123,225,215, 36,168,158,132,226,131, 56, 2,219, 49,246,173,131,214, 90,156,151, 56,235,240,118, 5,110,137,164, 5, 47,105, - 27, 67, 99,218, 53, 19, 90, 74,137,243, 14, 33, 3,233, 70,216,150, 65, 44,216, 31,167, 68,222, 18,235,136, 52,207, 17, 58,165, -169, 44,243,105,205,249,180,100,114,112, 68,148,196, 52,109, 77, 26, 89, 82,109, 24, 15, 26,238,221, 24,177,151,231, 68, 54,162, -105, 77,199,128,119, 29, 20,223,111,220,221,154, 64,215,163, 19,158,144, 64,102,140,193,182, 13, 7,147, 33,137,142,176,117,133, -213,138,182,107,140, 18, 4,153, 80,104, 4,227,241,136,139,229,146,211,170,226,195,179, 41,199,243,146,218,198, 72, 57,224, 98, -218,176,170, 37,195,161,102, 56, 28,226,240, 28, 29,237,179,156, 95,160, 68, 96,201, 71,145, 14,178,177,174,169,109,219,160,141, -175, 43,199,162,114,156, 88, 79, 99, 44, 89,154,113,120,120, 20,214, 3, 2,154,178,164, 88, 44, 40,102, 51,234,162,226,217,201, - 41,203,186,230,198,209, 1,143,222,251,136,183, 30, 62,228,149,251, 55, 72, 6,113,136, 16,150, 42, 24,187, 8,129,151, 30, 33, - 20, 74,110,133,189,108,179,202, 59,132,110,163, 39,239, 96,230,206, 66,185, 15, 96, 17, 82,118, 95,223, 36,111,120,191,217,175, -111,136,118,155,104, 86,177,101,170,116, 77, 35,210, 77,249,190,183,153, 93,107,215,253,166,239,148,162,187,190, 66, 33, 95,203, - 75, 17, 56, 33,136,227,152,217,116, 78, 20,133,108,123,231, 12,195,209,168, 11,164, 81,235,159,225,156, 67, 71,154,166,105, 89, - 44,150, 44,203,134,171,249,138,170,117, 60, 62,185, 96,120,120,147,175,253,210,183,120,118,242,140, 31,255,248,199,120, 4,139, -229,156,198,184, 80, 64,234,154,166, 90,176, 51,202,152,140,114,218,166, 97,122,126,137,109,219,160,217,238,154,148, 72,199, 68, - 82, 82, 45, 87, 40,165, 48,222,162,226,160,172,137, 98,205,124,122,133, 48, 14,165, 21, 82,123,168, 27, 22,151, 43,126,246,209, - 83,140,179,228,153, 66, 71, 30,107,130,207,198,112, 56,230,232,230, 13, 14, 15,246, 16, 29,188, 92,148, 21,214, 11,102,243, 37, - 77,211,160, 84, 68,172, 83, 78,143, 79, 24, 79,198,164, 73, 66, 85, 22,148,171, 10,225, 61,113,146,114,118, 49,231,195,167,231, -212, 66,225, 93, 63,212,249, 53,116, 82, 85, 53,175,220,123,192,221, 91, 55,249,248,163,247,112,182,237,224,113, 65,217,212, 28, - 30, 30,146,104,193, 40, 87,224,106,154,214, 82,213,142,166, 9, 59,245, 48,169, 55,235,162,158,165, 41,227, 65,206,104,152,145, -103, 41, 89,150,146,164,155, 73,221,109,203, 24,217, 10,252,114, 46,188, 47,140,195,152,150,182, 14,251,244,213,178,100,177, 90, -177,234,224,247,178,110,214,122,125,215, 55,139,215,102,210, 23, 20,245,159, 71,114,187,246,181,151,166,157,125,126,148,233, 23, -241,101, 23, 47, 48,188,249,133,204,107,254, 2, 82,184, 23, 21,117,179, 93,140,140,187, 94,212,181, 38,214,155,164,156,104, 43, - 52,226,179, 22,170, 54,216,251,117,143,227,189, 36,207,134,104,157,226, 61,212, 77,203,213, 98,197,120,178,139,113,240, 43,191, -242, 87, 56,216,191,193, 87,191,250, 53,254,193,127,255, 63,230,233,147, 99,254, 39,255,179,255, 5,113,164,185,113,235, 46,127, -229,219,127,149,223,251, 87,191,199,127,240,219,127,135,143, 63,254, 16, 21,103,140,118,118,249,244,241, 19,118, 15,239, 48,189, -154, 81, 27,193,206,104,194,124,122,201,187, 63,249, 17,151, 23,167,155,215, 76,200,235, 42,109,191, 97,166, 59,215,177,210,183, - 98, 5,221,122,250,118,107, 51,153, 96, 40,211, 21,114,107, 55,249,194,214,127,182,168, 91,183,126, 46, 91, 23,138,122,211, 61, - 23,206, 9,132,212,188,245,246, 87, 80, 81, 66, 89, 85,100,105,194, 48,207, 41,203,114, 93, 88,151,171, 21,145,148,148,171,144, - 92,167,149,226, 96,111,159,195,253, 3,116, 20,115,126,113, 30,246,143,207, 71,225,110,101, 20, 71, 64,236,225,141,163, 29,254, -246,175,125,141,163, 76,162,155, 21,206, 27, 44, 65,182,212, 90,139,237,242,148,122,131, 28,211, 27, 62, 32,214,176,187,113, 62, - 56, 96,121, 48,206,225,109, 77, 36,106, 34, 89, 35, 9,127, 87,211,218, 48, 49,109, 17,181,220, 58,226,213,161,176,104, 97,145, -174,102,156, 41,178, 68,177,183,183, 75,219,180, 56,211, 53, 25, 81,194,207, 62,121,198,217,172, 36,201, 50,116, 28,116,173,180, - 11,148,179,140,146,152,123, 71,135,220,220,223, 37,137, 5, 96,130, 87,124,191,142, 34, 48,167,197,246,254,189,223, 47, 10,104, - 27, 67,219,180,236,140,134,104, 37,105,156, 9, 57,221, 82,144, 33, 73, 61,236, 77, 38,160, 35,174,230, 75, 60, 17, 86, 4,249, - 92, 81, 86,104, 45,112, 2,230,141,101,148, 68,228, 89,204,112,152, 48, 28,104,112, 21,194,219, 46, 79,160,139, 57,197,227,189, -196, 89, 69, 83, 67, 83, 90,202,178,229,204, 9, 26,235,216,219, 63,100,111,111,151,166, 88,113,121,122,194, 39, 31,125,200,163, - 15, 62,224,217,179,103, 28, 63,125, 70, 89, 55,236,222,184,193,141,155,183,216,223, 61,224,207,254,244,207,248, 7,127,255,191, -135,212,157,123,161, 80, 72,165,145, 90, 35, 84,184,118,162, 72, 95, 75, 72,243,157,217,139,138,130, 74, 98,173, 15,151,172,237, -144,215,174, 12,106,243,218,173, 35, 94,251, 32, 24,250,221,122, 39,135,148,114, 75,230,198, 38,216,101,155, 97,175,122, 35, 27, -185,241,141,247,219,241,218, 33, 27, 1, 41,187,230,215,224, 58, 20,198,110,229,197,199,113,194,108, 58,235,200,106,129, 57,159, - 15, 6,235, 34,209, 19, 85,141,177, 36,113,140, 49,134,147,139, 57, 69,213, 96, 17, 60, 57,155,113, 81,212,252,143,255,147,127, -200,223,250,187,191,131,115,150, 63,250,227, 63,230,253, 15,222,231,106, 58,103, 85, 6,242,215,249,201, 51,254,205,191,252,151, -252,246,223,248,171, 40, 60, 77, 85,162,148, 98,180, 31,248, 58, 77, 85,135,134, 77, 71, 20,179, 25, 89,158,177,106, 74, 84,172, -187,176,157,144,146,103,139, 26,107, 13, 58,145,248,186,102,113,177,226,167, 31, 60,161,197,145,106,143, 18, 38, 20, 85, 33,153, - 12, 39, 28, 30,238,179,183,187,139,114, 14,103,161,106, 12,131,193, 8,235, 61,243,249, 18,107, 29,123,187,187, 92, 94,156, 51, - 24,134, 0,153,213,178,160, 92, 21,220,188,121,147,209, 32,103,185,156,243,227,247, 30,227, 34, 77,217,174,219,162,160,180,233, -138, 97,177, 92,241,215,126,243,219, 20,139, 57, 31,190,247, 30,131, 36, 97,119,103,194,170,172,184,121,243, 22,182,173,216,219, -201,145, 88, 76,107,168, 42, 67,213,116, 59,245,237, 73,221,121,178, 36, 9, 59,245, 97,190, 46,234,113, 26,100,160, 72, 21,222, -115,142,141,166,183, 91, 89,210,241,138,108,107, 48, 77, 67, 93, 85, 84, 69,197,114, 85,176, 88,149, 44, 87, 21,171,162,162,106, - 26,154, 14,153,235,109,101,183,139,122, 95,111,162,151, 21, 56,239,253,103, 10, 99,159, 82,118,237,176,124,193,196, 43, 68, 23, -153,249, 5, 9,114,159,181,145,125,225,204,245, 66,111,250,127,191, 94,245,254,165, 9, 93,107,246,247,115, 65, 31, 47, 66, 44, -158,143,122,237, 45, 39,165,216, 4,222, 11,161,216,217,221,231,238,189, 7, 12,134, 57,171,170,225,149,215,191,204, 31,125,247, -123,188,246,250,155,204,231, 11,102,179, 5, 81, 52, 98, 85,150, 88,167,200,178, 49, 79,158, 62, 1, 98,154, 86, 80, 55, 45,195, -241,144,103,199, 79,185,115,231, 22, 77, 93, 48, 28,143,112,117,129, 86,154, 98, 85, 96, 59,251,192,237,125,185,235,157,238, 58, - 91, 93, 33, 61,162,219,131, 95, 95, 83,132, 93,244,117,169,161,219, 34,195,247,236,226, 77, 12,166, 18,178,131,248,197,139,215, - 17,194,175,253,245,189, 11, 51,204,151, 30,188,142,142, 18,138,229,130,189,221, 9,243,233,148,179,233, 37, 55,142,142,144, 78, - 48, 93, 45, 57,152,140,184,156,206,137, 4, 36,121,222, 73, 14, 29,123,227, 49, 95,125,235, 77,226, 88,243,211,247,223,227,114, - 54, 11, 26,238, 45,102,152, 39, 76,109,210,195, 59,119,110,242, 43, 15,239,145,215,225,144, 41,180, 71,216, 24, 44, 91,161, 52, -221,245,219, 49,143,187,127,117,186,104,214, 36, 21, 7, 24,161,112,109,141, 50, 75,210,212,134,184,211,174, 65, 82, 74,163, 59, - 40,213, 99,177,174, 69, 10,133,195,224,186,225, 76, 9, 79, 26, 11,156, 93, 97,219,130,182, 45,185, 59, 30, 82,196,158, 85,233, -145, 89, 10,201, 33, 23,179,146, 79, 47, 90, 46,230,138, 73,230,120,243,238,125, 6, 89,132, 51, 37,101,125,201,209, 48,102, 50, - 28,242,229, 87, 15,120,124, 94,112,124,185,226,248,252,138, 85,229, 8, 63, 93, 5, 93,125,183,104,241,128,241,224,112, 92,174, -106,204,147, 83,246, 39, 67,114, 98, 98,215,160,144, 36,145, 98,156, 15,200,118, 38,188,251,228,113, 64,149,157, 35, 19,154, 44, -210, 40, 95,144,250,134, 47,191,181,203, 43,247,239,114, 56, 62,228, 75,111,190,202, 71, 31,252,128,182, 89,146, 68, 30,173, 36, - 74, 4,232,218, 11,143,148, 81, 55,161,118,146, 35,225,209,194,179,171, 37,151, 77,104,254,222,125,239, 3, 98, 87,161,157,103, -152,229, 28, 29,222, 32,210, 17,251,251, 71,236,220,184,197,206,209, 17, 63,254,233, 79,121,248,165,175,240,179, 31, 52,124,255, -221,247,121,231, 75,175, 16,171,176, 47, 55,222,161,101, 40,240, 1,105,233,214,102, 34,218,188, 63,215,171, 55,185,198,120,194, -244,173,186,140,110,143,232,165,112,222, 7,200,190,143,215,148, 98,189,162,147,219,197,187, 63,159,252,214,154,177,227,114,160, -212,134, 20,231, 55, 52,163, 53, 42,224, 59,200, 94, 10,188, 11,131, 67,158,231,129,231,208, 65,174,189, 13,168,148,146, 44,203, -216,217,157,112,113,121, 73,219, 10,174,174, 2,239, 96,178, 59,193, 90, 3,182, 69,202, 16, 11,237,140,101, 50, 30,113,184,191, -199,201,233, 5, 69,177, 98, 48,204,249,244,211, 51,206, 78, 79,121,248,240, 30,127,251,239,252, 29,190,254,245,111,112,113,122, -202,163, 71, 31,243,228,228,132, 39,143, 31, 35,219, 18, 81,173,184,186, 90,113,235,230, 46,105,158,179,152, 94,113,254,244, 41, -147,253,125,178,193, 8,188,167, 93, 46,137,148,162, 44, 11,132,132,186,109, 72, 71, 3,132,115,164,131, 12,147, 44,169,170, 10, -124,220,165,167, 89,154,182, 70, 68,129,231, 17, 69, 10,111, 36, 90,118,217,238,121,190, 38, 15,226, 61,203,229,146, 40,245,148, -101,197,120, 52, 33,142,162,192,137, 73, 98, 76,211, 2,130, 85, 81, 2, 48, 24,228,156, 29, 63,227,254,173, 61, 94,187, 53,226, - 86,126,139, 63,248,225,187, 52,221,107,209,111, 65,188,128,247, 63,254,128,227,139, 11, 30, 60,124,139, 63,253,206,119,194,218, -209,181,224, 90,234,186, 34,209, 49,117,235,136,116,183, 19, 23,254, 51,174,167,225,124,117, 91, 94, 28,215, 87,147,206,187,160, -162,233,190,223,187,109, 36,180,187,218,156,197,123, 27, 16, 98, 99,105,219,118,157, 20,218,135,137, 57,203,154,171,132,191, 30, -241,189,253,179,163, 95, 36,140,229, 69,193, 42, 47, 50,150,233, 3,224,123,227, 1,190, 64,129,190,254, 57,215,152,245, 63, 47, -204,229, 47,107, 78,243,252, 54, 65, 8,241, 25,147, 26,241, 60, 27,252, 57, 51,150,231,131, 97,174, 61, 55,235, 53,175, 8, 49, -247, 93,131,160,148,226,198,141, 67,230,139, 25,111,191,253, 54,143, 30, 31,179,191,127,192,197,197, 21,247,238,191,194,241,201, - 15,112, 62, 34, 31,228,156,157,158,179, 51,222,225,123, 63,248, 14,166,170,136,145, 76, 47, 47, 25, 13, 50,190,247,131, 31,241, -237,111,255, 58,190, 94, 50, 72, 19,202,171, 99,200, 14,120,252,233, 39, 68, 50,152,163,208,133, 95,108, 38, 56, 16,206,175,109, - 15, 63,155,208,183,213,196,188,128,155,192,115,126,253, 97,130,144, 68, 93,244,234, 70,238, 38,175,175, 34, 16, 97,191,236, 61, - 2,201,100, 52,224,254,253,123, 40, 33,217, 29, 13, 40,231, 23,180,229,138, 91, 7,187, 44,102,151,212,173, 37,137, 34,188,109, -152,207,166, 72, 4,109, 93,146,101, 57,141,177,224, 28,210,121, 30,220,190,203,104, 56,230,195,143, 31,241,225, 39,143,104,172, -217,106,182, 60, 18,193,195,123, 55,121,120,243, 8, 83, 20,148,210,224, 98, 48, 78, 18,137, 22,233,237, 58,155, 56,138, 20,180, - 33, 79,185, 55,215, 88,251,135, 91,183, 70, 58,188,135,210, 58,164,111, 73,109,133,214, 10, 5,216,110,130,147, 74, 32,108,119, -104, 3, 66,152, 64,228,235,210,157,172,143,176, 34, 76,141, 66, 88, 34, 97, 16,110,142,171, 10, 38,145, 38, 31, 71,136,180, 97, - 52,202,185,127,231,128,227,147, 25, 74,197,120,235,248,193,123, 83,178, 20,190,252,214, 17,227, 97,206,108,118, 73,108, 13,185, - 18,140,110,141,120,245,104,151,233,242,128,199,103, 51, 62, 61,157, 50,171, 90,106,211,239,246, 93, 55,181, 75, 28,138, 22,199, -180,110, 40,206,174, 24,166,154, 56,209,164,105,136,164,188,164, 97,246,244, 99,166,182,198, 37, 2,221,128,112, 45, 19,223,242, -218, 97,196,175,188,121,196,183,190,246, 22,175, 61,124, 72, 97, 99,222,251,224,103,180,213,146, 44,238,174, 47, 28, 86,216,144, - 52, 37, 66, 26,152,151, 10, 25, 39, 68, 73, 66, 54,202, 73, 23, 21,183, 60, 8, 34, 78,143, 79,248,251,127,239,119,120,245,230, - 46, 67,173, 16,196, 8, 33,153, 47,231, 44, 86, 21, 66, 41,170,162,228,173,215, 95,199, 57,203,175,254,198,111,240,189, 31,255, -140, 47,191,245, 6,194,139,110,103, 30,209, 26,131,142,130,102, 90,118,175,161,135, 77,163,217, 49,220,189,236,243,209,123, 91, -152,141, 84, 64, 70, 97,186,234,137,106,219,166, 53,125,184, 81,191, 37,247,107,214,124,119,136,175, 97,125,133,112,226, 51, 10, -144,254, 12, 88,243, 87, 92, 80,143, 56, 31, 46, 47,239, 29, 82, 69, 36, 89,142, 80, 65, 3,238,125,103,246,226, 66,113,216,217, -153, 80, 86, 37,206,121,180,142, 57, 62, 62, 33,201, 83, 84, 36,105,171,134, 36, 77, 16, 14,180, 10,215,229,209,193, 14, 23, 7, -187,124,244,193, 35, 18, 1, 89, 36, 57,126,252, 9, 23, 39,183,241,206, 16, 73, 73,158,102,252,218,175,252, 10, 42,141,209, 73, -204,201,227,167,252,232,143,191,203,179,227,115,110, 30, 78, 24,236,236, 34, 35,201,124,122,197, 98, 54,131,217, 50,172, 33,177, -100,105,130, 7, 10, 91,135, 54,216,117, 90,106,103,200,119, 38, 44, 31,207,113,182, 5,103,112,198, 80,214, 37,121, 50, 36, 73, - 34,188, 11, 77,246, 32,201,145, 82,146,166, 89,144,247, 17, 8,130, 73, 18, 83,181, 13,145,138, 88,206,230, 68,163, 1, 56, 23, -188,244, 9, 57, 19,117,211,208, 90,139,113, 6, 47, 5, 81,172,184,181, 63,102,120,231, 62,231,243, 25, 63,249,248,113,112,250, -239,206, 67, 47, 28,149,169,249, 55,127,248,111,249,143,254,230,239,112,243,246, 61,102,231,159,144,229, 17,222, 41, 86,203, 37, -123,123,183,104, 26, 67,166,123,251,104,183,110,236,232,149, 48, 91, 14,154,155,146,176,149, 23,210,147,227, 88, 51,228, 94, 88, -248,189,181, 56, 99,177,157,221,107,107,108, 32,105,183,129,179,178,134,220, 63, 11, 71,110,194,132,224,231, 23,245,207,155,132, - 95, 84,148,175,199,111,109,166,251,231,139,251,243,133,250,218,228, 45,252,181,204,244, 23, 62,254, 47,184,103,255, 34,233,110, -219, 19,183,248,130, 51,189,223,218,109,188,124, 95, 47,174,117,119,224, 16,210, 81, 54, 5,231,151,167, 12,242,224, 98,116,124, -252, 3, 94,127,243, 29, 62,126,124,204,120,178, 23,228, 21, 94,178,127,176,199,217,217, 41,111,222, 61,160, 88, 92,112,117,242, -140, 73, 26,243,244,209, 71,220, 58,188,201,191,184,248,125,226, 36,161, 46,150,120,239, 88,206, 47, 57,216,185,201,217,217,146, - 97,150, 6,136, 7,137,247,118,141,129, 8,191,209, 54,111,192, 23,255,156, 57,126, 56,228,250, 46,244,133,207,187,236,229, 66, - 2,239, 21, 72,143,242,138,176,214, 12, 4,182,117, 66,149,151, 24, 47, 17, 74,224,172, 65,122,207,151,222,122, 3,103, 26,116, - 28,179, 90, 46, 56,216,159,176, 90,206,153, 47,231,193, 29,171, 92,146,143,198,156,159, 95, 48, 24,228, 36,177,198,251, 17,197, - 98, 73, 18, 39, 24, 91, 17,199, 17,198,122, 38,249,144, 55, 94,125, 13,165, 20,239,125,244, 1,198,154, 16,175,137,231,181,195, - 67, 14,243,140,243,249, 5, 11,229, 73,116,132,116, 26,209, 42, 18,229,137,132, 33,114,161,240, 6,105, 34,157,124,209,135,192, -144, 8,164, 11,158,244,190, 99, 72, 89,231,104,156, 70,216,146, 52,181,193, 13,202,248, 80,247, 9,211,136,138, 52,222,128,117, - 33,133, 11,103,182, 36, 17, 6, 39, 4,109, 7,225,250, 72, 32,173, 71, 88,131,107, 13, 73,156,208,174, 78,209,104, 36,154,251, -227, 12, 34,207,178, 48, 20,177,227,100,190,226,217,119,150,236, 79, 50,190,252,198, 61, 50, 97, 17,174,166, 88, 94, 16, 11,197, -158, 20,140,111,229,252,242, 91,247, 57,155,175,120,118,118,201,229,116,201,116, 89,177,106, 44, 69,235, 48, 91, 23,180,195, 83, -120, 71, 43, 4,133,179, 68,174, 65,182, 33,162, 21,227,209, 30,142, 98,193, 48, 81,188,243,234,136, 95,255,210, 93,222,121,235, - 45,110,220,124,200,201,101,205, 7, 31,125,159,197,226,140, 60, 81, 8,215, 34,108,159, 8, 72,135, 4, 5, 3, 38, 25, 41, 84, - 18,145,142, 6,236, 8,141,138, 52,135,171, 21, 89,165,248,254,233,156, 63,255,243, 31,242,224,230, 95, 37, 31, 78, 88,172, 12, - 79,159,158, 48, 28, 15,112, 58, 34,206, 98,154,186, 32, 75,198, 24, 44,231,151, 51,190,246,229,111, 80,183,130, 60, 82,232, 88, - 99,165, 12, 57,211,221, 36, 36, 68,180,150,161,209, 5,174,244, 9, 94, 33,178,178,251,189,100,136,174,164, 99,119,179,118,124, -243,159,145,217,250,237,227, 98,155,167,210, 93, 55,222,153,181, 2,193,175,163, 49, 55, 42,141,254,190,178,147, 84, 72,225,214, -252, 27,225,253,154,148, 43,132, 88, 75,251,154,166,193, 59, 11, 98, 19, 4,115,116,116,131,211,211,243,176, 30,116,142,199, 79, -158,112,239,238,109,156,183,180, 77,211, 21, 9,143, 18,144, 72,184,181,191,195,155, 15,238,240,233,227,239,241,214, 43,247,177, -197,130, 15,127,242, 99,110,223, 62, 34,214, 41,231,199,199, 8,231, 73, 92,198,124, 53, 35, 31, 14,121,229,225, 91,204,167,115, -156,247, 20,179, 25,131,221, 33, 81,172, 56, 61, 62,167,174, 13,247,111,221,198, 53, 43, 76,221, 18,231, 57,210,134,226, 43,122, -199, 51,111, 81, 81, 20,194, 79,154, 6,109, 12, 77,219, 4, 68,193, 59,172,109, 81, 42,236,170, 27,221,172, 35,118,173, 13, 69, -125,177, 92,117,196,216, 37,227,225, 16, 25, 65, 30, 71, 96, 13,109,211,172,207, 44,183,101,227,221, 75, 53,165,179, 36,190,225, -111,254,230,175,243,254,227,255, 42,172,208, 92,151,117, 65,120,190,255,236,135,223,231,239,254,246,223,225,181,215,223,228,247, - 63,254, 41,187,109, 78, 20, 15,169,202, 50,168, 65,154, 22,134,241,181,236, 19, 41,122,191, 14,121, 13,145,124, 17,198,188, 46, -184,130,117,212,174,240,108, 18,250, 58,146,156, 91, 59,153,118, 69,189,237,110,221, 42,206, 90,187, 62,203, 55, 76, 40,177,101, -209,249, 5, 38,245,151,197,149,126,145,168,211, 53, 60,189,229, 36,246,178,233,252, 51, 19,252,115, 59,251, 23, 53, 0,127,145, -233,252,101, 5,125, 77, 14,123, 30, 73, 23, 27,239,243,207,112, 4, 60,159,129, 61, 94,244,183,121,191,121, 1, 5,253, 1, 34, -186, 83,221,178, 88,204,201,210,140,197,124,206,106,177, 32,137, 99, 86,171, 21,101, 89, 34,133,100,181, 92,114,243,198, 17, 79, - 62,125,196,235, 55,119, 81,190,225,236,217, 39, 76,134, 57, 63,254,225, 15, 57,252,107,223,230,244,244, 18,107, 96, 54,189,194, -185,166,115, 28,115, 44,103, 51,148, 11,198, 32,219,171, 2,255, 18,155,220, 30, 33, 89, 79,224, 91, 48, 97,255,247,250,173, 11, - 41, 16,130,122, 33, 98, 32,248,133, 14,182, 43,244,125,174,122, 31,101,137,192,162, 49,214, 65, 20, 49, 30,100,236, 78, 70,204, -167, 23, 92, 25,195,222,222, 94,216, 67, 35,137,163, 32,149, 73,135,195,224,154, 21,167,156,156,156,177, 90, 45, 24,230, 3,132, - 16,212,109, 3, 29,113,200, 90,194,238, 84, 73, 30,190,250, 16, 29,107,222,253,217,187, 56,107,120,112,243, 22, 15, 38, 3, 90, - 87, 83, 43, 71,137, 67,123, 73, 92, 91, 98,111,168,165, 69, 41,223,177, 84,131,214, 55, 4,238, 72,148,181, 8,225,145, 77, 27, -230, 56,185, 81,121, 24,235,176,222, 16,217,146,209,126, 10,174, 10,111, 97,231,183, 5, 77, 29,138, 17,225, 76,224, 40,244,146, - 22,101,193, 10, 31,164,126, 74,117, 6, 60,174,203,187,143, 16, 30, 6,145,192,154, 18,100, 77,219, 46,240, 78,162,180,102,252, -230,109,158,157, 38,172, 86, 48, 24,236,242,123,223,249,144,209, 64,241,229, 55,111, 49, 24,140,112, 85,129, 45, 87,204, 46,159, -177, 60,125,198, 96, 50,225,141, 93, 77, 51,217,165,176, 17,165,129,243, 89,201,249,108,193,162,172,104,154,150, 36,146,164, 78, -161,107, 79, 36, 29,185, 18, 12,116,204, 80, 71,136,129,101, 56, 84,188,122,119,196, 43,247,238,113,235,224, 6,183, 14, 15,216, -191,117,155, 63,251,240, 17, 79,166,115,116, 57, 37, 81, 14,111,204,250,192,235,255,126,185,222,103, 43,148,208,168,200, 19,231, - 25,101,227, 65, 9,170,203, 57,222,199,196,194,177, 90, 45, 89, 46, 11,236,206, 46,198, 7,121,102, 20, 39,100, 58, 34,201, 18, -150,243, 25, 46, 15,129, 50,117, 83,115,114, 62,195,189,246, 10,174,147,234,201, 40,184,119,121, 23,166, 93,215,217,110, 6,168, - 60,236,208,125, 71,138,236, 97,245, 62, 64,197, 91,215,161,224, 98,189, 59,151, 62, 16, 28,165,148, 27,103, 69, 64,250, 14,218, -127,206,200, 70,136, 45, 34, 84,215,244,175,225,120,239,215, 83,125,223, 89,123,215,201, 45,165, 66,168, 14, 57, 91,115,124, 66, - 99, 34,163, 8, 45, 4,222,152,245,225,239,187,117,218,141, 27, 55, 56, 62, 57, 37,138, 98,164,144,156,159, 95,112,120,176,191, - 38,251,246,219,134, 52, 86, 12,243,152, 27,251,187,188,249,250,171,204, 93,204,189,187,119,137,133,103,118,126, 78, 60, 24,178, -191,179,195,217,201, 49, 35, 59, 97, 48, 25,211,182, 45, 34, 10,141,151,247, 48,222,219,193,123, 67,146,231,220,123,248, 26, 77, -213, 98,235, 10,239, 97,177, 90,146, 88, 67, 58, 25,132, 21,153, 49,168, 72,161, 85, 4,141, 33, 73, 34,108,211,160,140, 13, 48, -189, 8,102, 51,206, 74, 44,182, 75,120,244, 84,117, 29,164,125,109,139, 23,130, 69,177,226,106,182,192,186,128,252,214, 77, 13, - 46, 20, 62, 29, 69,100,113, 28,100,154,198,130,148,129,223,227, 45, 74,107,146, 44,227,232, 96,151,252,198, 17,227, 60,165, 92, - 53,244,158, 90,253, 81,118,113,113,201,187,239,191,199,131,251,247,137,243,140,186,110,208, 4,228, 96,190, 88, 96, 14,242,206, - 75, 94,116,150,192,178, 35, 93,138,142, 47,242, 25, 28,119, 99, 7,117,125,225,189, 46,250,219, 81,215,189,106,200,154,237,130, -110, 3,105,110, 93,212,221,186, 78,189,216,146,123,243,239,232,139, 58,191,109,195,224, 61,124,203, 11, 32,113,177, 69, 76,186, -166,105,247,108,197,169,242,194,157,253, 54, 61, 63,232,213,197, 90, 63,187,173, 5,253,188,232,213,207, 51,191,241,226,197,223, -217,203,185,232,211,119,156,219, 42,210,174,139, 78,164, 43,150, 91, 28, 3, 33,122, 48,230,165,127,139, 16, 2,215,191,121,197, - 38, 30, 86, 10, 9,182,165,169,107,202, 85,193,211,143, 31, 49,201, 19, 86,203, 75,156,111,152,207, 47, 56,216, 25,113,118,242, - 9, 7,163,155,252,236,131,255, 47, 85,253, 14, 41,158,199,143, 62, 98, 48, 28,112,242,248, 19,174,102,223,162,188,188, 98,249, -244, 9, 77, 49,133,213,105,144,121,181, 37,170,158,209, 10, 75, 83,214, 33,209, 71,117, 69,187,143,146,220,138,109,124,222,116, - 72, 73,191, 49,148, 17, 27, 66, 93, 56,168,196,218, 52, 70,116, 65, 25, 10,137, 70, 16, 17, 58, 88, 37, 21, 74, 40,116, 7, 91, - 43, 41,187,162, 30,220,236,172,243,140, 7, 49,245,252,140,129,214, 76, 43,139,109, 29,151,103,231, 28,221, 56,164, 44, 11,234, -170, 64, 71,146,197,213, 5,243,229,130, 76,199,164,122, 64,107, 44, 85,211, 96,157, 71,201, 16, 4, 18, 71, 10, 99,131, 72, 93, -171,132, 7,119, 30,208, 46, 87, 92, 93,158,176, 63,212,172,204,170, 27, 71,195,225, 44,112, 88, 97,176, 17,120, 37,240,145,192, - 9, 27, 14,116,103, 17,222,160,108,180,158,218,193, 62,151,246,183,185,166,134, 56, 38,145, 68,168,240,220, 40, 17, 97,188,197, - 71, 96,171,118,157,235,173,132, 70, 58,137,112,193, 96,169,238, 7, 54,239,193,182,161,121,232, 44,195,109,219,160,132,198,137, - 8, 17, 37, 24,231,186, 92, 97,137,198,227,150,167,220, 31,198,136,113,130,136, 29, 55, 14, 94,227, 71, 31, 61,227,191,249,131, -159,241,246, 43,135,164,206,176, 59,136,153,236,238,147, 68,193, 53,207, 90, 71, 83,172,216,207, 34,108, 36, 24,103,150, 91, 34, -194,140, 38,148, 85, 96,233, 71, 64, 18, 57,178,200,145, 68, 53,251, 59, 57,131, 76, 51, 24,230,220,188,117,192,120,146,147,100, -251, 72,189,131, 31, 30,242,232,233, 25,167,159,126, 8,205,130,178,184, 36,157,140, 66,177,140,100, 8,254, 80,225, 26,178, 62, -188, 86, 1,100,247,228, 73, 76,107, 20,205, 32,162,172, 64, 69, 51,204,170, 96,146,104,166, 39,103, 92, 29, 79,185,127,120, 27, -225,107, 4, 21, 24, 24,231, 57,190,109, 72,117,196,106, 89,176,179,191, 79, 18, 55,204,202,150,147,249,146, 52,206,137, 37, 68, -174, 5, 37,113,113, 26,136,110,184, 96,197,185,245,250, 41, 25,225, 59,221,250,218,104, 70, 8, 84,164, 59, 69, 71,192,116, 69, -159, 85,237,183,172, 96,251,179,161, 91, 21,246,252,141, 30, 82,239,237,164,125,159,124,232, 2,119,162, 71, 9,144,178,243, 82, -232,179, 46, 66,211,128, 20,200, 36,134,214,116, 69, 45, 52, 71,189,221,172,148, 2, 21, 71,152,214, 32, 68,248,221, 28, 30,169, - 20,119,238,221,230,244,236, 28, 37, 34,202,162, 97, 54, 43,200,243,172, 35,246,129,140,163,255, 31,107,231,217, 35, 89,146, 94, -231, 39,204, 53,233,203,118, 87,251,158,153,229,206, 82, 67,129, 2, 41,174, 0,126, 89,254, 0, 9,144,126,182, 8,154,221, 89, -106,199,187,158, 54,213,229,211, 93, 27, 70, 31, 34,238,205,204,106, 55, 43,237, 0, 5,244, 20,186,203,100,221,138,120,205, 57, -207, 33, 69, 50, 28, 85,140,167, 67, 14, 78,142, 57,218,123,132, 28, 14, 40,150,151,248, 85,205,129, 78, 88,173,231, 40,237,104, -138, 18, 45, 53,214,120,246,166, 99,178,196,209,214, 45, 73,166, 65,196, 66, 69, 75,146, 73, 78, 50, 74,113,237, 0,125, 48,237, -139,120, 76,139, 18, 18, 95, 53, 65, 29,230, 27,132,111,208, 13,216,198,115,189, 88,178, 46, 86,204,102, 99, 70,217,128,170, 89, - 96,189, 64,165, 25,251, 7, 7, 97,215,236, 12, 22,201,197,197, 53, 6,133, 74,242, 32, 24,116, 14,169,160,105, 67,129,147, 9, -135,114,109, 88,109, 38, 41, 94, 10,108, 83, 65, 85,179,242,154, 86, 42,102,153,226,175, 30,158,112,254,213,243,240,123,142, 11, -241,184, 78, 96,156,225,223, 62,255, 87, 62,249,239,255,131,147,135,159,114,245,243,215,204, 38, 5,215, 55, 23,228,147,156, 85, - 49, 4, 63,140,182, 70, 13, 50, 32, 94,149, 16,104, 33,208,194,247,206,162,224, 47, 17,193,238,186,109, 43,101, 51,189,243,236, - 90,133,165,143,171, 42, 31, 18,223,108, 15, 60,139, 34, 93,103, 99,200, 81,231,101,241,111, 52,146,219,247,154,254,165,227,235, -219, 59,117,239,119, 7, 13,239,203, 78,191,189, 23,247,189,134,233,255, 95,228,246,151,218,167,223, 14, 45,233,157,132, 91,222, -236,247,141,226,111,119,234,239, 10,200,145,114,183, 0,112,214, 5, 10, 92, 81,113,116,112,196,197,217,107, 38,163, 1,215, 23, -231,140,135, 3,230, 55,151,220,125,244,132,114,189,228,250,250,156, 44, 81,156,190,122,198,253, 59, 39,156,190,252,137,249,229, - 37, 26,199,247, 95,126,129,175, 43,174,127,254, 30, 95,175, 16,245,154,166, 42,177,150, 88,213,111, 56,225,155,239,211,191,231, -245, 20, 59,180,185,174,211,238,172, 92,206,197, 3,138,160,238, 15,220, 30,143, 87,126,131,123,239,244,214,221,222,144, 77,146, -159, 82, 2, 83,175, 81,126,134,173, 27, 18,160, 92,205,153,237, 77,105,202,146,155,171,107,148, 78, 89,175,214, 24, 27,112,164, -206, 85, 28,223,185,203,213,245, 77,232,194,132,196,251,224,111, 22, 66, 81, 46,214,225, 82,140, 35,173, 39,143, 31, 99,235, 53, - 69, 81, 34,124,136, 14, 13,236,116,139, 54,161, 51, 40, 68,131,214,157,189,184,139, 91, 13,157,181, 82, 46, 6,125,185, 29, 26, -225,142,152, 84, 38, 28,230, 97,111, 41,164,198,118,101,158, 8, 74, 91, 31, 49,111,225, 53,151, 72,153, 32,101,139, 84, 33, 28, -198,251, 77, 84,157,113,174,127, 70,124,204,212, 14, 95,115, 44,162,226,170, 68, 75,133, 16, 22,111, 75,164,183, 40,175,200, 82, -201, 63,252,230, 33,147, 92, 34,244,128,155, 69,201,179,159,151,224, 44,199,211,140,163, 81,194,131,253, 17,123,195, 28, 47, 18, - 28,208, 82,224,189, 5,229,152, 78, 4, 16, 72, 85,169,134, 68, 89,198,131,148,201, 56,101,111, 54,227,254,253,251, 76,166, 51, - 90,227, 73,210, 9, 94, 40,190,251,241, 75,170,245, 53,216, 37,195,180, 69,232,113,188,124,130,224, 76,117,163,202,142,199,174, - 18, 16, 10,229, 19,132,213,100,153, 38,111, 37,217,176,101,124,247, 16,245,172, 38,183,142,124, 24,232,121,235,170,164,172,215, -172,150, 11, 70,119,198,164,105, 74, 85,213,100, 89, 32,206, 57, 23,200,105, 66, 42,126,248,249, 37,247,143,255,154,134,240,179, -208, 74, 98,125,139,240,250,205,137, 98, 7,143,233, 85,237, 27, 10, 29,221, 51, 42, 4,214,155,254,176, 18, 91,222,243,119,165, - 73,110,176,195,113, 57,222,235,130, 58,130,162,221,141, 38, 20, 98, 11,231, 33,250,173, 76, 80,234,107,100, 95, 56,135,202, 58, - 16, 19,227,199,143,193, 82,200, 96, 77, 28,140,134,220,149,119,120,241,243, 43,188,247,188,124,249,138,227,227, 67,246, 15, 14, - 34, 27,220, 33,132,103, 52, 30,161,179,156,241,116,159,209,221,187, 60,126,252,148,139, 83,137,169,214, 52,206, 51,217,219,227, -234,250, 18, 33, 4, 55,151, 87, 28, 28, 28,113,115,125,201,157, 7, 67,202,186,100,224, 71,136, 68,134,108,129,173,213,163, 16, -130, 52,203, 67,224,114, 20,184, 73,209, 77, 50, 60,222, 88,108,107,208, 73, 70,213, 86,156, 95, 92,208, 52, 13,206, 26, 4, 81, -131,224, 61, 90, 4, 34,156, 49, 13,206,180,148,141,165,181, 6,148, 98,177,152,179,184, 58,103,156, 73, 82,173,169,235, 10,103, -108, 88, 87, 52, 13, 89,146, 80, 52, 21,137, 82, 76, 6, 67, 26, 19,108,199,179,201, 24, 83, 87,252,227,223,255, 23,254,227,199, - 83,230, 85, 29, 9,147, 61,144,156, 47,190,250,130,197, 63,253, 19, 39, 39, 39, 60,255,250,143,232,196, 50, 73, 20, 77, 93,115, -117,125, 67,243,224, 24,239, 69, 23,252, 23,169,154, 50,230,104,108, 66,131,250,181,249,123,118,182,254, 45, 19,223,221,168,235, - 24,165,106, 67,215,110,141,197,110,197, 91,127,232, 63,253,161, 49,250,251, 20,231,191, 68,161,190, 43, 16,217,126,200,253, 95, - 72,177,206, 95,236,227,236,196, 33,238,248, 0,253, 95,228,107, 20,183,118, 48, 97,252,100, 41,214, 5,179,241,132, 97,150,240, -211,203,103, 28,156, 60,228,230,234,146, 71,247,159,242,252,187,239,120,122,231,144,225, 48,163, 88,223,176, 55,155,112,113,241, -130, 59,251, 83, 92,187,230,250,244, 5,163, 68,115,254,252, 57,162,109,120,249,221,215, 20,151,175,176,179, 67,202,170,192, 20, - 77,175,118, 15,138, 99,191,133,171,220, 21, 36,190,115,213, 17,167, 38,155, 46, 94, 6,187,151,148,120,103,250, 7,209, 56,131, -178, 18, 47,193, 57, 17,223,108,188,220,229,142,232, 80, 74, 79, 91,174, 41, 22,151, 20,203, 5,249, 96,130, 18, 83,234, 34,120, - 81,199,147, 25,243,197, 10, 17, 73,125,121,146, 49,153, 78,169,170,130,182,174, 66, 20,165,177, 8,149,144,102, 57,109, 99, 2, - 2, 87, 64,150,104, 4,142, 84, 13,152,205,102, 92,158,189, 38, 79, 20,180, 6,161, 4,173,105,144, 74, 4,101,176,119,164, 73, -160,176, 73, 17,194, 48,148,148,224,235, 48, 86,147, 30, 41, 93,159, 57,191, 1,125,138, 24, 69,105,248,245, 71,247,208, 82, 96, - 35,173,174, 43,106, 36, 14, 37,125,111, 11,236,236, 85,170,213,241, 99, 5,216, 77,247,172,133,139, 60,142,136,165, 8, 10,225, -232,201,237, 10, 76, 25,166,213, 33,239, 28,144,210,163,125, 13, 86,144,139,150,223,126,114, 68,105, 20,167, 67,205,252,112,194, -217,162,228,231,179, 75,150, 45,156, 94,157,115, 48,204, 24,103, 34,250,234,161,109, 29,163, 97,194,120,152, 98,218, 18, 79,232, -196,108,219,130,202, 64, 15,200,198,251,136,100, 76, 81, 43,132, 72, 89,175, 27,230,203, 83,174,111,206, 80,162, 33,147, 6,172, - 67,144,224,172, 15,204,118,228, 6,203, 42, 58, 54,122,160, 38,122, 23, 10,198, 60, 79,105,189,166,182, 65, 40,116, 84,214, 52, -175, 46, 67,100,107,174, 89,212,107,238, 29, 30, 49,191,153,135,142, 84, 6,218, 64, 85,215,148, 77,205,120, 60,101, 54,155, 33, -181,228,244,234,146,207,191,125,198,103,191,126, 10,137,100,164, 28,137,112,224, 37, 66,167, 17,241, 76,100, 13, 56,164,151, 72, -173,183,194,135,182, 14,230,174,240, 20,201, 45, 1,172,232, 33,159, 27,135,144,220, 28,206, 91, 80, 43, 47,101, 24,242,137, 46, -248, 58, 20, 58,222,219,126, 29,215,141,253, 3, 17, 80,246,254,116,175,162,192, 88,138, 80,160, 90,135, 51,166,215, 61, 8,165, -194, 86,117, 11, 83,223,182, 45, 74,107, 14,143,143,120,249,242, 37, 30,207,233,235,215, 8, 41, 57, 60, 60, 68,225,209,198,209, -164, 25, 22,197,116,255, 0,148, 38, 31, 14, 24,140, 39, 44,173, 69, 8,205,195,199, 15,131, 86,164,105,194,115, 96, 91,188,179, - 76,247,246, 25, 78,166, 24, 95,163,253,102, 61,231,108,232, 29,149,212,225, 87,220,250,157,134, 79,106,141,183, 6, 15,100,105, - 74, 34, 37,171,186,230,230,242, 10, 1,225,242,118, 41,120,195, 40,207, 24, 14, 50,242, 44,165,174, 26,156,183,220, 44, 87,209, - 50, 40, 16,206,146,231, 41,131, 52, 76, 95,150, 55,107,134,131, 65, 16,152,121, 79,166, 36,149,179,248,186, 70, 9,205,217,217, - 41,185,148,100, 90,163,128, 7,135,251,252,245,147,251,252,219,215, 63, 80,223, 58,210, 23,203, 21, 95,124,243, 53, 79,143,142, - 73, 6, 35,140,107, 88, 44,150, 40,157,176,200, 37,243,197,138,201, 40, 3,239,122,160, 83,215, 4,116, 69,235,110,170,229,219, -111,247,157,145,123, 28,199,191,237, 66,183,182,179, 17,219, 24,218,226,223, 41,198,126,227, 82,191,109, 69,219,254, 71,183, 57, -235,183,187,116,241,150,209,252, 59,139, 4,255, 97,139,219, 27,159,243,255,225,226,220,254, 58,223,120, 49,197,251, 69,119,111, -223, 80,248, 91,170,185,219,175, 9, 59,123,146,247,126,125, 93, 7,183,165, 12,247, 24, 90,211,226,173,101,113,115, 5,182, 33, -213,130,171,139,107,154,163,187,212,213, 10,103, 42,246,166, 51,230, 55,151, 60,152,229,188,124,249, 2,211, 20,248,118, 69, 57, -191, 64,154,154,243,151, 47, 17,198,177,184,188,128,182,192, 86, 75,240,142,117,177,238,187, 17,231,123,157,100, 47, 23,216,134, - 92,109, 48,213,193,167,219,117,230, 93,122,144,234,213,238, 49,241, 74,200, 64, 83,179, 29, 41,207,210, 24,135,199,145,110,169, - 58,117, 28, 85,117,194,186,208,117,120, 52, 13,213,106,142,111,214,180,180, 56,103,200,211,132, 60,145, 72, 28,214,180, 12,178, -140,245,186, 32, 85,146, 98,185, 64, 40, 73, 34, 65,102, 9,109,162, 89, 23, 53,165, 13,234,208,245,170,160,108, 26,116,154,147, -104,141,113,146,131,131,163, 16,126,225, 26, 76,219, 96,155, 22,239,131, 55, 91,250, 20,239, 29,117,171,240, 46, 12,206,100,180, - 30,117,151, 38,120,148, 14,218,128,206,235, 45,162, 14,195, 57, 75, 91,213, 76, 70, 31, 33, 69, 64,199,134, 75, 61,240,106,125, - 79, 84, 12,235, 22,143,235,125,198,206,219,184,161,234,132,136,225, 96,240, 46, 20, 68, 2,143, 82, 93, 1, 40, 67, 39,227, 92, - 4, 49,135,177,177,210,138, 84,117, 81,165, 14,231, 42,132,107,201,132,100,239, 40,101,209,122, 30,204, 38,156, 78, 18, 94, 94, -172, 88,213,130,186, 82,164,171, 5,182,109,201,147,132, 81,150,177,186, 94,115, 57, 47, 80, 2,164, 76,194, 56, 90, 56,100,166, -217, 31, 28,224,146, 9,175,231,107, 50,221,224,141,227,102,126,142,144, 53, 74, 5,244,176, 21, 97,156,109,241,104, 45,122,251, -235, 78,170, 99, 12,132, 23, 66,162, 85,130, 80, 26, 33, 82,172,132,214, 11, 74, 60,119,239,223,163, 92,183,168,241,136,162, 42, - 57, 78, 52, 69, 85,146, 38, 65, 40,102,140, 65, 39, 9, 58,181, 12, 6,195,128,204, 52,150,147, 59, 71, 36,105,202,231, 95,255, -192,201,195,199,228,195, 1,178, 41, 73, 50,209,163,113,149,146,155,217,148,183, 81,184, 22,198,222, 97,226, 18, 87, 98, 29, 80, -198,111, 39, 81,110,159, 27,162, 23,252,117,127,238, 45, 82, 81,188,230,133,140,107,187, 77, 48, 12, 46,124, 14,108,252,123, 46, -174, 26, 69, 32,198, 9,223,237,234,163, 55,222,249, 72,179, 11,197,166,143,188,131,109,171,166,237,192, 37,125,177, 28,136,126, -143,159, 60,142,204,125,248,241,167,159, 72,210,148,189,189,125,156, 51,212,198,179,172, 45,227,189,187, 52, 50,163,174, 42, 38, -179,125,234,198, 4, 44,233,186,228,206,201, 9, 87, 23, 23, 12,242, 1,211,201,148, 27, 4,167, 23, 55,220,123,120, 72,154,133, - 51,171, 11,111,234, 9,146,209, 69,227,227, 58,206,123,143, 55,109,111,117,117,214, 50,200,114, 92, 83,210, 20, 21,151,151,151, - 56,167,130, 19,195, 91, 18,173, 34,226, 88,160,117, 74,221,180,212,109,205,205,124,201,170,172, 73,179,140, 65,158,161, 49,164, - 74, 98,234,154,170, 44, 56,216,223,199,182, 13, 94, 73,218,182,162, 42, 10,154,178,162,170, 91,158,189,120,205, 32,207, 24,102, - 57,197,106,193, 64,122, 62,125,116,194, 87, 63, 62,167,174,154,158,186,232,227,239,243, 31,254,248, 57,159,253,207,255,197,221, - 7, 15,248,254,219, 47, 72,135, 21,117, 94,114,113,102,121,254,226,140, 79,127,245,164,127, 60,182, 51, 0,164,216,141,247,221, -209, 90,253, 25,140,182,205,197, 30, 47,243, 91,124,144,247,221, 47,219, 91,118,253, 46,171,218,219,178,198,111, 95,248, 31,186, -200,223, 45,110,123,123, 2,220,187,198,254,239,178,197,189, 79, 0,247, 86, 17, 94,119, 40,255, 2,193,222,198, 59,176, 27, 5, -251, 46, 84,237,135,194,101,118, 57,211, 91, 57,206, 66,210,180, 45,197,122,197,252,250,138, 52,203,105,202, 53, 77, 85, 80,174, - 87,216,182,161,169,215, 12,210, 28, 83,215,152, 90,211, 84, 21,197,170, 32, 85,142, 76,183, 12,114,197,249,249, 57,123,123,146, -178,106, 73,146,140,211,211, 87, 8,185, 31, 30,134,232,135,237, 66, 77,132,163,127,223,110,221,226,145, 94,198,113,249, 46,198, - 87,198,162,168, 59,156,164,220, 68, 5,134,157,160,236, 31,190, 16,126,211, 6,116,168,181, 40,173, 66, 52,103,236,208,113, 2, -173, 60, 10,203,245,229, 37,152, 18,169, 21,249,168, 65,120,199,104,118, 68, 83, 23, 40, 5,203,197, 53, 74, 40,234,170, 33,201, - 18, 50,157, 83,196, 27, 51, 28,132,129,180, 50, 26, 13,153,207, 23,228,105, 66,107, 27, 90, 27, 32, 42,163,201,148,117, 89,161, -124, 67,158,165, 36, 89, 66,219, 84,168, 84,163,148,192,154,182,215, 7,180,214,160,108, 80,105,219, 72,246, 18, 2,234,218,199, - 12,117, 21, 82,144, 98,101,222, 54, 53,153, 20, 28,204,114,164,111, 81, 74, 97,141,136, 5,142,195, 69,165,123,208,105, 4, 16, -141,139,227,212,144,228,234,251, 50,193,119, 56,208,110, 84, 26,211,187,122, 74, 84,212, 37, 40,161,130,160, 47, 73, 3, 84, 38, -238,134, 37, 32,125,224,127,163, 66,103, 58, 83, 45,251,153,228,193, 40,229,179, 71,143, 40, 93,206,207,175,175,104, 76,141, 66, -177,156,175, 72,146,140,225,100,134,109, 91,156,177,180,181,161, 40,215,180,198, 34,179,150,233,186, 65,103, 5, 89, 38, 57, 63, -127,133,162, 1, 12, 89, 18,214, 28, 66, 37, 32, 19,172,209,160,194,247,215,253,186,134, 58, 94,246, 92,134, 16,160, 34, 17, 90, -163, 85,134, 64,147,225, 25,142,114, 70, 66,210,150,142,187,143, 31, 50, 60, 60,166, 82, 50,250,185, 37, 69, 85, 49,172,234,144, - 76, 40, 36, 77,211, 50,153,104,132,212, 44,150, 43,244,133,102,186,127,128, 74, 71,252,233,155,103,148,235, 3,254,234,225, 33, - 2, 71,150, 6,176,137,142, 89,229,157, 85, 77,244,226, 77,181,217,143,239,172, 4,217,217,153,203,109, 20,246, 54, 41,206,135, -117, 73,127,176,198,238, 43, 14,102,122, 17,169,144, 91,129, 82,253,199,140,231, 70,180,254,137, 24,244, 18,186,244,216,217, 27, - 11,194,135,120,223,206,188, 20,207, 38,105, 68, 88,175, 25,211, 39, 46, 90, 60, 58, 85, 60,253,228, 99, 94,190,120, 73, 99, 90, - 94,189, 62,163,110, 90,246,102, 7,220,172, 27, 26, 82, 70,163, 41,190,117, 44,230,215, 32, 4, 39,247,238,243,195,247,223,113, -250,250,140, 79, 63,253,132,229, 98,137,115, 33, 55, 60,205, 6,188,124,125,198,175, 42,208, 3, 69,154,110,242, 60,148,210, 72, -233,113,241, 2,239,194,133,132,214,193,110,102, 29, 74,120, 18,173, 73,210,148,122, 49,103, 57,159,115,254,250, 2,185,119,191, - 15,183,113,214,162,133, 66, 42, 77,107, 60, 22,199,171,179,115,170,198,177, 88, 44,200, 7, 57,195, 44, 65,227,184,119,112, 66, - 85,174, 67,252, 46, 14,219,182,120, 31,166,134,235,117,136,116, 45, 91,207,233,213,146, 39, 31,125,138, 49,142,225,112,194,226, -230,156,167,247,142,153, 12,114,174,171,134, 91,230, 51,126,122,241,156,162,173, 57,188,119,159, 47,190,248, 19,117, 85, 81, 23, - 37, 2,207,235,243,107, 62,254,248, 81,152,192, 73,185,123,119,137,109,207,248, 27,179,245,173, 80, 43,241,166,183,106, 59,233, - 52, 22,136,187,232,109,215,123,218, 63,212,132,246,150,182, 55,216,222, 31,176,144,237,236,198,223, 33,164,123, 43,221,109,231, -255, 63,172,178,127,219,110,254,109, 35,227, 15, 5,186,236,252,123,241,238,170,169,243, 16,238, 92,208, 91, 72,191,119, 1,122, -186,185,219, 47, 25,141,116, 35,248, 0, 56, 81,125, 23, 38,165,164, 44, 66,122,219,253, 39, 79, 41,150, 55,224, 12,235,197,156, -193, 32,101,121,115,197,112, 48, 98,113,125,131,244, 67,234,162,101,117, 83, 49, 26,230,204, 23,175,152,206,198, 92, 95,174, 73, -235,148,239,159,189,230,228,222,148,124, 48,101, 93,102,100,121, 0, 89,236,132,115,138, 55,189,142,221, 51,231,162,143, 57, 48, -196, 5, 82,111,228,239,178,227,229,139, 78, 64, 24,154, 10, 41, 36, 22,130,133, 41,178,238,187, 12,122,105, 36, 74,134, 28,107, -165, 84, 44, 44, 36, 9,160, 83, 40,218,154, 73,166,201,178, 12,108, 67,185,190,198,122, 71, 58, 58, 96, 56, 24,160,181, 36, 79, - 51,112, 3,164, 18,172,203,134,166, 42, 80, 73,142,109, 91, 6, 89, 78, 89,213,220, 92, 95, 49, 26,229, 97, 45, 80, 24, 60,142, -186,110,201,243, 33,149,243, 92, 92, 47, 72,148,100,152,106, 6,169, 98, 58, 26,162,147, 64, 58, 75, 34,160,196, 89, 29,198,163, - 34,116,115, 74, 73,156,179, 32, 44, 74,105,180, 22, 49,123, 62, 28,228, 90, 37, 28, 79, 82, 6,105,200, 23,111,157, 3,161,227, -248,204, 96, 93, 11, 94,245,137,127,155,103,105,115,113,171, 56,194,115,193,114,143, 19, 97, 60,188,161,253,133,169,138,150, 33, - 16, 69,136,168,184, 85, 10,165, 18,180, 78,251,231,207, 25,131,183, 38, 74,113, 36,194,121,116, 83,129,179, 12, 85, 67,226, 20, -159,221, 29,208, 38,147,120, 8, 30,147,232, 64,226, 90,175,214, 76, 38, 99,188,131,197,124,206,197,213, 57,143, 31,159, 48, 25, -229,184,182, 96, 93, 86, 72, 95, 35, 68,141,179, 38,230,199,131, 67, 97, 93, 80,146,135, 61, 35,177,112,233,138,153,205,159, 65, - 69,248, 76, 20,120, 73, 65,146, 42, 50, 36,114,109,145,249,128, 50, 11,132,191, 59, 7,119, 25,231, 99,202,186, 66,103, 57,117, -211, 34,171,154, 89,228,124,183,198, 4,128,211,222, 30,147,201,140,253,189,125,206,206, 47,248,246,219, 31,152, 95, 95,130, 23, - 60,190,127,135, 3, 21, 28, 4,206,249,224, 25,223, 66,179,118,209,194,157, 2,222, 58,183, 51,181,146, 66,246,200,118, 27,139, -174,254, 32,222, 58, 76, 58, 1,176,148,170,239,180, 2, 59, 62,248,205,195,103,218,196,175,122, 21, 38, 86, 62,242, 26,112,193, - 50, 8,190,167, 82,246, 22, 60, 37,250,181, 79,167, 83, 9,157,190, 71, 8, 23, 98, 97,189, 38,213, 73,252, 91, 14,161, 82,144, -146,199, 79,159,112,117,121,205,124,190,224,217,243,231, 92, 47, 74,174, 10, 79, 54, 59, 98, 94, 52, 60,126,112,159,166, 46, 57, - 61,187,224,227,143, 62, 65, 75, 73,146,167,252,248,253, 15, 76,166, 83, 22,139, 37,199,119,238, 83, 87, 13, 74,231,124,241,229, - 51,126,247,187,207,240,126,213, 39,147,120,231, 66,216,139, 12,209,180, 97, 20,110,251, 24, 92, 39, 37,182,173, 81, 8, 92,107, -169,214, 5,231,103,231,180,117, 69, 46,130,213,179,181, 6,225, 58,124,171,162,170, 91,206,111,174,185,188, 89,134,220,112,239, - 24,141,134, 92,157,157,242,240,238, 17, 82,120,188,181,164, 73,130,183, 21, 78, 56,108, 3, 42,213,212,198,112,122,126,197, 55, -207, 78,145,195, 25,217,112,128, 74, 51,234,186, 65, 10, 24,106, 73,162,211, 55,218, 92, 47,161,172,107,254,240,199,255,224, 31, -254,246,111, 25,205,246, 89, 45,151,164, 82, 50, 24,142, 49, 46, 52, 76,233,214,221, 35,227,219,238,157,182, 61, 78,167,231,186, -227, 92, 95, 60,184, 45, 4,247,155, 59,245,120,137,119, 29,186,219, 85,201,191, 43,200,108,123,236,175,127,145,231,252, 29, 59, -243,219,234,247,219, 29,240,159, 19,193,250, 54, 81, 93, 63,222,126,163,243,125,119, 71,252,190, 53, 66,191, 54,120,151, 53,111, -171,186,242, 59,246,131, 15,239,224,111, 95,234,111, 47,110,216,216, 32, 98,231,213,237, 28, 87,171, 21, 90, 4,149,108, 91,149, -164, 42,167,170, 10,142, 15, 15, 88, 46, 22,220, 59,184,195,233,179,151, 52,163, 49,206, 8,156, 85, 97,164, 53,212, 12, 71,119, - 40,202,215, 28,222, 57,193,122,195, 71,159, 62, 97,189,170,241, 85,194,104, 10, 69, 85,243,253,179,111, 99,117, 29,191, 47, 47, -222,254, 2,136,240, 32, 18,253,231,194,196,252, 61,185,177,248,109,132,118,155, 2, 74, 18, 15,199, 14, 59,235, 28,222, 5,212, -110,107,226,197,216,161, 58,145, 88, 41,144,195, 33,180, 41, 22,207,186,168,152, 76, 70,224, 26,230, 55, 23,136,178,230,240,206, - 3,172,177, 56, 41,104,234, 10, 15,180,198,145, 38,138,214,182,161,147,104,215, 64,216,131,183, 54,236,247,243, 60,165,172,154, - 32,216, 65,176,183,119,196,243,235, 27, 42,235, 89,151, 13, 73, 9, 87,203, 50,192, 54,178,132,113,166, 24,164, 58,224, 87,195, -214, 53,174, 74,194, 84, 66, 73,223,139, 97, 68, 20,231,133, 98,204,115,239,100,136, 32,236,243, 93,228,192, 91,103,113,222,108, -186, 47,239,240,222, 68,123, 81, 80,222,122,111,227,243,227,122,172,171,144,160,147,104, 28,217, 74,209,235,158,147, 52, 73, 72, -146, 20,173, 21, 74, 71,229,182,232,216,244, 97,143,235, 44,200,122,137, 3, 26, 20, 75, 47,240,164, 72,227, 72,156, 65,214, 37, - 42, 90,148,146, 52, 39,145, 13,179,125, 73,122,178, 23,145,169, 32,213, 61, 90,115,140,107, 45,174,109,240,141,192, 9, 69, 93, -121, 90,239, 17, 54,160,113,133, 22, 52,182, 6, 74, 18,173,208, 62,199,123,221,123,168,119,138,122, 73,191,103, 23, 66, 5, 90, - 91, 28,183, 6, 86,178,227,244,250,138,102,152, 80,181, 53,199, 22,206, 95,189,198,198,174, 90, 39, 58,144,208, 70, 99,180,210, -177, 75, 12,151,104, 85, 86, 44,174,111,184,127,247,132,182,108, 40, 43,203, 87, 63,156,114,113, 83,241,217,227, 41, 15, 14, 71, -164,121,138, 74, 37, 50, 6,180,120,182,216,239, 91,150,219,141, 55, 61,218,151,162, 75,100,251,236,184,109, 95,186,221, 76, 72, - 69, 4,196, 16, 62,159,143,135,122, 28,151,247, 21,244, 54,106,214,198,247, 59,136,232,174,222, 93,209,243,230,183,153,160,194, -133, 0, 26, 66,193, 25,156, 6,146, 44, 77, 55,184,100,224,248,248,152,201,120,194,243, 23,175,248,241,217,115,174,234,132,189, - 7,191, 70,249,132,213,106,201,195,251,119,121,121,250,138, 23, 47,126,230,238,241, 33,175, 78, 95,133,108,240,241,136,214, 58, - 94,159, 95, 48, 26,206,152,238,221,229,230,250, 25,175,207, 23,220, 57, 74,241, 62,140,224, 93,219, 6, 20,177, 78,194,100, 66, - 8,124,235,240,198,198, 72, 91,141,183, 45,222,134,223, 15,219, 26, 94,189,120,201,193,225, 1, 23,101,137,101,218, 23, 69,206, - 5,177,221,243, 87,175,153,175, 87,120, 21, 38, 53,195,225,128,170, 44, 25, 13, 6, 28,236,207,112,198,160,113, 8,103,112,222, - 96,188,195,122,112, 62,197,120,207,179,103, 63,243,167,111,126,230,240,163,207,112, 72,156,144, 84,198, 50, 30, 12,152, 74,141, - 78,146,216,180,108,203,133, 67, 36,235,239, 63,255, 3,191,253,251,191,231,233,199,159,240,167,127,253,103,152,132,159,213,124, -177,226,252,236,130, 71,119,199,187, 23,130,216,118,103,177,181, 23,183, 59, 35,116,209, 77,112,252,230, 57,232,166, 52,221,159, -157,117, 49,193,210, 97,157,141, 54, 54,215,167, 95,190,237, 50,239,223,196,230,255,181,247,219, 8, 81,113,107,111,252,230,212, -222,111,117,120,219,250,247, 55,162, 78,125, 64,223,201,237, 76,225, 91, 31,243, 93, 2,188,157, 34, 65, 8, 92, 63, 6,143,196, - 39,215,133,109,244, 31,181, 55,246,203,173, 69,113,223,144,118,163,227,248, 11,189,179,199,232,188,102, 62,170,127,125,176, 13, - 56,100,200,172,246,193,143, 42, 98,116,159,187, 29, 2, 19,171,230,136,240,221,161,226,117,163,153, 78,152, 38, 17, 17, 90, 96, -209, 66, 96, 99,182,179,151, 18,153,104,218,170,160, 92,173,240, 6, 84, 54, 96, 93, 87, 60,202,135,204, 87, 43,134,105,194,157, -195,125,188, 82,124,244,201,175,201, 71, 3,158,124,244,119, 12, 7, 35, 38,179,187,220,220,120,178,116,192,183,223,125, 73, 81, -173,152, 30,222,225,186,146, 72,165, 73, 7, 73, 88,211,181,126, 39,200,226,109, 21, 74,119, 41,123, 39,227,229, 19,121,229, 90, -198,221,169,136, 62,106,177,197, 62, 8,145,174, 68, 4,172, 36, 4, 86, 56, 39, 67,232,139,216,222, 47, 57,132, 15, 41, 83,131, -193, 8,161,160,117, 13, 82, 67,109,192, 85, 5, 50,205,104,150, 55, 20, 73,202,104,186, 79, 85,149,193,110, 36, 37,121,158,176, - 46, 43,154,186,198, 24, 79,146,230,172,203,154,182,105,177, 46, 4,135,212,117,217, 99,187,171, 98,197,222,100, 66, 34,101,216, - 99,199, 3,188,118, 17, 30, 99,106, 46,215,225,199,175, 54, 56,110,116,196,197, 38, 74,144, 42, 72,164, 32,145,138, 68,202, 40, - 58, 12,202,131,255,116, 50, 70,197,143, 7,193,255,220,122,139,117, 2,225,117,175, 43,232,126,209,125, 23, 93, 25,133, 69, 29, -111,223,187,208, 9, 74,233, 16, 42,252,158, 41, 29, 98,114,181,146,164,105, 74,154,102, 33,226, 87, 42,148, 20,225,112, 18, 18, -231,130, 96, 79,120,143,245, 50, 90,226,170, 16, 32,100, 37,206,107,140,113, 33, 81, 80, 73,180, 81, 40,111,113,190,198,218,150, - 52,211, 72, 26, 82,175,208, 36, 1, 6, 20,231,196, 6,131, 21, 22,164, 11,108,245, 54,184, 31,140, 15,107, 11, 37, 99,138,157, -143, 59,243, 62, 17, 15,140, 13, 0, 24, 29, 35, 75, 59, 90,130,142, 33, 41,198,122, 26,227, 88, 87, 13,151,101,201,124, 85, 32, -135, 67,180, 74,162,143, 89, 49,222,155,177, 92,174,163,226, 95,209,180,134,166,109, 25,140,198,212,109,131,175, 29,147,189, 41, - 66, 75,234,186,225,206,201, 93,206, 47,175, 24,207, 14, 40,141,227,219,179,138,203,210,242, 87,143, 79,152, 8,144,202, 5, 62, - 59, 46, 70, 68,235, 45, 75, 42,125, 20,102, 47,156, 19,190, 91,137,199, 2,192,111,124,206, 91,183,130, 23,187,205,132,239,246, -224,116,152,225,221, 24, 99,188, 11,235,139, 40, 34, 12, 77,182,219,156, 87, 91,172, 14,239, 58,156,236, 38,174,213, 69,214,133, -212, 58,128, 75, 92, 92, 11,233, 36,132,218,160, 17,110,133,118, 53, 90,194,209,157,123,124,115, 90, 51, 62, 60, 98, 56,154,208, - 24,139, 78, 19,170,166,225,232,232,152,249,245, 53,119,142,142,130,166, 79, 10,174,174,230, 76,166, 51,170,170, 70, 39, 18,148, - 37,205, 39,252,235,191,127,199,239,126,247,183,228,153, 35,145, 30,169,116,127,174, 58,103,195,121,166, 36,206,152, 16, 63, 28, -163,102, 49, 53,184,146,245,186,226,114,225,121,250,233,223,241,252, 15,127, 8, 49,162,198,161,132, 32, 27, 12,144,105,202,213, -197, 57, 66,133,241,125, 85, 55, 36, 2,172,169,248,232,193, 9,218, 6,168,143,151, 32, 48, 56,211, 68, 43,170,199, 91,131, 18, -154, 31, 95, 94, 97,213, 40,196,202, 42, 29, 92, 64, 77,129,222,159,112,113,117,202,205, 98, 78,174, 4,141,245, 88, 17, 0,174, -194,133, 2,252,252,234,154, 31,158,189,224,183,255,237, 31,249,252,159,255, 55,131,209,136,225, 48,167, 44, 75,138,162,194,203, - 67,132,168, 99,213, 70, 95,232, 7, 12,114,247, 99,140, 23,177,117,145,123,224,226, 3, 20,138,187, 96, 31,234,154,199,112,198, -110,132,113, 49, 47,195,211, 7,101,185, 91,157,250, 91,167,194, 91,119,169,222, 30, 31,221, 6,144,236,198,165,190,125, 92,251, - 78,159,122, 47, 22,136,106, 65, 41,222,184,208,183,133,109,239, 26,225,187, 45,129,217, 54,101, 78,110,137, 28,250,113,178, 8, - 29, 98,247,142, 91, 8,144,254, 79, 59,123,245,126, 26,176, 29,133, 71, 15, 9,233, 42,186,109,212,235, 46, 60, 96, 3,116,121, -171, 27, 96,187, 11,192,199,113, 13,253,232, 70,197,213, 68,162,147,240, 3,173, 91,134,249,132,100, 50,129,100,200,104, 60,102, - 58, 25,147, 13, 7,204,246,247,184, 60, 59, 99,152,103,220, 20, 75,218,243, 20,127,182, 64,103, 11,134,131, 17, 45,130,123,143, - 30, 81,123,199,143,167,103,124,247,226,146, 23,207,159, 51,202, 83,108, 71, 50,243,219,131,248,183,241, 18,194,251,109,247,160, -121,143,242, 2,235, 29,214, 73,148, 10,151,159, 86,162, 47, 82,136, 63,227,110,231, 39, 69, 60,156,148,192, 74,129,243,114, 3, -247, 17, 18, 97, 3,165,172,105,107, 50,169, 16, 50,163, 53, 13,169,151, 24,235, 16, 85,133,210, 9,166, 92, 83, 74,133,206, 71, -120, 47,153,207,231, 36, 73, 74, 91,215, 28, 29, 30,240,226,244,140,182, 46, 73,132, 96, 81, 22,232, 36,197, 52, 53, 74, 72,140, - 51, 36, 82, 35,188, 96, 60,200, 25, 15, 50,138,170,236,213,201, 34,166,183,201, 29, 42,160,136, 86,118, 79,107,160,197, 81,198, - 87, 68, 9,129,242, 54,136,201,226, 75,165,164,103,144,228, 1, 68,227, 84, 28,177,182,113, 32, 34,241,214, 99,108, 19,148,230, - 59,207,120, 24,251,123, 97,131,127,221,171,254, 98,113,222, 96, 76,131,140, 84, 52, 45, 53, 90,167, 36, 93, 26,160, 78,194,234, - 70, 8,116,236,208,132, 4,175, 85,220,211, 59, 26, 15,141,115,216,166,196,183, 14,107, 36, 94,232,160, 52, 23, 30,161, 12,169, -206, 72,108, 66, 98,147,200, 29, 8, 69,152,183, 81,216, 40,227,239,144, 80,120,229,176, 54, 52,134,218,233, 48, 61,113,129, 4, -230, 84,152,104, 56, 7,202, 7, 85, 54, 50,142,162,241,125,170, 93,168,120,219, 48,150,118, 33, 32,167,117,146, 85,221,114,185, - 88,115, 83, 86,228,249, 8,173, 83,198,227, 49,121,158, 7, 63, 48,208, 70,240,207,104, 56, 10,147,152,225,128,203,171, 75, 30, - 60,120,136,117,150, 85,177, 2, 9,198, 56, 70,227, 9, 15, 7, 15, 67, 76,102, 89, 82, 25,195,245, 10,116, 50,224,233,189, 61, -246,180, 10, 46,137, 36, 64, 67,136,132,175,238,128,246,110, 51,177, 19, 91, 97,232,242,125, 33, 87,126,119,197,215,189,223,221, -178,209,245,218, 32,231, 17,214, 69,245,122,156,106,225,251,120, 74,239,216,106, 90,182, 2,152,226, 25,231, 35, 68,199,119,205, -186, 16, 36, 34, 6,216, 8, 1, 82,163, 51,137,198, 96,188,193,225,248,249,245, 37,201,228,152,195,187,143, 48,166,101, 60, 72, - 88,175,215,193,125, 33, 36,101, 21, 38, 97,135, 71,199,204,151, 75,214,235,130,217,108,143, 52, 75, 64, 88,170,122, 73, 54, 24, -176, 88,102,156,190, 94,243,209, 71, 19, 28, 5, 74,201, 30,153,221,227,238,149,138,186,156,216,202, 8,129,240, 6, 91, 21, 92, - 94,206, 25,239,159, 48,189,255, 49,230,247,191, 15,130, 74, 2,245, 49, 75, 83,172,247, 20, 77, 69, 83, 53, 12,135, 25,185, 86, -184,166,226,254,157, 3, 6,137,198,182, 13, 65, 70, 27,146, 17,133, 13,197,181,181,150,170, 53, 44, 87, 37,231, 55, 5, 39,143, -127,205,122,177, 38, 63, 60, 36, 4,175, 58,138,186,165, 50,130,182,110, 56, 24, 15,185, 92, 21, 88,215,177,247,195,143,218,120, -193,191,252,251,231,252,205,175,126,197,131, 71, 15,177, 66,132,100, 73,211,176, 90, 23, 81, 51,179,157, 81, 34, 98,140,238,174, -181,217, 89, 27, 59,239,192,115,247,206, 5, 54,129,219,140,215,183, 21,239,125,135,110,108, 79,143, 51,221,191,119,191,220,206, - 22, 59,117,255, 94,219,218,135,130, 88,222,166, 60,247,209, 30,196, 22, 56,198,251,219, 29,191,127,167,199,253,151,236,166,223, - 53,174,239,152,243,183, 91, 81,225,119, 29,232,111, 13, 94,121, 75,126,248,135,119,229,187,182,132,183,125,253,226,214, 40,178, -183, 66,196, 0,148, 4,129, 78, 51,146,209,148, 44, 27,130, 74,193, 11,202,117,193, 15, 47,126,102,111,127,159, 69, 93, 5,196, -232, 32, 67,143,199, 20,235, 53, 63, 93, 92,114, 61,191,225,242,122,193,229,249, 5, 90, 65, 85, 44, 56,191,153,211, 10, 73,227, - 4,222, 90,158, 62,188,207,193,116,220,135,113,250, 15,112,112,195,247, 19, 5, 99,182,123,240, 4,214, 10,148, 52,104,165,112, - 58,172, 15,116,244,245,122,191, 97,197,135, 51,103, 3, 16,234,169,125, 17,216, 35,226, 5, 89,172, 87,168, 44, 97, 52,206, 33, - 9,123,105,178, 33,109, 83, 69,139,148,199, 53, 21, 78,138,176,215,138, 99,179,253,233,148,117,177, 98, 50, 72,105,141, 99, 93, -148,172,151,215,100,249, 40,178,191, 85,200, 37,182, 45, 66,104,134,131,140,167, 79, 30,241,249, 23, 95,246, 19, 29, 33,192,198, -226, 80,197, 61,148,218, 98,252,203, 32, 60, 14,172,250,152,114, 38, 58, 81,148,240,161, 72, 18,158,225,104,208, 79, 52,140, 49, -155,196, 59, 65, 64,117,182,237, 86,114,150,232, 93, 15, 74,235,168,150, 22, 8,169,163,144, 44, 92,172, 82, 6,177,162,214, 9, - 90,105, 18,157,144,232, 4,173,117,124, 83,253, 72,222,198, 36, 61, 29, 87, 42,253, 68,192, 89,156, 53,180,141,195,152,144, 21, -222, 90,131,245, 45, 82,213, 56,149, 98,146,140, 70,102,148, 74,145,103,121,128,149,100,158, 84, 91,146, 52,137, 62,115,133,194, -225,164,194,235, 12,188, 64,182, 45,109, 27, 62, 79, 39, 28,148, 82,208, 8, 19,199,173, 65,244,212, 37,254, 89, 7,202,121,116, - 18, 52, 36,141,245,212,222,177,108, 28, 23,139,146,103,167, 87,100,227, 61,172, 23,140, 38, 19,234,186, 9,221,139, 49,104, 29, -114,189,165,144, 44,151,203,222, 79, 62,157,206,168,235,154,182,109,153,238, 79, 25, 14,198,220,212, 55, 44,151, 75, 14, 15,143, -112,206, 83, 22, 37, 39, 39, 83,180,146, 60,123,117,201,235,243, 75, 30,221, 63,228,227, 39, 39,100, 64,146, 4,225,166,247, 54, - 90,205, 84,116, 36,116, 35,250, 93,157,141, 82,234, 23,179, 50,188,140,226,210,109,162,156, 16, 97, 28, 31,117, 56, 98,135, 26, -231,223, 0, 64,117,105, 98,157, 38,201,197, 17,174,236, 53, 1, 27, 52,170, 80, 93,100, 72,240, 70,106, 9, 36, 41,173, 28,112, -181,110, 89,154, 20,135,100, 62,191,161,174,107, 70,163, 17,214, 90,150,203, 37,247,238,221, 99, 49,159,243,234,213, 43,158, 60, -121,194,124,177,192,123,207,245,245,117, 72, 93, 43, 10,238,220, 57,166, 42, 13,195,225,148,203,171, 53,147,137,228,232, 48, 69, -138,224, 51,199,111,105, 39, 60, 32, 66,245, 47,189, 0,211,224, 45,212,141,229,122,177,228,232,248,136,215,243,171, 48, 1, 49, -150,170,174, 73, 7, 41, 69, 81,160, 7, 37,139,197,146,233,100,204, 48,203, 48, 85,193,193,254, 30,163,193, 96, 3,232,145, 58, -156, 97, 86,128,149,224, 4,222,107, 46, 22,107,254,244,205, 15,236, 29, 28, 51, 28,142, 56, 60, 56, 36, 77,115,148,240,164, 73, -138,244,130,139,179,115,134, 89,198,127,254,205,175,248,253, 87,223,114,186, 88, 99,253, 86,216,148,135,103, 47,158,179, 40,214, -252,230,179,207,248,241,155,175, 88, 23, 5, 77,211,112,113,113, 25,184,242,183,226,169,251, 6,212,237, 70, 80,119, 23,186, 53, -129, 55,225,227,212,214,217,205,174,220,185, 16,199,109,141,161,109, 91,218, 72,145, 51,214,246, 73,152,239, 8,149,190,117, 87, -109,218, 88,253, 33, 96,204,219,118, 71,155,110,188, 63,194,241, 59,157,243, 38,218,113,219,235,221,113, 31,186, 11,227,189,152, -217, 63,211,155,222, 95,168, 78,188, 49, 98,239,230,254,127,206,165,254,198,238,226, 29, 47,232,109, 29,221,219,191,151,141,162, -118, 91, 53,217,237, 26,149, 18, 24, 37,105, 16,248, 52,231,193,147,143,184, 46,106,214,203,146,159,207,207,249,227,183,223,176, - 90, 46, 88, 45,230,148,101, 17,148,202,214,177, 55, 25, 81, 85, 53,101,107,153,142,198, 28,239, 79,208, 89,134, 72, 20,121, 62, -162, 89, 87, 56,107,169,234, 10, 41, 39, 65,212, 18,181, 64,126, 75,141,251,198,234, 99, 75, 56, 24,183, 29,225,253, 54, 92, 32, - 97, 84, 20,242,146,141,243,113, 84,173,250, 52, 73,181,245, 58,116, 10,121, 29, 45, 64, 46,124,195,164,194, 97,109, 19,213,187, -138,253,217, 4,103, 91,202,216,177,180, 85, 9,222,224, 90, 71,109, 26,176, 6, 45,114,234,166,198,122,199,226,230,134,217,254, - 1,169, 20,180,165,229,206,193,140, 87,103,151, 28, 29, 29,225,240,212,109, 69,219, 88,154,198,227,165,100,111, 56, 96,150,165, -172,171, 58,216,153,122,225, 74,120, 51,132,108,116, 29, 15,115,189, 85, 12, 42,235,123,100,174,117, 93, 87,226,201,114,205,104, -152,199,177,142,192,218,184, 31, 99, 35,136,243, 4,225, 80, 63,150,139,110, 14, 41, 33, 17, 73, 0, 90, 8,221, 11,141,132, 82, - 64,210,115,247,149,212, 81,164,167,118, 46,116,173, 59, 5,174,194, 73,143, 49, 46,136,247,180, 68,182,209,148,232, 67, 29,104, -234,160,236,111,113, 72, 21,244,201,165,107, 81, 73, 75,150, 91,188, 36, 16,251,202, 1,123,147, 17,195, 65,206, 72, 8, 68,119, -177, 11, 21,133, 79, 1,235,217,217,150,164, 76,104, 90, 3,214, 0,170,239, 54, 60, 6, 47, 20, 78,132, 85,130,212, 30,229, 2, -189,203, 90,168,173, 99,101, 44,175,174,214, 44, 74,135, 17, 41,139,139, 75, 30, 63,121,130,144, 10, 99, 12, 82, 74,140, 49, 52, - 77,195,112, 56,164, 40, 75,246,102,123,140,199, 99, 94,159,159,145,231,195,254,239,172,150, 5,147,241,140,225,112, 72,221, 52, - 92, 94, 93, 50,157,132,248,206,233,116,140,243,240,227,179,107,148, 82, 92, 44, 95, 50, 47, 26,126,243,241, 3,166, 35, 77,166, -187,192, 29, 25,215, 8, 81,108,134,220, 4,247,136,110,106,248,238,243, 80, 68,129,155,235,222,215,117,112,241,121,216, 30,163, -211,175,191,194,104,192,111,249,145,118, 0, 57,125,162, 99,164,221, 69, 90, 29, 66, 32,124, 64,203, 74,165, 17, 46, 92, 30, 66, - 73,108,208,243, 35,172,199, 24, 88, 84,130, 87,215, 13, 87,107,152,237, 77, 98,112,139,160,109, 42, 4, 97, 7,191, 94,173,152, - 78, 38,188,122,245,138, 97,204,161, 48,214,161,117,184, 60, 7,131, 1,203,197,146,225,104,194,108,118,192,106,117,195,151, 95, - 62,231,191,254,246,215, 12,210, 48,153,147,189, 10,208,245, 92,251,141, 10,205, 97, 26,203,205, 77, 73,209, 88, 10, 87, 96, 92, - 84,235, 91, 71,221,180,216, 84,147,102, 42, 10, 86, 13,166,109, 57,127,189,224,201,189,187, 76, 71, 67,188,179, 84,145, 25,223, - 56, 75,213,182,225, 59,117, 33, 53, 50, 73,115,190,251,233, 53,167,151, 75,238, 63,189,143, 78, 18,154,186, 70,107, 77, 58, 28, - 32, 77,131,113,150,239,191,254,154,189, 60,227,233,189, 59,156,157, 95,112, 62, 95, 5,145,175,146,241,103, 15,139, 98,197,255, -249,242, 43,254,230, 87, 79,249,238,235,175,185,186,158,227,157,225,112,111,188,147,133,238,183, 38, 20,221,125,105, 99,202, 90, - 72, 88,107, 49,109, 27, 8,128,113, 60, 79,252, 59,206,110,186,116, 99, 44, 77,221,208, 52, 45,117,211,246, 43, 38, 99,108, 88, - 95, 58,222,107,239,190, 45,148,251,191, 3, 0, 97,118, 36, 17, 24,195, 73,139, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, +137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, + 13, 73, 72, 68, 82, 0, 0, 1,245, 0, 0, 1, 26, 8, 6, 0, 0, 0, 8, 90,206, 70, 0, 0, 10, 79,105, 67, 67, 80, 80,104, +111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108,101, 0, 0,120,218,157, 83,103, 84, 83,233, 22, 61,247, +222,244, 66, 75,136,128,148, 75,111, 82, 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, 33, 9, 16, 74,136, 33,161,217, 21, 81,193, + 17, 69, 69, 4, 27,200,160,136, 3,142,142,128,140, 21, 81, 44, 12,138, 10,216, 7,228, 33,162,142,131,163,136,138,202,251,225, +123,163,107,214,188,247,230,205,254,181,215, 62,231,172,243,157,179,207, 7,192, 8, 12,150, 72, 51, 81, 53,128, 12,169, 66, 30, + 17,224,131,199,196,198,225,228, 46, 64,129, 10, 36,112, 0, 16, 8,179,100, 33,115,253, 35, 1, 0,248,126, 60, 60, 43, 34,192, + 7,190, 0, 1,120,211, 11, 8, 0,192, 77,155,192, 48, 28,135,255, 15,234, 66,153, 92, 1,128,132, 1,192,116,145, 56, 75, 8, +128, 20, 0, 64,122,142, 66,166, 0, 64, 70, 1,128,157,152, 38, 83, 0,160, 4, 0, 96,203, 99, 98,227, 0, 80, 45, 0, 96, 39, +127,230,211, 0,128,157,248,153,123, 1, 0, 91,148, 33, 21, 1,160,145, 0, 32, 19,101,136, 68, 0,104, 59, 0,172,207, 86,138, + 69, 0, 88, 48, 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, 73, 87,102, 72, 0,176,183, 0,192,206, 16, 11,178, 0, 8, 12, 0, + 48, 81,136,133, 41, 0, 4,123, 0, 96,200, 35, 35,120, 0,132,153, 0, 20, 70,242, 87, 60,241, 43,174, 16,231, 42, 0, 0,120, +153,178, 60,185, 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, 43, 20, 54, 97, 2, 97,154, 64, 46,194,121, +153, 25, 50,129, 52, 15,224,243,204, 0, 0,160,145, 21, 17,224,131,243,253,120,206, 14,174,206,206, 54,142,182, 14, 95, 45,234, +191, 6,255, 34, 98, 98,227,254,229,207,171,112, 64, 0, 0,225,116,126,209,254, 44, 47,179, 26,128, 59, 6,128,109,254,162, 37, +238, 4,104, 94, 11,160,117,247,139,102,178, 15, 64,181, 0,160,233,218, 87,243,112,248,126, 60, 60, 69,161,144,185,217,217,229, +228,228,216, 74,196, 66, 91, 97,202, 87,125,254,103,194, 95,192, 87,253,108,249,126, 60,252,247,245,224,190,226, 36,129, 50, 93, +129, 71, 4,248,224,194,204,244, 76,165, 28,207,146, 9,132, 98,220,230,143, 71,252,183, 11,255,252, 29,211, 34,196, 73, 98,185, + 88, 42, 20,227, 81, 18,113,142, 68,154,140,243, 50,165, 34,137, 66,146, 41,197, 37,210,255,100,226,223, 44,251, 3, 62,223, 53, + 0,176,106, 62, 1,123,145, 45,168, 93, 99, 3,246, 75, 39, 16, 88,116,192,226,247, 0, 0,242,187,111,193,212, 40, 8, 3,128, +104,131,225,207,119,255,239, 63,253, 71,160, 37, 0,128,102, 73,146,113, 0, 0, 94, 68, 36, 46, 84,202,179, 63,199, 8, 0, 0, + 68,160,129, 42,176, 65, 27,244,193, 24, 44,192, 6, 28,193, 5,220,193, 11,252, 96, 54,132, 66, 36,196,194, 66, 16, 66, 10,100, +128, 28,114, 96, 41,172,130, 66, 40,134,205,176, 29, 42, 96, 47,212, 64, 29, 52,192, 81,104,134,147,112, 14, 46,194, 85,184, 14, + 61,112, 15,250, 97, 8,158,193, 40,188,129, 9, 4, 65,200, 8, 19, 97, 33,218,136, 1, 98,138, 88, 35,142, 8, 23,153,133,248, + 33,193, 72, 4, 18,139, 36, 32,201,136, 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, 32, 85, 72, 29,242, 61,114, 2, 57,135, 92, + 70,186,145, 59,200, 0, 50,130,252,134,188, 71, 49,148,129,178, 81, 61,212, 12,181, 67,185,168, 55, 26,132, 70,162, 11,208,100, +116, 49,154,143, 22,160,155,208,114,180, 26, 61,140, 54,161,231,208,171,104, 15,218,143, 62, 67,199, 48,192,232, 24, 7, 51,196, +108, 48, 46,198,195, 66,177, 56, 44, 9,147, 99,203,177, 34,172, 12,171,198, 26,176, 86,172, 3,187,137,245, 99,207,177,119, 4, + 18,129, 69,192, 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, 32, 28, 36, 52, 17,218, 9, 55, 9, 3,132, + 81,194, 39, 34,147,168, 75,180, 38,186, 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, 35,214, 18,143, 19, 47, 16,123,136, 67,196, + 55, 36, 18,137, 67, 50, 39,185,144, 2, 73,177,164, 84,210, 18,210, 70,210,110, 82, 35,233, 44,169,155, 52, 72, 26, 35,147,201, +218,100,107,178, 7, 57,148, 44, 32, 43,200,133,228,157,228,195,228, 51,228, 27,228, 33,242, 91, 10,157, 98, 64,113,164,248, 83, +226, 40, 82,202,106, 74, 25,229, 16,229, 52,229, 6,101,152, 50, 65, 85,163,154, 82,221,168,161, 84, 17, 53,143, 90, 66,173,161, +182, 82,175, 81,135,168, 19, 52,117,154, 57,205,131, 22, 73, 75,165,173,162,149,211, 26,104, 23,104,247,105,175,232,116,186, 17, +221,149, 30, 78,151,208, 87,210,203,233, 71,232,151,232, 3,244,119, 12, 13,134, 21,131,199,136,103, 40, 25,155, 24, 7, 24,103, + 25,119, 24,175,152, 76,166, 25,211,139, 25,199, 84, 48, 55, 49,235,152,231,153, 15,153,111, 85, 88, 42,182, 42,124, 21,145,202, + 10,149, 74,149, 38,149, 27, 42, 47, 84,169,170,166,170,222,170, 11, 85,243, 85,203, 84,143,169, 94, 83,125,174, 70, 85, 51, 83, +227,169, 9,212,150,171, 85,170,157, 80,235, 83, 27, 83,103,169, 59,168,135,170,103,168,111, 84, 63,164,126, 89,253,137, 6, 89, +195, 76,195, 79, 67,164, 81,160,177, 95,227,188,198, 32, 11, 99, 25,179,120, 44, 33,107, 13,171,134,117,129, 53,196, 38,177,205, +217,124,118, 42,187,152,253, 29,187,139, 61,170,169,161, 57, 67, 51, 74, 51, 87,179, 82,243,148,102, 63, 7,227,152,113,248,156, +116, 78, 9,231, 40,167,151,243,126,138,222, 20,239, 41,226, 41, 27,166, 52, 76,185, 49,101, 92,107,170,150,151,150, 88,171, 72, +171, 81,171, 71,235,189, 54,174,237,167,157,166,189, 69,187, 89,251,129, 14, 65,199, 74, 39, 92, 39, 71,103,143,206, 5,157,231, + 83,217, 83,221,167, 10,167, 22, 77, 61, 58,245,174, 46,170,107,165, 27,161,187, 68,119,191,110,167,238,152,158,190, 94,128,158, + 76,111,167,222,121,189,231,250, 28,125, 47,253, 84,253,109,250,167,245, 71, 12, 88, 6,179, 12, 36, 6,219, 12,206, 24, 60,197, + 53,113,111, 60, 29, 47,199,219,241, 81, 67, 93,195, 64, 67,165, 97,149, 97,151,225,132,145,185,209, 60,163,213, 70,141, 70, 15, +140,105,198, 92,227, 36,227,109,198,109,198,163, 38, 6, 38, 33, 38, 75, 77,234, 77,238,154, 82, 77,185,166, 41,166, 59, 76, 59, + 76,199,205,204,205,162,205,214,153, 53,155, 61, 49,215, 50,231,155,231,155,215,155,223,183, 96, 90,120, 90, 44,182,168,182,184, +101, 73,178,228, 90,166, 89,238,182,188,110,133, 90, 57, 89,165, 88, 85, 90, 93,179, 70,173,157,173, 37,214,187,173,187,167, 17, +167,185, 78,147, 78,171,158,214,103,195,176,241,182,201,182,169,183, 25,176,229,216, 6,219,174,182,109,182,125, 97,103, 98, 23, +103,183,197,174,195,238,147,189,147,125,186,125,141,253, 61, 7, 13,135,217, 14,171, 29, 90, 29,126,115,180,114, 20, 58, 86, 58, +222,154,206,156,238, 63,125,197,244,150,233, 47,103, 88,207, 16,207,216, 51,227,182, 19,203, 41,196,105,157, 83,155,211, 71,103, + 23,103,185,115,131,243,136,139,137, 75,130,203, 46,151, 62, 46,155, 27,198,221,200,189,228, 74,116,245,113, 93,225,122,210,245, +157,155,179,155,194,237,168,219,175,238, 54,238,105,238,135,220,159,204, 52,159, 41,158, 89, 51,115,208,195,200, 67,224, 81,229, +209, 63, 11,159,149, 48,107,223,172,126, 79, 67, 79,129,103,181,231, 35, 47, 99, 47,145, 87,173,215,176,183,165,119,170,247, 97, +239, 23, 62,246, 62,114,159,227, 62,227, 60, 55,222, 50,222, 89, 95,204, 55,192,183,200,183,203, 79,195,111,158, 95,133,223, 67, +127, 35,255,100,255,122,255,209, 0,167,128, 37, 1,103, 3,137,129, 65,129, 91, 2,251,248,122,124, 33,191,142, 63, 58,219,101, +246,178,217,237, 65,140,160,185, 65, 21, 65,143,130,173,130,229,193,173, 33,104,200,236,144,173, 33,247,231,152,206,145,206,105, + 14,133, 80,126,232,214,208, 7, 97,230, 97,139,195,126, 12, 39,133,135,133, 87,134, 63,142,112,136, 88, 26,209, 49,151, 53,119, +209,220, 67,115,223, 68,250, 68,150, 68,222,155,103, 49, 79, 57,175, 45, 74, 53, 42, 62,170, 46,106, 60,218, 55,186, 52,186, 63, +198, 46,102, 89,204,213, 88,157, 88, 73,108, 75, 28, 57, 46, 42,174, 54,110,108,190,223,252,237,243,135,226,157,226, 11,227,123, + 23,152, 47,200, 93,112,121,161,206,194,244,133,167, 22,169, 46, 18, 44, 58,150, 64, 76,136, 78, 56,148,240, 65, 16, 42,168, 22, +140, 37,242, 19,119, 37,142, 10,121,194, 29,194,103, 34, 47,209, 54,209,136,216, 67, 92, 42, 30, 78,242, 72, 42, 77,122,146,236, +145,188, 53,121, 36,197, 51,165, 44,229,185,132, 39,169,144,188, 76, 13, 76,221,155, 58,158, 22,154,118, 32,109, 50, 61, 58,189, + 49,131,146,145,144,113, 66,170, 33, 77,147,182,103,234,103,230,102,118,203,172,101,133,178,254,197,110,139,183, 47, 30,149, 7, +201,107,179,144,172, 5, 89, 45, 10,182, 66,166,232, 84, 90, 40,215, 42, 7,178,103,101, 87,102,191,205,137,202, 57,150,171,158, + 43,205,237,204,179,202,219,144, 55,156,239,159,255,237, 18,194, 18,225,146,182,165,134, 75, 87, 45, 29, 88,230,189,172,106, 57, +178, 60,113,121,219, 10,227, 21, 5, 43,134, 86, 6,172, 60,184,138,182, 42,109,213, 79,171,237, 87,151,174,126,189, 38,122, 77, +107,129, 94,193,202,130,193,181, 1,107,235, 11, 85, 10,229,133,125,235,220,215,237, 93, 79, 88, 47, 89,223,181, 97,250,134,157, + 27, 62, 21,137,138,174, 20,219, 23,151, 21,127,216, 40,220,120,229, 27,135,111,202,191,153,220,148,180,169,171,196,185,100,207, +102,210,102,233,230,222, 45,158, 91, 14,150,170,151,230,151, 14,110, 13,217,218,180, 13,223, 86,180,237,245,246, 69,219, 47,151, +205, 40,219,187,131,182, 67,185,163,191, 60,184,188,101,167,201,206,205, 59, 63, 84,164, 84,244, 84,250, 84, 54,238,210,221,181, + 97,215,248,110,209,238, 27,123,188,246, 52,236,213,219, 91,188,247,253, 62,201,190,219, 85, 1, 85, 77,213,102,213,101,251, 73, +251,179,247, 63,174,137,170,233,248,150,251,109, 93,173, 78,109,113,237,199, 3,210, 3,253, 7, 35, 14,182,215,185,212,213, 29, +210, 61, 84, 82,143,214, 43,235, 71, 14,199, 31,190,254,157,239,119, 45, 13, 54, 13, 85,141,156,198,226, 35,112, 68,121,228,233, +247, 9,223,247, 30, 13, 58,218,118,140,123,172,225, 7,211, 31,118, 29,103, 29, 47,106, 66,154,242,154, 70,155, 83,154,251, 91, + 98, 91,186, 79,204, 62,209,214,234,222,122,252, 71,219, 31, 15,156, 52, 60, 89,121, 74,243, 84,201,105,218,233,130,211,147,103, +242,207,140,157,149,157,125,126, 46,249,220, 96,219,162,182,123,231, 99,206,223,106, 15,111,239,186, 16,116,225,210, 69,255,139, +231, 59,188, 59,206, 92,242,184,116,242,178,219,229, 19, 87,184, 87,154,175, 58, 95,109,234,116,234, 60,254,147,211, 79,199,187, +156,187,154,174,185, 92,107,185,238,122,189,181,123,102,247,233, 27,158, 55,206,221,244,189,121,241, 22,255,214,213,158, 57, 61, +221,189,243,122,111,247,197,247,245,223, 22,221,126,114, 39,253,206,203,187,217,119, 39,238,173,188, 79,188, 95,244, 64,237, 65, +217, 67,221,135,213, 63, 91,254,220,216,239,220,127,106,192,119,160,243,209,220, 71,247, 6,133,131,207,254,145,245,143, 15, 67, + 5,143,153,143,203,134, 13,134,235,158, 56, 62, 57, 57,226, 63,114,253,233,252,167, 67,207,100,207, 38,158, 23,254,162,254,203, +174, 23, 22, 47,126,248,213,235,215,206,209,152,209,161,151,242,151,147,191,109,124,165,253,234,192,235, 25,175,219,198,194,198, + 30,190,201,120, 51, 49, 94,244, 86,251,237,193,119,220,119, 29,239,163,223, 15, 79,228,124, 32,127, 40,255,104,249,177,245, 83, +208,167,251,147, 25,147,147,255, 4, 3,152,243,252, 99, 51, 45,219, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, + 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 0, 7,116, 73, 77, 69, + 7,218, 10, 27, 9, 53, 42,196,130,109, 57, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236,189,105,180, 37,215, 85, 38,248,237, 19, + 17,247,222, 55,228, 44,101,106,176, 44, 41, 37,207,198, 42, 59,101, 83,109, 48,100,225,116, 81,134,130,102, 74,177, 76,131, 89, + 76, 82, 23, 61,153,234,182,164,234,162, 23, 85,171, 48, 88, 89, 84, 27,186,193,221,206,130, 98, 85, 1, 13,229,196, 5, 52,189, + 0,151,210, 32,176, 13,229, 65,216,198,224, 73, 82, 58, 45, 91, 67, 42,199,151,249,222,157, 34,206,217,253,227, 12,113,206,137, + 19,247,222,151,202, 76, 41,237,216, 90,111, 41,223,123,247,221, 27,195,137,243,237,253,237,111,239, 13,116,214, 89,103,157,117, +214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89, +103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214,217, 21,177, +236, 10,127, 30,153,175, 1,128,189, 66,224, 90,102, 12, 1,148,230,231,157,117,214, 89,103,157,117,214,217, 85, 96, 4, 64, 8, + 65,183,255,243,131,119,252,206, 39,127,225,187,158,249,219, 95,252,238,211, 63,247,131,175,249,131, 94, 46,246,121,175,233,172, +179,206, 58,235,172,179,206,158,231,145, 58, 1,232,253,228,155, 95,242,142, 95,248,190,151,190,117, 79, 57, 90,185,118,235,202, +210, 27,190,254, 69, 47,249,198,151, 94,123,224, 67,159,125,250,233,179,235,211, 47, 0,224, 14,220, 59,235,172,179,206, 58,235, +236,249, 13,234, 2,192,242, 55,223,178,244,189,255,112,119,245,202,209,201, 51, 40,207,158, 70, 53,154,224,197, 47,190,121,199, +247,125,227,109,223,241,249, 39,206,102,143, 60,121,254, 83, 0, 70, 29,176,119,214, 89,103,157,117,214,217,243, 59, 82,239,127, +228,248,249,167,119,109,235,189,234, 27,110,219,122, 29, 87, 12,121,225, 60,170, 11, 23,176, 99,247,238,252, 45,111,124,249, 55, + 75, 85,189,232, 67,159,121,250, 19, 0, 78,119,192,222, 89,103,157,117,214, 89,103,207, 79, 80, 7, 0, 98,198,133, 63,250,204, +218, 39, 79,140,228,174, 55,189,108,251,139, 7, 89,142,114, 52,130, 60,119, 6,232, 47,227, 77,223,240,242,151,189,234,230,109, +251,255,252,111,159, 60,190, 62,174,142,117,183,168,179,206, 58,235,172,179,206, 22,143,158,175,244,231, 13, 0,108, 3,240,130, +111,188,125,203, 15,255,230, 91,246,254,248,205, 75,249, 96, 56, 44,129, 44,131,184,225, 22, 12,110,186, 9,143, 61,121,250,252, + 61,191,252,208,207,127,224,147, 79,188, 27,192, 5,243,247,252,124,190,152,204,188, 15,192, 14,243,237, 49, 34,250,170,118, 74, +190,214,206,183,179,206, 58,235,172, 3,245,180, 9, 0, 91, 1,236,185,110,107,254,157,255,241,135,111,251,167,223,120,221,202, +117,227,145, 4,160, 64,123, 94,128,165, 23,222,138, 41, 43,252, 47,191,254,225,255,240,127,254,193,167,127, 26,192,151,205,241, + 62,107, 96,103,230,189, 0,246, 46,248,242,179, 68,244,240,130,239,251, 32,128, 3,230,219,251,137,232,129,175,114, 80,255,170, + 56, 95,227,156, 28, 48, 14,202, 62,239, 87, 15, 3, 56, 6,224, 8, 17,157,189, 4,159, 19,191, 63, 46,245, 26,108,124,230,161, +253,155, 91,235,247, 62,244, 48, 58,235,172,179,171,214,242,103, 1,202, 10,192,150, 93,171,197,215,237, 90,201,119, 41, 38, 10, + 60, 5, 2,136,136,216,254,132,236,207,221,111,115, 0,203,165,228,209, 79,253,209, 51,127,242,139,223,117,211,119,189,126,247, +202,246,105,201,192,217,211, 24, 47,175,162,216,181, 7,255,199, 61,251,223,186,239,246, 61, 47,121,219,123,254,226,237,231,214, +167, 31,186, 68,192,126, 16,192, 59, 55,177, 25, 3,192, 17, 0, 71,137,232,112,183,108,190,106, 88,134,131,230,171, 13,244,172, +195,242, 30,102, 62,108, 28,151,103, 3,238,251, 0, 60,120, 17,127,119, 20,192,155,174,200, 90, 63,180,191, 94,235,247, 62,116, +197,214, 58, 31,218, 31,178, 62,247, 62,212,177, 62,157,117,118,133, 64,157, 0,208, 74, 63,219,247,179,111,190,249,231,222,114, +199,238,253,219,150,138,158, 34,161, 1, 91, 8,253, 69, 4,202,179,224,123, 8, 1,202,178,250,123,210,191, 83, 32, 46,153, 84, +149,231, 16,222,251, 84,178,132, 26, 17,126,248, 77,175,252,250, 87,223,126,237,251,126,236, 93, 71,127,230,227, 95, 56,249,235, + 0, 38,184,242, 84,252, 65, 0, 7,153,249, 32,128,187, 46, 69,228,214,217,115,106, 31,223,228,235,239, 6,112,128,153,239,186, +216,168,249, 42, 50,189,214, 15,237,215,107,253,222,135,174,196, 90,127,167,231, 68,221, 15,224,129,110,137,118,214,217,149,139, +212,175, 61,244, 29,183,190,235, 39, 95,127,227, 27,166, 67, 5, 86,132, 76,144, 14,224,153,244, 23, 4, 72,145,134, 94, 6, 32, + 72,199,246,138,129, 12, 32, 34, 29,239, 51,144, 17, 81, 46, 40, 51, 17,177, 6,117, 6,192, 12, 69,132,201,112,138, 87,221,188, +251,218, 7,127,238,123,126,249, 39,223,253,103, 47,250,237, 63,253,194,207, 3, 56,121,137,162,118, 27, 9, 97, 78,180,230,127, +255, 32, 51,191,169, 3,246,175, 26,123,216, 68,167, 15, 19,209, 81, 19,201,239, 48,247,250,110,111, 13,236, 5,240, 94,102,190, +243, 18,221,251,195,208,244,254, 60,187,148,235,108,243,107,253,208,254, 55, 93, 33, 96,239,172,179,206,158,139, 72,189, 95,136, +189,255,248,101, 59, 94,203, 27, 37,202,241, 4, 80, 74,131,180, 99,214,109, 60, 79, 53,238,102, 2, 98,215,110, 3,238, 10, 36, + 0, 40,195,226, 19,224, 16, 94, 40, 13,252, 66, 0, 18, 90,159, 79,192,116, 82, 98, 91,175, 39,254,159,123,191,237,167, 94,251, +146,235,190,238,159,253,234,135,239,157,148,242,147,151, 2,216,137,104, 38,181,105,162,243,119,162,166,105,247,153,205,190,139, + 38,174,110, 59, 12,224,112, 42,242, 54,160,125, 4,192, 17,102,126,143,185,223, 22,216, 47,213,189, 63, 98,157,136, 43,101,116, +239, 67,179,215,186,142,206,187,181,222, 89,103, 87,169,137,139,248,155,108, 90,170,211,191,243, 55, 39, 63, 66, 98,130,149,158, +196,202, 18,176, 60, 96,243,165,234,127,247, 21, 6, 98, 10,200, 18,212, 95,214, 32,175, 20,160, 20, 92, 84, 14, 0,152, 2,106, + 12,168, 17,192, 99, 0, 19,253, 61, 79,205,235, 25,204, 10,165, 84,168, 38, 18, 63,245,189,175, 61,240,224,161,239,253,253, 91, +246,108,253, 30, 3,251,226,114, 94, 36, 34, 58, 2,157,211,244,163,149,131,221,242,185,170,237, 77, 68,116,207, 34, 84, 58, 17, +221, 19, 69,212,247,125,181, 94, 20,186,247,161,110,173,119,214,217,215, 88,164, 14, 6, 78,223,247, 7,199,127,230,143,254,246, +212,247,188,236,186,165,155, 9, 16,138, 89,153,109, 1,138, 53,100, 15,167, 74,188,250,133, 91, 94,254, 19,223,116,251,222, 65, + 62, 16, 74, 41, 32,203,116,108,173, 20,120,186, 14,202, 8,226,166, 59, 32,174,189, 29,180,245, 58,208, 96, 43, 80, 77,160, 54, + 78,130, 47, 60, 5,117,242, 11, 64, 53, 2,104, 9, 12, 9,201,128, 90,159,226, 13,175,124,225, 11,223,127,232,123,127,237, 31, +221,255,159,178, 47, 62,181,246, 62,212,226,189,203, 5,236,199,152,249,136, 23,177,237,187, 20,239,155, 80, 68, 63,124,137,148, +214,190,234,249,162,202,205, 46,197,123, 92,137,243,141,142,115,161,247,187,136, 8,249, 48,106,193,217, 14,102,222,247,213,154, + 91,167,123, 31, 58,198,135,246, 95,212, 90,231, 67,251,155,247,247, 10, 80,247,145,208,238,138,125,110,103,157,125, 53,128,186, + 4,176, 1,224,179,127,254,216,250,187,254,252,177,245, 37,164,155,216,236,122,243,171,118,255,216,247,220,121,235,245,203,162, + 39, 42,197,154,122, 31,143,193,147, 13, 64,110, 32,123,241, 27,144,223,249, 3,200,110,253,251,173, 20, 2,159, 57,142,234,177, + 15, 64,126,233,195,160,172, 7, 48,131, 9,152, 14,167,120,241, 13,187,182,253,254,191,252,175,127,229,141,111,127,239,153, 83, +107,227, 63,197,165,203,177,183,217, 37, 81,228, 26, 96,187,219, 68, 64,251, 18,191, 63,134,154, 26, 62,219,242, 30,239,244,254, +246, 8, 17, 29,246,222,247,110, 68,138,110,243,158, 15, 44,162,222,103,230,187, 77, 52,186,119,179,199,117, 57,206,119,198,185, +222,103,222,215,223,204,159,141, 82,124,150,197, 0,190,227,171,124,111, 88,120,173, 27, 32,111,191,191,135,246,215,247, 55, 2, + 90, 62,180,255,193,132,227,112, 55, 31,218,127,160,229,227,238, 55,199,118,192,124,237,107,115, 58,102,125,110,103,157,117,160, + 94,155, 2, 48, 6, 80, 65, 55,133, 49, 89,111, 87,243,206, 68,120,249, 3,223,247,226,127,241,246,253,183,236,151, 83, 96, 42, + 37,184,156,128,199, 67,160,154, 0, 57,163,255,109,255, 12,249,157,111,153, 31, 53,236,188, 5,197,206, 31,131,184,238, 85,168, + 62,246,171,128,144, 26,242,137, 48, 29,150,120,213,139,174,191,230, 93,255,100,255,161, 31,122,231,159,124, 15,128,199, 47, 51, +168,251, 27,249, 69,109, 18,204,124, 0,192,123,231,128,194, 94, 19, 21,222, 61, 67,109,109,107,171, 1,224,168, 41,209,122,207, +140,168,106, 47,116,105,214, 62, 67, 39,183,129,239,123,208, 78,183,218,227, 58,200,204,111,186,130,231,155, 58,215, 7,191, 6, +128,245,185,180,133,214,186, 1,223,197,239,239,161,253,119, 69,181,240, 7, 90, 94,191,119,198,113,221,141,197,202,244,236,231, +222,103,196,126, 93, 13,126,103, 29,168,183, 61,203,208, 51,208, 75,139,189,230,255,217,205,215, 12,190,227, 61,111,121,233, 3, +223,250,226,107, 94, 52, 25, 41, 72, 89, 2,147, 17, 80,149, 0, 49,168, 0,250,223,253,243,200, 94,249,237,238,205,206,143, 38, +120,255, 39,143,227,253,159, 58,142, 51,235, 35, 20, 25,225,101, 55,236,196,119,222,121, 59, 94,115,219,245,250,141,111,122, 45, +168,183, 5,229,135,254, 13,208,203,245, 33, 8, 66,181, 62,193, 15,190,241,149,175,254,205, 15,124,238,199,222,255,177,227,239, +192,101, 42,119, 51,128,119, 48,138, 8, 55,251, 30, 7,205, 6, 24, 71,128, 71,189,141,211,143,118,246,162, 86,218, 63, 60,103, + 3,126,175,183, 17, 30,241, 34,203,125,209,113,223,205,204,199, 90, 26,197,188, 51, 1,232,254,123, 29,244, 34,163,247, 62, 71, +231,187, 35, 2,244,179,222,241,237,189,140,207,202,129, 57,145,251,179, 89, 87,151, 60,253,242,172,142, 73, 71,222,115,215,186, + 17,213,109,254,254,134, 0,123,212, 91,167, 59, 60,150,160,141, 41, 56,155, 96, 20,142, 69,199,184,215,220,175,189,254,154,225, + 67,251,239,236,234,223, 59,235, 64,125,190, 89,202,123,219,155, 95,185,243,167, 14,223,245,146,123, 95,176,186,180, 52,218,144, + 96, 57, 1,202,137,249,164, 12, 84,109,160,248,134, 31, 15, 0,253,191, 60,242, 20,222,254, 91, 31,196,177, 83, 23, 48,232, 23, + 40,114, 1,193,192,167,190,124, 6,191,251, 87,159,195,119,220,121, 27,254,183,131,111,192,114,191,128,216,243, 82,228,175,188, + 11,213, 39,126, 29,216,178, 7, 0,235, 36, 58, 19,254,229, 91, 95,255,227,255,249,227,199,127,151, 25,127, 11,157, 34,184,212, +128,254,158, 8, 52, 14,111,242, 61,246,154,247,240, 55,163,123, 18,185,221, 7,162,232,214,126,246,157, 51,222,254, 62, 15,128, +239,137, 65,193,124,246,123,189,205,245, 62,102, 14,168,110, 67,185,223, 29,109,206,119, 69,121,116,255,216, 14, 60, 71,231,123, +159,247,126,247, 27, 17, 99,124,175, 46,135, 29,188, 12,192,155,140,112, 77, 58,226, 8,116, 58,226,138,130,144, 1,244,185,107, +221,116,170,107,222,223,123, 31,106,222,223, 48,154, 15,238,175, 85,227, 27, 26,222,174,169,195,116,239, 67, 15,204, 97, 7, 30, + 0,112,100, 86,244,205,135,246,219,136,222,255,220, 55,161,179,206, 58, 80,159, 11,232,183,190,237, 91,110,252, 87,239,124,243, + 45,255, 77,174,114, 12, 39, 37, 32,167,128,172,116, 30,157, 0,176, 4, 93,115, 19,242,215,189,213,253,241, 35, 79,159,197, 91, +127,229,253,120,102, 84, 97,121,101, 9,101,150,161, 40, 50,244, 50, 66,198, 61,144,172,240,190,143, 60,138, 76, 8,252,236, 15, +236,215, 17,251,237,255, 0,242,243,127, 2,200,117, 32, 95, 2, 8,168,166, 37, 94,125,219,238,235, 94,247,178,235,190,245, 35, +159,121,250,179,208, 41,130,133,163,117,102,190,111, 78,132, 22, 3,216, 61, 23, 33,180,122, 79, 20, 93,182,214, 58, 19,209, 81, + 67,111,219,136,116, 31, 51,223, 61, 39, 31,126,148,136,238,106,121,191, 99,204,124, 63,234,110,102,182, 6,251, 72, 2, 44,237, + 6,157,172,195,247,142,237,227,207,225,249, 30,107,123,191,203, 17,229,154,245,113,209, 14,221, 28,134, 37,101,123,205,253,184, +143,153, 47,105,251, 93, 62,180,127,243,107,189, 9,212,233,251,219,146,183,166,123, 31, 58,202,135,246,135,247,247,208,254,187, + 47,182, 99,221, 44,192,143, 94,119,216,228,213,237,186, 63,192,135,246,239,237,162,245,206, 58, 80,111, 7,116,218,185,146,191, +241,221, 7,111,251,133,239,127,213, 53,119, 76,198,192,132, 74, 64,105,170, 29,133,112,175,228,114,138,252,197,223, 4, 90,189, +198,189,193,253,191,245, 97, 60,242,149, 53, 96,219, 42,214,214, 43,128, 36, 50, 2,150, 51,194, 53, 43, 57,118, 44,229,216,182, +109, 21,191,255,209, 71,176,255, 21, 55,227,192, 29,183, 2, 89,142,108,239, 55,161,250,228,191, 7, 93,123, 11,192, 10,138, 8, +189,165, 30,190,127,255, 75, 14,124,228, 51, 79,255, 59, 0,103,176, 57, 10,126,209, 54,154,135,113, 17,181,197, 94,111,113,119, +234,243,192,135,136, 30, 54,173, 73,239,243, 54,220, 89,155,224, 61,115,222,239, 40, 51, 63,140,144, 10,181,199, 23,183, 74,125, + 96,214,241,121,199,118,247,115,116,190, 15, 92, 41,138,218,156,203, 59,163, 40,253, 82,128,186,237, 43,239, 71,154,126, 15,122, +183, 54,153,121,111,155, 14,226, 34,108,115,107, 61, 1,232, 70,105, 30,222,223, 57, 66, 52,186,247,161,135,249,208,254,205,172, +231, 75, 98,198,161,240,215,253, 65,116, 53,247,157,125, 21,219,197,212,119, 91, 81,220,234, 27,110,219,242, 79, 63,252,223,189, +226,119,191,255,101, 59,239, 24, 14, 37, 36,164, 6,116, 1, 32, 35, 80, 70,160,156, 64,153, 0,229, 4,113,195, 43,221,155,124, +241,196, 57,252,241, 39, 31, 7,150,151,116,153,155, 16, 64,150, 65, 66,224,194, 68,226,139, 39,135, 56,246,204, 16, 37, 19, 84, +150,225, 3,159,254, 82,125, 0,215,220, 14, 30,157, 7, 80,153,163, 97,160, 82,120,233, 11,118,222, 6,224,122, 92,190, 65, 53, + 7, 77, 20,185, 89,138,215,223, 0,207,110, 2, 20,142, 70,159,221, 10, 16, 11,210,180,109, 2,165, 3, 17,192, 46,114,124, 71, +158,163,243, 61,118,165,250,239,155, 20,130,223,171,253,236, 60,231,105,142,157,133, 86,111,223, 70, 68,119, 18,209, 93, 68,244, +128,247,117, 23, 17,237, 52,175,241, 65,242,110,227,120, 93, 73, 59,104, 34,234, 29,115,239,239,226, 17,247,162,235,249, 82,219, +145, 5,216,145,206, 58,251,154,140,212, 45,221,126,195,143,254,253,107,255,197,187,191,227,230,159, 40, 84,134,225, 84, 1, 25, + 3,172, 64, 12,144, 34,112, 70,134,122,215,127, 66,121, 15, 98,199, 11,221, 27, 29, 63,121, 30,163, 97, 9,108,237,215,126,130, +141,173,133, 0,152,113,110,189, 68, 57,173,240,130,109, 57, 46,140,203,250, 32,182,236, 1,144, 1,147, 33,104,105, 11, 24, 12, + 84, 21,110,221,179,101,119,191,151, 93, 55,153,202,207,110,242,188,238,159,241, 59, 95,116,179, 3,158,250,123, 19,209,226,129, + 22, 96,197, 2,209,117, 16, 53,182, 8,200, 22,101, 14,142,205, 56,199, 77,189, 87,124,108, 87,240,124,175,136,130,217, 56,110, +113,206,251,254,103, 83,155,110,254,118,145,102, 55, 15, 48,243, 81,132, 41,142,119,206,113,164, 46,223, 90,111,182,137,189,184, +251,171,163,230, 32,226,191, 20,138,116,195, 28,204, 82,204, 31,136,216,144,206, 58,235, 64,221, 70,191, 91, 6,217,235,255,245, +183,191,224,208, 61,251,174,253,134,233, 20, 24, 23,186,229, 43, 75, 6,149, 10,189,158,192,154,148,106, 9, 66, 32,207, 92, 5, + 59, 1, 0, 87,238,205,118,111, 91, 70,214, 43, 32, 21, 76,191,120, 54,160,110,254,207, 4,100, 2, 27,195, 18, 95, 26,143,209, +191,195, 59, 84,150, 0,151, 64, 53, 6,196, 86, 16, 43,176, 82,216,185, 82, 44,111, 91,238,237,120,102, 58,218, 20, 3,177, 72, +206,210,228, 85,239, 67, 61,158,243, 65,204, 22,175,161,101, 35,217,107, 70,150, 94,140,237,152, 17, 1, 62, 27,187,168, 77,218, +188,118,223, 21, 62,223,203, 14,234, 6,208, 31,140,206,227,158, 43, 57,161,207,164, 35,238, 71, 77,151,239,101,230,131,177, 48, +112,211,239,187, 64, 62,218,228,221,103,173,245,240,254,214,181,230,151,106, 61, 47, 2,228,182,180,237,190, 46,250,238,172,179, +205,129,186,165,178,139,151,238, 25,252,192,111,125,255,173, 15,188,102,247,242,238,209, 84, 1,253, 92, 3,122,169,144,151, 10, +189,165, 12,255,252, 3, 79,124,234,230,237,189,237, 63,177,239,218,155,199, 12,144,141,214,203, 18,234,212,163, 16, 55,189, 22, + 0,240,178, 27,119,225,235, 95,180, 27,127,249,217,147, 64,158,107, 16, 23, 6,208,109, 95, 56,165,255,118,124,102, 3, 47,186, +174,126,110,249,252,147,192,228, 60,120,178, 29,100, 38,198,176,178, 78, 1, 4, 46, 3,253,110,162, 39,120,155,236, 34,226,181, +212,230,181,153,249,214,207,133,157,189, 4,175,189,154,206,119, 17, 64,191,255, 57, 26,185,235,119,177,195,149,186,142,116,239, + 67, 15,152,136,186, 94,235,161,176,237, 57,189,191, 38, 50,239,250, 20,116,214,217, 69,128,186,165,219,119,223,245,247,118,190, +253,151,190,237, 5,255,227,117,131,162, 55, 84, 4, 90,214, 33, 56, 79, 21, 6,138, 49,238, 1,255,195, 31,126,233, 15, 15,127, +248,153,223,251,181,187,110,185,151,216, 48,239,153, 81,191,231, 2,124,226,111,221, 27, 11, 65,248,233,239,190, 19,223,246,153, +255, 15, 24,151, 64,191,103,166,187, 25, 80, 87, 0, 88, 1,235, 67,188,250,229, 55,226,135,190,249, 21,238,111,213, 51,159, 5, +115, 9,146, 83,253, 66,102, 8, 98,156, 89, 31,143,206, 15,167, 23, 46, 99,244,244,128,233,110,102,237, 32, 54, 47,246,153, 85, +131,123, 41, 1,247,249, 98, 87,219,249,198,128,126,248, 82,170,207, 55,185,222,206, 70,226, 70, 91,202,117,165,128,125,145,181, +126, 69,239,175,137,208,227, 62, 5,135, 13,131,115, 44, 69,231, 27,230,225,157,232,172,179,175,113, 80, 39, 0,148,103,244,226, +119,252,163, 27,126,233,237,255,213,117,223, 90, 85,192, 48, 23,160,190, 0, 43, 6,143, 36, 86,114,194,241, 73, 53,254,145,223, +252,226,175, 62,244,133,243,191, 5, 64, 61,190, 86,158, 0,241, 75,217, 69,234, 0, 6,203,144,199, 63,132,252,236,113,208,142, + 91, 0, 0,111,126,245, 45, 56,252, 79,254, 1,222,246,107, 31,196,240,220, 4, 24,244,129, 76,231,211, 49, 45,129,225, 8,175, +121,233, 30,252,238,219,191, 29, 43,131, 66, 31, 85, 57,130,252,204,251, 64,189, 62, 64, 18, 96, 5, 86, 18, 16, 2,143, 61,125, +238,228,120, 42, 79,226,242, 9,229, 0,157,115, 62,224,109,178,155,142,190,158, 43,144,120,142,236,170, 57, 95, 51,141, 45, 6, +244,123,158,227,195,122, 46, 29,185, 69,214,250,225, 69, 75,204, 46,145,221, 29, 1,122,215, 41,174,179,206, 60, 19,115, 64,125, +247, 59,191,237,198, 95,185,247, 27,174,251,214,113, 5,148,203, 57,104, 41, 3, 43, 0, 67,137,149, 65,134, 63,123,114,227,196, +254,119,127,238,103, 30,250,194,249,255, 11,192,113, 0, 79,124,254,212,248,243, 16, 4, 72, 35,122,202,132,166,216,171,117,148, + 31,122, 87,240, 33, 63,241,198, 87,224,175,126,254,251,240,182,127,252,117,184,117,103, 31, 3, 46,177, 42, 36, 94,255,162,107, +240,203, 63,249, 45,248,139,119, 28,196,173,123,182,185,215, 87, 31,251, 85,240,185,227, 64,209, 7, 27, 17, 30, 42, 9, 8,194, +231,191,114,246, 75,208,115,214,213,243,236, 58,207,107,139,121,181, 30,223,129,171,244,124,219, 0,253,238,231, 25,160, 63, 95, +237,185,188,191,190,106,254,129, 5, 1,125,111,119,203, 58,235, 34,117, 0, 55,237,232,237,255,145,175,219,249,198,233, 88, 1, +171, 5,168, 71,224, 41, 35, 27, 87,232,175,100,248,141, 79,157,254,220,127,255,187,199,255,245,249,145,252, 32,128,211,208,131, + 94, 6,127,241,216,133,143, 62,117,161,252,209,107,150,139, 92, 50,215, 69,112, 75,203, 80,143,255, 5,170, 15,255, 34,242,111, +120,155,251,156, 87,221,124, 13,222,245,163,223,132,159,255,161, 10, 79,159,217, 64,175,200,113,195,206,149,198,241,200,207,252, + 1,170,191,249, 13, 96,176,172,189, 14,145,129,165, 2, 73,133,114, 60,193,251, 62,248,216,135,161,251,209, 95, 78, 80,191,152, + 13, 34,160, 80,153,121,199,115,221, 10, 52,178, 99,222,241, 45,164, 14, 54,245,219, 87,235,249, 94, 77,128,126,177, 34,198,203, +185,214,195,251,123,104,255,142, 43, 56, 48,101,223, 69, 92,143,171,194,177,236,172,179,203, 29,169,231,183,236,236,191,104, 71, + 63, 67,165,180,186,157,135, 18,189,169, 4,245, 9,111,127,255,151,143,190,245, 55, 30,251,159,207,143,228, 7, 0,156, 0,176, + 6, 96, 10,160,124,242,220,244,163,239,251,236,217, 79, 22, 57,192, 99, 9,128, 65, 2,186, 94,125,121, 11,228,223,252, 7,148, + 71,127, 26, 60, 60, 21,124,224,160,200,113,203,158,109, 77, 64, 47, 71,144, 31,121, 55,170, 15,190, 3,212,239,129,178, 76,231, +235,139, 62, 80, 86, 40, 4,240, 95, 62,255,212,211,127,249,153, 19, 71,161,123,191, 95, 22, 80,143, 70,124,110,102, 83,137,203, +196,238,126,158,173, 3,255,248,118,152,182,173,207,102,163,124,190,159,239, 85, 1,232,166,117,111,236,124, 93,153,207,214,109, + 96,219,214,250,213,115,127,117, 75,217, 46, 82,239,172, 3,117, 0,217,103, 78,140,190,240,149,169,172,150,151, 51, 44,151, 18, +203, 25,176,158, 41,254,193,247, 30,251,237, 95,120,240,169,127, 1,224, 83, 0, 78,153, 8, 93,163,183, 30,242,114,226,151,254, +252,196,145,181, 82, 34, 47, 37, 80, 42,173,154, 51, 77,105,176,178, 5,234,177, 63,198,244,125,111,133,252,187,247,129,207, 63, +145,126, 32, 55, 78, 66, 61,118, 20,211,223,251, 81, 84,159,248,183,192, 96, 0,100,185,110, 54, 67, 4, 18, 5,104, 92, 2, 25, +227,103,127,231, 19,191, 7,224, 81,243,249,151, 28,212,189,186,101,223, 22, 42, 47, 50,101, 72,254,134,124,223,156, 72,247, 74, +219, 17,132,185,219,251, 22,184, 22,247, 93,197,231,219, 6,232, 15, 99,118, 29,247, 92,167,143,153,239,243,190, 14, 68,215,108, +179,235,205, 23,119,157,197,165,169, 83, 95, 4, 8,103,174,117,186,247,161,230,253,213,138,244,103,203, 22, 97, 1,182,232,236, +162, 17,184, 57,143, 78, 32,215,217,215,148,205,164,223, 79,175, 87, 31,251,254,223,254,226, 3,111,251,166, 61, 7,119, 45,231, +219, 62,123,106,252,149,255,251, 67,207,252,225,223, 61, 57,252,127, 1, 60, 5,224,156,137,206,125, 16,149, 0, 70,143,158, 28, +255,241, 59,254,244,233, 3,135,190,253,166, 55, 85,235, 21,144, 11, 80, 63,171, 37,108,203, 91,129,106, 13,229,135,126, 14,212, + 91, 5,237,122, 41,196,206,219,128,124, 0,168, 18,234,220,227,224,147,127, 7,140,207, 1, 69, 1,172,108,243,158, 86, 0, 74, +128, 39,132,222,170,192,191, 63,250,249,207,252,231,191,126,226,183,161,169,247,242, 50, 68,231, 7,208,156, 47,110, 85,183,139, +218, 61, 8,123,175, 63,104,198,140, 30, 93,224,243, 15, 26,176,188, 44,130, 36,163,178,126,192,219, 0, 15, 48,243,123, 82, 17, +171, 87,242,181,227,106, 61,223, 25,128,254,166,103,153, 38,216, 27,129,200,253, 94, 84,187,207,244, 58, 56, 60,175,214,220, 27, +163,235, 95,227,203,222, 26,215, 68,231,139,174,245,230,253,213, 99, 85,143, 46,240, 25, 7,141,115,240, 64, 11,168, 31,156,209, +152,230,136,119,223,238,230, 67,251,143,180, 40,222, 83,165,137,157,117,246, 53, 13,234, 37,128, 51,127,117,236,194,191,251,171, + 99, 23, 30, 4,176, 5, 58,111,254, 52, 52,213,190,110, 94, 19,183, 21,179,243,214,159,254, 55, 31,120,234, 93,175,190,105,249, +214,183,220,177,235,246,209,249, 41,104,107, 15,232, 11,221,105, 14, 12, 20, 5,168, 40,180,130,253,244,167, 80, 61,243,176,123, + 59, 18, 57,144,247,128,149,213,232,105, 5, 48,149, 96,181,132, 65,191,135,135, 31, 57,113,246,127,250,183, 31, 57,100,162,244, + 17, 46, 98, 66, 27,207,104,141, 54, 11,180, 54,179,201,154,110,105,247,160,158,108,101,129,238,168,217,248, 31,142,192,193,110, +176,251, 60,128,184,156,118, 24,225,152,204,187, 77,164,121,216, 59,182, 3,168,213,199,199,204,102,191,239,106, 59, 95,115, 94, + 41,202,248,189,155, 88, 10, 71, 46,162,118,253,128,113,152,236,168,208, 84,239,247,120, 84, 46,160,219, 0, 95, 18, 7,135, 15, +237,191,184,181, 30,229,204, 77,119,184,230,253, 61,180,255, 98,239,175,237, 11,111, 29,153,143,155, 97, 44,113,202, 33, 72, 21, +153,215, 29, 70, 61,238,213, 54,204,241, 85,242, 71,112,101,219,210,118,214,217,243, 18,212,165, 1,238,202,128,184, 48, 63,155, +152, 47,137,246,161, 41, 21,128,117,197,252,233,255,246,119,190,248,179,187, 86,242,119,252,195,219,183,221, 56, 94,155, 2, 91, + 10,208, 32,171,235,215, 53,130, 3,189,193,236, 58, 52, 6,160, 24,152, 72,168,243, 83, 44, 93,191, 7,159,125,234,236,250, 93, + 15,252,249, 3,107, 27,229, 7, 61, 39,227,114,219,195, 6,208, 55, 45, 90, 34,162,195, 94, 3,155, 29,254, 70,255, 92, 47, 4, + 19,173,223,101,162,155,189, 45,145,167, 31,185,221,133, 57,212,230,243,249,124, 19,182,217,136,238,232,179,248,172,189, 88, 60, + 15,125,248, 10, 56,116,179,215,122,139,194,220, 76, 65,187, 36,247,151,238,125,232, 44, 31,218,127, 63,194,113,174,169,198, 54, + 15, 24,150,192,127,221,221, 51,174,231, 61,230,216, 58, 80,239,236,107,194,196, 28, 24,173,160,243,229,103,161, 39,159,157, 3, + 48, 52, 63,231, 57,127, 59, 1,176,118,126, 36, 31,250,238,195, 95,248, 95,127,227, 19,167, 63, 55,232, 9, 20,231, 75,168,181, + 18, 24, 43,247, 46, 4, 2, 81,226,203,252, 7, 9, 96,170,192,231, 43,208,217, 9,150,118,108,199, 67,199,214,158,254,214,159, + 57,250, 51,199, 78,172,255, 39,115,108, 67, 92, 62,213,251, 81,179,185,222,101, 6,113, 60,155,254,223,135,161, 91,110, 30,198, + 98, 53,200, 71,204,198,116,249, 39, 90,233,161, 48,119,206,249,172,163,208, 99, 79, 31,190,218,207,247, 57, 0,200,251,177,184, +184,242, 8,116, 58,224,158, 43, 92, 57, 80,175,245,123, 31,186,115, 94,201,152,233, 50,119, 73,238,175,121,175,219, 34,118,168, +237, 51,239,194,108,225,160, 94,167, 23, 57,222,181,179,206,174, 86,163,203,252,254, 25,128,101,227, 41,191,226, 71, 94,191,251, +199,255,213,155,111,252,206, 27,183,245,242,106,194,168,114, 2, 6, 25, 40, 23, 58,114, 23,222,225, 48, 3, 18,224, 74, 1, 99, +137,172, 84, 40, 10,194,121, 9,252,220, 7,207,252,217,255,254,135,143,189,167,148,234, 99,168, 75,233,170,171,241, 6, 24, 42, + 56,142, 18,143, 65, 79, 55, 59,250, 28, 30,151,165, 75,253, 70, 31, 71, 23,156, 6,119,213,157,239,115,116,223,247,162,169, 77, +120, 24,154,110, 63,123, 85,158,151, 86,155,167,239,239,156,124,251, 37,250,188, 99, 0, 30,238,102,166,119,214,129,250,229, 5, +246, 1,128,109, 0,174,123,225,206,254,183,220,253,134,221,223,245,195,251,174,121,221, 11,182, 20, 5,152,192,204, 80, 68, 80, +222,209, 8, 6, 4,179, 46, 93, 35,224,244, 88,170,255,248,169, 51,159,126,207,135,159,249,195,191,249,242,198, 31, 1,248,138, + 97, 14, 70, 87, 43,160,119,214, 89,103,157,117,214,217,213, 6,234,246,115,122, 0, 86, 0,108, 5,112,221,206,213,252,239,189, +238,150,213,215,125,223, 29, 59, 95,123,199,141,203,215,239,232,103, 43, 43, 57,245,114, 65,162, 82,224,161, 84,211,181,169, 26, + 62,242,204,232,228,145, 79,158,249,235,191, 60,182,254,209, 39,207, 77, 31, 6,240, 4,128,243,208, 57,244,203, 86,147,222, 89, +103,157,117,214, 89,103, 29,168,207,254, 44, 1,160, 15, 77,201, 47, 67, 43,234,119, 2,216,179,220, 23,187, 6,185,216, 90,100, +212,171, 20, 87,227,138, 47, 12, 39,242, 52, 51,158,129,166,216,207, 67,231,205, 55, 48, 95,168,215, 89,103,157,117,214, 89,103, + 29,168, 95, 65,112, 47, 76,244,110,191,114,184,233,235,128,137,192, 75,243, 53, 53, 64, 94,117, 96,222, 89,103,157,117,214, 89, +103,207, 31, 80,143, 63,223,130,188,253,191, 15,234,236,253,191, 3,242,206, 58,235,172,179,206, 58,123, 30,131,250,172,227,233, + 64,188,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172, +179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, + 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,236, 50, 25,245, 86,119, 48, 0, 16, 17, +116,191, 23,219,255, 69,255,155, 26,237,105,108,131, 55,129,102,239,154,250,111,137, 8,204, 0, 17,192,204,230,253,227,215,153, +239,204,103,219,191,169,251,206,144,251, 55, 71,127, 35,132,208,191,101,175,217, 28, 9,243, 61, 64,222,123,212, 31,173, 39,194, +249, 39,101,103,183, 55, 78,133,253, 99,139, 14,135,220, 59, 39,174,232,130, 23,222,204,144,103,112,243,189, 40,124, 93,219,123, + 18,145,158, 71, 79,109, 47,240,222,151,128, 76,100, 96,102,247,153, 48,215, 79,144,112,231,102,175,159,190, 78,128, 32, 97,238, +139,242,206,221, 92, 51,161,144,101,194,188, 7, 65, 49,160,226, 38,190, 20,223,103,123,238, 0, 9,129, 60,203, 80,150,149, 62, + 38,119, 27, 9, 4,130, 16, 4, 34, 97,214, 6, 67,228,132, 34,239, 99, 60,154, 64, 41,165, 15,135,204, 25,154,255, 11, 33,244, + 26, 18, 18,130, 72,255,220,126,217,215,233, 69, 9,102,225,238, 3, 17,233, 53, 69,245,202, 17, 68, 96, 40,184,153, 65,100,214, +143, 18, 40,138, 2,211,178, 52,199, 95, 66,136, 12,138, 21, 88, 41, 40,239,139,153,161,152,145,103, 25, 20, 51, 88,169,250,115, +216, 30, 47, 39,158, 51, 66,170,255, 18,179,183,102,163,181, 64, 11,172,189,212, 90, 97,102,243,220, 1,194, 27,127,236,175, 5, +251, 21, 30, 71,248,127,127,207, 80,138,189,207,108,126,110,253,123,110,156,159,253, 25,145,192,246,237,219, 64, 68,144, 82, 97, +237,252, 26,148, 82,245,177, 49,167, 30, 89,247, 70,222, 33, 53,206, 55,213,218, 42,120, 54, 24,225,191,227,223, 53, 62, 59,190, + 62,245,103, 40, 86,193, 1, 6,215,213, 91,247,246, 61,236,185, 9,179, 70,236, 30,167, 84,165,215, 10,244, 20,203,248, 58,232, +141, 92,129, 89,130,153, 16,142,189,148,201,251, 29,158,191, 2,113,189, 19,177,208,107,208,237,169,156, 62,247, 54,179, 31, 79, +138, 27,127, 67,246, 89,186,220, 0, 71,100,206,195, 46,218,112, 83, 18,124,137, 63, 11, 8,251,162,186,139,171,241, 10,172,230, +189, 73, 56,130,124,241, 79, 7, 88,239,149,121,184, 25,144,123, 40,155,215,219,190, 72, 4,223, 19,197, 27, 16, 69,191,243, 55, +161,112, 49, 9,225,223,216,122, 1,219,159,107,204, 50, 64, 79, 77, 16,243, 23, 5,145,208, 15,136, 1, 50, 50,199,196, 6,222, +221, 57,154,247,176,199, 37,132,104,189, 70,201, 31, 11,106, 5,173, 69, 55, 82, 31,192, 45,104,251,224,219,230, 4, 36,223,143, +194,159,233, 51,166,166, 99, 96,127, 39, 8, 2,158,243, 35,234,215,178,210,191,215, 27, 7, 5, 27, 24,145,208,175,133,183,217, +129, 33,165,132, 16, 2, 82, 41, 16,132,118, 16, 68,180, 41, 70,231,154, 9, 1,134,118, 50,136, 8,121, 33,156,243,199,138,220, + 6,197, 0, 88, 73,235,175, 65,112,166, 31, 14, 33, 52, 96,219,115, 32,242, 46,156,113, 24, 72,152,177,189, 6,176,173, 67, 97, +128, 30, 68, 32,101,214,187,121, 63,138, 94,235,214,165, 93,207,208,142, 72,150, 21,168,170,202, 57, 4, 89,150,129,132, 0, 87, + 10, 62, 84,217,107,108,223, 27, 74,185, 53,103,215,185,118, 88, 18,119,187, 94,176,141,103,222,130, 36,115,232,120,211, 44, 84, +167,250, 28,156,115, 98, 16, 89,248, 27,172,231,244,196, 27,176,118, 82,244,217,213,224,175,143, 65, 8,104, 32, 49, 87, 64, 63, +195,193, 71, 39, 29,121,255,190,185,199,211,108,124, 36, 8, 85, 85,161, 40, 10,244, 7, 61,172, 84,203, 24, 14,135, 80,204,238, +152,106, 39, 30,225,166, 69,245, 14,192,201,205, 55, 1,236, 4, 16,147,219, 71,252, 45,141, 18,129,136, 3,114, 14,159, 49,187, +214, 27,255,142,252, 52,119, 15, 9,222,121,152,231,209,237, 83,236, 57, 81,153,187, 62,202, 56,154, 2, 84, 95, 96,174, 63, 81, + 31,148,104, 58, 62, 12,180, 97,169,117,160, 89,213,199,228,175, 41,237, 91,112,114,255,109,183,244,107,174, 20,160, 55,247,116, +170, 29,148,103, 97,236,240,136,163,123,154, 58, 99, 29,156,184, 21,226,157,187,221, 11, 24, 53,198, 61,219, 43,147, 55, 65,153, + 3, 96, 14, 31, 64,189,140,154,145, 55,188, 40, 27, 13,176,175,189,249, 58, 34,135, 57,121,246, 54, 27,182, 27,142,141,186,237, +118,234, 69,198, 76, 92, 3,148,219,123, 8,201,216,217,109, 80,222, 58,167, 48,218,111, 33, 26,234, 7,217, 46,110, 31, 40,105, +193,197,196,115, 54, 90, 11,170, 51,162,249,214, 13,197,121,157, 97, 52, 31,191, 86,144, 8,158, 47,231,248,136,122,211, 96,165, +191,183,215,131,201, 91,120,190, 99,102, 0, 68,218, 40,139,205,235, 21, 65,136,204, 29,181,200,132, 91,240, 58, 58,101,183, 96, +117,244,205,238,190,104,112,211,224,206,138, 33, 33,161,252,141,218,128,142,254,252, 12,101, 85,194, 71, 11, 65,169,181,138, 0, +208,235,107, 45,220,181, 35, 34,176, 57, 39,123,141,252,245,224,175,103,114, 0, 97,247, 91,189, 70,133, 32,148,101,137,162,200, + 33,149, 12, 34, 90, 86, 42,120, 47,165,148,119,188,139, 82, 58,212,186,190, 82,207, 95, 27,152,167,126, 23, 58,134,222,170,169, + 61, 4,143, 9,171,159, 23, 29, 97, 83,116,157, 20, 0,225,156, 20,123, 13, 26,123, 42,249,142, 87, 91,180, 88,191, 63, 43, 13, +201, 89,175,128, 98, 96,105,105, 9, 69, 81, 96, 56, 28, 98, 58,157,134, 15,115, 43, 72,144, 99,237,194,232,208,115,102, 45,192, + 71,142,168, 3, 47, 21,130,179,125, 31, 65, 66,131,171,183, 56,136, 73, 71,230,177, 83,192,145, 67, 76,245,251,198,192, 79, 76, + 46,138,183, 81,186,195, 15,235, 68,112,130,194, 97, 54,123,172,208,191,119, 0, 33, 67,208,225, 57, 43,142,168,225,152, 94, 12, + 32, 19, 35,201,246, 94,110, 64,119,247,141, 98,122, 85,175,233,139, 5,244, 96,253, 48,106, 64, 33,239, 71, 62,190,248, 14,162, + 69, 51, 10, 89, 96,231,152,138, 26, 19, 23,243, 42, 4,124,250, 68,239,119, 10,164, 65, 61,166, 65,200,219, 24,107,148, 99,142, + 35,243,217,116,161,207,114,251, 52,157,125,127,246, 60, 65, 23,113,120, 84,150,240,168,120, 10, 64,158, 2,240, 50,206,101,243, + 16,136,218,247, 70,138,192, 46,112,110, 41,160,159,231, 70, 64, 30,149, 62,107, 79,110, 80,237,132, 77,131,121, 68,132,180, 30, +151, 5,224, 89, 17, 63,123, 81,174,141,212,172,195,100,169,111,187,177, 43,102, 8, 33,116, 68, 46, 37,178, 44, 11,162,100, 27, +253, 82, 12, 56, 36,244, 86, 69, 38,130, 53, 0,207,164, 35, 61,159, 98, 39, 34, 32, 51,199,165,148,159, 60,177, 8, 13, 41, 43, +183,102, 40,113,145,125,234,152,124,234, 61, 90, 15,254,250, 38,147,122, 72, 51, 33,220, 88, 70, 89,150,161, 42, 43,119,205,132, +208,235, 82, 41,233,162, 32, 21,208,141,245,245, 14, 29,133, 89, 27, 18,181, 4,218,225, 6, 73, 66, 4, 14, 78, 0,194, 20, 62, +199,241, 80, 5,170,147, 10,205, 3,178, 15,171, 23, 1, 58, 32, 19, 62, 37,108,163,118,225, 40, 93,125, 15,244,187,251,207,119, +189, 46, 40,216, 67,244,181, 82,173,155,231,104, 56,194,120, 60,193,242,210,146,142, 66,242, 28, 75, 75, 75, 32, 33, 48, 25,143, + 29,235, 96,239,119,176,151, 49, 7, 32, 22, 48,123,194,166, 96,234, 96,193, 50,124, 22,228,125, 0,246,119, 91,197, 74,191, 46, +136, 98,252, 44, 13,213, 25, 74,110, 18, 18,100,118,111,206,204,243,192, 92,179, 91,198,145,209,159, 89,239, 3,204,170, 94, 27, + 44,235,251, 25,165, 72,124,135,197, 94,115,197,213,124,144,242, 93, 14,111, 55,180,174, 79, 0, 0, 32, 0, 73, 68, 65, 84,239, +155,149, 16,154, 23,177, 83, 2,196, 47, 39,160,251,235,221,165, 60,136, 46,217,251, 54,206,141, 91,168,246,248, 92, 91, 48,179, + 94,183,155,204,221,122, 59,185,117, 50,253, 67,204,253,168, 36,240,164,133,119, 35,185,246,172,227,123,226,232, 6, 47,202,117, + 0,230, 45, 76,231,201, 8,114,185,208, 24,132,236, 67, 36, 32,220,193,182, 81,208, 13,118,135,154, 17,118,224, 93,219,168, 27, + 92, 3,122, 76, 81,123,153, 5, 63,255,203, 51,252,167, 89, 0, 26, 71,227, 51,129, 54, 62,254, 89,249,241,248,250,121,212,253, +172, 60,127,112, 93,218, 34, 61,151, 91, 55, 15,183, 1, 95, 86, 74,211,158,142,126, 34,143,114,212, 14, 35, 19,160, 12,197,108, +157, 5, 65, 4, 22,153,142,100,221,161, 8, 48,235,124, 53, 75,128,136, 77,110, 94, 59, 16,236,229,221,107, 90,145,155,231, 29, +252, 59, 62,105, 17, 48, 51,173,121,232,134,158,129,195,205,220, 57,120,181,211, 2,232,115,148, 74,154,124, 47,160, 20, 60,138, +154, 19, 27, 39, 45,240,208,198,172, 67, 2,200,253, 72,218, 7,222,232,243,194,245,225,165,168,216, 37,164, 32,168, 62, 55,110, +210,108, 81, 90, 7,206,105,240,129,157, 57,157, 6,176, 65, 64,124, 94,241,181,137, 99,147, 48,237,192, 80,138, 33,160, 48, 28, + 14,177,125,251,118,167, 85, 88, 26, 12, 0, 6,166,211,137,102,118,136, 64,126, 36,225, 40, 77, 74, 78,137,106, 48, 81, 92,179, +128,196, 84,131,172, 97,233,124,135, 60, 0,141, 84,142,157, 17,210,251, 49,237,110,157, 8,239,115,236,103, 40,161,188,247, 99, +199,118, 1,181, 99,164,217, 77,119,128,115,162, 59, 54,247, 93, 69,193, 22, 69, 65,149, 57, 87,166, 25,239,196, 11,229,196,103, +129,253,229,206,165,251,193, 74, 20, 77,206,202, 6,180, 30, 39,181, 60, 95,230,225, 89, 44,227,192, 28,176, 37, 62,208, 51,217, +200,116,113,198,206,173, 31,162,228,222,151,135, 81, 78, 45, 26, 83, 6,193,195,168,157,147, 84,187, 59,110,242, 41,132, 38,120, +199,148,180, 32,161,189, 94, 75,237,250, 15, 15,207,167, 41, 45,133,204,224,134,216, 77,152,200, 62,184,201, 45, 81,114,107,196, + 27,209,109,243,168,238, 36, 8,207,163,234,253,168,156, 82,140,195,108,166, 64,204, 89, 16, 41, 17, 96,173, 57,104, 1,127,227, +249,177,239,236,176,247,124,184, 13,180,222,244,200,172, 25,106,220,108, 29,173,147,183,217,250,209,159, 91,111, 74, 65, 26, 64, + 36,179, 30,237,251,249,192,210, 30,209, 82,152, 27,228, 26,128,219,238, 65, 13,214,236, 57,158, 42,120, 55,101, 4, 75,150,126, +174,164, 4, 67, 26, 42, 77,255,157,146, 58,226,210,128,174,188,252,100,155, 3,181,104,116, 78, 51, 35, 5, 74,109,164,209,166, +154,118,222, 40, 65, 81,133,105,176, 24,228,201, 3, 15, 14, 88, 26, 56, 96,119,209,124, 38, 32, 64, 80, 81,176,228,221,250,136, +106,231, 86,102,194,143, 64,167,211, 41,152, 25,101, 85,129, 25,216,178,101, 21,103,207,150, 94, 78,146, 12,181,202,128, 16,176, + 7,192,190,254, 2, 65, 54, 46, 4, 44,110,110,204,254,115,217, 10, 70,212, 30, 96,128,195,245,230, 3,163,141,248,225,114,255, + 28,105, 96, 80,167, 43,163,103,202,166,200, 50, 81, 59, 48,142, 35,177,194, 85,165, 92, 32,211, 78,161,123,108,138,221,115, 69, + 27,240, 54, 29,204,103, 67,207, 95,202, 8, 61, 22,114,194,207,255,115,184, 23,182, 57, 27,254,177,199, 14, 79, 35,237, 73, 45, + 44,128,151, 26,113,175,143,252, 10,248,226,189, 69, 19,248,158,230, 68,127, 41, 52,229,227,250, 30,229,241,102,226,148,145,230, +160,153,211,121,118,120,155, 62, 37, 46, 20, 81, 83, 80,230, 40,243, 54,213,183, 31,233, 19, 55,189,158,132,248,171,241,190,204, +193, 67, 90, 11, 79, 16,230,215,103,128,120,176,161, 50,205,166,195, 83,209,240, 28, 38,101, 94,116,239, 31,243,166, 41,255, 56, +234, 78,129, 68, 27,128,120,155,145,151,217,180, 72, 17, 56,167,181,216, 75, 36,222,223,219,231, 60,160,142,243,181,174, 70,193, +167,219,237,123, 8, 1, 82, 10, 51,106, 38,102, 68,233, 62,123, 76, 30,168,112, 2, 36,185,214,103, 36,116, 16,194, 59,102, 70, +205, 68, 72, 41, 27, 2, 50, 77, 37,207,185,239, 52,159,102,111,103, 35, 40, 25, 69,251,142,182,160,136,130,159, 25,195,121,233, + 52,127,243,178,231,203,188, 80, 4, 22, 30, 51, 65, 73, 43, 8,172,213,236,179,175,139, 8,171, 88,146, 14,144,214, 47, 16, 17, +138, 60,119,223, 95,179,107, 23, 78,157, 62, 13, 41,165,183, 47, 81, 82, 43, 96,117, 14,100,153,166, 84,148, 75,233, 61,135,136, +106, 17, 29,107, 54,177,166,198,117, 74,201,230,200, 93,190,221, 87,189, 91,188,132, 8, 85,239, 20, 69,246,236, 3,124, 74,228, +166, 60,118,188, 86,202,135,153, 71,114, 78, 78,234,122, 42, 21, 75, 17, 56,208,161,132,142,161, 10, 46, 12,207,212, 47,180,131, +251,165, 6,250, 58,229,195, 73,231, 53,229, 12,115, 35, 72, 69,144,186,240,127,231,239, 21,126,218, 55, 20,179,209,204,208, 63, +245,121,202,165, 81, 22,207,223,215,123, 6,207, 23, 4,176, 19,202, 37,220, 75, 67,155, 91,177, 65, 40, 2,160, 96, 67, 20,134, +183,142,115,222, 54, 79,101,127,238,131, 13,113, 24, 65, 6, 30, 80, 76, 51, 44,144,131,118,212,189, 87,158, 21,208,237, 20, 58, + 19,109,212,122, 3, 44,219,162,114, 63, 7,207, 88, 88, 5,159, 42, 93,139, 83, 4,201,197,217, 86, 74, 71, 17, 16,209,226,224, +159,100, 2, 8,201,133,237, 23, 15, 32,222, 52,108, 57,153,253,121,228,237, 6,251,154, 16,158,150,220,172, 26, 19, 73,133, 4, + 5, 45, 38, 37,163, 88,128,229,234,104,188,107, 33, 90,114, 89,202,219,248, 68,189, 18,130, 28,112,211,115,112,127,207, 66,111, +228,108,162,162,121,105, 26,106,163,217,169, 93, 33,238,235, 2,146, 64, 77, 77, 26,142,224,174,103,204, 26, 4,212, 98,228, 24, +113, 4,236, 46, 2,138, 64,177,205,148,170, 85,241,204, 58,165, 98,193,118, 22,237, 42, 4,185,244, 69,251,198,204,168,170, 10, +131,193, 0, 68, 2,211,105, 9, 33, 8,211,233, 20, 91,182,108,193,218,218, 90, 8, 30, 81, 62,191,177,241,123, 41, 21, 54,107, + 87,153,168,138,137, 27,229,103,193, 62, 21,129,113, 64,229,115,147,125,115, 64, 78,181,104,212,127,102,157,104,212,110,216,202, +127, 56,125, 6,193, 87, 67,168,186,172, 45,206,173, 71,223,187,245, 79,106,102, 42,145, 1, 64,122,229,155, 20,209, 16,162,198, + 6,226,205, 1,117, 12,162,151, 42,199, 93,151,132, 82,210,113,143,215, 93,252,218, 24,116, 83,107,133,227,188,183,171,194,178, +169,105, 0,170, 89, 77,225,222, 43, 19,224,186, 78,112,161, 12, 64, 45, 52,181,247,187, 13, 3,189,252,183,249,144, 28, 94,164, +237,111,142, 60, 47,159, 76,205, 50, 14, 75,121,199,209, 52, 69, 98,161,152,154, 74, 41,203,173,163,144, 44, 95,139, 84,132, 65, +206,148, 67, 37,169, 32,145,124,125, 43, 5, 30, 69,174,238, 33, 76,228, 76,156,114,157, 90, 34,109, 44, 64,211, 99, 70,142, 59, + 5,214,137,243,104,165,216,103,212,175, 39, 63, 51, 12, 42,130, 40,149,146,185,229, 68, 14, 22,161,138,211,122,253, 86,193, 30, + 70,110,156,160,236,227,252, 29,121,121, 65,118,255,142,246,230, 40, 69, 68,152, 25,198,183,121,211, 9,138,223,239,107,160,148, +114,117,233,246,111,109, 14, 61,174,253, 13, 63,214,143,208, 69, 3,208,230,173, 3, 74,106, 9,234,115,173,129,212,139,196, 34, +167,108,158,195, 17,246,135, 72, 28,143, 86,193,205, 4,118,219,179,192,239, 59, 97, 21,243,179, 54,242,250, 56, 69, 67, 52, 23, + 59, 13,227,201, 4, 75,131, 37,172, 44, 47, 99, 56, 26, 66, 8,129,178, 44,177,178,178,130,141,141, 97,227, 92,131,205,218, 3, +113,112, 51,202, 21, 68, 80,190,115,173,162,210,181,196, 26, 13,246, 64, 31,232,226,168,219,171, 60, 1, 71,149, 60,246,250, 68, +207, 56,155,181, 30,234,153,244,102, 79,243,210,185,113,206,163,113,173,145,174, 86,162,102,254,124, 86, 66,122,145, 28,185,191, +135,251,162, 73, 53, 99, 45,181,189,175,171,208, 73, 69,193,158,158,167,205,129,104, 68,225,137,235, 51, 47, 93,102, 75,124,155, +191,227,228,251,251, 66,249,246,135, 64,120, 94,161,106,222,151, 54, 58, 73, 53, 25,191,220,145, 60, 9,170,206,170,208,107,102, +168,174,109, 14,114,204,179, 34,218, 68, 34,208, 47, 17,139, 35,246,216, 91, 74, 46, 24, 74,231,186,252,252,175, 5, 58, 39,194, + 99,110,148, 19, 36,243,203,228, 69,206,220,210,152,102, 78, 51,152, 36, 85,159,106, 92, 67,115,156, 11,106, 97, 37,136,103, 59, + 14, 52,163,153,205,156, 90,102, 49, 35,101, 72, 17, 21, 29, 31, 34, 27,119,144, 60, 79,182,246,166,235, 8,210,169,163,253, 8, +201, 81,156, 81,238, 51, 46,133,156,177,190, 56, 69,109,121,145, 11, 37,122, 18,136, 68,105, 23,121,231,104, 35, 1, 63,170,179, + 15,161, 10, 24, 9, 32,238,207,144,162,153, 23, 1,115,138,156,169,148,106,156, 40, 93,165, 82, 71,190, 28, 53,182, 73,169,111, +195,205,186,237,121,243,233,234, 32, 87,205, 60,195, 81, 18,144,210, 54,218,145,206,113, 72,231, 96, 99, 42, 94,181,198,146, 74, + 74,140,199, 35,112, 95, 55, 62, 34, 18,144, 74, 34,207, 50, 44, 47, 47, 97, 52, 26,153,231,183,241,192, 65,248,249,107, 86,181, +200,207, 83, 0, 7,155,178,168,115,205, 65, 90,206,103, 2,189,189,135, 41,140,214,226, 38, 79,245,103,115,114,111,112,202,247, +160, 9,148, 10, 74, 43,245,207,172,172, 94, 5,247,149, 27, 28,170,140, 72, 42,246,122, 18,132,101,133, 92,119, 92,242,210,160, + 33, 61, 31,151,210,205,218, 75, 82,224,200, 73,165,254,124,234, 62,249, 30, 70,112, 45,184,233, 44, 44,234, 32,164,211,113,222, +239, 4,205,208,227, 40,253, 60, 43, 14, 88, 46,246,174,161, 34, 64,139, 30,226,158, 44,169,205, 65,121, 1,204,252,138, 43, 40, +209, 2, 70,140, 60, 4,227,168, 30, 51,200,164, 80, 64,109,183,229,101, 45,120, 6, 13, 79, 18,205, 86,102, 1,100,208,213,172, +133,186, 9,212,168,162,217,120, 37, 80,184, 51, 26,245,214, 41,182, 33, 86,185,206, 4,240, 54,197, 58, 45, 16,137, 83, 58,109, + 16, 95,171, 54,154,156,102,136,170, 82, 12, 6, 40,113, 41, 90,232,245, 20,253, 59,135, 99,104, 80,182,118,195,168, 21,204, 42, +202,219, 82, 45,182,243,128,149,147,174, 49,205, 0,201,212,226,111,209, 25, 8,145,206,179, 69, 90, 0, 36,202,192, 92,255, 68, + 83,210,231,180, 38,198, 97,136,115, 95,179,238,255,162, 57,243, 48,229, 33, 2,175,157,104,142, 51, 96, 54,145, 90,252,155, 86, +158,135,209, 26,183, 36,148,185,225, 28, 53,158, 4, 39,150,211,224, 47,188,158, 6,204,170,118,140,144,254, 91,191,251, 92,125, +190, 28,168,234,253,104,158,136,156,104,174,223,239, 67, 86, 21,164,148, 24,244,251,186,179,159, 82,238, 90, 9,211,127,161,215, + 43,176,101,235, 54, 8,202,176,115,231, 14,156, 57,123, 22,231,207, 95, 0, 88, 66,144,192,133,225, 58,136, 8,213,180,132, 82, +181,198,194,138,205,132, 18, 33,141, 75,158,176,204, 11, 46, 72, 80,163,174, 61,153, 91,142, 58,214,197,251,131,253, 60,246,115, +231, 30,195,213,230, 21,197,255,106,211, 59, 89,102,201, 15,232,131,117, 28,172, 53,242,170, 38, 22,163,207,219,214,220,102,254, + 62,222,255, 93,160, 23, 97, 69, 10,208, 83, 34,183, 69, 24,187,176,143, 69,219,126,231, 57,243, 8, 3, 69,182,187,120,178, 50, + 39, 85,237,225, 87,165,242, 66,199,154,174,165,171,111,102, 78,145, 95,233, 71,139,228,229,210, 41,168, 75, 67, 83,241, 9,143, +146,246,246,135,152,146,231,116,191,157,217,185, 30,207,235, 75,169,189,131, 28,161,109,163, 41, 40,240,120,125, 49, 29,154,210, +128,153, 45, 87,227,102, 50,190, 3, 48,235, 6, 52,162,124, 74, 68,245, 41, 49,134,207, 24, 48,207, 84,192, 7,215,131,102, 83, +242, 62, 27, 67,152,211,176,100,193, 84, 1,181,230,130, 82, 64, 17, 58,142, 8,250, 32,176,151, 7,197, 66, 34,133,153,139,159, +107,142,146, 90,245, 13, 17,224, 10,209,160,250,124, 49,160, 48, 17,171,226,122, 99, 97,197, 51, 29, 30,255,129,110, 3,116, 63, + 50,247,157, 28,159,153, 8, 34,123,226,166, 16, 53,225,240,164, 64, 63, 37,114,243,113,161, 6,212, 52,221,202,169,243, 35,160, +232, 21, 40,138, 1,178, 76,171,212,101, 37,161,164, 68,158,103,238, 51,157,152,109,177,204,105, 99, 99,180,223, 75,169,144,231, + 57,152, 37,170,178, 68, 94,244, 32,136, 48,153, 78,177,235,154,107, 0, 16,178, 76,119,163, 19, 89,129, 23,190,224, 38, 92,119, +253,245,248,202,147, 79, 98, 60, 30,226,228,169, 83, 56,117,250, 52,150,150,151,177,188,180, 21,121, 70, 88, 94, 93, 69,127,105, + 9, 85, 89, 2,138,177,188,178,140,141,245, 13,172,173,157,195,112,180,129,241,120, 92,231,190, 81,183, 76, 22,130,116,245, 67, +162,220, 43,208,201,216,253, 16, 34, 0,115, 63,122,247, 59,212, 49, 24, 97,156,224,165, 72, 92, 23,179,176, 17, 72,168,131, 16, + 94, 84,174, 16,118,166,243,247, 32,170, 43, 62,226, 14,105, 30,187, 41,156,182,138, 27, 65, 86, 27, 88,207,162,185, 23,165,238, +147,142,113, 45, 36, 72,138,117,219,156,129,133, 89, 1,209,210,213,141,189,246,227,246,249,179, 44,158,168,197,115, 77,134, 2, +141,102, 76,126, 87,200,214, 22,207,126,131,153,182, 61,209,246,238,245,188, 11, 90,217,113, 45, 59,111,120, 51,197,239,137,206, + 56,169,238,104, 49, 96,251, 96,232, 55,122, 8,162,111, 15, 96,107,239,140,147,117,218,238,115, 61,202, 61, 19, 89,240,128, 36, + 65,145, 19,169,128,248, 88, 91,132,109,141,221, 45,161,124,143,181, 3,254, 57,199, 14, 78,107,165, 0,205,246, 98, 69, 84, 54, +213, 38,182, 75,229,100,121, 86,204,157,200, 49,251,157,212, 40,200,117,135, 93,186,234,197, 26,230,185, 83,249,102,110, 21,219, + 48, 68,150, 37, 1,115, 30,205, 29, 80,220,153,201,193,123, 15,189,136,155,178,248,255,142,162,121, 97,114,200,182, 13,174,205, +161,171,202, 68,113, 82, 66, 74, 21,156, 95,171,243, 37,218,218,252,166,154,196, 80, 16,149, 55,192, 95, 40,147, 22, 19, 72,213, + 27,183,109,108,179, 40,205,102, 63,240, 16,216, 29, 35,225, 34, 35,225,162, 96, 16,161,146,166,202,129,253, 46,104,228, 20,219, + 58,183, 62, 59, 95,190,120,228,166,175, 77, 86,228, 80, 92, 33,163, 12,215, 92,123, 29,182,108,221,134,167,159,250, 10,134,195, + 33, 50, 34, 20,189, 30,174,187,254, 6, 84,149,196,169,147, 39, 48,153, 76,177,178,117, 21,163,141, 33, 84, 37,145,231, 57,134, +163, 33,138, 94,134, 34,235, 65, 26,205, 4,152,177,180,188,140, 44, 47,192, 74, 97, 84, 78,177,101,117, 5,107,103,206, 98, 99, + 56, 68, 85, 86, 40,171, 18, 43, 43, 75,200, 51,194,250,250, 8,211,105, 21,212,174,219, 60, 57,251,209, 45, 39,174,121,156,139, +247, 41,122, 54,106,105,239,254, 48,235,186,125,178, 41, 16,192,233, 28, 26,165,136,174, 91,153,108,191,222,156, 1, 36, 35,140, +152,177, 78,226,178,187, 5,104,244,121,249,243, 77, 1,250, 12,241,227, 60, 16,231,132,120, 50, 21,132,181,150,234,207, 18,159, + 11,225, 1,107,170,181,179,128,237,187,224, 71,232, 51,169,118,149, 37, 18, 43,254,141,170, 65,157, 32, 28,197, 66, 43, 59,119, +115, 88, 23, 57,231,161,138,163, 91, 90, 44,226,246,163, 93,191, 1,140, 15,218,201,252,112, 27, 21, 29,129,173, 77, 13, 8, 18, +161,151,220, 2,198,241,103,166,234,218, 27, 2,187, 68, 78, 62, 88, 76,169, 94,231,168,157,135,100, 77,249, 12,186,188,221, 83, +165,153,175,167, 86,218,191,217, 86, 51,149,191,141,155,191,112,152,154,116, 63,171,187,135, 49, 82,204,108,122,177, 54,179,241, + 97,186, 69,175,244,204,163, 81,237,103,113,171,216,196,203, 55, 83, 93, 55,111,235,200,253, 13,193, 23,255,137,168,129,139,136, + 58,227,217,115, 82, 74, 71,134,101, 85, 66, 73, 9, 54,249,172,178,172, 22, 16, 9,205,136,210,163,200,220,143, 80,173,247, 30, + 59, 32, 74, 41, 8, 97,159, 1,145,188,142,109, 52,232,124, 80,231,232,245,222,251, 82, 68,243,122,175, 15,157, 2, 14,214, 71, + 74,125,220, 14, 0,233,215,248,105,132,224,122, 10,129,222,210, 50,110,186,225,133, 56,123,246, 36, 46, 92,184,128,233,100,162, + 95, 35,114,220,124,203,205, 24,141, 70,232,247, 10, 76,171, 10,196,192,211, 39,158, 66, 53, 41, 77,174,218,164, 21,115, 1,150, +202,116, 56, 4,122,253, 62,148,172, 0, 18,232,245, 7,174, 7, 61, 25,165,115,175, 63,192,198,198, 16,189,158, 64, 47, 39,172, +175, 15,113,230,220,133,160,241,144, 31,113, 7,209,247,140,225, 48,141, 0,199,190, 86, 41,212,237,119, 1, 40,233, 82, 87, 65, +122,164,109, 0, 79, 4,234,129, 51,205, 34, 20,102,113,248, 94, 94, 94, 42, 44, 51, 86,179, 35,239,152,250,190, 88, 80,111, 99, + 5, 22, 97,161, 26, 63,143,246,191, 36,240,207,144,237, 16, 55, 3, 89,183, 47,138,217,170,118, 55, 11,193,246, 20,136,250,190, + 36,121, 79, 37,194, 15, 39,246,162,119, 89,179, 2,110,138,140,167,126,159, 11,230, 94,135,173,182, 26,234,128,222,110, 14,123, + 75, 71,161,190,160,141,103, 40,212, 35,170, 63,142,136, 83,221,223, 26,116, 59,133,169, 8, 66,179, 41,129, 19,205, 81, 43,223, +152,164,239, 83, 96,110, 85,175,130, 68,250,239, 98,229,255,140,220,125,107, 74,128, 98,214, 40,108,153,153, 26,112,129,182,134, + 38, 13,202,221,143,220, 60,225,155,185,191, 58,168, 13,203, 32,125, 16,106, 52,114,242, 4, 57,212,104,230,225,171,184,169, 45, + 93, 56, 99, 48,136,151,175, 22, 28, 62, 44,222,250, 16, 81, 55, 54, 27,157,147,151, 91, 39,138, 41, 77, 97,162,174,218,181, 22, +166, 85,236, 34,170,223,152, 6,247, 91,234,214, 14, 68,216,235,216,130,161, 15,230,246,251, 44,203, 54,151,134, 8,142,165, 25, + 93,205, 18, 11,217,141, 71, 49, 59, 6,208,246, 29,128, 81,182, 47, 47, 45, 97, 60, 30, 59, 7,167, 57, 4,164, 89, 51,223,222, +137,204,167, 47, 57, 29,237,120,215,163,215,239, 97,231,174,107,177, 49,186,128,243, 23,214, 81,244, 10, 76,167, 35, 32, 47,112, +231,190,215,225,145, 71, 30,193,198,133, 53, 76, 39, 99,147, 39, 39,108,223,182, 21,211, 92,215,187, 87, 85,133,201,100, 10, 89, + 85,200,243, 2, 69,145, 67, 41,133,170,146,134, 1, 81, 40,167, 19, 61, 84, 38,207, 33,242, 2,204,140,201,116,138,229, 45, 43, + 96, 41, 81,202, 10,253,193, 50,182,109, 21,216,216, 88,199,180, 44,155, 44,160,151,131, 79, 13,139, 73,149,207,113,114, 16,139, +107, 18, 1,169, 52,175,154,177,116,141,194,220,118, 53,163, 39,126, 83,164,167,230, 50, 35, 76,161,179, 70,220,174, 28,159,231, + 76,110, 54,175,158, 90,195, 41,112,159,215, 83,193,229,200, 93,119,165, 40,122, 79,237,193, 28, 6,197,169,227, 83, 11, 14, 97, +113, 76,141,237, 8, 76,113,137,165,104,167, 8, 72,213, 41, 55,119,191,132, 71,209, 71,186,166,149, 93,123, 2, 76,242,133, 30, +141, 28,249,162,158, 21, 47,184,217, 36, 6,168,196,130,181, 89, 66,180, 20, 96,198, 57,239, 25, 25,187,185,138,125,119, 45,226, + 8, 61,170,229,110,116,156, 75,177, 9,109, 76, 3,165, 83, 20,109,239,145,140,204, 83, 57,240, 72,232, 21,215, 57,115,242,239, + 3,229, 31, 16,140,211,164, 0,168, 98,145, 77, 76, 41,205,123,128,181,247,158, 22, 68, 50, 43,237,249,206, 25,223, 89,119, 64, + 84,176, 26,206, 24,180,125,135,199,122,212,118, 68,107,252, 26, 11,152,129, 16, 71,233, 93, 77,177, 4, 67, 65, 73, 9, 65, 5, +198,227,113, 99,188,104,144, 1,165, 4,160, 6, 53,231,126, 36, 78,141,118,182, 41,225, 79, 27, 56,199,235,112,214, 38,218,168, +217,245,206, 55, 30, 23, 27, 15,206,177,159, 93, 85,186,151,120,175,215,115,130, 53,203,104,196,247, 43,238,253, 30, 56, 6,115, + 55,133,144,213, 16,148,185, 25, 4,123,110,184, 17,219,182,239,128, 42, 75,244,151, 6, 56,125,234, 36, 78,158,120, 18,149, 82, +184,233,166, 91,113,238,220, 25,156,122,230, 25,211,147,159,221,253,117,211,251,160,167,235,217,161, 60,138, 25,229,116, 90,207, + 3, 96,219,177,139, 80,244,251,238, 88,150,151,151,161,192, 96, 2,166,147, 18,170,172,251,170, 91,253,192,112, 56,196,198,112, +216,140,214, 61, 13, 70, 64,205,155,159,197,244,189, 11, 24, 76,115, 35,191, 42,192, 70,125, 25, 98,118,160, 22,111, 58,157, 74, + 22, 94,111,235,224, 4,128,163, 92, 13, 94, 19,212, 69,232, 35, 80,203,232,218,121,249,106,155,255,158, 23,181,207,162,206, 23, +117, 98,147,145,190, 15,220,146,219,127, 55,219,223, 9,153, 51,154, 13,142,245,250,247,232,251,148,170,126, 22,168, 11,229,158, +137,184, 2,136,144,193,111,147, 64, 68, 9, 80,167, 25,165, 80,158,119,217,230, 25, 45, 76,161,167,114,207,240, 58, 52, 49, 47, + 68, 69, 11, 33,154,127,223, 18, 57,207,141,128, 61,246, 32,200, 79, 71,140,113, 80, 38, 7,175, 77,237, 44,161, 29, 53,157,151, +182,168, 60,213,193,104,230,226,138, 19,213, 45, 32, 95, 51,105,148,160,224,169,209,105,173, 57,128, 36,245, 80,241,220,252,151, + 31,241,107, 74,221, 23,237,164, 59, 18, 2,105,239,187, 89,255, 77, 30,128,192, 13, 72,166,148,232,204,246,164, 71,230, 84,212, +100,138,126,137,236,112, 22,191, 27, 94,125,254, 82, 85,102,147,215,117,234,186, 86,157, 90,175, 65, 28,149, 91,103,194, 94,107, +155, 99, 79, 53,191, 72, 69,232,228, 13,144,177, 77,126,226,102, 49,156,160,198, 83,160,238, 3,191, 82,108, 64,154,107, 48,135, +214,165,216,233,121,246,254, 75, 41,161,148,116, 78,136, 16, 2, 83,211,229,141,221, 96, 22, 63,175,137, 0,204,201,164, 85,170, +170, 92,128,142,167, 90,245, 47,204,241,228, 57,182,109,221,134, 91,247,222,134,193, 96, 25,131,165, 1, 78, 60,253, 20, 30,125, +236, 11, 40,178, 30, 20, 41, 84,147,137,115, 26, 54, 54, 54, 32, 85, 13,206, 68, 2,215,238,217, 3,176,194,112, 99, 8, 41, 43, +148,229, 24,204,140,170, 98,243, 90,125,156,121,150,185, 97, 51, 34, 39, 44,245,151,161,148,194,116, 90,162,223,239, 97,108, 62, +199, 58, 67,214, 97, 40,138,220,213,206,175,111,108,232,117, 98,102, 26,184,177,166,155, 0,117,176,242,242,233,186,233, 12, 27, +186, 85, 63, 71,250,247,118,223,103,165, 18,205,103,108, 10, 69,185,176,211, 42,252,253,213,227,162, 73, 59,122,149, 26,147,108, +176,153,185,160,177,163,153,114,242,103,129,124,208,103,221, 58,235,188,185,177, 39,109,123,147, 5, 99,231, 76, 51,230, 8, 79, + 41, 84,223, 47,216,230,213,119,220,103,237, 21, 13, 80, 23, 10,196,134,149, 19,222, 84, 32, 22,105,125,145,247, 86,249, 44,224, + 12,242,205,137, 81,156,126,116, 74, 11,135,242,209,185, 69, 19, 95, 73, 16, 88,182,139,238, 82, 27,158,238,216,232,149,166,113, +186, 29, 45,181, 37,159,185,121,189,103, 57, 55,177,242,189,173,156,173,161, 21,152,145,123,111,188, 95,196, 34,180, 70,226,145, +168, 45,206,145, 39,187,236,250, 20,125,227, 33,244, 65, 53, 92, 56,254,239, 99,149,122,243,231, 28, 53,186,240,156, 48,168,128, +166,111, 52, 62, 98, 53,119, 68,100, 42, 58,246,175,179,136,105,110,255,139,133,217,132,237,207,184,166,183, 66,183,198,213, 90, + 75,165, 55,128, 76,228, 24,141, 70,179, 31, 80, 3,226,126,207,120,127,206,187, 79,175,199,235,217,205, 96, 23, 34, 41,254,201, +132,128,200, 50, 23, 81, 11, 33,160,108,215, 54, 23,117,144,139,194,253,233,101,254, 38,107,163,114,165,180, 40, 81,121, 19,240, +132,161,214,245,151,118,196,164, 84,110,243,213, 51,228,189,110,113,169, 53,221,210,162, 56,207, 51, 55,109, 47, 29,117, 69,221, + 1, 9,200,243, 2,253,229,101,220,126,219,139,112,231,107,246,225,111, 62,253,105, 28,251,226, 35, 24,110,140, 48,218,184,128, +109,219,183, 99, 60, 45,177,126,238, 28, 88, 49,178, 44, 67,158,231,232,245,122,168, 42,137, 74, 86, 16, 69,129, 91,111,185, 13, +143,127,249, 56,170,201, 4, 96, 29,185, 47,175,108,197,100, 50,129,148, 99,167,254,182,253,229, 45, 19, 40, 43,137,141,106, 8, +197, 10, 69, 94, 96, 99, 56,212, 3,101, 0,140,199, 99,157,142,145, 18,172, 74,148,213, 4, 36, 8, 69, 94, 96,117,101, 5, 82, + 74,140,198, 67, 76,203, 82,143, 56,246,148,241, 1,232,206,112, 12,227, 74,132, 90, 5,175,163,102,106,201,113,177, 25,247,155, +106, 24,100,157, 74,165, 24, 97, 31, 71, 68, 35, 64,163, 62,143,180, 24,117,158, 42, 75, 94,164, 79,124,204, 32, 8, 33,194,104, +152,128,103, 59,112,220,245,157, 88,176, 11,104,124,140,186, 73,209,162, 14, 4,207,222, 43, 84,214,118,148, 96,146, 30,230,213, + 68, 10,205, 97, 43,242, 86,106,186,126,235,122,168, 73, 20,189,206,234, 88, 22,180, 62, 5,210,245,223,137,232,218,118, 5, 74, +213,141,219,135, 92,248,227, 50, 61, 96,110,228,254,231, 48, 6,126,190,171, 17, 45, 49,146,117,227,201,247, 77, 68,243,169, 38, + 52, 49,197,238,159,103,131,114, 79,249, 20,212,156, 23,239, 60,242,228,124,236,134, 10,175, 1,129,245,132,190, 56, 18,143,231, +102,195,163, 46,235, 40, 91,255,159,163,205, 56, 4,123, 27,157, 7, 57,122, 15,208,253, 46, 81,254, 64, 20, 34, 57, 7,216,163, +218,111, 50,204,150,205,149,219,206,102, 16, 16,148,213,237,108,179,204, 3, 45,225, 40,127,145, 9, 39, 78,178, 17,169,141, 36, + 4, 17,178, 44,199,116, 90,182,108, 66,129,130, 84,211,251,240, 65, 92, 36,115,229,126,196, 18,211,231,182, 35, 27, 88,183,210, +141, 21,250,194,143, 26, 44, 3, 96,162, 53,233, 54, 46,114,244,185, 85,240, 91,128,102, 86,102,144,142,116,199,106,239,113,150, +233,173, 65, 71,231,202,115,188, 40, 56,214,102,183,255,166,183, 92,143,203, 37, 19, 33, 10, 23, 97,206,139,112,242, 60,195,234, +214,109,120,197,215,221, 1, 86, 10,143, 62,250, 40,142,125,241, 49,244,139, 2,227,241, 58,182,108,221,138,147, 39, 79,129, 85, +165, 91, 16,147, 66, 85, 85, 46, 69, 0, 48,242,140,112,205, 53,215,226,196,147, 79,160, 26,143, 92, 75, 90,102,198,133, 11,235, + 88, 94, 94,130,204, 11,244, 5,161,172,166, 90,201,239, 34, 89,129,190,113, 14,184,210,215,108,208, 31, 96, 60,158, 56,182, 66, + 41, 5,145,153,238,174,102, 47,153,150, 19, 0,132, 60,207,177,188,188,140,162,172, 48, 28,142,180, 99,196, 94,160, 20, 5, 22, + 1, 85,143,186,150, 92,255,191,110, 38,196,110,127,178,162,235,184, 30, 94,233,230, 51,115,134, 72,180, 52,158, 11, 6, 55,169, + 80, 90,227,118,191,217,247,143,230, 2,120, 42, 10,142,208, 51,104, 85,123,177,179,208,217, 15, 56,204,247, 23, 53,145,213, 78, +200,163, 69,130, 12, 75,185,103,102, 75,136,154, 42,217,177,150,109, 57,116, 45,219, 68, 60,172,157, 90,196, 69,126, 94, 63, 79, +229,153,253, 82,179,160,108, 42,174, 85,143, 65, 45,234,125, 28,143, 27,108, 19,215, 53,242,201,190,104, 45,154, 86, 70, 20,181, + 50,228,197, 0, 60,229,225,197, 53,224, 46, 21,192, 97, 57, 91,235,240,153,152,129,246, 0, 57,142,210,131,247,143,157,142, 69, + 38,186,165, 40,117,159,106,247,218,228, 58,237,157, 21,129,113,172, 78,231,160,213,168, 47, 80,170, 75,208, 66,192,108,206,204, +214, 27,158, 5, 98, 74,180,129,109, 83,189,214, 15,175, 10,115, 78,222,133,180,160,234, 55,209, 8,253, 22,145, 84,148,147,160, + 32, 95,238,242, 76,200,130,145,176, 89,150,185,104,218, 54,149, 17,182, 70,219, 92, 15, 37,165, 99, 63,152,117,244,181,190, 49, + 12,168,117,255,129,179,223, 8, 19, 81,219,254,231, 58,159, 43, 2, 10,157,188, 89,245, 62, 44, 50,128,204, 58, 36, 30,117,239, + 55, 13,170,167, 79,121,180,166, 5,123,165, 29, 0,231, 12, 64, 71,115, 76,250,124,166,101,233, 6,207,104, 5,184, 50,159,167, +207, 93,136,204, 68,231, 85, 99, 98,149, 93, 92,126,148, 94,111,214, 20,148, 47,214, 77, 75,194,205, 78, 74,235,180, 55,129,193, + 47,153, 36, 33,144,137, 12, 69,209,195,214,173, 91,176,117,117, 21,103,214,206,225,201, 39,159,196,182,109,219,112,250,244, 51, +216,178,186, 3,167, 78,157, 48,145,177,206,239,103, 89,142,213,213, 1,134,195, 33,170,170, 2, 43, 5, 2,227,244,201,147,144, + 82, 66, 74, 14,162, 39, 2, 99, 50, 30,163,215,235, 97, 60, 26, 1, 66,207,108, 7, 3,101, 89,130, 1,140, 39,154, 94,207,139, + 2,178,146,152, 76,198,200,243,220, 57, 15,186,179,153, 10,156,230,162,215,115, 99, 83,101,197,200,179, 28,131, 65, 31, 85, 85, + 98, 58,173, 66,173, 78, 60,132,205, 11,102, 2, 69,124, 48,226,214,220,195, 25, 45, 99, 53,251, 4, 48,137,186,132,133,169, 14, +213,102, 85, 34, 40, 6, 11, 61, 17,174,238,115, 26, 29,231,140, 58,243, 89,245,235,177,136,206, 31,206, 82,167,107, 56,232, 92, +249,108,205,103,126, 23,101,149, 93,211, 36, 65, 65,208,196, 51, 89,128, 40,200, 97, 10,238, 93,195,211, 72,234,165,132,219, 95, +131,162,147, 89,236,130,135, 15,121, 76,107, 59,112,226,196, 40,208, 89,253,211, 19, 3, 69, 90, 7,148,196, 96,153,200,199,199, +109, 25,133,201,129,198,173, 23,231,150,137, 69,109, 89, 27, 83,216, 18,162,188, 89,204,197, 76,109, 0, 66,229,123,156,187, 15, + 26, 55,204, 25,196,210, 42,128, 75,228,173,221, 67, 17,229, 89,244,166,222, 44, 81,179,249,100,215,216,213,175,151,244,157, 25, + 15,160,173, 40,204,149,102,120,109, 42,195,205,156,188,232,130,163, 92, 61, 39, 71, 25,218,185,220,238,129, 49,249,199, 44, 19, +141,241,157, 49,160,251,237,128,133,208,147,228,132, 71,125,219,210, 47, 65,117,100,238,162,117,207, 65,204,242,204,229,241, 89, + 74,100,134,226,182, 51,186,139, 94, 79, 43,155,189,155, 85, 83,223,113,196, 45,220,121,251, 52,186,115, 42,188,214,179, 86,247, +110,153,133,156,106,167, 68,153, 41,117,182, 78, 62,188,207, 20, 44, 87,255, 26,187,123,107,118, 4,169, 24,178,146,230,248,109, +173,172, 61,150,220, 29,183, 61, 86,169,234, 72,213, 78, 91,179, 78,160, 50,244,246,116, 90,214,158, 22,199,194,182, 56, 45,195, +174,242,196,181,158, 86, 30,171, 19,205, 14,176,142, 86,158,231,216,123,251,237,232, 45,173,224, 75, 95,126, 28,167, 78,158,192, +181,187,175,199,147, 79,124, 9,131,254, 10, 78,157,122, 26, 74, 73,244,251, 75, 24,111,108, 56, 80, 56,127,254, 2,250,189, 30, +144, 3, 37, 51,148,172,160,220,189,171,117, 3, 74, 74,144,153,182,167,148,132, 98, 5,161,172,208, 76, 95,223, 94,191, 15,101, +156, 3,191, 83,216,116, 58, 69,158,229, 64, 6,228, 69,129,178,156,152,241,195,122,132,176,156, 76, 0, 0, 69, 81, 96,121,121, + 25, 85, 85,161,172,166, 40,122, 5,132,200, 48, 25, 79,157,195, 27,107,114,148,109, 6,195, 62,251, 83, 87, 21, 6,130, 68,110, +178,118, 53,216, 10,211, 63,134,235,114,180,232, 30, 53, 20,236,182, 91,137,155,221,194,238,115,109,247,191, 69,107,212, 23,165, +180, 29, 59,203,113, 63,147, 56, 33,179,201,207,176,169, 70, 65,237,129, 88,203,247, 46,170,159,243,201,161, 56,184,222, 83,107, + 2,143,107,106, 32, 40,229,225, 40, 90,247,186, 73,154,115, 23,173,204, 42,187, 20, 95,138,225,200,147, 84, 9, 99,102, 68,234, +192, 53, 74,216,250,141, 92, 90,129, 10,212,218,244, 37,110, 39, 43, 76, 65,191, 95,119,158,106, 64, 51, 19,208, 57,110,149, 74, +141,252,120,234,243, 23, 22, 93, 52, 46, 93, 84,231,222,162, 9, 72, 93,163,100,105, 85,130,130,247,163,116,251, 80,212, 96,204, + 1, 88,219, 77,222, 82,133,245,207,211,109, 71,189,169,204,141,252, 91,184, 9,212, 84, 44,192, 30,181,196,141,133, 30,118,152, +171,215,119,248, 94,126,222,136, 3, 10, 62,188,230, 34,202,185,146,169,219,102, 23,165, 91, 80,112,157,224, 40,131,237,106,207, +166, 7,124, 16,105, 19,233,114, 93,195, 12, 9,165, 35,237,210, 94, 77, 34, 44, 45, 47,227,228,137,103,220,195,228,231,206,131, + 13, 72,216, 40,189,174,211, 38, 15,168, 97, 34,113,255, 34, 5, 93,235,204,207,133, 16,110,128, 10, 9,161,115,167,150,114,247, + 20,206, 14,252,149,153,161, 77, 4,150, 18, 48,243,182,167,211,210,148,155,217,218,113,129, 60, 23,174, 63,188,191, 54,108,218, + 65,152,158,213, 41, 85,189,206,137, 75,227,112, 41,111,225,206, 82,179,155,235,129,218, 73, 68,164, 33,136,245, 50,153, 16,184, +117,239,237,232, 47,175,226,228,201,147,232,229, 5, 94,117,199, 62, 40, 6,100, 89,226,153,147, 79,162,151,231,224, 44,195,100, + 52, 10,186,138, 73, 41,181,144,205, 48, 64, 34, 43,160,170, 10, 89,150,105, 86,201, 31,185, 74, 4, 5, 66,111,176,172,255, 93, +149, 40, 39, 19,172,172, 46, 67, 64, 96, 60, 25,233,153,104, 74, 65,136,204,173,225, 34,215,130, 56,150,140,170, 44, 81,228,125, +221,199, 64, 73,231,208,234,235, 63,197,100, 92, 97,121,105, 9, 91, 86,183, 98, 99, 56,132,200, 25,253,173,125,108,108, 12, 53, + 27, 16,213,152,199,193,149, 86,192, 27,221,135,107, 23,171,188, 70, 98,225,172,123,215,232,204, 50,105, 66,206,204,123, 55,247, + 40,147, 34,177, 14,153, 89, 91,172, 24, 2,222,144,146, 5, 4,105,169,243,106,203,179,183,142,146,230,139,115, 22,106,108,185, +184,247,228,182,153,233, 77,178,212,237,222,241, 76, 7, 77,165,103,137,252,134, 9,136,132,107,186,239,238,231,172,254,245,236, +167,213, 98, 13,130, 47,148,155, 11,104,113, 57, 23, 55,235,171, 27,121,224, 68, 27,203, 32,135, 28, 71,172,222,223,103, 34,155, +155,159,105, 91, 60,141, 14,114,179,102,167,123,125,234, 9,180, 41,240,158,149,167,111,115, 54,154,215, 8,110, 83, 15,166,113, + 69,229, 68,212, 50, 48,156, 34, 79,110,222, 76, 97,219,131,157, 92,227, 31, 77, 21, 5, 42,247, 68, 30, 61,160,253,124, 58,206, + 87,205,182,122,177, 28, 12,100,169,193,156, 26, 93,194, 98,165,124, 51,239, 31,181, 76, 13,132,110, 53,120,198,249,114,151,198, + 49, 96, 1, 15, 28, 45,165,197,145, 67, 88,153, 8, 46,203, 50, 80, 38, 92,148, 27,136, 71,161,188,185,217,214,161, 64, 0,148, +142, 29,240,163,118,123,236,230,123,155,179,118, 53,232,230,225,205,132, 64,229, 4,113,222,196, 56,171, 13,176,105, 3,239,125, +204, 34,130,146,140,145, 41,187, 99,199,124,228,166,140, 75,131,108,158, 91,253, 0, 67,202, 42, 0,121, 63,130,242,193, 54,207, +115,148,101, 9, 33,180,216,144,167, 83, 93,199,110, 29,144, 57,148,108,208, 92,136, 85, 82, 44, 40,132,192,206, 93,187,113,203, +222,219,241,201, 79,124, 12, 82, 86,168,138, 30, 46,172,157,197,218,133,243, 56,117,234, 25, 92,184,112, 1,114, 58, 69, 37, 37, +150, 6, 3, 71,133,219,180,128, 77,125,104, 48, 38,244,251, 61,227,140,100, 65, 90,104,203,182,237,216,178,109, 59, 46,172,157, +195,116, 50, 69,191,223,195,202,234, 42,134, 27,235,152, 12, 55, 32,217,143,162, 44,187, 66,168,170,210,137,241,202,178,194,104, + 60,114, 64,175, 83, 71,112, 66,180,140, 8,163,209, 8,227,201, 4, 91, 86, 87, 49, 26,141, 48, 45, 75,172,110, 89,197,198,250, +134, 46, 11,180,209,180,138,244, 55, 13,253, 18,153,153, 58, 70,112,202,178,158, 13,239, 82,112, 97,122,102,241,188, 55,195,163, +251,106,125, 11,210, 37,145, 11, 7, 62,104, 31,129, 74,244,108,180,236, 51, 0,221, 54,122,201, 22,136,210,227,244, 15, 45,126, + 94,113,151,195, 84,132, 73,209, 72,106, 4,253, 24,210,137,249,184, 60,215,234,106,172,234, 62,118, 74,152,234, 48,140,182, 94, +123, 3,207, 20,187,165, 4, 12,179,166,126,165,218,157, 34, 49,216,197,159, 90, 99,251, 40,147,168,169,146, 22,161, 90,219,113, + 52, 68,120, 45, 12, 65, 35,255, 61,107,129,180,148,147,181,169,232, 83, 63, 15, 5,112,222,199,199,253,211,125, 53,123, 80,210, + 71,141,217,214, 33, 11, 16,215,145,195,205,133, 78,245,206,166,168,123, 89, 29, 97, 83,203,184, 80,138,166, 53,213, 78, 65, 29, +161,249, 41, 13,225,126,174,255, 70, 53,242,249,225, 48, 9,242, 38, 81,133, 10, 95,221,223, 59, 82,158, 10,106,212,114, 19, 1, +148,193,169,182,179, 44,115,155, 55,152, 92, 11, 69, 97, 26,199, 56,129,151, 75, 98, 19,178,158,128,146, 10, 36,181, 3, 81,150, +186,123, 28,136,176,186,101, 21, 39, 78,158,114, 20, 46,137, 76,139,190, 88,186,188, 56,121,212,187,109,159, 42,132,208, 78,132, + 23,221,219,124,177,205,121,199,138,247,128, 7, 17, 2,204, 58,234, 22, 36,220,100,184,122,246,183,105, 12, 67, 4,134, 4,105, +217, 61,148, 0, 0, 32, 0, 73, 68, 65, 84,179, 4, 43,194,116, 42, 49,157, 78,131,242,179, 44,203, 65, 36,130,220,126, 61,108, + 7,201,180, 72,156, 95,180,206, 73,105,202,216,166, 6,208,103,122,207,220,172, 49,182,234,121,197,172,175,185, 5,243, 76,160, +215, 91,194, 75, 95,254, 50,144, 16, 56,125,250, 52,198, 27, 27, 40,250, 3,172,174,108,193,241,227,143,162,232,245, 32,167, 19, + 92, 88, 63, 15, 29,172, 50,138, 60,119,205,111,124,117,182, 19, 65, 66, 90,132,173, 5,154, 36,112,237,158, 27,176,188,188, 5, +143, 31,127, 4, 82, 74, 83, 70,166,157,171, 45,171,171, 88, 95, 63,111,202,239,178,160, 58, 33,207,245, 28,172,105, 57,213,215, +156, 1, 18, 57,242,188, 64, 37,167,250,153, 34, 93,162, 84, 85, 21, 64,186, 37,173,173, 56,232,247, 6,200, 68,142,201,100,130, +162,215,195,112, 99,104,174,165,242,234,203,125, 71,220,148,187, 41,127,176,139, 46,143, 19, 44,131,176,209,245, 1, 64, 56, 91, +222, 69,135, 20, 63,103,145,179,237,141, 0, 37,161, 2,161, 30, 75,121,209,202,243, 88, 0, 26, 71,236,177,144, 13,112,213,169, + 23, 15,242, 34,142,206,155, 37, 53,245,176,161, 90, 21,191, 72,185,154, 95,138, 27, 54,145, 9,203,206,244,135,164,234,204, 45, +206,121,251,194,156,224,109, 86,196,205, 36,160, 12, 23,150,207,124, 45,181, 71,169,254, 4, 34,155,215, 86,172,130, 7, 55,174, + 71,180,148,187,253, 59, 71,123, 11, 43, 96, 18,237,194,180, 84,105, 52,183,231,242, 27,181,222, 11, 12, 96, 9,242, 74,162,217, +177,104, 86,195,154, 89,142, 79,152,195,175, 61, 95,138, 58, 63,197, 27,122, 76,173, 16,137,122, 50,226,140,146,160, 76,164, 71, +124, 54, 38, 49,129,131,114,171,164, 2, 22, 97,123,206,160,142,155,163, 97,143, 22,196,195,246,211,141, 27, 87, 15, 13, 81,104, +150,124,212,226, 61, 33,200, 8,155,226,129, 38,228, 29, 55, 65,100,122, 15, 21,158,234,189, 22,163, 9, 16,101,158, 90,188, 89, +190, 3, 34, 84,149, 52, 68,177, 57, 54,179, 49,138, 76, 64, 86, 18,176,194, 48, 19,101, 50, 24,164,226, 30,235,245, 84,176,160, +225,140,191,134,132, 8,153,149,136, 53,128, 41, 55,203,178, 44, 0, 39, 59, 0, 71,112, 77,225,107,218,221,180, 16, 85, 58,122, + 27, 14, 71,158,136,205,143,126,235,156, 56, 25, 1,149, 95,162, 22, 56, 22, 45, 83,189,252,200, 29,208,165,102,101, 57, 53, 27, + 49, 71,121,224, 52, 67, 85,107, 32, 4,136,101,192,174, 80, 47,195,173,183,221,142,141,225, 8,146, 21, 50, 18,216,177,107, 23, +158,120,242,113, 60,115,226, 9,236,216,182, 11,103,206,159,197,116,184,129,213,229, 85,140,167, 99,148,211,210, 85, 36,212,173, +132,181,163, 40,165, 66,175, 87, 32,203,122, 24,143,199,102,100,169, 94,148,121, 81,160, 95, 20,248,210,241, 71, 32, 77,243, 25, + 39,218, 2,112,254,194, 58,182,110,221, 6, 41, 75, 76, 39,165,187,166, 85, 85, 97, 58,157,122,233, 20,211, 1, 80,100,152, 78, +167, 88, 90, 26,160,172, 42,148,211, 18,138,165, 3,224,202,208,255, 66, 8, 93,102,199, 10,121, 81, 96, 58,213,236, 0, 0,115, +140, 97, 63, 1,183,167,186,107,232,139, 88,163,225, 43, 62, 31,236,179,125,241,238,198,225,191,253,158, 2, 28, 21,107,217, 52, +205,179,177, 84, 67, 36, 95, 32,151,214, 85, 93,162,136,221,166,175,145,102,144,252, 53,109,239,253, 98,169, 5,110,143,182,147, + 88,169, 34,161,156,152,175,157,162,249, 9, 97,101,244, 59,236,221,175, 60, 73, 49,207,113,190,125,229,182,175,210, 12,250,165, + 35, 82,211,183,204, 80, 39,132,249, 70,167,254, 36,110,140, 55, 93,244,142,167, 0,125,174,224, 45, 86, 82, 35,209,115,152,211, +142, 6,205, 57,166,148,196, 32,158,204, 21,151, 42,164, 18, 2,233, 72, 58,236, 74, 22,214,121, 54, 21,179, 49, 77,228, 71,224, +190,114,179, 49,182,211, 91, 23, 28,229,199,109,222,212, 43, 29,112,145,186,223, 18, 54,164,223,211, 37, 20,113, 84, 23, 55,105, +169, 61,215, 26,172,200, 43,101,243, 35, 74,247,247,174, 92,205,245, 78,243,142, 89,243, 86, 4, 32,207,114, 84,178,210, 27,188, +249,204, 65,175,143,245,245,117,115, 46,153, 99, 10,164,148, 46,164,136, 53, 3,190,194,221, 2, 57,188,122, 98, 27, 77,101, 46, +146, 12, 71,195, 90,150,129,189,156, 59,153,243, 84, 82,214, 14,177, 23,109,143,199, 83, 87,126,230,179, 54,126, 26, 2,224, 70, +221,123,220,241,173, 45,141,227, 43,149,235,252, 94,157,103,150, 81, 47,114, 87, 58,132,102, 89,167,237,161, 94,179, 8, 2,189, + 94, 31,123, 95,244, 98,156, 61,119, 22, 85, 37,113,205,174, 93, 56,185,118, 14, 79, 62,113, 22,219,182,239,196,120, 99,172, 35, +231,201,196,229,123, 43,211,205, 77, 8,125,205,164,148,193,136, 82,219, 45,174,172, 42, 8, 33,176,178,117, 43,136,129,201,120, + 12,102,133,175,124,249,113, 93,214,231,250,171,235,251, 82,153,127,143, 70, 99, 76,167, 19,128,165, 43,197,179,108,153, 52,215, +153,140, 94, 64, 86, 18, 89,158, 97, 56, 28,161, 40, 10, 23,117,235,155,171, 29, 52, 9, 35,192, 52,117,250,106,170,211, 24,101, + 85,162, 87,100, 32, 20, 96, 8,140, 70,227,186,148,216, 85, 34,133, 67, 93,156, 48, 53,161,216, 34, 79,239,225,230,170,183, 0, +122,188, 15,248,213, 40,181, 35, 39,112,177, 33,122, 91,215,195,246,156,190,161,150, 55,137,234, 76, 94, 43, 88,166,246,161, 44, + 51,254,158,105, 17, 32, 15,251,110, 52,223,128,162, 8,221,171,110, 66,221, 96,134, 82, 84,123, 35,229,219, 28, 19, 93,127,172, +221, 59,236,254,231, 57,219, 65, 87, 55,204, 22,184,165, 26,169,196,165, 89,109,185,232,192, 17,160,104,238,185, 95, 70,151,138, +132, 41, 93,254,214,234,112,208, 38,135,194,208,108,106, 93, 64, 36, 80,185,197,187,180,128,134,150,233,104,177, 23, 25,121,100, + 12,191,140,208, 23,140,161, 49,249,204,239,166, 22,151,146, 53, 42,174, 0,221, 33,204,166, 61,152,163, 49,155,228, 58,189,133, +148, 61, 2,113, 70,157, 31,138,203, 22,163,102, 19,137,228, 85,170, 25, 77,252,160,204, 27,225,222,164,222, 41, 96, 29,252, 40, +221, 31,157,202,141, 50,176,248, 88,235,156,183,242,202,181,242, 44,195,120, 60,110, 60,220,245,189, 70, 50, 2,137,175, 69,155, + 82, 53, 30, 42,195, 17, 29, 78,129, 32, 78,122, 66, 68, 5,134, 66, 89, 42,140, 70,211, 32,143, 27,207, 18,175,163,125, 56,186, +190, 57,218,148, 22,138,128,178, 44,115,244,187, 75,241, 11, 1, 65, 10,178,242, 53, 22,156, 22, 35,153, 42, 41,237, 12,144, 59, +238,213,109, 91,193,172,176,103,207,245,120,252,248, 23,241,228,151,191, 4,202,122, 88,221,186,130, 83,167, 79, 64, 78, 75,244, +138, 28,171,203, 43, 56,183,182,102,202,211,148,139,206, 53,253,174,188,212, 14, 25,182, 93,239, 53, 34, 19, 88, 95, 59,103,132, +135,153,115,248,170,138,157,152,202,137, 15,205,161, 78,167, 19, 35,122, 84,200,243, 12, 66,228,186,138,160,170,220,181,200,178, + 12,147,201,196,177, 78, 89,166,239,243,160,223, 71, 89, 85,174,244, 77, 86, 58, 61, 82,150,165,158, 4,103,174,167, 84, 82,195, +174,172,208,239,247, 48,157,150, 16,164,244,254,175,200,211,172, 42,132,115,213,185, 65,163, 7, 20,188,231,168,192, 23,222, 17, +183, 4,241,179,132,142,254, 30,129, 77,229,214, 83,253,219,227, 14,115,201,181,119, 49, 62,196, 28,153,124, 82,239, 17,149,171, +181,159, 71,172,243, 73,186, 35,112,189, 96,189,125,137,144,215, 1,142,151, 70, 21,109,159, 21,141,128,246,193,156,163,160,142, +208, 44,115,203,219, 4,101,126,148,108,129, 52, 89, 62, 22,137,221,218,202,212,124, 17,153, 5,242,121,109, 83, 83, 32,236,211, + 40, 23, 43,178, 32,177, 9,192,159,241,247,173,141,255,136, 90,111, 88,220, 9,174,118, 36,216,109,242, 49,181,147, 26,238, 80, + 71, 79, 8,114,218,126,147,151,230,104, 63,246,147,250, 30, 45,230,137,205, 26,148, 57, 57, 97, 85,237,200,121, 78,139,240, 27, +201, 96,134, 87, 79,173,222,123, 88, 47,223, 46, 34,105,110, 16,112, 52,125,138,174,138, 35, 75, 71, 55, 67,132,211,177,152,145, +247, 10, 72, 51, 62, 84,100,153, 86, 75,155,118,159,204,161, 96,143, 41,214, 35,192,245, 12,119, 77, 14, 93,157,122,189,129, 83, +156, 79,180, 39, 96,202,204,217,136, 97,172,226,221,174,181, 26,216,133,163, 92, 43, 41, 49,153, 84, 40, 75,217, 0,116, 95,112, +230,250,217,219, 18, 58,175, 86,223, 2,188, 52,162, 64, 87,154,136,122,248, 8,161,102, 87,180, 70, 82,153, 94,251, 89,221,144, + 72,232, 99,203,122, 64, 85, 1, 74,250, 78, 56,194,201, 99, 84,151,101,101, 89, 6, 5,133, 27, 95,112, 19, 94,120,243,205,248, +242,151,191,130,115,103, 79, 98,125,125, 13,229,100,130,169,172,112,227, 13, 47,212, 12, 10, 79, 49, 28,143,144,231, 61,236,216, +185, 3, 27,235, 23,208, 43, 10,228,133,237,240, 87, 59,192,131, 65,207, 12,102,169,160,148,190,182,182,191, 59,152, 33, 12,115, +211,235,245, 48, 24,232,137,107,182,199,186, 5,248,149, 45, 91,177,117,219, 86, 44, 13, 6, 56,123,230, 20,206,159, 59, 3, 34, +175, 28,206,116,157,179,215,206, 62,139,189, 94, 15,163,241, 8,121,150, 67, 73,133,113, 57,118,227,160,165,172,116,137, 33,169, + 32, 29,167,204, 51,160, 69,143,230,121,147, 18,131, 94,129,241,100, 18, 86, 87,180,116, 90,164,196, 16, 23,157, 18, 17,222, 60, +110, 14, 0, 41,126,206, 93, 10,208, 50, 2, 64,163,131,220, 66,221,228,154,225,122,248,183, 81,158,248, 34, 2,243, 5, 68,127, + 97,102,143, 91,218, 89,115,107, 71,195, 77,132,248, 49,187, 77, 28, 68,211,238, 93,157,118,108, 49,225,179, 59,252,168, 94,127, + 94, 15,252, 60,142,194, 27,101, 87,148,200,147,181, 42, 7,103,180, 58, 77, 68,198,246,111, 90,219,166, 70, 37,111, 41,229,252, +220,206,117, 64, 35,151,158,236, 5, 79,233, 54,178,182,175,117, 35, 69, 49, 63, 75,145,164,218,125,200, 19, 62,181,221,218, 16, +214,175,121, 68, 80, 51,154,172,139, 68,179,118,146,131,137, 68,161,168,173, 81,130, 17,116,132,227,198,253, 13, 89,152,154, 6, +228,134,199,170,130,171, 19,174, 63,127,254,184,189, 34, 2, 97,227,146,132,176,207,215, 37,184,206,113,198, 27,246,122,171,199, + 95,113, 89, 13, 43, 43,106,171,193,174,215,239, 99,180, 49,212,141,104,170, 10,194, 76, 1, 27, 14, 71,126,229, 27,136, 8,197, +160,143,201,112,228, 54, 74,159,238, 14, 27,245,112,208,122,213, 63, 6, 95, 25,111,107,164,109, 4,109,153,148,204,150, 11, 6, + 27, 42,163,156, 42, 76, 38, 19, 13, 84,138, 27,226,157, 56, 5,145, 18,101,250,195, 53,130,114, 58, 17, 86, 32, 16, 9, 40, 89, + 51, 3,204, 82, 15,207, 33, 66, 81,244, 80, 85,165,201, 41,235, 20, 67,158, 43, 72,120, 18, 4, 11, 46, 28, 86,153, 40, 37, 81, + 20, 57,114, 42,176,123,247,110,252,245, 95,127, 20,253,165, 85, 64,142, 48, 30,142,116, 83,156, 44,199, 83, 79, 63,137,229, 94, + 31,189, 94, 31, 21, 36,118,236,220,129,167,158,120, 66,143, 70, 5, 80, 86, 85, 84, 26,201,152,152, 26,113,187,182,164,233, 37, + 96, 75, 13,237, 61,208, 93,225,204,189, 96,157, 79, 93, 90, 93,197,246, 29,187, 48, 30, 13,177,126,225, 60, 78,159, 58,137, 60, + 19,216,113,237,117, 56,123,250,180,139,178,138,162,128, 32, 97,206, 95,247, 17, 80, 82,162, 44,167, 32, 16, 38,211, 9,138, 92, +139, 19, 43, 41, 77,186,198,212,124, 43,229,148,234,202,107, 12,165,123, 0,232,250,124,189,174, 24,153,167, 43,177,199,238, 28, +232,152, 5,243, 28, 14, 23, 49, 42,246, 4,114,104, 48,122, 13,144,182,165,145,172, 12,206, 83,205,232, 45, 16, 62, 51, 37,167, + 65,132,123, 72,203, 68,230,139, 1,118,158,165,251,154, 57, 11,117, 6, 37,200, 17, 83,154, 82,236, 57,125, 6, 37, 35,118,205, + 10,214, 34, 89,102,213, 46,132,139, 54, 72,151, 36,116,254, 2, 33, 22, 46,183, 93, 95, 29,169,183,136,202,102, 82, 22, 9,138, + 93, 4,138,232, 22, 15, 42,250,221,204, 41,106, 81, 51,151, 84, 91,214, 96,136,202,140,201,112,126, 45,122,252,185, 13, 48,247, +243,212, 60, 59,178, 39, 52,123,173,183,241, 51, 20,131,166, 55, 42, 49,246,207, 26,147,120,168, 9,180,245,247, 97,185, 88,160, + 1, 8, 0,149, 16,180, 16,112, 53,235,102,195, 21, 77,167,166,214,193,197,165,115, 30,104, 57, 47, 63,190,199, 20,244,119,159, +207,167,197, 74,216,180,160, 32,160,142, 45,123, 19,213,131,199, 37,100, 49,109,207, 70,105, 45,165,116, 14,159, 82,202,244,246, +206, 81, 78,245, 3,216,239,245,113,250,244, 89, 47,165,161,213,227,153, 29, 34,228, 61,196, 54,215,238,139,127,156,250,221,111, +132,225, 9, 99,252, 99, 6,113,237,172, 8,163, 5,160,230,144,150,201,184,196,100, 82,186, 33, 44,241, 80, 27,123,238,126,111, +123, 63, 74,178, 29,230,244,207,148,211, 64, 80, 80,247,111,214,134,105,184,162,197, 82, 86,184, 40, 1, 22,174, 76, 81,152, 13, + 43, 19, 2,194, 12,107, 81, 74, 65,120,204, 72,188,246,236,154,168,170, 10,219,119,238,194,211, 79, 63,141, 44,239,161,200,123, +216, 24,157,115,236, 77, 85,149, 24, 44, 13, 48, 45,167,186, 77,171, 0,158,126,226, 43, 96,169, 92,205,189,109,166, 19, 70,147, +150, 45,209, 74,117, 29, 77, 27,167,218,116,236,210, 41, 4, 91,169,160,175,149, 84, 18, 91, 86,183, 96,180,190,129,181,181,211, + 58, 55, 11, 6,171, 12,231,215,214,176,178,188,140,117,211,228, 70,119,171, 99, 8, 67,183, 47, 47, 45, 67, 41,157, 18,144,170, + 4,129, 80, 86, 21,122, 69, 15,176, 58,136,104, 78,131,237,205,110, 5, 91, 89,174,123,200,247, 7,125,240,136,205,208, 32, 95, +251, 32, 35, 58,188,117,107,109,137, 62, 57, 72,125,233,107, 83, 5, 41, 11, 86,166,245, 13,213, 61, 47,234,225, 47,139, 20,119, + 35, 93,217,133,217,141, 92, 54, 13,232, 52,135,117,229, 89,218, 41,209,226,124,192,117,220,211,175, 85,201, 33, 82, 81,114, 59, +138,182, 1, 80, 66, 4,215, 58,232, 43, 5,230, 81,240, 11, 74,130,121,219, 28,246,220,167,197,219, 4,113,113, 63,115,151, 7, +167, 38,245, 64, 58, 9,221, 62, 83,125, 19, 53,128,169, 84, 64,210, 43, 91,128,191,105,107, 69, 27, 28, 55,181, 31,107, 92,142, +214, 74,218, 36, 6,169,212,185,242, 48,234, 12, 15,187,153, 82,240, 5, 88,204,212,160,207,252,147, 15,193,208,159,105,238, 57, + 4,206, 9,178,161,181, 10,114,195, 86,235,192,177,130, 70,192, 43, 49, 52,138, 81, 65,174,161,139, 13, 27, 56, 80,178,251, 11, +187,153, 38, 8, 29, 69,106,228,174, 26,138,217, 8, 12,235,148,129,161,128,145,158,108,102,205,170,201, 45,141, 45,165, 66,150, +219, 19, 35,112, 37,189,126, 9, 20,245, 97,175, 29, 9,102, 64, 78,171,134, 3,146,206,245,215,181,232,126,137,162,125, 71, 27, + 37, 11, 79,128, 5,170,160,219, 52, 40, 59,101, 30, 12, 29, 17,142,134, 19, 13, 26,145,186,221, 87,220,251,250, 1,231, 96,212, +185, 17,111,168,141,127,207,184,206, 4,216,206,141,202,180,114,245, 68,131, 96, 59, 40, 71,151,102,229,121,142, 74,105,144,152, +148,140,126, 95, 96,105,105, 11, 70, 60, 68,201, 83, 16, 19,116,124,175,193, 61,227,176, 42, 67, 1, 40, 6, 5, 54,214,215, 33, +149,196,250,198, 26, 88,217, 58,108,160, 95,244, 32,132,192,216, 76, 82, 99,201,117,191,116,179,158,108,141,127, 35, 85, 42, 8, +131,126, 15,147,201,212,128, 38,187,242, 51,255,217, 81, 74,161,172, 42, 87,146, 56, 92, 95,135,146, 83, 29, 57,203,170,126,216, +170, 10, 50,203,220,252,120,102,198, 84,105, 7,134,137, 48, 26, 13,221, 53,239, 21,133,121, 70,244,249, 22, 69, 97,158, 35,157, + 59,103,165, 32,216,116,173, 51,128,201, 25,161,148, 21,122,189, 30, 32, 8, 69,191, 48,194, 63,133, 44, 3,170, 74, 34,203, 96, + 82, 68, 10,113,137, 73, 40, 62, 51,209,185,245,169,148,112, 32, 5,247,140,147,118, 94,141,190,193, 94, 71,159, 13, 68, 84,253, +194, 11, 36,187,125,246, 89, 45, 34, 30,230,197,240, 32,112,218, 22, 72,161, 38,223,215, 40,106, 91,107,184, 89, 64,175,122, 85, + 71,243,113,116,206,169, 25, 27,209,166,236,158,147, 68,202,162, 5,228, 21,249, 78,143,168,217, 11,106, 47, 53,110,166, 18,226, +156,250, 12,245,162,139,136, 51, 10,199,142,214,251, 93, 40,182,139,135,153,120, 32,223,156,120, 35,194, 7,149, 90,220,207,182, +223,209, 2, 14, 2, 71,234,252,136, 94,111, 52, 65,105, 99, 13,194, 70,214,201, 70, 1,193,161,122,162,185,212, 41,136,182, 65, + 6, 65,155, 86,191, 84,167,221, 83, 99,110, 87,107,250,247,176,190, 7,205,200, 56,232, 20, 69,222,195,148,168, 39, 13, 82, 24, +126, 4,194, 33,107,208, 22, 71,164, 74,101,136,154,163, 71,125,145, 94,157, 35,143,128, 52, 65,213,187,154,226, 44, 11,157, 49, + 34, 64,217, 22,172,166, 21,104,175,135,241,120,234,162, 58, 33, 4,138,162, 48, 52, 46, 5, 20,187, 85, 84, 7,251, 68,130,234, +182, 81,186, 31, 41, 43,102,173,183,247,128,221,206,142,215, 55, 70,185,191,181,209, 27, 17, 97, 50,158, 98, 60,158, 56,117,123, +236, 72,216,188,121, 16,249, 71,148,172, 95,234,199,168,124,197, 68,122,200,140,208, 77, 86,148, 82, 58,215,156, 80,201,231,189, + 30, 6, 6,192, 70,227, 49,170, 74, 66,144,196,234,214,173, 88, 63,127, 1, 37, 79, 16, 97,112,112,111, 6,131, 62,134,235, 99, + 92,119,253,141,120,228,209,207,161, 87,244, 80, 73,198,202,234, 22,140, 38, 19, 8, 2, 38,195,145, 41, 3,171, 26,235,219,182, +187,181,204, 66, 61,121, 76, 97,105,105, 9,227,209, 40,152,136, 86, 87,136,212,207,152,148, 10,236,181,142,221,216,184,128,109, +219,119, 98, 52,158,214,128,105,206, 95, 74,169,133,108,130,208,239,247,141,202,157,209, 43, 10,151,151, 39,152, 97, 64,172,160, + 42, 56,199,167,146, 21,136,188,233,131, 92, 59, 81,202,155, 47, 95,150, 37,138,162, 0, 65, 55,204, 25,143,149,115,254,114,211, +202, 88, 15, 58,170, 2,125,140, 21,129,170,128,133,177,247, 50,108,134,227,239, 49,219,183,111,195,218,218, 90, 34, 87, 31,231, +209, 47,193,120,180, 84,218,121, 19, 1, 94,176, 87,205,124,255,230,177,210, 76, 64,247, 34,111,226, 80, 15,226,156, 34, 10,114, +155, 41,134,182,209,214,214, 27, 57, 92,247,198, 8, 55,113, 73, 51, 88,234, 70, 63,152,166,166,136,137, 26,159,157,207,227, 66, +234,136,131,194,193, 2,212,162,108,244,242,222,193, 20, 34, 66,107,157,119,178,214,220, 7, 60,154, 77,235, 36,217,133,232, 51, + 41, 17, 13,250,158, 20, 5, 46,106,156, 2,104,122, 99, 20,136, 23, 34,111, 42,113, 93, 40,113, 94, 49,125, 18,247, 99,246, 55, +159,186,231,122, 40, 18,211,115,149,189,104,155,235,200, 62,236,230,100,179, 51, 4,144,104, 12,105, 73,166, 46,216, 70,193, 62, + 83, 82, 43,244,237,134,169,156,222, 1,141,232,157,162,116, 64, 88,175,234,143,115, 77,231,138,156, 18,212, 19, 31,214,247, 37, +115, 67, 43, 82,209,185,205, 89, 90,229, 55,187,247,202,204,180, 44,237,109,102, 66, 71,241,189,162,192,120, 60,118, 57,240,137, +163, 63,235,166, 55, 58,205, 84, 34, 28, 71,217, 4,116,225,205,111,247,129, 58, 41, 20,178,247, 12,210,163,239,217, 52,122,145, +134,110,151,174,251, 95, 44,134,243,115,226,126,133,130, 75, 3,216,207, 19,117,164,150, 2,242,160,237, 44, 17,152,164,166, 32, + 51, 51,197,206, 84, 78, 16, 19,138,162,192,112, 99, 67,231,129, 69,134,193,202, 50,138, 94, 95,139,194,242, 30,182,238,200,113, +254,220, 57, 96, 58, 5, 41, 21,148, 76, 41,211,253, 74,100, 57,246,238,221,139, 51,103, 78, 67, 64,104,237,142, 4,118,221,112, + 61,142,127,241, 81,228,153, 22,250, 85, 82, 38, 54,121, 14,198,255,186,186,110,227,244,108,184,193, 59,112,125,255,237,239,116, + 39, 62, 13,176,253,254, 18,136,128,209,120,136,149,229, 85, 72,169,176,177,113, 1,166,117, 58, 68, 86,224,154,107,118,161,215, + 31,160,200,180, 3, 83, 20, 5, 78,157, 60,129,245, 11,107, 96, 8,108,148,165, 78,203,100, 25,178, 92,183,162,173,202, 10,153, +208,149, 19, 66,100,186,167,129,161,178, 69,170,199,133,233,247, 81, 73, 9, 41,164,115, 84,179, 44, 7,115, 5, 34,233, 58,226, + 1,140, 60, 47,156,194, 95, 41,101,170,167, 24, 25,233, 72,222, 41,231, 45,221, 78, 48,244,189,245, 40,244, 53,189,112,225, 2, + 96, 28,136,170,170, 80, 78, 74, 51,249, 79, 56,239, 67,128, 76,227,155,205,129,183,184, 4, 62, 64, 16,161, 39, 6,206,145,106, +130, 33, 35,106,101, 62, 75,225,110,103,150,147,158, 85,239, 71,188,110, 44, 42,105,113, 40, 88,212,221, 56, 73, 26,230, 53,243, + 8,242, 89, 0,221, 6,230, 34,233,108, 2,177,230,136, 26, 96,238,197,212,110, 74, 35,131,117, 73, 91,163,157,171, 7,120,194, +245,182,174,229, 92,156,152, 61,157, 20,159,137,246,252,118, 44,106, 11,122,201, 83,164,185,106, 80,225,228, 9, 54,185, 57,144, +166, 45,151,226, 13, 31, 9,110, 62,115,152,221,142,232,245,100,143,226, 8,168, 3,102,195, 11,171, 27,243,205,185, 62,177, 90, + 81, 78,141, 40, 54,142,114,185,213,139, 51,212,188,243,204,201,213,241,146,215,173,173, 86, 81,215, 11, 64, 41, 83,215, 75, 94, +179, 20,227,149,167,244, 14,117, 3,161, 40, 18, 72, 93,110, 65,225,116, 39,175, 36,198,119, 90,154, 77,123,252,144,161,173,221, +104,125,254, 98, 78, 89, 86, 92,223,174,148,170,219,153,194, 87,236,123, 76,133,113, 4,166,211,105,240, 94, 75, 75, 3, 93, 67, + 28,140, 70,173, 35,101, 31,188,221, 92,114,235, 88,248,121,245,104,246, 60, 69, 42, 33,253, 55, 90,208,183, 97,128,211, 79,189, + 88, 85,187,125,152,253,200,220,126,142, 83,183, 39,116, 5,201, 53,235,149,172,249,142,167, 72,148,226,233, 41,109,117,239,113, +165, 36,134, 23,206, 67, 18, 32, 68,142,229,165, 85, 44, 45, 47, 99,203,182,109, 88, 63,191,134,233,120,106,132, 87,126,105,149, + 30,150,242,149,199,143, 67,100, 5,122, 69, 1,145,101,184,233,133, 47,198,249, 11,231, 1, 37,161, 76,119, 55,174, 42,247,252, +216,134, 55,177, 99, 88,131,122,200, 42,105, 48,103, 87,195,110,243,225,250,119,186,182, 93, 51, 47, 2, 82, 86,152,140, 71, 40, +122, 3,100,131, 2, 89, 81,224, 53,175,121, 29, 62,250,241,191, 68,117,250,140, 17,231,105,114,118,101,105, 9,131,193,114, 77, +197,151, 37,212,100,130, 34,211,247,116,219,182,237, 88, 95, 95,199,210,210, 18,202, 74,131,233,180, 50, 61,243,165,116, 85, 5, +250, 89,215,128, 46,165, 66, 81,228,152,150, 37, 50,145,129, 88,207,159,183,142,175, 29,151,171,181, 29,108, 74,250,234,253, 74, +201,186,236,133,252, 41,125,214,193, 37, 5, 82, 97, 78, 94,211,250,250, 58,244,122,125,200, 74, 66, 73,229,122,205, 7,148,225, +115,104,180,192,196,182,152,230,134, 16,237, 96,224,234,197,213, 76,188,106,234,172, 56,104,202,214, 42, 34,159, 91,103,142,136, + 61, 74,129,121, 51, 74,111,100,188, 99,253, 21, 40, 26,232,146,138,208, 35, 37,250,204,246,170, 62,216, 70, 99, 81, 3,193, 68, + 68,183, 7,239,223, 16, 8,180,111,216,241,136,212,166,218, 62, 28, 46, 71, 14, 84,106,177, 90, 80,102,209, 34,104,224, 68,254, +164,117, 12,106,203,100, 29,255,223, 53, 77,200, 94,158,187,141,126, 96,248,115,116,235,224,158, 90, 4,137,126,189, 42,133,186, + 7, 47, 55,214,168, 36, 64,212,206, 19, 54,207, 94, 31,129, 98,229,221,147,250,117, 89,162,244,206,117,229,107,107,108,149,108, + 62,227,200,110,151,239,204,178,172, 30, 79,234,205,111, 15, 7,187,160,181,230,154, 60,170, 86,167, 34,201, 40,184,245,255, 69, +150, 59,150,193, 54, 20, 1, 17,164,170, 28,205,238, 70,186,230,185,235,240,229, 11,227,226,103, 70,120,226, 56,231, 4, 5,155, + 35,153,168, 87, 11,209, 96,188,113,191,230,158, 37,176,190, 62,212,202,120,197, 65,169,156, 63,109,174, 49,220,193, 48, 26,100, + 90,226,106,169,127,237,208,166, 82, 20,113,137, 97, 12,232,113, 73,147,160, 28,211,233, 40,232,248, 7, 8, 8,102, 64, 74, 12, + 55,214, 48, 92, 95,115,189,226,179, 34,135, 44,167, 53, 35,100, 30,202, 45,203,171,128, 32,172,172,172,160,172, 74, 12,150, 86, +240,229, 39,158,192,181,215,236,214, 68, 54,135,202,222,254, 64,131, 78,211,209,174, 75, 57,237,243,101, 1,190, 10, 94,143,160, +213, 43, 64,166, 59, 28, 33, 51,169,151, 94,191, 15, 89, 85,144, 85,137,126,127, 59,142, 63,254, 40, 38, 27, 27,186,185, 14,215, +109,102,215,215,215,177,178,178,130, 74,150,200,242, 12, 75,185, 17,209, 65, 11, 7,135,195, 13, 44, 13,150,160, 88, 33,203, 4, + 68,214,131,200, 4, 38,147, 9,242,172, 64, 37, 75, 51,145, 77, 3,176,206,205,107,144,237, 23,122,140,172, 32, 66,158, 23, 96, +102,148, 37, 59,161, 34,153, 82,181, 44, 3,138, 34, 55,142,133,233, 76,171,194,220,179, 19,227,185,123, 26, 94, 7,219, 68, 72, + 15,221,145,184,118,207,110,156, 62,117, 10,213,180,106, 48,211,184,194,216, 30,207, 65, 15,160,132,231,252, 29,205,136,238,216, +159,193,160, 22,154,237, 65, 38, 34,175, 81, 85, 36, 43,115, 82,123, 16,131, 26, 52,121,152, 86,165, 8,228,169,225,104, 80,194, +201,161, 52, 85,221,204,169, 7, 84, 34, 99,177, 70, 46, 72,228,172, 83, 11, 33,166,121,197,108,199, 32,166,220, 27, 14, 66, 74, +224,198, 9,230, 32,202,123,248,120,216, 70,177,167,102, 61, 55,212,237,177,248,171, 73,158, 36,192,198,223, 52, 99,103, 42,236, +179,238,247, 9,142, 71,143,134,158, 64, 44, 62,240, 59, 75,121, 64,206,126,243,148,102, 42, 36, 40, 7, 52, 64,169, 68, 93, 70, + 35, 56,117, 46, 97, 25, 36, 35,108,115,217,100,113,200, 83,224,114, 99, 88,139,127, 14,174,113,140,180,116,100, 93,246,214, 46, +180, 11,233,100, 6, 92,100, 84, 47, 26, 89, 51, 81,153, 6,224, 44,207, 33,171,202,253,125, 37, 75,143,174,213, 63,155,148,211, + 32,117,226,119, 66,244,193, 54, 19, 34, 4, 29, 29,102, 5,235, 80, 41,214, 81,150,153, 48, 23,150,221,101, 24,141, 54,180,194, + 58,138,236,227,207,117,218, 12, 31,232,252,239, 17,246,203,159,149,171,180,189,201, 83,237, 59,253,159, 59,154,222,139, 4, 93, + 67, 30,255,153,103,198,100, 58,173, 5, 83,118, 96,147,121,181, 84, 90,244,247,204, 99, 79, 97, 50,158,224,134, 27,151, 48, 24, + 20, 24,142, 54,156, 14,198,150, 2,101, 66, 32,239,245, 48, 30,174, 69,236,130,118,242,172,216, 75,127,213,107,199, 30,115,158, +103,152, 76,116,123,215,149,149, 85, 48, 43,140,198, 35,119, 45, 7,253, 62, 70,163, 49,100, 85, 25,178, 74,111, 78,167, 79, 62, +243,255,243,246,102, 77,150, 36,215,153,216,119,220, 61,150,187,228,158, 89, 91,119, 85,119,161, 1, 98, 33, 8,136, 20, 69,202, +134, 52,141,105,180,204,140,164, 87,189,202,164,127,130,191,162,135,249, 5,122,210,152,108,104,154, 25, 17, 52,114,200,193, 16, + 4, 8, 18,141, 94, 81,107, 86,229,114,183, 88,221, 93, 15,190,132,187, 71,220,172, 34, 69,170,205,218,170, 43, 59,151,155, 17, +113,253,156,243,157,111,137,118,222,225, 90,167,170, 43,148,229, 12,187,221, 14,164, 57,102,229, 12, 93,219,122,142,196,174,218, + 34,207,115, 8,145,161,174, 27,116,157,153,244,123,155, 41, 48,184,210,153,166,145, 19,131,236,122,200,222, 64,247, 74, 41,200, + 94,130,200,236,211,251,174, 71,198, 5,100, 32,129,236,186,222,120,206,247, 6,189,224,140,161, 15,238, 29,113,238,119,237, 70, +205,160, 61,121,213, 61,154, 89,150,163,235, 90, 67, 80,148, 29,238,223,127,128, 23, 47, 94, 66,169,222, 15, 96, 90,255,127,215, +146,255,157,139,250, 8,181,140,143,184,125, 19,242,126, 18, 29,249,149,155, 71,140, 24, 77,119, 4,122,146, 9, 16,123,107,236, +203, 68, 79,125, 69,136,188,243, 91, 74,126, 75, 93, 65,211,223, 37, 1,222,247,214,227,176, 49, 17,142,172, 54,217,173,220,101, + 19, 75, 19, 69, 58,173, 45, 24,187,202,121,152,125,194,116,102, 50,233,141,226, 68,181,189,141, 6, 37,251,114,151,219,124,215, + 92, 56,201,248,199, 24,102,159, 42,244, 90, 71,217,227, 72, 47,126,192, 40, 14,165,102,233,212,144,250, 8,135,235, 0,189,119, +130,215,251, 9, 20,129, 85,111,228, 54,239, 97, 35, 68, 15,167,231, 63,164,209,182,206,176, 65,147,247, 25, 15, 33,248, 73,223, + 56, 29,167,152,249, 20,174, 81,131, 71, 19, 36, 16, 68,187, 82,231,103, 28, 22, 41,179,215,141,141,112,210, 27,155, 22, 35,103, + 14, 2, 10, 60,229,137,123,194,221,124,177,192,118,179, 1,231,132, 94,106,143,230,180, 77, 23, 77,192, 89,150,161,237,187,104, +229,146, 38,139,133,126,239,140, 15, 9,113, 74,107,144, 11,146,153, 34,193, 4, 11, 33,173, 13, 49,206, 77,152, 33,219, 53, 13, +179,137,208,159, 52, 9, 10, 46,217,141,141,144,140, 65, 31,111,166, 79,231,123,158,238,218,195,176,151,176, 73,113,218,116,105, + 21, 19,225, 25,203,236,193, 72,211, 3,140,221, 39,107,204,230, 51,236,182, 59, 48, 65,232,187, 22, 69,158,225,250,234, 13,120, + 46,160,146,176, 45, 70,100, 88,225,129,175,121,170, 78,112,171, 36,157,120, 7, 56,164,195, 65,238, 74, 41, 52,109, 13,217, 73, +128, 56,142, 79,142, 32,251, 14,117,109, 12,108,148, 6, 62,252,240, 49, 46, 47, 95, 3, 26,216,109,183,145,127, 63, 35,142,251, + 15, 31, 34,203, 50,108,214, 43,220,220, 92,227,240,224,208,163, 58, 70, 2,167,209,180,134,232, 87,215, 53,184,232, 81,150, 37, +242, 34,179,222,252,150, 5,111,191,130,115,110, 17, 36,237,147,247,156,147,157, 12,136,109,204, 54,135,121, 38,208,245,189,105, + 54, 64,102, 21,226,188, 16,200,204,148,125,215,197,132,221,116, 4, 11,162,120,153, 61, 51,186,182,195,118,187, 69, 81, 20,184, +184,255, 16,175, 95,252, 58, 24,132, 66,228,237,255,135,145,157,246, 20,244,125,101,137,222, 5,211, 15, 5,157, 72, 89,142, 77, +178,230,212, 24, 23,107,210,160,212, 68, 38,174,198,147, 31, 75,218,220,196,229, 51, 12,131, 97,227, 53,241,132, 28,154,136,141, + 82, 50,166,146, 63,205,160,194,141,117,232,123, 71,139, 6,176,252,200, 28, 68,143,119,225,225,174,124, 95,214,120, 10, 3,251, +226,226, 28,237, 66,246,246, 8,218,208,113,231, 22, 68, 36, 78,247, 90, 83,251, 95,102,157,177, 88,224,242, 21, 66,215,225, 20, +197, 6,105, 16,226,196, 29,167,101, 14,181,175,227,169, 40, 92,183,132, 19,154,242, 12,233,193, 13,140,153,184, 76,145,217,216, + 76,243, 47, 99,194, 59,122, 13,242, 22,242,187,114,207,182,182, 4,165,184,184,210, 16, 69,154,172, 44,120, 4, 37,219, 67, 76, + 3,100, 89,198,138, 17,122,173,209,219,120, 2, 69,128,132,134, 36, 13, 9, 29, 73, 88,180,221, 19,250,199, 59,117,182, 11,255, +117, 7, 70,164,133,101,123, 26,166,119, 63,155, 41,100,236, 51,223,161,160,108,146, 25,105, 6, 37, 53,202,114, 6,173,164, 13, +132, 49,100, 53,165,123,244,157, 10,144,150, 80,165,160, 39,214, 41,227, 61,186,111,156, 0,127, 47,133, 16, 6,138,117, 5, 53, + 66,143, 44,207, 65, 2,117,221, 24, 93,182, 71, 5, 6,205,185,176,161, 32,254,185,116,104, 68, 50, 73, 26, 67, 24,128,113,138, +216,244,161,142,223,188,183, 76,250, 27, 35, 14,165,198,174,127, 97,147,228,159,103,251,227, 57, 49,100,140, 71, 8,142,121, 46, +226,216, 28, 14,243, 28, 49, 11, 98,106, 2,138, 60,199,102,179, 66,179,171,140,171,166,224, 40,103, 51, 92, 92, 60, 66, 91, 55, + 86, 29,161,124,179, 34,132,128,234,250, 0, 70,102, 72, 33, 61,206, 5, 14, 15, 14,146,235,236,246,208,176,124, 1, 99, 46, 4, +198,240,244, 27,159, 64,129,176, 94,175,209,182,198, 57,112,185, 60,196,102,183, 69,211,214, 88,111,214, 88,204, 22,224,196,192, + 56,199,197,253, 71,248, 39,255,213,127, 13, 33, 24,158, 61,251, 26,109,219,224,228,228, 4,173,141,128, 5, 17,102,179, 25,178, + 34, 7, 99, 28,139,197, 1,202,162, 68,215,214,168,171, 45,182,219, 53, 14, 15, 14,112,114,124,138,131,229, 17, 56, 19,158, 85, +159,137, 28, 90,154, 85,140,200, 4,164,247,213, 31,144, 58, 77, 26, 76, 0, 74,182,200, 56, 96,251, 70,115,173, 8,232,161,192, + 50,129,114, 62, 3,227, 60, 50, 60,130,158,242,183,176,123,245,174,179,100, 56, 66, 83,247, 88,175,111, 80, 22, 28,243,229, 97, +196, 68,139, 92, 37,137,254, 81, 11, 58,238,210,159, 79, 41,125,236, 14, 93,211, 29, 5,157,140,212,207,240,139,147,177,208,165, +171,165, 5,157,141,175,215, 36,106,155, 12,144, 26, 38,108, 69,123, 56, 14, 35,162,118,186, 55,103,108,104,206,181,191, 12,230, +235, 83, 71, 57,231,205,145, 34,217,140,216, 52,251, 61, 50,117,153, 96,182, 79, 65,239, 83, 23, 61,133, 54,238,140, 38,197, 29, + 49,174,110,239, 78,241,142, 77, 91,102,166,158,216,109,235, 52,220, 32,133,104, 38,108, 21, 49,106, 52, 18, 56, 37,244,253, 78, + 96,104,207, 66,143, 38,245,116, 71, 73,241,183,138,204,100,152,111, 10, 6,195, 7,242,240, 99,248,117,147, 13, 14, 5, 90,110, + 98,166,120,105, 61,226, 43,164,200, 72, 56, 61,134, 36, 35, 23, 34, 97, 45,193, 34, 20,198,203, 16, 35,105,135,142, 67,104,244, +132, 7,213, 88,219, 52, 13, 59, 5, 95, 16, 9, 40,166,140,105,238,144,132,140,214, 43,174,232, 43, 43, 5, 19, 57,234,166, 70, + 38,184,153,124, 92, 33, 83,122,114,133,226,244,225,169, 35, 92, 68,216,115,112,188,157,214,149,210, 9, 31,130, 76,220,104, 64, +244,116,133,147,115,142,237,166,178, 86,172, 58,120, 6, 7,255,127,178,147,149,227,121,248, 0, 23, 43,223, 83,206, 89,143,143, + 29,238,122,187, 94,208, 58,137,191,181, 22,176,108,114,181, 49, 29,145, 73,100, 72, 92, 93,215, 97, 4, 73, 57, 55, 51, 77, 9, + 59,215,233,113,205,127,103,121, 9, 46, 24, 30, 62,249, 24,243,249, 2,155,237, 26,154,200,144,238,148,142,242,231, 51, 33, 44, +147,220,161, 70, 67,193, 98,108,248,239,245,102, 61, 66, 23, 24,227,222, 36, 71, 3, 88, 44, 15,144,231, 5,214,171, 27,172,110, +222, 64,107,160, 44,103,200,243, 12,154, 8,155,213, 53,164,214, 56,152,207,209,182, 13,178, 92, 64,228, 51,252,240,135,191,131, + 31,255,241,191, 69,189,219, 64, 1,216,213,141,153,108,103, 51,232,182, 67, 93, 85, 0, 12,170,144,101, 57, 86,155, 13, 4,231, + 88, 46,150,216,238,182, 40,202,194,146, 47, 9,235,205,218, 19, 14,133, 48, 49,172, 69, 81,162,105, 43,127,214,105,251,123,154, + 51,128,123,146,164, 10,204,108, 92,243, 51, 24,201, 40, 48, 38,188,231,188,118,249,242, 9,154,233,120, 26,222, 22,217, 70,224, +106,165,176,221,214,200,178,107,156,221,191, 64,211,212,232,218, 38, 34, 37,142, 72,105,255, 40, 85,253, 31,144, 72,231, 38,244, +128,221,238,127,130,226,201, 55,210,190,145, 33, 27,119,236, 21, 72, 83,123,243, 9, 50,156, 98, 9,235, 40, 10,131,161,233,243, + 60,173,146, 65, 42,230, 62,222, 91, 52,157, 7, 13,130, 24, 49,211,195, 47, 78,131, 84, 66,131, 18,232,136,168, 22,201,207, 38, +246,224,145,205,168,222, 15,229,135,235,234,116,239, 59,197,200,158, 52,121, 73, 47,184,158,216,173, 39, 90,195,148, 88,229, 15, +189, 9,144, 52, 53, 0, 24,235,178,227, 29, 76,120,230,197,210, 52, 10, 36, 11, 97,130,216,176, 7,245,164,190,196,250,193,124, +140, 39,170,129, 16, 86,103, 32,206, 18, 3,151,113,103,151, 58,246,249,125,180, 35,104, 48,147,123, 77, 74,155,169,157, 98,252, + 39,244, 66,223,183,166,137, 72,169,204,201, 64,166, 9,163, 58,102, 80, 6, 84, 65, 36,136, 8,121,185, 93,170, 21,159,154,218, +137, 6, 15,117,198, 53, 52,122,204,242, 5,154,205, 14, 89, 94,160,237, 58,243,251, 56, 13,187, 48, 94,221, 14, 65, 16,156,129, +250,152,139,193,236,247,100,156,143, 92,236, 52,153,253,165,249,187, 75,105,179,207, 48, 83, 16, 60, 44, 78, 26, 74, 1,235, 85, +133,190,239,124,250, 87,168,102,112, 44,105,165, 20,200, 78, 97, 14, 5, 48,147,135,233,230,157,131, 29, 11,210,182,194,207,117, + 82, 62,173,172,169, 16,148,253,147, 70, 65, 52, 83,249,215, 38, 40, 36,162,234, 67, 43, 64,216, 9, 71, 58,111,247,232,145, 24, +203, 90,190,245,141,111, 97,181,171,113,125,115,133, 55,111, 46,209, 55,207,112,124,126, 12,173,156, 85,185,138, 9, 93,182,169, +114,240,116, 72,108,158,138, 6,205,178, 44, 96,244, 27,157, 59, 49,194,241,241, 25,170,122,135,166,170,113,112,176, 68, 89,204, + 76,193, 39,224,246,246,198, 41,160, 32, 88,189,164,120,176, 0, 0, 32, 0, 73, 68, 65, 84,102, 93,239, 12,255, 98,150,229,248, +229,223,254, 53,170,237, 26,125,111,118,218,194,146, 44,171,237, 22, 7, 75,179,167,111,219, 22, 85,181,179, 72,157,185,102,171, +109,133, 60, 43, 80,239,106,228, 5, 80,148, 51,204,202, 18,117, 85, 3,224, 80,189,209,189,183,109, 99, 60, 19,154,202, 91,207, +122, 73, 25, 52, 24, 19,232,149, 2,227,153, 97,226,107,133,140, 17,164, 54, 57,108, 36,114, 27,241, 42,145,205, 10,100, 90,160, +169, 42, 31, 6,212,247,246, 89, 34, 66, 15,147,241,174,181, 6, 19, 28,188,200,161, 58,227,101,127,112,124,132,174,239,209,214, + 53,238,221,255, 0, 47,190,254, 10, 10,189,143,215,133,126,183,211,232,223,251,159, 9,212,152,212,254,198, 93,179,116,204, 10, +139,193, 32, 73, 35,210,147, 36,230,189, 11,102,227, 8, 20,213,132,125,236,118,114,207,125,128, 10,140,145,201,100,144, 28,229, +135,208,222,193,249,174,248,243, 41,196, 68,220,149, 17,238,138,120,148,173, 30, 30,216,129,132, 46,205, 66,143, 8,116,233,238, +156, 81, 76,108,211, 83, 23, 53,248,127,148, 78,152,241,198, 98,159,148, 41,114,241,210,177,140,141,238, 32,103,236,135,151, 82, +255, 93,218, 99, 31, 60, 48,153,245,228,206, 55,102,246, 13, 78, 78,137,199, 92,148,168, 21, 23,202,208, 11,128,152,133, 95, 53, +130, 61, 52,108,196, 37, 69,149,113,170,136,251,201, 59,124,179, 96,240,169, 30, 19,253,227, 29, 43, 37,196,193,169, 70, 34,253, + 88,132, 32,248,192,133,208, 66, 55,148, 81,134,215,149, 77, 56,185, 77,239,185, 67,115, 26,165,245, 72, 51,206, 18,227, 15,247, +249,157,148,129,127, 56,121,246,188,147,166,249, 9,221, 50,204, 83, 6,188,177,120, 29, 56, 8, 4,123, 64,211, 64,196,209,214, +219, 93, 42, 5,206, 50, 52, 85,237,205,101, 98,139, 87,179, 22,113,214,177,126,178, 15, 16,129,200,161,206, 74,221,116,192,184, +151, 74,123,153,158,116,114, 42,140,205, 48, 82,146, 97, 24,227, 26,101,175, 35,150,145, 97,178,241,221,255,143, 82, 18, 44, 35, +124,245,245,231, 96, 74,162,111, 59, 40, 6,220,191,255, 33, 62,253,244,111,134, 73, 74, 15, 25,215,225,116,234,154, 39,103,255, + 26, 43,153, 88, 68,250, 11,117,247,121, 57, 67, 46, 56, 86, 77,131,217,108,134,190,239,208,245,141,249, 92,105,246,233, 32,133, +217,242,216,166,186,221, 26,146, 37, 3,170,106,139,197,114, 97,238,145,253,189,165, 26,194, 92,214,107, 35, 95, 43,203, 18,155, +205, 6,140, 51,156,158, 94, 96,179, 93, 65,245, 18, 77,211, 34, 47,102,168,235, 29,132, 16,104,219, 14,139,229, 2,109,219,161, +237, 90,212, 77,141, 89, 57, 3, 72, 34,203, 50,116, 93,103, 11,125, 11,173,148,149,187,101, 0,148,125,166, 56,250,222, 12, 30, +156,219, 70, 72,105,136, 34, 71,215,119, 40,242, 28, 77,219,249,130,110,136,153,166, 9,231,130, 7, 40,170,101,212, 43, 5, 46, + 4, 24,231,144,125,143,172, 40,161,165, 66,211,109,177, 60, 60, 48, 9,119, 8,220, 5,255, 49,134,243,247, 97,161, 83, 28,232, +245, 62,109,197,212, 52,236,199,233,176,115, 32,231,179,193, 35, 36,244, 46,148, 87, 97, 68,105, 74,234,194,152,255,226,253, 72, +238, 72, 61,189, 11,233,222,123,253,237,249, 62,157,210,166,247, 44,226,167, 24,233,108, 26, 50, 15,187,136, 73,111,121,134,216, +150, 48,129,109,163,102, 99,194,153, 13,216,175,113, 30,101,246, 38,241,150,216,243,235,236,187, 88,147, 58, 65, 61, 38,193, 13, + 55, 44, 76,235, 26, 95, 88,247, 57,238,167,187,131,107, 12, 31,199,161, 32, 67,163,224,222, 94, 44, 38,209, 36, 70, 63, 68,136, +228, 96,126,183,108,167,255, 94,199,250,103, 29, 2, 62, 54, 49,140,162,134,194, 66,119,129,169, 69, 24, 39,232, 13,106, 20, 65, + 90,196,129, 52,121,111, 3,237,141, 79, 83,103, 63, 29,229,186,135,136, 69,124,141, 13, 68, 29, 22, 27,247, 43, 48,206, 70,164, +181,208,159,158,236,118, 23,208, 40,242,220, 78,230, 49,207,195,105,239,149, 82, 46, 61, 17, 92, 91,243, 22,107,237,153, 54, 12, +227, 55,171, 33, 47, 9, 63,245, 42, 48, 78, 16, 22, 38, 29, 76,122,134,139, 90, 53, 29,234,166,182,172,237, 97,119,201,185, 8, +173,247,163,221,168,187, 48,220, 78, 91, 62,114,211, 61,139, 80, 86,130, 8, 48, 61,172, 8, 56,231,222,154, 52,253, 29,210,235, +150, 54,113, 3,121, 46,224,152,216,247,169,178,144, 59,211,230,238,170, 32,209, 44,109, 84, 25, 17, 94, 93,190, 70,215, 52, 6, +143,200, 56,238,157, 93,224,246,246, 22,245,118,227,127,182,210,166,144, 85, 85, 5,169,212,128, 68, 76,172,191, 98,103, 99, 29, +153, 42, 49,102, 32,241,174,235,241,250,242, 21, 68,150, 67, 74,137,221,174,133,210,166, 48,159,156,158,163,106,107, 52, 85, 5, + 46, 4,110,175,174,192, 25,129, 9,130,224, 5, 14, 14, 14,240,242,213, 51,251, 94, 83,208, 96, 40,242, 18,135,199,199,216,110, +214,104,186, 22,219,186, 2,148,196,172,156,161,170, 27, 60,123,246,204, 88, 17, 43,141, 44, 19,232,186, 6,101, 57, 71,215,245, +152, 47,230, 32,192, 18,234,204,239,212,182,141,113, 51,204, 11,116, 77,143,182,110,144,151, 5,218,170,182,114, 54,147, 11,223, +246, 61, 50, 33,192, 56, 65,246,173, 85, 7, 24,121,156,212, 61, 56, 39,180,109, 3,210, 26, 92,112,112,102,146,227,156,127,255, +160,170, 32,255,188,115,110,131,140, 24, 55,164, 66,106,193, 23,115,228, 89,142,217,193, 18,109,211,160,105,118,195, 59,230, 31, +104, 72,255,251, 4,178,144,117,134,219,191, 63, 39, 95,168,163,115,113,138,217, 78, 42,220, 72,239,223,155,239,131,219, 83,159, +119,194,228,234, 46,172,149,129,241,244,164, 20, 46, 13, 32, 75,225,245,187,152,239,158,172,234,237, 82,195,194,203,104, 28,198, + 50,129, 93,120,187, 88, 29,210,245,105, 36,185, 9, 25,208, 6,194,211, 65, 50, 79, 64,188, 99, 19,169, 82, 90,143,226,222, 29, +244,233,247,149,142,197,185, 39,196, 99, 82, 91, 62, 50,144,161, 24,218,245,255, 14, 30,219,211, 89,212,176,228, 56,242,172,234, +169, 3,145,188, 20,105, 34,232, 36,240, 29, 31,180,163, 3, 44, 26,202,225,194,130, 63, 28,200, 9,124,227, 9,239,228, 31,136, + 80,238,163,181,129,141,205,245, 30,120,118,196,172,188, 70, 8, 8,206, 35,249,223,224, 79, 62,236,232,212, 4,245,109,152,152, + 66, 78, 3,129, 25,223,176,125,219,243,224,249,139,205,133,144, 64,239, 99,114, 28, 27, 77,154,227, 55,167,121,209, 66, 8,115, +136,121,249, 89,218, 36,216,221,179,167,234, 25,169,145, 75,175,242,110,113, 19, 74, 9, 67, 58, 13,140,113, 28, 9,213,206, 56, +134, 8, 3, 63,229,187, 13, 88, 85,215,190, 88,134, 13, 41, 11,130, 89,156, 9,148, 95,137, 56, 57, 84,104,147, 27, 64,230, 74, + 15,223,143, 7,187,127,119,184,112, 62, 64,132,108,138, 77,111, 13,110, 82,238, 64,184,202, 24, 14, 33,242, 14, 87,206,195,154, +105, 75,144, 27,161, 60,230, 33,121,243,230,173,207, 31,152,205,230,200,243, 2, 12,202, 68,190,170,161,113,209,118, 95,108,238, + 25,159,108, 58,226, 70,107,248,187, 16, 3, 89,181,109, 59, 40,217,225,131, 39,159, 96,177, 60,178,249,235,102,119, 36,184, 64, +223,181,168, 54, 27, 51,157,110,215,166,129,200, 50,148,197, 18,143, 63,122,138,171, 55,151,232,235, 14,196, 8,203,195, 83, 60, +126,242, 20,139,197, 2,171,213, 53,100, 95,227,104,185,192,189,179, 83,228,185,192,174,170,192,136,144, 9,243,188, 43,104, 84, +117, 3, 34,151,189,174,177, 94, 27, 24,127, 54,155, 33, 47,114,191,251, 39,102, 8,156,179,217, 12,196, 8,245,174, 66, 81, 20, +158,235, 96, 10,176, 64, 47, 37,152,205,115, 87,202,232,238,133, 16, 16,156, 33,227, 28,153,224,200,243, 12,140,113,116,125, 7, + 33, 50,187,150, 16,118,157,195, 35,226,167, 82,131,143, 62,180, 65, 70,170,205, 14,220, 94,203,139,123,247, 7,226, 30,225, 31, + 78,223,118,215,247, 74, 81, 92,102,246,225,154,238, 72, 88,115,252, 30, 50,146,209,184, 51,160,177,136,221,146,225,220,121,229, +107, 64, 90, 39,162,247,172,121,206, 85, 64, 58,100,209,217, 78, 35, 68,145, 49, 26, 49,215, 71, 40, 25,163, 73, 68,124, 58,221, +109, 56,171, 71,100,185,176,216, 58, 40, 54,234, 10, 40,102, 72,123,230, 59, 98,184, 32,140, 80, 29,165,125,237,233,236,136, 13, +121,210,184, 51,108,103, 96, 21,179,176, 72, 39, 13,132,158,186, 9, 83,222,188,193, 62, 52,149, 35,165, 7, 68,122, 32,165,110, +104, 33, 25,201, 60,244,241,190,220,188,121, 88, 16,191, 73, 65, 14, 56,243, 15, 19, 99, 12,140,179,224,115, 88,210,100, 4, 69, +203, 77,199,254, 33, 7,164,211,162,130,188, 97,140,166,216, 81, 13,140, 64,156,249, 63, 67, 18,158, 78, 72, 81,202, 66,126,209, + 3,158,122, 39, 7,145,162,148,116,223, 76, 3,220,201,210,108,240, 74, 72,214,211,164,163, 55,232,112,141, 88, 18,170, 2,191, +159,156,146,242,133, 60,187,176,200,233, 9, 54, 56,227,102,162,113,247, 4,208, 16, 25, 71,103,245,231,161,115,151,119,253, 3, + 0,206, 32, 67, 57,154,211,162,219, 2, 63, 76,184,142, 92,147, 52,180,118,141,161, 19,168,135, 49, 67,140, 83,145, 13, 42,243, + 83,179, 41,254,136,126,110, 68,196, 11, 13,104,236,235, 49, 1, 29, 49, 43, 95,250,208,147,137,128, 28,215, 16, 7,239,129, 40, +101, 46, 41,236,190,105, 13,184, 11,134, 53,192,252,140,160,152,187,231,110,135,203,134, 51, 90,107, 40,109,244,233, 89,158, 65, +228, 25,158,126,252, 9,148,150,184,124,251, 22, 82, 73,171, 79, 31, 10,187,115,236,115, 7,227,116,243, 54, 62,245, 66,211, 30, +165, 21, 78,207,239, 99,181,186,198,237,237, 21,138,114,142,131,163, 3,136,204, 20,197,213,106, 5, 13,224,233, 39,223,134, 34, +142,143,159,126, 3,189, 84,232,250, 26,159,125,250, 11, 40,109,158,149,197,226, 16,223,249,206,119,177,171, 54,216,237, 86, 96, +214, 60,166,218,109,176,217,172,176, 92, 46,177,152,207,176,152,207, 0, 50,230, 54,243,197, 2, 23,247,239, 97,177, 92,226, 96, +185, 68,219, 54, 40,242, 28,196, 24,250,174,247, 4,192, 94,246, 67, 88, 22, 99,152,149, 11, 8,110, 52,238,121,150, 69,236,115, +173,173, 89, 18,231,224, 76,160,235, 58, 8,193,205,115,105, 17, 13,115,191, 6,222,142, 33,211, 41,111,105, 59,186,167,190,241, +151,166,249, 4, 80,239,118,128,214,200,202, 28,103, 23, 23,113, 26,231,223, 65, 53, 53,133,137,107,186,195, 84, 76, 79, 20,254, +119, 21,115, 56, 99, 42, 29, 19,206,245,132,166,156,172,234, 6, 28,184,107, 66,167,184,200,235,128,236,169, 61,159,103,218, 60, + 38,180,151,142,234, 39,177, 17, 63,104,204, 33,167,168,222, 78,169,124,166, 8,232, 68, 4,190, 60, 58,253,145,187,249, 83, 12, +233,125,228,167,112,236,143,247,151,251,133,241,180, 79,103,187,135,251, 56, 76, 17,227, 95,136, 77,144,220,166,166, 39,119, 0, +222,245, 26,227,233,155, 18,153, 12, 3, 38,245,134, 73,161, 13,102, 82,243,134,225,102, 71,229,138,179,141,235, 76, 93,199, 34, +130,149, 30,188,208, 61,212,163,227,244,179, 40, 29,141,209,208,189, 98, 32,106, 14,205, 82,112, 79, 89, 80,148, 3,246,244, 84, +211,192,172,197,164,131,139, 92,195, 97, 10, 52, 69, 7,122,200, 91,240, 5,149,104,112,152,100,128,179,188,208, 20,235,231, 67, +157, 40,129, 48,182,167, 29, 38,181,120,133,128,225,160,231,131, 85,171,239,150,131, 55,161,191,190,220,232, 36, 24, 35,112,150, +131,115,142, 78,118, 32,178,153,220, 74,161,151, 18, 90, 1,109,219,122,148, 6,204,178,216, 45,148,205, 57,183, 8,134,249,153, +195,225,104,145,156,192,203,217,189, 70, 29,236,106, 60, 91, 64, 3,219,173, 49, 36, 9,121, 11,198, 2,116,248,254,140, 82, 2, +160,253, 61,156, 53,109, 72,142,180, 9,106,140,179,145,225, 76,164,169, 15,144, 45, 55,225,185, 93,188,123,189,156,115, 8, 33, +198,254,134, 90,251,149,136,155,238,152, 37, 83,142, 20, 66, 46,150,217, 62,195,142,247, 65,246,239,203,165,145,119, 17,203,144, + 21, 57, 94,188,248, 53,116, 47,135,125,191,214,200,243, 60,122,237,142,119, 16,122,185,187,134,199, 89,168, 58,107,100,199,193, + 88, 44, 22, 40,203, 18,117, 93,161,169, 76,240,202,249,217, 5,222,188,189, 4, 52, 80, 20, 5,132,224,152,205, 22,184,185,126, +139,182,174,113,123,115, 13,193,204,189,158,205,230, 88, 44, 22, 32, 70,144,109,131,235,235, 75, 3,131,215,157, 49,182, 97,220, +164,209, 73,131, 0,237,182, 21, 90, 11,113,103, 66, 64, 48,134,213,106,133,221,110,135, 94, 74,156,158,158,161,105, 90,200,190, + 69, 81,150,198,223,190,239,141, 37, 44,180,137,107, 5,208, 75,133, 60,207, 33,251, 14, 82, 41,228,121,102, 63, 79,120,185, 42, +227,220, 54, 84,218,135,193, 12,103, 8,243,195,131,227,242, 56,239,248, 56,208,137, 2,171,228, 64,117,226,214,125, 10,200,138, + 28,229,108,142,222,114, 0, 60,139,248, 93,233, 42,123, 6, 53, 23, 14,246,206,130, 30,156,115,239,234, 32, 70, 43, 37, 15,183, +179, 4, 18, 48,137,121, 3,105,151, 44,162,153,216,131, 39, 38, 79,174,160, 15, 3, 91, 26,134,196,252, 53, 99, 41,210,237, 6, +149,176,152, 7,147,185, 43,224,225,251,125,212,184, 78,201,216, 38,134, 91,126,112,114,246, 35,218,179,180,159,100,218,133, 83, + 81,168, 39,159,172,202,113,225,223, 79,120,164,241,244, 64,137,146,253, 14, 75, 62,208, 29, 86,122, 19, 16,123,106,246, 18,146, +218, 66, 13, 97,248,177,240, 70,133,208, 74,204,132,215,209,215,121,244,195,251,103,187, 41,143, 34, 4, 35, 77, 29,115, 15,128, + 51,147, 48,221,123,204, 13, 8, 33, 92, 7,177,134, 94,224,206,165,202, 85, 81, 79, 14, 99,227,224,145,168,192, 7, 31, 75, 35, + 88,211, 92,244,116,199, 20,146,157, 29, 4,164,134, 29,137,223,245,115,176, 40, 64,103,184, 43,122,196,168,165, 96, 66,211,246, + 0, 30, 38, 73,171,173, 39, 29, 77,154,238,218,164,169,101, 32, 3,181,154, 80,142,220, 51,205,149,148,232,165,180, 69,202,229, + 88, 59,194, 27,129,103, 28, 90,170, 8,126,247,235,158, 61,161, 42, 65,250,140,191,126, 30, 58, 86, 61,218, 94,249,160,150,240, + 31,211, 8,198,121,241, 32,248,103, 33,220, 99,179, 68, 98,230, 16, 9, 33,196, 56,100, 38, 92, 29, 4,133,157,130,191, 59,159, + 4,151,110,151, 22,243, 49, 43,126, 32, 26,106, 50,200,204,192,202,136,220,169,192, 20, 32,237, 74,137,195,184, 4, 42,192,104, +198,181,194,235, 87, 47, 1,169, 33,251,110, 64,212, 24, 67,158,231, 30, 49,112, 63, 91, 42,229,223,152, 44, 74, 18,140,115,195, +221,189,105,219,214, 19, 31, 79,206, 47,176,219,108,177,219,109, 32,165,196,124,121, 0,145,229,216,213, 21,148,146, 40,203, 18, + 92, 20, 56, 60, 58, 54, 62,240,153,129,173, 55,155, 13,160, 9, 23, 15, 30,160, 87,214,133,173,109,240,131, 31,252, 0,223,251, +193,127,134,139,123, 15, 48, 63, 56,194,225,193, 17,178, 44,195,114, 49,135,148, 38,132,165,151,102, 7,158,231, 57, 50, 33,176, +221,172,253,181,239,218, 14,109,219,162,156,149,104,234, 6,220, 34,104,198,147,130,161,174,107, 20, 22,158,111,219,206,250,180, +247,182,193, 81,195,128, 99,223, 75,125,111,226, 91,157, 36, 54, 92, 39, 58,249, 95,186, 66, 28, 20, 56,195, 35,155,101,217,112, +222, 41,107,173,155,101,152, 29, 44,177, 93,175, 33,101,191, 95,130,244, 30,242, 51,208,251,139,217, 52,209, 59,201,121, 83, 69, +208,176,215, 41,222,159, 51,101,225,118,223,246, 79,178,219,195, 53,174,131,218, 7,219, 90, 54,177,242,155, 66,145,200,251,154, +132,103,117, 8,153, 71, 69,124,202, 80,109,106, 21, 30, 16,156,167,134,104, 17, 50,145, 67,139,207,119, 98,250, 9,227, 46, 90, +158,197,113,218,251,111,222,123,132,113,104,132, 70,250,211,254,236, 52, 65,148, 35,140, 53,205, 3,162,199, 38, 73,105, 41, 25, + 45,117, 58, 27,138,190,142, 32, 20, 64, 71,140,247,136, 29,169,164, 47, 16, 38,113,105,152,118,132,101,173,107,165,236,164, 19, + 92,247,208,187,221, 17,235, 56, 27, 24,216,156,123,251, 84,157, 48, 67,141,108, 41,254, 24,131, 14,122, 85,243, 61,122,107,238, + 17,166,175, 65, 41,200,104,122,214,113,210, 26, 77,184, 43,141,180,171,218, 72, 60, 92,131,164, 39,158, 15,152,208, 48, 32, 33, + 83,134, 18, 70,173,163,240, 32, 87, 88,194,253,174,137,123,103, 35,178,151,123,102, 40, 40,182,254, 80, 11,228, 70,140, 11, 3, +141, 43, 13, 98, 2,109,181,139,158, 11,206,173, 77,173,213,243,242, 0, 97,113,207,163,249,158, 38,200,135, 49,242,102, 63,100, +145, 6,173,172, 70,214,238, 53,193, 56,218,190,179,159,231, 76,110,236,254,157, 27,252,156, 44, 31,130, 88,160, 34,177,132,168, + 97, 50,213,112,192, 54,247,214,212,236, 78,110,129, 11,250, 8,141,107, 28,115, 94, 7, 44,119, 71,104,147, 1, 11, 62,108,146, +180,150, 94, 63,222,118, 29, 68,240,182,215,161,149,166,253,184, 36, 13, 40, 5,174,153,181, 46, 2, 84,215, 1,185, 64,211,181, +232,165, 66,105,117,225,144, 54,247, 92, 43, 75,118, 50,141,142,118,182,175, 74,129,139,204,132,190, 88,181, 64,248,108,116, 93, + 64,254,180,168, 3, 99, 12,243,217, 2,171, 43,227, 0,167, 64,216,109,110,145,103, 57,110,111,174,192, 24,225,155,223,250, 46, +190,252,242, 51,212,187, 13,170,221, 26,103,103, 23,184, 94,221,128, 19,195,253, 7, 15,192, 52,225,250,242, 18, 93,215, 99, 75, +192,239,253,222,127,137,203,171, 43,252,234, 79,126,140,182,174,124,182,250,249,217, 25, 54,235, 45, 50,145, 97, 49, 63,132, 82, + 61,218,190,193,118,183, 70, 39, 13, 66,193, 57, 71,221,236, 32, 68, 6,185,149,216,237,118,145,202, 64, 89,247,196,210, 70,200, +138,172, 4,145, 33,192,113, 46,108, 67,106,163, 99, 25, 3,231, 4, 6, 99,117,220, 52, 13,202,178, 68,215,181,254,121,224, 60, +116, 88,132,255,187, 82, 20,104,214,205, 57,227, 26,219,197,124, 1,169, 58, 48,145, 65,245, 29,154,106,135,114,190,196,253, 71, +143,241,236,203,207,160, 85,111, 78, 7, 78,128,124,143,202,206,238, 32,196, 77,124,185,102,116,167, 82,105, 66, 93,182,231,231, +170, 96,144, 99,136,252,223,223,193,110, 31,168,103, 52, 34, 62,211,104, 77, 61,158,204,245, 62, 66, 57,238,176, 95,223,227, 20, +119,103, 45, 14,252, 75,248,193,241,217,143, 24,177,168,250,131, 16, 65, 1,251, 52,130, 81, 1,219, 99, 8, 66,123,254, 23,165, + 68,183,100, 87, 62,149, 85,206, 2,104,149,146,105, 49,206,250,198,222,102, 97, 12, 71, 98, 2,138,218, 95,236,163,239, 25,253, + 25, 91,190,134, 83,191,203,123, 54, 16,164, 5,163, 35, 79, 27,231, 38,100,246,143,156,177, 8,130,103,118,255,228, 14, 74, 95, +216,236, 77, 12,239,147,179,213,228, 66, 12, 28, 7,102,224,112, 22,117,144, 22,186,183,133,209, 59,159, 77, 48,241,117, 56,149, +167, 73, 72,129, 84, 16,251,210,235,166, 68, 10, 97, 75,148, 74,224,146,175,119,135,182,131,217,195,233, 91, 4,100, 63, 55,209, +185, 41,147, 77,240, 36, 24, 49, 27,146, 1, 40, 45,161,236, 52, 37,109,184, 74, 83,215,209, 78,155, 11, 14,165,164,119,220,139, +221,254,184,239,183, 6, 20,134,197, 22,146,204,106,194,181, 50,176, 57, 17,118,187, 30,109,111, 52,193,110,194, 20,194, 74,227, +152,117,158,243,134, 23, 44, 90, 61, 80,176,203,231,204, 56,157,153,245,194,216,206, 56,148, 28,166,239,147,148,135,228,138,165, +107, 24,124, 40,141, 45,246,161, 10,195,255,169,116,236,140,167,141,155, 28, 11,164,118,254,255,217,137,158, 33, 64,248,180,198, + 55,191,253,125,212, 77,131,182,218,161,109,154,192,167,223, 20, 26, 46, 24,242,188,244,207,101,111,175, 91,150,137,104, 26,117, +141, 71,150,101,144, 74, 98, 62,155, 89,175,117, 59,221, 75, 3,235,151,101,137,114, 86,226,250,250, 10, 7, 39, 39,104,171, 29, +120,150,227,248,244, 2, 55,215,111, 81,100, 5,230,203, 5,178, 60,195,174,222,225,254,197, 3,148, 69,129,123,231, 15,209,201, + 30, 39,103,231,200,242, 28,140, 9, 20,179, 12,159,254,226, 23,168,171, 45,218,174, 71,223,247,232,187, 22,235,245,218, 7,198, + 8,198,237,123, 93, 33, 23, 25,202,114,129, 60, 55,129, 45, 92, 48,236,182,117,196, 21,208, 90,163, 40, 10,219, 44,154,245, 78, +150,101,104,154, 26, 69,110,154,194,190,239, 60,130,224,222, 69,156,147, 93, 47, 49,243,188,250,233, 92,217,239, 79,126,165,163, + 53, 34,164, 50, 38,115,145, 71, 25,165, 82,222, 31,193, 17,207,164,148,152, 47,150,224, 60,195,102,187,217, 91, 89,167,214, 62, +251,184, 83,180,167, 82,239,247,112, 71, 68, 92,142,141,196,172,190, 92,179, 17,141,222,236,207,135,168,212,119,193,237,225, 96, + 18,231, 45, 4,110,112,193,174,159, 2,126, 80,234, 3, 61, 82,202, 76, 21,104,154,222,177,239,173,197,132, 49,185,156, 0,126, +120,114,254,163, 17, 54,207,104, 36,101,163,169, 23,249, 14,151,155,105, 41, 34,237,223, 25,236,115,236,185,163, 91,139,166,114, +208, 68,188, 36, 97,202, 8,102,172,117,166, 4, 74, 25,136, 90, 30,198, 6, 75,180,188,113, 7,197, 24,183, 16, 41,146,252,112, + 29,179,184, 35,137, 24,155,212,107, 50,206,237, 14, 71,219, 8, 74,225,119,221,220, 45,209,149, 2,105,155,103,174,131,146,104, + 15, 99,243, 38,102,254,205, 12,155, 10,229,120, 35,110,138,229, 32, 8,107,233,170, 38,108, 65, 89,146, 83, 76,201, 46, 41, 34, +147, 36,146,171,240,215,226, 26,224, 68, 80,206, 12,197,237,221, 45,105, 46,188,203, 10,202,202,164,156,131, 29,130,169,131,123, + 56,214,252, 94,240,202, 3,183,127,103,193,107, 10,139,187,224, 28, 66,112,180,109, 3,145,229,168,235, 10, 90, 42,244,210, 20, +245,222, 39,179, 89,229, 67,240, 59, 49,206,189, 46,221,100,116, 59, 82, 26,162, 32,151,240,154, 1, 10,204,238,215, 25, 35, 72, + 69,216,237,106,244,125,103, 66, 94, 0, 16,227,224,121,102,254,116,210, 60,231,203,157,172, 75,204,239,111, 29,227, 24,129, 11, +138,200,122,145,250, 84,235, 81,146,155,151,190,217, 34, 75, 1,129, 77, 43,229, 11,186, 59,240,116,210, 32,132, 77, 88,168,176, +243, 4,203,136, 89, 27,232, 63,165,246, 14,144,195,174,129,225,240,232, 8,219,237, 14,235,205, 6,135,135,135,168,171,106,216, +169, 91, 95,244, 89, 57, 67,150,229,144,210, 22, 78, 41,237,238, 88,249,103,192,185,229, 41,165, 32, 56,247,177,185,195,142,211, + 52, 63,187,122,103,158,119, 97,244,216, 77,215,225,228,232, 4,109,219, 99, 86,230, 56, 62, 57,193,118,187, 5,215, 10,223,250, +246,247,160,123,133, 39, 79,158,224,217,139,175,112,123,125,133,170,169,112,112,112, 4, 16,240,236,217,151,144, 82, 35,207, 50, +124,244,209,199, 56, 61, 63, 71, 81,206,208,119, 29,182,187,141,121,110, 73,217,255, 38, 28,158,156, 99, 62,159, 99,179, 89,129, + 67,162, 40,102, 56, 58, 58,130,148, 18, 77,219, 6, 73,136,198,225,206, 56,196,105,255, 92,215,117,131, 44, 51,153,245,125,215, +129,177, 33, 79, 64,203, 30,194,229, 13, 16, 67,219,118,152,205, 74, 51,201,107, 4,241,192, 3,219,125,152, 60,195, 65,198, 58, + 90, 70,142,124,218, 7,191, 48, 16,164,146, 56, 58, 62, 70, 83,213,232,155,198,153, 7, 14, 46,104, 52,232,148,137,104,188,210, +158, 82,148,197,210,166,253, 54,177,216, 19,217,188,111,140,100,202,242,193, 7, 66,220,164, 28,149,177,152, 8,103,205,189,220, +238, 60,156,206, 35,103,203,132,171, 53,170,155, 83, 68,185,196,228, 45,228,154, 77, 22,115,188, 95,241,247,111,171,131,211,179, + 31, 69, 12,219,176, 74,167,193, 43, 20, 76,194, 68,119, 94,210, 52,248,130,167,133, 64,235, 73,121, 25, 77,236,194, 49, 49,221, +179,232,115,104,136, 21,213,123,246,240,123,144, 6, 23,106,144, 62, 44,241,142,221,238, 94, 18,135,172, 84, 46,231,184, 35, 67, + 7, 25,194,193,161,132,136,197,108,122, 10, 11,231, 96, 85,234,244,221, 8, 28,238, 12, 43,149,188, 57,135,255,249, 44,216,237, + 19, 34, 98,150, 78,254, 12,119,188,166,128,104, 31, 67,171,167,200, 87,251,246,231,177,231,237, 72, 42,160,109,195,192,181,121, + 91,165,191, 35,139,220,133,201,187, 21,146,149, 1,165,156, 11, 95,240, 0, 8,235, 24, 38, 56,247,211,136, 39,173,121, 83,158, +177,149,171, 35,132,213, 77, 99,246,234, 93,103,166,117,165,209,245,210,236,120, 67,246, 57, 84,148,248,229,159, 21,198,108,202, +218,128, 38,112,235,244, 22,190,225,120,128, 42, 40, 16, 86,187,198,255, 76,119, 93,179, 60, 51,223,143, 15, 92, 0,145,112, 32, + 12, 18, 96,237, 92, 45,151,128,123, 66, 35,139, 44, 85, 67,121,103,170,238,208,209,186, 7,126, 39, 78,169, 92,212,161, 2,193, +231,196,251,116, 10,204,161, 98,115,167,116, 2,211, 90,131,180, 33, 76,178, 4,137,105,187, 6, 82,118,232,218, 6,117, 83, 15, +207,161,253,126,179, 89, 1,193, 51,228,121,230, 73,114,125,223,163, 44, 10,235,158,198,253,239, 65,201,238,221, 53,218,206,210, + 86,107,133,243,123, 15,209,118, 61,170,221,206,236,207, 57, 71,219,214,248,222,247,126,128,205,118,133,229,124, 97,242,219, 25, +199,111,126,255,183,208,171, 30,159,127,241, 37,218,110,135,166,239, 80,239, 54,216,109,183,104,154, 29,218,166,195,111,255,206, +239,227,209,227,199,216,108,183,184,122,251, 6, 85, 85,227,226,254, 61, 44, 23, 75,212, 85, 11, 70, 64, 83, 27, 24,188,151, 29, +170,174,198,209,241, 41,148, 52,175,165,170, 42, 8, 97, 76,136,156,102, 93, 67,163,239,122,204,102, 51,251,124, 91, 52, 39, 51, +166, 53,206, 35, 92,218,124,119,173, 53,114,193,130, 68, 63, 51,197,182,109,135,178, 44,237,231,105,191, 87,143,223,215,174,113, +140,217,227,206,179,129, 89,249,163,147,220,101,153, 93, 87,129,112,124,114,134,219,213, 53,180,148,113,200, 8,189, 7, 59, 94, +239,153, 7,205, 1,250, 30,251,243, 17, 86, 31, 89,186,134, 5, 61,130,207, 39,166,243,177,246,220,253, 28,158, 20,127, 54, 65, +200,139,147,211,166,134,214, 17, 73,155,176,119,176,221, 91,204,105,191,231,123, 52, 88, 18,131, 72,195, 86, 34, 95,220,176,227, +208,169,101,235,120, 63, 30, 90,172,142,100, 78, 58, 14,176, 8,171,230,190,226,171,239, 40,200, 49, 35, 61,230,201,208,132,109, +105,104,211, 26, 27,201,232,201,239,225,138,125,200,246,189, 11, 81, 72, 61,204,125,154, 89,224, 2, 27, 38,162,249, 46, 57, 72, +245,146,189,244, 25,230,195,141,100,113, 81, 13, 76, 70,144,228, 12,187,156,244,116,159, 30,237, 83,131,244, 45, 47, 56, 39, 54, + 72,144,166,236,115, 39, 99,101, 17, 9, 27,117,226, 26,231, 30,201, 65, 77,162, 67, 15, 64,131, 48,120,219,248,244,137, 50, 95, +111,238,135,246,211,151,135,197, 96,223,248, 65, 97, 68, 48,109,106,247,185, 97, 14, 64, 64, 12,148,210,100,171,103,150, 69, 44, +149, 49,106,209, 42,248,126,118, 90, 80, 50, 54,161,100,100,233,220, 52,172, 66, 34, 11, 90,199, 4,215,202,194,160,214,240,135, + 52,118,187, 14, 93,219, 89,251,207, 65,219,238, 38,127,223,105, 7,166, 63, 67, 49, 54, 86,151, 94,142,228, 32,103, 11,155,171, + 32, 11,222,175,169, 2,254,129, 39,151,185,105,196, 50,200, 41, 32,200,133, 82, 64, 66, 28,233, 26,217,130,234,152,180,170,149, + 49,137,145,210,172, 51,180,210, 94,145, 1,140,217,204,142, 63,161,164,180,199,173,194,172, 40, 80, 91, 50, 27,179,104,206,160, +188,224,246, 25, 37,143,136,132,107,153,112,154,242, 41,103,156, 35,207, 11,116, 93, 7,173,153,191, 79,215,111, 94, 91, 4,128, +161, 44,230,168,118, 59,124,243, 59,191,137,162,204, 48, 43, 74, 92,220,123,128, 34, 47,192, 4,199,235,203,183,120,249,242, 37, +242, 34,199, 98,126, 15,203,165,196,205,245, 21, 62,254,248, 41, 62,251,252, 87,184,119,112, 12, 46, 50,252,236, 47,255, 28,219, +237, 22, 93,111,246,213,155,245, 10, 34, 19,248,198, 55,190,137,175,191,254, 26, 39,231,103,120,240,232, 3,180, 77,135,183,151, + 47,176,190,189, 69,150,103,120,254,226, 57,230,101, 1,193, 5,142, 14, 15, 33,123,105,178, 8,200, 64,235,235,205, 6,139,249, +124,136, 5,214,176,110,115,141,109,100,249,128,204,233, 62, 56,123, 8, 74,153, 85, 68,223,247,254, 79,119, 13,184,111, 20,220, +253,102,126,104,112, 28, 5,179,127,215, 54,253,142, 44, 26,210, 66, 8,129,188, 40,204,127,103, 57, 30,124,240, 24,207,190,248, +220,112,128,180,122,111,250, 59,233,169,157,240,190, 64,150,113, 40, 86, 84,204,163,103,114,120,111, 82, 32,179,220, 71,134, 35, + 63,157,167,231,247, 29, 25,231, 33,185,120, 79, 90,232, 20,146, 60,165, 32, 11,255,190, 15,143,190,155, 88, 56,254, 90,126,112, +114,246,163,125,139,250,168,147,160,233,253, 56, 37,209,164,239, 5,195, 51, 54,250,218,187, 38,114, 80, 40, 55,160, 36,198, 78, + 71, 12,207,240,202, 78,105,207,199, 13, 65, 8,111, 82,162, 19, 31,175,206,167,225,122, 54, 49,237,107, 11,119,199,229, 44,108, +160, 28,148,163, 45,119,137,184,241,107, 31,116,199, 49,183, 64,143, 58, 73,211, 13, 79,197,112,166,242,165,148,163,224,237,115, +199,145, 71, 49,249, 45, 40,102, 58,153,204,185, 69, 14, 20,198, 46,127,142,119,170,105,108,240, 75, 73, 67,226,140, 94,210, 76, +128,112,251, 43,172, 7,128, 6,192, 44,147, 88, 74,233, 39,117, 36,114,150,208, 64,197,229, 95,187,143, 41,169,145,101, 57,148, +150,168,106,227, 86,102,178,171, 3,203, 88,206,193, 4, 55,144,116, 48,185,147, 37, 37,121,163,158,128,239, 17,146,208,220, 1, +231, 34, 65, 59,169,176,221,236, 76,193,179,254, 0,140, 49,100, 34, 3,103,194, 76, 75,218,152,211,184,239,193, 2, 23,192, 40, +233, 45, 40, 96, 41, 65, 52,181,188, 13,189,211,245, 8, 62, 31,154, 29,223,232, 37,154,220,112,138,247, 7,154, 50,155, 3,165, + 6,252,221,249,178, 59,167, 44, 21,154, 42, 57,242, 23,116,236, 38, 72,132,163,147, 19, 60,122,242, 20, 89, 49,195,205,205,181, +189, 62, 58,146,247, 21,249, 12, 89, 81,160,237, 91,211, 12, 6,102, 65,128, 49, 20,234,186, 14, 34,203,144, 89,230, 63,231,194, + 79,161,154, 52,202,249, 12, 25, 23,129,172, 75,130, 50,129,243,139, 11,156,157,156,226,230,205, 43,220,127,244, 33, 94,189,124, +142, 47,190,252, 28,143, 30,125,132,175,190,250, 12,235,219, 91,220,187,255, 16,207,159,127,141,237,250, 22,121, 89,224,234,234, + 45,154,122,135, 44,203,240,235,103, 95, 98,187, 89,163, 15, 60, 29,148, 86,232,186, 14,219,205, 26,178,239, 81, 87, 53, 46, 95, +189,196,229,171, 23,150, 79,166,113,123,125,131,197,204,104,217,133,200, 48,155,205, 48,159,207, 61,138,194, 5,135,224, 2,109, +215, 34, 19,153,247,188, 80,106,104, 62,157,179,164,227,224,176,196,162,212,192,238,230,138, 51,206, 34,215,198,212,121,145, 72, + 39,123,118,242,153,235,174,129,224, 54,160, 8, 68,224, 34,179,251,245, 5,186,174, 71,211,212,239, 62,255,157, 10, 78,239, 35, +209,209, 59,164,106,152,158,208, 39, 72, 92, 97,198,196,168,206, 36, 38,101, 70,119,206,162,235, 50,174, 33,137,230,156, 38,164, +206,137, 68,119,114,218,102,239, 95,208,211,169, 60, 93, 51,123,230,124,242, 51,162,162,126,215,120,143, 61, 5, 29,184,195, 59, +102,130,252, 22,238,201,177,143,161, 27, 22,105, 95,164, 88, 20,140,146,238,205,211,194, 27, 75,125,246,253, 38, 58,217,161,167, + 48, 75,156,101,205, 34, 79,238, 97,178, 15,175,155,246,140,113,251,250,248, 64,120, 34, 29,239,112,152,213,152, 7, 75,208, 96, +229, 49, 38, 73, 80, 48,169,132,111,190,208, 98, 55,218,243,164,247,102,116,125,199, 16, 17, 75,100, 78,161,225, 15, 23,194, 55, +100, 44,232,114, 83,199, 37,178,182,161, 58, 48,141,160,132,232, 65,119, 49, 56, 99,140,223,147,134,156,247, 57,207, 50, 20,121, +110, 52,236,153, 48, 76, 97,123, 15, 60,196, 62, 97, 23,107,164, 94,204, 70, 93,114,212, 77,141,174,239, 12,137, 74,193,203,203, +136, 8,228, 52,218,158,155, 16,134,182,132, 59, 74, 68,211,163,119,244,183, 81,186,142, 99,177,221, 25,249,154, 84, 50, 50, 61, +202,178,204,223, 47,198,200,203,250, 40, 49,124, 97,129, 3,156,151,209,241,216, 97,205,255,190, 9, 91, 61,154,116,162, 24,206, +187, 57, 45, 14,249,136,118,241,218,132,207,132, 16,121, 8,229,115,139, 84,132,150,181,240,251,246, 36,201,143,140, 15, 57, 0, +220, 92,189, 49,240,187,178, 48,177,221,206, 43,109,216,226, 69, 81, 64, 41,105,160,228, 96,101,230,124,210, 25, 99, 40,139, 2, + 74, 25,109,183, 6, 48,159,207, 33, 56,199,225,209, 41, 46,238, 61,196,118,179,134,146, 18,156, 51,100, 89,137,111,127,251, 55, +241,221,239,124, 15,191,243,195,223,134,132,198,243, 23, 47,113,120,124, 2, 45, 21,170,166, 70,145,151, 56, 58, 57,193,179,175, +190, 68,211, 52,184,184,247, 8,125,223, 99,117,115, 13,165, 20,170,170,178,247,201, 76,204, 89,102, 34, 87,101,111,136,106, 82, + 41,131,204,200, 14,121, 38, 80,206,102,104,234, 6, 74,105,156,159, 95, 0, 96,104,154, 26, 77, 91,163,174,107,228,121,142,195, +195, 67, 75, 90, 52, 83,178, 16,194,175,231, 66, 25,229, 32,107, 51,207, 84,102,159,215, 20,165, 52, 83,187,142,252, 62,220,179, + 25,106,217, 29,239,103,112,153, 51,223,103,240,252, 7, 56, 23, 38, 40,199,154,102, 49, 34,200,190,199,241,201, 41,214, 55, 55, +145,137,210, 94,197,147,222, 83, 35,222,123,135, 78, 19, 75, 94,187,203, 35,101,207, 97,134,208,213,141,238,144,190, 41,119,102, +167,239,151, 9, 3,176, 17, 73, 46,145,168, 17, 38, 6,200,116,103,158,202,173, 39,180,235,123,213, 43, 83,255,178,152, 4, 76, + 68, 16, 81,184,202,158, 27, 17,122,174,179, 4,138,165, 68, 78,133, 64, 78, 52,154, 14,247, 65, 42,251, 18,211,136, 38,183,116, +174,131, 28, 92,188,198, 5,123,122, 45, 67, 73,114, 14, 75,215,192, 73,177,199,176,135,178, 81,164, 20,165,102, 13, 18, 20,231, +149,174,153,221,135,135, 97, 44, 86,162, 4, 2, 36, 20,200, 78,157,222,183,204,198, 90,105, 70, 17, 34, 98,136, 51,218, 79, 61, + 67,174,188,158, 76,150, 75,119,233, 20,202, 69, 44, 12,158, 58,173,165, 7,124,104,132,162,137, 34,146,156,146, 50,122,160, 20, + 57,127,248,129,152, 5, 31, 56, 50,193,214,156,224, 81, 64, 15,238,114,148,192,114,166,139,101,126,106,229,156, 3, 82, 66, 56, + 7, 44,198,192, 68, 6,146,202,222, 27, 62, 92,150,132,176, 23,122,223, 19, 51, 41, 96,142,136,228,253,225, 45, 91, 24, 48, 19, + 49,131, 49,166, 97, 19,207,100, 40,173, 35, 11,111, 83, 72, 46,115, 83, 44, 49,180,178, 31,228,137,246, 23,245,218,107, 27,228, +163,149,130,114,175,209, 78,252, 74,107,240,208,224,201, 91,219, 14,209,183,238,218,132,192,103,104, 36,163,148,138,248, 42, 10, +227,213, 76,186,194, 24,120,108,195,186,198,233,215,157,219, 30, 33, 14,212,240,193, 47, 62, 10,213,192,235,176,107, 22,218,179, + 79, 19,156,225,230,250, 45,170,202,216,161, 54,114, 55,152,199,216,139, 41,161,193, 69,102,138,157, 53, 3, 50, 81,172, 6,246, + 55, 90,238,194,174,188,128, 76,100,200,139, 18,189,214, 88, 28, 28,224,252,222, 35, 92,189,126, 5, 34,142,229,193, 1,154,106, +135,243,139, 11,124,255, 59,223,197,195,135, 31,224,245,245, 37,126,250, 87, 63,195,217,233, 25,126,254,151, 63,193,253, 7, 15, +145,151, 37, 62,253,197,207, 33,242, 18,128,194,147,167, 31,227,179, 79,127,137,140, 11, 44,151, 75,116, 93,139,123,247, 30, 64, + 74,141,217, 44,199,183,190,243, 93, 84, 85,141,215,151,175, 64, 0, 46, 95,191,134,148, 61,170,170,198,237,141,217,181, 83,219, + 34, 19, 70,119,127,187, 90, 65, 43,133,197,124,134,237,174, 66,223,118,200,139, 18,162, 44, 49, 91, 46,145,229, 57,218,186, 70, + 85,213,158, 55,225,154,105, 97, 27,193,182,109, 33,180,225, 24,212, 93,143, 69, 89, 64,246,157,157,168,165, 55, 8, 50, 43, 33, +229,215, 20,206,134, 90, 74, 71,130,139,207, 89,135,220, 56,158,138,227, 84, 24, 93,188, 68,193, 51,144, 86,208, 82, 67,228, 51, +116,125,135, 71, 31, 62,198,151,159,127,102, 48, 26,139, 8, 48, 61, 78,114, 11,159, 51,114,174,152,239,187, 63, 31,229,157, 19, + 64,189, 39,232,133,114,181,247,147,170,185, 9, 29, 19,239,113,242,211,178, 14, 73,194,152,150,169,209,132,207,187, 86, 99, 15, +247,187, 88,239,239, 34,130,135, 69, 52,230,167,197,239,105,177,111, 15,128, 4,178, 11,127,213,140, 49, 79, 0, 0, 32, 0, 73, + 68, 65, 84,113,186, 75, 79, 62,185,248, 72, 10,255, 29,251,146,184,149,208,251,218,129, 61, 63,134,238,182, 4, 30,117,123, 58, +136, 66,213,145,139, 82,168,115,245, 69,219, 23, 43, 4, 50,144, 32,157,206,193, 52, 92,128,217, 83, 73,133,147, 20, 17, 4, 19, +144, 48,222,247, 44, 96,201,187,106,230, 33, 79,101,205, 88,216,224, 86,228,244,189,122,106,250, 66,204,126,247,226,186,192,249, + 73, 39, 23, 45,204, 68,143, 82,236, 16, 55, 7,209,254,116,194,119,219, 79,107, 73,118,249, 36,114,147,236,109,223,165,110,117, +150,177, 74,107,200,214, 28, 88, 93,223,225, 48, 59,180, 5,203,132,185,104, 57,200,177,252, 33, 24,144, 58,221, 84,220,219, 34, +221,182,173, 47, 84,209,253,181, 47,189,200,115, 52,117, 19,144, 48,105,148,167,156, 50,103,125,247,239,174,171,225, 17,163,109, +141,140,209, 73,176,132,103,236, 51,111,166,226,200,164,238,107,133, 83, 63,104, 13, 30,216, 15,179,137,195, 73, 77,216,192, 14, +235,160,241,231, 18, 38, 66,146, 38, 50,211,149, 77,146, 35,198,160,251,126, 72, 62,211,220,239,210,157,126,220,203,214,240,119, +249, 71, 27,217,153, 77, 97,156,149, 37,250,166, 49,251, 99, 43, 33,244, 36, 69,206, 44, 81, 43, 67, 39,181, 85, 31,152,255,159, +231, 57,202,178,196,106,181,194,114,121, 96, 36, 99, 82,225,248,232, 16,121, 94, 96,179,190,193,174,217,225,163,167, 79,113,249, +234, 5, 30,125,240,109,124,242,141, 79,144,207, 75,236,154, 26,109,221,131,115,129, 47,190,250, 12,139,131, 67,172,119, 91,108, + 95,189,196, 71, 79,191,137, 87, 47,159,161,239, 52, 94, 60,123,134, 15, 31,127,140,106,187, 69, 91, 87,248,214,183,190,131,235, +171, 55,184,184,120,136,162, 44,240,239,255,237, 31, 97,187,219,130, 52,179,196, 75,137,194, 58,192, 29, 44, 14,160,230,166, 25, +187,185,189, 70,150, 27,221,253,205,122,141,182,169,204,107,206, 74,236,182, 27,244, 74,161, 40, 11, 0,240,198, 59, 93,103,204, +107,220, 61,170,235, 26,140,115, 20, 69, 1,228, 28,155,205, 6, 26, 64,219,181,166,216,106, 13, 97, 17, 16, 35,235,211,201,116, +201, 2,104, 61, 14,163,242,145,211,100, 72,162,158,228,169, 92,234,160,177, 85,102,172, 48,141,129,146, 0, 24,202,217, 18,167, +103, 23,184,122,123, 9,130, 10,220, 49,105,130, 83,165,173, 19, 38,253,221,200,112,233,122,208,187, 94, 82, 84,240,217,132, 57, +217,180, 51, 92,186, 63, 31,199,163, 82, 66,146,187, 75,162, 54, 34, 98,179,233,143,223, 41,247,157, 74, 77, 13,148, 4,163,194, +174,227, 36, 84, 34, 74,243,212,199,209,118, 72,224,219,144,128, 20,217,173,141, 71,230,201,137,112,242,162,131, 38,166,237,125, +250,120, 29,252, 88,154, 32, 96, 83, 80,140,105, 4,215, 15,147, 56, 2,137, 3,162,239, 57,192,218,129,101, 43,120,240, 43, 42, +251, 76, 49, 59,177,194, 23,251, 65,175,109, 59, 64, 75, 56,209, 54,247,216,115, 5,172,252, 68, 5, 41, 98, 8,152,241,196, 45, + 89,207, 78,133, 74,171, 36, 61,111,252,208, 58,210, 80, 88, 52, 21, 27, 18,212,248, 68, 10,151,198,216, 19,223,241, 24, 28,156, + 22,154,123, 36, 29, 79,140, 30,220,209,208, 77,253,195,172,243,156,210,241,155,140,108,222,179,249,156,216, 72,200,201,189,164, + 37,161,229, 89,134, 94, 3,157,108,172, 4,141, 71,186,108, 55,117,112, 33,192,243, 18, 77,183, 53,250,240,228,160, 73,205,127, +138, 60, 71, 93, 85, 65, 72,143,131,189,245, 52,143,196,198,147,107,109,140,106,204,202, 6,168, 26, 9,169, 53, 58, 27,161, 41, + 4,183,123, 84, 97,139,170,246,208, 42,231,220, 71,164,166, 80,161,135,231, 83,216, 59,129,186,157,158, 91, 39,239,181, 80,249, + 48, 32, 45,241,212,228,139,121, 64,188,235,165,178,150, 90,214,230,216, 60,145,131, 73, 13,140, 87,128,180,164, 61,103, 98, 35, +236,245,239,180, 33, 66,154, 9,130,199,206,149,154,176, 91,111,113,120,120,128, 89,177, 4,192,193,136, 27, 52,139,180,157, 36, +201,172, 64,236, 61, 40,139, 18,125,111, 12, 87,242,178,128,182,145,164, 90,195,232,167,139, 12,154, 8,101, 86,128, 49,142, 34, + 47,176,217,118,248,228,147,111,227,230,230, 6, 31,124,252, 9, 46, 46, 30, 96,219,180,144,175,223, 96, 87,125,133, 55,151,175, +209, 52, 53, 22,243, 37,174,174,174, 0, 45,241,228,201,199,248,244, 87,191,194,201,241, 49,116,217, 67,105,133,235,171,107,204, +115,142, 63,252,195, 63, 68,175,129,229,209, 33,174,175,175, 33, 50,134, 31,254,240,119, 33,149,198,122,187, 70, 91, 55,120,249, +226,107,188,189,124,137,251, 15,159, 64,100, 2,178,107,240,242,197, 11,204,231,115, 20, 69, 97,188,230,149,198,110,183, 69, 81, +228,232,123,227, 34,135,106, 7, 82, 10, 93,215,162, 44, 75, 16, 49,148,165, 97,250, 23, 69,129,166,105, 7,226, 27, 8, 26, 28, +179,249, 33,170,106, 13,169, 20, 4, 35, 59,133, 19,102,179,210, 6,215,192, 62, 59,202,163, 85,240,247, 80, 38, 67,151, 26,189, + 55,220,255, 51, 14,121, 38,201,173,105, 26, 20, 69,129,190,169,144,149, 37,218,182,194,253,135, 15,177,219,110,208,212, 59, 67, +112, 37,107,150, 21, 78,146,161,133,230,251,254,163,156,213,182,134,182,175,215,215, 88, 45,246, 15,136,137, 82, 75, 17,139,216, + 77, 41,172, 31,161,197,228, 56,243,137,234,231,174,233,156,146, 36, 82, 96,111, 24, 11,222,131, 16, 24, 21,122, 54, 85, 83, 3, + 11,241,192,176, 70, 68,211, 82, 64, 40,162,233, 48,240,161,128, 0,163, 68,180,253,123, 20,237,191,134,209,187,139,245, 93,187, + 21, 31,247,137,105,166,123,186, 23, 15,247,236,161, 33, 76, 92,204, 7, 75, 80, 15, 63, 59,198, 63,198, 70, 41,174,120, 18, 89, +243, 13, 23,134, 16,144,216,164,223, 95,179,129,113, 79,206,232, 69, 15, 62,240,140, 44,115,116,216,119,133,187,121, 36, 62,247, + 44,201,188, 14,187,232,176, 33, 11, 93,192, 34,147,152,160, 8,176, 64,110,165,147,189,105,154, 45,235, 24,210, 33, 33, 76, 79, + 76,118,233, 4, 62,154,198,131,105,157,238, 92,176, 99, 52, 97,102,153, 8,224, 67,211, 24, 9, 46,192,114,160,107, 13, 35, 24, +154, 91,242, 96,252,124, 25,226,212, 96,192, 81,219,180, 44,247,175,148,210, 67,149, 3,153, 42,145, 36,178, 97,215,155,190, 47, +132,117,166, 51, 77,132,217,135, 74,197, 12,180,106,179,174, 89,162, 55,215,208, 17,107,219,175,161, 70,207,168,246,134, 32, 58, + 36,190,233, 33, 89, 43, 92,203,176,224,153,149,110,154, 14,166,116, 4,178, 55, 55, 93,171,132, 60,231, 53,236,246,181, 43,255, + 26,116,148,142, 16, 21,128,224,217,116, 44,106,195,186,222,127, 95,165,146,144,189, 68, 49,159, 97,189,222, 68, 33, 67, 14, 9, +235,237,228,158, 9,195,159,224,214,217,207,216,204,154, 67,190,218,109,113,120,122, 6,165,140, 49,205,209,209,153,221,111,119, + 88, 46, 15,241,209,147,167, 56, 62, 93,163,235,141,204,235,211, 95,126,142,155,171, 27,220,127,112, 31,111,175,175,176,217,220, + 58, 33, 8,126,243,251,255, 57,222, 94,189,197,227,199, 31,225,217,175,191, 64,223,213, 88, 46, 15,113,239,252, 12,143, 63,126, +138, 95,254,234, 51,172,111,111,176, 94,173,240,141,223,248, 54, 62,120,252, 20,255,254,223,253, 27,236,182, 43, 72,169, 81, 55, + 53, 4, 19, 56, 57,191,103,147,214,182,144, 74,225,225, 7,143,113,115,125,141,203,203, 55,200,139, 28,167,167,103, 88,109,214, +200,139, 25,182,187,107, 64,183, 56, 56, 60,128,148, 6, 21,105,154, 54,178,253,237,123,133,197,124,129,186,169,131, 24, 92, 83, +136,235,202, 54,226,202,144, 71,165,148,102,231, 31,165, 59, 18,122,203,208,119,207,184,121,134, 28,121,211, 76,226,206, 2,214, +105,217,221, 51,104, 66,158,164, 47,128,189,141,106,133,214, 80,170, 67,215,103,120,244,209,199,248,226,211, 95, 66,247,157, 95, + 99,106,167, 20,121,143,120,183,105, 13,122,112,222,145,158, 38, 60, 79, 21,244,119, 16,239, 48, 49,133, 19,139, 17, 77, 29, 22, +103,218, 3,161,211,120,194,158,246, 92,121,127, 6,251,212, 36, 79, 97, 78,185,158,102,214, 67, 3,252,240,244,252, 71,161,230, +219, 27,139,220, 49,121,165,147,202, 84, 64, 75,234, 22,151,222,130,129,160, 65,193,159, 52, 42,208,161,219, 82,202, 64, 15, 9, +110, 41, 65,110, 26,206, 97, 35, 54,101,114,201, 2,216,214, 62, 72,204,146,150,136, 69,102, 32,196, 24, 52, 99,150,124, 73,193, + 3, 96, 11, 71,152,101,231,246,145,142,140,226, 92,230, 8, 67,204,228,196, 4, 78,201,132,229, 93,186,130,195, 92,133, 26,227, +196,139,156, 5,206, 96,169,226, 32,109, 14,116,224,165,237,165,124,193,228, 22,113, 37,180,158, 76,200, 75,163,110,217,158, 28, +251,161, 8, 12,201,194, 58,105, 96,117,248, 6,177, 79,178, 97, 66,231, 38,220,162, 40, 81,100, 5,178, 44, 3, 23, 2, 77,219, +153,206,218, 19, 87,116, 68,148, 51, 83, 48, 60, 51,189, 11,224,119,165, 52,100,111,139,153,141, 51, 92, 28, 44,209,212,181,217, +243, 51, 22,121, 14,184,103,128, 5,239, 21,103,244, 3, 39,129, 4,208,245, 10, 85,211, 66,217,245, 14, 23,166,225, 16,118,231, + 25,133,208,164,241,194, 4,112,102,208, 33,199,110, 54, 58,254,144,140, 55,200,233,134,208,142, 97, 31,238, 44,136,145, 72,238, +194,132,183,176, 32,179,196, 88,200,199,112,170, 4,161, 97,166,248,249, 68, 56, 70,241,234, 39, 81, 32, 24,238, 66,208,160, 57, + 18,165,189,195,173,236,193,109,152,137,236,100,188,246, 2,176, 88, 46,176, 56, 56, 52, 40,136,205, 3, 31,236,169, 9,170,239, +160, 52, 48,155,205, 33, 50,225, 11, 29, 49, 32,159,205,241,228,201, 83, 60,124,248, 1,218,182,198,102,181,194, 23,159,127,138, +186,222,161,218,237,176, 94,175, 80,111, 87, 56,191,255, 16,213,118,135,255,230,191,253,151,120,254,252, 5,158,125,245, 43,180, +157,196,201,201, 25,170,106, 7, 48,142,217,236, 0,175, 94,190,192,229,171, 95,227,224,224, 16, 15, 63,124, 2,158,113,124,254, +217,167,184,186,124,133,170,110,209,182, 29,250,182,133,108, 77, 65,222,236,118, 88, 93, 95,162,218, 85,104,219, 22, 93,215, 66, + 8, 35,183,219,238, 54, 96, 92,160,110, 27,156,158, 28,163,222,109, 49,155,205,208,117, 18,125, 47,189, 51, 28, 99, 12, 76, 8, +212,117, 13, 64,121,191, 6,231, 30,103,130,119,200, 64,237,106, 96, 64, 25,115, 26,147,182,232,146,216,204,219, 87, 97, 58, 15, +139, 70, 43, 79,135, 84, 57,210,156,121, 59,235,200, 74, 91, 8,142, 76,100,232,101,143,114, 62, 7, 35,142,237,102, 29, 16,100, +222,175,152,239,133,221,157,165, 43, 11,135, 50, 30, 39,153,221, 81,208,149,149, 67,234,119,144,222, 88,164,102, 97,254, 64, 14, + 25,235,227,159,133,145,133,242,144,187,129,253,186,114, 26, 7,184,120,230,254,132,251, 94, 88,248,137,238,182,139, 21,225, 27, + 80,167, 4,163,228,239,211, 68, 3,120,178, 14, 38,164, 77,123,181, 13, 9,227, 60,157, 52, 99,143, 93,218,243, 61, 18, 82, 3, +197, 46, 87,225, 36,158,118,119,131,246,151, 70,123,200, 48, 29, 77, 59, 36, 93,141, 39, 18, 29, 26,224, 4,172,201,240,230,144, + 66,160,125,215,158, 73,239, 39,126,198, 34,219, 84, 55, 5, 15, 59, 44,150, 40, 63,130,107,100, 39,150,208, 11,221,201,139, 66, +195,144,180, 0,187, 98, 70,193, 78,152, 7, 19,150,147, 39, 69,211,126,240,185,225,115,146,134,190,224, 61,228,141, 78, 91, 61, +230,103,198,126,225,227,129, 88,163,239,173, 68,172,235,112,126,122,142,182,235,144, 9,142,114, 86,160,171, 91,223, 40, 17,153, +130,230, 34, 83, 25, 49, 27, 30,162, 7,148, 73,202,100,213, 52,152,239, 48, 62,164,230,141,237,102,181,159,172, 29,178,213, 75, +105,118,208,118, 53, 67, 32, 84,117,107,137,126,106, 72,229,179, 80,117, 56, 37,167, 13, 25,119,114, 70,144,113,224,115,141,155, +245, 22,119,207,137,187,135,142, 80,151,250,220,147,115, 38,180,247,197, 21, 3,173,116, 76,254, 9,137,119, 1,119, 34, 92,207, +184,132, 58,101,237, 86,195,105,199,209, 54, 34,178,158,189,199, 78,191,110,244,226, 20, 92,103,219, 68,218, 70,171,239, 58,211, +176, 53,173, 13,138,209,126,245, 35, 4,183,238,108,218,114, 35,204, 78,122,179,222,224,224,240, 0,175,111,111,209,182, 45,142, + 79,207, 80,148, 37,178, 44,195,172, 92,128,103, 57, 30,220,127,132,229,242, 0,159,127,241, 57, 78, 78,142,240,252,217, 87, 88, +175,111,177,221,110,209,214,181,105,214, 5, 71, 85,213,134,124,215, 54,168,234, 45,186, 94,225,224, 56,199,151, 95,125,142,167, + 31,125,140,245,118,141,103,207, 62,195,193,108,129, 31,254,238,239,227,203,207,126,133, 79,127,249, 11,228, 57,199, 71, 79, 62, +194, 15,254,187,127,142,203,171, 27, 60,123,254, 28,111, 95,191,196,213,155,215, 32,198, 49, 43, 50,148,121,134,203,203, 87,224, +125,142,217,108,142,237,118,131,186, 94, 97,177, 88, 32, 43, 75,244,125,143,174,235,205, 62,127,189,133, 16, 28,189,148, 40,242, +194, 56,194,161,195,188, 44,177, 56, 88,162,109, 91,212, 85,133,121, 89,154,169,219, 54,111, 89,158,163,148,115,244,109, 13,217, + 53, 16, 25,247,193, 48, 6, 98,143,195,166, 6, 30,145,178, 82, 57,237, 3,122,194, 65, 73,135, 13,171,125, 34, 6,116, 72, 24, + 20,165,105, 13,145,145,128,182,174,112,126,113,129,221,118,131,205,234,202,191,147,245,123,144, 45, 70, 5, 93,177,164,234, 7, + 77,130,166,233, 61,117,146,121, 30, 84,138, 9,171,111,154,248,185, 20,237,178, 71,217,230,216, 3,197, 7,251,115, 29, 16,185, +167, 19, 65,131,172,139, 4,174,159, 84,157, 77,145,229,244,126,146,157, 24, 77, 79, 83,112,251,158,105,125,116, 28,223,105,190, + 79,239,177,114,213,241, 65, 49, 42,248,227,221,120,184, 55,119,255, 63,252, 90, 31, 41, 59, 97, 30,147,166,173,133,236,119,193, + 5, 56,152,103,238,146, 32,111,206, 48,116, 77,131,140,204, 28,148,230, 86, 49,123, 88, 17,105,104, 62, 28, 80,238, 48, 84, 42, +112,111,211,193,193, 14,179, 63,100, 68, 32, 59, 29,133,106,113,157,168, 4,148, 53, 20,145,206,209, 73, 7, 71,176,243,140, 79, + 73, 81,201,122, 37,156,218, 85, 32,223, 74, 27,138, 20,137,241, 16, 62, 99, 17,131,124,239,157,143,204, 75, 2,210, 12, 5, 67, +123, 40,197,137,210,190,134,103,180,235, 59,128, 12, 89, 78, 91, 79,237, 94, 26, 27,221, 70, 85, 0, 6,255,122,183, 38,113,215, + 67,106,233, 15,175,168, 89,210,209, 31,182,176, 26,185,152,212, 26, 44,244, 60, 15,174,103,188, 6,209,208,150, 59, 65, 4, 52, +173, 68,215,246,131, 79,187, 45,136,112, 69, 59, 40,198, 81, 74,158,253, 56,201, 33, 94,117,216,131, 14, 42, 11, 36,196,198, 80, +153, 18, 50,222,117,128,188,184,247,131, 70,162, 93, 15,155,139,148, 89,107,111, 78,184,242,136,155, 84,199,221,128,121,102, 17, +172,180, 44, 12, 44,132, 89,155,212,117, 27,182,213,254,245,207,178, 28,139,197, 2,203,197, 1,218,182, 69,223, 73, 47,197,202, + 50, 97,221,246, 56,180, 38,155,212, 87, 66, 91,131,153,195,131, 3,124, 85, 87,144,125,135,227,163, 35,176,172,196,209,209, 33, +180, 38,156,157, 26,159,246,213,122,133,195,195, 3,172, 86,183,184,185,185, 66,223,182,128,236, 76, 1,212,132,227,227, 19, 84, +171, 91, 92,124,248, 24, 63,253,201, 95,224,205,155, 75, 20,162,192,237,205, 21,150,101,129, 23, 47,158,161,239, 58,124,240,193, + 19,156, 93, 92,224, 39,127,241, 31, 80,228, 5,238,221,127,128, 15, 31,126,128,167,159, 60,197,143,255,244, 79,241,226,249, 51, +212, 85,133,147,147, 99, 48,254, 0,183, 55, 55,168,219, 22,140, 51, 92, 92, 60,192,219,183,111, 81, 87, 21,178, 76, 96, 86,150, +216,108, 54, 88, 40,137,186,174,192,185,192,233,217, 57, 4, 23,168,155, 26, 76, 41, 91,112, 51, 48, 98,216,109,182, 88, 44,140, +111, 60,183,201,115, 69,145, 3, 61,208,119,198, 96, 70, 73, 5,104, 9,217,183,254,172,114,190,229,161, 67, 28, 66, 78,132,134, + 53,235, 97,163, 20,198,208, 2,216,160, 93, 44, 88,207, 40,155,225,110, 36,162,117, 93,161, 40, 74,227,150,152, 75, 60,120,244, + 1,190,172,119,232,154,198, 75,112,226, 18, 67, 19,195,153, 43,216,147,159, 50, 76,252,154, 38,225,118, 36,131,165,222,155,156, + 54, 17,165,237, 9,200, 52, 9,151, 71,133, 53, 41,164,222,151, 93,199,179, 73, 10,167,199,142, 29, 52, 73,142,123, 39, 83, 62, +216,177,143, 67,199, 0, 32, 78,135,223, 11,179,143,244,227,225, 93,215,119,109, 74, 82,223,245, 49,196,158,202, 8,166, 36,236, +169,117,107,170, 83, 28, 72,110, 46, 65, 43, 14,163,143,244,131,140,121, 43,195, 48, 75, 56, 12, 4,225, 86, 2,162,148,134,150, + 10, 74, 26,215, 49,169,205,161,109, 50,194, 13,179,220,202, 35, 61,233,139,113,150,164,180,169,200,155,124, 50,223,218,122, 59, +103,153,201,182,230, 66,128,229, 25,152,224,113,104, 1, 13,242, 10,231,221,237,140, 83,220,223, 83,109, 48, 33,177, 14,117, 5, + 9,129,161,202,132, 91,146,123, 77,238, 64,118,111,110,135, 2, 80, 96,199,250,110,181, 1,198,132,203, 64, 99,175, 39, 96, 45, +166, 77, 68,107,200,193, 8, 85, 4,238,117,138, 76,152, 72, 79,235,101,175,116,143, 78,182,222,196,195,212, 91,211,176,116,178, +183,188, 17,138,246,233, 9,236,228,227, 88, 41,240, 64, 15, 97,119, 55,249,134, 25,226,156,152,245,207, 48,175,119, 87,153, 29, +191,146, 61, 24,231, 38,107, 27,132,140,241,248,103, 38, 72,145, 51,203, 33, 54,236, 66,163,108,248,224,158,177,240,153, 14,155, + 42, 26,163, 29, 94, 65,161, 38,226,141, 19,195,153,248,185,176, 97, 30, 28,230, 65, 39, 53,161,124, 80, 32,102, 62,135,241, 1, +101, 11,249, 57,153, 16,118,218,211, 96, 96,224,246,223, 76, 8,240, 76, 32,207, 75, 40,237, 26, 0,242,208, 62,227, 70,181, 32, + 68,102,220,253, 52, 89,203,124, 66,145, 23, 40,178,220, 35, 44,151,151,151,214, 14,150,225,225,195, 71,200,178, 12,111,223,190, +193,131,139,123,224,140,240, 87,255,233, 39,168,183, 27, 52, 77,141, 60,203, 76, 78,185,236,209,245, 18,229,193, 17,214, 87, 43, +180,178,193,119,190,247, 3, 92,111, 46,145,137, 25, 78,239, 61, 2,207, 4,206,239, 61,192,213,213, 27,124,250, 55, 63,199,111, +126,255,135, 56,191,247, 0,187,205, 26, 71,103,199,248,227, 31,255, 9,126,253,229, 23,216,109, 54,104,155, 6, 47,158, 63,199, +110,183, 1, 99,192,201,209, 17, 72, 1, 47, 95,188, 48,239,239, 44, 67,211, 26, 36, 44,207, 77, 14,251,241,201, 25,202,197, 18, +117,219, 98,181,190, 69,145,231, 38, 98, 24,129,239,132, 6, 54,171, 53,118,235,173,245,191,239,176,217,172,140,162, 70,112, 40, +173, 81,206, 74,136, 34, 3,101,194, 36, 48, 50, 30,104,204,249, 16, 66, 68,176,132,207,129, 20,103,138,188,142,206,224,176,176, +187, 65,100, 56,179,184,111, 54,187,174, 67,215, 52,232,186, 22,128, 70, 93,237,144,231, 57,206,239, 61,244,242,221, 81,182,184, + 38, 48, 48,123, 46, 82,252, 30,116,150,175,246,121, 27,158, 85,243,113,194,126,184,221, 49,219,149, 37, 66, 59,207,255, 41,226, +105,104,173,173, 3, 51,153, 8,110, 79, 77,100,246, 20,244, 1,197, 29, 38,248,116,204,137,166,113, 26,199,176,134, 63,239,174, + 0, 23,208,190,243,149,130, 73,125,212,153,211,164,158, 24,137,119, 56, 35,122, 7,131, 93,223, 9,196, 18,253, 93,100,104,233, +238,229, 93, 50,182, 52,231, 60,181, 58, 37,255,166,209, 86, 26, 49, 88,109, 38, 41, 67, 70,164, 97,204, 77,220,132,167, 52, 72, +233,128, 96,102, 73,112, 74, 25,215, 44, 7,169,219,212, 59, 21, 76,121,110,210, 98,193,127,235, 32,242, 20, 73,212,172,251, 30, + 20,238,190,131, 73, 51,132,195, 93, 71, 56, 72, 61,134, 66,232,138,134, 14, 52,199,202,198,119,186, 98,226,146,195,100, 96, 36, + 17,122,159,135,169, 88, 33,116,173,247, 24,154,220,133,219,232,176,152, 76,124, 47, 61,129,219,185, 9,176,235, 58,228, 69,129, + 92,100, 88,173,111,208,182, 77,148,199,174,237, 61,210,164,193, 56, 67,215,117, 62, 6,215,235, 77,211,213, 82,112,223,153,211, +172, 7,207,205,192, 29, 12, 92,205,220,125, 52, 10, 24,255,255,186, 78,250, 66,204,172, 30,151, 52, 89,210,151,137, 34,117, 59, +245,144,116, 72,140,129, 41, 53,236,226, 52,130,189,249,112,221,125, 54,186,107,118, 18,126, 68, 24,176,163,177,199, 88, 38,120, +198, 66, 40, 95, 37,235,151,208, 86,116,114, 50, 8,154, 62, 34, 35, 63, 83, 82,249,215,196,108,243, 89,150,133, 9, 81,105, 59, +111,195,124,120,120,128,174,239, 81,237, 54,102,130, 38,101, 56, 7, 18,152,205,231,230, 30,219, 34, 39,165,196,172, 44,177,221, +110, 0,173,113,122,118,134,237,110,235, 95,103,215,247, 88, 46,143,112,118,126,134,166,105,113,123,115,133,188,200,241,179,191, +254, 41,222,188,121,139,213,234, 10,189,148, 56, 57, 57, 70,181,221,128, 56,199, 98,126, 96, 26,106, 33,160,168,195,245,229, 13, +126,126,253, 23, 40,242, 5,136, 41,124,253,249,223, 66,100, 28,111,171, 6,208, 18, 39,199, 39,144,125,143,179,227, 19,124,243, + 27, 79,113,122,124,138,135, 15, 30, 96,121,120, 8,173, 52, 46, 95,191,192,151, 95,124,110, 86, 10, 82,162,186,185, 65,223,247, + 80, 74,163,218,109,144, 23, 11, 60,254,232, 35, 92, 95, 95, 35,207, 75,172,183, 43, 52, 77,133,243,179, 7,216,236, 54, 56, 61, + 61, 69, 93, 25, 83,164,249,108,110, 81, 51,179,122,200,243, 12, 66, 8,180,125,135,182,237,208, 84, 91,200,190,195,108,118,224, +159, 99,206, 5,150,203, 3,108, 86, 55,126,186, 22, 66, 24, 52, 79, 15,254, 8,125,239, 86,143,189,103,203, 15,239,111,151,167, +224,138,121, 98, 57, 77, 20,236,236,181, 47,250, 93,215,161,224, 28, 82,118,104,218, 26, 39,167,167,216,110, 86, 88,221, 92,121, +249,240, 64,120,195, 30,107, 57,164,227,121,100,131,205,246,133,126, 77,156, 48,251, 98, 82, 93,209,101, 48,230, 51,123,225,246, + 41,169, 90,164,120, 99, 99,248, 28,239,142, 43,223, 59,125,239,115,150,123, 7,201, 46, 93, 17, 8,111,109,153,238,214, 19,178, + 22,237,149,163,237,135,217, 39,253,217,113,135,143,111, 66,164, 11,217,224,241,154, 95, 15, 32, 45,197,128, 75, 8,213, 71,250, +234,137,125, 4,179,190,220,142, 24,161,184,182,112, 37,129, 89,157,184,178,174,111,194,102, 99, 43, 37,205, 1,109, 59,194, 24, + 61, 24,200, 59,112,147,142,133, 54, 89, 74, 36, 12, 67, 54,130,157,101,202,104, 15, 25,229, 96, 67,106, 88,120,144, 50,154,222, + 76,135,209,165,174,104,103,194,236,193,218,174, 51, 7,182,221, 7,167,214,161,161, 99, 90, 58,213,238, 43,230, 81, 44,103, 90, +140, 71,204,247,193, 66,151, 41,237, 25,219,102,141, 70, 30,113, 96,154, 60, 52,175,148,113, 32, 83,246, 30, 54, 77,139,217,108, + 1,206, 5,138, 28,104,235,218, 24,100,128,160,165,185, 57, 34,207,252,148, 33,152, 48,220, 8, 74, 51,231,141, 44,171,151,131, + 49, 16,177, 96, 47,109,167,114, 97,239, 7, 83,204, 34, 62,158,134,234, 21, 12, 68, 26, 85,211,131,101,153,111, 50,140,131,157, + 0, 83, 46,122, 55,241,106, 22,102,146,119,198, 90,218, 90,123,186,142,126,144,184, 25,105, 94, 24,145,138, 52, 61, 45, 92, 11, + 32,137, 93, 13,117,237,193,222,219,217, 25,195, 54,120, 82, 41,179,114, 72,180,254,110,229, 19,174, 83, 66,104,223,236,235, 93, +178, 33,139, 26, 54, 6, 99, 94,148,229,185,135,229,239, 93,220,195,118,183, 51,188, 16,255,250, 9,140, 20,160, 36,230,203, 37, +148,234,193, 69, 14, 16,144,103, 25,180, 54,144, 60, 0,220, 59, 63,199,215, 95,127,137, 44, 47,145, 49, 1,165, 76,129,218,238, +118, 80, 74,162,239, 59, 92,221,188,197,233,233, 57, 30, 63,126,140,215,207,191,134, 86, 10, 7,203, 57,234,202, 76,213, 77,219, +227,240,248, 24,171,245, 53, 46, 95,190,196, 39,191,241, 93,124,249,229,175, 64, 82,225,237,229,165, 97,241,103, 11, 60,126,252, + 20,213,110,141,174,174,241,219, 63,248, 1,190,250,250,107, 44, 22, 7,248,233,207,126,142, 55,111, 47,241,230,213, 43,212,245, + 14,189, 82, 38,193,172,105,113,239,222, 57,222,188,125, 13,106,107, 28, 29,159,160,170,118,168,234, 26,159,127,250, 75,207,171, + 17,130, 80,150, 51,108,214, 43,180,109,135,174,105, 77,244, 42, 49,116, 74, 65, 1,232,219, 26,187,170,130,214, 10, 71,135, 71, + 56, 56, 58, 54,170,128,166,198,237,245, 91, 64, 43,136,124, 1, 98, 12,130,103,208, 76, 32, 43, 22,168,171, 45, 56,200,146,113, +135, 60,117,179, 90,114,138, 25,233, 83,219,156,103,254, 62,101,146, 35,203, 25,155,228, 65,181,225,161,124,169,124,214,189,234, + 26,104, 33,112,255,209,135,232,219, 30, 85,181,186,187,241, 87,204, 43,132,192,100, 76,156,214, 52, 29,169,157,146,225,246,237, +200,105,250,227, 35,233,217, 93,236,246, 59,138,253, 62,157,249, 62,118,252, 59, 33,118, 39,124,186,203,101,239,142, 29,124, 60, +169, 71, 63, 8, 81, 39, 79,211,179,214,196, 84, 60, 61,141,239, 65,248, 71, 69,120,202,230, 48, 64,250,189, 77,231,251,144, 46, + 38, 47, 2, 66,158, 64,188,187,247,150,123, 32, 59,213, 13,123, 41, 73, 67, 50, 26,183, 62,200,192, 16,148, 17, 17,157,130,164, + 40,215, 33,167, 89,212, 97, 17,100, 65,247, 27, 22, 98, 0,224,118,210,114,218, 97, 76,216, 13,166, 58,227, 48, 3, 27, 68,128, +205, 12,119,242, 32,199,142,238,237, 52, 46,146, 55,114, 40,149,210, 19,186,233,176,184, 15,161, 55, 52, 42,244,119,245,223,230, + 58,107, 12,112, 9, 18, 82,205,244,247,208, 1,201,111,187,219,224,236,244,204, 4, 76,180,198,164, 69, 81, 63,209,116,104,191, + 75, 52,230, 37,210,223, 23, 7,171,119, 46, 76,199, 17,223,122, 99, 72, 2, 11,195,187, 6,139, 5, 15,113,184,103, 55,215, 2, + 80,138, 80, 85, 13, 40,203, 64, 32,127,221,221,251, 37,108, 20, 48,106,246,200, 27,212, 24,179, 21, 22, 89,119,142, 96,170,176, +161,242,200, 37,139,216,241, 26,113, 72,135,114,197, 58,100,189, 7, 59,126,103,139,171, 1,104, 41, 35,153,107,184,199,103,137, +115,164, 14, 28, 20,157,221,173,231,142,104,141, 76, 8, 72,193, 81, 20, 57,186,166,131,224, 28,219,221,214, 50,183,135,181, 7, +231, 28, 93, 91,121,254,137,200,140,215, 61, 35,134,188, 44,161,186, 6,143, 31, 62, 66,215,105,112, 38,208,181, 61,190,255, 91, + 63, 68,158,207,112,125,253, 6,229,108,142, 89, 81,224,245,229, 43, 92,190,126,137,223,250,173,223,198,171,151, 47,241, 87, 63, +253, 9,182,219, 13, 22,203, 18,125,111,130,117, 24, 52,164,214, 40,139, 18,235,219, 27,204, 23, 75, 60,127,254, 21,154,106,135, +249,108, 1,217,212, 56, 62, 58,198,193,225, 9,158,191,248, 10,130, 24,254,199,127,254, 63,224,243,207,190,192,209,225, 2,219, +205, 6,229,108,134, 7, 15, 30, 0, 90,226,203,207, 63, 71, 83,237,160,251, 14, 93,215, 98,117,123,141,229,193, 17,164,172,113, +115,115,227, 45,108, 37,235, 61, 25,150, 49,134,245,122,131, 44, 43,209,182, 13,164, 82, 40,138, 18, 68,132,166,174,188,229,111, +150,113,244,173,196,205,245, 27,220,222,222,224,254,253, 7,152, 45, 15, 32,149, 68, 91,109, 33, 56,131,236, 9, 89, 94,160,181, + 26,114, 45, 59, 64,245,222,220,200,157,211, 74, 59, 82,156, 12,236,183,101,196,171, 9,227,162, 13, 7,197,200, 52,221,116,110, + 72,120, 44,202,109,151, 82,163,169, 27,204, 23, 2,154, 96,180,245,229, 28, 23, 15, 31,225,249,215, 45,250,182,241, 6, 90, 67, + 53,230,239, 68,113, 41,153, 12,195,130, 30,147,225,166, 84, 80,227,130,238, 36,195,250, 93,187,243, 9, 93,122, 74,106, 11,147, +215,210, 93,249, 93, 83,246, 62,195, 26, 79,160, 99,211,159,175, 7,218,223,222, 51, 86,220, 13,117,211,158, 9, 92, 35, 12, 6, +152, 22, 36,191, 15, 11,222, 17,212,104, 18,241, 79,109, 93,167, 60,220, 77, 61,152,248, 21, 73, 39,218, 62,237, 61,200,125,177, + 11,180,126, 74, 43, 48, 56,167,172,160,184,186,135,194,235,202, 13,156, 8,105,138, 30, 55, 22,114,150, 45,109,114,163,101,223, +249, 16, 23,178,186, 97,101,161, 85, 37, 21, 32, 85,146, 19,239,220,231, 6,226,216,212,196,235,178,194, 71, 16,170,237,192,247, +145,218, 84, 80,116,189,229, 99,160,101,119, 58,216,112, 34, 31, 18,176,104,128,234, 3, 70,254, 93, 22,163,233,235, 30, 37,247, + 57,184, 90, 13,118,247,202,105,103,109, 33,146,100,254, 63, 5, 36, 54, 5,109, 64, 16,123,255, 26,107, 14, 99, 52,204, 57,184, + 16,232,187,206, 72,159,108,209,233,186,206,134, 99,112,244, 74,161,204, 50, 84, 77,101,204,124, 44,193,145, 51, 1,201,134,104, + 97,195,178,239, 99,117, 7, 15,119,225, 26, 74, 27, 98, 24, 51,152, 59,132, 45,194, 77, 87, 67,146,121, 99,121,254,130, 50,175, + 94, 5,168,147,219,143, 59,126, 4,188,177,134,176,135,101, 32,223,180,238, 29,189, 28, 80,153, 48,101,205, 23,107, 55,189,135, +129, 39,169,233,140,214,208,202, 16,163,140, 38, 89,121, 20, 7, 82, 66, 6,134, 61,169,202, 33,180, 12,245, 13, 93,176,138, 35, +102,164, 67, 82,170,136,176, 76, 0,122, 59, 5, 54,149,217,187, 74,219, 24,116, 93,103, 26,204,222,252,255,147,147, 35,188,185, +172,252,228, 88,230, 37,184, 16,230,153,145, 26,223,249,141,239,226, 63,253,199, 63,195,237,237, 53, 54,219, 45,186,174, 67,219, +117, 40,243, 12, 26,132,186, 49,209,166, 89, 94,224,193,131, 15,241,234,229, 75,252,242,175,127,142,156, 51,100, 39,167, 56, 88, +228, 56, 61,187,135,219,155, 21,202,249, 28,219, 93,141, 78, 73, 11,253,183,232,186, 30,164, 9,117,181, 67, 38, 56, 72, 75,204, + 11,142,127,246,207,254,103, 40,217, 97,125,115,141,111, 60,125,130, 77,211,225, 87, 63,255, 25,254,246,111,254, 26,117,181, 3, + 24,195, 98,190,128, 82, 10,245,110,139, 60,203, 48,159, 47, 32, 50,129,249,108,134, 34, 47,177, 90,223, 98,187, 89, 5,164, 69, + 14,173,185,141,158,237, 44,124,206,209,182, 21,170,106,103, 86, 74,202, 25, 20, 49,127, 94, 8,161,177, 90,173, 48,155,207,144, + 23, 37,218,109,131,205,250, 10,139, 67, 35,213, 17, 25, 67,223,105, 20,179, 25,100,223,160,235, 58, 64, 13, 43, 52,229,253, 20, +100,196, 45, 10,157, 53,157,211,166,107, 86, 57, 23, 80,106,248,216,224,133, 33, 3, 87, 78,227, 73,223,219,213, 88,223,181, 16, + 34,195,242,240, 16, 39,231,231,184,124,241, 18,164, 19,165, 69,116,102,219,231, 6, 98, 76,142,219, 39,143, 5,139, 38,242, 41, +159, 18,176, 80,118,203, 98,133,214,223,115, 58,191,115,183, 77,131,187, 91, 58, 88,186,143,167,108,118, 87,204, 83, 40,221,127, +220, 53, 20,250,238, 80, 22,130,117,148, 27,249, 56, 99,236,185,238, 9, 5, 81, 9,165, 9,229,219,187, 89,238,251, 39,115, 29, +252,125,144,126, 77,127,175, 32,108, 37,121,109,218,245, 97, 62,243, 89, 91, 62, 53,124, 4,234,208,214, 13,112,176,219,139,123, + 79,109,198,124,206,128,103, 56, 43,248,108,121, 95,124,161, 44, 36, 74, 62, 40,129, 17,179, 69, 88,123, 3, 14,109, 3, 47,188, + 70,223,202,230,148,210,129,205, 44, 69,211, 49, 11,109, 88, 49, 4,169, 32, 40,182,174,224,235,200,234,148,252, 52,234,254,222, + 75, 57,134,176, 48, 36,108,233, 0, 9,208,193, 84, 26,154,219,220,185, 23, 74,125,157,247,176, 51,195, 72, 78,114,186,101,196, +238,108,218,122, 71, 15, 31, 26, 38, 85, 41,165,201,137,238,141, 84, 39,207, 50,236,118, 13,202,178, 64, 91, 85,158, 32,228,167, + 68,202,204,138, 1, 38, 9, 79,201, 62, 30, 22,148,138, 56, 10, 74,169, 97, 37,225,100,107, 35,109,126,204, 7, 48, 76,237, 12, +219,109,227,239, 11, 11,136,118,225, 33,198, 57,247, 77,130,180,247,196,164,104,145,129, 54, 49, 40, 61,116,192, 7,225,193, 20, + 30,114, 1,148, 85, 76, 40,165, 38, 14, 23,248, 76,244,208,200, 72,135,210,190, 0,206,228,129,154, 33,253, 94,233,115,144, 74, +242,204, 51,195,161,153, 9,125, 97, 68, 54,174,207,177,237, 29,116, 43,144,231, 25,154,186, 65,158, 9, 79,188,204, 24, 97, 62, + 43,176, 88, 30,128, 24,135,146, 29,178,236, 0,156, 11,116, 77,131,139,211, 99,252,236,103,127,137, 95, 63,123,134,174,109,140, +252,178,235,209,182, 45,118,219, 45,136, 8,117,245,115, 48,145,225,227,143,159,226,209,227, 79,240,248,131,135,248,254,119,190, +139,127,245,175,254,119,220,123,244, 33,254,250,167,127,129,229,179,231,216,222, 94,225,224,248, 4,229,124,105,119,215, 12,183, + 87,111,108,179, 5,112,145,225,155,223,252, 54, 62,124,252, 49, 24, 83,120,244,240, 1, 22,179, 25,254,205,255,253, 71,248,243, +255,235, 95, 99,187,217, 96, 62,159,227,252,236, 12, 95,125,185,193,110,189, 66,155, 23,152,205,102,134,104,219, 75, 84,187, 29, + 30,158,157, 65,149,115,188,126,253, 18, 89,158,163, 40,103,104,155, 22, 78,123,208,219,194,122,255,209,135, 40,102, 75,228,156, +176,221,110, 64,204, 40, 60,160, 21,180, 50, 38, 61,198, 46, 87,160,105,106, 51, 53,211, 9,186, 78,130,229, 51, 48,221, 98,183, +190,193,242, 48,131,102, 5,242, 34, 67, 83, 75, 40, 50, 6, 77, 26,189, 53,112,202,172,231,131,128, 82,210, 78,223, 38,170,213, + 20,244,161, 81, 23, 98, 48, 15,114,198, 52,198,151,159, 5,232,169,178,107, 80,238,207,228,182,109,192, 56,247,150,178,133,224, + 56, 63,191,135,122, 91, 97,115,123, 59,164, 67,234, 32,236,193, 23, 87, 30, 79,215,251, 70,202,196,185,106,202,234,213,187,142, +166,172,247,187, 10,246,132,145,204,212,116,158,202,151,211,157, 53, 33,224,230, 4,211,245,251, 76,242,251,138, 63,193, 26,249, + 68, 49,227,227,243,149, 31,159,223,251, 17,166, 18,189, 82, 64,158,194,161,159,162, 4,179,180, 64, 15, 13,213, 20,155, 62, 77, +190, 9, 88,239, 44, 72,214,161,225,243,227,253, 8,139,187, 49, 10, 85, 92,195,133, 28, 62, 62,102,143,251,184, 82,219, 52,176, + 96, 94, 86,169, 23,171,142,175, 67, 24,177,154, 86, 41,178, 97, 19, 33, 23,193,147, 83, 92,209, 8,101, 81,220,101, 69,147,215, +171,155,169,199,164, 52,153,164, 38,101,119, 98,131,163,147, 84,202,250, 75, 43, 63, 65,203,137,194, 27, 21,145,192,124, 6,123, +136, 83, 72,166,114, 21, 76,238,251,224,117, 61, 97, 68,243,206,117,136, 14,223,200, 65, 16, 77, 32,116, 82,147,107, 31, 83,116, +164, 54,135,147, 82, 10, 15, 31, 62, 66, 89, 20,216,108,182,144,178, 51,161, 57,125,111, 38,240,128, 20,200, 57,131,130,198,114, +177,192,118,187, 49,159,227,145, 11,243,189,251,190, 7,115,209,157,196,160,236,231,120,162,154, 67, 47,124, 35,236, 2, 85,204, +231,212, 77,135, 93,213,216, 70,147, 65,219, 68,182,208, 96, 40,148, 12,186,235,151,217,244, 56,206, 77,220,166, 87, 74,216, 71, +198,145, 23,221,158,154,115,110,166,215,160,248,178, 40,185, 47,184,230,246,245, 58, 11,218,240,217, 53,164, 56,101, 15,224,216, +151, 64, 39,103,149,224,124,224,119, 80,220,246, 71,137,120,208,129, 73, 19, 60,139,223,144, 76, 1, 33, 76,138, 89,223, 75,228, +121,134,182, 51, 25,234,203,131, 67,124,252,209, 55,240,240,193,125,236,182, 45, 46,238, 63, 68, 57, 63,196,131, 7, 31, 66, 67, +227,226,252, 30,126,253,229, 23,120,246,245,215,144,170,199,209,209, 41,254,224, 15,255, 41,192, 5, 56,227,216,110,215,126,250, + 85,125, 7,104,137,123,247,238,227,112,185,192,127,252,201,159,227,139, 47, 62,195,151,191,250, 12,245,118,139,213,234, 22,125, +219,160,174,107, 60,184,127, 15, 31, 60,254, 6,242,124,134, 44,227,200,179, 18,197,124,129,223,253,221,223,195,247,190,255, 3, +168,190,199,229,219,215,120,241,242, 37,126,253,226, 57, 86,171, 21,158,127,245, 21, 86, 55,215,184,186,185, 69,223,119, 88, 46, +103,184,185,189,181,234,149,220, 48,152,179, 12,199,167,103, 16, 66,160,169,107, 28, 29, 29,225,205,155, 87, 56, 56, 60,198,253, +135, 31,224,236,252, 28,125,175,240,193, 7, 79,112,124,122, 14,158,101,216,222, 94, 99,187, 89,227,240,248, 4, 74,219, 92,121, +165, 81,150, 37,202,217,220,175,207, 22,139, 57,186,174,195,110,183, 69,158,103, 88, 44, 15,193,121, 6,173, 58,244,125,139,188, +152, 67,202, 30, 34, 19,232,101, 15,206, 57,100,223,123,229, 74,145, 23,254,188, 24,206, 85, 61, 81, 32,145, 48,222,221,249,173, + 35, 35,174, 56, 14,155,217,105, 88, 91,243, 36,195,113, 41,102,115,100, 89,134,221,102,107,154,106,127, 38, 43,107, 42,195,108, +254,249,184,105, 47,118,230, 0, 0, 32, 0, 73, 68, 65, 84,160,135,242, 76, 39,131, 29,140,190, 88,100, 80,182,151,233, 78,211, + 69,121,146,217, 78, 49,179,157, 38,165,113, 24,190, 54, 96,178,167,113,171,238,235,223,135, 0,231, 95,207, 93,145,228, 68,119, + 26,208, 16, 0,113,183, 44, 73, 79,236,197, 89, 96,250,159,238,115,247, 17,230,144, 72,217,210,201, 92, 79, 72,221,116,194,129, + 76,180,134, 44,152,186,109, 19,161,188, 29,237, 40,191, 52,112,136, 51,211, 26,172, 28,109,128, 85, 93,194,218,192,120,214,100, + 50,195,135,105, 87, 7, 90,121, 74,172,103,173, 58, 64,197,114, 49, 88,162,138,246, 30,200, 20, 67,163, 65, 49,102, 22, 26, 50, +241,146,118, 87,203, 40,218,105,135,133, 74, 71,201, 89, 3, 76, 28,234,153, 67,207,240, 33, 50,123, 26, 54,119,127,134, 48,127, +184, 95,191,171, 88,239,131,219,247, 35, 53,238,245, 5,228,134, 64, 82, 70, 52, 72, 66,152,125, 39,147, 37,227, 48, 78,158,124, + 85, 55, 53,206,142, 79,253, 53,146, 54,225,203,240, 4,180,103, 98, 3, 64,158,229,134,125, 78,177, 37,176, 11,190,209,182,248, + 73, 41,141, 81, 77,162, 8, 9,205,129,188,230,159,145,137,127,149, 26,187,186,242,211, 42,164,163, 1,186, 29, 58, 34,164,193, + 65,222, 44,210,191, 91,219, 84, 5, 8,193, 12, 73, 48,152,198,121, 96,254, 99,214, 62,195, 84, 45,149, 50,133, 55,177, 12,118, +140,122, 21, 70,179, 98,216,123, 40,192, 24,191,216,148, 51,119, 47,115, 23,126, 99,191,183, 91,239, 80,112,192,142, 34,120,225, +242,187, 1,169,180,183,112, 37, 54,208, 72,189, 38, 90, 1, 82, 42, 20,121,142,178, 88,224,232,228, 28,235,109,133, 31,255,248, +143,209,247, 45,234,221,206,248,233, 11,129,139,123,247,240,201, 55,191,131, 79, 63,253, 37,242,140,227,201,147, 79,240,191,254, + 47,255, 27,254,244,207,254, 4,183,215,151, 88, 30, 28,224,164, 62,193,102,187,129,234, 58, 48,145, 65,148,115,220,187,255, 8, +127,246, 31,254, 2,111,223,188, 2, 40,195,249,253, 7,184,189,126, 13, 45, 27,180,109, 3,165, 36, 94, 62,251, 26,191,254,250, +107,124,255,119,126, 31,117,221, 65,245, 53,126,247,191,248, 39, 40,139, 25, 94, 62,127,134,255,231,223,253,145,181, 67,101,104, +187, 14,139,131, 37, 46,238,157,227,205,219, 75, 72,169,208,229, 25,102,101,129,163,163, 99, 72, 37,113,114,118, 6,105, 17,185, +231, 47,158,131,105,224,240,240, 16, 74,105, 28, 30,158,128, 51,142,219,171, 55, 88,109, 86,120,248,193, 99,104, 40,188,248,234, + 11, 40,199, 83,128,198,245, 27,224,248,228, 28, 25,227,104,154, 26,187,245, 26,140, 24,138, 89,137,195, 67,195,116,207,243, 12, +125, 47,177, 94,175,209,182, 45, 78,207, 47,160,155, 28, 28, 18,245,110,133, 98,177, 0, 17, 33, 47, 74,236, 54, 43,112, 33,160, +164, 66,223,119,232,165,176,141,174, 8, 0, 36,231,183, 31,171, 94,220,196,228, 38,244, 56,111, 92, 71, 19, 59, 15,162,169,185, + 49,239, 0, 3,161,239, 58,244, 93,139,229,193, 33,142,207, 78,113,249,234,229, 16,192, 4,158, 12, 78, 19,137,105, 81, 49,119, +159,203,246,154,201,164,172,247,201, 84,181,187,224,244,119,217,192, 78, 76,208,163,105, 62, 49,177,185,203, 44,230,189,212, 66, + 97, 3,176, 39,128,109,152,212,207, 46,126, 52,134,181,195,238,139, 77, 18,215,210, 11,186, 47, 45, 45,242, 62, 79, 10, 62, 81, +204,116, 79,109, 92, 7, 79,235,160,177,160,113,220,220,148,153, 12, 33,238,106, 6,199,182, 65, 42, 52, 20, 18, 88,217, 89,140, + 0, 80, 64, 8, 10,117,131,180, 39, 30,150, 69,177,169,102, 10, 50, 19,175,139, 6,117, 16,254, 0,237,186,159, 97,164, 77,128, + 21, 18, 27,183, 56, 98,118,138, 50,123,239, 34,207,189, 13,102,120,200, 70,182,176,110,106, 10,210,149,220, 10,203,147,239, 56, + 55,108,108,203,138,119,137, 78,105, 33, 15,125,197,195, 73,240,174,108,224,125,114,167, 73,116, 0,177,127,120,168,187, 80,161, +245,140,142, 95,155,200,205,206, 77, 8,129,131,163, 35, 28, 31, 29,163,174,119,232,218, 22,181,181,118, 53,191, 43, 13, 54,151, +196, 32,242, 12, 90, 41,180,117, 5, 25, 52, 42,220,146,127,250, 94, 98, 54,159,153,105,198,154,197,112,193,125,126,247,168,237, +212,166,144,246,189, 68,175, 20, 54,187,202,120, 21, 48, 22,167, 27, 70,146,175, 9,141,120,176,103, 31, 38,128,112, 77, 69,131, +124,104,162,137,130,101,150,247,110,141,146, 24,211,184,103,204,115, 39, 92,227,170, 48,210,250,186, 93, 58,183, 17,159,206,207, + 62, 37,204,122,244, 34, 60,116, 35,210,231,180,212,113,176,209, 52, 97, 60,247,239,221,199,227, 15, 62,196, 95,254,229,159,225, +211,191,253, 20,235,245,218,186,207, 73,200,222, 52, 70,187,237, 6,171,213, 10,155,213, 45,142, 79, 79,241,223,255,139,255, 9, +191,252,219, 95,224, 95,255,159,255, 7,110,111, 87,184,185,121, 99, 16, 14,206,161,149,196,163, 15, 63, 66, 94,148,120,125,249, + 2, 93, 83,227,252,222, 3,124,248,228, 9, 62,255,213,223,160,239, 42, 8,193,176, 88, 44,160,165, 4,101, 57,148, 84,216,172, + 87, 56, 59, 59,199, 31,252,193, 63,197,195,135, 31,226,234,234, 13,158,191,124,137,122,187,197,213,213, 21,186,174, 65,153,113, + 92,156,159,226,234,237,149, 9,186, 97,132,163,227, 67, 67,108, 3,176,219,109,177,186,185, 70,215,182,104,172, 67,222, 98, 62, +195,122,181, 6, 49,130, 84, 29,174,174,174,145, 23, 37,142,142, 78,161,164, 70,223, 52, 40,102, 51,116,109,131,178,156,225,236, +222, 3, 44, 15, 14,209,180, 53,164,236,112,122,114,129,162,156, 65,106,141,186,169, 80,215,181,231, 31,204,102, 51,195, 52,151, + 29,122,169, 81,148, 51,104, 34,112,221,154, 51,147,103, 22, 25,233,189,125,177,203,188,119,200,148,119, 25,180,190, 28,195,179, + 21, 67,216, 49, 7, 10,193,164,206,146,161, 67, 88,158,134, 24,120, 73,130,163,147, 61,242,188, 64, 81,150,104,234,218,152,210, + 4, 59,243,240,172, 29, 72,106,108,172, 92, 66,104,209, 28,214, 15,242,126, 32,195, 11,103, 35,237,248, 36,220,206,246, 23,244, +200,194,245,142,175,245, 95, 71,123,154,130,125, 57,233,123,166,115,175,163, 71,152,215, 62,174,162,233, 57, 18,164,180, 81, 16, +189, 23,179, 8,167,118,229,113,209,166,189,187,238, 81, 50,104,112,156,143, 31, 22,134,192,188, 50,114, 19, 75, 25,136, 94,135, +237,114,194,181,246,211,122,212, 8,132, 83,188,219,167, 7, 89,231, 26, 70,174,166,130,135,151, 2, 81,164, 54, 42, 78,115,225, + 45, 37, 35,132,160,162,135, 94, 1, 5,153,236,103, 2,129, 67,129, 88,134, 90,247, 38,239, 27, 26, 96, 28, 4, 3, 79, 49,173, +193,148,180,191,135,132, 82, 70,150,225, 26, 19,206, 6,189,168,187, 18, 82, 41, 64,233,192,203,153,162,104, 68, 31,186, 18,230, +154, 35, 38,182, 56,139,213, 46, 41,198,119,217,202,190,107, 74, 7, 48,249,121,163, 68,184, 41,153, 91, 80,124, 52,145,223,149, + 49, 29, 79, 10,209, 58, 65,147,105,152,132, 70,181,221,162,204,114, 20, 34, 71,155,229, 16,140,161,147,195,239, 34,149,137,244, +108,218, 14,243,217,236,255,165,236,205,154,100, 57,206, 51,205,199,221, 99,205,173,170,178,246,179, 97, 33, 22, 10, 36, 37,138, + 82, 83, 61,221,109, 54, 82,183,153, 76,166,190, 25,155, 95,132,127, 50, 55,115,209, 61,253, 11,166, 47,164, 54,205, 72,106, 77, + 55, 73,137, 20, 73,236,203, 1, 14, 78,157,218,115,139,221,221,231,194, 35, 34, 35, 50,179, 0, 17,184, 0, 80, 56,149,149, 21, +153, 25,254, 45,239,251,188,172, 22,179,173,110,214,214, 81,184,141,223,214,247,253, 62,141, 79,246, 71,143,141,144,210,243,188, +150, 6, 87, 21,101, 39, 74,183,198,111, 54, 19,129, 29,169,135,198,152, 53,230, 87,201,118,100,191, 22, 33,186,110,214, 90, 55, +178, 22,178, 22,160, 53,215,179, 19, 0, 35,106, 80, 80, 3, 33,234, 22, 16, 64,187,170,104,196,110,109, 72,138, 92,103,178,219, + 13,190,191,214,154,200,247, 41,107,113,157, 82,170,147,231, 69,207, 97, 33, 54, 11,194,142, 16,170, 79,179,171,187,122, 1,194, +186,231, 63,221, 63,224, 87,255,252, 75,140,245,121,227,205,239,115,115,243, 10, 93, 85, 20,101,230,108, 93, 69, 69, 69, 73, 16, +132,120,129,199,112, 52,228,250,250, 21,127,251,183,127, 75, 24,197,172,150, 25,101, 81,146,101,247,104,173,121,247,247,126,196, +112,111,159,187,171, 75,206, 79,159, 82,217,146, 15, 62,252, 45, 71, 7,135,172, 86, 75,108, 85,160, 61, 73, 81,148, 68, 81,200, +106, 49,115, 25,236,202,199, 86,238,231,252,205,223,252, 53,183, 55, 87,164, 73,130, 31, 4,156, 61,121,204,242,230,146, 63,254, +163, 31,243, 15, 63,251, 5,126, 24,243,206,123, 63,162,200, 18, 62,253,244, 19,158, 62,157, 32, 21,120, 82, 80, 84,134,100,181, +196, 43, 2,242,188,104,119,211,216,136, 82,187, 72,221,229, 98, 78,178, 90, 80, 22, 57, 82,214, 65, 67,190, 91,185, 93,191,250, + 6,173, 13, 65, 24, 50, 61, 60,164,168, 10,166,211, 41,190, 31, 48,187, 87,204,231,247, 24,163, 41, 10, 67,150,101,174, 56, 49, +184,216,218,170,192,247, 60,146,165, 38, 52, 25, 66,122,224,251,248, 97, 68, 81, 20,245,100,201,173, 62,154, 67,185, 41,250, 27, +234,156, 27, 80,173,181, 65,221, 16,172,198,178,217,148,227,107,184,141,220,154, 14, 53,121,236,141,182, 71,121,144,103, 41,131, +193,136,233,241, 49, 69,145, 83,212, 89,241,236, 24,181,247, 10, 86, 65,199,194, 44,119,218,213, 26,125,148,217, 56,120, 31,244, +150,127, 87,119,254, 29,157,253,214,186,119,211,210,102,191, 67,253,142,248,214, 12,245, 93, 93,249, 38,130,125,167,140, 93, 8, +212,193,241,217,251, 98, 43,120,125,125,160, 55, 93,118,223, 42,176,203,135, 46,218,125,202,191, 4, 32,179,213,249,201, 13,251, + 66,123, 83,146,125,235, 0,219,121,181, 93,185,127,183, 59,111, 5, 86, 77, 88,139, 0,148, 68,213,157,184,134, 30,152,195,118, +199,172,221, 80, 18, 41,240,132,108,163, 75,123,239,163, 58,188,197, 19, 48,242, 20, 18, 23,125,231, 11, 24,251,134,137, 39, 81, +214, 64,153, 19, 84, 41, 42,155,225,103, 11,188,108,137,170, 10, 84,153, 18,234,146, 88, 10, 2,235,182,250, 74, 42,119, 32, 72, +209,238,241, 13,235,155,101, 75,190,171,111,208, 13,253, 77, 41,185, 29,210,210,138, 94,188,157,149, 98, 23,164, 34,191,197, 43, +248, 47, 25, 25,109, 22, 3,223, 58,134, 23,162,151,248,183,235,195,108,123,117,252,250,219, 26, 21,182,242, 61,132, 20,188,241, +218, 27,204,231, 51,172,209,100,105, 90,139,136,100, 43,156, 12,195,144, 74, 87, 4, 97,224,212,185,157, 41, 71,147,206,134, 16, +148,165, 70,120, 46,174,211,137, 31, 59,130,197,198,166, 88,255, 89,151, 24,231, 58, 28, 37, 37,139,197,170,135, 49,126,232,122, +117,211,216,148, 82,189,164, 67, 85,231,172,211, 89,223,244, 66, 99,100,255,253, 41,161,221,219, 11,169,250,212,199, 78, 81,210, +100, 12, 52,215, 52,142, 34,231, 69,239,132,186,120,190,223,218,221,122, 5,148,220, 86, 43,119,125,239, 98, 35, 4,102,179,200, +220,236, 42,214,133,131, 96, 52, 26,179, 88, 46,185,188,185,225,223,254,187,127,207,207,127,241,223, 89,206,102,228,197,138,253, +131, 41, 94,224, 49,157, 30, 99,141,174, 21,245, 6,233,249, 76,143, 78, 56, 58, 57,225,171,231, 95, 49,217, 63, 96,188,183,207, +106, 57,115, 69,139,231,241,229,199, 31,241,218, 27,223, 35, 73, 22, 44,230, 43,222,121,247,135,172,146, 37,139,249, 29, 74,185, +177,176, 82,138, 36, 73, 40,138,210,193, 89, 44, 44,150, 51, 46, 95,189,164, 42, 11,238,110,110, 89, 46,151, 78, 5,111, 45,255, +241, 47,255,130, 95,253,250,159,185,185,189,199, 15,124,130, 48,196, 88,205,225,116, 74,146,166, 96, 43, 22,179, 57,198, 10,198, +147, 61,144, 46, 50,117, 52, 26,146,164, 41,171,213,138,147,147, 83,162, 32,224,254,254,158,201,222, 30,251, 7, 71,228, 89, 74, + 81,150,156, 63,121,236, 10,254, 86, 88,107, 25, 12, 71, 76,246,167,228,105,198, 32,142, 41,138,156,229,114,137, 16,178,158,180, +185,172,117,169, 20,139,100,193,254,222, 1, 65, 16,225, 7, 1, 73,146, 32,108,233, 68,114,117, 17,103,170, 10,129,109, 87, 32, +190, 31,212, 98, 90,211, 9,121,177,237,129,222,253, 20,110,166,154,181,201,150, 27,144,151,118,229,216,164,233, 41, 85, 11, 50, +107, 15,186,144, 12, 6, 67, 42, 93,146,164,105,239,125,193, 6, 19,161,127,128,178, 65,228,236,190,231,214, 29,114,111,207,189, + 17,196, 34, 55, 59,247, 7, 66, 90,214, 68,199,141,221, 57,125,235,243,131,197, 64,119,178, 41,251,157,120, 99, 87,117, 95,239, +147, 78, 69,211, 60, 52, 19, 87, 33,182,115, 39, 54,181,111, 59,162,102,189,158, 53,204,110, 42, 10,187,222,100,179,229, 81,239, + 10,221, 54, 15,251, 77, 49,213,230,232,126,123,125,111, 92,119,210,116,217,117, 51,220, 77, 12,179,130,158, 87,111,211, 66, 39, + 91,140,170,221,138,166,179,157, 23,177,194,172, 11,150, 14,181,109,147, 95,222,229,124,183, 93,176,148,244, 90,121,107, 81, 18, +124,225, 49,242, 4,251,126,200, 59,199, 7,104,163,201,138, 28, 35, 13,105, 86,242,217,197,130,121,178, 36, 84, 62, 86, 88, 60, + 95,178, 55, 25, 17,199, 35,202, 52,101,149, 44, 80, 74,177, 23,143,240,162,128, 87, 89,201,109, 81, 98,164,196, 26,209, 91,205, +216, 7, 32, 7,235,131,124,251,131,216, 13,105,233,190, 54,221,209,176,253,151,164, 46,240,237, 4,185, 77, 91,219,183, 69,242, +110,241,226, 59,228, 66,213,174,216, 55, 31,191, 43,145,183,148,101,129,177,206,255,155, 23, 25, 90,116,196,125,245,235, 91, 89, + 67, 60, 28,180, 35,199,202,104,220,104, 68,215,126, 97,139,148,158, 43,244,116,197,100,178,199,124,126,143,173, 61,239,141,216, + 81, 87, 85, 75,224,107, 56,232, 70, 87,228,153,243, 23,119, 41,117,187,126,127,219,161, 50, 54,147,151, 6, 2,163,148,172,131, + 94,214,186, 16,139,236,195,160, 54,166,102,218, 81, 94,106, 17,113,181,182, 38,213, 23, 42, 12,130,154,102,182,222,119,154,102, +255, 94, 67,136, 60,223,111,117, 26,170,103,119,114, 14,128,102,157,211, 60, 78,253,193,233, 69,250, 54,223,167, 54,130,133,186, +101,127, 89,239,165, 27, 76, 41, 10,132, 53,204, 87, 25, 81, 24,115,123,127, 67,153, 25,188, 32,228,251,239,253,128, 56, 30,242, +217, 39, 31,113,127,119, 67,146,174,208, 85, 69, 28, 71, 76,246,246,249,232,131, 15,120,241,197,199,100,101, 66, 85, 25, 60,207, +103, 56, 24,178, 63, 61,193, 15, 67, 68,237,153,190,189,189,100, 62,155,241,197, 39,191, 33, 8, 99,170, 34, 35, 30, 12, 25,140, + 78,220,161,167, 2, 68,186,114,162, 43, 83,145,173, 74, 94,126,253, 5,195,241,148,131,163, 35,222, 59,127,196,221,205, 53,135, +227, 17,127,245,215,127,197, 98, 49,103, 48, 28, 50,136, 71,188,250,230, 27,242, 60, 97,111,111,138,240, 60,142,142, 31,177,183, +127,196,171,151,223, 80,105,203,241,225, 33, 95,125,249, 37, 43,189, 96,178,183,231,116, 26,165, 3,203,140, 70, 35,202,162, 96, +118, 55, 35, 8,125,132,148,124,253,197,231, 45, 31, 36, 12, 67, 4,150, 87,223,188,224,230,246,134,209, 96,204,215,183, 87, 76, + 15,143,248,222, 59,223, 71,249, 62,175, 94,124,213,174,101,164,148, 20,121,202,245,213, 37, 7,211, 67, 70,163, 49, 82, 72,238, +111, 47, 8,163, 8, 37, 61, 6, 81, 76,170, 13,165, 21, 40, 95,181,160, 30,247,218,154, 13, 43,152,105, 59,226, 38,170,181,251, +255,251, 77, 31, 91,174, 8,165,104, 99,140,141, 49, 14, 99, 91,105,132, 84,148, 69,134,242, 61,246, 14, 14,201,146,148,197, 98, +209,102, 6,108,254,165,133,218, 88,235,202, 29,205,167,216,233, 73,127,112,156,254, 29,123,245,205,239,221,185, 43,127, 96,223, +190,233, 89,223,217,189, 63,224, 0,151,221, 18,202,174,131,165,118,119,241,235, 51,169,231, 90,107,174,255,244,248,236,253,110, + 8,202, 90,197,184,109, 63,219,250,229, 17, 15, 94,216,237,202, 69, 60,232,233, 19, 82,108, 37,184,108,197,209,117,132, 7, 93, +223, 30, 27, 66,137,230,239,205,148, 55,219, 5,231,117, 4, 74,205,187,195,108, 70, 80,118, 46, 94,163,134,150,157,223, 79, 41, +247,223,129, 0, 79, 72,166,158,229,207,222,122,131, 39,227,144, 63,253,215, 63,229, 96, 16,178, 92, 38, 68,158,143, 39, 37,158, + 82, 53, 69,205,112, 58,153,240,175,223,121,135, 63,120,237, 53,126,240,232,140,167,135, 7, 28,237, 77, 8, 67,159,187,197,156, +187,171,107,158,140, 98,222, 60, 60, 32, 45, 10,150, 90, 35,233,130,128, 28,101,205,116, 18,147,122,170,250, 29, 34,182,205, 67, +123, 83,216,182, 57,178,253,174, 46,253,161,174,255,187, 10,131,205,231, 96, 31,176, 92,214,193,120, 78, 28,182,129, 2,110,138, + 77,169, 28, 31,224,236,228, 12, 79, 41,238,231,247, 78, 8, 84,148, 45,131,191,209, 13, 0, 68, 81, 72, 89,228,148, 85,229,200, +114,173,131,192,117,244, 85,101, 16, 74, 50, 26,141,241, 60, 69,145,101,109,213, 28, 4,129,243,251,118, 32, 67,214,106, 16,184, +168,204, 82,127,107, 1,180,201,253,239,237,192,148,234, 49,207, 55,233,124,170, 86,158,171,141, 72,221,110,193, 45, 59, 86,208, +174,114,184,233,150, 26, 13,134,172, 69,115, 94,125,200, 55, 16,162, 38, 59,160, 17,226, 53, 19, 5,221,241,188,119,161, 54,237, + 1,221,129,242, 52, 90,130, 94, 44,115, 35,206, 51,134,188, 40,136,234, 67,230,120,122,194,247,222,122,135,139, 87,175, 40,243, +148,131,253, 3, 38,147, 3,180, 46,120,245,242,130,171,171, 11, 87,212, 11,120,253,205,119,152, 30, 30,178, 92, 44,136, 6, 17, +215,151, 87,156,156, 63, 70, 87,146,249,108, 70, 81,100,140, 71, 99,252,104,192,245,229, 5,171,197, 61,215,151, 55,172, 86, 11, +194, 40,228,217, 91, 63, 64,122, 30,119,183,175, 48, 85,209, 78, 87,164, 53,248,129,207,104,114,192,100,223,229,175, 23,149, 33, + 93, 46, 89,205,238, 89, 44,239, 25,142, 70,200, 32, 98,149, 36,172, 86, 9,139,229,146,162,200,137, 7, 17,105,154,112,119,123, +237, 4,135,218,144,100, 25,227,201,132,155,155, 75,238,239,110,152, 30, 76,153,205, 23,104,237, 0, 48,171, 36, 33,142, 35, 42, + 93,113,123,115,131,181,150,162, 40, 80, 82,226,251,238, 53,170,170,138,162, 40,221, 36, 97,181, 66,103, 57, 86, 88,167,136,215, +134,139,111,190,193, 84, 21, 71, 39,167,204,103,119,148,133,219,139, 15,134, 35,231, 13,175, 28, 88, 41,140, 98,132, 84,232, 50, +195,243,253, 90,124,233,163,181,193,247, 60, 60, 79,214, 26, 8, 89,119,233,219,105,106, 13,176,105,125,216, 55,206,141, 6, 58, +181, 94,121,122,202,235, 77,210,220,148,199,171,167, 92,178, 77,128,179,214,189, 79, 6,209, 0,139,131, 62,233, 70,227, 33,214, + 93,186,237,117,168,155,122, 30,214, 57, 12,157,231,214, 30,218, 98,123,114,216,106,143,132,108,187,231,205,136,234,205,175,183, + 59,114, 41,118, 78, 33,155,248,236,205, 73,114,239,191, 45, 27,231, 24,253,238,252, 33, 82, 94,247, 51,196,118,196,121, 79,192, +187,113, 47, 86,211,147,211,247,183, 59,121,209, 17,183,109,250,213,101, 39, 66,113,123, 52,111,123, 10,102,177, 97, 79,219,236, +240,186, 1, 25,114,125, 1,216,102,175,219,206, 99,118,247, 13, 61,129,194,230, 1,223,216,214, 58,162, 55,217,248,218,109,119, +255,178,105, 23,232,236, 47,186,129, 39,214,182,153,187,162,118, 84,134,194,112, 30, 73,126,255,100,202,217,254,144, 81, 20, 50, + 14, 67, 14,143,143,249,230,155,151, 12,163,152,101,150, 81,148, 5,158, 82,156,239,237, 17,135, 33,203, 52,101,149,103,120,192, +254,112,128, 20,150, 65, 16, 17,121, 33,149,208,124,126,113,201,253,252,142,247, 78,142,137, 61,197,117, 86,184, 96, 18,171, 29, +106,212,234, 54,156, 99, 13, 48, 96,231,225,189,121,208,111,162, 32,255, 37, 29,248, 67,227,245,239, 58,236,191,109, 4,255,109, + 30,246,150, 33, 64,141,117,109,212,175, 13, 73,178, 22,192,121,129,207,254,222, 62,131, 65,204,124,177,192,104, 77, 89,148,235, +194,175,249,176,214,135,124, 85, 86,232, 74, 35,172,165,210,142,201,109,106,235,163, 49, 26,161, 20,123,123,251, 4, 97, 64,150, +101,120,117,122, 85, 52,136, 41,138,162,133,172,200, 26, 68, 36,164, 32,171,241,180, 93,159,251, 38,164,103, 23, 77,208, 89,216, + 84, 61,218,111, 94, 39, 83,175, 85, 20, 66,168,117, 8, 74, 61,126,180,152,142, 72,200, 17,224, 90,137,121, 29, 84,211, 28,216, + 13, 45, 46, 8,130, 53,235,160,182,208, 57,155,154, 83,237,123,158,143,244,106, 37,180,117, 24, 88, 79,249,120,126,208, 90, 27, + 61,207,115, 41,115,157, 53, 77,239,247,217, 52,193,118,198,164, 82, 10,130, 32, 66, 73,247, 59, 31, 79,143,121,246,244, 53,254, +233,151,255, 72, 89, 22, 60,122,252, 20,131,226,211, 15,127,201,205,245, 13,121,158,162,171,156, 60, 89,184,152,209, 65,204,167, +159,124, 76, 89, 85,156, 61,122,194, 31,253,209, 79,249,244,147, 15,185,190,188,104,139,160,209,232, 0,173, 53, 69,190,228,173, +223,251, 3,158, 60,125, 74, 60, 24, 48, 24, 76,152,221, 92, 80, 22, 37, 7, 7,135,104,235,102, 25, 85,153,163, 60,159,225,120, +132,146,146,249,221, 53,149, 49, 8,163,169,116,137, 17, 30,126,224, 81,229, 37,139,217, 29, 66,121, 8, 1,195,241, 62,161,239, +113,117,121,137, 11, 12,113, 99,236,195,227, 19,102, 53,227,124, 60, 30, 83,228,206,171, 61, 61, 58, 98, 60, 26,225,251, 62, 69, + 89,214, 22, 70,223,117,215, 69,222, 30,166,110,125,166,234, 9,146, 19,154,141, 15, 14,200,139,130, 60,203,200,243, 28,107,225, + 96, 58, 37, 47,114,132,167,136,163, 1,105,186,162,172,114,180,209,120,129,215, 54, 45,214,128, 23, 4, 88,140,131, 13,121,161, +155, 82,149, 5,198,186,174,185,201,156, 23,214,246,245, 73,116,199,240,114, 99, 82,251,144, 16, 82,186,142,220,116, 56, 25, 70, +215,126,120,179,190, 23,215,143,235, 41, 69, 24, 70,104,173,221,239,214,114, 58, 84,103,162,163,214,162,229, 58, 83,192,141,174, +229,150,136, 91,116, 2,179,154,148,197,230,160,238, 30,232,237,215, 54,242,201,187, 69,183, 84,114,107,244,222,216,164,187,249, +232,109,152, 75, 3, 7,218,229, 8, 18, 15, 4, 91,109, 70,118,111,101,178,211, 47,106,228, 70,179,217, 61,175, 54, 38,203,106, +122,236, 14,117, 41,251,135,240,238,155,176,220, 49,234, 96, 35,123,183,159, 13,189, 57, 35, 95,239, 15,156, 47, 81,116,149,181, +114, 59, 76,165,217,139,247, 16,121,173, 34,189, 51, 41,176,187, 15, 10, 35,235,125, 76,111,156, 94, 95, 75,185,222,147,211,189, + 89,119, 15,175, 14,150,180,235,243,149, 88, 98, 91,242,230, 80,241,222,209,148,233,112,136, 54,150,113, 28,163, 4, 12, 71, 67, +238,151, 9, 55,119, 51, 23,192, 80, 85, 20, 85,201,124,190,160,212,154,210, 24,102,171,132,155,229,130,155,197,156, 72, 5,148, +166, 4, 44, 81, 24,226,121,146,219,217,130,203,217, 29,251,129,207,179,189, 1, 86, 64,105, 61,132, 82,235,234,181, 91,173,213, +191, 95,224,251,189,157,234,102, 39,189, 9, 41,249,174, 67,249,187, 60,232,223,214,141,127,231, 65,190,163, 82,237, 36,155,183, +213,123, 91, 66,214, 7,143,231, 57, 5,188, 31, 4, 28,236, 31,112,116,120,200,108, 49, 35,203, 82,202, 60,239,136,239, 32, 8, + 2,124,207,119,176,141,202, 56,143,186, 53, 84, 85,133, 54, 22,163,237, 26,178, 35, 4,163,241,158, 11,206, 40, 93,218,155,144, + 18, 63, 8,208,101,185,254,176,215,135,173,214,154,162, 40,218,155, 89,239,253,185,161,252,223,238, 26, 68, 95,108, 38, 4, 82, +137, 94,104,134,181, 6, 75, 19,247,235, 68,122,158,231,198,146, 86,175,221, 9,158, 31,244,136, 97,205, 65,222, 96, 70,131, 32, +192,171,179,220,141,214, 46,165,172,142,172, 21,194,121,255,221, 99, 56,139,155,203,199,150,181,238,192,173, 29,154,108,116,175, +214,114,216, 13,145,211, 90,120, 72, 79, 24,167,164,228,248,232,132,233,193, 17,191,247,246,247, 25,142,247,248,159, 63,251,159, +248, 65,200,147,167,223,227,252,252, 17,191,252,197,255, 71,105, 45, 39,103,103,156,158, 61, 97,188, 63,101,255,240,152,195,163, + 99, 78,206,158, 16,197, 67,198,227, 49, 39, 39,103,252,252,127,252, 61, 55,151,223,144,102, 25,121,150,113,116,124,140, 54,112, +125,249, 2, 83, 86,164,105,198,203,175,190,224,242,229, 11,174, 47,191,118,209,113, 6, 94,190,252,170, 86, 99, 7, 68,195, 17, +227,201, 20,207,243,241, 60,201,244,248,140,201,120,143, 32,140, 24,140,246, 49,186,196, 90,195,217,163,167,196,163, 49, 89,186, + 98, 62,155, 17,134, 17,139,229, 10,139,123, 95, 25, 3,126,224,147, 37, 43, 87,244, 33, 25, 13,135, 24, 99,137,227,152, 60,207, +185,189,189,101,111, 50,193, 90, 88, 37, 9,163,209,136, 36, 89, 81,228, 57,198, 84, 8, 97,235, 14,189,192,171,193, 53, 69, 89, +146,231,185,219,247,151, 37,101,145, 83, 21, 5,105,154, 48, 26,143, 8,131,192,173,235,166, 83,172,181,100, 89,130, 16,224,123, + 62,105,150, 48, 28, 14, 90,224,148, 87, 91,215,156,147,195,146,231, 25, 66, 8, 6,195, 33,198, 52, 96,161,181,101,119, 27, 17, + 43,122,145,216,221, 20,204,214, 38,105,205,214,244,118, 29,127, 93, 31,246, 29, 1,181,148, 10,223, 15, 40,107,123,103,154,102, + 29,230,137,216,106, 36,215, 54,186,250, 96,221,236,178,155, 9,109,179,239,239,120,204,155,255,110,167, 91,244,187,236,230,192, +110, 4,216,221,239,217, 69,142, 91,115, 64,109,143, 4,183,153, 44,218,221,189, 55,235, 97,177,113, 96,239,210,169,116, 98, 68, +251,118,218, 14,244, 74,244,116, 42,253, 66, 65, 77,143, 79,223,255,246,251,181,232,217,206, 54, 5,114, 77, 71,223,247,111,119, +187,242,205,216,211,142,165,108, 35,146, 85, 73,213,179,152, 89, 54, 32, 0,173, 0,168, 57,228, 59, 88,213,206, 72,102,251,233, +175, 31,204,108,208,243, 76, 55, 4, 99, 99, 31,106,235, 49,112, 51,166,108, 20,208,194,106,204,106,193,185,167, 25, 9,193,100, + 56, 64, 10,201, 60, 75, 56,156,236,243,234,238,150,167, 39,199,220,220,221,243,252,242,146,210, 58,187, 81,154,103,124,125,125, +203,197,205, 13,121, 89,114, 55,159, 49, 95, 38, 36,121, 1,194,162, 75, 55,194,139,194,136,243,131,125,206,166, 83, 70, 97,200, +245,108, 70, 86,228, 28,120,134,147,161, 79,154,102,148,210, 3, 33,219,113, 88, 87, 28,213,221,155,239, 82,181,111,198,173,126, + 87, 71,254,208,193,244,173,234,205, 7, 70,242, 15, 5,189,236, 36,206,109,140,232,155, 9,179,236,136,116,252, 40, 68, 32,120, +246,244, 41,179,217,140, 52, 75, 41,139,162,125, 92,207, 83,248, 97,224,114,170,211, 20, 9, 84,166,170, 3, 63,220,161,174,107, + 80,141, 83,132, 75,198,227, 9,113, 28, 81, 22,185, 11,228,177, 16, 70, 78,108,231, 42,194, 86,185,129,239,121,172,146,116, 75, +196,217,220, 0, 27,241,162,218, 16,147,169,206,168, 90,128,131,201,212,152,189,118,196,173,214,197,174, 20,141,120, 70,174, 87, + 48,157,215,192,116,110,194,170,227, 87,111, 32, 53,198, 24,188, 48, 36, 8, 67, 71,250,170, 61,228,182, 30, 65, 75,229,117, 20, + 27,238,115,171, 43, 77, 16,134,238,218,148,213, 86,122, 94, 75,171,235,114, 19,118,104, 43,164, 82, 28, 31, 30,241, 39,127,244, +199, 44, 87, 75, 62,252,244, 99,238,111,110,121,231,251, 63,100, 60, 26,212,251,123,195,112, 56, 34, 79, 51,110,175, 95,145,167, + 75,174,174,174,200,179, 20,176, 60,255,242, 51,174, 47, 95,161,128,120, 56, 38,140,134, 20,121, 78, 89,230, 36, 73,142,231, 41, +242, 44,193, 15, 34,146, 36,231,224,112,234, 8,125, 94,128,231, 5,220,220, 92,130,169, 88, 46, 22,128,225,112, 58, 37,175, 71, +215,195,120,194,193,244,136,217,253, 53,147,253,125,246, 15,207,240,132,102,122,116,202,191,253,119,127,202, 87, 95,126,138, 80, +146, 60, 77,201,243,132,253,131, 41, 74, 42, 87, 44,250, 62,121,158, 50,187,191,115,221,161,167,200,243,130,193, 96, 64,154,166, + 44,102,115, 38,147, 9,175, 46, 93, 44,108, 16, 4, 8, 41, 25, 12, 6, 88, 96, 60, 30, 19,134, 33,101,153,187, 49,125,165,219, + 46, 82,151,121,139,243, 53, 90,187, 61,184, 49, 44, 23, 11, 22,139, 57, 74, 9,210,213,202, 77,113, 60,207,145,234,140,243,176, +207,102,119,196,113,140, 16, 94,141, 87,118,247, 77, 93, 85,110,149, 87, 79, 71,131,192,133,199, 56,192,145,105, 19, 39,251, 90, + 43,187,113,216,218,173,213,107,191,217,179, 61,203, 89,163,174,175,180,110, 39, 18, 85, 85,225,121, 62, 81, 60,160, 40,114,167, +217,208,166,115,216, 54,141,214, 6,138,252,129, 68,180, 45, 65, 90, 71, 44,215, 19, 0, 63, 64,135,235,129, 98,186,223,191,107, +207,190,105, 69,147,162,183, 82,147,189, 63,207,206,216,242,221, 7,186,232, 47,221, 55, 33, 60,236, 94,115,247,172,109, 8,212, +244,248,252,253,135,194, 51,214, 4,183, 93,108,118,177,195,171,222, 39,174, 53, 21, 25,162, 91, 24,216,245,101,217, 24,227,117, +111, 26, 86,172,119,217,118,131,238,222, 30,232,114, 61,146, 69,138, 45, 79, 51, 98,221,233,173,141,228, 46, 6,211,118,212,189, +221, 11,222,205,123,147,194,169,222,101, 13, 82,176, 2, 68,158, 99,231,119,168,229, 29, 39, 7, 19,215,177, 7, 33,158,242, 72, +242, 28, 79, 41, 94,221,221, 81, 86,134,231, 47, 95,114,121, 63, 39, 43, 10,210,162,100,153,101,172,242,140, 44,207,168, 42,247, +120,198, 66, 94,148, 76,247, 38,156, 30, 28,114,191, 92,162,141, 38, 12, 35, 6,158,207,163,131, 41,127,252,246,219, 72, 37, 72, +138,130,219,219, 91, 94,155,142,176, 89,202,170, 50,104,233,110,218,194, 82,115,162, 59,222,112,107, 31, 12,128,249,182,195,186, +187, 51,122,232,207,110,254,191,223,101,196,254,157, 66, 60,214,182,182,254, 72,222, 85,251,178, 22, 8, 1,110, 95,168, 13,223, +123,243, 77, 22,203, 5,105,154, 80, 22,101,107,169,105,110,188,214, 88,202,188, 64, 40, 73,165, 11, 7, 84,169, 25, 2,166, 6, +113, 52, 86, 31, 99, 44,143, 31, 63, 38, 79, 83,170,178,192, 15,252,122, 47,233,110,172, 80,115,227,173, 33,138, 6, 20,245,207, +107,138,168,166,139,105,196,105,221,157,250,150,135,124, 67,233, 43,164, 83,218,251,158,135, 20,178,142,206, 84,189,105, 84,243, +190,237, 89,230,154,226, 84,186,252,241,246,179,216,177,177, 25,234, 96,148, 32, 68, 41, 15,223,247, 80, 74, 56, 88,138,242,136, +162,200,229,125,151,133,211,144, 72,103, 41,243, 60,159, 65, 60,112,244,183,186, 64,217,180, 5,110,253,123,231, 61, 20,250, 33, +191,247,238, 15,248,226,249, 11, 62,250,228, 19,246,167, 83,140,177,188,251,238,219,252,250,215,191,226,244,244,156,159,255,236, +191,243,226,249,115,110,175, 95,185, 68, 50, 33, 0,141, 16, 30, 79, 94,127,155,170,200, 49, 90,243, 71,255,234,127, 97,190,156, +241,252,139, 15,201,243,130,195,195, 67,246,246,246,185,191,119,225, 41, 66, 42,222,122,251,109, 46,175,110, 72, 22,247,164,233, +178, 22, 36, 58, 48, 83, 16,185,145,175,244, 66,222,122,247,247,240,195,152,213, 98,206,229,245, 5, 66, 72,246,143,206,249,234, +249, 39,204,239,103, 76,167, 7,252,242,151,255,200,205,245, 75,150,247, 51, 64,147,151, 21,203,229,138, 32, 8,184,186,186, 2, + 4,243,229,140,241,120,223,137, 16,181, 70, 42, 73, 16,120, 20,165,243,215,204,230,115,246,247,247, 8,130,128,162, 40,219,201, +203,241,241, 9,179,249,156,249,252, 30,116,133,176, 22, 63, 8,136,135, 46,121, 80,215,133,148, 10, 3,226,193,128, 50,207, 9, +253,128, 40,140, 72,179,204,113, 18,124,159, 48,140, 25, 14, 70,196, 81,140,209,218,189, 95,172, 37, 93, 37,140, 39, 19, 71,119, +235,100, 57,232, 74, 83, 22, 89, 93, 40, 24,226, 56,162,168,170,122,149, 99, 59,135, 56,157,152, 85,209,179,183,109,190,159, 55, + 39, 83,205,206,221,125,201,237,212, 85, 29, 36,212, 52, 71,149, 49, 4, 94,224,130,152,140, 33,235,142,225, 91,245,184,236, 81, +217,186,135,232, 46, 95,120,207,234, 43,118,136,213, 54, 24, 38,221,239,239,137,176, 55, 58,243,230,239,230, 44,146,242,219,197, +113,221,174,124, 83, 79, 35, 54,220, 63,219,107,234,109,215, 79,119,205,221,231, 8,244,161,108, 0,234,240,228,252,253,237, 3, + 91,246, 65, 46,130, 45,187,206,118, 22,250,182,165, 77,212, 35,147,214, 64,191, 33,197,111, 46, 82,215,106,208, 86,105,109, 87, + 76, 59,102,223,180, 56,216,141,170,172,131,100, 95,191, 72, 82,236, 20, 39,108,138, 13,100,215,110,211,189,248,166,227,151, 46, +115,200, 19,100,190,226,112, 20,114, 48, 26,161,181, 83,180,166,121,202,170, 44, 72,178,132,139,251,123,126,251,213,115,110, 22, + 75, 42,107, 73,138,156,172, 40, 88,166, 41,121,169, 73,178, 2, 76,163, 72, 87,228, 69,193, 42, 75,153, 12, 98, 0, 22, 69, 70, + 81, 86, 40, 79,177,204,114, 66,207,227,181,195, 99, 12,150, 36,175,120,117,119,195,227,131, 61,252, 50, 99,153, 21, 24,217,248, +165,229,182,154,252, 1,255,120,191, 0, 19,223, 57, 50,222,180,106,236, 82,187,127, 91,231,254,187,230,173,187, 56, 83,250,240, +137,246,108, 23,173,136, 71,212, 16,142,179,147, 83,138, 50,103,181, 90, 81, 22,133,179,163, 9,137, 80,138,241,120,228,242,212, +117, 19, 74,227,198,157, 13, 27,223, 24,219, 11,144, 16, 82,241,248,201, 99,210, 36, 33, 75, 18,180,177,140, 70, 35,170,178,196, +232,178,183, 31, 79,211,140, 52,205,187, 53, 84,135, 38,216,143, 14,238, 94, 39,187,145,248,214,248,134,149, 90,219, 15,187,244, +192, 45, 84,101, 7, 27,187,190, 71,172,161, 67,205, 65,222,236,237,149,231, 17,132, 17,195,193,160,101,128,199, 81,140,175, 60, +151,236, 85,186, 21,194, 96, 48, 64, 73,229, 70,191,210, 49,218,203,178,104,139, 36,211, 48,244, 89,107, 56,122, 0,154,206, 97, + 47,234,156,131,195,131, 35,202,162,228,243, 47, 63, 33,205, 51,254,240,199, 63,197, 83,146,171,203, 87,252,187,159,254,148, 15, + 63,248, 13,105, 1,171,116, 69, 85, 85, 60,125,253, 13,252, 40, 34, 10, 7,188,241,230, 59,220,223, 94,243,205,139,231, 40,229, +115,124,122,206,207,255,254,239, 72,243,156, 42,207,208, 72, 22,139, 59,242,101,194,114,185,164, 44,114,174,175, 46, 73, 87,115, +170,178, 98,122,116,194,252,246, 14,163, 51,148,231,181,218,128,170,204,249,250,249,103, 84, 69, 73,105, 42,148,181,232,178, 32, +207,114,138,229, 29,199,143, 95, 99,180,183,207, 96, 16, 81,228, 57,179,219, 91,146, 36, 65, 73, 15,229, 57,224,208,225,225, 17, +171,100, 69, 20,135,228,137, 43, 0,227, 65, 76, 28,197,220,221,221,177, 55,217,195, 74, 8,234, 29,186,181,142, 25, 48,159,221, + 83,150, 5,203,197,130,193,112,200,114,177,192,154,218,105,161,113,112,150,162,112, 28, 4, 99,168,138,146,162, 44, 24,198, 67, +210,116, 69,101, 53,195,209, 8, 83,105,134,163, 9,119,119,215, 84, 69,193, 96, 48, 36,138,135,117, 55, 99,200,211, 37,161, 31, +160,124,175,157, 10, 5, 65,224, 64, 51,181,179,193, 90,139,209, 21, 81, 20,163,171,162, 22, 76,246, 89, 34,155, 7, 71, 35,134, + 91,139,214,228,134, 50,126,163,147,236,236,190,165,116, 69,133,172,173,110,212,150, 83, 93,175,146, 90,226, 99,247, 94, 97,215, + 54, 52, 37, 85,111, 79,222,215, 84,237,152, 44,178,129,121,101,215,216,187,175, 96,223,196,197,246, 4,223,157,115,177,247,231, + 55, 37,226, 59,196,214,187,166,147, 2,177,221,141, 11,177,113,198,138, 45,209,122, 95, 83,176,161,153, 58, 56, 62,121,191,179, +113,238,176,217,237, 78,168,204,166,242,189,233,184,197,214, 97,178,189,127, 88,147,221,100, 15,221,234, 44, 20,172, 71,242, 82, + 32, 84,237,213,174, 65, 31, 26,176,202, 9,159,154,148, 21,101,193,107,253,220,174, 19,183,114, 45,142, 51, 98,187, 19,146,157, + 74,169,119, 51,218,101,101,107,158,191, 53, 88, 91,225,229, 57, 97,185,194,215, 5,251,147, 9, 74,120,228, 53, 31, 60,201,114, +150,121,198,221,106, 73,150,231,172,138,194,237,206,173, 33, 43, 75,202,178,164, 50,134,188,204, 89,172, 82, 44,134,170,174, 90, +149,146, 36,121, 70,161, 13,227, 97,204,253,124,201, 60, 89,177,172, 61,172,101, 13, 2,217, 27,196, 20, 70, 51, 91, 37,204, 86, + 75,206,246, 39, 40, 83,178, 44, 75,172, 10,220,155,174,193,169, 10,118,194,100,190, 75,236,246, 47, 25,189,119,199,234,187, 14, +248,223,249,175, 93,223,103,109,187, 90,233, 87,162,162,134,160,232, 25, 34, 0, 0, 32, 0, 73, 68, 65, 84,188,200,150, 45, 62, + 28,186, 46, 37,138, 35,230,171, 5, 89,150,183,169, 84,126, 16, 16,132,161,163,248, 25,131,209, 6,109,214, 28,108, 23,170, 98, + 58,104, 74,129, 84, 30,167,103,167, 36,171, 21,182,141,206,117, 2,182, 50, 47,219,248, 72,207,243,209,166,206,227,171, 51,196, +141,116,163, 80,140,237, 8,201,104,181, 25, 61,241, 92,103,191,214,222, 36, 91, 47,186,105, 71,241,106,167,160,176,134, 28,121, + 94,189,227, 86,237,251, 91, 73, 65, 24, 70,189, 96, 32,107,173, 75,120,178, 16,197,113,189,115,119, 69, 81, 20, 69,196,113, 76, +150, 39, 20,101,229,132,116,166, 78,170, 19, 2,233,123,148,186,194,106,144,173,205,200,174, 1, 61, 61,189, 73,179,102,147, 8, + 97, 16, 72,126,252,227,159, 18, 68, 33,179,249,140, 31,252,224, 71,100, 89, 66,158,151,252,225,143,255,144,119,222,121,151,175, +190,185,224,139, 47, 62, 38, 77, 86, 72, 12,151,151,175,200,242,140,251,235, 91, 22,243,123,110,174,175, 17, 74,242,163, 63,252, + 99,126,249, 11,183,139, 47,138,130,178,200,200, 19, 23,224, 19, 15,199, 12, 71, 35,194, 56,230,123,111,191,199,114,121,207,209, +233, 57,126, 52, 2,171,137, 6, 3,242, 60, 71,151, 57,167,143,158, 48,217,155, 18, 4, 49,201,106, 70, 50,191, 99, 48, 26,243, +244,141,119,184,190,186, 32, 10, 61,198,147,125,138, 60,227,213,203,175,176, 2,124, 63, 34,207,114, 70,123, 99,202, 66,147,166, + 43,230,179,123,246,246, 70,220,221,220, 82,100, 43,140, 46, 72,146, 21,241, 96,128, 82, 30, 23, 47,190,194, 11, 60,198,227, 61, +150,243, 25, 82, 74,150,139, 5,251,123,251,204,102,115,124, 79,113,123,123,197,209,225, 49,203,197, 18,151,228, 87, 91, 7,133, +193,152, 10, 99, 53, 22,247,222, 45,171, 2,139,203, 53, 16,210, 39,203, 22,100,201,146,225,120,159,172,200, 40, 75,167,149, 40, +203,146, 40,142,209,186, 34, 89,205,137,162,168, 14, 92,129,188, 44, 25, 12,134, 53,186,218,105, 83,180,118,226,200, 40,140,169, +116,213, 22,162,107, 71,148,220, 16, 63,203, 45, 55,211, 38,128,102, 29,209,106,123,170,249,230,173,226,215, 76,143, 74,107,148, + 31,212,129, 84,134, 60, 47,106, 22, 68,127,197,212, 8,223, 54,109,100, 61, 8, 76,167,171,223,180,165, 53,157,123, 79,209,206, +154,218,246,224, 8,126, 23,245, 77,244,133,121,205,228,184,157, 78,109,196, 18,179,217, 68,117,232,148,219, 42,246,245,201,185, + 73,119,237, 54,212,155, 29,126, 23, 32,167, 14, 79,206,223,223, 45,144,218,182,164,245, 67, 88, 58,234,240, 77,237,171,232, 10, +210,250, 49,116,114, 13,130,238,239, 33,235, 29, 79, 51, 94,105, 40,174,109,244,166, 88,123,201,219,206,100, 99, 79,190,153,117, +221, 38, 80,109,254,126,157, 11,222,197,104,238, 68,160, 90,139, 16, 22,179,156, 35,231, 55,232, 90,144, 18,199, 17,121, 85,146, + 87, 37,214, 88,178,170, 36,201,115, 86, 69,142,168,153,205,205,118, 42, 47, 92, 42, 83,169,235, 68,169, 36, 67,214,172,250,160, +134,198,104,107,201,171,194,137,152, 45, 44,242,156,217, 42, 33,171, 74,202,170, 64, 27,203,193,112,228,192, 20, 82,112, 57,187, + 67,107,195,241,158,243,185,103,218, 98,149,215,190, 6, 86,124,183,215,252,219,198,239,189,202,175,131,160,101,199,193,190, 75, +100,247,109,123,247,157, 17,191,155, 84,169, 13,158,113,247, 13,169, 88,147,214, 12, 48,217,219, 3, 11,211,131,125,110,239,239, + 48,186,194,212, 40,205,209,100, 92,251,100,171, 54, 32, 71,235,146,170,206, 84,119,221,186, 91, 39,186,206,216, 9,159,206,207, + 31, 83,228, 41,139,197,188,183, 70,210,101,229, 4,107,214, 34,144, 24, 43,200,243, 18,223,115, 34, 52,103, 56, 21,248,157,168, + 86,165,228,214, 20,200,118,114,161,219,176,159,250, 80, 55,198,184, 25, 86,157, 37, 32,155,137,150, 84,157, 27,152,234,225,148, +187, 93,185,177,134,178,170, 8,252, 96, 29,171, 90,127,143,227,152, 59,177, 97, 24,133, 4,126, 64, 94, 20, 12, 7, 3,246, 38, +251,109,177,227,114,206, 5,101, 85, 97,172,219,211, 58,154, 97,133, 84,162,197, 8,171, 46, 18,183,167,242,119, 5,192,249,217, + 83, 62,248,224, 55,252,234,151,255,132,242, 37,255,254,207,254, 3, 63,255,249,207, 72,147, 5,131, 65,200,255,245, 95,254, 11, +190,231,243,245,243, 47,200,210,148, 82, 91,158,189,246, 26,158,140, 24, 12, 66, 38,211, 99,164,175, 24, 13, 7,220, 92,124,195, +191,249, 95,255,140,189,233, 49,131,225, 0,191, 97, 19, 84, 26, 91,175,201,206,206, 31,243,242,197,115,170, 60, 35,205, 50, 14, + 14,166,228, 69,130,231, 43,246,143,142, 72,151, 11,176,130, 44, 75, 48,198, 17,228,166,135, 39, 40,229,241,242,235, 47, 73,230, +215, 76, 38, 39,156, 61,121,157, 52, 73,185,186,120,129,169,220,225, 26, 13, 38, 45,129, 77,213,162,195, 52, 77,235, 12,248,172, +221, 75,151, 69, 65,165, 53,131,225,144,155,203, 43,210,213,130, 40,138,184,187,187, 39, 8, 2,150,203, 21,113, 20,225,249, 65, + 45,212,243,176,194,114,120,124,202,193,225, 9,105,154,128,213,237, 97,104,219,226, 63, 32, 8,134,174,160,242,124, 48, 26, 83, + 26,242, 44, 99,184, 55,198,232,154,134, 88,107, 42,252, 32, 32, 73,151,136,250,181,174,116, 35,160, 20, 53,110,218,162,164, 3, + 41,173,121, 15, 97, 47,153,109, 83,247,212,117,110,128,221,134,173,212,231,131,169, 81,216,235, 38,145, 53,188, 9,231,184,104, +104,142,198, 24,162, 48,170,185, 8,146,162, 44,182, 39,135, 77,114,163,236,239,205,219, 52,180, 6,179,189, 99,242,184,121,160, +247, 58,116,209,193,203,138, 78, 1,176, 1, 55,219, 76, 94,219, 92, 53, 73, 33,182,236,105,236,194,138,247,113,115,125, 37,252, + 3,112,247, 93, 19,147,190,245,188,255,239,106,122,114,246,254, 67, 89,230,108,236, 3,214,176, 18,219,191,144, 98,157, 53, 46, +186,144,215,214, 19, 46,183,246,220, 98,125, 13,251,163,138,102,223, 93,119,154,170,251, 75, 88,122,214,181,102,151,190,117, 80, +116, 70, 30,155,202, 92, 81, 71,140,110, 6,117,212,155,159, 90, 3, 85,223,180,173,198,147, 22, 63, 75, 40,111, 94, 81,166, 25, + 40, 73, 28, 6, 45,121,161,210, 21, 82, 8, 86, 89, 86,251,125, 29,164,166,170, 42, 42,109, 92,198,119, 13,238,104,124,169, 89, + 94,182,123, 41,175,230,186, 7,129, 95, 23, 39,206,207,158,150, 57, 89, 81,178, 76,210,118,130, 98,172, 97, 47, 30, 49,207, 86, + 84,198,114,183,116,227,181, 65,224,145,165, 9,149,149,104,207, 67,214,217,236, 15, 29,210,242, 1,127,100, 87, 87, 32, 58,130, + 46,186, 59,244, 78,152, 9, 59, 82,144, 54,187,245,127,201,120,126,203,230,241,224,227,116, 20,241, 18,252,218,251,191,183,183, + 71, 89, 85, 60,125,252,132,251,217, 29, 73,146, 96, 42, 13, 74, 48, 30, 79,220, 46,179, 44, 48,149,243,164, 87,186,108, 61,193, +214, 88,176,114,195,209, 33, 57, 58, 62, 38, 10,124,102,139, 57, 66,186,162, 75, 41, 73,165, 75,186, 97, 67,171, 36,173, 71,152, +174,136, 8,162,168, 30,241,186,238, 95,121, 94,253, 57, 49,189,113, 97, 55,208,133, 14,175, 95, 42,177,102,173,183, 76,235,117, + 81,213, 8,239, 90,171, 75,253,105,107,168,130,141,134,196,247, 67, 6,245, 40, 54,240,220,225, 17,134, 81,173, 47, 48,245, 10, +195,237,223,135,131, 1, 73,154, 17, 71, 49,131, 65, 76, 20, 70,235, 66, 92, 58,107,146, 95, 23,159,149,209, 40,161,234,247,181, +179, 87,138,206, 20,108,147,123,191, 88,206,209,149, 97, 60, 25, 97,141,225,248,228, 17, 95,191,248,154,243,243, 83, 46, 46, 46, +249,201, 79,254, 21,203,213,156,247,126,255, 39, 8, 21, 1,150,251,249, 45, 63,252,253,159,240,197,103, 31,241,244,233,235,140, +135, 99, 62,255,236, 19,222,120,251, 7,252,195,223,255, 63,124,250,225, 63,115,241,226, 5,201,202,197,159, 54,248, 91,132, 64, + 40,143, 44, 93,185,236, 5,107,185,190,120, 65,178,156, 97,116, 69, 85,228, 4,158, 71, 85, 58,237,132, 46, 50, 22,139, 37,121, +213,120,244, 21, 97, 60,228,232,228,156, 15, 62,254,144, 34,203, 9, 3, 31,129, 33, 30,140,145, 2, 14,166, 39, 60,121,246, 61, +142,143,142,200,178, 20,221, 10,190, 98,116,165,209,186, 34,136,135, 4,161,139, 6,206,210, 21,101,238, 62,203,131, 65, 76,146, + 36, 68,161, 15,198,176, 92, 45,137,194,136,201,129, 83,176,207,231,115,150,203, 37,163,209,200, 21,144, 85, 89, 43,189,125, 6, +147, 49,199, 39,167,132, 97, 84, 43,244,199,236, 79,143, 8,227, 33, 97, 20,178, 88, 44, 92,129,106, 42,210,100,137,193,226, 5, + 17, 10,195,114,126,143, 31,120,248,126, 68,145, 23,181, 48, 82,174, 49,175,210,113, 4, 26,143,123, 16,132,245,231, 64,181,123, +241,238,104,189,235, 29,239,209, 16, 59,231, 67,215, 26,215,141, 69,109,190,236,251, 78,211, 97, 89,135,104, 69, 97,232,138,200, +118, 77,182,125,207,234, 3, 92,196, 86,170,154, 84,178,103, 83,219,132,190,244,160, 50,155,148,185, 29,121,230, 91,162, 53,209, + 47, 96,101, 71, 0,222,219,147,119, 60,241,162,183,222,221,164,169, 74,122,104, 49,177,253,132,251, 4, 87,187,245, 92,186,113, +229, 56,162,156,104,247, 39, 27,252,151, 30,192,133, 46,117,173, 3,169,232, 41, 19, 45,219, 81,168,182,223, 29,219,142, 93, 73, +108, 40,230,109,231,143,211, 88, 39, 44, 61,251,156,169,119,233,205,147,181, 29,160,134,232,168, 53,187,136,188,246, 32,111,108, + 68, 82,110, 5, 95,180,172,106,177,126, 3, 43, 33, 25,234,146,213,221, 43, 76,101, 40,140, 97,236, 43, 38,163, 33, 86, 8, 12, +150,178, 42, 41,165, 66, 91, 67,169, 43, 39,250,192, 82,214,176,143,160, 46, 32,138,162, 68,168,245,243,117,161, 12,178,189, 30, +113, 24,145, 21, 5, 69, 89,162,164, 36,240, 3,146, 52,163,210,134, 69,154, 56,193,147,176,132,126, 64,172,124, 70, 81,196,205, +124,206,237,108,206,116,127, 76, 44, 42,108, 57, 39, 17,154,194, 31, 35, 27,150,249, 46,133,106,231,218,109, 30,182,205,243, 91, +211,249, 58,222,235,174,205,175,163, 78,255, 46, 17, 94,151,253,190, 75, 84,213, 27,185,239,242,122,210,207, 33,232,170,175,173, + 49,164,105,198,104, 60,110, 61,195, 74, 41,140,148, 8, 85,131, 91,140,174,111, 18, 98,171, 72,232,122,251,165,164,221, 71,166, +105,194,116,255,160, 86,165,139,186,171,239,139,195,138, 82, 35,149,135, 53,213,250,107, 73,214, 18,255, 60,207,193,113,148,231, + 49, 30, 29,214, 98, 60,215,233,251,129, 79, 80,243,218, 93, 1, 88,181, 55,165, 38,126, 85,215,123, 79,106, 59,217,104, 60,162, +170,180,235,226,234,162,181,200,139,250, 38,170,107,223,177,195,220,122, 50,160,172,170, 54, 8,200,130, 83,179,251, 62,182, 46, + 52,188,154, 56, 23, 4, 33,135,211, 3,138,188,172,119,232, 21, 71, 71,199,164,105,202,117, 13, 73,105, 66, 58,124, 63,112, 99, +211,178, 34,138, 66,242, 58,215,188,171, 21, 80,157, 21,195,116,122, 68, 89, 84, 92, 94, 94,240,236,233,155,252,243,175,255, 25, + 99, 74,198,227, 3,138,188, 34, 8, 7,168, 48,228,227,143, 62,226,131, 95,255, 12,233, 41,162,120,194,199, 31,254, 6, 63,140, +201,203,130,143,126,251,107,170, 60, 99,126,127, 67,145,164,104, 3,198,104,116,153, 33,133, 37,205, 74,172, 46,240,130, 16, 79, +249,228,105,230, 70,215,104,240, 34, 78, 14,159,144, 23,115,242, 60,103, 60,158, 48, 8, 66, 44,150,229,172,228,232,248,148,203, +139, 23,220, 94, 22,140,134, 35,148, 47, 88,206,102,104, 83,178, 50,112,176,191,143,242,220, 1,180,127, 48, 37, 28,140, 89,220, + 95,178, 88,204,121,227,237,239, 51,159, 93,243,245,231,159,115,119,119,199,100,178, 71, 49, 43, 40,179,140,201,100,159,120, 50, + 98,121,127,135, 10, 20,210,247,137,134, 49,105,154,224, 7, 33, 73,154, 49, 61, 58,226,238,250,134,188,200,153, 30, 30,241,234, +226, 37, 88, 77,150, 44,240, 61,143, 48, 12, 28,209,205,243,209, 69,197,203, 23, 95,183,156,254, 40,138,201,243, 12, 63, 8, 57, +123,250, 26,227,189, 61,238,239,239,201,146, 37,158,239,225, 41, 73, 85,185,107,162, 60,143,155,235, 27, 78,207, 35,148,146,164, + 73, 74, 52,136,145,202,195, 87, 30, 69, 89,226,135, 32, 61, 77,145,229,181,127, 94,214,120,105, 7, 89, 82,181,119,187,129, 24, +173, 81,178,238,134,223,124,190,218,207,168,109,239, 38,157, 21,171,108,181, 5,141,250,189, 57,248,140,169, 64,249,140,134, 67, + 4,224,103, 30, 89,150,215, 97, 88,221,100, 71,187, 69,105,235, 78,127,187,250,147,166,187,223,100,158,192,218,202,182,201, 63, +105,239, 55,155,235,133, 14, 70,188,143, 49,239,138,183,237,150,197,184, 71, 96,221,193, 14,233, 38,128,210, 66,213,118,223, 71, +215, 7,183, 97, 87, 35,222, 28,123,106, 90,143,223,187,246,180,190,218,189, 47,163, 95,143, 84,214, 42,200,222, 70, 90,208,241, + 80,139,118,189,222,181,162,137, 26, 2,211, 62, 78, 19, 36, 95,243,172,215,149, 83,111,149,218,185,168,219, 33, 0, 82,108,140, + 53, 54, 68,112,221, 72,210,181,135,187,131, 26,220,160,198, 41, 97, 81,166, 98,148, 57,219, 89,150,151, 8, 5,231, 71, 7, 12, + 99,247, 65, 41,141, 65, 23,101,109,215, 48,228,149,118,227, 36,235,182,174,218, 24,194,154,175,236,236, 80,110,228,158, 23, 37, + 90,187, 81, 82,224,251, 8, 96, 52, 24, 56, 63,105,253,226,122, 82,186, 67, 67, 74, 23, 93, 88,199,170,150, 85,225, 10,128, 60, +199,243,125,238,150, 75,132, 21,148, 85,137, 53, 6,175,222, 69, 27,229,215, 5,146,220,128, 74,244,217,226, 93,149,242,102, 8, +199,230, 33,236, 14, 15,118,124,125, 55,201,238,119,161,205,153, 93,157,121, 67,201,179,236, 36, 21,122, 29,206,248,163, 39, 79, + 28, 31,187,204,107, 80,135,173, 59,130,160,101,188,187,195,169,164,210,235,157,186, 49, 77,113, 96,235,253,162, 27,115,123,190, +199,233,201, 41,119,247,119, 8,168,187,122,221, 90,204, 44,240,218,235,239, 96,173,235, 98,133,116,152, 87, 26,225, 88,237, 49, + 23, 66, 56, 63,110, 89, 81, 22,149,251, 12,105, 67,153, 23, 20, 69,225,108,113,190, 71, 24,132, 4,190, 79, 24, 68,236,239, 29, +112,116,120,194,227,243, 39, 60,125,250, 26,103,231,143,121,252,248, 25, 71, 71, 39, 28, 31,159,115,114,124,202,201,201, 35,142, +142,206,216,155,236, 59, 52,232,112,210,118,237, 13,168,196,243,188,118, 44, 24, 6, 1, 65, 20, 18,197, 49,113, 28,187,157, 39, + 16,197,145, 43,124, 42,103, 55,138,194,208,117, 76,133, 19,128, 78, 15,246,209,218, 80,233,138, 74,151,181,176, 85,180, 54, 54, + 81,103,126,183, 41, 11,157,236,121, 37, 37,223,255,254, 15,120,121,113,201,179,103,207, 24,143, 71, 72,207, 9,231, 6,195, 1, +151, 87, 87,252,246,131, 95,115,125,241, 53, 87,175,190, 97,185, 90, 49, 28, 78, 88,173, 22, 20, 89, 66,178,156,147,165, 57,190, +231,241,253, 31,253,132,192, 87, 28, 76, 15, 57,123,252,180,198,246,150, 40, 47,224,248,236,148,104, 56, 70, 9, 73,154,174, 64, + 10,242, 60,199,247,124,206, 31, 61, 97,182,152,113,176,183,143, 69, 16,197,145,227, 61,148, 5, 85, 85,145,172,150,232, 74,163, +164,197,243, 36, 65, 56, 98, 60, 57, 36, 89,222, 33,176, 68,241, 0, 35, 60,132, 84, 4,241,128, 52,113,154,141,170, 44,249,242, +179, 15,136, 7, 35, 52,150,213,252,150, 82,107, 39,194,171, 10,146,229,204,173, 44,164, 36, 75, 19,140, 49,228,101, 69,228, 7, +220,222, 92, 49, 61,152,114, 63,155,179,183,191,207,252,238, 14,233, 41,132,132, 50,119, 22, 62, 91, 91, 46, 77,189,130,161, 94, + 27, 57, 8,204, 26, 88, 35, 60,143,217,237, 21,195,225,152,243, 71,143, 9, 2,159,249,108,198,120, 52,170,199,213, 30, 82, 9, +178,213, 10,139, 97, 48, 24,214,201,110,238,222, 84,212,148, 63, 23,223,219,196,226,218, 14,124,198,182,194, 77,175,153, 58,117, + 58,113, 37,229, 3, 69,184,236, 48,226, 85,231, 28, 81,109,129,176,126, 92,133,174, 12, 66,168,154,122,167,121,253,245,215,241, +131,128,213,114,213, 83,187,111,250,207,123,106,120,118,228,131,108, 28,188, 93, 76,108,119,164,222, 54,154, 27,145,169,155,202, +246,245,153,182,177,178, 20, 59,236,185, 98, 87,138,250,198,124, 82,236, 38,177, 62,148, 17,255, 0, 61,182,183,226, 80,135,167, + 14, 19,219, 61,208,121,232,169, 8, 92, 6,111,135, 44,100,155, 76,244, 22, 18, 34,215, 22,182,182, 98,114, 85,156,176,162,245, +218,118, 31,212,212,226, 54,185,230, 19,244,196,111,237,239,175,214,187,199,230, 64,106,131, 54,234, 55, 73, 55, 53,170,219, 85, +110, 90,109,214,111,218,245,203, 40,154, 17,142,144, 40,105,217,175,114,170, 98, 69,154, 57, 75, 90,232,251, 28,237, 79,240,164, +187, 73, 22,101, 65,228, 7, 88,220, 77, 46, 43,139,214,254,230,188,159, 21, 94,171,242,116, 40, 73,107,113, 22, 40,107,241,164, +219, 75, 5,129,135, 39, 21,195,193,128,178, 42,107, 86,183, 27,167,150,149,166, 40,202, 26,224,160,235,125,173,164,172, 52,190, +175,200,203,138, 82, 87,232,170, 34,201,115,148, 48,196, 53, 2,210, 42,191,135, 88, 84, 15,196,167, 54,215,209,237,237,188,214, + 46, 37, 59,152,213, 32, 8, 90,144,200,166, 5,113,115, 87,188,203,234,246,157,170,247,205,241,124, 83, 96,216,166,214,111,228, +105,162,115,168, 55,100, 52,197,225,201,137, 67,162, 74,193, 42, 73, 40, 75,119,205, 28,229,202,249,160,203,170,164, 42,115,170, +102,244,222, 77,144, 51,182, 21, 7,201, 90,104,246,228,241, 19,238,239,111,221,247,231,142, 8,216, 64, 47,162,104,204,120,188, +207,139,151, 95, 59,194, 95, 45, 52,106,178,180, 27,219,142, 18, 18,171, 43,132, 0,207, 87, 8,105, 81,190,170,119,159,206, 26, + 86,212, 66, 74,171, 13,218,106,202,178, 96, 54,155, 49,159,207,201,242, 12,129, 59,164,180, 54, 68, 97,200,209,201, 41,167,103, +143, 56, 59,127,194,179,215,222,226,252,209, 27,188,246,250,187,188,254,198,219, 60, 58,127,194,249,241, 41,158,114, 10,246,178, + 42,200,242, 20,173, 43,134,195, 33,158,146,196,209,128,241,216,137, 11,155,215,121, 48, 24, 56,234, 89, 81, 32,165, 96, 60, 28, + 57, 80, 73, 81, 48,158,140, 9,130, 16,173, 43,135,149, 53,198,141, 78,141,117,108,137,118,115,182, 6, 56, 41, 41, 25,196, 49, +113, 52,102,177, 88,240,201, 71, 31,161,124,143, 31,255,248,143,248,135,127,248, 59,132,112,133, 80,169, 43, 44, 30,231,175,189, + 69, 85, 89, 87,144,232,130,101,146, 48, 57, 56,228,237,119,223,227,254,230, 18, 63,138,249,139,255,248,191,243,205,203,151,220, +223,223, 49, 28, 14, 49,166, 34, 93, 44,200,210, 5,171,229, 10,107, 45, 39,103, 79, 16,194,163, 76, 86, 8,224,254,230, 26,140, + 33, 77, 86, 76,246, 38,148, 89, 74, 60,136,177, 70, 99,180,139,225,181,214, 16,199, 3,162, 48,100,122,122, 78,146,205,137,130, +129, 59, 16,253,208,113,242, 11,183, 94, 75, 22, 51,178, 85,194,124, 54, 35, 77, 50,130, 40,102, 24, 15, 72,210,132, 60, 77, 8, +131, 24,229, 41,116, 85,146, 36, 41,123,251, 83,146,213, 2,172,102, 48, 24, 17, 69, 17, 89,158,176, 92, 44, 24, 14, 6,164,105, +206,254,225,148,187,155,107,252, 32, 96, 16,143, 24,140,247,136, 7, 67,151,109,144,151, 88,187,118,106,172, 5,170,245,200,219, + 90,226,193,152,187,235, 87, 44,151, 75, 6,227, 9,113, 20,113,115,117,201,104,111,143,178, 42,145,210,199, 86, 5,203,213,138, +189,253,125,199,139,175,189,233,190, 39, 41,139,162, 46,194, 84,143,123,161,148,172,221, 33,186,142,103, 22, 4,126,176,219,127, +186, 21,183, 45, 59,126,245, 58,242,215,138,173,123,132, 87, 3,113, 26, 64, 77,163, 27,185,159,205,120,235,157,183, 56, 60,156, +146, 36, 9, 90,235, 45,220,235, 67,190,244,135,132,193,187, 84,239, 77,151,223, 13,130,217, 36,199,109,193, 94, 58,130,107,187, +195,135,222, 93, 71,117,191, 91,108,160,111,165,220,116, 32,109, 58,208, 30, 96,175,108, 29,230,125,119,130,247,173,135,120,239, + 2,212,251, 59, 91,211,173,228,218, 94,212,100,128, 55, 36, 48,201,218,206,211,118,231,157,138,167,203, 92, 23,117, 85,210, 34, +245, 58, 86,153,182, 75,219, 1,177,111, 70,126,182,147, 48,166,235, 17,123, 19,109,105,113, 49,157,214,210, 27,237,183,190, 97, +213,223,175, 91, 99, 92,181, 42,192,211, 37,145,201, 89, 90,218,174,206,117, 98, 2, 97,220,129, 28, 72,201, 48, 26, 48,203, 82, +215, 33, 27,139,145, 78, 7,160,107,165,117, 89, 85, 4,158, 7, 82, 58, 91, 85,211, 17,154, 70,136, 1,101,165, 41,171, 18,191, +249, 80, 89,183,223,106,244, 7,210,119, 42,123,149, 67,234,151,220, 47, 87,248,190, 79,178, 90,114, 54,221,231,131,175,190,102, + 28, 13, 40,138,148,202, 74,252,106, 73, 24, 87, 40, 52,153,138,209,158,223,102, 11,203, 7,236,107, 46,144,164, 99,233,175, 15, +239,166,131, 46,139,162,238,248,215,227,239,205, 17,250,174, 81,252, 46,174,252, 67,190,230,110,177,176,126,147,218,181, 43,130, + 62, 43,190, 21,106,213, 26,134,217,108,206,244, 96,175,238,142,221,161,153, 23,133,163,167, 85,122, 29, 91,218,196,186,218,254, +123, 92,235,181,234, 55,205,178,250,198,233, 1, 69,207, 13,225, 7, 33,171,229,130,143, 62,254, 45,123,227, 61,162, 56, 98, 56, + 24,113,116,120,140,239,123, 92, 94,188,100,185, 90,225, 7, 1,105,154, 17, 4, 62,131, 56,198,247, 67,246,247, 38, 28, 31, 31, + 19, 71, 49,159,126,241, 25,101, 89, 80, 20, 37,195, 65,204,247, 94,127, 29,161, 20, 23,175, 46, 72,235, 67,169,170, 42,110,175, + 95, 49,153, 76, 56,152,140,248,230,197,151,252,227, 47,254, 7,121,158, 19,135, 17,167,167,167,188,241,198,155,220,205, 87,204, + 23,115,108, 85,162,171,146,225,104,200,120, 60,225,192, 59,224,233,227, 39, 92,188,186, 96, 54,155, 19,142,195,246,119,197, 90, +103,187,170,195, 91,202,178,100,111,207,117,252, 69, 81, 16,197, 49,126, 24,112,125,115,131,167, 20,199, 71,199,204,230,115,132, + 72,200,243,220,233, 5,218,247,207,186, 80, 30, 14,134, 4, 65,200,217,249, 51,226,193,128, 87,255,227,239, 80,210,130,213,124, +254,217,199, 28, 31,159,112,117,117,193,114,185,228, 39,127,252, 83,146, 85,198, 95,255,213,255,237,178,212,139,140,147,211, 39, + 68, 67,167,133,248,224,215,255,200,254,254, 20, 33, 5,255,233,255,252, 63,152,221, 95,179, 88,204, 41,139,156,189,201,136, 52, +203, 64, 56,100,178,169, 36,243,251, 91,180,177,120,190, 71,165,221,253,167, 44, 82, 68, 24, 16,122, 10, 65,192,114,177,100, 56, +140, 81,202,199, 84,117,122, 95, 85,145,231, 5, 47,190,250, 20, 42, 67, 16, 69,172,150, 43,246,132, 32, 77, 74,108, 85,162, 86, + 43, 12,134,100,185, 34, 79,157,214,101,118,115,205,217, 15,127,204,245,229, 21, 58, 47,200,242,132,120, 48,230,240,232,128,187, +187, 91,150,179,123,154,152,210,187,155,107, 78,207, 31, 49, 28,239,147, 39, 9,201, 42, 33, 30,141,157,136, 83, 27,138, 44,167, + 42,243, 86, 20, 25, 69, 49,209,104, 68,178,152,181, 83,178, 70,141,174,181,193,152, 28, 1, 20, 69,206,222,222, 1,203,229,146, +139, 23, 95, 51,217, 63,224,228,252, 41,179,197, 29,163,225,136,162, 40,240,227, 17,100, 9,243,217,156,195,227,211, 86,240,231, + 66,125,234, 21,147,117,227,114,233,249,238,174,221, 54, 39,101,189,190,116,194, 73,135,132, 13,234,113,124,217,163, 84,246, 63, +239,178, 13,231,114,204,247,245,160,181,129,100,105,237,236,149,218,104,180, 5,180,192,243,220,218,225,213,203, 11, 94,127,227, +117,142,143,142,248,242,203,231, 60,255,234, 43,119, 47,214,102, 61,150,111,133,193,157,115, 7,219,219,191,247, 24, 15,155,187, +117, 54,130, 91,196,195, 96,172,157,145,167,155,226,235, 13,244,248,195, 7, 49, 91,235,197,190, 69,124,243,126, 41,182, 2,211, +186,218,183,238, 83,245,186,212,160, 93, 88, 88, 81,139,225,172, 53, 53, 16, 70,238,176, 58,173,145,145,178,107, 97,147,178, 85, +238, 54, 23,207, 8, 23, 68,210, 38,177, 1,202, 56,120,138, 17,160,155,177, 67, 51,222,169,149, 81,186,211, 89, 55, 99,250,110, +164,100, 51,170,109,114,158,155,223,208,200,174,199, 80,244, 40, 88,162, 19, 63,217, 88,148,172, 49,248, 82, 50, 50, 9, 24,131, +209,150,210, 56,133,125,105, 12,121, 89, 16,123,161, 83,138,170,128, 81, 28,145, 21, 21,202, 23, 40,161,208,149, 69,248, 10,107, + 43, 16, 80, 25,141, 47,124,140, 94,167, 29, 89,108,219,205, 33, 4,126, 61,253, 48, 70, 19,171,128,133,206,214,201, 87, 24,116, +141,234, 44,107, 11,200,170, 40,137, 81,164,133, 97, 92,179,185,157,128,201,226, 33,208,126, 72, 82, 24, 2,147,226,123, 26,107, + 98,172, 23, 98,154,169, 65,125,173, 76, 83, 4,117,108, 18,109,193, 35, 93, 69, 33,235,199,111,253,212,181,166,193,108, 6,179, + 60, 32,144,123,200, 39,191,243,123,186,246,182, 46, 41,173,219, 13,116,246,238,198, 24,124,229,161,181,102,181,152,227,237, 31, + 18,250, 65,109,215,113, 7,189,167,188, 54, 12,165, 72, 75,164,240, 17,194, 34,240, 64,148, 61,134,157, 75,173, 82,109, 64,202, +108,126,223, 78,127,154,170, 90, 41,133,213, 37,133,118, 66,200, 60,203, 48, 70,163,148,207,114, 53, 39,142, 6, 76, 15,143,152, + 30, 28, 56, 91,102, 61,122, 92,174, 22, 60,121,252,152, 40, 8,120,117,117,197,112, 48,224,254,230,146,171,171,107,134,163, 33, +121, 54,224,179,207, 63, 71, 2,121,158,214, 55,188,186, 67,171,137,119, 74, 74,132,242,208, 85,217,190, 78, 47, 47, 94,242, 79, +191,252,167, 58,152,198,180,215, 78, 41,201,201,241, 25,199,199, 39,252,205,223,253, 29,105,178,114, 66,183, 90,217, 60, 61, 56, +224,205, 55,223,224,230,246, 22, 33, 4,135,135,135,156,159, 63,162,170, 74,202,210, 48, 30, 11,242, 34, 35, 75, 19,206,142,143, +152,205, 23, 84, 90,179, 55, 26, 59, 60,173, 49,148,182, 68, 87, 14,148, 84, 85,165, 83,214,123,130, 97, 60, 70, 96,185,186,186, +224,242,242, 21, 97, 16,241,236,245,239, 49, 24,132,132, 97,200,106,149,112,117,241, 13,111,190,251, 46,159,125,246, 49, 55,151, + 87,228,201, 2, 83, 20,156,158, 62,230,248,252, 49, 31,254,243,207, 56, 62, 57, 71, 87, 25,215,215,215, 60, 14,125,110, 94,189, + 96,149,101,232, 34,175, 59,225,132,195,211,115, 60, 79,113,115,125,129,167, 2,116, 85,178, 90, 46, 81, 97,204,159,252,219, 63, +229,249,231, 31,145, 37,115,178, 60, 37, 26, 31,241, 7, 63,248, 17,194, 24, 94,190,250, 6,163, 13,171,131, 91,252,208,231,238, +250,150,215,143,206,248,213, 47,254, 59, 69,238, 66, 80,130, 48, 36, 79, 23,181,166,162,194, 23,146, 50,207, 72, 23,203,246,208, +202,211, 21,191,253,197, 63, 80, 84, 5, 85, 85, 58, 61,198,106,134,169, 50, 6,163, 9,152,202,237,197,165, 32, 12,124,238,111, + 46,137, 6, 35,252, 48,164, 42, 92, 7, 44, 61,143,120, 56, 98, 56, 30,177, 92,204, 88,206,239, 49, 90,147,234, 10, 63, 26,224, + 5, 33, 85,225, 98, 74,149,114, 5,162,197,186, 14,214, 88,164, 53,220,223,220,225,249, 30, 81, 13,160,185,189,185,226,248,228, +172,254, 12, 56, 43,219,120, 50,165,170, 42,202,170, 36, 8,195, 26,238, 21, 56,129, 31, 56,118, 60, 2, 41, 75,180,172,192,106, + 71,160,107,195, 91,108,235, 99,111, 28, 0, 74,249,117, 49, 92,186,200, 99,217, 4,196,168, 13,202,104,205, 35, 17, 29, 74, 93, +173, 39,113,130,204, 90,199, 99, 12,165, 41,241,125,143,251,187,123, 86, 39, 9,227,241,136,183,223,125,155, 39,143, 31,243,155, +223,254,150,217,108,238,116, 50,117, 35,213,222, 75, 68,167,209,236,106,199, 54,133,114, 29,103,214,183, 82, 53, 55,232,163, 59, +181, 73,157,201,226,183, 29,226,155,186,160,237,102,218,238,116, 8,245, 15,244, 93,137,168,219, 63, 71, 29,158, 62,122,255, 97, + 90,156,172, 5, 85,118,171,250, 88, 43, 5,109, 59,122,183,157,202,168,151, 65,107,233, 97, 76, 27,118,118, 27, 21,183, 54,145, +119, 20,128,245,155,161,229,180,119, 84,133,205, 65,220,236, 44,186, 7,129, 16, 91,170, 98, 54, 2, 53,122, 83,130, 78,183, 40, +235,245,129, 18,134, 65,153, 98,117,201,170,200, 89, 36,153,251, 96, 2,161,130,201,100,236, 60,194,202, 99, 58, 30,178, 76, 82, +164, 39, 73,139,178,174,100,235,174,178,158, 2,248,158,215,243, 69, 87,218, 80, 20, 21, 65,224, 35,235, 73,133,239,121, 68,129, + 79, 28,134,228, 85, 81, 39,135, 81, 43,233, 93, 39, 47, 85,157,237, 94,143,221,242,170, 32,240, 61,238,150, 43,192, 18,251, 33, +171, 44, 35, 8,125,244,112,159, 82,248, 88,229, 70,109, 86, 42,247,193,169,199,233, 93, 65,135,106, 89,252,107,101,166,177,235, + 67,162, 9,115,232,178,240,237, 3, 98,184, 7, 45,107, 15,128,104,196,239,178,131,218,252,185, 53,204,195, 26,139, 31,134,196, +131, 1,167, 71,199,220,220,222, 56,127,175,181,248,190,135,174,156,158, 65, 87,110, 12, 94,149, 85, 47, 71,218,152,198,106, 83, +239,249, 0, 21,132,156,157,158, 97,180, 38, 73, 19,202,220, 77, 42,226, 56,198, 8,159, 31,253,232, 39, 76,167, 71,174,211, 80, + 62, 74,194,108, 54, 39, 30,196,124,252,201,135, 92, 94, 95,241,252,249, 23,124,249,197,167,124,253,213,151,220,221,222,113,125, +123,203,245,221, 45,201,114,201, 7, 31,252,150,187,217,140,225,104,200,222,222, 1, 79,159, 60,115, 29,168,214,140, 70, 19, 60, +233,113,119,123, 71, 89, 85, 12, 6, 67,103, 97,146,158, 83, 92,235,202,237,185,107, 87,133, 54, 27,255, 94,186, 21,206,114, 49, +227,242,242,130,197, 98,193,114,181, 98,185, 88,146,164, 25,101,153,115, 63,191,231,249,243,231,124,243,205, 75,238,238,238,120, +254,252, 75,190,252,242, 57, 55,119,183, 88, 11, 71,135,135, 72,225,194,109,156,186,217,221, 8,155, 93,123, 19,199, 90, 85,149, + 91,117, 52,186, 20,165, 24,196, 3, 84,232, 19,120, 1,195,225,132, 39,207, 94,227,228,244,140, 95,252,236,103, 24,235,172, 86, + 74,121,228, 89,198,211, 71,103,220,222,221,114,246,248, 77,103, 3,155, 76,248,234,179,143,176, 72,242, 34,225, 95,253,235, 63, +229, 63,252,249, 95,112,117,125,197,217,147,215,240,253, 0,207,115,130,200,192, 15,200,107, 48,142,146,146,103,111,188, 77,154, +103, 76,246,167, 76, 15,143,120,241,229,231,188,250,230, 11,116, 85, 16,135, 62,215,151, 23,124,245,229,167,188,186,188, 64, 10, +197,139,175, 62, 38, 77, 83,138,220,176,183,127,192,243,231, 95,162,176, 20,121,201,193,209, 9, 40,143,170,116, 69, 91, 24,134, + 20,149, 38, 75, 19,116,165,235, 73,161,219,125,151, 69, 94,199,209,202,118,130,232,162, 86,115, 38,211, 19,138, 60,119, 96,151, + 58, 24,167, 44, 11,178, 60, 39, 30, 14, 72,146,165, 35, 87, 6, 1,201,114,197,104, 52,102, 52,158,184, 4,179,178,196,148, 5, +195,241,190, 75, 8,172,111,166,101, 89, 82,150, 85,175,160,150, 10, 42, 93,145,165, 43,180,214, 68, 81,196,205,245, 37,135, 71, + 39,117, 1, 92, 81,150, 21,123,251, 7,120, 53,170,182,177,191, 33,234, 72,226, 90,152, 25,248, 1,198, 26,103, 93,172, 53, 20, + 94, 13,208,169, 61, 66,110, 13, 91,139,103,221, 61,163,155,242,214, 76,109,250, 86,232,102,232,170,164, 11, 49,106,238, 43, 77, +115, 99, 59, 93,119,115, 64, 45,146, 37,143, 31, 61,170, 67,123, 70,188,254,250,235,132, 81,196, 98, 62,223, 98,172,111, 89,190, +100,223,111,190,137, 27,239,218,175,119,209,233,196, 67, 25, 21,157, 17,252,182,165, 79,110,228,168,244, 15,225,102,164,190, 41, + 74,223, 28,211,175, 11,169,205,149,248,238,253,122,215,153,160, 14, 79,207,223,223, 94,250,175,115,156,155,253,183,148,114, 35, +208,197,174,237,101,182,111,177,233,222,176, 77,125, 32,183, 9, 91, 29,235,152,221,176,178, 53,233, 56,107,127, 97, 93, 4,200, +141, 23,162, 59,190,237,240,165,177,125, 6,122,119,212,188, 21, 62,177,163,136,177,245, 1,230, 89,131,151, 47,209, 85, 65,146, + 59, 11, 90, 89, 57,145,147,242,224,112, 60, 6, 1, 70,107, 70, 81, 76, 97, 42,132, 80,100, 85, 78,146, 23, 45, 10,177, 81, 98, + 54,187,198, 82,107,140,133, 82,187,188,103, 37,107, 20,173, 82,196, 81,132, 0,130, 32,194, 74, 81,179,144, 53, 86, 8,170,218, + 31,172,148,155,123,248,158,135,176,130,172,204,241, 60,159,249, 98, 65, 89,106,246,134, 35, 42, 83,145,101, 57,158, 23, 98, 7, +123, 88, 63,196, 42,223,121,216,235,131,219,238,176,146, 53,164,181,230,242, 54,100, 48,187,129,128,180,205, 24,240, 59,194, 96, + 30,130,219,124, 43,160,102,135, 26,126,119,113, 32,214,215,181, 22, 89, 90, 99,152, 30, 30,115,116,112,192,124, 49,167, 40,114, +140,177,237, 46, 50, 8, 66, 76,237, 75,175, 42,167,140,110,188,180,205,141,168,185,233, 90,235,244, 27, 79,158, 60,193, 24,195, +108, 62,171,189,227,212, 55, 60,193,151, 95,125, 73,158, 38, 92, 95,190,226,246,254, 14,173, 75,238,239,174,249,230,226, 37,101, + 89, 80, 22, 57, 73,146,184,206,163, 44,201,243,140,213,114,193, 98, 62,227,230,230,154, 52, 77,200,178,148, 44, 73,152,205,102, +124,250,233, 39,220,222, 92, 51,159,207,152,207,103, 28, 28, 28,242,236,217,155,100, 89,202, 42, 89,213, 35,245, 1,167,167,143, + 56, 57,123,196, 42, 73,120,235,173,183,249,254,239,189, 71, 20, 71, 28,236, 79,121,246,250,155,188,246,218,247,144, 18,142,166, + 83,158, 61,125,198,123,223,255, 1,239,189,247, 3, 0, 46,111,175,193, 88,138,162,132,122,173,228,130, 68,114,178, 60,101,177, +156,115,123,123,203,203,139,151,124,242,233,199,252,250,215,191,230,195, 15, 63, 36, 73, 18,164, 80,188,254,198,107,120, 82, 80, + 25, 87, 16, 57,175,181,114,137, 95,110,214,132, 69, 48, 24, 77, 40,138,138,171,203, 87,148, 85, 78,154, 44,249,205,175,127, 73, +158, 44, 57, 61, 61,225, 47,255,242,127,227,235,175, 62,231,207,255,252, 47,185,186,185, 99,178, 63,229, 31,127,241, 51, 22,203, +185,187,121,239, 31, 82,230, 43, 14, 79,207,136,227, 1,255,239,127,251,175, 12,134, 19, 38,123, 7,124,250,225,111,184,189,189, + 70,121,138,213,106, 78,186,156,147, 37, 75,124, 79, 49,220,155,242,226,249,231, 36,243,123,110,175, 47, 89,101, 41, 18,203,222, +100, 8,202, 35, 47, 5,105,186,100,113,127,143, 21, 46,254,243,250,242, 37,249,114,201,139,175, 63, 39, 91,185, 64,160, 32,240, +185,191,191,197,154,170,221,247,166, 89, 82,239,184,139, 90, 27,179, 6,251, 24, 83, 43,210,195,144,241,120, 76, 89,148,132, 65, +132,174, 44, 85, 89, 50, 24, 14, 40,242, 2,163,203,118, 45,103,170, 10, 83, 85,248,210, 39, 93, 45,137, 71, 99,130, 32,224,246, +234,165, 75,206, 11, 2, 38,123,123, 12,134, 35,198,147, 3,172,133, 50, 75,107,214,194, 58,100,106, 77, 56, 19, 45,129,206, 69, +189,106,162,193, 16,223,243, 9,195, 16,131,165, 42, 11,151, 56, 24, 13,106, 45,132, 68, 73,175, 86,161, 43,172, 17, 14,204,100, + 52,126,224, 59,199, 77,227,254,176,198,165, 25,118, 84,220, 78,181,222, 8,230, 84,219,133,175,215,123,238,218,108,250,202, 69, +139,114, 93,223, 35, 85, 45,212,149,178,249,108,187,199, 43,178, 28, 95,249, 76,198, 99, 71, 53,244, 20,167, 39, 39, 60,125,246, +148, 66, 87,164, 73,210,102, 65,116,249,235, 61,203,218, 38,172, 6,209,167,203,137,221,214,222,222,185,216,163, 36,138,222,129, +222,109, 24,173,221, 22,152, 55,250,154,117,242,169,248, 14,177,155,224,219,110,147,162, 22, 64,175,197,116,253,160, 53, 79,108, + 4,158,244,118, 12, 29,195,127, 59,222,104,119, 21,162,247,226,174,247,162,235,155,175, 49,102,157, 99,222, 24,228,233, 11, 12, +186, 35,116, 83,251, 77,117,131,162,108,124,235,221,206,174, 27, 26,209,233, 30,155,155,110,151,171,221,132,181,244,162, 8, 30, +160,172,117, 31,223,104, 77,158,151, 72,219,247, 75, 90, 44, 85,101,200,106,175,167,167,156, 63, 61, 10,124, 22,105,198, 32,136, +184,183, 43, 87,229, 74,217, 86,236,221,231,209,236,130, 74,173, 9, 81,245,155,132,118,183,174,181, 70,225,186, 32,165, 20,182, + 62,220,155,113,124, 85,185, 78, 31, 91, 81,232,138,178,112, 9,112,121,161, 41,247, 52,161,239, 99,173, 65, 47,239,145,210, 67, + 15,247, 90,239,127, 79, 44, 88, 95, 87, 99,129, 90,132,178,182,161,208, 75,193,115,222,123,211,217, 64,213, 81,168, 59,222,121, +191, 83,204,234,230, 8,126,211,202,177, 49,226,234,237,223, 59,182, 26, 99,113,209,147,190, 71, 90,228, 4,171, 51, 14,171, 0, + 0, 32, 0, 73, 68, 65, 84,129, 3,122, 84,149,174, 61,214,126,155, 94, 86,105,103,243,170, 76,209,255, 49,157,159,161,181,251, +190, 60,207,241,124,175,102,163, 59,100,177,181,134,155,155, 27,164,148, 92,220,223, 16, 4, 33, 7,123, 19,230,171, 37,167,103, +207, 40,202,156,197,236, 22,109, 12,147,189, 9,121,154,145,165,169,243,199, 87, 46,209,173,251, 73,211,149, 11,241,168,180,174, +133,144,110,162,240,233,167, 31,184, 40,213,122, 74,230,121, 30,215,175,174,184,124,121,129, 84, 10, 79, 74,126,249,203,159,215, +174, 13, 15,207,247,217, 63,152, 82,228, 5,105,186,106,221, 36, 65,224,198,163,143,206, 31,243,238,187,239,145,172,230, 4,202, + 39, 30,196,248,158,207,114,181,226,197, 55, 47,208, 85, 69,109, 74,162, 42, 75,150,245,117, 18, 86,242,252,197, 11, 94,188,252, +134, 95,253,246, 55, 20,105,130, 84, 62,143, 31, 63,194,247,125, 78,142,207, 81, 94,128, 65,115,127,127,199,253,237, 29, 31,127, +240, 91,110,111, 94,241,218,219,239,113,115,121,193,254,209, 41,165,214,188,246,206, 15,249,241, 79,254,152,187,187, 25,149, 81, +252,167,255,252,159,145,162, 64,121, 62,139,249, 61, 89,150,163,203, 10,109, 94, 97, 76,201, 96, 52,224,131, 95,253, 35,209, 96, +200,217,163,167,252,237,127,251,175, 44,238,239,208, 69,206, 60,207, 24,141, 6, 96, 28,114, 84, 5, 49, 85,165,241,164,160, 52, +146, 71,207,222,172, 67,123, 50,194, 40,230,224,232, 8, 37, 61, 62,255,248,183,152, 82,243,234,249,151,132,195, 33,211,227, 51, +146,249,141,139, 39, 85,170, 29,181, 55,125,163, 82,142, 15,177,127,120,198,237,213,133, 43,180,123,239,201,230,159,154,162,102, +151, 75,165, 40, 75,135, 94,245,124,207, 9,216,226, 1,203, 85,213, 58, 5,168,119,225,186,170, 8,194,144,249,221, 53, 71,199, +167,236, 29, 28,113,119,123,139, 95,185,200, 87,107, 97, 56,206, 57, 58, 58, 38,142, 7, 92,188,120,142,164,190, 63, 74, 73, 28, + 15,107, 61, 68,230, 38,126,113, 68,150,229, 20,185,131,225,152,178,226,228,209, 99,226,104, 72,154,164,148,101,201,114, 57, 99, + 60,217,195, 83, 65, 91,208, 42,229, 17,134, 18,139, 35,187, 57,212,178, 89,231,139,215,170,248,178,200,123, 66, 51,223,247,218, +207,177, 18,170, 78,254,163, 45, 60, 84, 29, 93,108,140, 19, 4,119, 71,205,107, 45,148,198,150,245,212,173, 6,210, 56,119,131, +187, 7, 62,255,234, 57,147,201,136,225,104,220,174,161, 38,227, 9,255,230, 79,254,132,203,215, 47,249,197, 63,253, 19,171,229, +170, 14,104, 90, 79, 68,233, 34,150, 69,255, 30,179,158,102,247, 15,241,230, 5,109,108,211,118,147,223, 97,237,142, 20,209, 93, + 8,245,254,196, 98,157,128, 39,118, 80, 50,127,247,191,196, 14,218,102,107,105, 59, 58,125,244,126,143, 4, 39, 55, 18,113, 58, +130,131,245, 78,123,187,211,149,117,176,125,155,243, 84, 87, 13, 77,134,121, 71, 18,216,166,239, 88, 33,182,198,242,221, 10,184, + 23, 83,199,118, 58,148,232,116,250, 91,104, 62,250,170, 69, 54, 42,175,222, 11,216,137, 87, 53,214,162, 4,232,197, 45, 10, 65, +169, 43,178,188,162,212,110, 95,164,168, 59, 20,233,198, 84,101,165,137,253,128,172,112,234,232, 89,146, 56,232, 76,173,202, 55, +181, 66,184,161,203, 85,117,199,159,229, 69,253,179,164,243,164, 6, 62, 22,131,231,249,142,219, 92, 21,200,186, 66, 46, 42, 87, + 24,116,255,124, 89,150, 24, 43, 8,125,143,251,229, 10,139, 64, 73,136,131, 0,132, 32, 47,114,124, 12,194,243, 49,126,236, 38, + 33,245,248, 93,214,187, 94, 79,121,219, 33, 8,221, 81,183, 93,119, 5, 61, 23,193, 78,253, 69,127, 42,242, 59,197,175, 62, 36, + 76,233,220, 0, 69,199,110, 98, 59, 66,146,230, 57, 75, 1,251,211, 41, 65, 16, 80, 21, 37, 6,227, 60,212, 77, 60,169, 20,100, +121,142, 54,110, 95,222, 5, 2, 89,187,238, 56,154,195,223,243, 61, 55, 10, 29, 14,185,189,189, 69,116, 87, 95,158, 98,190, 88, +214, 97, 41,146, 36, 89, 81, 85, 37, 69,153, 49,155,223, 99,235,180,173,170, 44,235,116, 51,214,182,175,250,242,185,159,109, 90, +145, 81, 51,110, 67, 42, 39,220,210,206,194,228, 4, 81,238,123, 53,198, 61,110, 85,145, 21, 69,189,111, 7,109,221,239,154,231, + 25, 69,150, 82, 20, 69,157,157, 93,146, 37, 25, 85, 85,114,123,123,205,213,229, 43,230,179, 25,247,179,123, 46,175,174,184,186, +189, 65,120,138,243,179,115,246,247, 15, 24,143, 39, 60, 58, 63,231,232,248,152, 71,103,231, 76,247, 15,184,124,117,137, 31,122, + 40,223, 35, 10, 35,100,157, 43,126,115,123,195,237,237, 29, 47,190,254,138,175,190,126,206,114, 54,199, 26,195,245,237, 53,175, + 94,190,160,170,211,194,178, 44, 99, 56, 28, 19,132, 3, 86,139,123, 62,250,240, 3,150,203, 37, 6,184,126,117,193,217,217, 35, +158, 62,123,147,197,114, 69,186, 90,160, 45, 60,123,237, 53,230,243, 57, 81, 20, 19,199, 17,179,249, 61, 81, 8,139,217,146,104, + 48, 36, 89,206, 17, 8,170,170,172,117, 57, 6, 79, 73,110,175,175,169,202,148,120, 48,226,236,236, 17, 95,126,246, 9,201,242, +158,170,204,184,120,241, 37,215,223, 60, 39,138,199, 84,214,160,164, 33, 73,150, 4,210, 21,113,123, 7, 83,231,127,215,238,243, + 25,199, 81, 43,200, 29, 79,166, 24, 43, 81, 86,147, 36,171, 30,108,165,121,253,132,168,225, 68,149,139,166,221,223,223,119,201, +140,105,194,104, 60,102, 49,191,103, 48, 24, 56,197,185,239, 17, 13,134,132,241, 16,173, 75, 76, 89, 58,247, 74,178, 34,136, 98, + 4, 22,165, 92, 52,106,150,164, 84,121,194,253,253, 29, 0,131,193,168,221, 99,171, 22,180,226, 80,194, 69, 86, 31,196,202,125, +206,195, 40,100,181, 92, 98,208,132, 81,228, 10,198,178,112, 74,254,178,108,197,164, 13, 83,195,104,183, 58,244,234, 60, 0,223, +115, 99,122,165, 84,173, 9, 18,132, 65,216, 30,156,205,116, 0,220, 46,188, 33, 50,118, 27, 59, 7, 75,146, 45,235, 65,213,212, +203, 46,222,148,110,134, 0,174, 72,119, 5,129, 43,106,203,210, 61,175,253,189,189, 90,137,239, 49, 28, 12,241,189,128,233,116, +159,183,223,250, 30, 22, 7,239,217,178,187,117,238,247, 2,182, 58,112,185, 11,138,213, 82, 52, 55, 0, 81,157,169,200, 26,163, + 43, 58, 19, 97,185,211, 10,190, 57, 62, 95,119,246,114,235, 96,223,164,186,174,167, 30,245,121, 42,215,193,104,219, 93,126,141, +228, 61, 58,123,252,254, 38, 67,183,139,116,221, 52,235, 99, 55, 83,103,100, 93,223,219,118,212,222, 30,170,178, 17,186,245,115, +177,187,104,215,238, 1,209,189,232,118, 35,241, 6,182,233,115,155, 47,144,221,129,139,125, 8,133,186, 57, 62,233, 29,104, 64, + 49,187,197, 23,174, 3,204,235,124, 99,223, 87, 8,235,142,149,189,209, 0,141,192,147,170, 78,238, 18, 40,207, 39, 45, 50,146, +162,112, 2,169,250,102, 46,133,170, 87, 9, 22, 93, 57, 33, 95, 94, 58,102,188, 95, 91, 72,226, 56,116, 89,202,198,214, 42,211, +178, 61, 80,181, 53,104, 99,169,180,198,151, 30,202,115,100, 51, 99, 44,131, 56,100,190,202, 16,128, 39, 85, 13, 47,113,147,149, +178,172, 8,133, 70, 6, 49, 70,249,237,184,171, 65,124,110, 42, 86, 91,223,105,151,112,214, 69, 4, 75,241, 32, 22,214, 62, 56, + 42,223,238,226,191, 45,207,189,251,126,144, 86,244, 68,171,178,254,255, 70,180,199, 58,170,161, 54, 33, 24,140,198,140, 6, 35, + 60,165, 72,107,171, 18,214,137, 11,253, 26,180, 98,172,187, 1, 87,122,125,168,187,235,220,221,249, 59,165,111, 24, 69, 28,236, + 31,112,125,115,133, 87,187, 23,180,214,220,207,102, 88, 93, 57, 56, 72,253, 53,112, 57,228,182,190,217, 53, 31, 88,207,243, 92, + 50, 87,237, 47,182,181,127,157,206,180,161,153, 32, 24,107,208, 90, 83, 22,133, 75,208,234, 60,167, 40,142, 9,194, 33, 86,152, + 26,121,107,218,207,226,104, 56,100, 56, 24, 33,132,106,111,122,206, 2,167,137,135, 3,132,167, 8,163, 24, 93,150,109,144, 77, +243,250,103,105, 74,150,101, 4, 65,204,171,235, 87,220,222,222,112,125,125,197,237,236,158, 36, 77,249,209, 15,127,200,155,175, +191,197, 31,254,193, 79,120,246,248, 9,191,255,251, 63,226,135, 63,248, 33,167,199,167,204,102, 51,198,227, 17,127,240,195,223, +103, 60, 25,243,233,103,159,241,217, 39,159, 33,165, 32,207, 51,246,246,247,209, 70,115,117,121, 1,104,150,203, 37,161, 23,128, + 82,124,246,255,179,246,102,189,146, 36,105,122,222, 99,102,190,198,122,246,220, 51,171, 42,107,237,233,158,158, 25,129, 67,145, + 0, 5, 2, 18, 68,137,146, 40,232, 66,208,223,169, 31, 38,128, 23, 18, 1,174,226, 76, 47,211,211,221,181,103,101,229,114,214, + 88,125, 49, 55, 51, 93,152,185,135, 71,156, 56, 89,213, 67, 38, 80,168, 92,206,137, 19,139,187,153,125,223,247,190,207,251,205, +183,252,236,147, 79,168,173,225,225,147,143,248,207,255,233,223,163,235,146,251, 15,159,240,250,205, 43,156, 46,113,194,240,228, +233,251, 60,120,244, 30,200,132,241,244,144, 31, 94,190,224,225,189,251,212,117,197,112,152, 51, 24, 12,137,162,132, 52, 27, 83, + 55, 21, 85, 85, 19, 39, 57,179,155, 75,138,213, 18, 41, 29, 38,140, 88, 6,163, 41, 82, 70, 56,171, 25, 14,125,120,210,193,225, + 1,149,174, 40, 10,223,225,113,214,145,103, 3,210, 44, 13,155,144,162, 44, 43, 46,206, 95, 83,172,151,157,245,113,247,186,142, +162,144,132,103,124, 50,155,174, 75, 34, 37,145,137,167,248, 21,171,101,184, 78,156, 79, 73,171, 52,214, 56, 6,227, 9, 73,150, + 83,213,254,122, 77, 18, 47, 92, 43,171,130, 56, 29,240,240,201,251,100,195, 33,197,114, 65, 89,174,209,186, 4, 33, 56, 58, 60, +102, 62, 95, 96,106,239,153, 55,109, 39,205, 17,210,226,252,245,145,166,158, 54, 23, 69, 17,167,103,247,252, 99,132, 14, 65, 93, +173,125,146, 97,234,227, 87,163,208,169,240,140, 3, 15,134,137,226,212,103, 25,132, 14,150,117, 94,173, 46,216,172, 37,237, 1, + 71,132,217,251, 22,220,201, 57,132, 80, 91,236, 6,217,131,127,245, 25,243,214,217, 0, 53,235,217,221,130,114,126,177, 88,146, +103, 41,147,241,216,175,207,129,251, 33,112,100,105,202,147,199,143,121,250,228, 49,243,249,156,170,174,182,168,119,187,145,211, +125,150,194,166,115, 41,187,113, 94,127,230,125, 11,224, 42,196, 45,116,122,191,165,222,230,190,239,182,218, 69, 15,106,214,111, +153,239, 35,185,138, 29,130,221, 46,255,253,199,126,169,211, 7,143, 62,223,246, 44,111, 4, 3,174, 39,130,219,187, 88,139,150, +148,179, 33,225,244,197, 0,125, 65,219, 86,208,251, 46,219,187,223,222,216,217,192,183,232,103,189, 13,126,175, 32,171,103,197, +234, 51,197,119,255,189, 31,114,225,110, 5,101,248, 19, 71, 61,191, 33,114, 6,139,175,148,117, 32,192, 73, 33, 48,206, 48, 30, + 12, 54,237, 98, 9, 89, 20, 83, 7,200,204,178, 40,186,121, 78, 39, 50,147, 97, 76, 16,132,111,198,134,205, 38,248, 77,179, 56, + 38, 86, 81,168,218,124,101,223,182,238, 29,208, 24, 63, 43, 83,225, 98,106,137,116,177, 82,204,215, 85,184,184, 19,100,164, 80, +194, 31, 54,138,170, 34,143, 35, 18, 5,100, 99,154,214, 25,208,211, 23,244, 49,141,173, 34,190, 29,103,184,157,175, 19,251,236, +169,123, 54,248,253,123,245,221,214, 55,238,208,128,246,231,255,221,130,213,227,218, 11, 54,180, 53,235, 44,131,225,136,201,116, + 74,150,196,172, 2,133,175,174,170, 45,139,136,105,250,193, 46, 97,166,110,217,130,234,180, 35,161,241,228,128,233,116, 18, 42, + 0,207, 25,168,117, 77,177,246,143,221,175,246,187,113,147,219, 8,238, 60,158,214,171,130, 93,103,241,220,121, 95,108,247,195, +183, 25, 11,225, 58, 86, 50,176,220,235,154,170,244, 10,232,118, 83,246, 36, 47, 67, 89,149, 20,197,202,183,221,237,230,121, 17, + 64, 52,117, 85,121, 47,114,103, 73, 12,135,197,198,208, 52,154,178, 44,184,190,190,192, 26,199,112, 60, 37, 73,115,148,140, 40, +171,154,217,124,134, 19,146, 95,255,234,111,249,237,239,126,203, 31,254,240, 7,190,250,230, 43,234, 90,243, 47,255,231,255, 21, +169, 98,190,123,249,146,183,111,222,240,155,223,254,138,213,114, 65,154,229, 56,103, 25,143, 70,200, 40, 38, 82,138,198, 88,198, +227, 3, 14,142,143,121,245,234, 7,242, 60,103,185,152,241,230,213, 15,188,126,253, 61,215, 87, 23, 52,186,241, 12,114,163, 73, +211,156,179,251,247,120,242,248,125,190,249,234,119,164, 73,202,239,126,251, 43,234,178,160,172, 10,242, 97, 78, 62, 26, 81,149, + 53,113,156, 50,187,185,160,169, 52,247, 30, 62, 98, 52,153, 50,187,122, 75, 99, 60, 24,106, 52, 57, 98, 60,158,176, 92,205,176, +117, 69, 83, 87, 12,134, 67,178,108, 64, 50, 24, 19, 39, 25,117, 89, 96,234,130, 52, 29, 4,157,134,255,188,138,162,160,152, 47, +112,166,233,172,144,237,129,104,195,246, 87, 93,149, 78,207, 78,101,140, 1,107,136, 98,143, 93,213,186,234,173, 57, 14,103, 27, +116, 85,122,246, 68, 18,211,232,198, 11,104,211, 4, 93, 87,212, 85,193,252,250, 2, 39, 28, 7, 7, 71, 68, 73,236, 41,107,166, +166, 40, 43,226, 44,195, 4, 1, 93,235, 54, 82,173, 48,214,181,192, 26, 47, 34,172, 10, 47,230, 59, 60, 58, 97,189, 90, 98, 77, +133,181, 26, 93,149, 84,101,129,181, 58,160,100,227, 45,113,172,179, 22,164, 36,137,211, 46,110,216, 5, 13, 65,187,198,251, 60, + 1,213, 85,159, 27, 62,136,235,249,191,183, 57, 25,155, 10,157, 14,125,220,222,131,109,128,139, 9,152,109, 33,252,123, 91,148, + 37,227,201,196, 67,187,146,184,187,206,155,208, 69,157, 78,167,124,250,201, 39, 12,242,156,235,235,155,174, 67,183,141,184,149, +219,156,246,221, 76,134, 30,226,124, 83, 33,111,207,188,219,145,194, 62, 84,107,159,193,190,251,189,187,170,247,254,207,216,142, + 95,221,142, 59,183, 93,231,251, 86,138,250,222, 49,178, 58,185,247,224,243, 45,203, 80, 63, 14, 85,128, 21, 2, 39,219, 40,235, +158,215, 92,108, 22, 88,217, 35,199,109, 69,224,137, 13,199,125, 43,131,123, 87,128,176, 11,148,233,219,212,118, 15, 4, 59,129, + 31, 91,167,175,222,233,143, 61, 39,171,189, 27, 74, 79, 92,215, 86,170,210, 65,181,184, 33,178,218, 87, 70,134, 0,128, 9,226, +132,144, 50, 20, 69, 50,180,123,107,210, 36,101, 89,174,137,227,136,197,218,207, 6, 85, 20,170,245, 62, 34,176,219,172,131,136, + 4, 65, 18,218,225,121,150, 97,157,223,200, 35,229,193, 51,173,162,217, 9,137,174,117,152,113,249,118,177,138, 4, 77,171,124, +118,134, 36, 73, 72,218, 25,176,104,209,181,134, 65, 20,129,140,176, 81,130,108, 1, 42, 93, 55, 69,110, 57, 4,218,138, 92, 73, +117, 43,170,214,237,232, 19,246,217, 47,222,181, 97,255, 73,195,162, 77, 93,187,213,197, 49, 61,107,135, 12,218,190, 56,242,175, + 53,138, 99, 38,147, 3, 38,163, 33,171,245, 26, 1, 44,151, 43,226,128, 62, 77,147, 4, 93, 85, 88,139,239,152, 56,131,181,155, +249,223, 22,209, 73, 72, 70,227, 17,195,225,152,186, 46,168,171, 10, 37, 37,101, 81,110,161,101,251,215, 91, 91,241,251,245,212, + 32,148, 98, 56, 28,128, 84, 56,172,231,209,247, 94,205, 22,175,161,151, 52,213,249,225, 67,232,134,107,173,151, 97, 83, 30,140, +199, 76,167, 71,216,208,133,112, 29, 25, 79,108, 97, 60,165,148,189,120, 89, 75,146, 14, 56, 60,185,199,217,253,167, 60,124,242, +148,170, 46,208,218,240,179,207,126,206,228,224,136,203,171,183, 44,102, 55,172,150, 11,138,178,228,224,224, 16, 93, 55,140, 71, + 67,150,203, 57,127,254,139, 95,240,222,179,247, 89,172,150, 56, 33,248,219, 95,253,154,255,239, 63,254, 59,192,241,213,215, 95, +114,125,125, 73,173,107,202, 98,205,225,193, 1,203,117,201,131,251,143,176,182, 6, 20, 63,251,197, 95,240,237, 87, 95,114,112, + 56, 33, 73,114,158, 61,251,128,197,122,193,100, 52,226,205, 15, 47, 25,140,189, 82,222, 90, 7, 86,115,118,250,144,191,254,199, +255,132, 39,239,125, 72, 85,174,121,245,242, 37,186, 90, 3,146, 39, 31, 60,231,233, 7,159, 98,116,195,213,205, 5,105, 54, 2, +107,209, 6,214,139,153,111, 5, 3, 89, 18,209,132,238, 69,150,229, 68, 42,241, 25, 21,145, 32,205,134, 92,157,159, 99, 27, 77, + 54, 24, 16, 39, 57, 73,158, 67, 96, 94,172,139, 21,117, 93,123,187,109,111, 19,223, 87,169,155, 0,150,138,162,222,193, 60,140, + 87, 92, 99, 57,185,247, 0, 2,120, 42,244,151, 59,222, 71,163,117,103,250,145, 82, 49, 28,142,168,107, 63, 62,241,243,237,146, +186,172, 49,214,242,222, 7, 31, 19,197, 9,101, 85,226,108,195,120,122, 72, 85,215,222,166, 25, 92, 43, 42,216, 48,227, 40, 70, +201, 24,107, 27,210, 44,167, 44,215,168, 16, 32,179, 90,249,241,145,103, 7, 9,140,174, 89, 47,231,161, 45, 31, 97,154,154, 90, +215, 33,215, 96,115,192,151, 81,180, 1,126, 25,211, 85,248, 66,138,206, 63,238, 83,216, 98,223,165, 84, 81, 24,233,182,149,108, + 72, 18, 84,170,107, 35,187,174,251,219,178, 39,252, 46, 36,163,136,198, 52,196,145,167,114,214,218,107, 92,242,225,144,162, 44, +136,147, 24, 33,101,120,253, 34,196,201, 42, 30, 62,120,192, 71, 31,125,136,214,154,197, 98,233, 55,205, 94,231,113, 27,144,211, +227,200,137,221, 49,226,110,209,178,217,148, 55,224, 24,215,251,189,216, 17,188,201,157, 42, 91,236,153,137,203,157, 65,177,184, +109,111,163, 77,138,235, 63, 38,123,162, 87,131,250,253,228,254,195,207,251,234,196, 62,202, 85, 32, 66,248,138, 64,237,196,209, +209, 83,165, 75,183,253,103,130, 26,189, 13,120, 80,189,196, 42,217,251,189,216,215,198,237,205,115,247, 81,128,118, 55,249,125, +213,250,238,247,118, 72,212, 29,165,226, 93, 45, 98, 1, 84,203, 5,137, 51, 8,225,208,218, 35, 30, 61, 41,203,191,177,214, 88, +198,227, 1,194, 66, 19,108, 38, 34,140, 40, 42,173,169,170,186,219,128, 77, 99,186,246,187, 16,130,166,177,212,181, 38, 77,162, + 32, 44,145, 72, 9,121,150, 6,246,186, 64, 74,207, 9,119,132,214,123,216,188, 85,248,112,253,252, 85, 80,149,154, 60, 75,136, +147, 20, 93,105,242,220, 31, 12,146,216,135, 70, 84, 77, 77,158,100, 72,103,168,179, 1, 22,185, 53,153,112, 45, 77,174,151,223, +173,164,218, 68,150, 56,186,170,165, 63,107,119, 63,161,234,254, 41,115,244,159,188,215,119,212,227,109, 75,155, 20, 27,108, 43, +194,227,118,239,157,158,114, 51,155,161,164,240,202,109,229, 59, 38, 90,111,194, 34,188, 72, 48,116, 66,220,238,248, 32,220, 28, + 73,194,120, 60,233, 68, 80,214, 90,170,186, 14, 16, 33,219,107,195,169,176,152,247,104,249,194, 11, 26,199,211, 41,105,154, 99, +117,229,169,113, 93,170,209,118, 95,162, 61, 60,181,149,187,195, 11, 54,219,217,165,181,126, 1, 77,211, 20,129,135,227, 76,167, + 99,156, 16,228, 89,238, 29, 40,248,113, 81, 59, 11, 54, 54,240,182, 67,171, 79, 55, 21,203,245,140,217,213, 57, 87, 23, 87,100, +105,198,199,159,253,156,175,191,250,146, 90,107,158, 62,126,159, 56, 77,200,243, 33,159,125,250, 51,116,221,112,118,118, 76, 44, + 21, 7, 71,199,252,234, 87,191,226,215,191,253, 53,151,151, 23,212,141, 99, 93, 22, 72, 97,249,234,171, 47, 88, 46, 87,172,215, +171, 78, 31,176, 90, 47, 48, 22, 62,251,179, 95, 80, 21, 5, 31,125,252, 25,117, 83,161, 34,197,122, 89,113,115,249,154,124,144, +243,151,127,241, 79,185,188,126,203,186,172,249,248,147, 79,185,184,184,228,205,155,151,156,157,221,231,231, 63,255, 37, 95,252, +241,239,249,221,111,127,205, 71, 31,255,210,211,238, 98,129,138, 4, 55,215,215,188,254,225, 37,243,155, 11, 38,147, 3,156, 53, + 20,235, 2,219,212,126, 99,202, 6,188,255,201,159, 19, 7,226,163, 84,138,108,144, 83,150, 5,145,138,153, 78, 15, 24, 12, 70, + 56,231,168,214, 11,210, 60, 69,169,152,217,205, 13,229,106, 21,102,207,126, 70,221,244,236, 99,251, 72,138,253, 3,158, 9, 27, +157,255,204,124,127, 75,235,138,229,108,142,140, 99,210,124, 16, 62, 99,187, 9, 39,106,161, 94, 66,224, 76,131,110, 12,103,247, + 31, 81, 87, 37,182,241, 40, 97,163, 45, 72,193,252,250,138, 36,205, 56, 61,187, 79,146,100,172, 86, 43,142, 79,239, 83,174, 87, +152,208,146, 54,198,120,205,129, 49, 12,134, 35, 42,237,181, 37, 82, 69,172,151,115,142, 78,206,130, 42, 61, 64,165, 48,158,201, + 97, 27,172, 53,161, 35,228,136,226,152,186,172,168,170, 2, 23,132,168, 42, 28, 20,165,128, 56,138,252,193, 3, 95,161,183, 7, + 41, 23,144,214,174,199, 59,161,171,154, 55, 27,163, 82, 81,111, 99,221, 84,249,221, 90, 35, 36,113, 18,227, 44,157, 21,112, 93, + 20, 76, 38, 83,178, 44,245, 7,164, 32, 34,181,214, 47, 6, 38,160,122,211, 36,227,131,247,223,227,193,131,251,220,204,102,232, +186,190, 67, 28, 45,119, 90,233,155, 13, 95,202,126,251, 92,222,106,187,111,185,130,220,109,144, 76,255,235,247, 71,151,139,173, +141,255, 78,191,124, 55,203,151,239,104,197,111, 14, 5,234,244,193,147,207,219, 50,187,221,208,157, 0, 23,132,108,109, 11,193, +249, 96,103, 63, 11, 87, 1, 78,210, 62, 65, 37, 59, 59, 90,255, 24,178,185,232,217, 18, 60,237,206,175,247,218,153,250,176,152, + 94, 26,206,150,215,125,135, 59,204, 30, 15,244,222,159,197,237, 12,222,173,167, 34,160, 41, 11, 98, 83,248,180, 36, 99,169, 42, +141, 67,146, 70, 10,107,124,133, 52, 28,166,126,102, 23, 54, 93, 31,193,168, 49,182, 97, 85,214,157,255,210, 26, 19,102,236, 30, +154, 99,156,163,214, 77, 7,187,113,206,144, 40,143, 14,141,133, 12,169, 92, 34,204, 38,189,160,206, 6,224,135,117, 22,148,215, +230,250,196, 49,235,103, 77,249,128,249,106,197, 52,132,126,200,150,146,214, 42,241,157, 37,206,198,212, 50,234,154,233,162,143, +245,140,162, 96,241,234, 7,181,136, 46, 55, 56,138, 34,232, 71,219,222, 77, 64,248,105,246,181,159, 90,181,183,214,157,246,112, +209,205,219, 55,183, 65,235,153,141, 84,204,244,224,128, 40,142,168,202,181,111, 63,215,117,168, 32,252, 34,214, 88,131,176,206, +119, 63,218, 32,138, 91, 27,123,168, 42, 34,229, 5, 57,113, 68, 89,150, 8, 28, 85, 89, 81, 5, 5,187, 64, 32,226,136,127,244, +143,255, 25,149,174,137,147, 8,215, 85,202,144, 68, 49,101, 81, 48,200, 51,234,218,163, 96, 55, 99,173,219, 17,140,119,225,117, + 59,122,162,179,158, 64, 87, 85, 52,186,102,181, 92,133,131,130, 67,197, 49,195,209,196, 87,122,163, 17,227,241, 1, 89,158,115, +112,120, 68,146,166,222,171, 47, 68, 72,244,244,148, 48, 93, 87, 20,235, 21,179,217, 53,235,229,130,139,139,215,222,255,107, 45, +200,136,147,147, 99, 94,191,126,195,155,243, 31,248,246,197,247,220, 92, 95, 34, 84,194,123,207, 63,230,226,237,107, 14, 15, 14, +184,188,120,195,197,197, 27,214, 33,173,206,152,141,154,191, 13,181,121,244,244, 17,139,155, 57, 23,231,111,120,249,242, 37,143, +159, 62, 38,203,199,124,242,209, 39,188,120,241, 13,135,135,167, 20,101,201,197,249, 91,174, 47, 94,131,115,100, 89, 76, 89,173, +124,199, 40, 78,185,153,207,248,237,175,255, 3, 87,151,151,152, 70, 83, 87,107,176,154,241,248,128,195,227, 83,166,135,199,212, + 85, 69, 20, 39,228,121, 78,158, 14,120,251,230,165,255, 58,103,144, 24,214,235, 34, 20, 25, 80, 87,126,110, 45,144, 12,167, 39, + 28, 28, 63,224,205, 15,223, 81,172, 23, 52, 77,229,181, 9,113,140,214, 53, 66, 73, 79, 36,252,137, 7,213,205,230,222,182,148, + 45, 4, 11,101,172,164, 15,163,177,198,127,238,214, 7, 71,121,235, 24,225, 94,111, 40,203,130,124, 48,244, 29,189, 90, 3,214, + 67,135,132,101,181, 92,112,115,117,137,214, 21, 89,150,179, 42, 86, 28, 28,158, 80,149,101,152, 89,199, 33,237,209, 81,235, 53, + 73,146, 34, 4,212, 85, 65, 20, 90,221,195,209, 56,112, 28, 82,170,170,161,177, 13,178, 69,207,226, 19,226,234, 96,227, 27,164, + 41, 56, 40,214, 43,180, 14,174, 8,229,173,207, 73,146, 6, 97,116,171,147,242,218,151, 22, 21, 76,111,147,110, 87,238,118,116, +212,218,164,219, 14,174,255,108, 54,235,177,117, 14, 33, 35,111,227, 85, 18, 33, 21,141, 54,212,101,201,120, 56,242,196, 69, 93, +183,246, 42,170,186, 38, 86, 17,105,154,117,123,197,193,244,128,159,125,246, 25, 89,150,118,160,165,246, 32, 46,164,232, 10,175, +190,207,124,211, 26,151,123,219,229,219,159,187,232,197,203,238,232,182,228,174, 21,188,159,118,119,219,255, 46,118,132,120,155, + 74,188, 83,224,252,232,127, 66,128, 58,189,255,232,243,190, 16,174,171,132,101, 63,102, 46, 0, 2,194,194, 40,182,212,229,219, +200, 59,209, 11, 6,217, 40,165,221, 45,117,244,173,197,123,199, 67, 46,238,192,237,245, 99, 65,247, 65, 78, 68,111, 94,190,219, + 18,126,151,135,250, 22,221,204, 52,136,114,137, 20, 14,221, 24,143,156, 12,173,222,198, 88,140,115, 36,145, 10,252,118,104,172, +103,137, 23,117,137,115,142, 82,155,110, 86,234, 79,197,173, 82,213, 97,157,160,214, 77,184,169, 98,116,211, 16, 71, 49,145,146, +164,113,220,165,164,201,224,109,111, 76,131,177, 46, 84,153,174,227, 37,183,152,197,201,104, 72,170, 20,235, 74, 51,200, 34, 44, +210, 87,235, 42, 66, 7,123,160,140, 18,136, 34,154, 40,233,230, 51,157,122,183, 21,193,216, 94,196,210, 14, 8,102, 75, 9,191, +163, 71,184, 75, 48,119, 23,132,230, 93,112,154,125, 51,251,190, 13,210,237,138, 42, 67, 32,138,181, 22,161, 36, 71,199,199,104, +173, 73, 19,207, 49,183,237,251,215, 5,186, 88,191,105, 9,129,179,166,107,240,239,182,224,109, 88,224,226, 56, 97, 56,204,195, + 99, 53,172, 86,235, 48, 67,244,130,158, 65,150,241,195,247, 47, 88, 45,231, 84,107,111, 43, 26, 14, 7,104,173,201,179,140,241, +100, 66,150,166,158,239, 94,235,206,134,215,130, 56,228,158,247,205,221,161, 87,216,103,255,243,240, 19, 77, 93,150, 20,235,133, +143,249,172, 86, 20,197,154,170, 42, 88,174, 86, 24,107, 56, 62,189,199,253, 71,207, 24, 31, 28,113,114,116,234,175, 37, 44,165, +174, 72,243, 28, 43, 36, 42,188, 39,101, 85, 82,213, 53, 95,127,245, 5,243,155, 43,138, 74,115,118,246,200, 31,144,176,188,250, +254, 91, 78, 15, 39, 20,171, 5,111,207,223, 82, 20, 30,208, 82,215,218,111, 64,198, 34, 84, 68,146,230, 28, 30, 31,243,191,255, +111,255, 23,223,190,248, 22,211,212,156,158,156, 49, 24, 77, 61, 11, 61, 31,147,229, 41, 23,231,111,249,234,139,223, 19,199, 49, +171, 85,193,131,135,143, 56, 58, 56,225,147,207,126,193,239,255,240, 43,150,243, 37, 63,124,247, 53,139,155, 27, 76,173,105, 2, +112,198, 31,246,161, 42, 11, 26,235,168,214, 43, 38,135, 39, 60,126,246,156,171,171, 11, 22, 55,151, 72,169, 24,140, 38, 24,237, +117, 5,211,201, 33,206, 9,174,175,223,226,172, 99,185, 90,114,254,250,123,174,175, 47,124,165,105,125, 90,158,138, 20,117,173, + 3, 31, 66,221,218,212,239, 74, 36,220, 93, 83,218, 80,148,206,122, 27, 20,230,198,154,142,219,213,138, 97,189, 5,209, 59, 31, +108,211, 80,215,254,122,114,198,110, 21, 28,113,146,146,231, 3,170,170,166,169, 27, 6, 89, 74, 99,106,142, 79,238,147, 37, 25, +168,136,135, 79,159,146,230, 3, 76, 99,177, 66, 34,218, 14,169,107,109,104, 2, 21, 39, 72, 41, 73,179,156, 36, 27, 4, 33,168, +221,154, 37, 91,235, 40,203,181,207, 59,200, 7,222,214, 91,107,154, 70, 19, 71,113,199, 8,145, 1,138,213,229, 67,116, 99,215, +182, 83, 26,196,194,206,110,181,183,219, 49,197,238, 6,218,102,134, 24,227, 45,139,198,250,194, 72, 55, 13,101, 85, 49,153,140, +201,210, 20,132, 87,201,107,237,115, 54, 84, 79,160,218,178, 75,112,112,255,222,125, 62,249,228, 83,138,162, 96,181, 90,117,250, +168,182,149,238,246,242,215, 55, 0, 27, 21,121,215,144,216,219,249,221,165,196,237, 48,105,183,146, 50,183, 71,110,109, 86,202, +173,172,247,173,199,185,195, 38, 44,229,173, 34,218, 1,234,236,193,227,207,183, 12,249, 97,131,117, 98,147,143,220,253, 95,169, +141, 80,109, 55, 33,103, 75, 17,191,227,237,107,177,124, 33,183,119,223, 12, 85,238, 8,218,216,121, 73,251, 80,125,110, 15,127, + 92,220,177,129,236, 99,145,223, 69, 56,107, 83,228,154,229, 53,177,128,166,241,155,184,177,142, 72,121,174,187, 9,201, 73,227, +161,207, 77, 54,129,215,222, 88, 95,165,232,198,208, 52,182,203,205,182, 29,149,207, 39,186,185,208,154,243,161, 30, 46,156,122, + 37, 89,136,133,140, 66, 86,184, 49,155,138, 82, 7,197,188, 15, 41,233,228, 54,140,179,140, 56,137,169,117, 77,146, 36, 84, 33, +227,189,109,135, 33, 64,198, 57, 38, 78, 17,217, 32,224, 75,125, 86,186,106, 45,110,253,174, 70,231, 77,119,157,184,175, 59, 28, +253, 72, 64,203, 93, 27,247,143, 85,238, 91, 7,197,190,155,161,167,152, 19,110,179,176,181, 28,133, 22,124,209,182,125,199,147, + 41,186,169, 57,152, 76, 89, 23, 69, 0,135,148, 93,197,107,173,243,121,243,206,117,212,188,246,101,109, 64, 52,110,171, 19,116, +124,116, 72, 81,172, 49,141,102,185, 92,119,190,221,182,194,111, 26,237, 15, 93,206, 4,248,199, 6, 78, 82, 55,134, 7, 15, 31, + 83, 55,154,117,177,246, 29,151, 61,226,206, 31,179, 2,238,251,251, 62,252, 36,196,174, 35, 66, 88, 71, 62, 24,161,155, 26,163, +107,140, 54,204,231,115,174,222,190, 97,118,245,150,171,235,115,180,209,124,240,252, 57,143, 31,191,135, 16,138,147,163, 99,127, +200, 76, 18,164, 20,148,235,181,183,213, 57,139,112,150,171,171, 43,202,114, 78, 93,148,188,247,244, 9,211,201,148,175,191,252, +146,178,170,152,205,102,232,178,194,234,166,187, 62, 84, 20,161, 84,140,138, 99, 30, 62,126,204, 31,255,240, 7,206,206,238, 99, + 29,220, 92,159,123,240,138,178,172, 43,195, 55, 95,125,201,241,233, 61, 62,252,240, 19,170,170, 96,189, 90, 96,117, 65,101, 52, +167,167, 79, 1,193,235,215, 63,132, 4, 52,159, 49, 30,199, 17,121,158,113,239,254, 99,134,147, 3,142,142,239,163, 77, 67,150, +166,252,254, 55,191, 66,151, 75,226, 56,162,174, 11,226, 52,231,232,248, 30,171,213, 2,211,104, 31,232, 99, 44,186, 44,209,117, +137, 8,122,150,186,170,136, 84, 16,102,105, 15, 13, 18, 97,227,181,198,254,120, 62,198, 59,216, 13,237,230,230,239, 33, 75, 54, + 24,162,181,233,218,240,161,111, 29,192, 47, 73,167,165,240,215,152,237, 54,134, 72, 74,178,124, 72, 58, 24,115,120,116,204, 96, + 52,198, 88,195,122, 54, 99, 54,191,164, 40, 10,226, 56, 70,169, 8,173, 27, 14, 14, 15,121,250,254,115, 14, 14, 78,144,202,143, +163,192,119, 10, 99, 21,177,154, 95,147,100, 25,214,193,116,114,128, 84,138,166,169,169,171, 34, 68, 1,251, 77,183,105, 60, 64, + 41,105, 81,180,218, 80, 87,229,166,219, 23,249,110, 67,155, 88, 25, 71,202, 87,238, 1, 51,190,219, 21,245, 21,122, 27,226, 34, +183,196,172,109,134, 72,183,131, 4,236,108,227, 12, 66, 18,128, 73, 13,207, 63,248, 0,173, 75,207,182,143,146,238,125,202,178, + 44,132, 15,169, 32, 28,244,157,200, 52, 78,248,240,249,115,206, 78, 79,185,188,184,244,221, 20, 41,182, 50, 49, 90,196,242,174, +114,254, 86,212,170,144, 91, 84,183,109,178,155,236,189,214,125, 24,246,237, 25,120, 43,164, 22,130,157,245,181,127, 0,216, 9, +227,146,189,238, 64, 95,128,238,219,239,143, 63,223, 66,227, 9,182, 44, 77, 91,133,255, 45, 49,145,216,218,140,251,204, 92,185, +139,255, 20,155,147,196,173,182, 57,123,120,251,253, 96,249,222, 98,191,111,158,181,187,113,247,193, 6,187,127,222,215,150,191, + 5,160, 9,234,203,122, 49, 35,197, 3, 90,234,166,217, 92,172,182,193, 58,129,179,142, 44,141, 59, 32, 65,165, 53,198, 26,175, +110, 55,173, 60,206, 33,149, 12,254,104,225, 47,206,198,118, 51,107,107, 44,105, 26,211,104, 77, 26, 43,178, 36,241, 80,135,112, +131, 8, 65,136,190,244,182, 58, 4, 33,206,181, 9,213,165,111,191, 71, 81,228,219,176, 66, 81,212, 21, 81,184,176,148, 82, 62, +171, 59, 78, 40,162, 28, 68,220,113,244,237, 86, 16, 67,175,179, 18, 14, 4, 74, 41,127,163,246, 85,160,189,228,187, 63,181,213, +254, 46,133,252, 93,234,248,190,234, 94,182,215,142,216,109, 91,109, 70, 41,163,201, 20,112, 28, 77, 15, 41, 74,239, 66, 40,214, +235,237, 14,142,117,221, 76,189,221,200,187, 67, 82,248,115, 55,238,145,146,163,195, 3,138, 98, 29,178,219, 43,166,147,105,183, + 24,153, 64,169,179,193, 98,214, 46,224, 77, 99, 66, 21,148, 18, 69, 49,195, 65,198,229,229,149,175,186, 92, 63,171,198,117,130, + 79,223, 18,108,103,224,238,142, 9,149,219, 11,222,235,235, 93,156,181, 84, 85,133, 64,118,223, 19,199, 49,113,150,130,244,213, +134,107, 26, 46, 47, 46,120,245,242,123,230, 55, 87,204,174,175, 56, 62, 59, 67, 42,201,112,120,192,179, 15, 62,102, 56, 26,249, + 22,125, 81, 4,174,185, 63,224, 44,151,115, 94,124,255,130,155,229,156,229,114,137, 46,252,204,182,207,136,104, 85,211,214,129, +138, 21, 2,197,195, 71,143,248,242,143,191,101,185, 88, 18,165, 25,177, 74,248,230,219, 63,226,140,163,210, 53, 95,127,245,123, + 26, 93, 99, 12, 12,135, 67, 38,211, 67, 22,243, 27,190,248,226,239,249,235,127,242,207,137,147, 20,107,106,140,109,176, 97, 3, +127,246,252, 51,254,197,255,242,175,104,140,101,185,156,243,246,245, 75,214,235, 25,206, 25,143, 82, 21,158,119,176, 94,205, 25, + 13, 50,164, 84,212,193,247, 60, 26, 29,122, 23, 68,128,198, 88,211,208, 52,126,140, 99,130,162,218, 89,211,241,197,255, 11,103, + 73,155,145, 86,135,206, 86, 29,112,168,223, 53,235, 23, 43,113,146,144, 14, 71,216,198,116,207,197,143, 77,150, 44,102,215, 44, + 23,215, 84,197,138, 56,205, 25, 14, 71,126,236,147,166,172, 86, 11,150,203, 57,139,235,107,110,174, 47,201,135, 35,162, 56,229, +228,244, 30, 54,204,240,149,138, 56, 58,187,199,213,197, 57,113,176,193,198, 73, 74,146, 15, 25,142, 14, 88, 45, 22, 33, 75, 61, +204,190, 3, 38,216, 90,195,112, 52, 36, 73, 18,214,101,217,117, 77,218, 46, 64,176,209,128,148,193,118,234,239, 47,175, 11,217, +245,182,200, 13, 42,118,199,194,220,189,229,206, 98,156, 71,139, 19,116, 7,101, 81, 96,149,226,253,103,207,188, 59, 68,215, 8, + 33, 25, 13,199, 29,214, 55,138,163, 14,236, 37,216,116, 13, 14,167, 7,252,236,179, 79,113,206,113, 51,155,109,145, 71, 85,191, +250, 21,183, 99,199,239,238, 39,246,254,174,179,194,137,158, 72,112,191,194,125, 11, 88,227,122, 92, 14, 17, 60,225, 61, 92,251, +214,127,123, 58,221,109,107,196,111,234, 98, 51,241,112, 65,120,100,119,105,179, 61,165,174,236,183,185,119, 79,170, 59, 76,220, + 93, 95,185, 82,170,179,105,177,131,114,165,183,217,190,139,183,179,111,115,127, 87,187,242,199,236, 86,251,170, 69, 39,192,148, + 5,202,212,128,111,151,219,150,144,212,170,141,133, 64, 5, 43, 89,203,223, 6, 17, 96, 14,190, 26, 20,110, 67,165,242, 10, 70, + 25, 44,109, 22, 21,137, 14,163,104,141,207,229, 78,162,136, 44, 75, 67,176,130,247,156,215,141,199, 75, 86,181,175,132,226, 36, + 9,216, 90,255,134,231, 89, 74, 18, 5, 18,159,243,115, 99,137,159, 27,169, 22, 46,225, 44,201,241,125, 76,152,141,119, 23, 23, +219,240,159,173,207,213,185,222, 66,195,237, 48,131, 61, 66,198,126,123,254,199, 48,177,123, 69,144, 59,156, 2,209, 35, 64,137, + 96,237,176,173, 51,130,254,117,238, 95,207,104, 52, 97, 93,172,121,112,255, 62,203,229,146, 36, 73, 40,202,181,135,103,224, 69, +139, 88,215, 5,232,180,168,216, 77,197,238,122,158,219,136, 44,120,213,139, 98, 29, 90,189, 53,243,229, 44,128,103, 84,151,188, +183, 11,212,232,172,130, 45, 88, 83, 56, 86,203,213, 70, 73,220,187,184, 59,244,110,143, 71, 45,149,242, 99, 18,193, 45,206,126, +127, 51,223,188,157,225, 53,180, 62,249,176, 24,182, 11,140, 53,214, 43,255,155, 86, 28,104,131,214, 3,242, 44, 71, 55,154,171, +171, 75,150,179,107,230,243, 27, 46,175,223, 82, 87, 5,186,209, 33,212,195,115,239,235,186,226,234,242,156,249, 98,193,122,177, +244,156,249,214,190,133,237, 24,250,126,204,228, 56, 58, 62,229,226,226,156,211, 7,247, 40,150,107, 94,125,255, 29,217,112,196, +131,179, 83, 14,142,143,249,250,139, 47, 88, 44,110,176,186,230,244,228, 1,255,252,191,255,159,152,207,111, 88,175,102,128,226, +251, 23,223,242,244,217,115,158, 57, 86,137, 0, 0, 32, 0, 73, 68, 65, 84,190,253,230, 75, 94,124,245, 71,150,139, 57, 82, 74, +226, 36, 97, 52, 61,228,179,159,255,146,127,251,111,254, 31,190,249,242,143,188,121,245,130, 88, 5,129,105, 56,240,166,105, 10, +214, 49, 28,230, 60,125,254,103, 60,253,224,103,220,127,252,190, 87,156, 11,201,225,241, 33,198,250, 77,161,237,176,180,155, 79, + 19,130,115,254, 33,250,144,237, 69,220, 3,142,186, 51,115,127,195, 18,174, 19,199,246,103, 76,109,149,110, 26,131,105, 12,249, + 96,128,174,234, 94, 55, 39,116, 68,132,143, 76,173,116, 77, 28, 39, 88,211,176,152,249,247, 83, 8,135, 83, 18,140,225,230,230, +130,170, 42,104,140,225,240,232,136, 97, 62,160, 49, 13, 73,146, 48,153, 28,113,125,121, 73, 81,172,168, 27,237,225, 51, 81,196, +104,122,136,214,154,162,172,194, 90,226,171, 94, 99, 26,234,170, 70, 69, 17,135, 71,199, 56, 4, 85,224, 66,216, 48, 82,244, 33, + 68, 81, 16,213,181,247,197,182, 93, 76,117,138,241,246,250,151, 61, 81,218,237,209,168, 11,247,156,148, 94,221,191,156, 47,120, +112,239, 1, 71,135,135, 72, 25, 81,107,127,224, 75, 82, 31, 19,220, 22,111, 30,144, 19,240,218, 97,189, 78,211,132,103, 79,223, +227,189,103,207,152,205,103, 84, 85,117,139, 93,178,165,136,151,219, 85,114, 71, 2,109,139, 96,209,115, 16,237,152,128,133, 20, +189, 63,238,142,108,228, 22, 99,165,171,222,247,128,217,196,142,238, 11,225,182, 51,228,219, 64,151,179,135, 79, 62,111, 91, 4, + 86,108, 32, 49,183,230,123, 59, 54,180,125, 57,178,123, 55,225,157,214, 69, 31,153, 42,247, 44,234,251,208,173, 63,229,230,217, + 87,253,255, 41,143,181, 79, 80,103,140, 70,233, 42, 68,178, 58,116,227,243,164, 85,216, 88,154,198,199,180, 14, 6,153,159,149, + 73,225,219,238, 97,211,104,213,238,178,159,106,230, 64, 55,141, 23,176, 5, 37,186,182,126,195,143,148, 34,142, 36,131, 36,245, +180,166, 16,112,163,141,111,239,151,218,116,109,245,186,105,186,239,207,210,216,223,108,237,105, 56, 0, 36, 84, 80,143,214, 90, +211, 24,203,104,124, 64, 37, 98,132,146, 91, 36,165, 62,223, 61,142,162, 16,240,210, 82,247,236,173,214,187,187,213, 68,218,131, +120,253,137, 7,168,189, 27,254,158, 82,180,253,234,166, 55,140,105,209, 72,109,112,139,179,150, 44, 27,144,231, 57, 89,150, 82, +213, 58,224, 98, 27,172, 9, 86,162,208,170,222,132,185,108, 44, 96,222,175,190,225,223, 43,233,115,228, 7,195, 33, 70,251, 10, +101,181, 46,252,236,216,110, 54, 82, 33, 4,105,158, 51,158, 78,113,210,231,167,167,131,140, 52, 73, 73,210,148, 71,143, 30,146, +103, 3,230,215,215,190,226, 13,215, 6, 8,156, 8,208, 38,225, 7,249, 46, 88,130, 58,180,175, 8,202,120, 41,186,228,194,125, +179,219,173,118, 29, 61,225, 95, 55, 86,176, 29,201,206, 6,133,176,223,192,240,182, 45, 54,225, 70, 74, 74,166,227, 41,141, 54, + 27,207,177,109, 24, 13, 6,124,247,226, 59,202,210,115,237,113, 62,255,192, 89,139,136,218,170,179, 55, 71,116, 2, 39, 37, 85, + 89,113,114,246,128, 87,175,190,227,224,232,190,231,180,231,158,118,182, 42, 74,172,174,121,244,244, 61,222,123,254,156,255,240, +239,254, 95,206,223,188,162,209, 53,141, 19, 76, 38, 7,232,186,228,219,175,191, 64,151, 69,168,160, 99,242,225,132,147,147,123, +172,215, 43,222,252,240, 61,229,186,160, 88, 47,168,107,205,120, 60, 10,135, 13,207,242,143,179, 1,131,225, 20, 93,107,254,238, +215,255,153, 31, 94,124,197, 98, 49, 67, 97,169, 10, 15,121,201,243, 1,243,217,117,200, 95, 72,168,117, 5,184, 16,203,106,254, + 65,155, 58, 61,193,105,255,151,237,143, 40, 98,229,109,137, 61,130,230,237, 27,195,122, 37,126,171,152, 15,238, 8, 17,108,101, +190,130, 55,148,101,193, 96, 56,196, 25, 47,198, 29, 77, 15, 25, 79, 14,136,210,140,114,181,162,209, 53,186,246, 68,185,235,235, +107,142,207,238, 99, 92,195,197,219, 87, 28, 29, 28,146, 68, 9,101,185,166, 40,214,232,144,190,119,120,116,204,100,122,132,115, +162, 27, 71,120,183,142, 87,245,151,197,154,225,120,204,244,224,196, 7, 37, 53, 94,145, 30,199,137,111,139,199,209, 6,173,218, +179, 32,171, 48,206,245,111,147,237,196,100,155,102,143,232,209, 22, 55, 40,112,240,107, 87, 28,103, 88, 99,185,186,190,230,195, +231,207, 25,228, 57,145,146,232, 70,163,117,197,104, 48, 64, 8, 15,251, 18, 2, 34, 21,161,148, 36, 77,146, 78, 12, 24,199,138, +233,100,202,103,159,124,198,104, 56,226,242,242,194,183,250, 91,235,155,232, 67, 98,220,118,187,123, 7, 51, 75,127, 31,218, 33, +177,110,123,141,110,235,201,118, 25, 49,109,213,221, 17, 52, 69, 8,185,217, 36,158,135,181, 95,244, 13,121, 27, 91,246,217,131, +199,159,183, 63, 74, 72,113, 11, 52,179,139, 16, 21,253,106,189,143, 90,221,215,148,184,107,161,239,125,127,127, 51,222,109,137, +247,127,246, 62,181,250, 62, 44,233,118,232,188,248,241,120,189, 59, 66, 72,186, 28,247,114,129, 52,198,111,172,161,117,154, 68, +138,198,248, 25,187, 19, 16, 43, 63,235,114, 97,238,110,236,102, 35, 84,157,112,112, 67,233,107, 26,235,189,179, 33, 33, 73, 27, +131,197,227,105,211, 52,102,148,166, 24,103, 3,170,208,183, 80,117, 99, 40,107,237, 55, 92,124, 75,190,189,188, 6,121,134,112, +142, 38, 84,253,198,122,113, 88,146,166, 72,225,187, 12,218, 24,142, 39, 99, 10,149,249,139,100, 7,150,226,218,231,108,125, 6, +124, 43,206,233, 78,160,123, 26,194,110,231, 20,125,235, 61,188,163,139,242, 83,128, 52,110,199, 21,177,223,210,182, 81, 95,180, + 98, 57,149,196, 76,167,135, 76, 38, 99,234, 90, 7,196,101, 67, 85,149,254, 6,177,155, 64, 26, 99,154, 30,221, 78,248, 76,110, +187,253, 42,243,124,192,100, 58,193, 52, 26, 93,215, 44,219,106, 91,184, 46,125,112, 56, 57,224,233,123, 31, 96,173,227, 96, 58, +193, 90,199,209,209, 17,103,247, 31,242,252,249, 71,140, 70, 99,170,178,228,242,242,210,235, 34,220,198,127,239,232, 97,143,157, +232,200,115,173,112,106, 31, 5,209,249, 36,160,158,216,192,179, 36, 58, 4,179,146, 8, 37,125,196,113,112,177, 88, 33,122,124, +137, 13,211,154, 30,182,214, 4,187,159,117,142,229,114, 78, 81,174, 40,171, 18,128, 97,158, 49,187, 58,103,185, 92,161,203, 10, +215,217,237,130,186,219, 25, 80,113, 79,212,229,105,127,141,209,164,131,156, 56, 29, 48, 26,142,248,224,131,231, 60,120,244,152, +217,236, 26,231,252,243,116,141,230, 23,191,252, 71,188,252,225, 59,102, 55,139, 32, 74,172, 64, 42, 46,206,207,185,190,190,164, + 90,175,131,123, 0,162, 52,225,201,123, 31, 50, 61,185, 79, 26,103,220,220, 92,178, 88,206, 40,215,149,239, 80,169,152, 40,205, +112,248,108,238, 60, 27, 80, 20, 75,110,174, 47,169,234,146, 88, 9,154,186,100, 52, 30,250, 42,179, 90, 19, 69, 17,235,229,138, + 40, 73,201,135, 45,206,213,143,197,246, 41,223,255, 75,127,117,155,131, 20,161, 3,226, 61,233, 2,249,163,202,250, 86,252,181, + 37,200, 11,235,106, 93,122,214,125, 54, 24,146, 37, 25,139,217, 21,163,241,152, 52, 31, 80,172,150, 8, 33, 25, 14,199, 20,197, +146,229,108, 65,158, 15,200,210, 1,166,209,220,220,220,144, 13, 50,172,179, 84,235,146,229,106,193,114,185, 32,207,115,226, 44, +103,122,112,194,104,114,224,133,142, 62, 20, 26,103,124, 84, 48, 56, 14, 79, 78, 17, 74, 81, 22, 5, 85, 85,249, 52,191,192,140, +247,135,228,205,248,181,173,160, 55,235,134,220, 18,157,249,195,114,123,112,118, 65,196,232,176,218,119, 97, 42,221,144, 15,188, +128,213, 57,120,250,228, 49, 73,146,122,208, 81,227, 63,179, 56,242,168,231,118, 95,240, 69, 83, 76, 20,249,195,132,112,155,132, +204, 71, 15, 30,242,233, 39, 31,251, 78,220,124,190,229,238,218,133,195,116, 54, 61,177, 13,131,105,157, 45,206,186, 94, 39,190, +111,191,222, 84,246,251,116,104, 91, 27,116, 47,178,124,243, 56, 59, 72,218,126, 32, 77, 47,180, 70, 29, 63,124,252, 57, 33,210, +179, 31, 67,167,186, 68,123,110,129, 96,218,139,232,167,158, 93,247,113,226,119,209,174,253,147,109, 95, 93,184, 53,231, 14,162, +179,221,127,239,111,246, 98,143,165,238,182,213, 64,190,243,207,221, 27,165, 20, 44, 23,224,106, 26,109,104, 66,123, 41, 77, 21, +206,128, 14, 10, 86,176, 12,179,212,103,175, 27, 3, 66,210,212, 14,156, 68,168,205, 7,210,110, 2, 62, 48,196, 95,168,190,213, +230,104, 77, 31,195, 44, 33, 78, 98,148,104, 21,163,254,166,168,154, 6, 29,248,242,198,186,144,214,228,169,114,131, 54, 10,211, +250,159, 93, 53, 26,103, 12,105,156, 4,152,131,162, 52,130, 60,142,137, 70, 19,214,198,134,205, 99, 91,225,209,126,238, 74,249, + 89,188,144, 27,202,211,187,184,239, 63, 86,121,191,203,101,176,119,225,218, 57, 24,114, 11, 29,220,139,229,109, 55, 16,229,197, +114, 81,146, 48, 28, 14,184,119,118, 47, 68,148,122,139,213,122,189, 14,173,123,135,176, 14,203, 70, 17,223,146,176,252,220,207, +110,189, 38,165, 36,163,241, 4,225, 44, 77, 93,177, 92,149,100,195, 17,147,131, 3, 84, 28, 19,199, 9,239, 63,255,136,197,124, +206,226,230,138,249,205,141,183,215, 69, 9, 55,243, 27, 14, 15, 15,177,206, 49, 30,143,248,254,213, 75, 31,148,177,155,195,220, +171,108,183, 88,247, 46, 32,244, 2,164,200, 73,225, 69,142, 81, 68, 20,121,124,167,138,163,158,184,175,101, 66,248,235, 84, 6, +134, 68, 95, 0,217,210,189, 90,111,127, 11,248, 17,189,133,170,117, 89,180,105,125,194,249, 57,238,236,122, 70, 85,148, 27,241, + 36, 6,231, 26,223,118,119, 14, 66,174,188, 37, 32, 75, 3, 68,228,193,179, 15,184,190, 60,231,207,127,241, 11, 78,143,143,249, +155,255,252, 31, 41,138,138,159,255,242,175,248,226,247,191,227,159,253,119,255, 3,127,251, 55,255,137,186, 44, 56, 56, 58,161, + 44,214,204,102,115,116, 93,114,116,116,204,236,242,154,162, 92,163, 34,159, 39,159,231, 57,249, 96,132, 20,142,243,183,175,121, +243,195, 15, 56,173,253, 97,200,214, 84,213,218,139, 70,131,181,177,110, 42, 16,138,170, 88,145,167, 9, 7, 71,199,126,252, 21, +231,100,169,207,181,143,178, 12, 33, 20,117,181, 34, 73, 7, 56,227,153, 6,166,139, 60,253,175,251,171, 27, 41, 57,239,107, 31, + 12,135,225,189,189,123,116,181, 77,243, 12, 93,213, 45, 53,177,191, 63,117, 93, 81,151, 5,197,106,129,109, 26, 22,139,153,199, + 36,235,154, 70,215,157,152, 45,146,176, 94,206,169,155,134,201,225, 49,135, 71, 71,200, 36,225,193,163,167, 24,103,185,127,239, + 33, 32, 88, 44,151,172,230,158,111, 48,155,205, 80, 81,204,193,201, 41, 79,159,126,200, 36,116, 3, 22,179, 57,139,217, 53,121, +150,114,120,124,134, 16,210, 31,206,132, 32,205, 82,191,209, 73, 9,194,235,116, 68,119,157,171,126,238, 91, 87,196,108, 10, 53, +177, 25, 55, 8, 73,227, 92, 16,113,123, 66, 95,156, 36,204,230,215, 28, 76, 15,185,119,239,140, 52, 73,124, 42,157,117, 8, 21, +161,148, 98, 50, 28, 81, 22,101, 23,204,228, 55,119, 21, 70, 10,126, 63, 26,228, 3,178, 52,227,163,143, 62,228,254,253,251, 92, + 94, 93,117, 89,242,219,252,245,221, 25,248, 54,219, 66,116,115,244,237, 72,215,205, 77, 46,122,227, 8, 63, 78,116,114, 91,135, +230,122,110, 49, 41,164, 63,168,110,142, 7,219,163,137,238,125,220, 28, 10,212,233,163,199,159,183, 51,130, 86, 0, 37,247, 97, + 92,219, 13,189, 21, 69,220,122,248,187, 55,243, 93, 28, 95,151,101,190,133, 13,188,219, 22,210, 71,187,238,171,174, 91, 65, 88, + 63,111,253,174, 3, 64,127,243,223,237, 12, 68, 81,228,109, 17,202,195, 68,148, 82, 30,254, 80,174,186,106,217, 90, 71, 28,201, +160, 5,241,213,177, 68,144,196, 1,237, 26, 54, 5,107, 90,196,174, 23,175,181,234,107, 41, 55,155,186,127, 14,254,251,154, 80, +253,229, 73,196, 32, 78, 2,135,217,231, 88, 91,231, 40,116,141, 54, 22, 17,218,247,222, 74, 34, 81, 82,116, 0, 22, 19,188,236, +190,157,231,185,205,214, 54, 72,165, 88,149, 53, 73,154,112,116,116,202,220,184, 45,166,241,174,216,177,237, 52,136,174, 10,219, +182,186,221,201, 22,248,137,126,245,159, 98,127,115,251, 7,199,219,159,123,239,235, 85, 16,250, 40,165, 72,147,148,147,147, 83, +132,128,170,170,113,214, 80, 85,229, 38,213,205,216, 48,166,240,175,213, 6, 72, 75, 11,166,233,107, 79,178, 44, 35,205,115, 34, + 9,166,209, 24, 11, 63,255,197, 95,178, 94,175, 72,211,140, 52, 73,176, 64,158,101,188,121,243,202,219, 16,181,166, 44,214,224, + 4,218,106,158, 60,122,196, 87, 95,254,129,229,106,181,119, 83,239, 78,218,110, 95, 63,100, 35, 60,179,214,183,205,251,118, 40, + 63,127,151,200, 40, 33, 29,142,145,113,130,136,227,110,211, 22, 42, 66,198,113, 71,127, 20,237,245, 18, 2,152,100,228,103,247, + 78,108, 87,250,125,144,212,253,179, 51,174,174,174, 88,204,230,254,253,233,198,109,182,211, 3,244, 91,197, 82, 68,221,125,174, +164, 68,166, 3,178, 60,231,207, 62,251, 25,223,126,253, 5,171,162,164, 44,150,172, 86, 75, 30, 61,120,196,108,113,195,197,249, + 27, 78, 78,239,243,234,135, 87,228,147, 3,180,174, 72,211, 1, 23, 23,231, 20,235, 37, 7, 71, 39,254,179, 77, 51, 14, 14,143, +249,235,127,250,207,248,227,239,127,207,205,213, 57, 85,185, 8,184,216,152, 56,246,168, 83, 33, 21, 66, 70, 28, 28, 29,113,120, +112,196,209,233, 25, 89,150,226, 2, 2,118, 48,152,112,114,239, 9, 69,233,163, 59,173, 13, 97, 57,186, 66,168, 24, 41, 28,197, +170,216, 96, 95,255, 43,112, 23,110,233, 79,130, 99,193, 54, 14,161,228,102,220,177,199,138,187,223, 10,220, 86,155, 97, 60,211, +159,203,247, 24, 7, 18, 65, 93, 53, 12,134, 35,180, 54,140,167, 7, 76,198, 83, 22,203, 57,145, 84, 76,166, 7, 65, 56,151,144, +100, 25,243,155, 43, 98, 37,121,246,222, 7,168, 56,230,240,248,132, 36,241,246,183, 36,142,168,235,146,217,245, 13,111, 94,191, + 97,190, 92,208, 88,199,209,201, 61,242,124, 20,198,131,146,225,120,226,149,249, 77, 77, 89, 20,196, 81,212,165,112,118,145,168, + 33,219,161,237,102,110,107,117,130, 22, 41,104, 35, 92,112, 8, 9, 37,183,187, 20,214,225, 12, 92, 93, 95,113,239,222, 61, 70, +163, 33,113,156,144,101, 89, 23,108,164,235,138,209,112, 64, 89,150,222,234,134,127,142,158,184, 39, 72, 18, 31,222,163,181, 70, + 10,193,209,225, 33, 63,255,217,207,201,179,212,139, 91,173,219, 18,229,110,239, 27,114, 59, 35,229,150,133,141,237,214,122,183, + 1,187, 46, 4,173,117, 91,109, 84,236,108,205,202,247,253,178,194,109,104,174, 59,201,111,234,236, 81, 11,159,217,246,128,183, +213,217,173, 54,234,158,249,116, 95, 86, 47,197, 54,212, 68,222, 10,174,151, 59, 12,224,219,111, 64,187, 17,219,222, 1, 98,223, +166,210,223,208,187,239,219,173,190,187,138, 75,117,177,125, 82,122,251,133, 10,135,153,118, 3,239, 90, 34,237,156, 54,138,144, + 66, 98, 23,215, 96,189,112,198, 6, 88, 68,146,248, 22,188, 14,207, 81, 56, 75, 20,123,192, 76, 21,102,223,132, 17,110, 20,121, + 16,132, 7, 67,120,252,107,251,114, 90, 75,155, 19,194,131,100,210,152, 60,137, 58,170, 91, 18, 41,172,131,162,174, 66, 60,167, +223,184, 93,152, 41, 43,229,173, 35, 74,170,192, 64, 22, 44, 10, 77,164, 20, 78, 73, 84, 72,111, 91, 23, 53,105, 62, 96, 50, 57, +240,155,122,215, 94, 10,113,176,161,181,211,142, 12,228,142, 16,242, 46,189,167,184,171,125,254, 39, 46,128,183, 54,186,254, 97, +176,119,221,245,227,118,133,235,111,234,190,253, 30, 69,138, 60, 31,144, 15, 6,228, 89,234,217,231, 33,244,194, 25, 75, 36, 85, +151,156,214, 90, 5,219,170,214,231,175,219,173,211,184,183,201,141, 17,182, 1,103, 89,173, 11,190,253,246,107,150,179, 27,214, +171, 37,203,229,130,155,235, 43,222,190,254, 33,136,224,108,199, 0, 7, 75, 89, 21,156,157,222,167,105, 52,139,249,156,162,174, +182,104,114,254, 50,113,221,166,126, 59,232, 65,236,238,253, 62,126,216,120,236,172,213, 6,163,141, 71,208, 26,235, 71, 43, 97, + 12,147,143,166,168, 52, 71, 37, 25,233,112, 76,148,100,168, 56,246, 27,125, 20,161,162,216,135,121, 72,133, 10, 32, 36,164, 68, +136, 8, 17,121,168,148,167,156, 25, 94,191,126,237,131,100,122, 68,193,219,159,177, 67,184, 48,174,233,144,207,222, 91,252,240, +209, 83,158, 60,125,198, 71, 31,125,204,203,239,190, 98, 58, 61, 96, 52, 28,240,254,243, 15,249,230,235, 63, 50, 28,141,169,234, +134,139,139, 87,220, 92, 93, 33, 44, 24,171,177, 77, 65, 18,167,222, 67,173,125, 80,199,227,247,223,231,230,102,198,106,118,206, +108, 62, 39, 78, 50,140,169,136,211,140,195,211, 7, 12,198, 83, 26, 93, 51, 28, 77, 56, 60, 58,166, 88,175,169,202, 37,166,174, +248,240,179, 95,114,124,250,144, 55, 47,191,229,252,205, 43,226,216,167,236, 33, 36,186, 40, 60,206,215,104,154,186,238,236,100, +105,238, 45, 82,255,229, 10,248, 29,107,151,219, 56,218,108,227,195,119,116, 11, 54,218,211,221,106, 55,233, 62, 81,113,235,223, +219,182,237,238, 97, 32, 36,217,249, 2,201,251,250,173,179,164, 89,198,106,177, 96, 93,172, 41,150, 11,230,179, 89, 40, 4,252, +215,205,231,115,210, 44,197, 90,195,211,103,239,115,122,230, 67,124,170, 98,141,146, 17,227,209,132,213,114,193,236,250,146,243, +183,175, 56,191,120,195,245,108,134,174, 45,166,105, 24, 12, 70, 76, 15,143, 60,162,182,170,144, 66, 98,116,137,101,163, 49,234, +176,225, 82,108, 93, 87,237, 91,221,218,119, 13, 46,192,104,194, 38,218,115,227, 72, 21, 35, 4,196,105,198,120, 56, 12, 7,251, +196,119, 8, 28,172, 11, 31,120, 53, 25,141,124,215,179, 42,145,161, 66, 87, 81, 68,156,120, 33, 93,154,166, 88,103,136, 34, 47, + 80,126,252,232, 49,159,125,250, 41,171,178,244,184,217, 78,137,206, 86,193, 40,229,142,191,189, 27,183,239,236,115, 91,237,114, +209,213,223,178, 21, 43,183,135,235, 54,123, 64,208,205,211,183,255,107, 83,237,197,166, 99,179,181,169, 63,126,250,185,232,181, +131,216, 81,177,139,222, 27,223,158,166,228, 14,166,117, 23, 20,211,110,158,183, 48,173, 61,246,110,119,112,112, 59, 17,154,123, +230, 12,239,186, 49,250,179,244,150,145,221,125,216,157, 74,177, 85,236,251, 19,162,234, 69,187,202,126,232,125, 79, 24,209,218, +233,162, 40,166, 92, 92, 35,140, 65, 55,222,202,102,156, 35, 79,124,155, 83,155, 0,151, 9,213,162, 64, 80, 53, 33,155,217,109, +128, 53,157,221, 73,122, 75, 91,255,131,150,210,207, 63,141,177,164,113, 68,158,198, 36, 81,140,182, 13,105, 28, 83, 53,117,103, +169,243, 41,111, 33, 7,189,187, 56, 92,119,152,177,192,114, 93,162, 98,133,141, 18,178,216,251, 55, 87,149, 33, 31,142,144,131, + 17,107,219, 77, 61, 59,196,105, 95,161,239,197, 60,118, 67, 91,187,171, 42,223,151,158,247, 39,180,230,247, 47,146,110,255,223, +244,186, 5, 61,225,240,198,238,214,113,152, 61,229, 42,207, 7, 28, 76,189, 18, 30, 28,197,202,207,194, 55,129, 40, 46,176,223, + 67,165,142,236,102,202, 91,155,186, 16, 12, 70, 35,164,240, 2,179,203,235, 27,116,221,132, 3,128,241, 57,228,109,192, 71,219, +169,233, 95,147,206,177, 92, 21,252,227,191,254,111,249,226,203,175,168,203,114,211, 5,105,143,209,129, 44,230,132,235, 9, 94, +110,171, 84,182,237, 64,226,150,184,208,154, 6,173, 75,140,174,113,186,166, 94,175, 49,117, 77, 83,123, 65,147,112, 32,226,136, +100, 48, 66, 40,239,150, 64,198, 68,217, 0,149,229, 36,195,177,175, 86, 48,190, 77,170, 20, 89,154,162,203,138,235,171, 75, 92, +240,216,187,142, 95, 96, 67,220, 99,191, 50, 20, 91, 99, 54, 37, 37,227,131, 67,164, 51,124,252,201,167,124,241,251,191,227,236, +222, 67,140, 46,121,255,253,143,152,223,204, 16, 40, 78,206,206, 88,175,215,100,163, 33,117,209,176, 94,205, 41,215,107,148,138, + 56, 60,185,199,249,249, 27,242,225,144,179, 7, 79, 72,210,148,171,243,183, 92, 92,188,165, 90, 47,105, 2,212, 39,206,114, 78, +207, 30, 98,155, 10, 99, 52,163,209,136,235,171, 43,166,211, 67, 28, 10, 33, 98, 86,203, 57, 95,125,241,247,196,169,162,170, 75, + 47, 58,173, 53, 56, 65,163, 61, 73, 78,134,170, 77, 73,233,213,220, 73,140,174,245,222,121,163,123,135, 75,231, 93, 58,158, 91, + 57, 9, 97,173,106,154,230,150, 39,250, 93,135,224,187, 54,255, 45, 1,101, 56, 0, 55, 58,164,255, 25, 75, 93,151, 33,189, 48, +199, 25,235, 25,242, 85, 65, 89,172,200,243,140, 44, 31,112,116,114,202,114,189,226,219, 47,191,226,219, 47,255,200,197,155,215, +140, 38, 83, 62,248,240, 51,254,197,255,248, 47, 41,155,138,193,112,192,112,228, 43,244,245,170,192, 24, 77, 81,150,204, 23,115, +174,206,207,121,251,234, 13, 85,173, 57, 62, 57, 37,205,114,134,227, 41,206, 58,140, 54, 56,103,188,166,194,109, 79,218,218, 19, +108,123,143,249,194,163,117, 16,184,192,151,247,223,100,240, 98,207, 72, 69, 84, 85,201,225,209, 81,151,182,231, 59, 55,113,176, +251,122, 46,126, 18, 71, 62,245, 48,205, 25,228, 3,170, 96,201, 83,202, 23, 82, 81, 28,119,221, 62,137, 32, 31, 12,248,244,163, +143,185,127,255, 62,203,245,138,117, 89,120, 84,120, 15, 27,219,199,142,111,123,215,247,177, 91,196, 86, 21, 46,187,162,165, 29, + 87,109,218,247, 78,236,132,204,176, 65,197,186, 29,101,122,223,201,164, 78, 30, 62,254,188,157, 93,116, 94,193, 93,163,125, 15, + 64,179,207,255,189,175,234,222,125,161,253,100,180,125,124,246,187, 68, 83,114, 75,238,191,199,210,214,111,201,246,170,203,126, +180,223, 70,236,176,217,240, 93,135, 9,117, 1,191,234, 54, 10,203, 54,117, 43, 8,199,132,209,184,178,216, 18, 18, 37, 74, 18, +197, 10,221,248,208, 20, 33, 61,205, 40, 82, 62, 80,197,226,253,177, 78,224, 35, 24,123,211, 12,111,243, 8, 7,156,240, 28, 77, +120, 12,164, 96,144,120, 75, 73,109, 52,105, 28, 83, 84, 53, 77,104,217,119, 34, 60, 43, 66,234,154, 67, 73,225, 69, 40,206, 97, +144,148,101,133, 84, 17,209,104, 74,158, 36, 24, 93, 83, 59,200,243, 33,209,193, 17, 78, 69, 36,105, 66,150,251, 83,109,146,166, +100, 89, 70, 28, 39,157,183, 82,236,105, 35,137, 61,136, 88,183,103,161,217, 13, 58,249, 41,144, 26, 33,238, 54, 49,238,235, 20, + 1, 91,237,247,214,211, 47,149, 34,203,115,156,128, 7,247,239, 51, 95,204,253,130, 19,184,228, 42,142,113,206,120,145, 92,107, +237,178, 62,199,190,105,204,134, 59,221,123,220,131,163, 67, 34, 1,101,185,102, 62, 95,117, 27,120, 59,139,182, 97, 68,228,118, +221, 1,129,213,190, 90, 45,249,238,229, 11, 38,147, 9,243,217,172,111,192,221,106,199,245,103, 99,155,105,217,230,239,182,207, + 64, 98,239, 33, 72,122, 93,108,128,245, 56, 48, 13,174,105, 16,166,193,213, 37,205,122, 77,181,184,161, 94, 45, 59,124,177,148, +138, 40,203,136,210, 1,217,104,226,217,233,137,247,180,219, 70,115,254,246, 85,207, 38,230, 15, 67,110,171, 45,189, 25, 87,200, + 56,246,145,176, 66, 32,227,216,219,158,206,238,243,222, 7,207, 89,206,174,152, 12,135,212,218,231, 21,124,250,201,159,177, 92, + 92, 51, 61, 60,230,197,203, 23, 52,181,225,226,135, 31,200,242,136,147,251,143,169,171, 53,235,245, 26,221,104,148,107,120,239, +195,207, 72,178,148,170, 44,201,135, 99, 22, 87, 23, 76, 14,142, 80, 73,194,163,167,207, 89,173, 22, 92,188,254, 30, 41, 36,217, + 96,196,114, 49,167, 46, 86,152,198,146,143, 38, 76,143,142,185,190,120, 69,179,158,211, 88,199,104, 52, 70, 55, 13,131,193,144, + 36,205, 2,173, 49, 34,142,211, 16,166,226,173,121, 8, 25, 58,100,110,199, 82,212, 3, 33,253, 3,187, 82,187,157,200, 40,137, +127, 26,146,182, 21, 53,239,181, 45,111,183,136,183, 14, 16, 61, 87,132,119, 46, 56, 78,239,157, 81, 20,235,176,161, 73,110, 46, +175, 24, 12, 7,156, 95,156, 83, 21, 5, 71,167,199, 44, 23, 75,202,181, 31, 31,149,101,193,175,127,243, 55,188,248,250, 43, 46, + 47, 47,152,205,231, 56,231,120,240,248, 41, 15, 30, 63,227,227,143, 62,225,244,222, 35,162, 56,198, 58,195,114,118,195,219, 55, +111, 41,214, 37,247, 31, 60,246,115,249, 56, 33,201,199,225,144,110, 67, 43,122,115,189,247,155,178,198,250, 10,189, 93,127,251, + 29,139,174, 24,149,130,186, 42, 88,173, 11,238,159,221,235, 98,166,165, 20,228, 73, 66,172, 36, 74, 69, 20, 85, 77, 85,107,242, + 52, 69,215,186,139,216,109,211,220,146, 56,233, 50, 24,188,202,223,219,130, 15, 14, 14,249,248,163,143, 57, 58, 60,193, 58, 88, +175, 87,136,182, 94,222, 41, 68,251, 60,248, 93,154,234,246,154,183, 97,195,187,237, 83,141,175,184,217, 6,227,244,103,235,187, + 57, 44,162,111,105, 59,125,244,228,243, 45, 60,222,142,103,188, 47,104,235,183, 71, 54,220,109,117,167, 24,109,223, 9,178,143, +114,237,111,254,187, 98,181,221,191,111,213,146,237,191, 71, 29,156,101,187, 13, 18,252, 74, 91,155,191,223, 4, 93,215,182,238, +230,244,123, 2,233,165,218, 84,247, 54,124,189, 2,154,213,194, 71, 25, 90,211,229,120, 71,209,166, 50,119, 64, 4,158, 4,231, + 90, 17,157, 11, 86, 53, 25, 46,212, 13,164, 65,134, 36, 52, 31,199, 25, 46,218,240,254, 14,211,152, 40, 8,223, 18,165, 88,215, +149,143,108, 53, 94,161, 44,149,164,106,124,213,158, 36, 49, 10,127,210,116, 64, 89, 55,222,181, 21,197, 36,147, 3,210, 40, 66, +215, 26, 43, 36,195,201, 1, 38, 27, 98,194,169,174, 49,206, 43,228,165,191,224,163, 56, 38,207, 6, 8,124,202, 18, 78,132, 13, +171,151,178, 36, 54,155,254, 93, 34,195,119, 89, 12,247,233, 38,246,253,253, 79, 57, 16,200,222,125,208,218,218,172,179,140, 70, + 35, 84, 20,113,122,114,202,106,189, 66, 74,197, 50,228, 89, 39, 89, 70,163,171,206,206,214,250,240, 61, 43,192, 5,191,117, 47, + 95, 94, 41, 6,227, 17, 73, 36,169,170, 53,243,121,177,125,244, 8,173,251, 56,142,125, 39, 96, 39,109, 45,201, 50,156,112, 20, +235, 53, 81, 28,177, 90,174,192,186, 61,198, 83,187,149,220,220, 90, 76,183, 64, 22, 98, 95, 48,237, 93, 3, 18,135,227,142, 78, + 72,216,240,157,245,222,245,186, 88, 82, 23, 43,164,138, 80, 73, 74, 58,156, 64,228, 5, 71, 55, 23,175, 89,204,111,252, 28, 63, +116, 71,218, 77,193,111, 16,237,207,179,221,125, 38, 85,236, 15, 71, 82, 33,227,132,124, 56,230,241,227,135,232,186,228,205,249, + 5,207,158, 61,231,253,103,239, 51, 26,141, 25, 79,143,249,221,223,255,138,139,183,111,121,255,249, 39,220,123,248, 24,109, 13, +127,255,155, 95,179,158, 93,113,112,112, 64,185, 90, 98, 12, 60,121,246, 62, 47,190,249,146, 65,158,243,199,223,253,198,123,232, + 77,205,241,241, 61, 47,138, 18,126, 54,109,140, 97,181, 92,144,101, 3,142,238, 61, 65, 72,120,241,205,151, 92, 93,188, 98, 56, +204,137,162,152,245,106,197,186, 40, 80, 66, 82,107,237, 15, 55, 74, 17,167, 3,132,244,179,251,213,106,133, 80, 94,137,157,166, + 9, 77,237, 69,115, 50, 82,183,222, 91,241, 35,250,145, 93, 80,214, 93,215,181, 84, 50,112,243,239,248,247,174, 88,217,214, 52, + 57, 54,110,140,246,107,219, 24,213,190, 38,105,235, 0,161, 34,234,166,102,181,152, 83,134, 22,181, 49, 22, 41, 36,235,213, 50, +196,178,150,196, 73,206,100,114,192,114,177, 96,181, 92,176, 88,204,113, 78,176, 92,174,168,155,154, 44, 77,136,179,156,155,155, +107,192,241,229, 31,126,207,197,249, 27,230,243, 27, 26, 93, 51, 24,142,249,249, 47,255,146, 71, 79,158,112,125,117,133, 49,134, +203,139,183, 92,188,253, 1, 99, 45,147,241, 1,147,233, 33,101, 85, 34, 67,133,222,119,231,152, 96,189,108, 69,218, 45,248,169, + 93, 75, 61, 75,191,241,172,144, 32,108, 76, 83,127, 13,182, 66,179, 56,142,201,146, 20, 33, 28,151,215,215,156,223, 92,115,124, +112,208,161,186, 91, 86,191, 15,142,241, 81,178,182,197,234, 70,129, 74, 39,189,190,228,244,236,140, 52, 31, 48,191,153,117, 69, + 96,187, 54,182, 9,118,155,207, 75,236,132,184,236,119, 94,109, 33,183,219, 2,197,137,205, 1,157,125,155,248,102, 28,185,181, +169,159, 61,122,242,249, 45, 31,122,216,240,118,231,156, 50, 48,125,251, 88,186,221,170,190, 95,173,237, 46,214,187,194,180,190, +104,142, 61,116,176,118,174,190,171,116,223, 74, 96,235,157,110,108, 27,105,184, 53,231, 16,155, 42, 78,170, 91, 9, 58,162, 23, + 28,211,158,236, 76,104,211,182,222, 81, 37, 4,182, 92,130,109,192,250, 60,116,161,188,143, 60,137, 36,117,109,209,214,120,138, +155, 0,169,252, 70, 47, 59,141,130, 8, 73, 97,190,122,107,213,157, 73, 18,111,194, 70,164, 79,226,138,148, 32,137,253,166,174, + 77, 67,164, 36,171,170, 10, 93, 3,127,113,199, 74,177, 40, 43,178, 56, 38, 9,175, 77, 41, 69, 89,107,180, 14, 21,127,146, 49, + 56, 60, 33, 21, 80, 22, 37, 81,236,133, 84, 46, 31,118, 24, 67, 21, 41,106, 93,117,128,136,166,105, 54,126,209,144,101,220, 82, +215,110, 85,238, 59, 24, 96,209,235,148,136,159,104,105,251, 73,155,247, 78,142,240, 86, 84,175,219,254,222, 56,142, 48,166, 33, +207, 7,164, 89,198,241,209, 17,101, 93, 18,169,136,229,114,238,147,241,210, 52,224, 70, 55, 89,232,157,181,207,137,110,166,190, +121,204,152, 56,203, 24,100, 41,186, 42, 89, 44, 75, 31,109,217, 83,163, 70, 81, 68,146,166,225,116, 31,117,180, 46, 41, 5,113, +146,113,114,122,214,169,110, 23,139,229, 29, 94,100,183, 51, 67,247, 93,158, 46,242,248, 22, 73, 78,220,225, 63,185, 27, 55,219, +135,150,244, 20, 61,157,223,185, 89, 47, 73,210, 12, 17, 69,164,121, 70,181,184,225,234,229,183, 93, 16, 13,108, 56,228, 62,197, + 43,194,154,160, 31,232,102,129, 50, 36,255, 69, 96, 29,241, 32,199, 56,201,195,123,103, 40,233,248,240,227,159,241,250,213,247, + 52,225,113,254,245,191,254,191,105,180,229, 95,253, 31,255, 39,255,254,223,254, 27, 46, 46,222,240,226,187,111,105,202, 21, 22, +203,248,224,144, 36, 27, 50, 28,228, 60,251,248,207,104,234,146, 36, 27, 81,215,154,186, 42,209, 85,201,108, 62,227,242,237, 43, +172,179,156,156, 61,226,201,251, 31,241,209,103,127,206, 15, 47,190, 97,126,241,154,213,242,138,170, 42,201,210,148,197,108, 65, +163, 53,141,105,104, 26, 67, 85, 20, 94, 52, 41, 5,113, 36,177, 77,195,213,197,107, 68, 72, 49,107,241,157,126,109,225, 86,254, +246, 22,176, 10,119, 39,244,202,253, 68,188,178, 71, 52,219,159, 84,229,247, 15, 87,251,224, 92,253, 81, 82,187,166,110,217, 88, +219,174,169,181, 94,176,103, 60,232, 38, 74, 98, 36,146, 7,143,223, 67, 70,146,197,236,154,203,183,175,152, 30, 29,121, 20,111, +146, 80,174, 75, 28, 2, 93,150,172,151, 75,230, 55, 55, 96, 13,231,111, 95, 83, 45,215,172,215, 11,138, 98, 77,163,107,202,245, +138,139,243, 55,124,253,245, 23, 92, 92,158, 83,105,205,193,225,177, 15,225,169, 53,141,246,104,220,201,244,144,225,100, 74, 81, +149, 88,211,248, 88,228, 22,231, 28,246,147, 56,142,187,215,208,239,142,181,175,211, 24,203,186, 88, 51, 26, 14,186, 49,150,104, +181, 71,206,145,101, 57, 39, 71,199,100,105,202,213,108, 65,158,164,164, 73, 70, 20,249, 48,174,182, 91, 83,150, 37, 85, 93,133, +162,107, 3, 2,147,194,219, 59, 31,222,187,199,189,123,247, 17, 50, 98,177,152,119, 12,137,254,232,183, 47,178,236, 23,142,173, +117,175,125,126,110,103,148,218, 63,127,119, 36,214,118, 2,190, 59,134,222,152, 32, 55,133,200,217,147,103,159,203, 29,223,156, +216,185, 16,246, 33, 57,247, 85, 86,251,208,171,187,252, 92,119,199,247,222,165,240,116,119, 28, 26,118,173, 71,237,139,238, 4, +111,129, 78, 36,131,232,192, 43, 20, 55, 41, 68,237,207,234, 11,228,162, 96, 49,235, 11,178, 58,102,179,105,176,181, 79,124,114, +214,224,132, 36, 14,173, 25,103, 45,165,182,248,151,239,136, 98, 73, 99,160, 54, 94, 41,236,171,122,213, 61,111,127, 49, 90,162, +200,111,132,214, 26,164, 18, 33, 50, 53, 66, 72,201, 48, 78,168,106,141, 84,138, 50,144,228,186,196,178, 72,177, 46,106, 6,185, +111, 43,233,198,135, 30, 44, 11,141, 20,254, 84, 41,242, 49,131,233, 33,202,121,188,108,148,165,168,100,136, 86, 81,247, 60,148, +236,150,106, 31, 15, 27,102, 64, 93,230,115,240,137,182,145,142,206,237,244,128,119,252,235,183,170, 20,238,166,161,253,164, 54, +101,255, 49,119, 15,127,157, 29,108,115,250, 85, 33,248, 65, 69,222,246, 52,153, 78,209,117,133,146,130,162, 44,168,181,247,206, + 26,235, 48,205,198,210,214,158,200,189, 79,221,132,142, 74, 80, 29, 68, 94, 77, 61,153, 78,208,117,201,114, 85, 48, 28, 77,104, +108, 67, 18,123,159,109,146,101, 76, 15, 14, 40, 86,107, 63,207,115,126,195, 67, 8,210, 44,231,236,236, 1, 85, 93, 49,187,185, +193,104,141,233, 60,247,110,235,181,108,207,207,221,150,102, 96,147,207,220,111,183,202, 59, 34, 24,249, 73,134,211, 46,155, 49, +116, 9,132,179,172, 87, 75,226, 52, 65,197, 25,235,235, 11,110, 46, 46,177,141,217,204,243, 2,233,206,225, 48,206, 91,178,252, + 7,237,151, 23,149,102,129, 67,239, 71, 73, 88,127, 56,124,254,222,135, 60,127,254, 17,111,223,190,228,197, 87, 95, 49, 95, 44, +121,249,242, 59,158,190,247, 62, 81, 20,243,245, 87, 95,240,235, 95,253, 45,117, 93, 51, 26, 77,168,138,218,255, 12,163, 89, 45, +174, 17,129,233,176,154,205,184,186,190,226,242,237,247,152,166, 14, 63,215, 91, 25,165, 16, 52,186,230,229,139,111,248,230,203, +223, 81, 85,101,224,134,211,161,124,151,139,185,143, 23,173, 61, 92,166, 9, 84,189,209,120,138,214, 13,117,227, 15, 48, 22, 31, +156, 82, 87, 69,167,178,182,216,206,119,189,239,240,217,205, 66,247,108,224,119,253,126,183, 10,151, 74, 6, 33, 84,223, 21,241, + 15, 87,217,239,182,224,119,215,221,214, 10,218,118,156, 90, 40,147,214, 53, 55,215,231,172, 22, 51,162, 36, 13, 17,196,150, 60, +207,153,207,110,176,206,241,236,131, 15,169,107, 31,230,211, 52, 13, 22, 71, 62, 26, 18, 69,169,143, 58,109,179, 9,156,197, 73, + 73,150, 13, 16, 66, 82, 22, 37,139,197,156,170, 42,121,246,193,115,158,127,248, 33,179,249,140, 56, 78,152, 30, 28,243,222,123, + 31, 80, 84, 21, 85, 89,131,117, 30,107,107, 93, 23,200, 20, 69,202,231, 18,152,208, 34, 15,133,146,143, 31, 22, 56, 39,136, 84, +204,253,123,167, 61,125,152,215, 82,121, 8, 77, 68,150,230,140,134, 3,138,178, 36, 82,146,225, 96, 64,154,166,148,101,133,214, + 53,163,225,144, 65, 54, 32, 73, 18,146, 52,197, 90, 75,173,181, 71,208,198, 49, 89,146,112,122,116,200,253,123,247,169,116,195, +236,230,122, 19, 69,190, 71, 32,126,187,237, 46,119,138, 83,233, 49,216,180,255, 7, 43,125,183,206,134,107,193,181,238, 6, 41, + 58, 17,157,232,185, 96,172, 55, 20,160,238, 61,121,246,249,214, 74,113,107, 46,184,253, 4,229, 78,139,117, 55,177,166,223, 30, +223,245,129,187,158,192,109, 23,106,227,238,176, 77,245, 5,116,119, 17,228, 58,202, 93,239, 36, 45,165,231,173,171,254,207, 22, +194,127,168, 65, 84,135,160, 75,223,241, 74,203,104,171,101, 37, 8, 89,227,210, 19,219,108, 85, 96,117,141,146, 10,221, 24,146, + 40, 10,214, 75, 71, 81,155,110,214,174,164,192, 24,168,173,195, 9,235,161, 50,225,132,217,230,226, 74,217,218,176,194,255, 3, + 16, 36, 73, 82,108, 99, 24, 38, 9, 69, 85,225,132,160,168, 52,178,119,234,147, 74, 82,213, 13,113,236,253,150, 69,165,145, 42, +162,168, 52,113, 88,116, 7,103,143, 24, 78,142, 48,206, 98,101, 76,146, 15, 81,249, 0, 27, 84,245,237,169,214, 24,211,169,223, + 61, 39,222,251,125,157,117,254, 70,117, 22, 23,182, 31,209, 19,173,185, 61,157,153,125,118,180,119, 1,102,126,108,179, 23, 59, +158,245, 91,141,230,126,124,121, 56,208, 89, 99, 16, 74,249, 27, 55,203,201,210, 24,221,104, 26,173, 41,170, 2,165, 90,194,220, +166, 82,111, 43, 35, 41,188, 29,173,131, 75,132,107, 34, 31, 12,152, 76, 70, 84,197,138,229,170,164, 40, 86, 72, 54, 22, 56, 37, + 21, 55, 55,215, 24,219,116,202,122,149, 38,228,131, 1, 73, 18,147, 13, 6, 52,186,230,234,202,219, 99, 92,175,178,219, 58,160, +136,237,150,250,254,174,134,216,138,136,101, 15,250,169, 15,241,184,253,253, 97,124,189, 77, 0, 0, 32, 0, 73, 68, 65, 84,110, +175, 95,186, 3, 80,225, 40,151, 11, 98, 21, 83, 45,111, 88,204,103, 16, 14, 58,152, 6,103, 52, 32, 72,178, 1, 77, 93, 35, 48, +136, 56,195, 74,111,245,176,214, 16, 37,190, 27, 34,145,168, 36, 33, 78, 34,166, 71, 71, 76, 70, 83,126,247,119,191, 65, 55,134, +131,227, 67,116, 99,249,246,219,111,249,195,239,126,227, 57,237, 46, 44,142, 56,102, 55,175, 73,162, 4, 99, 27,162, 40,227,222, +131,103,164,113,202,197,249, 43,170,229,204,211, 2,149,224,241, 7,159, 81,150, 43,202,245,146,166,174,189,146,221,249,199,170, + 10,175,156, 95,204,103, 24,109,168,235,202, 11,179, 66,247,204, 3,102, 34, 64,208, 88, 47,136, 19, 8, 26,173,187,117, 77,135, +212,197, 70, 55,161,155,246,110, 66,135, 96,155,214,184, 91,156,236, 77,150,236,219,216,240,107,146,189, 21,124,181,199,121,242, + 19,104,155,119,141, 4,246,205,220, 93, 43, 80, 51,206,207,219,195,235,108,170, 26,103, 27, 86,139, 27,138,162, 32,203, 7,232, +186,226,242,237, 75,255, 94, 75, 69,154, 13,153, 30, 28,145,228, 3,142, 79,238,249,238,135,146,124,246,139,255,134,108, 48,160, + 46, 43, 22,203, 37,149,214, 36,105,210, 5, 74,213, 85,201,108,177,228,252,252,156, 31,190,255,142, 31, 94,126,207,245,108,206, +209,233, 25,143,158, 60, 69, 91, 71, 28,197,196, 73, 66, 85, 85,196, 74,133,148,196,182,224,242, 99,195, 52,205,186, 22, 58, 82, + 82,215, 21,163,241,136,193,112,136, 12, 7, 23, 37,125,193, 19, 69, 49,105,154, 6,235, 91,142,117,150,178, 40,200,211,148,209, + 96,224, 93, 78,206, 49,157, 76,105,116, 67,165, 61,205, 47,142,188,168,216, 6, 36,114,164, 20,147,209,144,143,222,255,128, 44, +207,185,185,153, 5,196,176,184, 5,152,185,123,131,223,246,191,111,117,235, 4,183,132,232,187,157, 75,217,143,133, 13,143,163, +238, 5,245,123,127, 97,233,236, 40,119,180, 74,219,214,199,238,223,237,166,160,237,125, 1, 61,128,205,238, 98,223, 37,193,109, +197,218,237, 15,100,233,171,139, 91, 22,189, 10,209,120,187,201,111,237,247,245,231,240,237, 59, 97, 67, 88,138,175, 72,183,219, +178,221, 8,192, 89, 31,255,167, 53,182, 42, 73,147, 8,173,107,148, 18, 93,107,167,214,254,228,152, 40,159, 75, 30,199, 49, 69, +237,185,216,137, 20,196,106,147, 78,100,157, 37, 73, 34,255,245, 73, 10,132, 89,185,244,249,211,206, 90,226, 80,161, 59, 97,169, + 67,165,100,218, 81,130,244, 74, 78, 41, 28, 81,148,114,189, 42,145, 10,172,147,196,145, 68, 35,153, 60,122,143, 56,203,145,113, +228,231,141,113,140, 72, 82,207,133, 15, 56, 88,235,108, 71, 20,243, 85,139,246, 42,120, 99,130,253,174,109, 61, 6, 88,141,219, +108,232,125, 18,221,173,246, 96, 95,203,176,167, 21,252,174, 8,220, 45,147,248, 62,133,113,223,218,214,210,167,194,169, 86, 69, + 10, 27,198, 30,227,131, 67,172,105, 56,156, 78,169,170, 10, 16, 20,171,117, 24,199, 40,116, 93,117,170,117,219, 6,109,116,155, +186,232, 90,103,113, 28,147, 15, 6,140, 71, 67, 86,139, 5,179,217, 42,168,114,155,110,131,214, 90,251, 27,189, 35, 67,250,235, +241,201,179,231, 12, 71, 99, 16, 48,159,221,176, 94,175, 55,213,185,235, 8,241, 61,113,144,219,105,163,239,107,173, 91,246,152, +103,216,159,105,200,143,186, 11,246, 54,240,157,163, 88,206,169, 86,107,159,209,109, 77, 55, 50, 18,120,156,174,105,106,255, 49, + 37,121,224,224, 71,126,205,136, 21, 70, 27, 68, 20, 51,152, 78,137,199, 62,248,227,240,240,152, 23, 47,190,161, 88,123, 27,224, + 96, 56,226,226,245,119, 32, 28,131,225,148, 55,175,127,224,253,143,255, 44,228, 41, 8, 86,171, 21,113, 44, 25, 15, 15, 56,123, +240,132,211, 7,143,200,242, 1,175, 95,126, 71, 89,174, 59,215,193,205,213, 21,194, 89,172,107,208,141, 38, 82, 49, 73,228, 43, + 46, 21,249,196, 49,227, 44,214,216, 46,148,196,118,185, 9, 46, 88,162, 36,131,209,129, 63,144,225,168,171, 10, 99,253,225,182, +169,181, 87,249, 7, 78,121, 59,207,238, 14,149,237,239,109, 88, 96,223, 1,142,121,215,232,169,219,244,129, 72,170, 91,214,181, + 54,143, 2,185, 1,205,252, 41,157,175,125,254,247,189,207,165,223,141,179,155, 33,147, 53, 62,129,178,181,192, 14,199,195, 0, +185,242, 85,125,163, 11,138,245,146,166, 40,184,186,186,160,210, 21, 77, 99,121,243,230, 53,179,229,188,151,101,224,117, 58, 73, +150,161,141, 97, 85, 22,172,151, 43,140,243,122,151,186,214,204,110,174, 57,127,253,154, 55, 63,124,207,213,197, 91,138,245, 26, +164,228,240,232,152,131,195, 99,132, 76,136, 99,133, 66,114,118,122,143,193,112,194,106,189, 12, 93, 87,112,214,175,231, 77, 99, + 56, 58, 60,244, 27, 93,164, 72,211,196,167,240,133,206,164,183, 87, 71, 36,113, 74,156,250,144,172, 44,203, 56,154, 30,208,104, +205,106,189,226,209,131, 7, 30,248,213,248, 28,121,191, 87,248,117, 60, 82,138, 72, 41,146, 56,230,233,163, 71,124,252,209, 71, + 40,169,184,188,186,232,186,158,109,113, 40,118, 29, 99, 98, 91, 15,212, 63,180,183,127, 47, 17, 72,231,250,228,101,148, 11,193, + 86,248,251,164, 69,187,219, 62, 56,238,244,225,227,207,111,109,154,237,205,190, 67,127,235, 7,179,236, 10,130,250,149,123,247, +247, 61,175,123,255, 36,218,127,188,182,122,221,151,180,214,111, 17,181, 98,173,109, 69,187,220,146,243,111,133, 95,244,146,225, +250,173,255, 54,109,170,127,211,200,112,195,202,144, 57,188, 85,149, 6, 59,133, 84, 10,171,107,159,179,110, 52,177,242, 66, 54, +127,250,243, 22,179, 82, 55,196, 74,250,121, 99, 20,177,174,125,171, 85, 6,180,108,235, 81,116,214,249,100,182,198,118,179,154, +198,152,112,170,147,152,128,144,173,181,193, 73, 65, 85,153, 14,222,159,132,139,210, 43, 53, 35,140,117,220,172, 10,162, 56, 34, + 82,145,223,220,227,140,163,199,207, 16, 74, 33,226, 8, 3, 68,113, 2, 50, 10,149, 73, 80,209,219, 13, 37, 80, 6, 53,101,211, + 4,150,119,208, 32,108,141, 60,118,211,217,118,171,243, 61,200,224,187, 22,180,189, 21,254,158, 5,199,237,177,182,117, 98,205, +254, 98, 39,232,110, 62, 25,208,155, 82, 69,156,157,157,176, 94,175, 49,214,159,198,173,245, 62,124, 99,180, 87,116,247,194, 92, + 8,175,191,239, 33,151,202,183,145,167,211, 49,243,235,107,150,171, 98,163,188,101, 59,217,174, 15,108,242, 96, 32,197,225,201, + 9, 85,185,224,237,155,183,152,166,217,178,227,109,143, 50,118,229,237,242, 39, 83, 2,254, 20, 43,225,187,116, 11,244, 94,207, + 48,207, 89, 46, 87, 52,166, 9, 7,183,128,215,141, 18,226, 65, 30, 98,102, 27,136, 83,148, 76,176, 85,225,223, 75, 33, 25, 76, + 15,153,156, 30,163,146,216, 95, 67, 50, 98,177, 90, 50,156, 76, 89,173, 86, 24, 93,146,102, 67,116,101,121,244,244, 35, 46,206, +191,199, 1,217, 96,192,119, 95,254,142,170,208, 8,225,124,200, 74,163, 89,149,107,102, 87,151,124,245,197,239, 41,215, 75,156, + 19,148,229,202,183, 98,149,191,238,133, 12,161, 50, 33,156,197, 57,219,121,190,109, 99,200, 36,126,222,223, 83,129,139, 54,241, +207, 57, 48,206,119,237,164,236, 72,132, 62, 95,220,244,236,183,219,220, 12,225,216, 8,153,222,161, 31,217, 87,160,188,235, 87, +183, 54,137,109, 63,122,223,238, 33, 16, 63,249, 51,126,215,115,217,237,136,110,117, 86,123,247, 99, 95,123, 98,141,247,161, 99, + 55,217,235, 54, 92, 35,109, 58,165,144,210, 39, 2, 70, 18, 21, 70, 81, 42,142, 81, 73, 76,148,196,158, 46, 23,222,127, 99, 12, +117, 93, 83,148, 37, 77,211,144,132,110,105, 54, 28,121,220,237, 96,202,205,236,138,155,155, 75,170,178, 98,118,125,205,186, 40, +120,244,248, 9,191,252,171,191,162,214,154, 56, 75, 81, 42,226,248,232,132,199, 79,158, 81, 20, 21,171,213,154, 15,159, 63, 39, + 75,115,226, 40,198, 58, 65, 18, 39, 36, 73, 26,112,177, 81,119,152,246,177,177,145, 31, 61, 10, 56,156, 78, 25, 13,115,230,243, + 69, 7,161,242,243,121,175,133,242,130, 58, 13,150, 32, 52,246, 45,252, 39,143,159,240,217, 39,159, 82,150,165,207,109,151,226, +118, 32,204, 78, 58,219,214, 62,197,109, 97,157,227,110,216, 91,187, 91,201, 94,177,163,238, 63,125,239,243, 86, 21,206, 14, 67, +189, 21,203,237,122,194,111,217,202,246, 44,216, 46, 8,214,222,181,120,187, 91, 25,181,251, 90, 19, 50,248,222, 55, 27,110, 63, + 37, 78,244,114,221,251, 73, 89, 45, 98,181,109,203,118, 96, 26,122,111,112,103,223, 18, 93,235,169,205,125,247, 11,133, 12,192, +153,224, 63,182,190, 58, 54,186,102, 24, 75,154,112, 81, 59, 7, 81, 36, 89,150, 53, 82,248,141, 23, 33, 88,107,141,182, 16, 73, +137, 18, 46,228,244,110,124,135, 42,242,237, 98,165,130, 93, 3, 71,146,198, 33,198, 50, 96, 75,113,232,102, 83, 18,164,137, 34, +138, 54, 16,157,166,105, 88,213, 13, 74,122, 81,151,192, 33,135, 83,210,201,161,143, 62,180,198, 43,217,195,197,225, 2,160, 68, +181, 81,159, 61,159,100,247,188,100, 0,226,132,104, 88,211,165,127,189,195,186,115, 71, 75,254,174,246,251,238,103,110,239, 16, + 7,109,210, 23,237,158,138,114, 91,133,174,130,245,168,139, 79,148,146,179,147, 83,138,181,143, 96, 93, 23,171,144,142,167,168, +202,178, 3,138,244,189,234,219,155,122,168,212,243, 33,147,201,152,213,114,206,114, 85,110,143,138, 58, 97,166,236,156, 1,126, +188,226,181, 9,207, 63,252,136,197,205,140, 60, 31, 50,155,207,252,253,228,122,185, 13,253, 62,132,187, 75,197, 78, 15, 94,177, + 43, 27,220, 95,115,139, 61,137, 80,183,133,114,183, 25, 0,221,225,215, 52,172,138,117, 87, 93, 33,101, 71,164, 54, 85,233,133, +148,113,138,106, 28,214,105,191,152, 36, 41,249,228,128,193,217, 25, 34,220, 3, 14,135,147, 18, 21,197, 12,243, 17,105, 62,228, +252,252,130, 98,181,196,153,154,229,242,154, 52, 27, 51,200,115,144, 17,186, 42,177,182,161,177, 94, 89, 47,132, 32,207, 71,204, +110,174,105,170,218,111, 44, 66,120, 81,147,105,130,245,204, 82, 20,107,176, 62,230, 88,135,128, 26,135,192,104,205, 40,242,182, + 38, 35, 19,127,112, 14,218, 25,169,100,239, 32,239,200,243,140,178, 88,227, 11,122,215, 69,157,210, 41,156,183,123,224, 91,122, +228,240,129,182,145, 17,110, 7, 13, 74,207, 71,204, 59, 14,189,219,105,133, 59,155,186,184,125,117,252,216,227,237,174,215, 63, +118,184,232,219, 50, 85,228, 67,146,220, 22,157,180, 79, 56,180, 97,141,247,235, 21,194, 31,128, 91,148,177,140, 35,226, 52, 37, +201, 82,226, 44, 35,201, 50,210,193,192,255, 62,245,127, 86, 82, 5, 16,146,183,217, 58,231,168,235,134,198,104,170,162, 96, 57, + 95, 48,159,249,110,140,214,190,107, 18, 7,143,185,177,240,250,205, 57,175,127,120,193,229,219, 55, 44, 23,115,138,178,228,102, + 62,195, 57,203,193,100, 74,150, 13,136, 18,255,184,195,193, 48,196, 88,107,162, 40,246,128, 46, 92,151, 25,143, 16, 36, 73,130, +117,142,197,122, 69,154,196, 28, 78, 38,148, 85,137,146,138,209,112,136, 20,144,196, 49,105,150,134,245, 86,116, 93, 94,129, 32, + 77, 98,142,143,142,248,229, 95,252, 37,159,126,252, 9, 87,151,151, 62, 2,186,165,254, 5,154,222, 46,251,189,239,104,107,239, +241,109, 30,252,166,128,233,255, 39,130, 80,174,255, 17, 69,237,197,234,118,111,240,128,131,220,253,160,251,196, 57,217, 9, 33, +220, 86,219,105,183, 5,191, 47,243,188,127, 88,224, 29,234,247,190, 79, 61, 78, 18,111, 95, 8,217,205,221, 38, 31,236, 97, 66, +109,183, 44,189,170,115, 99, 77,107, 1, 51,125, 49, 92,167, 71, 9, 25,234, 22,219,249,198, 17,108,226, 3,165,132,196,211,149, +156, 49,216,106,193, 32, 75, 41, 43,237,113,155, 64,166, 34, 26, 99, 81, 89, 68,161,235,112, 40, 48, 88,160,208, 22, 37, 28,113, +236,130,210,220, 32,140,199,147,122,168,141,195, 52,142,104,164,168,145,212,193,171,106,173,161,177, 13,206, 41,164,136,186, 76, +225, 22,180,210,126,236,198,181,239,175, 34,206,135,157, 7, 62,138, 34, 76,152,243, 8,231,176, 33,136,196,226,124, 8, 77,139, +254, 13, 42,127,239, 71,182, 29, 97,141, 78,180,225, 59, 16,214,184,173, 78,206,150, 14, 98, 79,155,253, 46, 10,215, 59,195, 92, +122,157,129, 62, 43, 97, 19,102,225,246, 8,190, 68,104,177, 10,140,181,196,113, 76, 89,172, 59,205, 64,211, 24,162, 56,161,209, +197,150, 80,114, 19,174,210, 35,188,245,246, 56,139,143,186, 21, 66,145,100, 73, 15,148,177,113,127, 72, 41, 25,142, 70,228,195, + 33,243,171, 43,106,173, 81, 82,117,110,129,178, 42,253,231,189,101, 61,113,183, 77,103, 59,239,161,127,142,225,107, 59,193,148, +184,229,165,191, 75, 76,239,110, 7, 66,109,223, 31,239,208, 66,100,113,138, 48,230,255,167,237,205,154, 44, 73,210,243,188,199, +195, 99, 61, 91,158, 92, 42,107,223,186,122, 95,208,221,179, 1, 24, 12,193, 1, 8, 98, 35, 65,137,102, 36, 69, 19, 37,147,153, + 76, 23,148, 81, 50,234, 66, 63, 0,183,250, 21, 52, 74,102,210,133,126, 1, 37, 25, 9,129, 48,112, 48,192,108,152,233,158,238, +234,170,174,125,201, 61,243, 44,177,187,187, 46,220, 35, 78,156,147,153,213, 13, 26,149,102,105,221, 89,149,149,203,137, 8,119, +255,190,239,125,159, 23,227,200,106,109,247,203,147,120,161,143, 8,124,116,158, 83,234,202,126, 93,233,163,241, 88,191,254, 26, +189,141,117,178,233,140, 50,155,225,213, 54,107,221,212,138,241,104,141,167, 79, 30,130,177,240, 19, 35,124,148, 50, 92,184,116, +147,221,151, 79,200,143,142,201,103, 41,181,174, 40,138, 28,173, 52,107,227,117,187, 40, 3,121, 49,199,247, 37,243,227, 41,210, +179, 68,188,170,200,201,179,202, 5, 25,105,188, 32, 32,244, 96, 45, 14, 56,152,165,248,210, 99,115, 60,226, 56, 45, 41,138, 2, +233,198, 41, 69,158,227, 75, 65, 85, 87,206, 10, 9,113,111,132,214,154, 34, 79, 45, 73,210,173, 27,173,118,195, 99, 73,175,208, + 4, 35, 45,186, 29,167, 59, 85, 13, 45, 76, 59, 13, 79,247,190,251, 42, 33, 93, 23, 6,213,109,135,159, 7,161,121, 85, 76,236, +215,137,144, 93,173,206,173, 43,192,107, 79, 16,178,165,124, 90,188,178,104,133,117,142,111, 41,108,245,237, 5, 1, 34, 8,221, +134, 30,179,190,185,229,186,133, 1, 81, 28,211,235, 37, 8,167,108, 47,203,202,209, 16,237,186, 26,250,146, 36,234, 99,140, 33, + 77,103,236,191,124,134, 16,130,162, 44, 73,164,199,209,209, 33,243,185, 5, 74, 73, 35, 28,176, 9, 60,223,166,175,229, 69, 73, + 47,233, 17, 70, 33, 39, 66, 48,153,229, 12, 71, 16,245,122, 60,223,221,103, 60,236,115,241,194, 5,138,178,160,168, 74, 6, 73, + 31,129,108, 92,165,173,227,197,247, 3,142,231, 5, 85,165,185,176, 49, 38,207, 51,180,170,217,190,112,193,230, 72, 32,232, 39, + 22, 61,107,181, 73,117,171,213,169,141,193, 80,114,235,250, 77,254,229,255,248, 47,249,209,143,127,196,191,249,191,255, 13,251, + 71,135,228,133, 21,226, 89,228,184,118,200,112,221, 22, 22,139, 52,184,197,254,169,219,235,190, 40, 8,149,235, 48,121,103, 20, + 90, 45, 38,182,217, 60, 57,199, 87,217,204,171,165, 59,217,118, 67, 86,228,138, 96,238, 44,145,219,170,104,174,249, 59,217,216, +228, 58, 33, 50,221, 9,225,146, 34,191, 57, 80,184, 95, 60, 8,252,133, 77,205,253,163, 5,242, 83, 57,225,148,171, 52,221, 92, +173,133,212,152,142,183,185,201, 52,239,136,134,236, 41,206,169,229, 27, 8,141,123,129,101, 24, 99,170,130, 65,232,132,101, 70, +163,149,109,171, 23,202, 42,216, 43, 23,138,145,215, 86, 40,167,141, 33,144,146, 80, 74,235, 73,215, 26, 85, 59, 33,138,214,212, +202,182,240,141,209, 40,229,172, 28, 74, 81, 42, 77,237, 20,243,129,244, 8, 3,175, 19, 77,104, 23,157,121, 94, 83,106, 72, 2, + 31, 63,140, 9, 55, 46,224,133,161, 21,176,187,153,120,115, 58, 12,253,160, 37,125,181,179, 25, 79, 58, 13,133,110, 15, 82, 30, + 2, 41,236,251, 2,107, 42,206,174,240,224, 76, 91,226, 89, 85,194,215, 17,202,137,229, 35,235,138, 58,252,180, 88,164,241, 94, +123,222, 98,113, 29,140, 70,104,163, 88, 95, 27, 3,216, 76,122,101, 67,113, 60,207, 86,122,182,165,108,218,140,243,198,115,221, + 77,110,147,129,207,112,180,198, 96,216, 39, 79,167, 76,167,169,237, 10,116,112,194,113,146,216, 32,157, 44, 35,233,217,156,106, + 91,249, 37, 92,189,126, 3,173, 20,199,135,135, 45,127,222, 51, 44,217,160,186, 2,183,115, 85,236, 98, 25, 76,179,252,186,153, +149, 10,254, 52,144,228,213, 54,184,211, 94,235, 74, 85,164,217,220, 82,191,140,182, 42,114,165,236, 60,186,174,168, 43,155,136, + 22,184, 49,135, 39, 60,100, 16,179,121,243, 6,198, 8,250,107,235,244,215,198, 8,223,119,155,159, 38, 75,231, 80,229, 72,135, +228, 28,111,108,115,178,255, 28, 53,217,103,154,165, 76,142,143,172,157, 40, 75,173, 94, 36,140,185,121,231, 77,162, 56, 65,213, + 53, 73,220, 35,157,167,212,101,238,218,234,245, 98, 83,113,241,154,104, 99, 83,216,234, 26, 37, 4,218,192, 36,175,237, 33,217, + 24, 12, 30,189,193, 0, 99,106, 43,170,116,130,200, 32, 76, 8,162,200, 69,246,218, 3, 64,107,215,115,173,122, 79,122,103, 90, +148, 16,103,193,129, 22,151,106,184, 49, 38,238,247,240,157,102,163,113,220,156,167,128,239, 94, 99,179,146,200,246, 55,157,163, +191,138, 33,113, 94,177,213,126,236, 58,133,150,172, 41,157, 29, 87, 47, 1,189,108,129, 43,108,171, 93, 74,103,137, 12,136,251, +125,130, 36, 97,180,190, 73,220,239,147, 12, 7,172,141,199, 36,131, 1, 97,191, 79,111, 56, 64, 38, 17,194, 11, 40,234,130,249, + 44,101, 54,155,114,116,120,192,206,206, 11,246,118,159,115,120,112, 96, 15,231,101, 65, 16, 4,244, 6, 67,134,107, 99,162, 56, + 33,137, 99, 27,115, 93,169,150,231,208, 32,180,237, 70,171,168,139,146,227,227,125,210, 52,165, 44, 42,102, 39, 7,124,227, 91, +191, 74, 81, 89, 29, 85, 85,164,182, 43, 84, 87, 75,123, 83, 94, 20,110,111, 18, 84,218,144, 21,182, 64,219,218,220, 64,213, 53, +195,225,144, 36, 73,236,154,238,251, 68, 81,136,244, 4, 81, 24,182, 89, 25, 30,154,170,178,120,234,235,215,111,242,221, 95,255, + 46,158,240,216,223,221,181, 27,177,183, 18,217,186, 50,115, 95,134,183,117,148,146,139,126,253,233,118,124,115,248,186,112,237, +198, 31,211,153, 35,175,230,165,175, 6,212,119, 83,220,196,138,239,177, 57, 24, 4, 65,208,225,187,159,223, 98,106,126,240,230, +192, 96, 58,237,198,238, 24, 96, 65,237,177,159,228, 75, 31,233, 75,151,124,214,137, 92, 21, 11,145,146,173,182,235, 78,203,171, +147,246,213, 68,162, 98, 51,209, 45,209,199, 44,181,199,148, 82,237, 2,223,140, 18,154, 3,141,231,121,144,244, 9,242, 57,161, + 19,150, 41,160, 86,138,162, 86, 4,158,135,198,102,171,151,104, 7,113,209, 4,158, 36,137, 66,132, 39,200,138,146, 74, 27,140, +139, 98, 5, 75,158,171, 74,229, 60,163,134, 90,215,212,218,107,245, 2, 66, 24, 66, 63,112, 22, 36,119,154,243, 60,242,178, 38, +175,173,197, 42,217,216, 32, 28,172,227,133,161,123,232,180, 11,168,145,248,210, 39,240, 36,113, 16, 18,248, 62,129,148, 72, 79, + 16,120, 16, 74, 15, 97, 12, 81, 24,226, 53,179, 67,161, 23,177,142, 13,120, 4,179,136, 63,237,130, 19,190,162, 58,120,213,204, +241, 44, 27,163, 89,113, 68,172,170,238,155, 74, 73, 47, 40,200,246,244,238,132,141, 81, 28,163, 13,140,134, 35,194, 40,100,158, +218,234, 43, 47, 82, 80, 11, 15,111, 99,117,178,182, 30,209, 6, 72, 52, 7, 89,233, 7,248, 65,192,104, 96, 55,245, 52,205, 23, +129, 88, 29,248, 76,145,103,212,117, 77, 89,148, 4, 29,223,186, 50,134,183,223,124,139, 23, 47,118, 72,211,217,146,192,207,156, + 25, 88,124,218,218,214,249,104, 5,169, 41,206,152,173,155,206, 6, 35,120,213, 30,240,170, 56,221,192,151,164,243,212,118,107, + 60,223,233, 51, 34,219,245,241,164, 19,198, 9, 43,170, 20,224, 5, 33,227,139,151, 89,191,122,139,116, 54, 5, 85, 96, 60,159, +193,104, 29,207, 15, 93,248,145,102,115, 60,230,234,181, 91, 4, 97,108, 3,106, 60,152,206, 38, 84,121, 78,216,235, 83,228, 25, + 23,175, 92, 39, 47, 21,227,141, 49, 70, 25, 30, 63,248,130,201,241, 49, 51, 7, 68, 49,216,241,152, 17,160, 84,101, 69, 80, 73, + 15, 79,250,109, 21, 84,105,211,182,239,133,108, 90,237,118,228, 20, 70,129, 35,142,233,246, 80,175,117,205, 96,184, 70,150,231, + 54,136,167, 42,209,170,118, 27,160, 91,235,140, 62,117, 0, 51,102,249,112,181, 60, 30,178,207,109, 93,219, 49, 65, 81,216,132, +180, 94,175,183, 68, 69, 59, 43, 38,186, 9, 17, 17,136,115, 97, 77, 95,167,237,126,158, 95,254, 85, 29,181,110,113,230, 75,191, +237,128, 90,101,119,135,150,102, 4, 32,173, 13, 43,240,145,126, 8,158, 71,152, 36,132,113, 76,152,244, 8,251,125, 6,235, 99, +214, 47,108, 49,218, 88,231,189,119,222,230,251,223,253, 53,254,179,223,251, 61,254,235,255,242,159,113,233,227,111,112,255,243, +135,164,243, 9, 85, 81,161,155,195,119, 85, 83, 87,165, 21,209, 41, 69, 58,157, 49,155, 76, 40,178,148,249,108,198,108, 54,103, + 56, 26,210,239,245, 90,200, 76,163,141,105,102,252, 13,125, 51,136, 98, 48,134,191,251,187,127,143,157,221, 61,158, 60,121,200, +250,198, 22, 74, 27,134,253, 1,113, 20, 33,189, 69,200, 74, 24,132,110,127, 16,173,240, 87, 27,193,116,158,146,244,251, 68, 97, + 72, 93, 22, 68,161, 77,105,108,198,158, 24, 99, 25, 35,190, 21,208,121, 46,165,208, 30,228,124, 62,252,240, 35, 62,254,248, 99, +142,142, 14, 73, 83, 27,247,235,251,114, 89,175,182,228, 80,241,150, 15,232, 98, 33,140,235, 10,138, 13,166,237, 26, 25, 79, 44, + 87,234, 93,161,143, 56,163, 98, 90,218,104,207,240,168,175, 46,226,194,205,101,206, 82,202,119, 63,150, 43,228,186,110, 23,160, + 21,104,104,237, 48,158,139,155,221,115, 17,161,184,205,166, 17,118, 53,153,226,158,183,220, 85,104, 54,243,110,136,135,105,230, +181,157,249,125,227, 37,247, 26, 86,188,155,121, 27, 71, 97,210, 74, 65, 16,162,138,146,190,175,157,135,177, 6, 4,133,178,169, + 72,181,182,153,216,149,182, 62,104,187,121, 10,122, 97,224,128, 50, 53,165,214,148,117,141,241,164,245,184, 27,231,189,116,121, +237,133, 54,237,108,219,206,126,236,117, 82,202, 50,228,125, 41,172, 26, 83, 8,114, 23,210, 50,190,124,147, 32,233,225, 7, 65, +171, 39,240,125,233,188,149,214, 95,153,196,145,245,108,122, 16,152,146,141, 97,159,155, 23,199, 92, 28,245,185, 48,140,233, 71, + 33, 85,145,225, 11,171, 20, 23,221,140, 96, 99, 28,163,120,133,130,212, 57, 48, 45,165,248,157, 35,128, 60, 87, 24,215, 13,115, + 57, 99,203, 19, 43, 42,248,198,165,209,160, 37,219, 92,117,191, 33,228,197,108,172,175,115,120,116,132,116,243,214,230, 97,213, +170, 70,105,219,158,183, 21,135,215,122,215, 27,133,171, 39, 37,195,209,144,209,112, 64,158, 78,152,205,173,146,190, 86,150, 29, +208,204,100,149, 82,205, 74,183, 20, 24,148,244,251,124,118,247, 19,182, 47, 94,226, 96,111,111,233,254, 53, 75,112,138,118,219, +126,197,188,124,209,150,235,126,188, 88,199,205, 18,113,236,172,179,214,105, 91,187, 88,138,185, 53,110, 97,172,148,178,169,128, + 66, 0,150,113,111,202,202, 45,158,170,181,132,106,103,165, 49, 26,198,151, 46, 67, 16, 49, 24,173, 81,151, 21,170,204, 40, 84, +141, 16,144,244,134, 8, 41,216, 26, 14,209,117,142,174, 21, 39,199,187,108,142, 55, 56,153,204,168,148,177, 74,226, 56,177,243, + 86,233, 49, 24, 36, 8,207, 48,222, 88,119, 27, 12,132, 81,224, 4,141, 86,204,134, 39,136, 93,222,119, 16,197, 12, 6, 35,100, + 16, 17,134,177,163,196,249, 36, 73,159,126,127,136, 17,134,168,215,115, 86, 33, 7, 91,113,190,231, 56,138,241,165,199,225,238, + 30,190,244,169,157,216,206, 58,135, 93, 1, 33,204,121,147,166, 51,245, 30, 0,194, 37, 62, 14,135, 35,146, 94,130, 31,248,172, +143,215, 57, 57, 57,121,165, 70,169,219,162, 55, 30,175,156,201,159,167, 73, 58,111,220,181,186,217,175,118, 82,187,136,109,123, +120, 94,198,178, 54,135, 26,207, 19, 14,163,234,163, 49, 72, 25, 32,124,137, 23, 72,188, 40, 34, 25,140, 24,109,110,242,237,239, +253, 38,255,253, 63,251,167,252,183,255,197, 63,230, 15,191,247, 61,190,249,246,219,108,109,111,163, 67, 31,111,109, 76,230,173, +241,240,211,159, 81, 87,181, 67,215,186, 60,117,163,241,156,144, 46,240,125, 64,217, 67, 91,101,157, 23,101, 89, 80, 86, 37, 85, + 85,181, 14,151,174,240,181,161,144,190,245,246,187,140,215, 70, 28, 79,142,120,248,224, 62,191,255,123,255,128, 52, 75,137,162, +152,254,104,196,218,104,141, 94,210,183,192, 40,199, 33,104,210,254, 60, 79,162,116, 13, 24,170,170, 38, 77, 51,210, 44,103, 52, + 26,225, 75,159, 36,137,108, 84,181, 47, 25,174,143,173, 98, 93,184,144, 48,223,190, 78,129, 47,219, 34, 96, 99,125,157, 15, 63, +250,136,219,183,110,241,252,197, 11,151, 12,231, 45,146, 65, 29,189,174, 77, 27,245,108, 4,118,155, 61,191, 34, 84, 95,141,168, + 22,158,135,191, 10,245,160, 19,226,210,253, 34,109,213,202, 57,152, 59,183,192,117,171,107, 58, 11, 80,227,201,238,206,226,151, + 23,119,125,138,216,164, 59,226,172,166, 21,174,148,162,114, 11,163,239,251,237, 70,226,121,182, 98,174, 85, 67, 69, 51,237, 2, +217,216,222,194, 48,112,240,126,185, 0,149,184, 86,188, 37, 14, 45, 44, 78,190,107,145, 55,115,142, 38, 48, 70, 91,105, 51,194, +128, 30,172,161,166,150, 84,149,151, 37,101,165,240, 61, 65,213, 88,196,220, 89,171, 54, 6,129, 79,221, 28, 62,132,245,164, 23, + 74,163,141, 38, 54, 32,195,144, 82,105,180, 1,175,214,212,198, 80, 43,251, 96,249, 46,193,205,151,134, 90, 43,148, 22,104, 93, + 32,189,208,138,224,114,171,186, 15,226, 1, 97,175, 79, 16, 70,104, 1,129,144, 8, 97, 23,173, 80,122,188,255,206, 91,252,218, +119,190,195,120,188,206,139, 23, 47,169, 78,142,248,240,218, 58,178,180, 9, 86,181,170,172, 85,200, 93,247,231, 7,199,220,125, +186,199, 95,125,241,132,105, 81,145,187, 3,139,208,134,122, 65, 36,239,120,156, 23,221,154,110, 87,228,188,217,223, 89,226, 75, + 86,128, 51,221, 42, 93,116, 14, 97, 6,240,244,194, 10,182,186,100,149, 85, 69,127, 56, 98, 62,155, 19,248, 33, 24,207,138, 96, +180, 70, 87,218,102,129, 47,109,160, 54, 31,124,181,106, 22, 90, 83,150, 5,202,109,216,129, 47,219,195, 37, 88,209,140, 49, 22, + 98,210,237,242, 20,101,201,214,246, 37,252,164, 71, 48,139,121,242,248, 73,171, 61, 81,173,101,197,141,118,132,109,115,122,230, +171, 45,104,167,237, 73,167,105,114,171,237, 97,173,207,210, 58,184,223,207, 89, 2, 27, 13, 74,251,210, 27,160, 25, 87, 73,105, +169,138,162,196, 8,129, 31, 68,206,234,105,108,166,129,178, 93,188,160,215, 39, 73, 18,202,170, 32, 24, 12,144,194, 67,213, 37, +218, 24,242, 98, 78, 40,125,140, 22, 68, 97, 76,224,135, 4,226, 10,235,219, 23, 57,154, 76,184, 16, 39, 28, 31,236,177,185,185, +201,108, 54,227, 63,255, 71,255,148, 90, 27,210,172, 96,231,229,115,132,119,151,253,157, 23,108, 95,187,206, 96,184,198,252,228, +144, 47, 62,251, 4,207,225,105,165, 19,189,230,197,156,170,168, 8,130,144,164,159, 88, 4,108, 16,130, 20,110,179, 15, 48,194, + 67, 8,187,248,139,186, 70, 43,136, 70, 67, 60, 63, 98,115,235, 2, 71, 7, 7,110,243,142, 80,170,116, 57,241,242,149, 27, 36, + 75,221, 44,231, 28, 66, 32, 12, 92,216,216, 98, 56, 94, 35,157,206,152,207,231, 28,236,239,211,239,247, 73,211,180,117, 96, 44, + 92, 62, 30,202, 88,194, 91,115, 61,132, 62, 61, 14, 61, 75,236,214, 77,181,252,155, 36, 37,118, 59, 6, 45, 91,189, 33, 26, 90, + 1,206, 82,183,211,122,241,125, 55,219, 21,224, 53, 99, 81,215,154,151,182,106,151,113,196,250,165, 27,124,255,159,252, 55,188, +126,117, 64,207,253,235,220, 61, 75, 18, 65, 32,224,221,143,127,133,159,255,135,143, 72,255,242,223, 83,250, 1,120,121,187,126, +218,145,143,162,168, 43,192,142, 52, 61, 64,212, 86,196, 88,212,117, 91,120,105, 93, 59, 49,178, 92,154, 77, 31, 29, 31,129, 30, +113,229,218, 77,174, 94,185,197, 95,252,224,207, 88, 91,223, 96, 52, 92,195,151, 33,113,111,204,221,123,159,113,124,116,200,149, +203, 87, 88, 27, 14,144,126,224,176,181, 2, 95,218, 12, 4, 75, 21,180, 58,168,167, 47,118, 73,226,136,237, 11,235,108,110,110, +184,145, 27,196,131, 62, 50,180,241,174, 85, 93, 81,229, 5,105,150, 81,149, 5,126, 96,133,135, 27,235, 99,190,253,173,111,113, +229,242,101,254,237,191,251, 19,254,226,135, 63,100,158,205, 73,139,194, 30, 74,252,198, 22,220, 92, 83, 59, 10,142,195,192,229, + 85, 24,202,178,108,187,201,102,165,208,145, 23,175,221,248,227,238,209,243,172, 86,144, 56, 67, 72,177, 42,116,234,222, 16, 77, +187,122, 21, 36,211,110,232, 29, 1,157,148,142,171, 43,101,203, 60,246, 86,190,207, 89, 25,235,141,144,170,129, 24,180, 11,189, + 88, 6,221,208, 73, 48, 51, 29, 47,160,231, 84,136, 93, 32,142,181,146,249, 22, 48,160,117,235,107, 95,220,248,166, 69,199,106, + 12, 66, 6,228, 69, 65,172,107,148,209, 40, 13,165, 82,182,250,198, 35,115, 85,159,104, 88,239, 2,250,161,205,108,159,229, 21, + 89,109,219,179,141, 60,162,172, 21,117, 3,126, 1, 74, 99,163, 93,147, 72, 82, 57, 38,115,232,251,228,181, 34,171, 44, 56,163, +210, 10,141,197,115,142, 47, 95, 35, 25,108, 16,248,176,222,139,217, 94, 27,112,105,173,207,157,173, 33,223,188,115,141,141,216, + 39,159, 77, 56, 62,158, 16, 70, 61, 8,122,124,190, 51,101, 39, 83, 40, 4,101, 62,179,135, 6, 99, 65, 58,195, 36,225,206,197, + 49,191,246,222, 29,198,177,207,254,193, 49,153, 90, 84,210,170, 83, 10,138,149, 50,240,111,154, 50,245, 42, 43,155, 88, 81,121, +181,215,114, 73, 69, 78,123,120,212, 90, 35,164,100,224,210,163, 54, 55, 54, 57,153, 76, 73,122, 49,179,217, 20, 15, 15,101, 22, +233,106,139, 16, 31,227,132,206,237, 48,202, 18,165,226,152,225,112, 72, 89,204,169, 74, 77,154,229,173,254, 34, 12, 67,170,170, + 58, 29,102,131, 33, 74, 6,108, 95,190,204,241,241, 17,147,163,195,101,143,191, 89,252,252,218,205,132,219,252,250, 87, 84,234, +231, 41,219,151,102,176,231,107, 23,219,205,252,212, 6,181, 20,123,233,152, 13,141, 59,192,184, 77, 77, 70,246,243,221,235, 85, + 23, 57,166, 42,237,152, 70,193,232,226, 37, 42,165, 64,186,103,210, 88,165,122, 24, 37, 36,201, 16,180, 33,150, 53, 82, 27, 62, +252,240, 27, 36,189, 1, 65, 28, 83,171,218,117,192, 42, 54,182,182,248,238,119,127,155,170, 42,248,209, 15,254, 61, 59, 47, 30, +243,226,233, 3,166,199, 71,164,233,140,163,221, 23,236,191,120,198,108, 50,163,215, 75,236, 12, 61, 8, 81, 74,225, 7, 1,155, + 23, 46,209, 27, 12, 91,214,134,210, 53, 74,149, 36,113,143, 48,140, 40,202, 10, 92,128,143,144, 62,101, 81,217, 42, 72, 89, 90, + 88,158,102,182, 43, 97, 52, 65,175,111,117, 46,170,217,120, 87,220, 3,205, 53,236,250,213, 91, 78,129,104,215,181,143,190,241, + 49,198,243, 56,220,223,103, 54,157,185, 46,131,106,215,203,110,117,220, 8,167, 76,247,230,215,230,107, 43,220,207,179,169,157, + 69,239, 60,235,217, 91,170,246,219,207,243,150,173, 86,158,103,115,233,189,197, 40, 66, 72, 31,225,135,200, 48, 68, 6, 17, 81, +156, 16, 13,199,188,253,173,239,115,245,141,111,176, 57,246, 8,132,203,199, 0, 20,130,169, 49,236, 23,138,163, 12, 6,195, 45, + 62,251,201, 95, 82, 21, 25,117, 85, 57, 56,148, 21,208,217,180, 75,133, 48,198,226, 88,141, 61, 56, 27,173,145, 66, 32,132,194, +212,202,185, 74,154,188, 10,171, 95, 26, 95,216,230,250,245,235,188,118,251, 54,247,239,125,198,227, 7,247,136,147,132,209,160, +199,246,133, 77,130, 40,226, 79,255,244, 79,120,244,228, 1, 15,191,188,207,103,247,190,224,225,147, 71, 76,102, 51,242, 74,187, + 89,121, 96,149,241,129,133,214,140, 70, 35, 54, 55, 55,241,131,128, 44, 43, 40,235,138,225, 96,136,239, 91,134,124, 55, 78, 59, +112, 88,106,165,236, 56, 65,107, 69, 24, 70,196,253,136,245,245, 49,239,190,247, 14,119, 94,187,205,227,135, 79, 90, 54, 6,157, + 53, 64, 58,118, 75, 20, 71,109,231,193,151,146,126,191,223, 2,222,186, 33,100, 2,135,137, 93,248,186,151, 69, 20, 75,149,122, +167, 21,223, 86, 99,157, 69,182, 81,136,139, 21,104,136,160, 19,227,218,217,240,155,175,169, 26,175,176,227,174,215, 46, 28,101, + 53,150, 85,117, 42, 33,233,196,102,221, 27, 81, 41,213,218, 73,172,160,195, 56, 21,183,183, 12,166,105, 8,110,238, 64,224, 59, +157, 64, 35,178,106,108, 92, 77,190,175,116,177,169, 11,206,189, 93,132,219, 83,181, 16,200,124,142, 54, 53,181,182, 27,123,230, + 80,160,165,214, 40,219,159, 68,120,182,179,208,151, 30,190, 39,153,151, 53,179,214,183, 44,156,154, 84,218,255, 26, 43, 6, 44, +106, 91,185,135, 78, 63,160,181,194,243,237,225,167,172,237,140,178,172,106, 20,134,164,215,227,205,183,222,224,157,155,151,121, +239,198, 85, 46,174,245,232, 73,141,174, 10,230,233,156,227,201,132,162, 40, 81, 69, 65,157, 78,121,254,248, 75, 62,255,226, 51, +102,179, 25,198, 15,121,240,242, 24,146, 53,118,247,119, 57,153, 30, 51,205,114,166,217,220,122,237, 85,205,246,250,136, 15,239, + 92,167, 44, 10, 94, 28, 30,219, 74, 93, 47, 20,192, 75,150,200,175,225,201,253, 42, 49,157, 56, 79,121, 36,132,173,104,117, 87, +216,181,188,169, 43,165,137,162,136, 36,233, 19, 70, 17, 73,146,160,220, 33, 45, 75, 83,215,230,107, 82,250,212, 34,232, 71,177, + 8,120,105, 68,146,158,160, 63, 24,208, 75, 18,116,149,113,116, 60,105,133,149,150,123, 80, 83,185,184,204,133,191,216, 46,124, +227,205, 77, 6,227, 77,166,135, 7, 54,250,213, 85,227,194,216,152, 85,207, 8, 52,102, 17,185,218, 84, 78, 46, 67,121, 89, 28, +119,122, 34,190,252, 18,122,103,136,232,196, 89, 19,243,115, 62, 90,174,252,141,209,148, 69,142, 48,154,126,156,216, 96,160,124, +142,208, 21, 90,215,120, 98,185,197,111, 60,232,173,109, 18,245, 6, 84,101,105,103,223,170,198,168,154,170,200,208, 85, 69,224, +251,252,202,157,183,201,230, 19,214, 55,215,121,244,240, 75,164,128,167,143, 30, 48,232,247,185,243,230,219,124,244,193,135,236, +237, 61,199, 24, 65,208,239, 51, 24,173, 17,245, 7, 84, 90,113,114,120,140,239, 75, 60, 63,164, 86, 41, 69,154, 57,251,148,135, +239, 7,132,113, 66, 20,217,192,150,193,218,152,181,141, 77,251,186, 56, 1,119,158,219,104,206, 38, 42,121, 52, 24, 90,207,178, + 19,235,206,211,185,211, 12, 8, 42,101,147,221,234,170,194,232,106, 57, 2, 83, 72,132,177,207,233, 42, 6,200, 45,118,173,248, +105,125,125,204,230,214, 38, 73,175,207,116,122,130, 39, 5,131, 65,159,170, 42,208, 70,181, 93,192, 56, 9,232, 37,137,173,206, + 26,154,155, 88,133, 49,125,125, 30,193, 89,232,237,243, 50, 58, 78, 9, 87, 61, 15,227, 45,194, 72,108,161,228, 89,231,131,180, + 48, 43,225,249,246,117,112, 65, 56, 66,250, 8,233, 89,123, 90, 24,226,199, 9,189,126,204,205,119,191,195,229, 91,175,211, 79, + 96, 16,122,104, 32, 23, 48, 7,166,198,112, 92,106, 78,166, 10, 63, 24,112,124,176,207,193,139, 71, 78, 17, 95, 97,234, 26,212, +226,208, 45,140,177, 92,128,206, 94,101,217, 20,157,188,121,151,163,225,121,146, 48, 12,121,231,131, 15, 73,122,125,142, 14,247, +233,247, 98,202,178,230,198,245, 27, 92,185,114,157,209,104,204,159,255,135,127,207,151,247,239, 50,222,216, 34,140, 34,164,144, +228, 89,198,213,107, 55,120,255,157,247,200,139,140,159,253,226,231,252,197, 15,127,192, 95,253,232, 71, 60,121,242,152,141,245, +117, 46,109,219, 60, 7,233,217, 44, 14,233, 75,194, 40,116,130, 74, 73, 20, 39,120,194,163,204, 75,138, 60,167,174, 42,132, 39, +232,245,251, 12,215, 70,132,145, 77,196, 11,130,128,173,173, 77,126,245, 87,191,197,211, 39, 79,153, 77,103, 86,163,226,174,183, +244,237,120,175, 46,107,119,208,182, 5, 87, 85, 85,237,235, 18, 39, 49,190, 31,180, 99, 7,191,123,172, 63,143,130,212,204,193, +140, 89, 25, 0, 0, 32, 0, 73, 68, 65, 84, 41,206,108,143,118,218, 62,221,207,107,110,106,229,230,211,205,230,184,104,105, 47, + 8,114,139, 74,193,250,130, 27, 72, 71, 23, 80,211,253, 62,221,182, 60,206, 86, 65,151, 50,167, 77,155,109,222,206, 23, 59,128, +154, 70, 65,223,181,154,104,101, 90,202,154,114,138, 90, 41,229,210, 44, 89, 58, 5,168,116,161, 47,117,173,241,163,132, 84,198, +120, 85,137,240, 52,126, 40,240,202,202, 66,106, 58, 15,137,103, 7,220, 40,225,145,215,118,132, 96, 58,227, 9, 79, 72, 43,252, +105,236, 10,109, 12,158,157,111,246, 35,155,246, 37,227, 16,223, 11,208,166, 64,123, 30,253,193,144,173, 75, 23,185,118,249, 10, +195,193,136, 44, 45,185,123,242,132, 34,159, 83, 85, 54, 24,193,247,125,162, 48, 38, 43, 42, 78,102,115, 7,173,209,152,186,100, +239,120,143, 47, 62,251, 57, 91,151,110,112,116,124,196,112, 56,160, 60,120, 65,236, 89, 52,173, 49, 26, 15,235,181,143,227,152, + 27,155, 9,145,188,198,159,254,242, 57,121, 83, 10,154,211, 54,183,179,186, 58,231,205,213, 87,237,143,171, 27,206, 82, 87,200, + 5,107,156,157,138,101, 58,118, 32,131,210,182, 13, 30,199, 49, 89,150, 57,236,107, 64, 97,114,123,223,168,133,114, 90,172,180, +175,237,169, 88, 18,132, 33,131,254,128,170,180,232,208,178, 40,169,107,221,110,252,117,167, 5,214,188, 5,190,143,240, 37,227, +181, 53, 2,233,145,205,231,103,132,170,173,186, 9, 22,118, 37,179,234, 79,254, 10, 75,224, 25, 44,160,115,164,112, 43, 31,175, +216,217, 76, 71,192,103,154,115,130, 16,100,101,129, 41, 43, 55,158,104, 40, 89,194,181, 34,221,181,213,138,227, 71,247,153, 31, +237,179,126,237, 54, 50, 25, 96,116,133,174, 42,251,155, 57,225,231,228,228,128, 94,210,227,241,131,135,172,175,141, 56, 60,153, +242,183,191,255,187,248,158, 71,145,167,244, 7, 99,122,253, 67,142,143,166,148,233,156,199, 79, 31, 49, 57, 60, 34,157,159, 16, + 69, 33, 73,210, 99,114,114,132, 86,176,113,241, 18,179,217,140, 40,142, 41,139, 20,233, 11,166,147, 99,122, 73, 66,150,206,208, + 90, 17, 39, 17, 82,142,145, 66,112,233,202,136,170,170, 40,171,146,217,201, 17,232,154, 34,183,139,227,250,246, 69,146,254,128, +217, 60,101, 50,155,226,197,125,210,233,196,170,247, 75, 55, 86, 20,246, 16,104,111, 64,191, 83, 81, 45, 55, 83,154, 68, 45,207, +243, 24, 12, 7, 28,159, 28,243,226,249, 14,233,124,238,214, 19,221,230,182,123,129,221,124, 60, 31,170,162,180,112, 44,150, 17, +200, 95, 69, 0,252, 74,136,205,215,128,210,156, 5, 52,105,198,152, 6,105,243,195,219,205,221,129,101, 92,182,134,141,160, 21, +139,141, 94, 56,135, 15, 33,163,181, 13,230,147, 9, 7,179,117,174, 12, 23,191, 68, 41,160,242, 60,246,143, 11,138,121, 5,158, +224,219,191,245,135,124,241,179,191, 36,152,103,212,126,142,144, 37,120, 10,207, 83, 24, 60,232, 8,226, 22,135,106,213,238, 21, +205,134,222,172, 37,195,181, 53,202, 34, 67,245,134,244, 7, 35, 46, 92,188,196,100,242,215, 76, 78, 14,153, 76,199, 60,125,246, +132, 79, 62,249, 5,127,239,143,254, 33,158, 12,248,201,143,126,200,241,201, 17, 55,175,223,100,125,180,206, 15,127,244,151,236, +238,236,112,176,191, 71, 81,164,164,243, 57,147,201,148,157,157, 29,148,170,249,237,223,250,126,187, 78,132,161,101,129,132,113, +104,199, 18,181,178, 7,115,207,178, 19,122,189, 30,243, 52,181,145,207, 75,185, 37, 86, 7,180,177,177,193,191,248, 31,254, 57, +255,234, 95,253,175,252,248, 39, 63,101,230,121, 24, 10,202,178,196,247, 36,184,180,192,162,174, 40,235,218,166,115,122, 30,186, +193,178, 75,201,250,120,108,109,155, 23,174, 94,255, 99,241, 21,130,139, 46, 95,125,117, 56,127,158,239,114,117, 49,175,170,122, + 81,225,174,124, 61,173, 53,126, 96,109, 49,129,163,245,172,170,122,206, 74,120, 91, 84,238,139, 24,213,246, 32, 96,244, 34,181, +205,137, 23, 60,151,201,107,218, 80, 21, 67, 85,215,139,252, 98,215,106,106,190,127,119,161,181, 63,187,107, 43,210,216,241, 36, + 6, 15, 45, 37, 20, 5,149,170, 48,158, 68,123, 18,173,106, 27,191, 42, 60, 16, 6,223, 15,136,147, 30,210,243, 72,243,140,162, +118,153,220,198,210,225,164,239, 57, 82, 92, 19,230, 96, 79,202,113,224,211,235,247, 72,250, 61,130, 56, 36, 76, 34, 46, 95,189, +204,123,239,189,201,187,239,188,197,173,155,183,184,124,233, 10,194, 19, 28,157, 28,178,127,176,203,228,100,143,172,152,161,235, +178,253,154, 2,131,210, 53,101, 85,144,102, 57,105,158, 83,148,150,233, 44,133,226,240,224, 37, 47,158, 63,230,232,100,138,140, + 7, 28,236,239,145,102,115,166,243,148,163,121,206,209,116,206,254,241, 17,251, 39,115,208, 53,107,131,136,151, 39,185,181, 17, + 10,206,180, 67,126, 29,181,110,247,250, 46,221, 67,231,206, 3,205, 43, 32, 56,194,117, 97, 52,194,147, 14, 28,147,208,239,245, +240, 3,223,157,110, 21,121,150,217, 17,135,118,150, 40,173, 81,218,122,240,187,221,161, 48,142, 16,158,199,198,250,134,189, 38, +170, 96,111,255,216, 41,228,205, 43,197, 71,113,220,195, 11, 66,214, 54, 54,120,252,229,125,151,178,167, 87, 68,127, 98, 5,164, + 35,150, 34,149,133, 17,136, 87,164,177,189,210, 2,119,110, 85,119,246,223,117,173, 83,134,133, 45,212, 19, 30, 81,210,163, 84, + 21,190, 19,166, 6,205,243,217,136,100, 93, 88,146, 17, 18, 83,215,204, 14,247, 81,121, 74,210, 27, 34,163,158, 19, 90,106,208, +202, 42,224, 7, 3,190,243,237,239, 32,101,200,108,122,204,214,250, 38, 85, 81, 50, 26, 13,200,210, 19,166,147,140,162,154, 19, +132, 9, 27,227, 77,148, 42,173,174, 65, 43,142,143, 15, 24,142,214, 73,146, 62,147,147, 67, 6,253,136,126,127, 76, 16, 38,244, +122, 3,171, 76, 86, 21,113, 20, 89, 49,169, 31,177,182,190,137, 22,154,195,131, 61,230,179, 19,124, 95,208, 27,142, 16, 64, 85, + 41,202, 34,101, 54, 63, 65,120, 78,193, 29, 38, 84,198,195, 83, 53,186, 42,144,126, 96, 89, 20,110, 44, 99, 5,183,193, 66, 77, + 34, 22,240, 25,188, 69,144, 84, 18, 39,188,126,231, 14,251,123,123, 76,142, 78, 90, 66, 93,115,127,213,181,114,120,104,219, 93, +172, 43, 69, 85,213,157,162,233,244,165, 58, 51, 40,235, 63,226,237,149,255, 78, 52,214, 98,215,102, 23,150,182, 38,125, 31, 25, +132,120, 97,136, 12, 2,130, 40, 66, 4,190, 19,148, 90,110,128, 5,201,132, 4, 97,204,230,229,235, 92,125,227, 3, 60, 95, 18, + 14,214,185,184, 46,169,133, 96,102, 96,191,210, 28, 79,107, 94,188,152, 81,166, 37,126, 16, 16,196, 9,101, 89,176,243,240,139, + 22, 46,100,148,181, 84,154, 78,225,120, 38,235,194,158,186,220,207,110, 53, 83,189, 65,159, 48,136,169,138, 57,219, 23,175,112, +255,222,103,172,173,141,185,126,253, 6, 79,159,220,227,222, 47, 63, 65,120,134, 44,157,243,217,167,127,205,206,203,231, 40,163, +185,243,198, 91,100,121,142, 16,146,170,170, 57, 58,218,227, 96,111,207,118,227,140,245,164, 63,126,242,136,141,141, 13,110,191, +118, 11, 63, 8,236,254,213,177, 60,122,194, 99,126, 60,165, 86,138,176,215,179,161, 48,117,133,244, 3,226, 36,118, 78, 12,175, + 19,117,110,227,174,223,122,243, 77,134,253, 33, 79,158, 62,117, 93,237,213,108,121,171, 3,171,157, 85, 91, 41,123,207, 52,247, + 86, 28,199,200, 75, 77,251,189,179, 73, 47, 54,198, 14,119,253, 12,101,229, 89,120, 87,115, 14,128, 68,176,152, 31,154, 21,149, +179, 85, 16, 47, 68, 61,158, 39, 8,252,128, 56,138,172, 72,161, 17,146, 56, 27, 93, 23, 71, 43,154,234,109, 69,228,225, 59, 53, + 97, 91,149, 55, 85,122, 27, 56, 35, 91, 22,180,193, 90, 17,180,214,173,112, 69,105,213,122,217, 77, 71,116, 36,125,223,109,252, +246,164, 20,248, 1, 65, 98, 57,198,101, 93, 81,107, 8,146,190,109,241, 58, 97,157,231, 73,162, 36, 33,233,245,241,163,136,217, +124,214, 62, 59,218, 88,245,127, 32, 61,203, 51,110, 56,245,158,253,184,215, 75, 24,244, 99,122,131,152, 65,191,199,112, 56,100, +109,180,198,112, 48,160,159,244, 8,130,128,178, 42,152,207,103,228,217, 28,173, 74,247,186,216, 17,130, 85, 79,186,211,180,209, +237,172,212,210,212,106, 59,175,194,118, 33, 36,154,131,131,125,118,143, 78,136,135,155,228,149, 38, 47, 83,234,186, 66, 41,203, +160, 47,170,138,121,105, 61,188,210, 19, 76, 75,150, 98, 7,197, 43,128, 23,231, 42,221,207, 18,245,156,161,233,104, 43, 74, 97, +209,187,203, 15,181,113, 10,105,217, 66,106,194, 56,198,151,146,225,112, 72, 20,197,204,102, 51,180, 82,164,243,185, 21,172,185, + 83,115,179,225, 26,221, 88, 55,109,124,106,156, 36,224, 44, 72, 6,131,169, 50,246,143,166,118, 97,239,156,182,227, 56,238,164, +239,185, 44,104, 52, 81,210,231,157,119,223,231,139,207, 63,181, 68,194, 54, 78, 85, 44,212,209,136,206,235, 39,150,254, 76, 44, +205,208, 95,181,161,119,219,241,175,230,190, 47,205,212,151, 44, 84,157, 72, 78,154,231, 73, 81,213, 21,158, 12, 8,163,144,186, + 44,219,207,107, 8, 89,116, 71,190, 14, 62, 34,140,161, 42, 50, 38,135,251,168, 34, 35,138, 98,100, 20, 1, 30, 81, 16, 32,138, + 57,151, 47, 95, 65,250,146, 11, 91,219, 12, 6, 3,134,131, 94,235,125,175,202,130,227,163, 67,254,214,119,127,147,121,154,178, +179,243,156, 65,127, 64, 20, 5, 76,142,143,209, 90, 89,207,242,104,147,209,120, 19, 63,138,172, 19,164, 44, 90, 23,130, 0,202, + 50,167, 40,114,202, 34, 69,149, 21,198,216, 67,138,209,146, 11,219, 87,121,252,232, 17, 89, 58, 71, 85, 14, 8,146, 91, 12,116, +174, 33, 30,172, 89,233,100, 85,218,103, 74,215,173,141,203, 52, 29, 44, 79,226,198,205,173,214,198, 6,107, 88,225,214,229, 75, +151, 80,186, 34,207, 50,170,170,196,247,131,118,158, 94, 85,182,131,214,104, 64,234, 90, 81, 85,170, 99,163,234,116,108,224, 63, +253,198,125,254, 63,178, 0,153, 6,107,226,217,205, 74, 6, 33, 65, 28,227, 59, 42, 92,216,235,225, 7, 33, 94, 16,224,251,161, +141,218, 21,182, 93, 44,252, 16, 63,138,185,114,231, 93, 54, 46, 95, 71, 43, 69,156, 12, 57,202, 51,166, 8, 74, 41,216, 59,170, + 56,153,105,246, 95,238, 19, 4,161,163,104,194,165, 43,215,248,244,167,127, 69, 62,155,160,170, 18, 85, 23, 24, 55, 63, 87, 77, +176,144, 57,189, 87,153,134, 81,209,196, 74, 75,159,181,209, 24,207, 15,185,117,231,117,142, 14, 95, 50, 59, 62,225,215,191,247, +155, 40, 45,201,138, 18,165, 5, 65, 16, 19,199, 17,181,210,236,238,188, 36,138, 99,198,163,117,226,126,194,207,126,246, 99,238, +127,241, 75, 94, 62,127, 74,145,165, 54, 19,160,174,219, 46,219,147,167,207,216,221,221,227,237,183,223, 34, 8,131,101,151,151, +128, 40,138, 72, 39, 51,158, 61,125, 6, 50, 96,109,107,155,108, 58,193, 51,224,135, 1,210,247,151, 17,195, 2,162, 56,226,202, +149,203,220,188,118,157, 95,254,242, 51,203,215,104,236,183, 90,219,136,228,186,182, 58,172, 51,200,157, 69, 81, 56,161,220,169, +102, 32,231,162, 36, 69,199,252,254,170, 57,206,105,152, 2, 75,179,242,230,189, 81, 4, 55,190, 66, 1,109,166,181,110, 66,238, +157,167, 84,120, 2, 41,155, 7,193,180,249,231,141,119, 82,118, 60,237, 77,165,219,172, 95,141, 61,174, 85,177,138, 69, 36,159, + 82,138,178,170, 23,138, 94, 79,216,234,189,241,208,183,124,116,111,225, 81,110,230,174,190,135, 49, 2, 37, 60,164, 31, 81,214, +154, 48,137, 17, 81, 76,169,236,171, 26,197, 17,253,193,136,193,104,141, 32, 78,168,218,192, 8, 11,199, 8,165, 71, 28, 5,196, + 81, 72, 24,248,132,206, 78,209, 75, 98, 6,131, 30,253, 65,143, 36,142,172, 47,210,101,250,214, 74,145, 23, 5,121,158, 82,148, + 57, 74,217,246,168,231,153, 86,221,111,161, 32, 29,128,129,235,233, 89,173,181,105,184, 26, 78,136, 98,103,123,145, 15,147,201, + 9,251, 71, 19,138,218,146,234,180,202,221, 44, 71, 59, 65,160,161, 82, 10,161, 21, 74, 65,133,116, 7,167,229,246,251,171, 32, + 51,175,194,199,174, 90, 41, 87,163,127, 5,226,220,214,180,215,153, 61,122,210, 90,149,162, 40, 98, 56, 26,113,116,116,132,214, + 22, 64, 83,171,218,157,186,173, 3,193,184,188,122, 99,132,203,101, 87,182, 26,113, 7,195, 40, 10, 81,229,156,131,163,105,123, +216,107,232, 83, 77,117,111, 59, 60,141,111,212,163,172,114,174,221,122,141,135, 95,124,209,130,130,218,214,170, 88, 33,189,189, +242, 9, 60,189,169,159, 62, 64,139, 83, 34,184,243, 27,182, 98,169, 25,223,126, 45,179, 56, 28,105, 99, 16,210, 35,242, 29,128, + 8, 59,211,140,130,128,164,151,112,231,181, 59,206, 38,104, 53, 30,218,133,219, 72, 25, 44, 2, 71,148, 70,101, 41,211,195,125, +242,233,137,173,240,165,224,205,155,183, 56,218,127,201,250,198, 6,233,108,134,239,195,124, 58,225,195,247, 63, 96,231, 96,159, +203, 87,111, 35, 48,252,249, 15,254,132, 47,191,248,140,253,189,231,100,179,204,146, 1,171,202,130,131,140,161,215,239, 51,159, + 30,183,228, 68,141,215, 94,199,162,200, 9,131, 16, 85,151,204, 38,199, 96, 52, 65,212,227,248,112,159,108, 54,227,232, 96,151, +124, 62,107, 55,107,207,243,109,228,171, 50,168,186, 36,136, 99, 8,236,230,164,141, 65,215,149, 19,188,218,206,219, 66, 52,231, +216,219, 94, 55,107,194, 35, 8,124,126,253,215,126,149,173,173,117, 14, 15,247,169,106, 11, 52, 25, 12,250,172,173,141,241,125, + 73,158,231,142, 94, 38,157, 96,179,219,241, 20, 11,247,144,249,143, 3,207,156,183, 46,191,242,205,173,167, 86,236, 39, 65, 74, +100, 16,224, 71, 9, 97, 50, 36,238, 15,137,135,107, 36,131, 17,113,175,135, 12, 66, 16,178, 5,208, 32,172, 96,206, 15, 99,110, +191,251, 13, 6,227, 13,123,136, 41, 10, 52, 33,135,187, 83, 30, 63,216,101,118,156, 49, 92, 75,144,158,164,174,193,143, 2,155, + 75, 33, 36,210,143,248,242,211,159, 80, 21, 57,170,170,209,149, 21, 55,118,139, 67, 86,108, 93, 13,206,184,217,208,165, 47,217, +190,116, 9,168,153,158, 76,184,120,229, 38,111,188,254, 6,195,225, 0,140,230,203, 71,247,185,125,251,117,178, 60, 99,184, 54, +102,119,103,135,249,108,198, 27,111,188,193, 96,216,231,203, 47,238,241,240,222,231, 76, 39, 19,138,178,236,108,230, 14, 95,236, + 34,179,211, 44,103,119,119,151,111,124,227,227, 22, 3,222,125,206,252, 48,198,151, 62, 79, 30,222,231,224,240, 16, 17,198,214, +203, 46, 37, 94, 39, 33,116, 1,252,177,152,235,245,141,117, 46,110,111,243,201,167,159,146, 87,101,219, 77,110, 3,168, 58,163, +233, 85,114,171,188,116,253,230, 31,175,134,184,180, 66,167, 78,221, 47, 56,155,247, 46,206,104,183,175,134, 0,156,218,232,157, + 15,175, 85,182,123,139,185,128,104, 51,111,229, 66,193,171,141,131,196,200, 78,133,212,120,235, 29, 1, 77,122,139,170,180,163, +160,111, 22,224,186,174, 91,177,139, 21, 83,169, 54, 35,183,237, 76, 56,130,148,112,194, 53,220,161, 67,117, 82,157,172, 95,190, +178,149, 60,198, 33, 88,173,157, 79, 6, 1, 90,131, 31,133,244, 7,107,200, 32,182, 62,197, 40,102,180,177, 69,212,235,227, 71, + 61,130, 40,164,158,207,168,148, 66, 10, 65, 20, 90,191, 99, 20, 5, 4, 97, 64, 20, 39, 12,135, 3,214,198,107,140,134, 35,146, + 36, 38, 12, 34,194,192,199,247, 61, 39,234,211,224, 50,133,181, 86, 24, 44,218,213,247, 44, 39,191,121,111,170,116,225, 45,196, +141, 77,126,120,115,157,181,131,177,104,163,218,184,191,195,195, 3, 74,237, 49,159,101,118, 94,102, 74,106,173,218,251,194, 52, +158,122,163,153,139,224, 20,118,244, 85,168,202,175, 34,202,157,130,207,172, 46, 88,103,169,129, 59, 27, 85,227, 53,245,132,205, +158,199,147,108, 95,184,200,209,209, 1, 89,150, 82,107,133,174,173, 53,165, 86, 85, 91,125, 54,163, 16,203, 36,176, 25,221, 90, + 41,130,200, 86,170,186,200, 56, 60,153,217,195,159, 94, 0,106,218, 8, 87,211,220,151, 30, 34,144,244, 71,107,244, 6,214,202, + 84,228,243,133,194,220,217,200,196,210,246, 42, 86,160,183,226, 20,107,156, 51,123, 23,203,213,251,233,246,186, 56,119,147, 95, +186, 86,230, 20, 43, 22,129,103,145,171,163, 1,219, 91, 91,164,179, 25, 69,145, 83, 85, 21, 59,187,187,148,165,101,177,247,251, + 54,119,186,174,114, 60, 25,158, 49,134,209, 80, 85,148,243, 9,213,116,202,165,203, 87, 24,143,215,217,221,121,193,193,193, 30, +101, 89,242,221,239,254, 6, 47,119,246,120,241,252, 57,101, 93,241,249,221,207, 17,158,100,239,197, 51,178, 44, 67,248, 30,170, +170, 40,203, 18,207,179, 85, 80,127,109,131,195,253, 29, 78, 14, 14,145,129,207,241,254, 30,126, 16, 88,113,100,111, 64, 89, 85, + 84,249, 28, 85,215,212, 74, 33, 61,159,217, 44, 71, 43, 40,138,212,197,244,218,145, 90,212, 31,161,165,111,121, 19,198, 80,207, + 78,192,147,200, 40,198,115, 7, 21,161, 42,119,208, 15, 90,155, 96, 99,227, 90,190,183, 61,238,188,126, 7,223, 23,220,253,252, + 51,138,162,112,238, 26, 67,150,229,204,166, 19,242,220,106, 60, 26,155,109, 89,170,211,162, 53,115, 54,124,230, 43,247,229, 14, +198,251,235,180,235,133, 16, 32,221,232,160, 9,183, 18, 18,164,107,183, 71, 33, 97,210, 39, 28,244, 73,214,198,108, 95,189,193, +175,253,246,247, 9, 98, 75, 79, 20,178,153,179, 59, 81,178, 31,224,135, 9, 31,124,247,183,137,251,118,144, 62, 24,141, 25,172, +197,196,113, 66, 85,104,100, 96, 72,167, 41, 39, 7, 83, 54, 47,142, 73,250, 49,170,134, 34,207, 73,146, 30,191,252,201, 15, 40, +102, 83,116, 89,162, 84,213, 58, 46,180,211, 72,121,171,251, 15,158,155,233,219,157, 44, 8, 67, 6,195, 17,107,163, 49, 39,147, + 67, 62,120,239,125, 62,120,239, 67,194, 48,226,222,189,187, 8,207,103,103,231, 5,239,191,255, 33,194, 8,238,125,241, 25,183, +239,188, 77, 47, 9,184,176,117,137, 95,252,226,199,136, 32, 38,157,157,180,148, 56, 33,237, 12,187,215,239, 83,213,165,165,202, + 9,200,178,140, 34, 47,185,115,231,117, 11,190, 81, 6,140,160,174,173,183,221,104,171,198,159, 77, 45, 64,201, 79, 6, 96, 12, + 73, 18,117, 50, 74,108,149, 89,150, 21,194,107,230,236,235,156, 28, 77,120,252,228, 41, 74,107,106, 76, 91,176, 54, 34, 93,175, + 3,121,107,139,219,139,205,166,190,154,249,234, 54,122,239,140, 27,162,171,114, 95, 77,107, 59,107,238,115, 42,237,231, 84,156, +170,215, 86,151,194, 17,125,124, 25, 16, 72, 43, 92, 19, 66,184,106, 64,183,179, 8,209,177,174,117, 97, 55, 75, 16, 5,225, 57, +107,137, 21,234, 89, 72,134,105,219,238,202, 37,163, 41, 23, 45,105,237,111,139, 22,106,147,195,219, 22,141, 77,213,239, 75, 60, + 97,147,213, 26,144,127,243,111, 84,109, 43,188,254,218, 26, 81, 47,193, 15, 2,171,224, 77,122,244,250,125,252, 32,160, 55,232, + 51, 57,220,195, 19, 26,223,247, 72, 98,139,167,140,147,136, 94,111,192,214,133,109,110,220,184,197,173,107,183,185,120,225, 50, +235,107, 27,244,146,196, 10,106,156,208, 79, 10,105, 97, 52, 82, 88,213,105,163, 86,149,118,174,236, 53,244, 63,151,219,190,240, +120,155, 86,223,211,204,100,106,199,151, 87,181,109, 3, 42, 93,163,234,138,131,131, 35, 20,130,121,150,211,139, 67,132,227,183, +105, 3,202, 24,148, 22,248,170,162, 54, 62,149, 57,187,221,254,170,138,225,171,120,213,231,165,187, 9,115,246,223, 11,135,206, +181,150, 68,211,198,216,250,190,207,214,230, 38,211,217,148, 52,117, 98, 37, 99, 25,214,117, 71,184, 98, 23,106,225, 14,108,180, + 96,153,193, 96,196,112, 56, 34,159, 29,114, 50,205, 92, 95,180, 9, 44,234, 4,165, 8,129, 31, 6,214, 50,179,190,197,250,214, + 22, 70,217,176,147,153, 11,153,160, 27,210, 96, 86,183, 95,113,206, 33, 72,156, 10,127, 57,157,153,222, 21,177,154, 87, 84,234, +167, 81,191,218, 44, 0, 71,141,206,163,121,219, 24, 91,113,217,206,222, 30,163,126,191,109,241, 53, 2, 84, 99, 12,121, 94, 80, +150,133, 59,132,203, 86, 96,213,188, 55, 65, 48, 0,158, 81,188,120,254,148, 97,127,196,209,228, 16, 33, 35, 46,108, 93, 96, 62, +207,217,219,223,229,175,127,250, 99,162,222, 8,140,237, 24, 29, 31,236,216,141, 92, 90, 8, 82, 81,228,248, 65, 72,210, 31,241, +236,209,125,210,116,142,170, 20, 6, 69,153,231,148,117, 73, 89,100,164,179, 9,233,108,130,210, 53, 65,224,147,101, 57, 66,120, +252,157,223,255, 35, 46, 94,186,198,227, 7,119,113,151,155,222,112, 64,145, 23,120, 81,130, 17, 18,225,180, 48,166, 42, 45, 13, + 79, 0,117,137,169,106,123,240,109, 81,169, 11,201,123, 55, 97,203,243, 4,235,235, 27, 28, 30, 30, 82, 22, 21,202, 64, 16, 68, + 72, 25,144,206,179,150, 3,210,235, 37,173,231,184, 1,101,157,167,213, 56,143,229,112,150,141,109, 25, 20,243, 53,237,110, 75, +244, 79, 91, 12,104,207, 41,222,163,136,160, 55,160,191,126,129, 59,239,127,196, 63,249, 23,255, 51,127,251, 15,254, 46,191,255, +135,191, 67, 86, 24,118, 95,188, 64,187, 20, 27, 27,152, 19, 48,222,188,196, 7,191,241, 59,148,101,102,245, 5,201, 0,165, 4, + 69, 81,147, 12, 35,178,105, 74, 89, 42,182, 47, 95,166, 55,140, 72,103, 53,121,150,242,248,222, 93,142,143, 14,200, 78, 14,217, +127,249,132,186, 44, 48,170,178,108,248,150,103, 98,187, 70, 75,191,211,146, 67,192,142,106,179,124,202,112, 96, 17,195,253,254, +144,225,160,207,143,126,250, 87,124,242,243,159,144,165,115, 12,240,230, 27,111,243,139, 95,252,130, 60, 79,249,222,247,190, 79, +210,239,163,180,224,233,139,103,212, 85, 77, 58,155,114,225,226, 21, 27, 14,164, 42,130,208,102,176, 55, 97, 63, 85, 85,129,231, +177,187,191,207,181,171,215, 88, 27,142,209,218, 80, 20, 53, 89,102,115, 15,164,244,137,123,125, 6,195, 49,170,174,169,138,148, +193,104,157,162,170,137,147,112,105, 29,171,171,154, 34, 43,156, 58, 94, 18, 69, 49,159,124,250, 41,179, 52,165,110, 51,238,109, +162,168,114,251, 79,151,124,106,140, 65,110,187,246,251,146,101,232,140, 77,220,235,176,174,187, 51,237,243,236, 73,171,139,110, +247,243, 27,175,122,183, 3, 32,221,236,188, 17,225,212,117,237,102,224,178,161,216, 56,206, 51,173,234,184, 13,125,241, 22,182, +187, 38,192,165,153,247, 25, 55,179, 70, 44, 90,183,181, 90,216,152,164, 91,152, 91,130,152, 75,123, 91, 88,224, 76,251, 0, 75, +119,170,234, 42,241,195, 32, 64, 32,241, 60, 73,210,235,217,211,156, 83,223,251,210,170,167,195, 40,162, 63, 28, 88,203,132, 47, +169,106, 13,170, 68, 87, 5, 65,224,183,149,250,250,218,136,139,219, 23,121,239,205,119,120,239,205,183,185,113,229, 42,155,235, + 99,214, 70, 3,214,134, 3,146, 40,114,170,126,151, 92,216,116, 41, 68, 67,191, 19,200,166,117,230,224, 23,221, 24, 41,227, 8, +117,218,104,235, 71,175, 45, 81, 77,213, 26,165, 12,181,114,127,174,172,160,105, 54,153, 82, 41, 48,158, 37,220,245, 34,223,110, +236,205, 70, 96, 44, 67, 57, 50,134,140,192,230, 5,137,211,158,245,243,170,243, 85,218,223,153, 91,207, 10,243,189,155, 84, 36, +206, 10, 34, 52,224,251, 18,165, 52,113, 20,219,156,228,170, 98,107,251, 34,105, 58, 35,207,178, 22,170, 98,180,245, 96, 55, 94, +117,219, 89, 90,184, 29,162, 48,180, 29, 24, 63, 32,142, 67,242,116,206,116,154,182,233,109, 93, 71, 72,183,141,230,249, 62,219, +151,175, 82,171, 10,207,179,109,214,249,244,120,249,112,203,114, 43,177,185, 63, 23,191,137, 62, 67,244,246,213,173,245,211,135, +160,179, 61,234, 75, 46,131,198, 55,223, 4, 70,152, 69,139,255,248,248,132,162,204, 89, 27,141, 80, 85, 77, 81,148, 12, 71, 35, + 46, 93,188,132,214,154, 48,244, 25, 12,122, 68, 65,100,193, 69, 74,227,249,190, 75, 57, 59,173,206, 55,128,170,106,122,131, 1, + 72,195,141,235,183,217,223,125,194,189,251,119,249,229, 47,127, 65,158,101,124,240,209,183,248,242,203, 47,216,223,219,101, 58, +157, 80, 87,133,123, 78, 77, 75, 56,171,138,156,116, 50, 69,215,214,207, 28, 4, 22, 17, 27,199, 33,218,216,170,184, 1,252,120, +126, 64,158, 21,172,111, 94, 36, 25,142,120,246,248, 1, 71,251,123, 24,109,175, 79,111, 56,166,214, 2, 17, 13,109,183,193,181, + 65,181,174,219,117, 65,122, 30,117,149, 97,116,237,198, 87,186,189, 70, 77, 39,190,121, 30,147, 36, 97,208,239,113,124,116,204, +108, 54,163, 42,173,173, 73, 25, 23,169, 92,214,118, 67,167,178,148, 67, 55, 75,111, 68,116,231,102,177,123,237,195,181, 76,252, +124, 69,139,125,169,184,106, 69,184,180,234,252,133, 14,196, 44, 52, 3, 77, 44,155,103, 95,187, 32,234, 17, 13,199,124,235, 55, +127,155,127,248,207,255, 39,130,254, 26,235,235, 33, 65,232,243,218,251,239,176,125,245, 6, 15,190,184,239, 60,229,118,195,185, +126,251, 45, 46,220,126,147, 40, 12, 65,122,132, 97,236,208,194,110,230, 29,249,140, 55, 7, 92,187, 54, 32,159,151,204,102, 37, + 47,158, 60,162, 72, 51,226, 36,225,112,239, 37, 59,143,239,163,138,210,230, 13,116, 52, 31,242, 12, 11,172,149, 0,232, 37,102, + 10,198,227,218,245,155, 28,236,188,100, 50, 57,161, 63, 24,242,240,225, 67,158, 63,126, 76,150,205,153,207,102, 60,126,120,143, + 52,157,161, 84,205,160,151, 16, 6, 33,127,242,167,255, 15,233,100,194,124, 58, 65, 8,184,126,243, 53,102,179, 99, 34,223, 39, + 78,250,244,250, 3,252, 48,224,230,157,183,233,143,134,246,224, 86, 43, 30, 62,122,200,205, 27,183,193, 8,151,243, 64, 27,114, + 99,220, 56, 35,138, 19,138, 44, 99, 50,157,144,149,154,103,207,158,179,181, 57,110,199,194,217, 44,229,217,179, 23,172,141,199, + 60,127,254,146, 48,234,241,244,217,115,118,118,119,168,149,237, 44, 55, 65, 48, 22,160,166,151,198,202, 66, 8, 59, 83,239,190, + 64,222, 25,169,106,237,134,124,142,186,189,251,121, 75, 42,102,113,250,230,123, 21, 51,171, 57,121, 24, 99,136,227,208,109,190, +118, 51, 85,170,118,109,250,134, 84, 42, 22, 39,183,134,247,206, 34,188, 68,105,237, 68, 83,180,108, 96, 85,171,118,110,175, 29, + 26,182, 37,198,181, 63,171,215,138,243,232,122,150, 61,185, 68,195,107, 42,154,134, 66,103, 48, 45, 27, 90,187, 74, 47,142, 34, +130,192, 39, 12, 67,187,193, 4,177,221,120,125, 31, 63, 12,201, 39, 71,132,129, 79, 20, 71,140, 7, 61,110, 92,185,204, 71,239, +188,201, 71,111,191,195,213,139, 23, 9,125,137,239,129,239, 11,164, 39,240, 61, 65,232, 91,177,145,148,129, 83,253,123,109,155, +182,157, 55,139,110,251,214, 86,149,174, 56, 69, 27,183,105, 87, 21, 85,173,221, 70,238, 54,115,109, 95, 31, 91,193, 67, 93, 85, + 76, 38, 83,226,254,144,205,141, 45,106,109, 16, 70,183,179,104, 91,241, 10,170,116, 70, 16,247,169,207,161,187,157, 53, 95,255, +170,244,182,198,239,222,229, 36, 44, 45, 92,162,137, 28,108, 14,141,139, 45, 50, 8, 2,148,170,241,131,192, 90,206,140,225,226, +229, 43, 20, 69, 78, 58,155,227, 75,175, 13,113,209, 14, 19,219, 38, 37,169,197,189,239,251,129, 85,127,199, 17, 73, 18, 81, 21, + 25,211,105,218,114, 19,154, 67, 64, 16,132, 86,109,237, 82,238,106,163,237,188, 81, 74,100, 24, 83,101, 25,233,116,114,230,193, +165, 67,120, 93,102,193,175,136,231,190,202,194,214, 84,242,231,113,246, 95,105,141, 91,101,209,155,229, 74, 48,148, 30,190, 0, + 35,173,253, 74, 43,205,201,201, 9,113, 28,209,176, 50,234,210,182, 25,149,214, 8, 25,172,248,223,151,191,167,210, 21,147,201, + 49,151, 47, 94, 99,158, 77,217,218,216, 70, 41,197,139, 39, 79,241,163,132,193, 96,200,195,135, 95,218, 0,157,147,163,246, 25, +111, 90,214, 69,154,145,206,230,182,139, 39,237, 92,210,102, 92, 7, 4, 81,130, 86,138, 40, 10,137,147,132,108, 62, 39, 72,250, +188,254,250, 91,148,101,205, 27,111,189,195,131,187,159, 51, 57, 57, 4, 32,138, 19,210,185,141,152, 53,194, 32,164,237,212, 8, + 3, 66,105, 40, 51,234, 50,199, 11, 34,100, 28, 91,134,133,182,163, 9,129,215, 82,249, 26,159,130,231,121, 12, 7, 9,215,175, + 94,230,210,229,109,219,125, 27, 12,217,216,220,100,109,109,141, 61,167,162, 22, 2,162, 48, 38, 77, 51,234,218,180, 66,203, 87, + 93, 59,115, 70,244,106,131,144,109, 47,221,169, 46,168, 88, 82,211,183,140,144, 78,228,176,141,179,117,214, 95, 35,156, 77,173, + 33,195, 5,120,113, 76,208, 31,241,254,223,250, 93, 54, 46,108,147,103, 21, 85,161,185,189, 17,178, 22, 74,202,245,139,124,252, +157,111,243,232,193, 35,210,249, 12,240,184,242,198,123,172,111,110, 83, 87,181,117,200,168,154, 34,207, 8,130, 16, 16,172,109, + 13,241,140,160,204, 33,205, 4,233,108,134,169,109, 37,156, 23, 5,233,244,132,103, 95,124,130, 42, 10,235, 89,215,205,198, 14, + 30,103,120,235, 77, 55,162,214, 37,154, 25,205,254,203, 23,212, 70,144,103,115,246, 95, 62, 97,127,247, 37,101,109, 71,168,243, +217,140,233,116, 74, 18,135,244,135, 3,222,253,224,155,220,191,119,143,167,143,191, 36,207, 11,187,134, 72,159, 65, 63, 98, 60, + 26,243,250, 27,111, 82,107,197,141,235,183,121,243,237,119,120,247,189,247,217,220,218, 38, 47, 75,164,244,200,138,156,163,131, + 35,110,221,188,229, 10, 28, 27,195,108, 4, 78,115, 98,117, 55,189,254,144,227,195, 3,102, 39,251, 40, 17,240,232,209, 19, 46, +109, 95,192,199,163, 42, 74,238,125,121,159,126,127,204,193,225, 17,155, 91,155, 28, 28, 30,242,240,241, 67,242,178,108,247, 25, +223,247,219, 34,184,174, 42, 91, 4, 55, 46,232, 70, 40, 39,206, 73,103, 91,170,172,220,205,112, 94,165,126,106,126,179,100, 59, +147,231, 86,105, 75,243,119, 22, 2,182, 48, 8, 48,218,158, 96,131,192,119,109,170,206, 92,191,219,134,111,121,237,139,144, 25, +227,218,233, 56,241,221, 34, 24, 70,180,209,164,141,162,189,201,197,110, 3, 62, 26,152,136,179, 21,136,149,205,188, 73,110,106, + 16,180,162, 67, 66,177, 21,189,108,219,166,145, 31, 16,199, 9,186,210,120,206,235, 30, 68, 49, 85, 58,195, 71, 17, 39, 49,215, +175, 94,228,155,239,188,201,235,183,110,130, 23,115, 50, 47,152,204, 82,166,233,148,163,163, 67, 14, 14, 15, 56, 62, 57,162,200, +237,124, 46,137, 2,250, 73,159,126, 28,227,251,178,105,102, 44,230,176,166,237, 18, 47, 84,252,142, 67,175, 28,245, 78, 53, 7, + 19,109, 80,202,180, 27,155,114,179,250, 90,213,228,121,129, 48,146, 10,195,225,241,132, 40,148, 86, 88,231,108, 96, 70, 8,210, +172, 96, 28,122,100, 34, 90,118, 69, 47,225, 76,205,185,237,192, 85,251,227,169, 26,180,163,237,104, 83,206, 76, 99, 44, 52,237, +102,214,164,149,249,190,111,175,183,235,164,224, 9,198,107, 99,252, 64,114, 50, 57,105, 55,229,166,149,106,175,185,106,225, 13, +102,229,103,148,161,207,168,223, 35,157,207,153,205,231,132, 65,180, 68,145,107,170,246,230,144, 39,164,189,190, 70,215, 68,131, + 33, 39, 7,123,148, 46,161, 77,152,166,203,176,120,111, 3, 25,196, 89, 73,233,226,204,246,251,121,116,252, 69, 22,243, 42, 18, +246,171, 55,245, 85,106, 84, 83,205,173,143, 71,108,174,175, 81,107, 77, 47,233, 51,157, 78, 24,141,134, 4,190,164, 44, 11,234, +186, 38, 75,115, 74,199,213,151, 65,176,132,184, 89,140, 40, 58,209,146, 90,115,233,242, 53,238,188,246, 58,105, 58,231,232,232, +152,254,112,192,108, 58, 97, 99,227, 2,247,239,255,146, 60, 47,201,231,179,246,254, 40,139,130, 40, 73,168,114,155,126,101, 0, +223,165,232,121, 82, 18,247,250, 32, 61,140,174,153,207,231, 72, 33, 73,103,115,174, 94,187,193,104,115,139,186, 40,248,233,143, +254,130,131,253,151,237,122, 1,214, 2,169,234, 26, 93,228,168,170,194,115,246,187,102,164, 2, 2, 97, 4,117, 93, 34, 92,162, + 97, 99,147, 93,204, 51,237, 24,204,151, 62,239,190,243, 22, 89,154,242,252,197, 75,178,162, 96, 48, 24,178,181,181,197,151, 95, +222, 67,107,205, 96, 56,160, 63,232, 51,157,206, 40,242,210,194,178,208,232,230, 94, 62, 71, 13,209,222, 51,102,229,207,186,135, +249, 51,108,198,171, 65, 49,141, 93,225,244,243,232,126, 51, 79, 98,156, 30,199,243,125, 68,104,217,250,239,125,231, 55, 57, 60, +158, 50, 30,175,163,131, 0,229,121,132,189, 0, 2,143,112, 52,228,173, 15,191,203,238,243,231, 76,246,247,185,244,218, 59,244, + 70, 27, 54,208,166, 42,200,203,140, 94,191, 79, 89,149,248, 50,228,224,229, 14, 39,199, 19, 42,163,137,147, 62,101,150,163, 13, +164,105,102, 59,128, 85,193,151, 63,255, 17,166, 40,172, 8, 88, 41,231, 18, 49,175, 52,109, 54,234, 48,219,115,170,173, 35,195, +209, 58,195,184, 71,173,172,130, 60,205, 50, 71,165, 83, 4, 65,200, 71, 31,127,135,207,238,126,202, 39,127,253, 83,138, 60, 35, +205, 82, 12,112,227,230,107,220,121,243, 29,190,249,141,111,243, 71,127,240, 71,124,251, 91,223,228,251,127,251,239,240,240,241, +151, 60,126,252,148,217,108, 66, 81, 22,104, 55,186,124,254,244, 49,227,245, 13,122,253, 65, 11, 22,210, 75, 93, 50,251, 60,244, + 6, 35,230,243,212,218,142,101,192,227,199, 79, 89, 27,246,145, 66,240,228,217, 83, 60,223,227,230,173, 27, 22, 76, 20,197,220, +189,251, 57,199,147, 19, 74, 39, 18,109,138,205,102, 99,215, 29, 56,155,127,150,103,230, 60, 72,200,121,109,246,179,230,162,171, +173,161,110,107,169, 43,102, 58,245,245,221,102, 91, 85, 22,194, 16,133, 9,117, 45, 44, 79,186, 85, 26,107, 43,106,235,120,138, +133, 83,132, 47,241,145,181,161,210,245, 2, 64, 99, 26, 91,154,116,243, 52, 75,180,107,102,235,218,205, 39, 26,251,220, 89,132, +188, 38,226,209, 96,108, 24,132,107,129,120,173, 0,112,145, 98, 39,125, 73,228, 73,126,231,183,126, 11, 33, 2,214, 55,182,248, +223,255,207,255, 3, 60,143,192,247, 89,219,186,200,124,191, 98,173,223,231,221, 91, 55,216,222,216,228,197,206, 1,147,124,215, + 86,211,117,109,163, 93, 93,155,119, 56, 24, 57,175,176,231, 58,113,110, 46, 92,247, 72,179,156,147,217,148, 89,150, 81, 41,183, + 85, 24,141, 49,142,227,108,186,180, 49,207,249,233,220, 70,164,112,109,121,215, 84, 84, 6,227,210,184,154,128,148,227,195, 3, +164, 16, 28,159, 24,198,163, 4, 41, 76,123,128, 80, 70, 51,153, 29, 51, 28, 39, 28,171, 16,104,104,109,250, 92,171, 99, 23,142, +113,214, 12,190,107,133, 92,180,136,205, 18,152, 67, 47, 85,245, 13,102,149,118,174,105, 49,138, 16,132, 33, 89,150, 49, 26, 13, + 17,194,235, 44,158,102, 41,101,176,113, 68, 72,199,253,151, 46,217,107, 56, 28, 46, 24,221,158,160,172,170,165, 92,245,218,241, +242,163, 40,162,215,235, 3,134, 43, 87,174, 81,104, 65, 62,159, 49,155,158,180, 10,251,243, 84,251, 46, 85,160, 67,212,111,101, +241, 95, 27, 64,179, 56,251,152,115,158, 73,150,126,238, 46, 94,242,172,197,209,184,107,156,101, 25,151,182, 54,136,178,130,201, +116,198,198,198, 58, 97, 24,242,226,197, 11,210, 6,171,170, 58,128,168,238, 97,165,251,253, 93, 87, 76, 72,159, 40,142,249,229, + 47,127,206,219,111,189, 65,156,244,241, 3,193,157, 55,222,227,248,240,152,188,168,169,107, 77,145,101,173,190, 65,107,221, 42, +128, 27, 79,178,237,130,197,196,189,190,115,176, 88,218,157, 47, 3,116,109, 72,231, 41,248,146,163,201, 9, 55,238,188,193, 79, +255,242, 47,200,103, 19,180, 81,248,161,196, 40, 67, 93, 87,142, 65,224,238, 3, 99,105,144,120, 22, 28,210, 72, 6,141,174,241, + 60, 27,170, 97, 92, 39,220,222,146, 98,113,223, 56, 27, 83, 16, 70,150, 34, 55,180,150,211,245,141, 77, 78, 78, 78,220,189, 1, +189,126, 15,165, 52, 85, 93,219,192,144,118,221, 89,174,198,141, 94, 86, 53,115, 78,180,235, 42,142,251, 85,207,216,121,115,122, +211,206,181, 22, 50,201,230, 48,102,207, 99,138,195,151,207,185,120,243,117, 94, 62,125,202, 86,125,145,251,105, 74,166, 54,240, +227, 4,141, 64,135, 30,127,240, 95,253,119, 28,236,254, 47,110,156,227, 58,122, 66, 16,202, 8,223, 15, 72, 6, 35,180,170,137, +146, 62,195,245, 17, 97, 16,146,205,230,204, 38, 71, 84, 69,110,103,240, 8,162, 40, 4,225, 99,132,231,198, 14, 11,146,156,118, + 57,234,242,156,172, 4, 97, 26,173, 8, 24,161,168, 84,137,240,237, 24, 45, 77, 51, 75,236, 51,198,230, 0, 24,195,112, 99,139, +147,233, 9,179, 89,202,201,116,234,130,181, 13,232,156,172, 0, 0, 32, 0, 73, 68, 65, 84,108,149,142,231,241,250,107,111,160, + 74,171,133,248,235,159,254,152,157,253, 67, 62,249,229,167, 36,195, 1,243,217,140,181,225, 58, 87,175,221,160,215, 79, 56, 57, + 58,228, 7, 63,252, 33, 55,111,222, 70, 43,101,133,211,206,225, 32,125,191,163,217, 18,108, 95,186,198,201,241, 30, 65, 24, 80, + 86,134,159,252,245,167,188,249,218, 45,134,131, 62, 59, 47, 95,240,250,235,175, 51,159,103,108, 95,216,230,219,223,252, 22, 15, + 31, 63, 65,186, 28, 16,221, 4,221, 4, 11,174, 75,154,166,139, 74, 93,124,141,249,231,234,255,119,165,244,156,161,140, 63, 59, + 23,246,116,123,246, 44, 33,212,162, 77,103,109, 30,117,173, 92, 66,146, 89,138, 66,237,182,151, 76, 7,211,185,164, 2,110,191, +191,215,249, 60,211,122,115,187,200,218, 38,142,181,121,145,154,135,173, 81,194, 47,233, 2,132, 69,252,133, 97, 72,224, 60,241, +113, 20,219,150,187,239, 51, 8, 67, 62,126,247, 93,254,193, 31,252,125, 46,108, 95,230,207,254,252,207, 81, 8,246, 15,246,153, +205,166,214,187, 25,199,152, 42,103,123,125,196, 55,223,125,139,121,161,201,106, 73,165,161, 84,149, 19,123, 5, 36,113,194, 96, + 48,162,223,235, 19,134, 33,190,231, 57,209,154, 89, 82,191, 75,105, 91, 62, 85,173, 90,241,159, 94, 17, 41, 26,163,157,200, 77, +119, 30,120, 22, 64, 21, 22, 86, 67,173,161,170, 43,202,218, 16, 74, 73, 20, 5, 92,189,122,147,178,204, 59,246, 13, 65, 89,100, + 84, 10,250,161, 68,200,128,218, 85, 63,230,220,205,231,213,130, 32,179,154, 25,192, 2,204,226, 9,207,182,218,196, 98, 20, 35, +218,249,186,221,204,155,202,185,151, 36,150, 65, 16,134,244, 7, 35,122,189, 30,105, 54,183,162, 46,167,142,111, 2,108,108, 27, +146, 54,221,169, 9, 12, 50, 24,198,235, 27, 54, 66,177,180,224, 30,221,188,230,134, 37,194,161,210,154,193,112,196,155,239,254, + 10, 71,199, 71,140, 55, 55,121,250,197,231,168,186, 92, 80,186, 92,165,110, 55,120,177,216,252,150,196,126,230, 84,134,189, 57, + 3, 44,179,106,105, 91, 78,112,107, 97,127,231,142,188, 90, 60,238, 25,217,221, 93,182, 67, 20, 6, 68,161,143,231, 73,202,218, +218,147,242,162, 32,138, 66,134,131, 30, 81, 24, 16, 6,161, 85,195, 27,131,244,195, 78,117,142,243,220,227,224, 45,246,119,244, +131,144, 34, 79,217, 63,220, 99,109,188,193,108,122,194,107,183,238,112,120,176,199,201,244, 16,223,131,233,228,200, 86, 38, 44, + 40,127,149,211,218, 12, 6, 67, 54,183, 54, 9,227, 30, 97,100,219,216,202,229, 87,219,209, 84,128,170, 21,183, 95,123,131,126, +191,207,243,103, 79, 57,220,125,129,214, 54, 24, 68,202, 0,225,121, 84,101,238, 28, 53,141,216,177,121,183,173,211,133,157, 82, + 99,180,194,107, 71,184,157,158,183, 88, 36, 5, 94,218,190, 72, 24, 6,220,253,226, 46,199,199,199,120, 88, 80,200,131, 7, 15, + 56, 58, 60, 34, 8,173,114,254,248,200, 66,140,234, 14,108, 70,116, 0,242, 93, 54,200,210,198,187,226, 38, 94,245, 42,127,149, +208,238,213,246,183, 14,235,189, 73, 10,115, 8, 84,194,132,245, 11,219, 12,183, 46,209,235, 15,172, 72,184,172,121,124,255, 41, + 90, 67, 20,245, 49,202, 42,196,123,253, 11,236,189,120, 74,212,239,219,228,200,141, 45,182,174, 92,163,191, 54,102, 48,176,200, +230,209,120,157,233,241,132,201,209, 9,186,182, 64,168,233,201, 33,121,158, 81, 21, 57, 26,195,211,207, 62, 37,207, 38,152,170, + 2,101, 83,219,186,124, 19,113, 78, 55,143,206,235,217,132,226,104,165, 73,211,185,173,218,203, 10, 85, 87, 36,142,243,113,229, +250, 45, 14,247,119,216,121,254,130,249,244,132,178,178,247,156,239,251,108,108,109, 17, 70, 62,166,174,137,147, 30,165, 82,244, +134, 99, 14,142, 14,185,126,243, 53,246,119,247, 0,205,245,107,215,248,224,221,119,136,147, 30, 89,150,130,214, 92,190,120,217, +210, 37, 61,225,226,125,181,253,222, 74,145, 21, 37,251,251,123,244,146,152, 60,157,179,177,117,129, 52,175,120,185,183,203, 90, + 63,226,209,163,135, 92,185,122, 19,165,140,115,153,192,189, 7,247, 56, 57,153, 88, 42, 98,109, 59,133,101, 85,145, 23, 69,155, + 51, 16, 70,209,233, 77,253, 85,241,125,171,109,246,102,147,107,254,219,205, 91, 95,165,204,117, 55,253,174,242,210,235,248, 11, +187,184,209, 5,131,222, 10, 82,154,246,185,215,185,217, 27, 65, 92, 83,209,121, 14,199,218,120, 62,237, 44,121,113,163, 55,127, +191,120,112,188,133,200,169,161,247,184,150, 70,155, 29,220,217, 57, 12, 46, 95,184,165, 6,249, 96, 4, 97, 24, 17, 5, 1,189, + 40,230,206,245,155,124,235,253, 15,121,251,245,219,248,194, 48,153,166,188,216,221,163,172, 20,105, 58,227,100, 50,177,109,225, + 40, 66,186,131,192, 91, 55,175,114,241,214,219, 76, 76,132, 10, 18, 82, 45, 17, 97,159,209,230, 37,174,221,184, 3,126, 72, 93, + 41,148,170, 40,178,140, 44,207,200,203,146,162, 40,168, 28,123,188,217,164, 27,205,113,173,244, 82,140,104,163,112,214,206,194, +214,216,211,186,212,210, 37,126,128,214, 40, 3,101, 85, 82,215,240,209, 71,223,224,131, 95,249,136,231,187,251,244,251, 61, 6, +253, 1,120, 1, 85, 85, 89,223,119,101,233,108,189,164, 71,102,196, 43, 55,244,175,170, 58,197,242,170,229,238,139, 5, 55,125, + 49, 59,166,157,167,219,107,107,239, 15,223,151, 8,237,224, 49, 6,140,131,149, 36,189,132,217,116, 98,209,165, 70, 99,148,107, +187, 58,250,160, 86, 11,230,124,147, 23,160,209,172,111, 94, 64,232,154,188,204, 73,211,194,182,240, 28,207,160, 9,255,105, 9, +137, 70, 83, 42,195,205, 27, 55,168,139,156,151, 47,158,187,142,137,251, 61, 28,247,125,113, 12, 89,158,103, 11,186, 20,185,206, + 38,110,204, 87, 88,218,190, 90, 72,183,202, 6, 88,132,185, 44,111,236,141, 54,164, 57,136,212,170,102, 52, 28,178,187,191,199, +198,230,133,118,113,196,169,209,243, 60,167, 42,109, 28,102,165, 20,158, 12, 58,105,111, 6,207,232, 5, 82,213,253, 69, 63, 73, + 72,179,220,230,168, 39, 61,174, 92,190,194,135,239,191,203,227,167, 79, 41,202,130,170,214,100,233,156, 44, 79, 91, 87,130,104, +232,145,142, 63, 16,246, 70, 92,188,116, 13,233, 75,242,233,148,186,170,152,167, 54, 17,235,157,247, 63, 38, 47, 10, 6,163, 33, + 15,238,125,193,193,222, 75,180,174,172,245,211,147, 32, 44,124,200,156,135, 82,245,150,237,132,198,216,223,197,104, 13,141, 2, +190,209,173, 24, 97, 89,240, 64,150,165, 4, 65,228,156, 42, 30,101, 89,114,176,127, 64,150,102,244,122, 61,162, 40, 34, 75, 51, +234, 74,147,103,249,105, 70,187, 89, 84,223,167,158, 21,195,105, 96,255,127,170, 55,175, 25,243,200, 69, 72,146,139, 30, 70,134, +120,126, 64, 60, 92,227,226,173, 55, 40,243,140, 34, 79,153, 78,142, 41,171,156,201,225, 49,233, 60, 39, 74, 70,110,106,225,232, +106, 24, 43, 88, 52,134,120,208, 35, 74, 2,118,158,237,144, 77,102,204,103, 83,138, 52,165,200, 83,140,214,228,121, 74, 85, 21, +174,192,178,207,242,203, 71,247,152, 29, 29, 64, 85, 58, 24,152, 90,116,186, 92, 39,160, 51,119,236,182,161, 22,197, 64,211,162, + 53,118,156,168,116,109, 81,188,181, 34,244,125,100, 24,147,207, 78,168, 84, 77, 89, 86,164,243,180,181, 63, 71,113,196,205,215, +222, 36, 8,236,248, 84, 74,143, 40,238,113,239,203,123, 40,165,217,221,223,229,141, 59,111,241,221, 95,255, 30,191,255,187,191, +199,103, 95,220,231,231,159,126, 74,150,229,236,236,237,176,182, 54, 98,115,235, 2, 85, 85,183,129, 46, 85,153, 91, 82,163,231, +183, 28,128, 60,157,243,248,193, 93,174, 94,185,194,241,100,206,238,193, 1, 85, 62, 65, 6, 9,117,109,216,221,223, 99, 58, 75, +217,217,123,201,203,157, 29,187,174, 43,237, 80,180, 11, 61, 90,243, 76,251,109,226,213, 74, 27,124,169, 37,218, 84,179,231,120, +213,187,159,219,221,176,155,175,213, 70,196, 53, 27, 76,199,187,222,176,225,187,129, 45, 75, 45, 91, 33,150,104,114, 97, 16, 80, + 20,133,165,198,181, 10,228,166,202,208, 75,107,159,205, 74,246, 23,223, 95,219, 42,181,219,214,109, 46,186, 49, 6,161, 93, 38, +183,239, 99,217, 51,246,231,104, 42, 63, 79,122,110,134,234, 55, 83, 53,146, 56, 38, 10, 67,110, 93,190,204, 63,254,135,255,136, +164,215,227,238,221,187, 60,120,250,132, 52, 51, 28,189,120,196,241,228,132,119,222,122,159,255,247,207,254, 29,243, 44,103, 48, + 26, 81,215, 21,145, 47,249,141,191,245,125,110,221,184,198, 23,247,239,147,165,115,210,188,112,177,122,118,244,245,249,131, 47, +233,247, 6, 28, 29, 29,162, 84,133,174, 50, 34, 81, 19, 75, 64,215,173,158,160, 65, 24,106, 87,189, 55, 7, 26,221, 57,221, 46, + 54,236, 5, 47,153,206,198, 46, 86,250,127, 6,131,244,124,164,172, 81,194,227,147,187, 95,128, 16,156,204, 11,226,237,109,122, +189,128,141,237,107,188,124,250,144,131,151,207,236, 34,154, 79,144,193, 26,218,120, 95,217, 46,126,245, 26,211,196, 63,138, 69, +203, 29,115,134, 80,172,169,128, 27, 65, 35,248, 24,164,239, 33,133, 65, 6, 18,163, 20, 90,213,182, 77,222,116, 39,154, 54,177, +240,150,252,197,184,230,124, 39,124,213,206, 81,141,108, 67,139,154,174, 77,163, 19,145, 82,182,149,111, 93,215,156, 28,238,113, +180,190,142,148, 78,139,161,150, 70,213,231,176,182, 95, 65,124,165, 9, 41,234, 70,195,154,142, 64,112, 97,199, 91,205, 91, 95, + 54,160, 47, 62,238,122,243,151, 54,140, 51,174,153,198, 99,247,232,152,219, 55,111,113,229,218,117, 62, 41, 51,164, 7,155,235, +235,232,186,162,174, 21, 69, 89,177,179,179, 67,254,114,119,233,251, 53,135,228,238, 69, 51, 90,219,153,183,231, 81, 86, 53, 79, +238,223,229, 87,222,127,143,207, 63,191, 11, 24,214,198, 23,240,227, 1,207, 30,125,137,192,163, 86, 5, 32,137,147, 30,170,170, +240,125,143,254,112,200,198,214, 37,158, 60,188, 75,127,212,167,172,114,138,162,194, 51, 18,207,243, 25,174,111,242,193,214, 69, + 62,249,201, 95, 80,164, 51,140,174,240, 3, 31,165,106,226, 36,166,200, 11, 84, 85,127, 77, 49,225,202,245,104,218,187, 66,129, +167, 90,240,143, 16,130,193, 96,200,193,193, 62,117, 93, 34,165,116,155,129,116, 93,140,154, 60,243, 40,203,218,233,131,188,191, +113, 85,253,255,199,155, 16, 43,135,112,209,137, 85,214, 6,163, 43,140,170, 56,126,241,204, 94, 81,167,203,177,107,143,205, 53, +159, 30,238,243, 18,143,209,250, 6,170,174,217,186,124,157,221, 23, 79,160,206, 40,202,156,217,193, 17, 85, 94, 82, 21,182, 18, + 47,138,220,218,194, 48,228, 89, 96, 95, 79,101,173,132, 81, 20, 83,148, 57,201, 96,232, 10,171,102, 18, 37,150, 56, 22,171,115, + 37,115, 70,123,170,155, 83, 34, 16,232,178,118,241,199,130,121,154,114,227,242, 21,158, 61,121, 68,224, 75,122,253, 62,202,161, +163,149,178,237,236, 23,143,191,100,118,208, 35,126,239, 35,126,252,163, 31,240,222, 71,191,202,116, 54,181,182,204,209,128,203, + 23,183,201,243,156,127,253,191,253,107,158, 60,126,192,228,232, 24,141, 97,109,188,193,207, 63,251,156, 7, 79,159,179,183,243, +140,171, 23, 47,242,141,143, 63,182, 7, 64,199,207, 55,120, 28,157,156,208,239,247, 88,223,188, 76,173, 44, 5,113,150,213, 32, +251,188,120,249,140,241,186, 98,255,112,143, 43, 87,174,211, 31,140, 22,124, 23,135,196,214,238, 4, 22,134,161,203, 13, 16,118, +166,126, 22,158, 98,181, 90, 50,103,204,220,151,162, 86, 59,213,115, 35, 86,107,132,105,205,198,234,117,208,179,205,194,210,221, +228, 87, 15, 10,129,239,159,242,198, 91,108,165,180,243,112, 85,183,109,216,238,108,138,142, 23, 94,181, 73,104,180,104, 61,209, + 90,247, 22,149,145,118,130,183, 38, 4,164,109,181, 59, 62,124,243, 86,233,218,205, 91, 37,113, 32,145,198,240,135,127,231,119, +248,248,131,143, 49,192,131, 71, 79, 56,153,167, 24, 35,216, 63, 58,224,249,243,167,164,243, 9, 89, 94,178,187,251,146, 48, 73, +172,152, 74, 43,100,173,120,246,249, 79,233,151, 39,220, 30,111,145, 69, 1,243, 34,103, 50,157,240,236,249,115, 30, 60,191,207, +113, 58, 99, 54,207, 17,210, 39,205,114,146,254,192,158, 36, 49,140,134, 49,107,177,196, 83, 85,123,160,105,212,145, 90,211, 42, +243,187,124, 0,131,193, 72, 15, 73, 3,161,113, 85, 84, 19, 4,237,198,106,173,239, 84, 8,110,223,126,157,195,227, 19,170,186, + 38, 8, 66, 60, 25,176,127,120, 76, 16, 4, 8, 63, 32,232,141,209,234, 17, 85,169, 57,153, 79,233,175, 13, 80,120,232,142,165, +238,111,220, 18, 84, 26,207,128, 22,221,123,111,177,105, 45,132, 96,206,226, 39, 12,190,176, 55,122, 28,122, 96, 60,198,253,132, +124, 62,165, 84, 37, 71, 79,239,115,240,252, 17,117, 93,209, 27,218,128, 15,229,217,106, 59,148,129,125, 25,100,141, 86, 30, 70, +219, 36, 36,164,164, 23,199, 14,157, 9,210,243, 45, 27,192,221,223,149, 3, 23, 37,137,245, 27, 23,121, 78,173, 13,190,123,221, +101,148,180, 73,126,205,115,166,189,211, 45,113, 15,111,129,138,109,181, 31,210, 85,244,221,120, 84,111,105, 54,190,218,110,255, +186,149,123,187, 40,154, 69,149,222,140, 93,204, 89, 54, 57, 64, 24,201,237, 91, 55, 57,153, 28, 51,159, 77,233, 37, 49,187,123, +123,100, 89,198,222,206, 30, 85,165, 28, 64, 42,116,150, 40,109, 15, 72,205,243,214,121,222,141, 49,100,121,142,239,123, 68, 81, +207,182,114,107,205,237,119,222,230, 39, 63,255, 25, 85,173, 41,202,140,121, 94, 90,232,136,178,215,187, 44, 10,162, 56,166, 72, + 83,166,211, 57,126,120,136, 82, 53,147,201,140, 32, 25,160,211,140,241,214, 38,210, 11,185,117,235, 53,254,244,223,254, 95,236, +239,238,162, 77,213, 96,199,136,252, 16, 97, 60,234,178,122,165,202,124,213, 2,253,234,219,119,113, 92,251,255,152,123,179,102, +187,146,244, 60,239,201,204, 53,236,241,204,192, 1, 80, 0, 10, 64, 1, 53,118, 87, 87,143,106,118,183,217,164, 72,118, 75, 10, + 43, 40, 57,194,146,232, 65,162, 47, 20, 33,135, 46,252, 23,120,233,123,219, 23,118,216, 97, 59,194, 23,158,168, 8, 91,150, 76, +134, 37, 82,166,201,102,147,221, 53, 87, 97, 40, 20,102,156,121,216,243, 94,123, 13,153,233,139,204,181,246,218, 7, 7,168, 34, +197,144,136,138,138, 66,225,156,179,177,135,181, 50,243,251,190,247,125,222, 75,151,207,113,116,216, 99, 52, 30, 18,168,208, 61, +239, 60, 33,138, 34,226, 70,200,104, 52, 33,203,115, 10,175,176,255,203,176,169,207,163,134, 79, 68, 12, 89, 7, 97, 50,218, 98, + 10,195,112, 52, 32, 75, 38, 52,187,203, 72,175, 43,114, 85,167, 36,157,205,216,223,121, 12, 88, 58,221,101, 52, 49,235,155, 23, + 56,218,121, 2, 8,215, 93, 76,103,100,105,226,220, 65, 85, 20,182, 68,235,162,162, 91, 74,191, 31, 4, 42,164,221, 93,246,190, +247,121,252,171,125, 94,161,240,172, 21,228, 25, 63,103,221,198, 41,188,240,242,254,157,219, 72, 41, 73,172, 97,150,101,180,219, + 29, 70,163, 17, 90,107,210, 52,227,193,131, 7,108,158,221, 96,243,226,128,100,146,240,225,123,127,196,160, 63, 34,203, 53,179, +100,194,104,120,192,131, 7, 3,130, 56,228,210,213, 87,201, 47, 36,124,255,123,223,227,227,143, 63, 98,111,127,143,163,227, 67, +142, 15,246,233,247,135,196,141, 6,231,206,158,165,221,108, 57, 23,146,207,155,104,196,107, 96, 93,229, 31,132, 13,222,249,234, + 53,110,221,189,195,147,221, 67,130,168,237,198,138, 8, 58,173, 14,237, 86,147, 89,146, 80, 4,130, 48,136,209,133, 23,248, 26, + 83,237, 99,106,211,179,223,159,129,207,156,176,170,217, 19,237,247,147,173,245,147, 80,131, 58,217,232, 36,140,255,121,249,232, + 11,143,227, 63,244, 82,176, 84,162,241, 74,187,218, 28,145, 71, 53,175,168,186, 4,181,177,128, 84,106,129,172, 84, 66,244,231, + 31,178,152,219, 82,202, 22,123, 16,204,199, 7, 30, 88, 83,127, 77,110,241,146,180,227, 38,191,241,183,255, 14, 87, 46, 95,101, +107,239,144,207, 30,222,103, 56, 30,147,101, 25,119,239,223, 99,119,103,139,209,120,196,104, 56,224,204,185,151,216,122,250, 24, + 37,157, 77,173,232, 31,240,253,175, 92,231,245,235,175, 16,199, 45,134,163, 17,195,209,128, 65,239,144,227,227, 3,146,217, 16, +108, 65, 39,128,165,118, 68, 28, 88, 66, 97,145,104,132,206,209,166, 96, 48, 76, 24, 78,114, 50, 20, 65, 24, 97,116, 86, 19,127, +205,253,228,229,102, 94,222, 56,166, 22,175,233,246,117,103, 79, 51,224, 43,123, 23, 33,235, 58, 29, 17, 23, 46, 95,231,184,223, +171,120, 2, 88, 55,107,183,214,137, 64,164,144,244, 14,182, 49,190, 61, 30, 7, 2, 29, 54,220,166,254, 28, 58,220,105,254,244, +133,131,164,169, 99, 43, 75,129,165, 93,184, 79,165, 84, 40,159, 83, 31, 42,103,247,107, 70, 1,107, 75,171, 92, 61,187,202, 70, + 51,224,210,153,101,206,173, 45,209,109,132,204, 38, 3, 14,247,247,233, 29,237,163,141,165,213,234,178,212,238,242,213, 55,191, +194,193,193, 33,218,184,207,187,244,128, 6, 81,196,202,234, 58, 42,140,177, 38, 35, 75, 83,210, 52,165,200,117,117, 88,138,227, +120,222, 57, 10, 2,172,128,184,217,100,245,204, 38,235, 27, 27,108, 61,184, 87,141, 69,168, 87,197,130, 5,248, 76, 73, 59,172, +188,226,207,168,211,235,247, 27,167,224, 97, 57,117,206,126,186, 95,189,118, 77,156,216,255,171,133,207,204,189,235,229, 73,175, +217,138,184,113,245, 10,201,108, 70,175,223, 67, 23,133,127, 63,114,199, 57, 40, 10,178,188,240, 1, 40,139,249, 14,243,191,179, +246, 28,140, 37,142,155,104,109, 88,223, 56,195,104, 50,229,246,237, 91,172,111,108,178,253,248,161,131,201,204,166, 11, 93,166, +134,119, 33,204, 38, 19,134,253, 30, 65, 16,211, 63, 58,102, 50, 25,115,249,234,235, 92,188,124,149, 32,140, 56, 58, 62,226,222, +173,143,201,139, 4, 21, 72,164, 84,158, 32, 23,184,150,239,139,132, 99, 82,156, 18,164,242,156,182,183,156,195,132,194, 48,228, +204,153, 51, 32, 93,102,118, 20, 70, 76,166, 78,195,161,181, 33,207, 10,138,220,197, 37,159,234, 58,248,183,249, 75,214,212,239, +190,170,117,247,158,114, 28,144, 32, 64, 69, 33,171, 27,231,216,184,120,133,150,207,167,207,243,204, 51, 9, 92, 17, 55, 73, 18, +140, 49,132, 97, 72,220,106, 51, 25, 13, 49,186, 32,138, 34,102,233,140,162,200,156,146,221, 99, 86,173,209,180,219, 29,162,184, + 73,150, 37,110,220, 83,100,104, 93, 48,155, 38,236, 62,184,141,206, 83,140, 46, 16,149,168,213,143, 83,121, 22, 58,246, 69, 39, +176,147,221, 50, 91,141, 84, 92, 1,152,205,102,190,205,111,157,248,207,104,146, 89,198,100,216,231,175,252,224,135,228,218,137, +171,251,189,125, 94,186,248, 10,237,165, 85,127, 50, 86, 92,121,249, 18,175,190,250, 38, 63,127,247, 93, 62,254,248, 67, 54, 55, + 55,217,220,188, 72,158,101,100, 58,229,206,231,159,115,243,147, 79, 56,183,185, 65,179, 17, 87,235,135,213, 5,179,196,141,143, +206,109,158,195, 34,248,232,147, 79,120,186,253,148, 15, 62,252,128,235, 87,174,112,118,227, 12, 65, 20,178,189,179,205,113,175, + 7, 30,200,102,173, 75,129,115,193, 64, 78,103, 86,169,223, 79, 82,223, 78, 83, 33,159,150,170,117, 50,148,227, 52,166,183,169, + 43,151, 79,216,216, 78, 90,227,202,159,209,198, 69,126, 90,107, 73,211,172, 98,188,139,122, 35,241,132,101,163, 10,135,241, 23, +152,170,252,245, 84, 65, 49,174,133, 58,199,202, 86, 51,119,255,143, 82,210,219,210,100,245,166, 41,175,162, 46,231,250,161,148, +172,180,150,248,149, 31,254, 10,153, 54,188,127,243, 83,142,251,125,132,128,222,241, 1, 69, 94,240,228,209, 67,142, 14,119, 25, +141, 71,172, 44,175,208,136, 27,172, 44, 47,145,103, 25, 45,147,240,250, 91,175, 34,130, 6, 79,118, 14,152, 38, 35,166,147, 49, +233, 44, 33, 47, 50,239,207,215, 72, 44,198,251,177, 91,113, 68, 43,114,109, 42,109, 12,218, 58, 21,228, 94,111,200,222,225,132, +163, 32,164, 29, 7,172,180, 2, 66,161,157,239,182,108,193,155, 57,180,199,250,147,176, 49, 6,171, 5, 70, 27,114,109, 22,102, +233,121, 53, 2,149,206,187,249,248,169,111,233,187,199,113,109,103,129,241,239,107,220,142, 41, 52, 24,155, 51,203, 45,131,201, +136,165,168,137,150,205,103,236, 97,167,133, 16,156,180,178, 9,192,150, 44,237, 57,108,127,225,251,165,152, 95, 9,129,148,132, +129,165, 25, 71,156, 91,233,242, 15,255,246,143,184,180,185,206,246,193, 17,253,209,152, 89,154, 49, 76,102,156,221, 94, 99,115, +243, 28,247, 30, 61,230,240,168, 71, 95, 91,190,254, 87,127,196,127,252, 31,253, 3,182,247,255,115, 30, 60,124, 72,160, 4, 89, +230, 68, 40,121,158,147, 23, 5,235,237, 54,227,227, 17,179, 36, 3, 43,253,181, 36,201,243,162, 66,165, 90,107, 17, 65, 64,220, +106, 16, 69, 13,174, 95,187,206,238,238,206,188,253, 94,239,118,213,156, 24,194, 31,164,140, 63, 88, 46,194,105, 78, 42,158,173, +255, 12,190,220, 76,253,121,168,222,133,150,123, 85,185,219, 5,159,250, 51,247,176,209, 28, 30,245,248, 40,189,201,227, 71,143, +200, 50,119,144,113,243,244,220, 91,252, 28, 52,199,136,242,243, 58, 29, 34,228, 34, 92, 45,214,184,168,212,184,213,100,123,123, +139,237,221,167,244,122,251,160, 36, 71,251,251,136,192, 35, 49, 75, 33, 98,158, 51, 25, 77, 16, 72,180,201,145, 6, 31, 98,164, + 9, 26, 49,171, 27, 27,140,198, 3,206,108, 92,224,206,205,247, 40,242,153,247,184,251, 13, 29,200,210,153,211, 12,148,159,193, +151,217,240,140,253,194, 34,189,188, 94,198,227, 9,123,123,123, 20, 69,225, 66,159,148, 34, 80, 33, 89,150, 19,132,202,235, 49, +204, 11, 99,117,255,141, 86,233,117,232,145,176,212,135,177,194, 88,172,116, 85,160, 41, 10,116,150,114,255,230,135,188,243, 75, + 63, 66,133, 33,211,201,180, 98,116, 40, 25, 96,116,129,180, 5,227,193, 49,217, 44, 97,121,227, 28, 27,155, 47,241,244,254, 29, +116,225,238,165, 82, 31,227,198,156, 33,185,206,153, 38, 9,205,102,135, 70,220,114, 34, 86,156, 70,161,217,238,186, 34, 74, 6, +222,181,194,169, 54,206,147,235,136,125, 65, 71,194,214, 55,118, 33,156, 3, 72,136,138, 80,103,172,161, 17,195,114,183,193,116, +102,153,101,154,220,102, 28,236, 29,242,123,255,207,239,112,241,210,203, 92,188,250, 26,199,131, 9,159,125,246, 41,211,201, 49, +198,184, 14, 97, 49,217,227,195, 92,240,116,107,155,171,175,188,202,217,179,231,249,248,147, 15, 81, 82, 48, 28,244,249,230,183, +190,199,225,225, 54,239,127,252, 41,191,246, 43,191,196,119,191,243,109,132,144, 76,167, 51,146, 89,202, 96, 48, 96, 50, 25, 51, +153,101, 28,247, 29, 71, 97,146, 76,248, 23,191,247, 59,204,178,156,254,112, 68,179,211, 69, 5, 14, 96,228,186, 40, 6,227,109, +223,133,245,184,242,205, 90, 74,219, 51,216,205, 23,136,230,190, 72, 76,119,154, 10,243,228,134, 95,206, 37,235,172,226,122,214, +236,226,129, 97,209,162, 81, 85,141,245,231, 41, 29, 56,198,214, 42,186, 18,245, 89,162, 67,133,247, 21,151,155,191,155, 13,205, + 89,194,214,206, 75,161, 50,133, 77,249,252,232,242,160,176,214, 93,225, 59,223,254, 5, 14,142,143,249,244,238,109,198,147, 41, +155,103,207,112,112,120,200,211,173,167,108, 61,121, 76,239,240,144, 52, 77, 89, 95, 63,195,245, 27,175,115,247,243, 79, 72,211, +130, 88,100,180, 27, 49,121, 97, 56,238, 29,177,127,180,195,104,212, 35, 73,166,228,254,132,186,128, 3, 45, 19,214,124,181,103, +188, 85,195, 65, 83,220,194,113, 60, 24, 50,157, 38,140,167, 41,195, 73,130, 12, 98,132,180, 96,168,236,108,182, 12, 2,168, 42, +116,175,246,246, 86,182,121,155, 92,248, 53, 76,114,229,218,107, 28, 15,199, 12,134, 35,180,209, 21,168,199,241,206, 45, 97, 28, +209,136,155, 44, 45,117,217,122,248,192,133, 99,224, 14, 12,177,180,132,113,155, 66,200, 23,139,180, 78,222,148, 11,115,102,159, + 96,102, 44,243, 28, 33, 81, 9, 44,149, 16,132,210, 5,226,116,218, 29,150, 35,197,143,191,255,109,126,240,206,155, 36,179,148, + 78,171,197,203,231,207,114,110, 99,131, 0,144, 42, 96,154,165,180,155, 13,154,173, 54,163,201,144,207,239, 63, 32, 51,146,165, +165,101,118,247,182,171, 4, 59,227,245, 23, 66, 8, 86,215, 54, 48,121,198,112, 48,112,234,217, 60,175, 20,211,229,181, 23,134, + 97,165, 1,208, 70,163,162,136,165,245, 13, 30, 61,248,252, 25,221, 66, 5,211,169,133,152, 87,153,108,162, 70,151, 19,207,223, +180,133, 56,141, 50, 87,155,153,219,211,127,118,161,107, 98, 79, 7,206,156,214,130,151, 66,144,167, 9,111,189,122,189,130,118, +228, 69,225, 83,199,138,202,250,100,177,200, 32, 92, 56,160,137, 90,219,211,251,163, 92, 71, 8,139,176,154,118,103,149,227,163, + 99,134,253, 35,138,162,112,112,142,195, 67,162, 70, 76, 58,157, 44, 28,254,165, 12, 0,235,187, 3, 78, 77, 44,132,164,179,180, +194, 43,175,189,197,222,214, 99,182, 30, 63,228,232,224, 41, 86,216, 74, 68, 25,199, 49,179,100, 70,121,210,168,146, 23,121,126, +245, 61, 23,200,189,112, 32, 93,117, 93,202,123,107, 99, 99,195, 57,118,112,100, 76,165, 2,186,221, 37,164,130,209,120,234, 79, +204,226,223,234,102,254, 44,165,110, 62, 12, 18,204,169,162,248, 74, 29,225,232,114,198, 20,172,174,159,229,204,203,215,153,141, + 71,110,230,174, 13, 65, 24,186, 3, 88, 81,176,191,243,148,233,112,192,108, 60,166,189,180,130, 12, 20,211,209, 96, 62,122, 21, +208,108, 52,171,241,183, 7,108,187,188,118, 32, 10, 93,124,174, 20,130,123, 31,189,235,224, 51, 69,225,216, 1, 53,178,168,100, +222, 5,126, 38, 4,234,180,187,230, 68,242,227,201, 49,115,217, 87,210,133,173,108,170,198, 3,182,180, 54, 12, 7, 67,250, 71, +187, 28,239, 63,161,119,116,128, 65,114,238,226,203, 72, 12,163, 97,159,183,191,249, 67,134,131, 35,116,145,114,229,234,117,210, + 52,227,157,183,223, 97, 52, 28,161, 36, 92,186,116,145, 87,175, 94,230, 43,111,188,206,234,234, 26, 91, 79,183,185,121,243, 22, + 66, 10,214, 55, 54, 8,163,152,127,254,187,191,203,225,193, 1, 23,206, 95,164,217,233,114,235,230, 77,192,242,225, 7,239,209, +110,183,233, 46,173,112,216, 59, 98, 52, 26,251,113,243, 92,179,230,226,124, 11,212,185,203, 87,126,235,100,150,245,139, 54,247, + 47,147,248,115,154,165,237,121, 45,254,211, 22,248,250,215,158,119,112, 88,176,183,213, 91,238,254, 38,171,219,221,170,192, 26, +107,231, 1, 39, 30,172, 17,133, 97, 21,202, 81,109, 42,190,131,163,252, 1,161,244, 34,135, 97, 72, 32, 3,174, 95,125,133,251, +247,239,243,238,123,127,202,176,239, 32,253,219,219, 79, 24, 77,198,116, 58,203, 4,129,196, 74,201, 75,151,175, 32,195,144,219, + 55, 63,101,109,101,153,241,104, 64,104, 13,185, 46, 72,146, 33, 69, 54, 69, 8,187, 32,252, 16,181,148,177, 82,183, 54,183,152, +153, 10, 17,168,141,118,137,105, 62,101,108, 60, 26,251,128,154,148,209,104,138,177,130, 48,168, 65,113, 16, 11, 34,146,146, 1, + 95, 89,154,132,240,126, 92, 0,197,185,243,151, 41, 68,200,238,254,126, 21,122, 99, 42, 23,129,115, 57, 52,154, 13,148, 10,105, +182, 90,140, 6,125,146,241,200, 29, 54, 60,109,110,185,213,192, 40,135,237, 60, 89, 69,138,231,164,185,149,223, 37, 77,125, 49, +181,243,245, 83, 8, 31,130,224, 8,123, 97,160,104, 68, 1,157, 64,241, 11,111,191,202, 87, 94,189,198,230,153, 85, 90,171, 75, +172,111,172, 17, 71, 10, 17, 72, 86, 58, 45, 86,218, 45, 86, 87,215, 88, 63,123,150,118, 44,233,180,155, 20, 58,227,222,227,167, +188,253,246, 55,216,219,219, 5, 41, 25, 79, 38,213,232, 69, 72,197,210,202, 42,141, 40,228,248,248, 8, 37, 37,105, 58, 35, 12, +162, 42, 24, 72, 41, 69,179,209,112,108, 5,225,128, 40,227,225,144, 11, 23, 47,243,248,193,131, 42, 5,239,153,234,185,154, 55, + 11, 44,167, 88,149,158,129,135,216, 19, 48,154,185, 13,233,244,141,191,254,152,115,145, 42, 39, 42,245, 5,162,220, 9,193,156, +165, 30, 1,235,254,219,235,245, 72,211, 20,176, 44, 45, 59, 49, 83,158, 21, 20,133,198,250, 64, 15, 91, 7,165, 84,247,184,169, +193,155,124,123,223, 90,167,112,215, 5,201,212,193, 88,154, 77, 71,110,203,138,204,177,191,203,112, 18, 41,200,243,220,117,209, +138,162, 58,244,170, 48, 64,133, 33, 87, 95,185,206, 71, 31,188,199,100,208,195, 26,237,147, 10,149,211, 58, 20,121,205,190, 39, +230,220,138, 83, 5, 4, 39, 98,127,191,176,170, 22, 21, 82, 64, 10,193,225,225,225,194,103, 93, 20,133,195,197, 22,206,154, 84, + 22, 23,127, 9, 20,114,167,158, 45, 74, 43,163,168,101,125,151, 25, 26, 72,197,225,238, 14, 87, 94,251, 42,113,171, 77,103,105, + 25, 21,184, 86, 59, 86, 48, 56, 62, 36, 77,167, 36,211, 41,131,253, 93,118,158,220,103,117,101,205, 81,213,138,220, 31,206,172, +203, 25,143,194,202, 77, 20,133, 13,167,115,209, 26, 21,132,228,121, 70,168, 36,247, 62,121, 31,157, 38,216, 34,199, 58,160, 70, + 13, 23,110, 23,227,105,159,211,122,175,131,158, 78, 82, 41, 79, 37, 70, 8, 65,110, 56, 17,212,228, 58,106, 73,150, 49,153, 78, + 88, 93, 95, 35, 77, 83,146,233,136,183,223,249, 54,218, 8,210, 44, 65,133, 77,186,203,235,188,253,230,155,116, 90, 13,118,119, +158,240,253,239,253,128,115,103, 55,120,245,218, 53,214, 86, 87,249,249,251,239,147,102, 57,179, 44,103, 58, 77, 88, 89, 89,161, +187,180,204, 31,252,209,159,240,254, 7,239,242,225,135,239,241,240,241, 67,250,199, 61, 46,156,191,128, 12, 35, 38,195, 35, 62, +254,224,231,220,186,245, 41, 43, 43,107, 12,250,131, 10,249, 93,198,117,151,218, 52,117,254,242,149,223,250,162,197,246,100,123, +163,190,136,168, 19,182,182, 23,142,109, 78,120,203, 79,109,166,188, 32,189,171,252,217, 42, 10,211,183,195,235, 49,116, 85,242, +152,153,143, 12, 74, 77,128,171, 50,131, 42,115,219, 90,119,113, 9, 31, 80, 47, 69, 25, 92, 79,133,141, 85,129, 66, 23,218,219, +222, 96,125,121,149, 91,183,110,113,176,191,235, 4, 34,105,202,116, 60,162,223,235,177,179,179, 69, 32, 4,179, 52, 33,203, 82, +110,223,252,132,131,221, 29,214, 86, 87,216,221,221,198,230, 9,182, 72,193,228, 4, 10,103,169,168,205,252,235,171,176,193,133, +166,184,136, 80,215,114, 47,140,169, 2, 72,140, 54, 20,214, 85,223,161,114, 42,232,254, 96,128, 65,161,145,204,102, 51,146, 68, +211,108,132, 94, 8, 55,167,165,201, 10,191,234, 17,134,149, 87, 29,180,133, 75,151,175,211,234,174,240,240,241, 99, 15,244,176, + 21, 57,175,172, 42,131,192, 1, 68,162, 48, 34,110,196, 40,165,216,223,221,118, 54, 11, 99,200, 11,141,213, 57,171, 75, 43,228, + 34,152,223,124,167, 28,236, 22, 70, 50,101, 23,103,225,154,180, 11, 85,186, 16,130, 64,224, 50,232, 3, 73, 67, 41, 46,174,117, +248,107,255,206,119,248,230,215,222,160,125,126,131, 40, 8,152,141,198, 28,245, 18,246, 6, 25,147,104,133, 75,111,127,151, 65, + 6,191,243,251,127, 64, 94, 88, 86,219, 14, 37, 26, 7,130, 78,103,133, 34,207, 24,140, 6,180,151, 86,153, 38, 99, 84,168, 8, +131,152, 78,167, 77,163,209, 96,255,112,191,122, 94,101, 16, 71,133, 42, 46, 95,139, 82,172,158, 57, 79, 24,197,100, 69,193,240, +232,208, 45, 66,101,170, 91,229, 36, 17,149,223, 30, 33, 74, 13,220,137,131,140,173,137,150,236, 51, 19, 65,107, 79, 42,221, 23, + 15, 64,139, 14,129, 90,204,234,105, 51,116,158,173,210,235,194,185,178,168, 91,234, 52,177,214, 56, 59,101, 86, 48, 25, 79, 24, +141,198, 20,133,187, 22,101, 24, 59,145,223, 9,111,186,123,246, 37, 55,221,255,189,166,234, 93, 99, 74,177,148,209,140, 6,125, +167,242, 53,154, 34,203, 42,135,130, 3,208, 20,149,229, 8,225,162, 94, 95,121,237,171, 88,109,216,217,218, 98,220, 59,174,198, +107,101,151,206,120, 84,233,188, 52,156, 99,161,191,208,202, 6, 95,216, 42,175,116, 16,194, 85,116,141, 70, 68,158,231,149,205, + 72, 41, 69, 24,134,168, 80,186, 52, 54,243,151,109,150,126,250, 94, 95, 6,241,216,178, 83, 41, 5,168, 0, 35, 4,217,100,192, +149, 55,191,142,182,150, 70,171, 73,158,205, 72,166, 19, 30,126,250, 33,143,239,124,194,163, 91,239,179,255,228, 30, 71, 59,143, +248,236,163,159,147, 77, 18, 26,237, 54,205, 86,199, 5,156, 52,154,213, 24,196,226, 14,234,148, 7,183, 44,117, 98, 98, 11,219, +247,110,187,142,128,246,201,152,245,185, 58,115,232,212,169,115,244, 23,180,226, 79,110,248,212,164,130,194, 7,198,240,204,189, + 88,194,186, 12,185,118, 12,145,209,160, 79, 50, 29,112,233,229, 87,120,124,255, 54,201,184,199,213, 43, 55, 88, 95, 93, 97, 56, +153,240,116,123,143,173,167, 79,104,117, 58, 60,218,218,226, 95,253,191,191,207,247,190,255,139,140, 38, 9, 63,253,147, 63,230, +218,181, 27,116,218, 29,254,248, 79,126,198, 44,203,184,127,255, 30,253,126,143,241,104,196,222,254, 30, 59,123,123, 20, 69, 78, +119,245, 12, 97, 24, 97,117,206,116, 60,165,187,178,194, 44,157,121,189,215,220, 62, 94,104,189, 40,148, 59, 89, 9,127, 81, 60, +102, 61, 37,237,207,166,180, 60,165,146,126,142, 85,110, 81,228,230, 19,200,164,172, 50,215,171,214,156,247, 13,151,226,183,147, +145,176,213, 44,189,198, 73, 47, 59, 20,101,212,166,245,232, 87,170,220,228, 57,103, 94,107, 77, 35,138, 25,141, 70, 28, 31, 31, + 50,155, 76, 40,178,140, 44,155, 49, 29, 15,153,140,135,100,179, 49,219, 91, 91,236, 60,121,204,222,238, 83,218,173, 38, 32,217, +223,217, 66,217, 28, 97, 82, 2, 9,205, 70, 72, 35,114, 92,248, 32, 80, 21,178,214,122, 91,135, 99,145,107,167, 10, 46,177,173, + 53, 54,187,241, 80, 73,237, 55,119,237, 83,163, 66,165, 24, 13, 7, 24,227, 66, 25,146, 52,101,154,104,150,150,151, 61,246,114, + 81, 42, 82, 42,172, 93,234,154, 64,169,136,107,215,223, 98, 48,157,113,255,209, 99, 63, 55,229, 25,228,164, 82, 1, 81, 24, 33, +131,128, 56,114, 33, 51, 27,155,231,120,240,249, 93,231,153,247,129, 57,198, 26,150,226, 16, 19,183,171,247, 92, 85, 89,247,242, +116,251,100, 73, 28, 60, 49, 75, 46, 63,127, 87,161, 67, 20, 72,130, 64,208,140, 66,154, 88,126,252,139,127,133,239,126,227, 43, +116,215, 87,208,227,140,131,189, 99, 38,193, 10,103, 95,251, 26,189,113,202,149,215,223,100,255,201, 19,254,203,255,234,191, 96, +247,224,128,131,225,148,165, 86,147,229, 88,209, 27,141,185,121,231, 22, 55,111,125, 66,175,223, 39,110,180,185,246,202, 13, 70, +227, 17, 97, 20, 99,173, 97,117,117,141, 65,175,135,209, 26, 41, 36,201, 44,241,221,157,146, 19, 31, 80,174, 48, 97,220,228,234, +107,111,208, 90, 89,229,224,233, 67,239,175, 86,149,133,115,145,140,103,107, 43, 75,141,103, 47, 78,162, 98, 79,130,103,120, 38, +165,109, 49,176,165, 86,144,215, 20,194,166,182,137, 47,108,228,246,217,110,126,221, 59, 15,130, 56,148, 92,191,122,153,131,131, + 67, 95,173,103,126,182,103,171,128,154, 32,138,171,231, 43,235,110, 57,107,231, 7, 75,251, 44,201,238,100, 39, 35,207, 50,226, + 48,244,145,203, 98,193, 85, 83,142,218,164,116,108,242,175,127,235,123,236,238, 60,225, 96,119, 27,107,114,162,184,137, 21, 2, +165, 4,201,100,186,176, 22,156, 86,152,124,225, 38,247,101,151,183, 90, 11,222, 37,108,197, 11,196,194,102,179,129, 16,138, 44, +205,249,203,160,146,123, 94,180,111,133, 26,198,175,209, 98, 94,116,136, 50,158, 85, 41, 54, 47, 95,227,218,235,175, 98,173,160, +191,243,148,159,254,243,223,230,222,205,119, 25,236,109,147, 39,206,151,111, 10, 75,220,110, 49, 58,218,229,222,237,143, 56,222, +219,166, 25,199,116, 86,215,157,130, 94,107,239, 12,104,250, 10,126, 30,133,108,172,229,240,233, 3,198,199,135, 14,224,164,181, +227,241, 87,227, 85, 83,241,130, 78,253, 40, 42, 32,205, 23,136, 18,159, 17,203,215,161, 79, 39,238, 13,127,253,229, 69, 70,154, +184,196,198,116,146,128,180,116,219, 75,252,135,127,231,239, 49, 26,244,249,131, 63,252, 3,162,214, 10,159,221,254,148,123,247, +238,112,231,179, 59, 60,124,120,159,163,253,125, 62,189,117,203, 69,182, 78,167, 92,124,233, 34, 79,183, 30, 35,140,102,125,125, +157,237,167, 79,217,222,217,102,154, 36,164,126,141, 41, 71, 93, 71,199,199,104, 4, 23, 94, 82, 40,254,104, 0, 0, 32, 0, 73, + 68, 65, 84,190,198,242,202, 42,163,193,176,178, 39,215,117,110,193,105,202,245, 47,106,123,215,253,230,245, 7,123,209,172,253, +212, 22,189,251,225,133,141,254,121, 30,248,114,174, 94,125,152, 60,203, 14, 87,118,222,126,209, 39, 68,124,178, 22,147,169,132, +154,115,114,149, 66,227, 90,166,185, 79,192, 17,190,101, 86,206,230, 93,212,169,164,119,120, 72, 0,196, 74, 81, 68, 17, 82, 74, +178, 60, 37, 47, 28,128,163,200,139, 74, 73,185,182,113,142,184,217,225,248,112, 23, 37, 11,172, 41, 8,162,152,184,225, 82,219, +194, 56, 64, 40,111,241, 51,186,186,168,140,117,173,235, 10, 38, 32,106,157,115,227, 96,162,214,211,241,140,177,149,114, 29,143, + 86, 92, 95, 89, 98,239,240,136, 76, 54, 8,195,136, 84,231,220,125,240,148,213,110,155,245,149, 14, 74, 26, 74, 82, 22, 82, 32, +140, 59, 36,157, 59,123,142,245, 51, 23,248,224,227, 79,153, 38, 9, 89,238,160, 44, 37, 59,191, 12, 76,113,138,115, 89,161,121, +181,113, 56,219, 32,140,121,249,218, 13,238,221,249,148,194,104, 50, 45, 8,178,130,201,160, 79,107,101, 19, 67,136, 8,148, 79, +138,115,136,204,211,198, 51,101, 37,185,216, 29,147,115,244,171,128, 64, 42,162,192, 17,253,154, 13,197, 87, 94,190,200, 47,124, +235,171,180, 86, 87,248,240,206, 99, 76,176,194,165,215,191,198,217,149,101,178,241, 4,140,230,247,255,175,127,202,214,206, 14, +199,253, 62,147,233,140,220, 88,118,219, 13,206, 47, 55,153, 76, 19,102,179, 41,173,102,196, 81,111,200,222,214, 35,242, 60,227, +210,203,175,112, 60, 56, 66, 23, 57, 22, 65,220,108,147,231, 41,179,116,230, 19,253,236,130,227,194, 10,129,241, 21, 69, 50,157, +176,220,234,160,132, 66,163,171, 76,129,242,117,154,146, 85,239, 71, 33,178,222,169,240, 89,230, 86,212, 5,166,210,139,190, 78, +155, 22, 10,255,181,231, 35, 97,171,251,246, 52, 95,186,125,142, 3,174,238,128,241,125,232,187,159,223, 99, 48, 28,158,162,178, +183, 32, 2, 16,174,163, 37,237, 92,204, 90,253,189,162,238, 45,125,254,129,191,178,189, 77,167, 94,129, 45,159, 73, 48, 11,226, + 22,235,103,206,208, 59, 56,224,248, 96,151,227, 67,103, 93,147, 40,194, 70,196,236,184, 71,102,245, 51, 27,250,139,214, 39, 43, + 79,175,222,159,215, 89,124, 94,209, 18, 69, 77,178, 44,101, 50,153,186, 66, 36, 16, 4,161, 34, 73,166,232,194,117,158, 76,185, +254,153,127,131,155,187,239, 66, 84,118,200, 23,188,134,250,215,165,209,110,205,209, 26,147,103,216, 34,103,101,237, 44, 31,252, +209,191,228,171,223,254, 58,163,163, 67,126,247,127,249, 31, 72,167, 99,208, 6,157,165,108, 92,184,196,108, 58,101, 54, 30, 96, +173,166, 40, 82,116,158,113,144,205, 24,245,118,185,184,253,148,183,191,255, 75,180,151,150, 40,242,156, 32, 20,200, 48, 38,203, +166, 30,185, 43, 48, 66,208,238,174, 34,124,212,181, 68, 82, 72,129, 53, 94,243,100, 23,181, 32, 11,117,117,221,234, 38, 74,203, +174,124, 86,203, 32,244,179,135,216,242,243,174,246, 32, 9,218,206,117, 6,229,101,108, 64,203,156, 52,203,216,121,186,205, 27, + 63,184, 66, 40, 4,201,108, 70,220,108,115,239,243,219, 60,121,120,215,125,159, 17, 52, 26, 13,194, 48, 64,197, 9,183,111,223, +226,171,111,190,141, 80, 33,253,193,152,111,191,243, 38, 15, 31,109,177,183,191,141,213, 5,157,165, 37,146,169, 75,132, 28, 14, +135, 28,247,142, 49,186,160,217,104,178,127,112,200,153,205,179, 72,225, 58,137,105,158,122, 88,154, 43,178,213,185, 90,251,189, +190,145,158, 12, 96, 57,109,179,127,145,128,238,139,102,244, 39, 79,230,245,138,252,180,249,125,249, 51, 74,169,170, 74, 87, 62, + 83, 86, 8,215, 14,166,166,110,180, 53, 46,252, 73,191,125,201,254,149, 82, 86,254,116,170,106,138,202,130, 36,107,127,111,145, +229,100,201,148,225,192,225, 29,103,179, 25,133,206, 25, 13, 7,164,201,148, 44, 77, 49, 30, 62, 18, 55, 26,116,151, 87, 24,142, +122,228,227, 1, 81, 96,105,182, 98,218,237, 38,173, 86,131, 70, 35, 34,244, 23,106, 57,223,118, 1, 42, 46, 20,160,208,154,188, +208,243, 4,181,194, 7,172,120, 82,158,241, 54,140,178,245,107,106,191, 47, 79,217,179,241,136, 66,187, 20,171, 60, 75, 25, 14, +199,244, 7, 67,162,184, 65,220,104,184, 16, 27, 25,114,233,242, 43,108,158,127,153,227,254,136, 59,159,223,115, 68,174, 60,119, + 86, 66,127, 16,170,136,109,202,139,104,164,123,159,130,200, 37, 46, 41,233, 56, 4,175,222,184,193,231,119,239, 82,232, 12,140, + 69, 97, 9, 67,197,153,213, 13, 18, 84, 21, 27, 88,222, 44,245,141,238,153, 77,228,196,255, 43, 41, 9,165, 34, 14, 20,177,143, +171,109, 55, 99, 46,158, 59,203, 95,255,193,183, 33,106,114,107,171,207,107,239,124,143, 43, 55,110, 16, 91, 67,150, 76, 73,250, +125, 6,253, 62,159,222,185,195,253,199,143,120,186,179,203, 44,207, 92,187, 88, 8, 58,141,144,179,171,107,156, 59,179, 10, 64, +146,205,232,247,122,244,143, 15, 40,140,224,236, 75, 23, 25, 28, 29, 34,149,100,150, 76,152, 12, 71, 68,141, 38, 77,159,133, 29, +248,107,208, 88, 75, 20,199, 8, 36,175,191,249, 53, 70,147, 17,105, 50,165,119,176, 83,125, 62,101, 71,169, 90, 44, 79,128,126, + 78, 31,239, 74,230,244,208, 50, 60, 68,158,242,157,230,196,194,204,233, 11,221,243, 82,217, 56,197,157, 82,102,161,251, 3,213, +203,151, 47,178,177,182,198,246,246,182, 23,170,233, 10,185,236,216,247, 13,172,159,153,150, 48,160, 58, 20,164,154,167,155,211, + 53, 52,229, 47,135, 95, 86,172,172,157,101, 50,117,194,178, 58,142, 87, 40,197,217, 51,231, 57,119,241, 26, 71,251,187, 4, 97, + 64,239,232, 16, 99, 11, 26,205, 54, 2, 65, 54,155,157,114, 8,122,113,149,126, 90,229, 42,106, 34,184, 47,155,126,231, 58,127, +165,109,207, 29,198,243, 92,163, 2, 73,224,105,123,149, 2,191,178, 97,253, 69,151,225, 44, 48,211,235,243,243, 47,122, 25,149, +174,199,206,237, 98,214, 3, 83, 92,114, 91,196,160,127,204,184,119,192,224,176,199,209,238, 46, 79,239,124, 72,150,140, 73, 6, + 61,148, 10, 80, 82, 50, 27, 14,152,141, 71,238,179, 47, 52, 66, 41,116,145, 17, 73,129,102,134,176,154, 31,253,242, 15,248,214, +235, 47,241, 87,191,118,133,141,151, 54,216, 29, 36,232, 92, 87, 89, 11,227,225, 17, 7, 79, 31,162,243, 12,171,139,106,174,238, +174, 49,243,101, 32, 2, 78,213, 47,234,180, 70,106,110, 46,243,140,189, 29, 43,189, 45,160,228, 97,204, 61,242,162,246,205, 37, +170, 60, 12, 67,154, 81,204,155,111,220,224,151,127,229,199,252,244,103,239,114,251,230, 71,140, 70, 99,102,105, 78, 86, 20,100, +233,148,241,104,136, 54,150,225,104, 76, 20,134, 28,247,246,201,138,156,191,249,227, 95, 69, 32,249, 23,191,247,123,108, 61,126, + 64,103,121,133,206,242, 10, 71, 7,187,140, 6, 3, 63,230,115,119,228,120, 52,100, 54, 25, 51, 26, 14,152, 12,157,107,170, 28, + 77, 86,123,225,201,217,230, 2, 60,166,182, 41,214, 41,112,167,193, 98,158,231, 57,175,195, 99,234, 32,148,147,143, 83,127,252, +178, 98, 95,240,158,151, 27,108, 41, 6, 80,202,243,110,165,159, 7,107, 95, 73, 74, 31, 7, 57, 63,105,137, 90, 34, 91,185,192, + 42, 64,103,217, 92,100, 87, 34,246,188, 71,189,172, 50,148,116,214, 55,171, 53,147, 34, 35,203, 51,164,214,180,154,109,166,211, +137,131, 75,100,153, 15,160,113, 33, 19, 75,107, 27,236,236,110, 65,150,208,105, 70, 52, 26, 49,173,166,139,239,140,163,144, 80, + 41,119,113,121,161,131, 46, 61,229,218, 86,243,243,234,207, 42,188,230,226,216,212,225,113, 75, 90,215,124, 42,164,148,162,221, +140, 41,150,187, 28, 31,245, 25,229, 25,113, 28,131,177, 68,141, 46,171, 27,231, 89, 95, 93, 37,140, 66, 86, 87, 54,216,218,221, +229,233,231, 15, 25, 77,198, 20,121,129, 54,144,231, 69, 69,207, 19,114, 46, 76, 3,220, 97, 64, 73, 10,107,209, 89,142,140, 37, + 89, 54, 67,155,156, 65, 43,230,235,223,252, 22,239,255,233, 79, 72, 77,226,188,158,133,161,107,115,142,180,168, 94, 75, 61, 38, +176,126,125, 85,201,107,118,174, 76, 45,149,238,129, 82, 68,161,162, 17, 40,226, 56,162,221,136,121,233,236, 58,239,188,253, 85, +150,175,188,201,149,235,175,242,118,171, 73, 58,153, 48,218,219, 35, 29,143,153,206,102,140, 39, 99, 90,237, 22,211, 52,229,201, +214,150, 99,151,251,252,234,217, 44,193,218,101,148, 18, 52, 26, 45,174, 95,186,128, 21,154,100, 58,227,248,120,192,147,123,183, +152,142, 71,156, 57,191, 73,255,232,136,194, 67,137,242, 34, 39,153,102, 14,103, 41, 5,173, 78,135,162,208,196, 81,139,140,132, +187,119,111,113,253,141, 55,200,211,188,186,158,203, 3,104, 9, 98,114,112, 27, 65,133, 29,247,139,134,180,174, 74, 55, 88,167, +190, 47, 57, 90,246,217, 10,125,190,158,213,105,113,146, 18, 28,242,140,219,224, 36, 68,170,138,202,173, 5,218,152,103, 43, 90, + 33, 29, 90,245,194,217, 51,188,255,254,187, 30, 89,108,177, 86, 84, 60, 4,169, 2, 80, 17, 66,248, 52, 54, 81,111, 91, 46,160, +216,170, 77,126, 81,121, 44,124, 64,145,179,146,158,191,240, 50, 81,179,201,112, 48,196,154,172, 18,136, 34, 29, 98,121,121,125, +131,139,151, 47,241,217,167,239,177,189,245,168, 10,203,137, 27, 33,195, 94,223, 45,254,226,249,235,209,139,218,176, 11,239,180, +177,207,232, 15,190,208, 1, 87, 86, 77,213,154,227,172,178, 69,102, 16,161, 97, 99,125,149,163,163, 30, 89, 94,212, 47,246,191, + 96, 16,205,179,226,203, 47, 62, 5,188,224,141,160,204, 50, 87,188,242,214, 59,236, 60,121,128, 18,130,219,239,253, 41, 75,203, + 43, 24, 96,188,191,141,148, 17,121,146,112, 52, 26,209, 93, 93,198,160, 73, 39,125, 26,237, 46,224, 10,153,184,187, 68,220,234, +242,215,254,214,223,226,157,175, 92,162,227, 15,241,231,150, 2, 94,125,231, 77,222,251,253,159, 85,159, 85,171,179, 76, 32, 21, + 90, 74,180,244, 65, 84,254,208, 97,132, 66,218,130, 42, 80,161,126, 80,172,237,210, 14,125, 91, 99,231,215, 70, 81,162, 10,114, + 61, 37,177,208, 8,103,119, 43,243, 0,172,168,220, 81,165,191,189, 44,174,180,213,124,235,155,223,225,131, 15,222, 35, 77,167, +136, 32,102,117,237, 12,253,209, 49, 82,226,214, 86, 93,208, 63, 62,114, 78,155,167,143, 89,234, 46,241,173,111,126, 23, 33, 36, +255,244,119,126,151, 59,119,111,179,118,225, 10, 26,193,238,211,251,132, 97,140,144, 9,198, 20, 8,161,136, 26, 13,242, 44, 39, +157,142, 73,147,137, 11, 38,211,208, 63, 12, 64, 8,154,237, 14, 43,235,235,174,253,126,154,111,252,180, 22,251,105,222,242,250, + 97,224,121, 45,244,106,211,246, 27,232, 98,240,138, 88, 0,191,212,127, 54,244,193, 42,117, 95,161, 82,202,167,223, 24,239,177, +244, 9,109, 69,238,210,211,188,144,161,158, 27, 44,132,163, 4,151,139, 75,224,177,158, 82,202, 10,177, 90, 38,173,149,207,173, +140,182,179,198, 98,180, 83, 57,106,147, 17, 70,146,233,196,197,246,101, 89, 78, 50,153,204,231,102, 86,115,230,236, 69,122,189, + 30, 38,157,210,142, 3,218,173, 6,157, 86,147,118,179, 69, 51,106, 16, 6,174, 61,105,152, 87,219,198,227, 24,203,133,220,248, +204,242, 50, 46,181,162,125,213,211,154, 12,212,211, 29,220,215, 60,124, 32, 12,104, 54, 27,180, 59, 77,250,131, 4, 35, 53, 43, + 43,171,172,159, 61,203,214,206, 46, 59,123,123,238,189,149,161, 19,219,105,235,177,180,206,142, 37,213,156, 65, 80,126, 6, 66, +200,138,187,141,239,226,228, 89,234, 14,181,214, 96, 80, 60,121,242,152,111,125,227,155, 36,163, 1, 55, 63,254, 16, 81,228,232, +194,192,108,134,106, 52,252, 77, 49, 87,241,159,122, 16, 52,245, 81,204,252, 0, 23,133, 1,237, 56,164,211,108,208,104, 70,220, +184,118,157,255,224, 55,254, 46,151, 95,185, 65, 16,134, 88, 93, 48, 58, 56,100,251,193, 67,246, 14, 14, 56, 26,244, 25,140, 70, +196, 81, 72,183,213,164,208,154,227, 94,143, 52,115, 86, 40,165, 20, 45, 37,232, 54, 27,132, 74, 48, 26, 13,209, 86,112,118,117, +157,241, 75, 41,147,241,132,100,150,113,180,243,136,201,100,200,245, 27,175, 18, 6, 1,178,217, 97, 52,157,160, 84, 64,220,108, + 83,228, 5,171,235, 27,156,221,220, 68, 69, 13, 30, 63,184, 71,123,121, 5,169, 2, 84, 96, 8,194,152, 60, 75,221,231, 82,131, + 26,149,135,150, 64, 82,113, 4, 28, 1,195,111,123,165,218,184, 18,131,178,160,196, 61, 41,136, 91,172,206, 69,109,147,175, 87, +202, 44,204,211,235,215, 85,245, 57, 44,228,148,204,103,251, 75,221, 54,227,241, 8,107,153,107, 61,204, 60, 83, 62,110, 52,202, +243,196, 60,141,238,196, 33,226,228,115, 95,180, 50,218, 42, 38, 51, 12, 3,250,253, 17, 29,107,208, 58,247,137,104,165, 88, 83, + 34, 85,196,234,218, 58,247,238,222,117,190,115,147, 57, 30,124,163,235, 58,102,214,248,212,177,103,153, 8,207,221,212, 95, 80, +189,139, 47,240,254,191, 72, 59, 84,142,174, 28,122,212,133, 11,245,122, 61,154,205, 6, 81,100,153, 78,167,167,118,105,254,117, + 54,248, 10,253, 45,190, 64,173,111,249, 51,141, 76,193, 18,183,219,228, 72, 90,221, 46,201, 36, 97,185, 27,114,180,245,152,113, +239,136,168,209, 65, 97,153, 26,195,234,114,151, 65,239, 8,210,148, 34, 84, 36, 66, 18, 11,137,140, 20,249, 44,161, 17, 53, 88, + 90, 90,117,215,147,128, 22,208, 16,208,141, 36,155,151, 95,230,209,237,155,168, 32,164,189,180,142, 12, 34, 80, 33, 66,166,126, +189,151,104,225,102,201,218,147,230, 92,209,225, 14,174,202,199,237,212,139,181,197, 52, 70, 49,119,158, 8, 89, 19,160,136,197, +251,169,132,103,149,254,125, 33,177,214, 9,233, 22, 2,116,140, 91, 67, 63,255,252, 54,191,240,131, 95, 35,255,201, 79,153, 77, + 71,180,150,150,209,153, 33,153, 76, 40,138, 12, 99, 13, 89,154, 49, 30, 73,226,134,195,186, 54,162,128,255,249,127,255, 39,124, +252,209,251, 12,199, 19, 90, 75, 41,247, 63,187, 73,174, 11, 54,207,157,103, 58, 29,187, 22,252,160,135, 57,202, 80, 81, 3, 71, +112,201, 73,103, 57, 97,224, 58, 63,233, 44, 37,153,140, 29,179,129, 5, 65,193, 98,139,170,180,122,213, 23,225,211, 84,241,230, + 4, 49,238,180,139,164,126,120, 56,201,135, 63,217, 46,175, 82,175,106,208,155,210, 51,108,125,251, 86,212, 84,167,174, 29, 44, + 61, 71, 94, 84, 20, 57,234,173,118,127,161,203,154,232,174,200,139,202,166,229, 90, 76, 94, 61,232, 55, 45, 99, 32, 20,150,209, +200, 35, 82, 85, 76,160, 66,116, 94, 48,153,140,231, 64, 22,161,176,182, 96,237,236,121,134,227, 9,249,184, 71, 43, 14,232,180, + 27,116,151, 90,116,218, 45, 26, 81,132,146,110, 67,215, 94, 40,100,124, 53, 99, 44, 11,144, 24,131,157,167,166,249, 25,251,156, +225, 94,183,188,137,234,212, 90, 23,148, 41, 41,137,163,128, 86,171,201,100, 50, 67, 8,184,241,234, 13,158,238,236,186, 78, 64, +158,147,102, 57, 66,230, 85,107, 13,124,123,205, 31, 36, 2,143,232,173,130,112,164,187, 30,202,228, 38, 55, 2,208,164,201, 12, +209,116,239,155,176,150, 79,111,125,198, 43, 55, 94,229,179,219,183,208, 69,134,176,150, 73,145, 17,212,114,238, 23,170,243,250, +181,178, 80,189,205, 95, 75, 32, 37,113, 24,178,220,105,243,131, 31,252,128, 95,252,225, 15,121,235,171, 95,157,115,251,141, 38, + 79,166,124,126,231, 51, 30, 61,125,236,103,228, 9, 81, 20, 35,165,228,225,147,199,252,236,221,159,145,164, 41,218, 64,161, 11, +154,161,224,237,107,151, 89, 95,110, 19,133,138,115,103, 86,233, 13,198,140,166, 51, 46,158, 59, 75,175, 63, 96,107,107,143,172, +200,153, 14,123, 60,125,112,159, 55,191,246, 13,194, 64,177, 90, 44,211,233,174,178,180,186, 74,191,215,167,187,180,204,113,255, +152,157,251,119,137,163,152,241,120,200,215,190,253, 93,110,127,250, 33, 97,160, 16, 68, 11,225, 58,229, 53,222,108,196,228,121, +177, 48, 94,210, 20, 8, 31,136,227,224, 72, 94, 88,230,201,134, 86,204,163,103,173,173, 11,228, 56, 69, 41, 95, 27, 59, 85,213, +250,233,115,200, 5, 21,119,237,108, 80,210, 19, 55,214,215,216,218,217,229,168,215, 39,215, 5,218, 3,115,176, 22, 25,134, 8, + 21,250,124,250,249,140,189,238, 15,182,166,102,103,171,157, 28, 68, 13,213, 38,144,172,173,173,113,220, 59,102,253, 76,215, 57, + 82,128,220,183, 98,165,183,203, 93,184,240, 18,239,253,233, 79,208, 89,234,184, 14,194, 32,131,128, 70,171,197,209,193,129,123, +159, 78,137,168,123,225,134,126, 90,149, 94,155, 61,215, 99,115, 79,163, 97, 62,239,151, 91, 67,139,234, 13,157, 78, 19,148,114, +238, 20, 71, 28, 59,203,238,238, 14,105,154,249,238,199,226,251,242, 23,141,145,173,242, 29,172, 56, 33,196,164,218,216,202,131, + 92,125,125,113,158,246,128,214,198,121,242, 36, 97,243,202,171,140,134,199,204, 70, 19,250,219,143,144, 50, 68,197, 29,102,147, + 9,177,144, 28,238,238,208, 89, 90, 34, 53,160, 34, 73,220,108,146,102, 41, 65,208,172,116, 65, 15,118, 70,228, 97,131,175,191, +178,202, 76, 73, 44,150,245,182, 98,105,125,133,229,141, 77,250, 7, 59, 52,219,173, 74, 29, 95, 18, 66, 33, 64, 6,238,192, 91, + 81, 30,124,226, 34,126,253, 42,199,170,198, 66, 16,133,224,225, 99, 74,205,117, 61,162,114,249,186,112,167,146,223, 81,138, 29, +189, 14,207,223, 47,126,195, 23,118,174,121,241,213,190,214, 46,108,203,138, 6,255,245,127,247,223,112,255,193, 99,166,211, 25, +236,239, 34,149,192,234,204,195,119, 28,160, 41,205, 82,194, 80,210,104, 54, 64,103, 28,247, 15, 28,160,104, 54,227, 96,111,135, + 52, 77, 64, 88,182,182,158,160, 4,204,146, 49,214, 26,150, 86,214,220,129, 58, 79,145, 50, 68, 11, 91, 65,160,220, 37, 44, 73, + 38, 67,212, 75, 87,174,253, 86,189, 69, 88,254,190,172,184,235,201,107,167,169, 84, 95,228, 57,126,230,235, 44,182,153,234,233, +105,207,125,252, 19, 21,124, 61, 74, 20,223,150, 53,117, 17, 82,101,113, 91,100,202, 83, 59,185,153, 90, 53, 95,190,214,234,123, +237,220,190, 21, 74,133,180,218,181, 79,140, 37,203, 83,146,233,132, 65,191, 79,154, 58,239,171,227, 22, 27,214,207,108, 18, 68, + 49,147,254, 33,145,130,165,149, 46, 43, 43,203,180, 59, 77, 26, 97, 84, 29, 20,108,237,162, 43,202, 12,115,227,158,207, 66, 66, +154,135,197, 24,175,126,119,141, 0,255,189,214, 83,225,202, 83,226, 41,177,139,162, 84,183, 99,152, 76, 19,182,119,118, 29, 42, +179,166,145, 42,103,218,162,220,208,107, 93,147, 32, 8, 80,202, 93, 19,229,115, 47,223, 39, 91, 94, 15,218,248,150,253, 60, 56, + 39,155, 37,244,122, 7, 0, 76,135, 3,226, 64,210, 93, 90, 99, 22,183,170, 48, 2,251,140,255,154, 10, 77, 41, 43,223,245, 60, + 85, 47, 12, 20,237,102,131,127,255,223,251,117,126,243, 31,252,125,206,158, 61,131, 64,187,220,227, 60,101,116,120,200,222,163, + 39, 76, 39, 99, 86, 87, 87, 24,244,135, 12, 6,125,126,254,238,187,252,225, 79,254,136, 79,111,223,162,223,239, 51,203,115, 10, +109, 9,149,224,213, 43,151,176, 86,115,112, 60, 96,239,120,196,104, 58, 37, 8, 20,221, 86,204,230,198, 42,157,118,147,195,227, + 99,114,237,252,234, 73, 50,229,184,119,196,234,198, 38, 97,163,201,203,175, 92,227,232,168,199,229,171,215,216,221,221, 33,155, +165, 92,186,114,141,160,217, 38,144,130,175,124,237, 27, 12,122,125,118,183, 30,249,155, 94, 19, 40,229, 16,161,204, 53, 43,129, + 63, 56,151,239,121, 5,241, 40,237,162,158,218, 55,103, 9, 44,206,120,221,124,221,214,252,234,182, 90,228,202, 5,219,156,210, +122,175,171,122,235,237,247,234,113,165, 64, 73,133, 82,130, 43, 23, 95, 66, 74,193,131,135, 15, 43, 49,105, 57, 75, 71, 74,231, + 81, 22, 39,204, 65,181,131,197,220,130, 52, 31, 37, 61,111,131,205,243,204, 19,184,142, 25, 14,122,104,163, 89, 94, 61, 67,119, +249, 12, 81, 28,145, 76, 38,244,123, 71, 20,121,138, 49, 69, 37,218, 12,155, 77,134, 71, 71, 53,221,128, 61,213, 14,251,194,249, +243,115,138,119,235,199, 80,226,207,225, 46,159,119, 97, 68,237,192,227, 30,117, 58,157, 80, 20, 57,215,175, 95,231,204,217,117, +164, 4,173,115,162, 40,174, 80,207, 66,252,249, 28,237,167,161,110,169, 52, 26,162,154, 19, 63,239,223, 42,129, 78, 8,159,214, + 38,232,172,158,165,181,178, 6, 24,210,100, 74, 51,110,179,255,232, 46,194, 8,116,145, 18, 55, 91, 20, 89,130,140,154,172,110, + 94, 32, 79, 18,166,211,169,235,164, 26,215, 73, 84, 97, 68,216,108,177,177,121,129, 75,175,190,205, 36, 41, 24,231,150,112,165, + 65,174, 5,137,129,105, 46,209,153, 32,153,142,177, 90,243,248,179, 79,176,217,204,143,103, 42, 28, 99, 21,121, 45,253,136, 80, +224,177,224, 42, 64,249,252,244,102,171, 5, 82, 17, 55,155, 72,239, 80,209,126, 92, 20, 70,145,127,125, 10, 21,200,170,219,105, +235,234,249,170,179, 33, 43,240, 66,185,129, 10,191, 62, 73,165,252, 56,179, 67, 97,220,251,190,183,189, 69,154, 78,201,139, 2, + 37, 93, 7,180,240,188, 15,107, 33,140, 20,175,189,241, 6, 55,110,188,134, 69,241,217,231,159, 97,116,193,242,234, 58,211,233, +136,229,181, 51,140,135, 61,198,227, 33,129,116,118,235,201,100,204,100, 52,154,143,162,152, 51, 89,202,123, 76, 27, 67, 80,103, +115,139, 19,155,105, 57,124,175,111,188, 11,109,140,231,136, 93, 22, 99, 86, 69, 37, 26, 57,141,187,187, 32,128, 57, 37,127,189, +254,252,202, 25,123,229,181, 53,134,236, 68, 27, 87, 91,235, 33, 6,207, 17, 30,149, 17,175,245,248,215,242,134,247, 85, 71, 57, +115, 15,172,229,240,120,159, 36, 73,137,226, 6,179, 36, 97, 58, 25, 59, 94,175,157,103, 33,183, 59, 75, 68,113,131,195,221,167, + 4, 66,179,188,220,101,101,185, 75,171, 21, 19,120, 14,118,125, 97,181, 98, 49, 37,171,156,107,186,234,188, 38,134,179, 22,171, +107,170,247,133, 74,140, 5,193,199, 2, 81,201,131, 83,130, 48, 96,169,219,113,185,205, 70, 34,164, 34,203,114,148,146, 85,100, +168, 91,103, 10, 55, 19, 5,148, 31, 97, 72,165, 8, 84, 48, 63,196,251, 11, 73, 41,229, 68, 44,170, 84,193, 11,178, 52,163,221, +110,131,133, 44, 25,211,159, 12, 89, 90, 94, 33,110,181, 16, 24,116,220,194, 26, 75, 97, 10,194, 48,152,135,243,148, 23,185,177, +181,106,109,174,246,174,115, 9,148,128,203,155,155, 12,182,158,146,123,228,230,193,161,131,140,116,219,109,100, 20,242,249,195, +135,252,225, 31,255,132, 39,219, 79,201,178,140, 44, 75, 73,115, 77,150,166,228, 89,142, 13, 36, 86,132, 44, 47,117, 73,211, 4, + 37, 27,180,226,152, 70, 28,209,104, 70, 24, 11,163, 36, 71,143,166,116, 91, 49,223,253,246,215,248,224,227, 59,236, 29, 15, 41, +140,100, 58, 26,240,254,207,126,202,149,235, 55,200,181,229,242,213, 87,248,227,255,239, 95,113,225,202,117,186, 97,192,165,107, + 55,184,127,247, 19,194,112,153,159,253,228, 15,217, 56,115, 22, 37, 36,218,186,195, 83,238, 55,119, 87,145, 91,194,208,205,160, +163, 40, 66, 23, 5,141, 70,236, 14,155,194,131,143,170, 46,137,172,196,139,243, 89, 97, 57, 71,180,167,116,144,197,124,211,197, +158,110,140, 19, 98, 65, 40, 87, 86,233,115, 29,131, 19, 70, 6,202,169,118,239,223,191,231,179,204,221, 34, 47,132,131, 23,133, +173, 54,160,124,133, 35,158,233, 16,212,227,148,235,243, 78,123,170, 56, 11,138, 66,211,106,181,156,144,209, 31,118,134,253,125, +191,168, 74,199, 0,151,101,165, 41, 43,221,137, 45, 10,151, 88,101,236,159,105,142,126, 18,122,244,252,118,250,191, 30, 3,174, +126,207, 22,133, 65, 74,151, 93, 48, 30,143,185,121,243, 38,113, 28,179,113,102, 29, 41, 87, 49,154,170, 77,255,103,174,212, 69, +221,208, 43,106, 35, 20,177,120, 37,136,231, 24, 41, 78,142,213,253,245, 16,117,215,185,242,181,111, 51, 60,220,103,116,116,196, +202,230, 57, 30,220,254, 24,165, 11,180,201, 88, 57,115, 22,109, 4,205,238, 26, 43,103,207, 96,108,200,116,154, 16,132, 19,172, +182,206,117, 35, 11,130, 56,118,192,153, 48,102,253,220, 26,237,165, 37,102, 89,193,126, 63, 39,138, 35,140,129, 70, 67,210, 89, +109,179, 52, 62, 67, 62,155,209,237, 44, 81,140, 7, 20,105,130, 53,134, 48, 12,208, 57,152, 60,243,133, 2, 85, 97, 87,142, 31, +221, 90, 38, 43,253, 78,150,166, 85,155, 62, 8, 2,172,177, 85, 55, 90, 5,110, 13,146, 42,116,155,165,209, 8, 99, 64,120,123, +110, 41,106, 60, 69,120,234, 66,179, 28,233,110,243,236, 6,241,210, 6,255,236,255,252, 39, 8,161,201,103, 89,117, 24,104,119, + 58,140,199, 99,180,182, 4,202, 29,220, 55,214, 55,104,119,187, 92, 86, 1,191,246,171, 63,226, 95,254,139,255,219,165, 8,182, +219,244,143, 14, 49, 90,163,243,130,194, 20,110, 68,154,103, 72, 9, 70, 23, 46,209,174,222, 89, 43,159,159, 54,174,253, 94, 79, + 36, 83,190,181, 90,199,232, 85, 21, 93,109, 3, 44, 55,159,231, 85,238,162, 6,129, 81,114,206,237,173, 31, 14, 78, 30, 8, 78, +250,149,235, 9, 79, 39,189,236,117, 31,226,169,145,173,190,213,126,242,241, 79,235, 48, 72,233,136, 70, 89,158, 19,120, 5,124, +150,164, 36,233,148, 52,211,132, 81,132, 46,114,210, 52,113,111,180,213, 94,176,103, 89, 89, 89,227,210,203, 87,249,236,206, 77, + 58,221, 54,173, 70, 72,187, 17, 18, 71, 17,129, 82, 56, 26,182, 19,137, 85,117,148,183,161,105,239,229, 46,219,235,101, 5,228, +158,167, 88,244, 21,215,255,123, 34,145,232, 52,210,159, 22,212,218,146, 49,205,246, 58,147, 89, 70, 62, 75, 61,218, 83, 35, 2, +239,157,182,154,208,131,121, 44,206,242, 87,142, 52,100, 20,184, 86,150,231, 63,231,121,238,181, 8, 22,130, 0,165, 2, 66, 11, +195,193,128,110,167, 3, 89,130,206, 82,178,100,198,245, 55,223, 98,231,222, 93,138, 32, 68,133, 1,141,176, 81,221, 17,133, 46, +144, 34,170, 4,114,162,242,195,155,133,248,199,210,153,144, 21, 57,135,251, 7,220, 44,114,250,163, 49,251, 7,135,180,218, 45, + 54,215,214,249,221, 79,254, 37, 63,123,247, 93,166,211, 9,227, 36, 33,203, 10,154,173, 46, 87,111,220, 96, 52,153,144,229, 25, + 71, 71,199,244, 6, 3,126,225, 7, 63,100, 99,165,203,254,227,155,196, 50, 32, 14, 37,145,146,228,105,142, 18,130,165, 78,139, + 70,220, 37, 8, 20,235, 43, 5,157, 78,131,219,159, 63,230,179,135, 91, 32, 91, 36,211, 41,159,127,118,135,201, 52,161,213,110, + 66, 16, 48,236, 31,113,241,226, 69, 30, 63,184,203,183,190,245, 3,100, 16,241,207,254,217,111, 99,172,118,202,215, 60,199,104, + 77,238, 15,129,101,213, 87, 20, 57,121, 14,237,118,147, 52,203, 8,163,200, 17, 14,131,192, 87, 56,146,181,149, 21, 38,137,211, +109,140,198,227,234,253, 50, 70,186, 60,233, 5, 37, 57,207,180,180, 23,174, 23,223,193,114, 27,223, 98,219,125,161, 91, 34, 37, + 42, 80,180,162,128,239,126,251,155,188,247,193,135, 12, 39, 9, 86, 4,142,247,239,235,110, 21, 5, 40, 21,121, 13, 8,115,101, +189,209,158,246, 53,191,134, 75,109, 8, 44,104,154,170,231, 95,223,136,157, 0,117, 62, 2,156,143, 14,204,188,227, 85, 35, 61, + 2, 36,147,233, 51, 4,190,231, 89,115,159,217,108,149,120,225,102,126,234, 33,224,207,209, 22,175,119,169,140, 41, 59,137,150, +162,112,215,198,116,154, 96,140,173,220, 61,127,174, 89,186,239,174, 11, 36,194,202, 74,201, 94,111,167,151,133,133, 16,206,237, +229,148,228, 39,170, 83, 97,231, 98, 52, 41,233,172,173, 97, 76,193,222,195,207, 89, 61,119, 17, 91,104,206, 94,184,196,254,195, +187, 68, 81,131,163,189, 61, 86, 55, 47, 96,116,206,195, 79,110,162, 34,201,250,185,151, 89, 93, 63,203,184,191,207,100, 60,116, +252, 0,109, 43,161,106, 40,192,106,141, 45,220, 1, 53, 79,115, 32, 36, 8, 37,157,149, 38,179,233, 42,211,126,143,246,202, 10, +199,187, 79,156,251, 7,193,108, 60, 69, 98, 92, 54, 70,161,107,196, 80,119,176,212,133,239, 38,149, 56,235, 64, 57,112, 13, 32, +164,139,238, 46, 5,213, 97, 20,185,255,247,150, 81, 21, 40, 2, 17, 98,140, 70,171, 0,105, 13,166,200,253, 24,215, 44,194,161, +172,197,216, 2, 99, 21, 6, 75,127, 48,229,124, 39,163,217,140,120,237,181, 55, 9, 90, 75,108,111, 61,230,104,127, 27, 99, 52, + 65, 24,144,101, 51,164,116,135,138,217,116,202,168,223,231,157,111,124,139,143,254,183,223,198, 90,184,248,242, 53,142,222,219, +167,217,110, 19, 70, 17,211,233,148, 36,153, 56, 97,120, 32,200,178,194, 61,119, 31,220, 37, 76, 77, 11, 35, 4,113,179, 69, 32, + 2,133, 40,149,226, 82,122,239,242, 34,117,169,218,132,107,113,171,167, 85,229,167, 17,224,202,197,164,220, 96,203,141, 88, 41, + 89,109,108,229, 70, 95,229, 85, 63,227,145, 21, 21, 69,170,172,252,235,234,198,250,205, 91,175,238, 22, 84,214,222, 27, 92, 23, +190,168, 42, 69,206,162,133,107,143, 34,160,219, 94, 34,104, 11,158,110, 61,102,117,253, 44,218,228,236, 60,125, 82, 29,110,178, +204,217,121,150,151,150, 81, 65,192,173,155, 31, 99, 77,138,141, 44,214, 58,162, 91,154,107,164, 84,142, 57, 46,231,115, 68,107, + 45,218,251,208,141,246, 27,123, 41,152, 43,219,154, 85,170,218, 41, 18,154,103, 87,153,121,219,188, 70,166, 51,101, 68,169, 49, + 52,226, 54, 82,134,228,249,196,159, 94, 93,197,168,252,169,181, 12, 71, 81,202,231,252, 26, 91,101,198,131,160, 17, 71,152, 60, + 7,165, 92, 42,151, 15,171, 40,133, 91, 65,224, 42,181,181, 70,200,103, 79,134,104,173, 25,245,123, 8, 1, 27, 47, 95, 67,250, +214,123,150, 58, 4,168,171, 36, 13, 34,116,177,139, 86, 59,148,157,148, 2, 93,122,182,189, 34,118,126, 80,131,157,195, 67,158, +236,237,242,217,131, 7,172, 46, 45, 33,138,130,255,245,227,143, 73,242,148, 98,150,146, 22, 57, 69,174,137,162,128,183,222,120, + 3, 29,181,153,152, 67,194,216,176, 26,182, 89,218, 56,199,225,209,128, 39, 79,119,201,199,199, 20,217,152, 70, 20,209,105, 55, + 57,183,190,138,176, 14,189,187,123,144,146,105,205, 74,183,197, 82, 28,241,205,183, 94,101,181,219,229,167, 31,222, 65, 55, 90, +204,166, 83,118,158, 62,100,216,239,243,221, 31,252,144, 44, 77,120,252,248, 1,191,248, 75, 63, 38,108,181,184,115,247, 54,151, + 95,121,141,157, 39, 15,171,249,110,217,121, 85, 82, 85,160,150, 82,195, 48,153, 76,231,170,120,165,136, 27, 49, 70, 55,153,165, + 51,166,179, 41, 81, 24, 58, 38,130, 15,143,113,215,181,155,249, 9, 69, 85,221, 63, 27,200,100,107, 21,123,233, 27, 63, 73,162, + 43,157, 20, 78,132,134,112, 20,197,149, 78,155, 31,126,239, 59,124,116,243, 14,131,233, 20,171, 66,132, 21, 8, 43,144,210, 98, + 69, 76,220,108,186,138,199,138,234,103,237,137, 68, 58, 83, 63,132,207, 25, 59,243,195,132, 20,167,186,102,234,136,213,231, 49, + 51,234,247,247,105,157,195,211, 32, 90, 95, 70,241,254,236, 33,233,197, 62,254, 47, 61,203,174,117, 28,231,207,207,187, 88,140, +121,198,150,248,103,241,203, 47,190,198,121, 22,134, 16, 2, 43,221,102, 47,101,224,148,224,117,210,154, 45,199,120, 69,181,151, + 11,127,240, 52, 62,115,161,189,186,138, 10, 26,220,255,248, 61, 90,157, 46,253,253, 29,132,216,198, 10,201,202,153, 11, 76,123, +251,132,129, 96,210, 63,118,247,252,185, 77,162,110,151,217,116,134, 72,199, 36,211, 25,130,192, 37,160, 69, 49,177,243,249,209, +235,205,104,228, 46,164, 42,159, 25,218,109, 24, 79, 50, 38,135, 41, 42,118,214, 57, 21,199, 68,237,101, 12,194, 59, 44,114,162, + 40,164, 72, 83,135,254, 45, 59,184,158,211, 96, 60,215, 71, 5, 1,198,111,212, 69, 49, 71, 99, 75,159,215,174,117,225,136,164, + 30,255,109,180,174,116, 89, 74,185,215, 30, 70,110,141, 51, 37, 56, 74,107, 87,212, 21, 5,162, 46,100,182,198,233, 38,164,229, +235, 95,255, 14,157,206, 18,147,153,230,224,184, 79,239, 96, 31, 97, 5,179,116, 70, 20,197, 76, 38, 51, 47,230,134,193,112,192, +112, 50,230,191,253,239,255, 71,238,125,126,135,222,225, 49,221,253,125, 90,173, 14,195,126,143,241,120,236, 14,181,218,197,180, +106,159, 63,159,231,218,239,115, 18, 35,234,150, 60,197,198,185, 11, 4, 82, 4,160,202,198,167,153,243,144,235,189,250, 90,251, + 93, 49, 79,249,122,222,134,126, 90,197, 93,138, 70,194, 48,244, 11,154,160, 40, 52, 38,207, 23,114,214, 23,226, 26, 79, 40,231, + 23,199, 28,139,194,187, 82,154,163,164,243, 67,159, 84,226,155, 90, 96, 76,153,167,155,123, 10,157, 41, 12,104, 81, 5,207,191, +116,238, 2,189,254, 17,107,235,235,228,121,206,206,206,150,159,119,105, 39,188, 80, 1,215,175, 93,231,168,223,227, 96,127,143, + 64, 65,187,213, 38,110, 68, 72, 37,200,178,212,193, 39,146,128, 78,179, 73, 28,187,217,100, 25, 19,171,181,169,170,101, 93, 19, + 34,158,156,139,215,233, 78,243,150,169, 55, 57, 9,129, 16,238,243, 82,101, 84,162,193,251, 73, 61,224,194, 90,116, 97,216,124, +233,101,238, 61,126, 74, 81, 20,200, 32, 64,168, 16,107,203,155, 88, 33,101, 88, 45, 44, 81, 20, 57,135,130,183,247,149,239,191, +138,156,216, 43, 68, 96,204,148, 44, 75,189, 16,205,137, 81, 98,165, 72,103, 99,180, 41, 48, 70,163,132, 37,153,140,233, 46, 45, +179,186,188,196, 36,205, 80, 50,168, 16,153, 74,134,228, 58, 67,226,102, 82,185,201, 17, 82, 18,169,208,205,169,252, 60,185,228, +166,107,107,121,247,227, 15,152, 78, 19, 86, 87, 86,248,224,253,119, 25, 13,199, 20, 58, 7, 93,208,105,183,120,233,194, 75, 92, + 60,127,142,118,167,201,210,250,101,254,167,223,254, 63,104,118,151,208,198, 48,153, 76, 41,138, 82, 45,170, 41,146, 17,103,215, + 26, 46, 83,249,224,144,187,247, 30,178,220,237,162,117,238,222, 39,169,220,162, 32,157, 80, 44, 14, 67, 46,158,223,224,179,135, +219,200, 80,145,205, 82,164, 28,241,199,127,248,251,252,250,223,254,123,188,252,202, 53, 62,187,127,143, 70,239,144,180, 48,204, +210,132,233,100,226,112,165,122,174, 87,112, 52, 68, 93, 89,220, 44,208,104, 52,176,214, 18,199, 49, 66, 56, 37,171,197, 18,199, +145, 79,254, 26, 19, 4,129, 11, 34, 18,130, 44,119,169,104, 69, 81,182, 6,213,124,113, 51,178, 2,209,216, 19, 40,247,122,103, +173,172,152,141,152,183,106,141, 23, 38,158, 61,179,206,215,223,124,157, 91,119,239,178,219,239,147, 89, 65,216,140,209, 58,132, + 44,199, 20, 1, 42, 8,208, 24,108, 97,106,194, 61,255, 27,169, 28,239,223,207,252,109,158,213,194,106, 36, 82,168,154, 38, 75, +204,133,172,214, 98, 69,173, 34,178,207,186, 35,202,123,184, 12,177, 56, 77,188,251, 34,150,198,194,198, 40,112,250,144, 47,216, +204,203,106,200,242,124,124,246,151,109,191,215, 93, 68, 95, 22,216,245,162,224,172,250,103,233,227, 13,221,104,194,135,163,224, +215, 6,161, 66,164, 10,161,116,176,148,104, 81, 99,145,166,192, 26, 85,141,194,140,119, 53, 88,105, 9,194,136,165,245,115,204, + 38, 99,116, 94,112,238,205, 55,152, 77, 71,216, 40, 66,228, 5, 59,119, 63,197, 26,104,182, 87,152,142, 6,124,229, 87,255, 38, +227,222, 33,105, 50, 97,178,179, 75,119,117,133,181, 11, 23,137, 59, 29,246, 31,221,197,164,137,235,248,165, 5,251,187, 91,172, +172,174,209,232,116, 24,141, 20, 90, 7, 68,205, 54,231,186,109,134,163,130,145,214,180,219, 93,154,221,149,106,108,154,231, 5, + 86, 91, 10,107, 80, 50, 64,121,231,147, 20, 1,214, 26, 47,240,149,126, 68, 3, 22,231,112, 10,130,176, 34, 19, 10, 33, 80, 65, +232,218,240, 85,241, 36,208,186,112,227,197, 44,247,118, 49, 93,105,205, 92,112, 16, 8,169, 8, 99,133,201, 51, 76,145, 98,116, +128,209, 2, 83,192,104,146, 34,172,229,165, 75, 87,249,236,243, 7,124,252,241, 7,236,237,239,145, 22, 5, 73, 50, 67, 10, 8, +125, 1,100,140, 65, 5, 1,119, 63,187,197,209,225, 49,195,222, 33, 82,186, 8,235,217, 44,113, 17,181,182,168, 52, 83,218, 7, +220, 96,172, 87,223,251, 14,133,181, 21,138, 45,110,180, 72,179, 28,117,249,198,107,191, 85,250,187,149, 10,188,202,208,253,107, +173,168,130, 62, 74,131,123,125,206,247,188,121,250, 73,128, 76, 85, 61,215,190,182, 96,107,170, 61,110,213, 70, 62, 97,161, 19, + 39, 50,209, 23,103,201,243, 27,110,193, 67,191,224, 63,180, 11, 17,178,210, 47,170,229, 99, 27,111,105,123,243,198, 27, 72, 20, +131, 97,159,132, 80,116,139, 0, 0, 32, 0, 73, 68, 65, 84,227,163, 3,142, 14, 14,232, 31, 29,146,207,166, 4, 50,224,210,197, + 75,156,191,112,158,163, 94,143,100, 50, 70, 97,104,196,129, 59,241,154,162,170,200, 10, 93, 48,153, 76, 24,142, 71,100,190,106, +183,214,121,192,243, 44, 35, 77, 83,210, 44,119, 89,187,185,118,179,223, 92, 59, 31,117,225,226, 80, 11,237,189,235,198, 96,141, + 83,227, 87,194,186, 42, 11, 93,160,125,178,154,174, 14, 5,110, 65, 52,198,210,238,174,178,179,127, 72,174,139, 57,113, 72,133, +126,214,230, 90,238,145, 71,123, 42, 37, 17, 74, 18,197,113,101,191, 42,219,159, 11,109,221,170,171,224, 90, 74, 69,158, 19, 80, +176,183,183,205, 44,205,220,141,101,253,236,216, 95,188,237, 86, 19, 25, 40,164,114, 55, 83,171,213, 34, 12,189, 8,211,186,249, +151,242, 32,135, 56,142,104, 54, 34, 90,141, 38,141, 40, 34,240,115, 51,172, 33, 77,198,220,191,119,143,217,108,198, 74,183,197, + 27,215,175,242,230,107, 55,184,112,126,147, 78,171,233,248,237,195, 33,135,227,130,135, 15, 31, 49, 75, 51,198,163, 17,147,201, +152,241,104,236,197, 38, 67, 38,211, 9,253,227, 67,199,203,247,215, 76,111, 48,160,223, 31,160, 45,196, 81,228,240,187, 8,154, +205, 38, 42, 12,201,138,130, 48,144, 12,134, 83, 76,161,209,185,198, 34,120,252,228, 1, 54,136,233,174,175,241,224,225, 3, 64, + 48, 30, 13,233,237,239, 82,164,169,231, 41,168, 42,107,160,209,104, 84, 93,153, 32,112,135,208,208,107, 28,242, 60,159, 7, 12, + 57,110, 49,194, 7,232,148,184,226, 82,224, 89,230, 0, 0, 14, 12, 36,231, 73,111,167, 77,138,133, 56, 49, 78, 21,243,141, 87, + 74,119,224, 14,162,136, 44,203,153, 36, 9, 91,135,199,164, 86, 16, 53, 91,196,205, 54, 97, 28, 59,129, 81, 28,251,216, 74,223, + 6,183,194,181,176,253, 3, 75,165,124,165,231, 84,197, 85,160,141,168,161, 94,173,255,243, 74, 64,231, 47, 90, 97,231, 10,237, + 83, 52, 59,245,195,239,151,154,149, 63,103,147,175,218,210,242,249,246,173,210,226, 36,236,159,127, 51,127, 33,224,237, 4,112, +235,203,188,150,231, 30, 0,228, 92,208, 37,202,116, 71, 41, 64, 73,148,138,170,170, 55,108, 52, 8,154, 13, 84, 20, 35,195,192, +117,102,165, 68,149,109,121, 51,223,228,100, 32,233,172,108, 32, 27, 77, 58,235,155,100,227, 33,237,165, 53,198,211, 41,217,168, +143, 21,130,217,112,136, 20,176,122,225, 42, 27, 87, 94,225,209,167, 31, 33,180,211,207,172,159,217,244,221,165,130,209,254, 62, +221,245, 77,164, 10, 72,210,148,184,217,228,229,215,191, 74, 24,197,164,105, 70,163,209,224,194,185, 37, 38, 19,195,112,148,145, +207,114,172,143, 91, 61,222,219,101,251,243, 79, 48,121, 6, 90, 59, 8,141, 53,196, 97, 8,194, 86,135, 20, 33,157, 85, 57, 8, + 84,117, 79, 24,173, 43,135,148,214,186, 74,232,196,111,226, 69,238,198, 99,110, 63,243,185, 18,254,250, 45,113,225,194,167,117, + 6, 97, 80, 27,255,136,170,163,168, 66,183,166, 5, 65, 64,179, 33,184,247,120,139,247,223,255,144,189,221,109,142, 14,246,232, +245, 29, 55, 33, 77,103,149,203, 35,142, 34, 94,126,229, 85,150,186, 49,121, 50, 98,150, 27,218,157, 46,107,235, 27, 28, 29, 29, + 19,133, 17,131, 97, 31,172, 33, 73,146,103,192, 81,243, 9,128,171,194,195,176, 65,216,104,146,103, 41, 65, 16,198, 78,128, 83, +218, 5,132,192,230, 26, 99,115, 71, 1, 50,174,250, 21, 66,248,225,252,226,156,238,121,204,248,250, 77, 80, 23,183, 21, 90, 47, +204,190, 69,237, 2,175,186, 2, 53,181,117,189,125, 78,109,211,182,214, 1, 49, 42,158, 86, 13,112, 33, 42,240,194,252, 20,190, +224,163,247, 11,166, 19,139,233, 10,184, 20, 6, 49,233,108,198, 39,159,189, 79,154,206,176, 58,195,100, 83,110,188,114,149,102, +163,133,214,150,199, 79, 31,243,116,123,155, 60,155,177,212,109,113,245,213,183, 72,124, 14,186, 49, 5,195,254,144,201,112, 76, + 16, 69,142, 66, 54,155, 49, 61, 56,102, 50,153,177,178,178,228, 17,180,174, 26, 52, 69, 81,145,226,180, 93,244, 81, 86,190,124, + 47, 90, 18,178,166,103, 0,247,103, 85,242,130,152,211,198,124,240,130, 16,146,118,103,133, 36,205, 25,142,134,174, 77, 30, 70, +168, 40,244,226,172, 16,109,164, 15,209,112, 39, 89,225,185,236, 90, 23,196,113,140,146,178, 26,143, 84,135,176,210,235, 31,134, + 24, 93,144,102, 51, 66,107, 57, 60,220, 39, 77, 83,172, 17, 21, 79, 95,161,153,142,134, 28, 8,151, 81,254,242,229, 43, 72, 4, + 71,131, 1,105,234,110,182, 86,179,129, 14,138,234,115,141,163,144, 70, 20,209,106,196,124,247,187,223, 37, 75, 51,126,254,238, +207, 24,245,143,105,168,130,235, 87,206,243,202,249, 51,108, 29, 30,145, 23,154, 70, 28,161,243,132,233,172, 96,150,103, 96, 12, +253,241,132, 34,137,152, 76, 38, 20,214,144,165,169,203, 27, 46,124, 5,130, 11,213,136, 59,174,170, 49, 86,147,204,114,119,125, + 97, 25, 14,157,194,180,213,137, 9,136, 24,141,134, 52, 26, 77,132, 20,196,113, 72,183,221, 96, 80, 76,208, 69,198, 44,113,168, +201,119,127,246, 39,124, 43,250, 1,107,107, 27, 28, 30,236,185,249,160, 46,136,194,144, 52, 75, 1,136,227, 24, 89,184,215, 26, +199, 49, 74,185,112,146,102,163,193,108, 54,171, 14, 82,113, 28,179,178,186,206,104, 52, 34,148,146, 8, 8,131,128, 52, 73, 72, +114,141,191,236,137,163,168,186,151,178, 44,199, 10,119,143, 73, 37,145,126,102, 47,125, 56, 69, 57, 58, 42, 89, 12,101, 28,170, +170, 34,140, 69,149, 3, 80, 8,193,214,113, 31, 21, 54,104,117, 59,116,186,109,150, 90, 45, 90,157, 46,143, 62,191,207,104,212, +131,169,152,207,201,133,196,228, 57,214, 80,177,237, 43,104,139,160,210, 70, 24,171, 48,122, 14,198,113,247,167,245,154,191, 57, + 23,162, 92,248,240, 12,138, 50,201,144, 90, 43,127, 49, 55, 91, 84,179,133,178,242, 63,181,162,149,254,103,202, 13,236, 57,221, +247,122,119,172,100, 74,252, 69,167,170,125,153,217,252, 11,109,194, 82,156,104, 41,216,121,242,156,152,167,198, 9,161, 28,102, + 53,142, 8,154, 45,154,173, 22, 81,171,229, 73,147, 25,217,116, 74,150,140,201,237,204,123,177,221,230,232, 75, 42,186,235,231, +152, 76,199, 60,250,232,167,180, 90, 93,198,189,125, 10,157, 49, 62, 60,162,187,190,142,144,130,229,179, 87, 65, 24, 76,158,177, +121,233, 34,187,143,238,209,108,116,232, 77,166,152,108,138, 4,166,211, 33,218, 66, 97,157, 16,236,120,231, 41,201,184,143,146, +138,102,167,203,176, 55, 96,187,213,118, 5,139, 17,164,238,198, 66, 2,157,149, 85, 84, 16, 17, 6, 1,133, 79,229, 67, 24,138, + 44,243,240, 49, 75, 24,134,100, 89, 70, 24,134,104, 63, 94, 20, 82, 16,133, 81,165, 87,146,158, 70,170,141, 65,133,110,175, 11, +130,128, 80,132,206,146,102, 53, 58,119,100, 79,112, 40, 95,155, 25, 71,200, 11,156,198, 8,223,209,116,113,180,129, 15, 35, 50, + 20, 89,206,163, 71,143, 24,140,190,206,159,190,251, 49, 23, 46, 93,102,118,119,226,214,158,188,192, 8,227,175,117,235, 58,169, + 82, 48, 29,245,185,122,233, 58,127,245,135,191,202, 44,115,227,197,155,159,126,204,253,207,239, 48, 73, 18, 26, 81,196,160,215, +175, 88, 78, 56, 3,245, 34,108,202, 58, 36,144, 12, 67,178, 44,117,194,191, 43,175,191,245, 91, 65, 24, 16,180,151,120,235,251, + 63,230,245, 95,248, 53,246,182, 30, 86,115, 3, 74, 48,138,243,117,184,139,197,183, 13, 79,170, 88, 79,206,181,235,109,166,250, +102, 95, 46, 46,246,148, 25,147,168,230,187,170, 38,124,153,131, 48,194,192,205, 23, 85,149,197, 46,170,141,201,214,172,150,198, +204,189,233,139, 93, 3, 81,117, 6, 92,165,238, 78,101,145, 10, 88,105, 53,105,197, 33, 87, 46, 94, 98,169,187, 68, 20,198, 52, +154,109,158, 62,221,102,119,119,135,253,189,167, 36,211, 17, 75,203, 93,222,250,202, 91,116,186, 45, 14, 14,247,221, 38,173, 11, +154,113,131,165,165, 54,173, 86,147,241,100,202,100,154,160, 84,128, 46, 44,179, 52, 37,203, 50,144,130,188,200,125, 24, 70, 70, +150,230,164,121, 65,158,187,232,202, 34,119,155,143, 46, 52,186, 48, 30,242, 97, 42,219,155,214,102,129, 29,160,125,212,105,245, +103, 94,192, 24,197, 45,130,176,197,214,206,182, 23,248,153,202,210, 38,164, 32, 12, 99, 98, 31, 86, 34,149, 34, 12,220,133, 27, +120,117,186, 53,238, 51, 40, 85,242,117, 97, 99,149, 56, 22, 56, 33,201,100,116,204, 44,153,186, 19,175, 80, 85,222,186,107, 51, + 75, 79,251,115,254,252,179,107,171,188,245,234,117,214,151,187, 40, 44,179, 52, 67, 96,137,194,144, 86,163,193, 82,183,195,234, +114,135,223,248,141,191,199, 47,255,240,151, 89, 91, 59,195,183,190,254, 13,152, 77, 32,157,241,232,233, 54, 27,107, 93, 90,113, + 68,111, 56,226,225,214, 46,211,201,148, 89, 58,227,184,119,204,222,225, 17,123,131, 9,195, 73,202,241,209, 1,121,158,187, 27, +171, 40,156,106,212, 24,114,237,102,113,113,224, 5,163, 30,195,235, 33,194, 24, 11,147,201, 20, 16,100,105,142, 53,174,237, 23, +248,152,222, 32,144,244, 7, 83,255,179, 78,148,147, 37, 41,201, 52,161,213,110, 81, 20,206,179,159, 12,123,254,125, 82,213,184, + 69, 74, 73, 24, 4, 11,157, 37, 37, 37,202,115, 1,138,162, 32, 77, 51, 79, 55,140, 64, 64, 20,134,110,164,100,220,125,160, 2, +167,134, 47,147,245,170, 64, 21,225,108,104,243,205,194,169, 99, 85, 16,204,163,137, 3,215, 58,199, 71,216, 10,207,244, 23, 74, + 33,131,128, 64, 69,200, 48, 36,106,180,136,187, 93,190,253,203, 63,226,199,127,227, 87,248,207,254,209, 63,226,165,183,191,201, +159,252,228, 15,209,153,193,234,194,117,166,202,209, 81,121,240,174,186, 98,204, 91,155,182,140, 72, 22,148,140, 25, 41,189,122, +221,143,146,130, 32, 68, 10, 5, 72,164,170,205,126,171,215, 70,181, 33, 87, 7,217, 26, 6,181,222,221,123, 30,191,189,116,113, + 45,102, 11,136, 47,156,185, 87, 97, 38,255, 26, 91,251,105,233,132,207, 83,232, 63,239,123,235,207,201,138,186,191,190, 38,148, +165,236,236, 72, 80, 1, 82,133,200, 40, 34,108,181,105,116,151,232,174,159,229, 23,255,250,191,203, 59,223,120,135,131,163, 99, +135,163,206, 51,116,158, 59,159,183,153,199,220, 6, 97, 68,107,253, 60,157,149, 85, 4,146,205,235,111, 50,203,114,178,241, 8, + 93,228, 76,143,246,252, 65, 57,103,237,226, 53, 86,207,189,196,131, 91, 31, 34, 50, 67,180,212,101,253,204, 57, 58, 43,171, 12, +143,246, 89, 90, 59,135,176,154,102,179,193,100,150, 18,199, 17,203, 27,231,233,110,156,161,221,238,162,148,100, 50,158,129,149, + 4, 81, 64, 62, 75,209,133, 91,219,148,146,220,122,247, 39, 20,201,132, 34,207, 48, 69, 65,150,165, 72,220,156, 89,248, 14,104, +169,189, 66,184, 17, 41,224,218,230, 94,155, 97,117, 78,145,205, 40,178, 12, 93, 24,108,161, 41,210,140, 60,203, 48, 70,147,231, +169, 15,108,242,228, 82, 37,252, 38,238,102,233,214,119, 39,117,225,210, 6,181,214, 4, 53,235,159, 46,114,186,203,203,244,134, + 35,246,119,119,216,122,252,136,217, 44,113,201,149, 94, 40,141,117,186,154,184,217,228,149,107,175,240,235,127,243,111,113,229, +202,117,158,110,239,242,243,159,253, 9,119,238,124, 2,198,146,101, 46, 75,100, 60, 26,185, 98,186,196, 44,159,134, 49,150, 78, +255,100,181,235, 44,170,171, 95,121,231,183, 26, 75, 43,252,250,223,255,135,172, 93,255, 26, 75, 27,155, 92,124,237, 45,182, 63, +251, 20,107,180,195, 45,122, 11,152, 61,225,237,176, 47,152,247,156,100,191, 83, 71,243,149,213,166,156, 43, 92,203,235,179, 20, + 0,148,173,216,178,253, 65,165,196,119, 31,114,185,201, 27, 47,182,179, 53, 11, 77, 57, 78, 40, 69,117, 96,171,220, 94, 37,221, + 9,173, 20,201,149, 9, 90, 18,129, 41, 10, 62,249,248, 35,238,222,189,205,195,135,247,217,222,126,196,193,222, 46,228, 9,231, +214, 58, 92,191,250, 50,231, 55, 55,105,197, 49, 71,251,251, 12,142,143,156,184,194, 58, 85,248,104, 52, 34, 75,115,119, 51,116, +218, 88, 99, 24,142,198,213,251,145,166,238,226, 49,198,144,103, 25, 69,166, 41, 10,235,218,236,198,162,141,203,118,169, 90,237, + 94, 33,235, 54,109, 91, 81,188,230, 27,189,167,122,121,152,194, 60, 12, 6,144, 49, 59,123,123,228,121, 86,181,122,181, 23,144, + 72,143, 77, 12,195,208, 91,216, 28,158, 83, 5,174, 98,147, 66, 34,188,117,173, 84, 66,215, 25,223,248,208,154, 66, 23,136, 34, +101, 58,237,187, 74,176, 48, 11, 16, 25,119, 34,117,157, 30, 83,104,210, 44, 37, 73,166,140, 38, 19,214, 86,151,121,249,194, 5, +246, 15,143,104, 53,155,116,218, 45, 86,150,151, 57,191,121,150,255,228, 55,127,147,111,124,253, 29,148,112, 98,199,126,127, 72, +119,101,157,183,111, 92, 35,153, 36,188,127,251, 54,135,189, 99, 38,211, 41,199,253, 33, 89,158, 49,153,142,201,242,130,193,112, + 68,127,146,208, 27, 12,153, 37, 83,103, 5, 43,244, 34,122,215,107, 42,148,112, 7, 40,176,149, 8,198,233, 55,220,117, 51,157, +204, 8, 35,229,230,215,186, 32,245,239,101, 24, 6, 20,133, 33, 77,253,166, 86, 20, 72, 99, 29,135, 89, 41,214, 86, 86, 72,134, + 3,178,116,230,248,253, 53, 59, 90,201, 30,112,158,236, 2, 33, 28, 92,197,169,227,243,106,163,207,178,148,188,112,244,187,178, +109,103,252, 97,218, 98,252,225, 32, 68,201,192, 87,236,248,123, 38,240,140, 1,181, 96, 79, 11,124,182,184,227, 10,232, 10, 53, + 28, 4, 78,109, 31, 54,154, 52, 90, 45,226, 70,147, 48,108, 16,196, 33, 75,103, 94,226,111,252,230, 63,230,245,239,124,141,161, + 86, 44,159, 91,231,222,205,123, 28,238,110,147,167,105,165, 8, 46,221,117, 37,208,163, 20, 42,205, 79,252,198,111, 60,243,181, +195,109, 60,170,234,182,217,178,138, 46, 15,233,118, 14, 21,153, 35,245,230, 10,125,225,181, 37, 98,129,158, 87,234,238,230, 68, + 53, 33,235,126,235,103,173,127,165,111,120,193, 9,240,156, 18, 94,212, 44, 99, 95, 54,180,106,161,226,174,165, 20,137,231,204, +199,235, 22,187, 58, 18, 94,212,108,228,101,173,230, 82, 39, 85,237,192,225,252,231,238, 0,163, 16,210,233,103,130, 70,147,176, +209,166,179,178,194, 55,127,244,235,252,221,127,252,159,242,218, 87,190,194,250,250, 10,183, 62,185,137,201, 92,206,187,242,135, +178,178, 96, 10, 84, 72,123,195,145, 18,219,221, 37,250, 71,251,164,199,187, 12,142,142, 88, 94,223, 96,150,204, 88,218,216,164, +217, 90, 98,220, 63,102,120,124,140,178,112,230,226,203, 12,143, 14, 80, 81,131,241,168, 79, 50,153,208,238,180,153, 38, 9,198, +104, 26,113,131, 84, 27,154,141,198,255,207,216,155, 53, 93,118,221,231,125,191,181,214,158,206,240,158,119,232,185,209, 24, 8, +128, 0, 41,142,162, 36,138,166,101,137,113, 60, 68,101, 91,113, 18,203,169,196,169,148, 99,187, 42, 85, 78, 85,110,146,155,220, +233, 35,164, 42, 23,249, 2,185, 75, 37,185, 73, 42,150, 35,185, 28,155,162,165, 68, 38, 9, 2, 32,230,161,129,158,251, 29,207, +176,167, 53,229,226,191,246, 62,231,109,192,174,168,170, 11, 32,213, 4,222, 62,103,239,181,254,195,243,252, 30,102,251, 71, 60, +122,112,143,227, 71,247,177, 77, 77, 89,230, 28, 93, 59, 34,132,192,122,181,196,168,192,122, 93,243,228,238,251, 52,231,167, 4, +111, 33,117,202,106,228,156,200,103,150, 23,249,216, 80,246,125, 63, 78,110, 51,109,146,156,195,128,145, 2,215,152, 76,200,153, + 74,236,131,168,184, 21, 94,134, 32, 1, 95,206, 38, 11, 92, 74,243,180, 86, 92, 2,131,146,158,109,226,160, 79, 65, 78,171,213, +138, 44,211,124,254,249,231, 66, 33, 77,246, 51,105,108,182,119, 83, 81,148,124,227, 27,223,100,127,255, 0, 93,148,252,209, 31, +255, 17,127,250,147,159,208,180, 45,171,229, 18, 31, 44,214, 58,250,182, 75,218,155, 47, 97, 73,164,181,153, 30, 66,148, 6,148, +247, 43,223,254,222, 31,188,244,157, 31,242,123,127,237,183, 89, 57,176, 94,177,127,245, 10, 71,183,190,194,163,143,223,149,234, + 32, 0,193,141,226,149, 47,171, 42, 71, 11, 74, 26,227,203,142, 94, 46,231, 93,200,203,112,113,239,102,171, 15, 47,211,144,127, + 60,140, 8, 7,251,151, 78, 99,224,161,251, 24,132, 50,214,186, 75,138,249, 8, 59,255, 46,181,195,130, 87,227,216,127,224, 91, +139, 80,193,108,185,220, 41, 31,219,100, 25, 89,158, 81, 78, 38, 44, 22,135, 92,189,126,157, 95,255,214,215,121,253,133, 91,204, +231,115,242,194, 96, 76,160,170, 12, 89,158,179,222,172,217,108,234,180, 47,181,108,234,134,243,229, 10,133,162,172, 10,148, 81, +108,234,102,244, 14,123, 55,236,154, 17, 69, 99, 20, 97,138, 15, 91,162,209, 22,223, 57,100,160,171,241, 50, 8,126, 80,171, 50, +118,240,113,199, 54, 20,130, 98,113,120,141,167,199, 79,211,133, 46,170, 78,180, 38,140, 58, 38,233, 56,135,253,211, 96,239, 16, +209,157,172, 39, 98, 90,155, 12,161, 29,131, 87, 58, 4, 41,170,180, 82, 28, 85, 37, 79, 30,223,195, 6, 59,118,187, 69,158,166, + 39, 3,164, 65, 43, 20,102,156,166,216, 68, 1, 91, 45, 87, 64,228,251,223,255,117,190,241,245,175,241,250,107,175,241,131,223, +252, 62,255,241,223,253,125,174, 95,191, 78,223, 89,158, 62, 61,161,107, 59,150,203, 37,117,219,242,228,124,197,147,147, 99, 62, +253,236, 46,117,189, 33,164,132,184,179,243,115, 66,140, 44, 55,107,234,182, 33,146,179,169, 55, 64, 24, 15,233, 8,120, 2, 62, + 72,200, 70,145,105,170, 60,217, 90,242, 98,199, 78,184, 29, 95,246,125, 18,205,165,105,131, 15, 49, 85,236, 48,153, 78, 88, 47, + 55, 41, 41, 47,226,189, 67, 17,232,218,158, 24, 34,191,247,215,127,151,227,147, 99,188,179, 20,121,190, 99,195,188, 44,150, 27, + 38, 31, 82, 92, 60, 99, 7,245, 94, 72, 84,182, 31, 87, 95,206, 59, 92,138, 17, 30,228,202,222,187, 81, 61, 63, 8, 82,135,191, + 94,130, 74,237,188,151, 89,158, 83, 77, 38,228, 69, 73, 62,153, 50,221,223,231, 7,191,253, 35,130, 54, 24, 13, 42,207,185,246, +194,171,236,223,122,149,179,139,150, 27,139,146,220, 40, 78,150, 61,239,191,241, 83,108,215,202,196, 46, 12, 23, 74,216,134,174, + 71,149, 10,204, 64, 72, 30,125, 18,214, 89,155, 12,147, 87,242, 57,167, 3, 81,107,153,202,201,228, 71,108,110, 3,230, 89, 17, + 81, 42, 35, 14, 10,251,168,182, 48, 16,145, 89,166,139, 44, 29,106, 73,133, 63,192, 87,226, 22,230,192,229,244,108,158,209,254, +164, 83, 40, 97,190,213,151,181,252,234,178,138,255, 89, 27,233,179, 93,246, 37, 27,225,206,164, 64,253,255, 16,196,141,178,130, +157, 95,195,100, 66,237, 80,222, 84, 52,105, 58,163, 68,221,158,166, 46,202,100,104, 99, 48, 69, 73, 94, 77, 40,231, 11, 14,111, +191,200,223,254, 7,255, 21, 71,123, 21, 7,251, 21,249,254, 29,222,123,243,109, 46,158, 62,193,245,157,116,233,195,196, 67, 41, +178,201, 30,135, 87,174,241,248,238, 71, 60,253,252, 67,218,147,199, 84,251, 87,216, 63,186,194,102,117, 65, 81, 78, 89, 28, 92, +165, 60,186,130,183, 61,183,191,242, 21, 94,253,222, 15,249,236,189,183, 9,174,102,117,122, 76,240, 61,161,107,192,100,248,174, + 30,185, 68,214, 7,188,181,188,244, 43,223, 70,147, 38,153,109, 67,244,129,118,211, 98,178, 18,239, 28,171,243, 51,172,179,108, + 46,206,121,114,239, 99, 92, 47,191,207, 90, 59,174,110, 20, 3, 36,109, 11,203, 26,126,105,173, 83,135, 43,235, 40,149, 38, 84, + 67, 99, 56, 56,176, 32,146,103,197,184,234, 28,178, 56,124, 90,145,142,235,225,212,220,120,239, 83,145,238,240,222, 74,134,135, +247,108,214, 75,108,211, 74,174, 68, 42,232, 7, 31, 59,113,139, 13,206,242,130, 23, 95,188,197,231, 15, 30,240,139,183,223,227, +207,254,213,143,233,154, 13,171,139, 11, 54,155, 13,222, 59,122, 43,200, 99,231,253, 88,148, 14,151,185, 74, 14, 50,163,115,209, +195,148, 5, 42,147, 76,122,243,157,191,242,183,255, 96,239,198,109,166,135,215,248,250, 75, 71,226, 61, 46,114,200,166, 60,255, +234,215,120,240,238, 91,248,232,136,222,237, 68, 50,200, 99,157, 25, 53, 66, 66,198,206, 96,135,209, 62, 28,166,255, 54,130, 28, +187,240,253,103,252,215, 35,183,125,119, 12, 63,168,136,141,185,228,153,223, 85,136,155, 81, 88, 21, 71,114,218,176,175,244, 59, +202, 89,191,147,205,172,210, 56,121, 82, 85,204,247,246,152, 78,167,236,205,103,252,230,235,119,120,229,214, 33,125, 80,212,205, +134,186, 89, 19,156, 67,105,200,115,195,100, 90,161,140, 97,185, 92,209,247, 78,198, 89, 46,208, 52, 45,193,123,242, 50, 31,153, +191, 74,233,212,228,170,116, 81, 15, 35,115,149,198,168,106, 36, 79,197, 56, 68,121, 12, 2, 9,149,246,213,124,241,215,176,199, + 68,129, 41, 56, 61, 61,195,121,199,179,217,233, 58, 77, 43, 80, 91,225,162, 92,236,217,248,160, 12, 99,204,144, 62,183, 24,183, + 21,236,120,177,123,153,224, 68,215,114,182, 60,197,246, 61,214,121,116, 10,180,217, 45,194,134, 84,183, 24, 67, 82,147,166,137, +141,179, 20, 85,197, 55,127,229, 59,252,141,191,241, 55,249,238,119,191,195,157, 59,119,104,234,150,213,114,197,195, 7,143,121, +248,232, 49,239,191,255, 62,239,127,244, 33,159,222,189,203,187, 31,126,200,233,114,197,189,123,119,193, 59,140, 22, 42, 87,219, +247,184, 32,118,180, 24, 34,157, 35,229,157,203,110, 95, 10,161, 93, 47,117, 36, 83,158,204,200,115,213,182,173,136,105, 82, 72, +144, 74,151,131,119,142,174,119,219,241, 90, 10,112, 24, 42,231, 44,203,104,234, 94,134,246, 49,101,219,123, 7, 58,227,243,135, +247, 57,220, 63,192,104,205,186,222,160,180,102, 54,221, 35, 47, 10, 92,114,103, 88,235,198,105,215,179,193, 68,131,251,100,247, +253,202,242,108, 39, 25, 46,142,214,202, 93,119,137,117, 14,159,166, 34, 67, 17,230, 82, 6,252,160,120, 30,120, 4, 90, 9,199, + 63, 47,167,124,243,135,255, 46,127,243, 31,253,151,252,157,191,246,151,120,255,179,123,180,171, 53, 87, 95,249, 38,251, 87,110, + 81, 86, 37,215,110,236,243,222,221, 51, 78,142, 47,248,232,103,127, 74,244,210,121, 68,239,211, 35,186, 99,117, 13, 81,238,246, + 33,173, 38,217,229, 76, 62, 17, 49, 83, 18,251, 9, 63, 80, 58,216, 1, 59, 60, 54, 36, 89, 70, 28, 0, 68, 70,114,211,119,125, +234,187,221,247,112,151,139,109, 73,212,245, 3, 92,103,123,241,146,160, 62,122,135,107,175,118,172,166, 91, 6,253, 22,228,244, +229,195,124,197, 23, 19,238,255, 77,151,251, 32, 72,223,253,199,168,103,200,126,250, 75,212,122, 81,113, 73, 28, 60, 76, 92,134, +159,105, 60,115, 49,219,100,202, 1,161,173,141,188,227, 89, 70, 86,149,100,229,148,114,190,199,183,126,240,151,121,238,107,223, + 34, 22, 21,214, 5, 30, 30,247, 44,207, 46,248,244,157, 95,224,186, 14,219,117,226, 12,241,146,168,118,227,197,215,216,172, 4, +131,236,172, 20,161, 89, 53, 99,115,126, 66, 81, 84, 4, 31,113,206,114,250,249, 93,162,183,168,124, 66,191, 89,146,207,247,112, +206,211,175,151, 68,239,153, 29, 94, 97,255,230, 29,162,143,172,206, 79,210,153, 0,157,237,185,253,242,107,244,125,143, 78,248, +108,239, 28, 85, 89,162,148, 98,255,234, 85,102,251,251,152,116,238,124,252,246, 79,101,244,237, 44,209, 59, 84,202,166, 24,222, + 1,107,123, 92,111,241, 93, 47,239,152,146,127,222,240,221, 26,109, 70,237, 81, 72,235,182,241,158,138, 67, 49,163,101,237,165, + 53, 69, 85, 73,206,187,210,227,153, 25,189,191,148,119,162,134,236,139,176,181, 36, 55, 77,141,138,158,174,179, 95, 96, 20,140, + 58, 51,163,184,126,227, 14,197,116,198,197,114,201,103, 31,127,196,102,189,162, 75,171, 66,157, 9,212,107,184,191,134, 39, 71, +171,173,104,124, 11,160, 74, 14, 0, 99,200,139, 2,243, 23,126,255, 31,252, 65,140,154,174,243,204, 23, 11, 14,142,230, 92,217, +211,120,165, 9,122,194,213,175,188,202,189,247,222,198, 59,139, 6,130, 10, 9,151,159,144,173,187, 30,144, 52, 98,218, 13,237, + 24,237,104,138,203, 81,168, 59, 99,200,225,226, 31, 30,204, 16,119,189,189,187,254,206,157,188,219, 29, 21, 44,201,136,159, 37, + 49, 67,252,146, 66, 97, 87, 53, 59,132,194,152, 56,192, 23,118,212,168,193,147,105, 1,146,252,254,111,125,155,231,174, 29,242, +248,244,130,227,179, 99,154,174,149,159, 65,177,115, 73, 36, 54,121, 81, 80,215, 45,109,211,139,210,210, 73,224,139,140,121, 53, +214, 58, 66, 80, 9,221,154,228,170,137, 2, 17,254, 13, 74,222,161, 75,143,232, 81, 37, 28,119, 63,247,241,115,147,192,154,131, +163, 27, 44, 87, 43,156,183, 91,127,114, 52,104,164,130, 83, 90,165,125,234,144, 8,163,183, 15,203,168,254, 20, 49, 99,166, 20, +202,168, 17,132,209,247, 61,196, 64,110, 12,125,215, 17,219, 13, 15, 31,220,163,169, 91,172, 21,242, 81,158,208,178,222, 75, 66, + 86, 81,138, 88, 16,181,165, 21,142, 5, 93,210,103, 52,173,163,247,138,227,167, 39,156,157,157,115,126,126,193,189,251, 15,248, +248,211, 79,248,232,227,143,249,228,179,187, 60,122,242,136,207,238,223,231,228,244,132, 39, 79,143,105,235, 13, 58, 90,180,138, +108,154, 70,124,176, 81, 81, 21, 25,189, 13,116, 86,118,245, 91,215, 64, 24,185, 11, 58, 93,236,121, 14, 68,127, 41,196,161,200, +139,157, 98, 83, 62,103,151, 70,222,218,104,116,216, 82,164,188,115, 20, 69, 65,107, 61, 46, 74, 37, 29, 19,123,160,111, 54, 68, + 5, 39,167,103, 28, 30, 94,197,218, 20,157, 24, 34,185, 49, 4,196,159,156,103,121,210,136,100, 8, 42, 66,112,156,101, 41, 36, + 66,109,242,100, 27, 76,123,112,116, 26, 87,203,101,159, 21,133, 20,130, 65,165,253,191, 35,203,244, 72, 19, 20,132,166,198,165, + 41,144,243, 50,217,144,247, 84,118,232, 33, 68,148,201,152, 92,189,205,228,232,121, 14,175, 28,240,163,223,249,139,252,201,191, +126,139,249,254, 53,174,220,126, 1,165, 12, 77, 15,171,139, 37,237,186,230,147, 55,255,156,232,196,197, 33, 36, 46,149,216,216, + 70, 20,237,105, 26,166, 70,109,139, 8,121,182,163,104, 48,121, 33, 25,221,105,138, 36, 69, 85, 33, 40, 79, 45,110,146,164,208, + 33, 58, 25,185,134, 1,172, 50,100, 64, 16, 6,191, 89,130, 53,233,173,118, 72,102,249, 41,161, 75,143,251,250,129, 68, 55, 20, +155, 50,190, 14,219, 81, 60, 34,218, 27, 14,173,237, 65,252,197, 49,248,165,113,248,191,141,188,250,165,172,249,237, 47,249,247, +169,173, 78, 64,111, 3, 73,244, 80,216, 72,219, 65,150,148,236, 58,175,136, 94,172, 89, 90, 25,178,172,144,226, 89,203,187,174, +141, 65,231, 5, 89, 81, 98,138, 9,197,100,206,247,255,234,223,162,110, 58,150, 39,231, 60,122,116,202,241,163,199,120,219,243, +193,207,255,140,208,203,133, 30,162, 71, 71,205,244,240, 42,135,215,111,211,212, 75,206,158, 60, 22, 59,114, 89,113,254,232, 51, + 98,223, 64, 4,219,110,168,102,123, 76, 15, 14,197,102,217,183,120,231, 57,253,236, 67,124,179,161,237, 26,116,112,216,182,165, +187, 88, 82, 78,231,168, 24,233,218, 46,253,121, 34,139,163,107, 76, 22, 7,168,116, 70,104,109, 36,106,212,139,214, 39,132, 64, + 81, 22,248, 16,249,252,221,183,232,235, 21,209,201, 84,204, 91,183,221, 85,167,243,187,172, 74, 2, 18, 48, 36, 33, 74,249, 86, +135,149,166,146,195,234, 41,244, 14,223,183,242,172, 69,143,235,186,228,200,216, 70, 67, 59,231,192, 57, 1, 42,141,116,211,128, + 11,253, 24,194,176,109, 90,183,117,160,117, 2,134,250,130,133, 50, 49, 3, 98,140,212,245,146,201,108,193, 39,159,124,194,217, +201, 19,250, 78, 38,114,178,255,151,221,189,184,156, 52, 69, 38,185, 35, 10, 45,231, 65,158,163, 77,145,222,227,156,188,172, 80, +202, 72,241,245,189,223,253,253, 63, 80, 68, 84, 86,224, 66,206,201,121, 77, 38,180, 57, 94,188, 57,165,233, 75,170,197, 21, 30, +124,242, 30,113,180,128, 25, 52,122, 59, 10, 32,238,228,211, 50,238,224,229,247,102,210, 33,106, 35,255,187,161,138, 76,177,149, +187, 17,155,195,222, 79,143, 47,237,176, 83,246, 95, 96,190,239,122,153,135,145,202,176,131, 83, 9,203, 58, 84,174,187, 66,188, + 81, 9,191, 3, 55,201, 82,245,158,105, 40, 50,195,126,161,249, 47,254,218, 15,152, 20, 5,239,127,118,143, 7, 79,159,208,219, + 14,231, 3,189,117,244,214, 97,157,140, 65,157,245, 9, 10,160,200,203, 66,208,164,109,159,210,214, 4, 20,160,146,157, 45, 36, +151, 65,212,154,219, 47,188,196,124, 58,163,217,108,190, 32, 54,124, 54, 67, 62,198,248,229,244,139, 29, 53,240,225,225,117, 78, +207,207,176,182,191,212, 79, 12,172,231, 93, 22,180, 54, 3,236,199,165, 74,243,178, 34,121, 16,156,232, 44, 75,182, 16, 81, 75, + 7,235, 68,220,215,110, 56,126,120,143,126,204,212, 78, 93,121, 42,118,212, 78,214,176,210, 9,218, 16,125, 82,240, 75,149,158, +165, 61,125,215, 91, 78,207,151, 92, 44, 47,248,232,227, 79,120,227,205,183,120,227,173,183,120,240,240, 1,239,190,255, 62,143, +159, 60, 74, 43,142,141,216, 1,173, 37,162,185, 56, 63,161,239, 59,188,143,180,109, 71,223, 89,138, 50, 39,132, 72,221,202,247, +179, 91,201, 14,148,196,144,138, 64,173, 2, 85,153,143, 47,250,176,218,136,113,187, 34, 25,166, 38, 33,122,242, 97, 77, 49,192, + 90,210, 75, 95, 22, 57,117,211,143, 34,152, 24,228,121,168, 55, 53,104,133, 71,243,202, 43, 95,165,105, 91,218,166,145,238, 81, +171,113,167, 87,148, 37, 85, 85,141,151,112, 94,148, 20,121,129, 54, 57,101, 89,146, 23, 57,104, 70, 13,197, 32,180, 35, 69, 73, + 86,147,106, 76,214, 83, 90,211,185, 86,132,121, 62,117, 92,218, 80,228, 37, 38,121,114,243, 66, 68,119,213,116, 42, 42,226,196, +173,214,166,100,239,198,243,124,246,228, 12, 63, 61,164, 90, 92,231,228,201, 99, 14,175,223,164,169,215, 92,156,157,209,180, 29, +101,153,243,249, 59,191,192,168, 72,112, 14,163, 34, 70,111, 69,168,222,245,178,198, 73, 98,201, 44,207, 81, 38, 29,164,121, 78, + 4,242,178, 36, 26,141, 41,139, 68, 46,148, 72,206,172, 40,119, 14,198,132,133, 13, 34,253,149,209,125,158,198,237,114,226,140, +231,138,201, 80, 89,142, 70, 46, 65,245,133,209,122,122,151,140, 65,101, 89,178,220,101, 59, 69,255, 22,214,163,118,146, 31,213, + 51,227,206, 93, 82,223, 23,239,232,221,247,118,123, 17,111,187, 42,149, 86, 4, 38,253, 85,167,124, 3,117, 73,232,182,253,125, + 25, 90,201, 4, 77,103, 57, 40,137,128, 54, 90,244, 46, 74,107,185, 52, 6,244,245, 80, 63,232,161, 48,145, 49, 60,218, 96,202, + 9, 47,190,246, 77,110,124,245,155,232,244, 51, 0, 2,131,137,145,143,223,252, 25,125,189,194,247, 54, 53, 71, 5,119, 94,255, + 22, 15, 62,252,128,249, 98,159,213,197,146,230,244, 49, 42,203,185,241,252,203,212,171, 11, 41, 24, 77, 65, 62,157, 83,159, 31, +163, 99,164,239, 26,138,170, 2,157,209,172, 46,168,166, 83,250, 8,147,233,148,166,171, 9, 68,230,135,135,244,155,141,192,110, + 82, 87,124,245,249,175,140, 83, 61,165, 52, 85, 85, 49,153,207,201,179, 92,198,252,185, 80,223,150,167, 79,185, 56, 63, 35,116, + 45, 93,151,236,109, 3, 91,101, 71,248, 88,148,213,248, 12,110,211, 4,183,156,145,241,110, 72,107,179, 33,206,123,248,118,135, +223, 35,233,159, 62, 9,157,164,192, 55, 90, 19,162, 0,106, 6,184,211,160, 13,219, 77,193, 86, 92, 14, 78,218, 5, 80, 13,133, + 64,189,233,200,180,231,233,211, 99,250,182,193,165,189,124, 8, 16,188,221, 38,145,178,147,156, 58,196,142,103, 25, 33, 6,166, +211,185,188,215, 89, 62,198,101,103,121, 57,197,118, 13, 49,120,154,182, 38,106,197,114, 85,179, 56,216,199,249,200, 87,111,151, + 60,126,112,141,219, 95,253, 22, 79,222,123,131,168, 68,249,234,250, 14,111,165, 59, 81,153,145, 81, 98,240, 34, 84, 73, 23,248, +110, 28,168,216, 82,118,199, 75,137, 78,165,182,200,199,129,176, 21,134, 10,118, 28, 39,233, 75, 97, 43,222,123,226, 14, 57,110, +232,210,191,128,174, 77, 23,223,110, 62,251, 16,199,106,148, 6,205, 56,117, 48, 64,169, 13,243, 50,231, 31,253,205,223,102,189, +186,224,237,143, 63,229,209,201, 9,117,130,129,244,189,165,233, 58,186,116,153,121,183,229,121,251,244, 96, 28,236,239,211,119, + 22,215, 73,190,186, 15,208,247, 62,209,250,228,115,217, 59,184,194,115, 47,190, 12,192,252,224,136,187, 31,190, 39,194, 35,226, +165,148, 44,249,252,182, 67, 62,161, 79,201,165, 56, 10,111, 80,204,230, 11,234,166,166,183,221,248, 32,201, 90, 76, 19, 73,227, +209,192,104,201, 24,157, 8, 90, 4, 37, 33,147,221,167,128, 99, 92,234,240,114,250,166,165, 40, 10, 76,138,174,245, 33,208,212, + 43, 86,199,143,176,222,141, 99,121, 53,230, 4,132, 17,113, 59,201,243,241,165,145,145,167, 34, 83,233,251, 77, 66, 48,153, 38, +156, 16,116,206,253,135, 15, 4,173,155,214, 36,214,245,137,122,167,201, 50,147,188,221,145, 44,207,152,239,237,209,213, 43,218, +213,177,172, 25,180,192, 40, 54, 77, 71, 94,148,114,153, 61, 3, 45,146, 98,110, 16, 99, 5,138, 49, 82, 86,165,231, 39,219,174, + 25,140, 17, 37,112, 58,116,109, 11, 33,143, 68,111,229,179, 73,172,105,157,233,164,180,213,244,214,143, 34, 47,130,199,247, 45, +203,147, 99,148, 82,124, 58,157, 74,103, 63,157,236, 68, 57,138,226,189,183,150, 92,105,172,245, 84, 85, 41,187,184, 36, 98,140, + 81,118,141, 67,158,188,202, 50,250,190,199,123,177,196,233,116,232,228, 69,153, 46, 75, 77,102,229,189,171, 38, 5,218, 20,244, +125, 75, 83, 55, 68,160, 40,103, 40,163, 5,149,217,247, 76,166, 19, 38,213,132,136,162, 91,159, 97, 52, 56, 27,121,231, 23,239, +114,229,246, 11,220,250, 74, 79,189, 94,142,233,104,206, 58,172, 19,180,166,219, 64, 86, 20, 66,226,138,144,101, 10,239,123, 14, +142,174,178, 94,174,240,206, 97,114, 57, 60, 51, 99, 36,125, 46,147, 29,111,140,158,216,117,210,137,121, 71,232, 45,166,170,198, +152, 99,173,205,200,230, 38,117,111, 49, 70,116,114, 80,168,152, 82, 94, 7,161, 94,218, 35, 15,211,129,184, 51, 21,210,122, 27, + 21,108, 98, 58,200,131,189,132,215,139,207,218,132,190,112,113,199,103, 68,192, 95,140,188,125, 86,124, 55,166, 8, 95,194,244, + 50,234,100,182,253,207,142, 31, 62,173, 72, 6,175,185, 78, 69, 77,112,126, 11,206,138, 17,188,147,238, 62, 8,153,108,248, 9, +181, 82,168, 76, 10,156, 4,151, 23,232, 76,102, 56,188,253, 2, 68,159, 92, 52,145,205,102, 57,118,169, 70,103,137, 88, 22, 32, + 42,110,190,252, 42, 49,159,114,248,220, 29,166,211, 25,119,202,138,139, 71, 83,206,159, 62,228,248,225,231,104,109,232,154,142, +172, 42,233, 86,167,105,194,148,161,157,164, 32, 26, 34,213,254, 1,229,116,198,193,108, 70,179, 89,161,173,172,236,234,205,122, +132,175,232, 24,121,242,240,115, 94, 79, 23,124, 76, 1, 71,218,228, 92,191,113,147,174,235,232,155,154, 79,158, 72,186,228,252, +232,170, 60,247, 7, 7, 44, 14,143,184,120,252, 57, 33, 41,247,173,181, 9, 78,211,210,197,228, 10,138,110, 28,173,235,180,111, + 87, 41,252,101, 16,139, 14, 78, 20,109,178,109, 80, 85,178, 5,199,244,121, 25,149, 38,187, 70,167,166, 5, 20,134, 97, 56, 19, +125, 28, 27,205, 97, 10, 26,249, 34, 91, 65,107,149,134, 66,210, 68,249,208,243,217,103,159,141,211,223,152,244, 85,187, 83,104, + 61,228,189, 39,251,221,144, 58, 26,147,234,191,109,107, 84, 16,144, 90, 4,241,210,255,133,255,224,239,255, 65,223, 55,160, 20, + 7, 71, 7, 92,189,114,200, 43, 55,230,244,125,207, 68, 65,223, 89, 62,123,114,206,100,126,192,234,252, 41,191,247,247,254, 51, +190,245,171,191,198,251,191,252, 37,209,167, 46, 58,205,252,181,145,100,156,184, 35,134, 51, 89,142,206, 11, 98,158, 97, 76, 62, +138,172, 98,138,205, 83,105, 31,185,133, 82,196, 75,227,232,103,189,154,187,123,137,209, 30,167,245,184, 23, 83,169, 19,229,153, +125,203, 46,144, 70,167,226,193,104,141, 86,145, 12, 40,138,140,107,243,156,127,252,119,254, 42,103,167, 39,188,249,254,199, 60, + 62, 59, 99,211, 54, 99,135,222,117, 61,109,215,211,118,162, 76,116,214,209,185, 68,247, 74,118, 51,159, 4,121, 77,219, 15, 59, +135, 52,141,144, 75,253,234,141, 91,188,250,250,215, 0,141,143,129,172,200,153,237,239,211,212, 45,193,217,103,212,141,162, 24, +222, 86,240,250,153, 67, 68, 51,157,238, 49,153, 78, 57,191,194,157,189, 67, 0, 0, 32, 0, 73, 68, 65, 84, 56, 27,173, 68, 91, +171, 14, 99,162, 80, 28, 20,199, 90, 37,149, 59,163, 14,194,239, 4,141, 12, 65, 53, 3, 24,197,217, 45,166,179,107, 54,172,206, +142,233,147, 26,123,155,239,190,141,205, 29, 4, 43, 82, 84,164,161,161, 54, 91,139,226,142,216, 39, 36,165,190, 41, 38,137,238, + 4, 62,136, 0,178,235, 58,185,252,173, 19,229,121,215,211, 91, 75,219,118,108,154, 13, 49, 4, 86, 23,167,146,174, 68, 32,166, +132, 38,235, 44,109, 55, 76,118,134, 23, 40,249, 67,149,188,136,121, 6,123,211, 34,197,154,138, 58, 95, 43, 77, 85, 86, 99,122, + 89, 94,228,152, 76, 39, 20, 37,148,101,182, 85, 95, 15, 10,109,149, 4, 51,218,200,184, 45,117,102,178, 54,145,151,211, 54, 13, + 93,189,161, 15, 96,242,156,106, 50,197,246, 61, 10,141, 15,226,202,152, 76, 42,148, 86, 88,231, 41,203,130, 44, 47,201,138, 50, + 5,190,104, 38,147,138,136,172, 78,242,162, 36, 47, 39,130,233, 69, 81,148, 19, 76,150, 37,158,181,132,228,120, 31,211,104, 63, + 75,140, 9,152,148, 37, 93,215,201,159, 75,139, 95, 92,167,239, 64, 70,253, 66,205,122,238,213, 95,161,105, 54,220,255,240, 93, +110,220,124, 46, 1,120,228, 77, 45, 39, 21,189,237,120,252,201,123,172,206,142,119,150, 55,106,236, 42,154, 90,192, 60, 33,186, +148, 46,103, 32,147,206, 34, 70, 69,112,194, 18,200,140,104, 77,156,117, 66,167,115,142,224, 44, 74,201, 69, 79, 90,105,104, 5, +222,166,177,104,176, 16,189, 0,109,184,140,130,101,136,159, 84,187, 0,158, 56,186, 77, 98,240,242,115, 5, 47, 2, 74,197, 51, + 19, 48, 53, 46,179,227, 56,133,228,153, 57,186, 73,150,177,221, 61,189,254, 2,104,107, 39,190, 38,209,205,164,152, 55,131,101, +111,236,210,245, 51, 10,252,180, 42,244, 97, 20, 4, 15,248,216,224, 7, 27,149,149,231, 61,185, 94,118,185,238, 35, 34, 26, 17, +127,234,172, 64, 87,178, 79,255,198, 15,254, 29, 38,139, 67,114,147, 37,253,135, 31, 39, 88,247, 63,124,135,213,249, 41,132, 32, +137,136, 87,111,211, 47,143,217, 52, 45,121,102,120,240,206, 27,105,114, 87,160, 82,246, 69, 94,100, 4,231,192, 20,248,190, 69, + 87, 19, 50, 83,145,207,167,242,253, 78,231, 28,222,184,201,191,255,247,254, 46,189,213,212,221,134,246, 98,141,171,107,250,166, + 22,194,103,148,141,201,149,180, 91, 86, 74,225,157,136, 64, 3,154, 92,105,214,155, 13,251,135, 71, 84,147, 41, 79, 30,221,231, +211,119,223,164,190, 56,167,171, 27, 17, 42,175, 86,216, 62,229, 89,244, 86, 22,148, 70,166, 60, 90,103,228,121,145, 62,139, 44, + 69, 4,139, 40, 26, 5,202,232,177,141,138, 74,206, 30, 17, 16,171,241,153,137,169, 49, 24,154, 40, 23,194, 56, 69, 66, 25, 50, +109,210,106,140,145,200, 55, 90, 56,227, 23,119,233,187, 53, 98,140, 65,114, 33, 92,154,246, 14,141,231, 78,120,153, 50,106, 43, +246, 77, 77,110, 28, 38,225,200,123,156,167,149,131,100,150,180,152, 31,254, 71,127,255, 15,218,122,141,214,134, 59,119,158,227, +214,205, 3,166, 85, 78,221, 88, 30, 28,175,120,178,234,105,235, 30, 23, 28,175,253,198, 95,226,246,237, 91,188,246,149,219,124, +122,220,112,246,224,174,188, 44, 67, 37,146,196, 62,227,107, 98, 68,168, 49, 63,186,198,205,151, 94,229,198, 75,175,112,253,206, + 11,156, 62,126, 66,196,239, 92, 8,151, 99, 82,227, 78,106,155, 82, 91,114,207, 46, 66, 86, 95, 2,209,196,203, 25,240,169, 74, +247, 67,170,212,176, 18,136,140,212, 45,173, 52, 26, 48, 58, 82, 25,205,181,253,146,127,252,119,254, 61,238, 61,120,192,219, 31, +124,202,211,243, 51,154,174, 77,227,118, 75,239, 44,109,111,105, 59,249,207, 62,200,120,211, 90,135, 77,202,111,231,124,178, 33, +121,188,143, 56, 23,136, 90, 46,129,249,222, 62,183,238,188,200,205,231,158, 79, 15,155,116,164,104, 48,166,224,202,181,171,116, +109,135,109,235, 47, 69, 87, 62, 43,248, 33, 29,232,183,110,221,230,254,195,251,169,235,141,151, 58,133, 65, 95,160, 47,141,224, +213,184,251,150,137,187,216,252, 68,197, 29, 18, 3, 25,156,235, 69, 97,170, 21,206, 7,186,190,103,125,113, 66, 95, 47,147, 26, +148,173,120, 7, 41,144,178, 60,151,110, 41,185, 15, 66,218,173, 87, 85, 53, 22, 13,219,136, 91,149,252,158,134,172,172, 70, 17, + 94,111,133,182,231, 67,192, 58, 65,199,186, 4,142, 25, 92, 15, 46, 56,140,145, 32,149, 16, 45,153,201, 83, 97,229, 19,240,199, +109,227, 62, 99, 28,213,199, 58,189,140,211, 42,163, 48, 30, 21,117, 18, 94, 13,152, 82,159, 42,122,249,123,239, 29,214,202,139, + 93, 85, 5,193,203,126,111,224,145, 7, 34,214, 75,194, 93,223,185,145,152, 56, 88, 93, 98,178,209,181, 93, 77,212, 6, 23, 96, + 50,153,162, 12,148,211, 10,162, 88,115,124,242,192,102, 67,108,100,158,177, 60, 59,197, 91,217, 89,247,222,147,229,197,142, 34, +190,199,246, 45,125,215, 18,131,163,109, 26, 20,208,182,146, 38,136,214,100, 58, 99,189, 90, 50,157,205,105,123,241,226,122, 39, +191, 23,101,164,227,201,133,175,221,117, 22,231,123,154,213, 5, 89, 81,240,198,159,252, 51,238,254,242,103, 60,248,228, 93,232, + 54,220,190,117,139,201,254, 21,124, 90,191, 60,250,248, 61,150,103, 79,211, 69,236,100,156,157,114, 19,178, 50, 3, 45,249, 6, +209, 11,113, 16,173, 18,227,223, 99,170,153,116, 69, 9, 91,107,178,156,168, 21,161,239, 80, 33,121,132, 83,113, 20,124, 32,203, + 11,121,166,179, 12,147, 23,163, 96,105, 0,223,171, 4, 97,209,227,101,158,194,163,162, 79,191,103,123,138,142,176,170,129, 4, +166,205, 40,143, 87, 12,251,235, 92, 82,180,118,194,240,244, 16,112,180,141,185,186, 36,162, 83,207, 8,234,134, 67, 88, 4,123, + 82,204,139, 72, 53,147, 98, 38,132,164,228, 31, 82, 44, 83,238,130,218,166,235, 13,142, 1,217,241,134,113,181,181, 61,207,212, +214,222, 55,140,100,147, 93, 75,103,178,146,168,246, 14, 89, 92,189,198,226,218, 45,190,246,107, 63,100,190, 88, 36,235,161, 23, +177,175, 18,127,200,211, 79, 63,160,222,172, 48,218,176,127,237, 38,203,167,143,241,161, 71, 25,131, 65, 51, 89,236,211,173, 87, +228, 85, 78,223, 54, 40, 34,222,118,168,244, 57, 13,163,243,114,111,143,122,121,142, 71,113,120,253, 22,127,235, 31,254,215,124, +237, 55,127,200,107,223,253, 1, 63,255,241,191, 96,121,126, 76,232,107,112,242,174, 4, 13,202, 24, 38,243, 3,174,222,121, 9, +149,132,144,121, 81, 81, 85, 51,154,182,198,246, 13,211,233,140,117, 93,163, 35,172,207,158, 82, 22, 21,117,189, 18,232,139,119, +100,121,197,226,224,128, 44, 47, 36, 20,169, 44, 41,247, 22,152,106,134,169, 38,168, 92, 64, 90, 74, 25,242, 66,220, 77, 89,158, +141,171,194,108,136,100,245,162,149,177,206,161, 18,113, 46, 12, 88,214, 16,200,242, 60,225,102,147,118, 43,136, 48,118,151, 88, +122,121,210,243, 69, 93,216,151, 9,231,226,142,190,108,176, 11,235,228, 64,216,198, 43,171, 49,155, 3,165, 4,110, 86,148, 48, + 20, 6,189,195,121, 75, 86, 20,100, 42,137, 69,188,119, 92, 92,108,176, 55, 28,217,193,132,131,171, 11,138, 50,103,185,233, 89, +175,106,108,168,232,172,229,222,241, 25,142, 57, 55, 94,250, 26,199,247,239,242,244,195,183,209,198,143,246, 2,141,132,137, 40, +147,145,149, 21, 7,183, 95,226, 63,252,199,255, 13, 89, 81,209,219,158, 39, 15, 31,115,182,110,121,250,206, 79,233,187,142, 16, +133,154,150, 21, 5, 93,219,142,170,246,221,250, 57,124, 73,244,107,216, 77,114,219,197,195,166, 42, 44,164,144,154,161,210,218, + 85,255, 74,247,168, 40,116, 32,207, 50,158,191,118,192, 63,252,189,191,204,135, 31,127,194,187,159,220,229, 98,189,161,237, 29, +109,239,232,250, 30,235, 29, 54,117,235,206,185,241, 66, 15, 99, 40, 75, 28, 17,159,182, 23,136,195, 48,254,150,124,240,140, 91, + 47,188,196,222,254,193, 8, 25, 25, 44, 56, 42, 26,130,242,100,101,201,139, 95,125,141,207, 62,132,229,233, 83, 66, 84, 59, 15, +201,238,223, 39, 37,167, 41,120,238,249, 59,220,189,251,105,122, 32,118, 5, 61,113,188,208, 73,190,230,164,143,150,207,211, 15, +236,129,124, 28,117, 26,147,139,125, 35, 58,130, 23, 47,118,196, 83,215,107,148, 50,116,245,134,118,179, 36, 6, 39,135, 92,166, +192,167,137,140, 50,163, 29,111,248,204,157, 11, 20,121,158,108,108,189, 88, 76,242, 20,247,234, 61,206, 75, 17, 24, 16, 5,173, +117, 18, 9, 27, 92, 24, 29, 15, 33, 4, 17,213,164,255, 60, 20,119, 42, 81,235,138,178, 18, 50, 90,148,233,131,236, 4,183, 30, +222,221,240,146, 33, 90, 52, 18, 41,139, 28, 8, 9, 7, 41,227,125,107, 59, 50, 99,232,250, 78, 66, 87, 34, 20,166,160,137, 46, +185, 22,130,236,163,123, 1,195, 40,163,164,163, 26, 42,232,129,149,144,250, 87,141, 33, 32,106,252,168, 20,190,239,104,250,150, +199, 79,159,114,116,184,143,181, 75,130,117,163,170,126, 62,157, 81,247, 29,101, 53,197,213,146,202,182, 92, 55,236,205,102,216, +174,103,179,188, 96, 50,155,210,108,234,113,159,166,149,194,119, 82, 88,154,244,125,175,215,107,170,170,164,179,210,233,110,234, +205, 96,145, 16,192,204, 14,250, 55,246,129,249,254, 76,198,223, 58, 99,125,113,206, 79,254,143,255, 69,246,246,101, 73,187, 57, +231,239,253, 39,191,199,143, 94,127,137,255,225,143,222,160,109, 26,180, 86, 84,179, 61,116, 86, 82,150, 51,162, 23, 17,224,197, +197, 41, 93,189,161,107,107, 97,191,163, 48, 69, 69,158,101,172,151, 23,104,165,201, 39,179, 20,109, 41,226,159,124, 50,163,111, +106,209,221, 20, 37, 38,125, 71,133,150,136, 85,109, 68, 5,159, 37,145,157,235, 59,217,195, 78,167, 4, 39, 58, 22, 77,132,232, +241,125,122, 78,148, 78,137, 91, 70,214, 70,113,187,183,150, 43, 12, 17, 75,142,153, 17,126, 75,112,132,180,134,242,105,226, 98, +146, 6, 68,143, 99, 79,181, 83, 24,200,122,103, 23,170,181,221,207,139,126, 38,169,173, 35,168, 16, 4,123, 26, 83,113, 49,234, +125, 92,114,152,248,203, 59,250, 1, 67, 10,248, 20,200, 49,232,144,212, 48, 49, 72,207,206,240, 39, 83, 49,146,229, 21, 24,195, +244,240, 42,249,124,143, 96, 50,246,142,174,161, 76, 70,179,217,144, 38,189,227,121,146,105, 77, 32, 96,138,140, 24,146,205,181, + 42, 9, 24,190,246,205, 95,227,163, 55,127, 74,189, 60,101,115,126, 12, 65,145,151, 37, 62,244, 76,166,251,184, 96,113,125, 71, + 94,206,152, 95,191, 73,112,142,189,131, 3,154,190, 71,103, 57, 81,101,252,203,127,242,199, 76,247, 14,184,114,235, 5,238,191, +255,150,176, 56,148,146,231,209, 6,188,238,121,242,224, 51, 94,254,238,175,139, 14, 41, 57, 35, 8,142,166,222, 96,180, 33,203, + 11,190,245,205,151,248,241, 31, 63, 0,109,232,154, 53,121, 94,176,184,126,133,107, 47,188,138,235, 59, 30,127,252, 14,121,189, + 33,134,158,152, 77,152, 45,246,184, 88,175,200,148,194,247, 61,221,234,156,220, 24, 86,167, 79,201,141, 73, 82,155,129, 31, 32, +133,188, 8, 86,183,161, 90, 38, 43,164, 57, 73,124, 10,219,247,105,205, 19,208, 64,166, 53, 46,110,163,188,197,134,173, 46, 5, + 16,238, 82, 77,159,205, 66, 25,154,205, 1,207, 27,194, 51,211,167, 84,240,169, 24,228,142, 14, 17,157, 75, 65,231,156, 39,116, +242,238,149, 85, 5, 10,250,102, 67,240,158, 76,155, 76,126, 80,111, 89, 45, 47, 88, 46,111,114, 95, 53,172, 27,143, 77, 41, 98, + 89,158, 19, 54, 53,205,122,205, 36,219,227,238, 39,143,216, 52,107, 94,248,214,247, 57,121,240, 25,193,245, 72,200,143, 60,184, +160, 68,145,183,119,200, 55,127,244,183,200,202,169,140,124,187,134,174,217,160,179, 50, 17,173, 82,130, 80,100,100, 90,239,102, +171, 15, 9, 82, 38,170,203,252,246,193,182,182, 83,253, 12,148, 58,183, 51,250, 31,108, 12, 3, 32, 96,232,218,132,197,173, 40, +116,206, 87,111, 31,241,159,254,245,223,225,173,119,222,231,163,123,247, 88,215, 29,155,174,163,237,123, 58,219,211, 89,135, 75, +126,232,221,110,209,123,143,141, 91, 40,140,115,142,222,246,233,247,185, 17, 37,168,203, 41,175,126,237,235, 44,246, 15,198,160, +132,224,125,210, 13, 12,190,229,109,184,199,243,175,188,198,103, 49,178, 62, 63, 75,202,199, 93, 33,207, 24,171,197,173, 91,183, +184,127,255,222,206, 97,160,158,137,220,228,210,255, 78,171, 20,151, 42,207,160,136,223,216, 90,250,198,157,143,218,174, 44,188, +151, 78,179,111, 86,216,102,147, 24,222, 10,204, 96,203, 24,194,184,119,144,161,232, 49,184, 70,172, 84, 96, 19,113,175, 76, 63, + 94, 89,149, 88,235, 70,160,138,181,150,182,109, 37,236,103,231,115, 25, 31,236, 49,130, 85,158, 25,101, 50,161,182,169, 12,219, +123,242, 92, 14, 90,235, 60, 58, 72,145, 50,138, 2, 83, 82,147,112,161, 21,133, 1,188, 37,154, 84,173,135,136,237,251, 81,197, + 60,144,168, 98,140,152,164, 21, 41, 39,229, 56, 26,140, 97, 8, 6,218,249,115,167,233,134,188,148,113, 71,156, 40,213,124,145, +231, 76,166, 83, 90,231,104,187,142,229,114,195,180, 50, 56,219, 75,213,157, 23,180, 93, 55,230, 63,139, 64,174,160, 98,150,166, + 34, 25, 58,182,130,141, 53, 2,197,200, 76, 70,211,118,227, 5,144, 87, 21, 10, 40,136,248,190,199,197, 64, 85,148,232,244,157, + 5,165,169,138,130, 88, 41,154,166,145,117,135,247,156,158, 28, 99,187,158, 98, 50,161,179, 2,216,201,139, 10,173, 34,166,184, +201,231, 93,206,113,132, 59, 47,220,225,222,253,159, 81, 78,166,228,213,132,194, 64,219, 53,244,237,138, 96,123,154,229, 90, 54, +137, 74, 99, 55,141,140,128,171,146,122,179, 74, 23, 65,196,219, 22,116,134,170, 42, 76,111,211,164, 66,163,210,200,210, 90, 43, + 62,143,114, 66, 62,221, 35,120, 59, 34,110, 1,178,114, 34, 14, 3, 23,208, 89, 1,190, 79,153,211,253, 51,221,122, 42,226,181, + 76,227,134,127,143,183,219,145,243, 46, 71,223, 15, 90,138,212, 21,101, 89,114, 40, 40,157,252,246, 94, 86,139,121,177,163, 11, +138,130,224,221,153, 84, 26, 99, 80,169, 80, 45, 10,233, 12,189,119,224, 18,173, 77,237,140,104, 71,184, 76,144,245, 84, 18,142, +134,180,235, 29,236,174, 18,172,178, 5,226,196,200, 86,212, 58,252, 36,105,127, 62, 57,186,193,245, 59, 47,112,242,244, 17,122, + 50,161,107, 90, 38,121,197,100,190, 71, 84,242,220,102, 90, 99,135, 78, 57, 74,199,253,244,241, 35,124,178, 95,109,214,231,196, +222,163,243,140, 55,127,242,207, 8,182,167, 44, 39,204,143,174, 98,219, 6, 83, 77, 81,141,193, 69,232,211,132, 55, 43, 74,250, +182,198,213, 13, 93, 83,163,103, 51,174, 60,247, 34,143, 62,255,132,122,179,230,252,244,132,249,222, 30, 97, 8,159, 82,146,198, +136,145,226,173, 62, 59,225,209,221,143,184,118,231, 69,209,129,116, 45,117, 83, 51,153,239,113,176,127,192,100, 50,149, 44,133, +211, 99, 10,173, 8,197, 4,221,119, 60,190,127,143,168, 52,175,126,243, 59,224,191,202,197,147, 7,156,159, 61,197,247, 27,158, +220, 59, 70,155, 92,208,209, 74, 83,205,246, 49,121,198,162,154, 16,187, 22,223,181,233, 60, 11, 99,225, 63,128,188, 6, 24,215, +176, 99, 19, 93, 70, 68,103, 57, 33,233, 91, 98,210, 85, 13, 65, 51,131,248,122, 88, 69, 74,186,218,176,184, 18, 18,157,222, 9, + 79,218, 42,233,216, 70, 18,127, 73,168,217, 64, 9,244,222,203,179,229,135, 34, 51,236,228, 97, 52, 9,143,238,137,209,144,197, + 32, 35, 15,235, 29,103,231,199,124,240,145,225,202,181, 27, 84, 85, 69,211, 52,137,170,163,113, 73,184,212,186,137, 92,106,125, +143, 15,129,107, 47,188,202,195, 95, 94,160, 50,201,157,213,131, 58,211, 24, 94,249,181,223, 98,122,112, 72, 93, 55,180,109,143, + 14, 13,143, 30, 63,150, 7,192,185, 45,175, 61,249, 6,141,210, 98, 15,218, 29, 81, 4, 46,237,216,135,203, 58,236, 84, 59, 3, +128,198, 36, 33,129,218,193,153,234,144, 70,239, 70, 46, 33,165, 34,133,130,210,104,126,229,165,235,252,221, 31,253, 5,254,245, +155,111,241,217,163, 71,212, 77, 71,107, 45,189,243,244,206,138, 48, 40,161, 69,157,115, 66, 7,139, 97,244,186, 59, 79, 26,215, + 8,164,196, 89, 47, 99,120,175, 8, 42, 99,239,240,128,219, 47,189, 76, 89, 85, 56,111,229,192,208, 26, 27,100, 66, 32,234,100, + 80, 33,133,221, 36, 33,199, 75,175,127,157,187,239,191,199,250,252, 84,210,174,118, 22, 49,121, 81,240,149, 87, 94,230,227,143, + 63, 22, 5,232, 51,240,140,173,239, 54,140,127,111,140,140,194, 51,163, 9,189, 35,230, 2,252, 48,202,226,209, 24, 37,182, 24, + 27, 60, 74, 73, 7, 61, 96, 83,187,166,198,182, 53, 42,248,113,172, 62,168,119, 51,165,177,189, 37,166,160, 14,149, 58, 26, 82, + 94,120, 8,162, 25, 24,148,192,195,216,122,179,217,164,189,117,113,105,205,224,131, 8, 32, 51, 35,157,242,152, 57, 16, 3,153, + 54, 34,114, 74,184, 85,107, 45, 65,107,156,149,110,201, 37, 71, 2,201,159, 28,189, 30, 97, 70, 42, 17,151,162,130, 34,215,226, +107,198, 19,130,165,200, 75, 26,111, 41,243, 34, 77, 11,196, 82,147, 23, 57,125,234, 6,147,206,106, 84,174,135, 16, 8, 74, 22, +130,163, 98, 62, 56,136, 26,165,195,152, 68, 55,124, 27, 93,215,161,215,107, 38,139, 67,172,237,105, 90,141,210, 19, 22,243, 61, +202,178,148,139, 91,233, 84,216,165, 4,191, 16,201,203,146, 34,203,136, 70, 49,153, 76, 57, 57,126, 2, 38,103,146, 25,218,182, +193,232, 28,239,122, 34,233,185,235, 58,116,166, 9,126,208,124, 72, 49,101,116, 70, 81, 85,244,245,154,197,222, 62,139,197, 30, +171,213, 90,188,173, 90, 49,157, 77,232, 92,148,203, 50,173, 36, 98,132,197,254, 17,214,101,220,221, 88,230,133,161,200, 69, 44, +151, 85, 21,235,186, 97,125,113, 33, 17,148,222,129, 50, 56,107,177,189,167,216,155, 19, 77, 78,191,217,160,243, 60,137, 72,193, +247, 94,158,149,180,175, 52, 69, 37,163, 92,215,201,120, 61, 61, 39,209, 7, 92,179,193,148, 19, 17,215,209, 67, 94,146, 21, 5, +182,174, 69,192,228,122,217,137,218, 94,216,230,166,148, 51,100, 32, 69,170,173, 80, 50,120, 71, 72,224, 27,231,211,133, 54, 28, +168,131, 24,119, 48,141,166,201,143, 8,183, 18, 38, 59,129,154, 98, 34,254,177,179,187, 15,131,162, 35,147,194, 28,155, 46,101, + 21, 81, 74,214,114, 74, 41,148,217,190,167,158, 40,239,162, 15,224,211,110, 53, 36,200,211, 78, 50,221, 56,130,213, 59, 9,120, +105,236, 30,188, 56,105, 48, 18,229,123,245,246, 75,204, 15,175,178, 60, 59, 97, 54, 63, 68,103, 25, 7, 47,221,230,236,244,148, +253,195, 35, 33, 2,196, 32,163,101, 45,206,139, 1,238,114,245,232,136,186,204,217, 63, 56, 66,103,138,243,167,143,232,218, 30, +179,119,128,243,158, 60, 93, 77,155,122, 13, 23,199,152,114, 74,153,103,244,227, 4,209,211, 93, 92,200,250, 77, 41,166,179, 57, +139,163,171,114, 46, 38, 59,231, 24, 14, 53, 89, 80, 78, 29, 81, 25, 22, 71, 87,201,242,140,227,199,143,121,243,159,255, 19,170, +131,107, 60,247,149,175,114,120,227, 38,205,209, 85,190,241,157,239,161,180,226,232,232,128,247,222,121,155,199, 31,188,201,170, +174,185,115,231, 5, 30,126,238,217, 59,186,134,137,138,139,243, 11,206,158, 60,226,244,209,125, 76,140,216,190, 67,103, 18, 23, + 29, 99,196,119, 27,172,209,168,124,159,162,156, 80, 28, 28,145,153,156,199, 31,190,157,138,178,132,155, 69,161, 85, 42, 34,181, + 34, 6,143, 11,150,188, 40, 32, 10,224, 39,216,128,245, 81, 84,254,206, 75, 65, 31, 44, 24, 41,224,213, 96,173,212, 6, 51, 92, +215, 81,246,251,113, 88,171,196, 32,231, 68,220, 22,121,151, 46,245, 65,111, 17,116, 18, 60, 2,153,161,152,204, 40, 38,123,172, + 47, 78,100,189, 20,163, 8, 20,147, 72, 52, 4,105,220, 50,239, 44, 38,203,177,125,131,235, 29,231, 39, 79, 8,193,137, 96, 37, + 37,108, 13,150,148,224, 29,245,122, 35, 87,133, 82,132,232, 40, 23, 7,163,245, 7, 45,190, 83,101,114,102,215,158,227,206,107, +223, 98,111,255,128,179,179, 53, 39,143,239,179, 89,159, 99,219, 22,215,181, 34, 86, 24,179,166,227, 37,206,242,110,216, 75, 24, +147,213,182,106,210, 81, 85,184, 19,103, 56, 64, 82,116,138, 13,221, 85,156, 10,164, 65, 38, 9,185, 86,148, 38,227, 55,191,241, + 60,127,245,215,191,195, 79,126,246, 11, 30, 30, 63,165,238,172,236,207,221, 96, 87, 11,116,105,103, 19,119,168,111,206, 58,172, +149,125,115,103,163,236,208, 93, 24,201,107, 62, 42,138,233,130, 23, 95,121, 29, 93,108,119,115, 34,126, 9,163,162,187,239,123, +249,179,166,162,205,167, 73,131,140,155,114,238,188,252, 10,159,190,215, 38, 32,132,188,208,215,174,221,224,198,141, 91,188,241, +214,207, 71,235,218,174,248, 66,118,111, 91, 91,204,240,208,120,239,209, 42, 75,193, 61, 50,186,201,115, 61,114,199,197, 77, 32, + 93,170,243,253, 54, 32,196, 54, 4, 55,120, 55,185,100, 21,138, 49,138, 61, 58, 29, 14,104,131,242,126, 7,224,162,211, 68, 36, +237, 42,147,127, 61,238,124,231, 38,229,189,143,153, 98,195,254, 59,141,207,195,128, 32,141,208,187, 30,149,108,129,195, 63, 71, +167, 42,185,222,244,105,103, 94,226,189, 70, 41, 55, 50,146,213,142,178, 80,199, 64,166, 36, 78,210, 24, 65,189, 42,165, 36, 14, +145,116, 33, 32, 69,141, 49, 25,174,173,201,114, 77, 89,230,244,189, 31,121,248, 46, 14,249,198,189, 92,236,163, 23,126,187, 50, + 82,227,190, 85, 10, 44,103, 59, 92,223,226,209,244,105,156, 63,159, 77,169,235, 90, 4, 57, 99,244,109, 78,223,116,100,101, 73, +168,229, 80,148,157,114, 46,206,138,222,178,222,172,152, 77,231, 16, 3,235,181,199,104, 35, 54,177,224,241,214, 50,219,147,169, + 80,219,117,148, 89, 54,130,137,170,249, 2, 61,157,145, 25,195,190,201, 88, 47,151,201,250,164, 33, 4,108,232,153, 76,230, 68, +173,200,179,130,182,174, 57, 59, 57,193,114, 5, 61, 45,121,120,239, 83,166, 69, 73,116, 82, 68, 76,167, 83,234,205, 26,235, 28, + 89,154,158, 77, 39, 21,109, 93,227,194, 18,141,134,178, 66, 35,252,124,147, 23, 2,183, 34,226,189, 18, 74, 37,242,215, 16, 13, + 69, 89, 98,187, 14,101, 52, 58,203,112,182, 69,117,129, 0, 20, 70,211, 55, 29, 42,234,164,242,150,117,145,174,166,178,130, 81, + 98,111,199,203, 30, 61, 58, 55, 10,138,242,178, 74,217, 21, 74,138,195, 29,161,210, 54,131, 34, 36, 23,132, 20,161,193, 89,176, + 18,206,237,147,170, 94, 33,197,192,176, 19,143,131,202, 89,128,155, 99, 62,121,140, 91,219,227,229,228,200, 48, 78,208,198,233, + 64,186, 24,131, 26, 14,242,237, 25, 23,119,224, 91,227, 59, 77,130,244,144, 66,178,162,230,224,214,243,232,217,130,213, 90,236, + 95,117, 93,179, 56, 56,228,193,199, 31, 50,153,237, 49, 63,186, 62, 34,164, 65,177,127,112, 64, 91, 55, 16, 21, 23, 39, 79, 57, +189,184,224,112,177,199,143,126,247,119,249,222,215, 95,230,127,253,167,255,156, 55,255,228,159,115,118,124, 76,110, 10, 86,231, +167,168, 24, 80,125, 39, 46,139, 76,210,252,242,114, 74, 87,175,232,214,107,208, 6,151,154, 14,231,182,225, 41,145, 72,119,113, +202, 47,255,236, 79,152, 31, 28,114,116,227, 57, 92,219, 99,140,226,124,121,142,111,123, 38,179, 25, 46, 4,170,194,112,255,189, +159,241,240,227,138,124, 50,225,231,255,226,255,226,187,191,249,219,132, 31,252, 69, 30,222,253,132,186,243, 76,170, 9,159,191, +255, 22,147,217,158,232,167, 92,207,131, 15,222,165,111, 86, 76,247,246,165,184,110,164, 88,115,193, 19,108, 35,194,105,215,227, +250, 6, 93, 78,169,235,134,201, 94,193,213,231, 95,230,244,222,199, 50,177, 12, 1,157,153,209,143, 31,163, 98,255,250, 45, 54, +171, 11,156,181,152,172,164,172, 38, 28, 93,187,150, 82, 55, 97,115,126,130,109, 54, 82, 56,244, 29, 90,103,194,108,239, 54,224, +210,244, 38,203,100,247,158,154,231, 65,247, 17,113,233, 78, 96, 20,109,142,148,200,212,208,128,168,238,163,146,105, 72,150,222, +137,220,104,122,103, 49, 90,227,108,135,114,201,142,153,118,241,153,117, 22,147,231, 18,241, 25, 35,189,237,185, 56, 59, 27, 17, +123,243,197, 62, 93, 39,163,103,147, 14,234,188, 42, 96, 37, 73, 93,179,131, 35,130, 2,147, 41,188,151,253,188,201, 74,190,254, +131,191,204,222,193,129,204,250,219, 53,245,250,140,174,149,180, 42, 63, 28, 84,105,151, 48,140,147, 92, 8,151,246, 13,195, 62, + 44, 68,208, 81, 93, 2,213, 12, 42,246, 1, 47, 57, 92, 94,227,152,126,184,128,140, 38,250,128, 73,222,232, 92,121,254,210,183, + 95,230,183,190,245, 85,126,242,231, 63,227,201,233, 9,117, 47,222,243,206, 90,185,212,173,160, 57,189,119,120,151,130, 84,162, + 8, 41,172,115,216,222,211,245, 46,197,164, 58,130,219,134, 71, 22,147, 61, 94,120,245,117, 24,226, 51,147,246, 33,203, 76,234, +200,212, 37, 74,208,208, 77,196, 97,140,230,229,210,213,202,240,237,239,253, 6,239,191,245, 38, 90, 43,158,187,115,135,243,243, +115,222,120,235,231, 56,103,199,139,239,210,142, 38,170, 52, 58,122, 54,223, 30,162, 26,246,127,134, 44,106,148, 15, 68,207,184, +174, 32,253,255,114,157,209,245, 29,202, 54,120,219,143, 15,222,238,197, 43, 47, 19,146,129, 14,219, 16,145, 36,114,116,130, 56, +146,181, 77, 31,200,203, 28,149, 4,123,206,187,237,120, 52, 72,246,182,245, 29,244,137, 63,111, 51, 98,234, 78,117,178,192,141, +161, 10, 59, 34, 34,249,108, 53,125,111,153, 76, 12,155,218,147,231, 37, 33, 56,116, 52, 18,198,144, 16, 59, 67,245,107,148,102, + 54,157, 74,119, 27, 60, 74,103,108,234,134,162, 16, 75, 79, 76, 69,142, 82,138,206, 89,124,136,148,101,158,124,202, 34,236,180, +206, 74,170,158, 23, 10,160,140,222, 24,173, 42, 32,197,238, 64,255,146,122, 34, 82,102,197,184,151,117, 38, 77, 44,214, 53,101, +145, 97, 93,143,235,123,202,178,146,162,176,146,245, 84,189, 89,227,157, 64,125,116, 12,180,169,216,173,202,146,174, 93,163, 77, +193,193,213,107, 4,160,239, 58,209,177, 32,227,245,106, 90, 73,174, 61, 2, 40, 9,198,160,179,146,255,252,191,253,239,248,249, + 31,255, 51,254,244, 95,254,145, 8,214,188,195, 7, 77,136,158,197,222, 62,182,109,200,116,134,119, 45, 23,199, 79, 88,157, 93, +112,239, 73,141,114,142,197, 98,159,183,255,236,199,204, 22,251,244,109,139,221,172, 49, 69, 65, 62,153, 98, 55, 27,138,233,140, +222, 89,116, 8, 20,113, 34, 29,104, 83, 19,163, 99,114,112, 69,158,165,190,163,247, 14, 92,130,199,132,128, 46, 39,168,104,136, +198,144, 77, 11,201,138, 70,130, 42,212, 64, 94, 76, 69,112,182,216,147,231,205,121, 92,240,224, 44,193, 9,166, 83,246,221, 30, +111, 59,140, 86,232,172, 16,190,126, 90,227, 13,138,226,232, 29, 58,203, 83,119,239,112,125, 75,116, 1,163, 21,190,107,241,151, + 36,202,140,174,146,160, 6, 0,137, 26,237, 82,146,230, 21, 70, 84,237,144,121, 64, 4, 53,236,216, 47,217,226,146,246,104, 80, +188,234, 65,166,183, 5,219,124,193,237,163,212, 37,224,166, 34, 1,106,140,225,240,214,115,204,110,220, 98,115,242,132,235, 47, +188, 74,177,216,103,249,232, 1,174,239,201,243,130,114, 54, 35, 6,207,242,228,152,114, 34, 73,123, 81,105, 38,179, 41,103,109, +205,197,241, 67, 50, 13, 55, 94,122,141,175,255,214,143,248,213, 87,175, 48,191,243, 50,255,253,147, 83,138,217,125, 78, 62,255, + 72,214, 63,121,193,252,106, 70,104, 55, 44, 79,159,208, 36,129, 98, 57,219, 67,231,149,104, 67,172, 37,203,115,138,170,196,104, + 41,242,108,215,115,247,189,119, 56,188,113,155,197,108, 74, 80,154,165, 63, 38,159,204, 56,212,154,207,223,123,139, 96, 59,170, +195, 43,248,174,166,111, 26,174,238, 31,225, 81,196,174,230,173,159,254, 9, 79, 30,223, 99,179, 92,115,254,240, 83,113, 0, 52, + 29,171,211, 99,153,100,205,246,216, 91,236,211, 52, 23, 20,101,142,142, 21,209, 7,154,245,121,138, 14, 55, 20, 69,137,183, 29, +118,185,196, 21, 45, 69, 89,176,172,215, 28, 92,187,129,201, 43,156, 93,146,231, 89, 10,104,114,228,211, 57,123, 87,174,179,218, + 52,152,162, 16,205,144,235,105, 87, 61,247, 87,231,204,174,220,192,152,140, 43, 55,158,231,241,231, 31,209, 53,205,104,171, 46, +247,175,160, 54, 25,120,209,121,216,182, 29, 27, 21,239,182, 81,201, 36,173,213,136,185, 77, 28, 9,209,139, 57,225,123, 88, 11, + 74, 51, 63,188,138,235, 58,218,174,147,201,128,120,209,137, 49, 80,228,197,152,191,224,157, 76, 38, 50,103,123,138,178, 74,138, +209,136, 11, 30,229, 68,221, 13,208,157,244,100,229,132,178,154,140,151,145,182, 33,117,247, 29, 89,150,147, 77,102,216,149, 67, + 43, 15,153,230,240,165,175,178,119,253, 38, 93,211, 18, 9,156,159, 29,167,156,104,141,119, 30,215,181,226,197, 75, 88,189,173, + 71,239,139,106,246, 24,159,137, 96,221, 65,204,142,248,188, 52,118, 85, 59,216,167, 44,117,236, 25, 74, 70,120, 70, 83,233,200, +239,124,251,235,252,234,107, 47,240,227,127,253, 6, 39,231, 23,212, 86, 70,149, 93, 26,223,202, 47, 17,114,141, 23,186,247,216, +224,113,214,210,247, 61, 93,215,139,128, 46, 68,188,143, 73, 12,165,153,204, 15,120,254,229, 87, 65,103, 35, 54,115,248,153, 92, +242,154,238,166,156, 41,149, 66, 85,180, 78, 10, 76, 18,224, 64, 2, 80,110,222,188,197, 43, 47,188,200,219,111,255,146,247, 63, +120,159,166, 89, 75, 37, 10,151,186,241, 93, 33,221, 86, 45, 25, 71,166,251, 48,254,210, 70,141, 93,198,144, 92,164, 52,163, 2, + 28,133,176,138,187, 6,111,187,241,243,189,132,245, 77,246, 60,177,124,196,113, 31, 63, 70,230, 42, 9,198, 25,108, 74, 74,107, + 76,250, 94,131, 19, 92,175, 31, 83,219, 96, 82, 78, 40,138, 41, 69,145, 39,129,157,197, 58,143, 9, 89, 18, 61,169,109,250, 94, + 98,159, 75, 76, 34, 99,154, 95, 85, 85, 88,103, 89,215, 46,141,200,183,246,200,209,118,167, 34, 89, 38,159,203,100,182, 79,219, + 54,156,158, 95, 80,228, 66,115, 19,193, 18,152, 44,167,222, 52, 96, 36, 46, 54,203, 50,177, 39, 70,228,187, 78,147,131, 1, 63, +169,148, 30,253,249,234,153,116,180,193, 35,139, 74, 41, 81, 49,226,209,228, 64, 52, 74,194, 31, 14, 22,163,227, 99,248,115, 74, +218,157,128,101, 68, 32, 35,234,127, 23, 35, 69, 81,224,108,143,201, 75,178,188,196,152, 12,219,247,104, 34,157,237,100,220,105, + 61,237,102, 13, 90,227,243,156,216,247, 76,167,123, 28,220,124,158,135, 23, 1,125,235,101, 50, 35, 65, 53,104, 45,221,140,117, +100,123, 19,202,131, 5,237,234,148, 44,155, 18,154, 53,203, 39,247,249,249, 79, 26,126,237,123,223,224,218,237,231,120,242,240, + 51,166,199, 2,237,153, 92,185, 66, 83,215,226,122,169, 38,212,155, 13,224,164,216,212, 25,237,122, 73, 94,230,228,249, 28,147, + 85,180,205,169,248,168,123, 75, 94, 85,178, 46, 75,223,143,237, 58, 76,102,232,235,150,201,254, 2, 91, 55, 4, 21, 49,121, 70, + 81,150,178, 2,219,172, 19, 35,163,199,118, 77,226, 44, 10,168,197,183, 50,221, 32,121,211,125,240, 24, 72, 46, 15, 57,103, 84, +112,194, 91, 0,148,115,152,164,192, 15, 56, 84,212,226,249, 86,131, 69, 76,143, 0,146,113,138, 20,197, 22,154, 37, 37,181, 75, + 10,114,162,219,166, 81,142,108,236, 45, 3,227,146,131, 37,237, 83,135,169, 84,220,217,241,127,169,152,106,107,222,217,118,114, + 8,191,255,224,197,175, 9, 86,181,200, 89,249,192,106,185,162,176, 61,235,179, 99, 76, 81,162,140, 97,125,118,198,163, 79, 63, +230,224,230, 45,218,122,133, 49,154,253,120,136,214, 50,193, 57,125,120, 31,215,247,204, 15,175,243,193,123,159,203,132, 40, 26, +190,254, 27,191,195,189,255,233,127,148,212, 72,219,210,156, 62,102, 54,159, 19,141, 88, 42,189,179, 84,243, 61,186,182, 37,116, +231,236, 29, 94, 35,186, 62,229,138,151, 40,109, 56,190,119,151,211, 71, 15,184,118,227, 22,235,139, 11, 62,254,248, 67,174, 30, + 93,197,219,142,227,251,159, 82, 47,207, 40,103,251, 20,211, 25,231,199, 79,184,114,231,121,138, 98,194,227,187, 31,145,149, 37, +179,163, 43,168,182,229,241, 39,239,179, 57,123, 58,134, 47,133,190, 39,248,158,102, 89,227,250,154,213,233,147,148,134,105,209, +232,196,120, 7,103, 27,202,249, 62, 49, 56,114, 3, 69, 49,197,111,106, 54,231,167,228,213,132,122,189, 38, 95,236,211,119,155, +212,217, 71,242,106, 66, 83, 55, 52,245, 93,180,138,184, 32,194, 77,103, 59,116,150,227,173,149, 38,197,228, 60,168, 87,204,175, +221,230, 32,203,201, 51,195,163,187, 31, 81,106,205,166,105, 48,229,148,201,193, 30,251,121,198,249,147,135,233, 29,247,232,129, +227,158,222,121,159,166,155, 62,132, 75,107, 86,121,182, 50,170,197, 2,147, 27,154,149, 76,176,134,251,114,120, 46,109,215,146, +151, 69,210, 17,201, 26, 55,243,174,151, 17,153, 78,162,142, 40,187,205, 76, 39, 54,120, 12, 16,253,184, 15,202,139,156,233,116, + 70,215,214, 18, 91,231, 28,211,253, 3, 46,214, 75,162, 50,228,229,156, 87,191,251,125,136,145,174, 94,177, 90, 45, 89, 47,207, +119,242,184,165, 83,223,221, 31, 12,187,223, 81,245, 30,183, 23,210,229,209,172,122, 6,204,162,198,204,111,118, 16,176, 49,141, +139,115, 45,163, 96,173, 2,149,134, 31,253,234,107,124,227,165,155,252, 63, 63,251, 5,199,231, 75,218,116,137,143, 29,186,243, + 35,137,203, 37,155,154, 79,236,108,235, 44, 93,223,143, 0, 26,231, 60, 62,113,220, 81,138,233,222, 33, 47,190,250, 58,166, 40, + 70,108,173, 26,119,197, 97, 20,246, 13, 97, 30,195,139,107,173,197,107, 77,151, 58, 17,147,246,104,218, 40,222,255,232, 35,206, +143,143, 57,121,250, 68,208,172, 33, 25, 59,241, 59,182, 8, 70,133,238,128, 54,189,100,169, 8,106, 75,239, 75,151,176, 73,118, + 58, 83,228, 73,113, 26,100,135,212,247, 68,215, 17,146,126,226,217,220,231,221,159,121,152,140,236, 68, 99,165, 75,219,164,121, + 82, 82,130,166,239,220,104, 13, 90, 16,171, 99, 28,105,114, 28, 25,163, 69,160,150,145, 44, 76, 34, 54, 11,131,127,126, 7,198, + 16, 19,118, 52, 36,205,128,243,158,243,243, 53, 81, 23,162, 54, 31,196,133, 81, 95,210, 96,164,108, 45,186,206,209,116, 23,148, + 69,206,222, 98, 38, 1, 41, 49,160,117,206, 16,212,187,183,191,160,235, 59,233,192,245, 54,210,179,200,114,177,219,245, 66,125, + 26,138,169,109,245, 61,228,154,196,113,228, 63, 20, 85, 33,133, 62, 40,165,241, 86,209,183,138,144,121,234,186, 96, 50, 21, 75, + 95,158, 44, 42,222, 58,242,201, 68,226, 94, 11, 89, 95,204,230, 19, 17,130,134,136,239, 26, 52,162,103, 8,108,198,149,134, 41, + 74,218,205,122, 28,249, 85,213,132,195,107,215, 68, 53,139, 98,255,230,109,154, 77, 13,222,147,103, 21,101, 9, 94, 41,170, 73, +201,115, 55,111,176,152,237,113,245,202,117,170, 42, 99, 58,157,210,245,150,201, 12, 96,195,241,219,111,178,167, 12,207, 31, 29, +242,254, 7,239,162,179,140,229,106, 45, 84, 35,167, 48,121, 65, 81, 58,108,221,163,156, 99,179, 57, 37, 83, 17, 91,247,244, 62, + 82, 76,231, 68, 47,211,173,114,239, 0, 85, 84, 52,245,154,204,128,206, 10,242, 73, 37,221,114, 85, 98,173,199,148, 21, 49,138, +111,184, 61, 63,195,187,142,124,190, 64, 89, 75,223,108,208, 69, 65,244,160,243,156,232, 28,249,100,134,201,139,132, 80,214,100, +222, 74,162, 87, 18,186,129,136, 5,163,119,105,167,169,229, 45,218,161,116,237,146, 7, 7,112, 85, 24,248,117,218, 80,236, 29, +146,229, 57, 54,229, 10,204,102,115,121,127,251, 78, 86, 5,232,145,139,176,155,176,198, 86,233,178,179,150, 81, 91, 16,212,176, + 74, 28, 69,191,113,220,221,203,152, 63,185, 89,130,128,238,181, 82,148, 7,215,176,109,205,139,191,242, 45, 62,255,229,155, 66, + 90,244, 29, 89, 54,167,174,123,202, 16, 81, 24, 44,158, 95,252,203,127,202, 55,127,248, 35,174,191,248, 10, 23,199, 79, 57,123, +252, 0, 85, 84,204, 38, 21,231, 39, 39,168,224,200,202,130,102,189,230,157, 55, 62, 96,113,116,192,100, 58,167, 71,166, 70,155, + 51, 79, 94,228,180,117, 67, 49,147,207,169,156,204,112,182, 23, 81,161, 87,244,205, 10,147, 21,180,155,154, 96,206, 8,109,205, +187,255,239,143,137, 94, 88,236,222,119, 76,247, 14, 56, 59,125, 66, 94, 78,152,237, 29,176, 60,126,194,116,230,105,235,134,253, +107,183,233, 55, 27, 84,166,152, 46, 22, 88,231, 56,127,114, 76,166,100,202, 72,242,175,120, 47, 49,150, 33,126,235,103,147, 0, + 0, 32, 0, 73, 68, 65, 84,145,241, 66, 47, 83, 55,235, 3,173,247, 18,143, 92, 77,136, 86,180, 36,193, 73, 86,133,202, 12,218, + 59, 40, 52,186,207,209, 40,234,211, 39, 84,211,153, 56,117, 38, 51,170,204,224,162, 34, 79,130, 92,219, 53,204,247, 15,101,130, +231, 39, 41, 22,184,166, 62, 57,134,225,156,246,142,147,205,146,217,124,159,163,219, 47,210,110,150, 20,243, 25, 6,133,239, 91, +124,121,192,244,232, 26,205,217, 9, 33,133, 30,133,116,207,146, 66,150,134,103, 35, 38, 33, 53, 73,255,161,148, 65,101, 37,117, +221, 18,130, 5, 47, 40,229,129, 34, 24,135,230,201, 90,178,114, 2, 78,161, 99, 36, 11, 78, 48,121, 58,203, 8,174, 79, 88, 76, +233,194,108,218, 57, 5, 31,164, 74, 67, 49,157,207, 88, 28,236,209,187,142,102,179,130,232,201,171,169, 96, 42,209,220,249,198, +247, 80,121,133,237, 90,188,214, 50,198, 14,113,199, 56, 47,201, 53, 90,105, 73, 2, 75,151,176, 74,132,167,225, 2, 28, 46,191, +225,178,215, 73, 73, 28,158, 25,175,135,103,140,253, 99,230, 91,234,148, 53,145, 60, 6,254,202,175,125,141, 87,111, 94,229,207, +223,120,139,211,243, 37,173,243, 88,231,147, 40,110,184,208,229, 2, 23, 17,220,224,137,246,116, 86,178,207,219, 86,126,245, 54, +161,252,162,248, 44,103,139, 67,158,255,202,171, 40,147, 39,144,137,194,169, 65, 97, 26,198, 76,242,203, 62,237,237,203, 63, 8, +253, 68, 81,158, 68,101, 41, 84,225,224,234, 85,154,174,195,159,157,226,172,144,224, 37,248,101, 11,154, 25,184,248, 90, 15,158, +126,189, 3, 60, 48,137, 80,149,246,212,128,245,110,228,130, 15,209,109,193, 57,202, 76, 83,119,237, 54,130,240,223,240,127,187, + 76,129,225,187,113,206, 97,244,206,119,160, 52, 70,169, 49, 83,219, 90,187,165,132, 13, 63, 51, 34,236,176, 93, 75,112,158,162, + 44, 49, 69,150, 14, 71, 81,153,102,137,181, 62,216,210, 66,240,137, 84,231,197, 51,171, 4,185,218, 39, 46,187,210,195,103,172, + 47,157,170, 49,249,125, 5,145,171,137,193,211, 54,109,218,253,217, 17,196,227, 98, 36,246, 93,210,102, 4,130, 11, 99,238,124, +212,194,179, 47, 39, 21,125,107, 89,175,219,157,176,133,203,120,200,241, 32, 87,105,175, 91,228, 56,140,168,110,181, 22, 11, 86, +140,212,117,141, 41, 36, 66,213,118, 34,208,243,222,210,180, 66, 64,235,109, 47,140,252,245, 5,104, 67, 53,157, 97,178,146,166, +105, 89, 44,166,116, 93, 77,179, 92, 10,104, 36, 69, 74, 18,163,140,152,163,199,181, 45, 89, 89, 81,100, 57,139,197, 33, 83, 19, +184,121,109,159,151,255,202,143,184,121,253, 10, 85, 53,225,236,244,148, 7, 15, 30,240,244,244,148,183,127,249, 11, 30, 63,126, +194,197,122, 69,151,128, 35, 89, 94,224, 81,216,118,195,164,154,112, 84, 85,108,186, 14,242,156,182,235, 8,182, 97,243,244, 33, +138, 64,187, 90, 82,149, 5,161,235,105, 92,143, 34,144,103,133,136, 45, 21,162,169,233, 91,178,178, 36, 43, 43,130,202,201,139, + 10,215,247,100,101,142,106, 35,209, 54,226,205,159, 78,112,125,143,201, 53, 89, 54,167, 44, 43, 86,155, 53,198,228,216, 70,254, +251,232, 83, 99,224, 3,125, 16,157, 73,244, 33,229,130, 27, 84,148, 67,116,240, 36, 71, 21,183,120,217, 24, 19,113, 49, 38, 60, +103,216, 74,204,119, 9,114,218, 48, 59,186,138, 79,174, 14, 83,150, 20, 38,195,246, 22, 99,114,178, 89, 65, 17,231,184,122,141, +247,189,124,231, 73,168,183,203,143,103, 87,185,126,169, 27,223,157,173,139,198, 97, 36,108, 2,154, 48,230,163,155,168,136, 89, + 69,145, 23,152,178,226,209,103,159, 11, 3,221, 59,206,238,223,103,249,248, 49, 58,207,113, 77, 75, 8,158, 98, 58,193,118, 45, +239,253,249, 79, 56,189,255, 57,251, 55,238, 80, 78, 38,116, 93,205,253, 15,223,193,117, 27,166,211, 25,127,246,135,255, 27, 95, +253,238,111,114,116,227, 57,178,204, 80,204, 22, 28, 46, 14,248,232,211, 15,241,222, 51,223,191,194,242,233, 35, 92,221, 80,237, +205,105,235, 84,196, 16, 41,102, 11, 22, 87,142, 88, 47,151,248,213,138,216,119,252,248,127,255,159, 49,153, 32,130,171,178,164, + 42, 14, 56,125,122,159,249,209, 85,192,177, 58,125, 66,166, 21,182,109, 41,231, 11,178, 34,163,113,176,126,248,153,196,192,102, + 5, 58,207,132,243,129,193,246,141, 48, 9, 18,253, 13, 43,161, 74, 33,207, 69,152,171, 21, 89,169,133,182,215, 59, 84, 89,162, +130,176, 38,242, 65,195,148, 11,207, 98,178,191,143, 15,112,176,191, 79,125,113,198,100, 49,199,118, 22,227, 17, 30,188,109, 41, +230,115, 80,153,112, 67,240,184,214, 82,204,166,216,190, 99,178, 56,144,130, 63, 70,130,237, 40,138, 18,235,122, 46,158, 62,144, +226,249,202, 45,150, 39,143,137, 26,234,139, 51, 14,174,222, 64, 21, 83,150,247, 62,148,169,204,240, 61, 15,162,239, 49, 88,204, +108,207,111, 34, 89, 53,197,118, 29,190,171, 9, 33,146, 23,165, 56,205,124, 0, 31, 49,166, 20, 1,118,140,116,109,195,245,231, +158,103,185,188, 32, 3,112,182, 39,207,115,124,155, 82,140, 70,230,178, 92, 2,193,121,154,186,230,234,205,155, 20, 85,197,141, +235, 11,188,179,172, 46,206,133,139,107,114,136, 80,236, 31,242,252,107,223,192,228, 57,206, 89,234,141,140,217, 69,233,157, 20, +238, 68,220,224, 5, 38,224,113,104, 50, 66,144,238,207,164, 17,244, 32, 44, 24,254,208,121,150,225,158,205,102, 31,168, 59,195, +152,219,139,178, 80,167, 49,132, 81,145, 34, 51,252,238,247,191,193,203,215, 15,249,233,219,239,114,124,177,150, 93,184, 31, 46, +245,173, 48,206,122, 47,248, 83,239,101,204, 27,124,218,175, 91,186,222,210,119, 78,226, 94, 19, 23, 66,105,205,116,126,196, 43, +175,127, 93, 68, 64, 32,182, 44, 32,186, 33,157, 42,209,219, 50,177, 97,149,101, 65, 8,158,222,246,228,153,128, 40, 38,149,248, +159, 7, 81,222,174, 15, 54,160,184,241,220,109,130,247,172, 47,206,240,110,184,216,253, 14, 57,110,123,201,199, 4,130, 25,198, +124,146,238, 22, 68,196,152,132,143,104,177,103,121,229, 71,107, 83,149, 27,214,203,243,157, 49,208,151,231, 60,147, 82,221,118, + 67,123, 6,200, 79, 8, 17,103,211, 5,236, 35,121,110, 80, 90, 44,109, 38,217,246,134, 88, 92,175, 52,166,170,200,242,156,178, + 40, 83,101, 10,222,249,203,252,108,173,200,116,158, 72,131, 73, 45,140, 32, 38, 93,114, 29,216,190, 39,102, 85, 42,156,134,174, +222,143,107,130, 33,201,111,184,168,157,239,233,122,217, 99, 9,111, 64, 34, 90,135,213,192,192,129,215, 74, 73, 88,141,113,151, +199,236, 94,145, 23, 25,101, 89,176,217,212,255,246, 80,237, 4, 22,233,218,142,108,190,128, 86, 44, 88, 58, 4,233, 20,203,146, +190,237,216,155,207,200,114,161, 12, 42,163,177, 77, 67, 52,154, 98, 58, 19,136, 9,157, 80,231,154, 13,121, 53,165, 42, 13,103, + 79, 31, 18,134, 85, 64,215,203,187, 86, 24, 10,147, 81,230, 5, 55, 14, 22,188,246,202,203,188,250,202,171, 92,189,114, 68, 54, +153,243,232,179, 95,112,239,225, 67, 62,249,252, 83, 30,125,126, 95,190,243, 40,130,207,224, 4,236, 19,188,172, 70,226,238,193, + 3,184,224, 57, 61,125, 74,232, 29, 74, 27,246,239,188, 68,116,142,254,226,140,110,181, 68,107, 17, 70,246, 93,155, 64, 84,194, + 14,176,209,166, 76,119, 5,222,226,189, 67, 11,228, 0,163,229, 29,192,121,156,237,133,205, 94, 77,161,174,241, 93, 79,232,122, + 52, 80, 30,236,179, 89, 94,176,152, 47,216,212, 27,178,178, 32, 4,135,171, 91, 76, 85,166, 51,200,165,116, 56,145,176, 73,151, +230, 80,105,106,166,180, 92,142,243,253, 35, 54,235,117, 18,129, 14,234,198,144, 82, 91,147,134,103, 27,228,142, 46, 75,102, 87, +175,211,174, 86,184,182,147,245,161,113,152, 20,182,163, 50, 77,183,218, 80, 45, 14,217, 92,156,130,239, 18, 77,143,173, 56,110, + 55,114,117,135, 26,169, 7,167,199, 72,132, 19, 75,168, 79,228, 50,165, 53, 58,229, 38, 68, 4,172,115,229,246, 11, 52,235, 37, + 87,111, 61, 71, 95,183, 76, 23,123,156, 63,252,140,126, 85, 83, 93, 57, 32,223, 59,226,224,232, 10, 58,192,217,249, 9, 89,211, +129,247,156, 60,186,199,201,227, 7,180,245,138, 44,175,176,125, 71,240,150, 60, 43,113,161,229,141,255,251,255,228,250,243, 47, +115,251,229,175,179,119,112, 72,223,183, 2, 21,242, 61, 23,247, 62, 97,126,116,141,233,193, 1,203,227, 83,113, 34, 36, 43,149, +175, 47, 56,237, 90,129,186,104, 18, 42,248,156,195, 91,207, 99,148, 98,117,246,132,117, 8,244,137,143,241,244,163,247,152,236, +237,179, 56, 60, 98,117,126, 54, 6,185, 52,199,143, 49,101,133,242, 1,165,197,201, 68,128, 24, 44, 89,150, 19, 8,244,109,131, +209, 97, 11,118, 73, 62,127,121,246,133,172, 22,173, 69,225,152, 47, 22, 52,117, 43,169,105, 42,210,246, 13,209, 71,154, 20,123, +124,124,113,134,173, 87, 40, 5, 89, 49, 33,102, 17,173, 34, 36, 90,163, 46, 10,209, 74,232,140, 98,146, 37,127,186,162, 89,175, + 41,170,138, 16, 28,109, 43,193, 78, 98, 75,189,192, 7,207, 34,191,201,193,181,231, 56,123,252, 0,147,103, 52,109, 3, 10, 22, + 87,110,176, 60,121, 50, 6, 8,145,184, 7, 74,171,157,105,132, 18,209, 49,164, 84,206, 20, 45,174,181,228, 42, 36,224, 77, 89, +205,176,109,147,116, 28, 25,202,119, 92, 28, 31, 19,108, 47,150, 54,217,209,165, 81,172,243, 40,187,225,252,226,140,232, 44,125, +103,153,204, 23,120,219,224,219, 13,123,251,251, 44,114, 69,115,113, 65,115,113,142,237, 91,148, 23,186,211,141, 87,127,133,147, +243, 51,202,114, 34, 35, 45,160,109,219,145, 32, 6,138,205,234, 12,163,227, 40,208, 50, 81,227,198,140,112, 63, 50,122,119, 19, +216,132,238,227, 47,153,245, 7,210,220, 24,205, 58,166, 26, 41, 9,152, 0, 74, 13,191,251, 27, 95,231,165,107, 7,252,244,237, +119, 57,185, 88,210,165, 32, 22,235,131, 64,101, 6,171,154,115,120, 39,208, 20,235, 29,125,194,191,118, 93, 71,215, 89,249,229, + 44, 54,101,110,163, 21,139,195, 43,188,244,213,175, 17,181,162,183, 2,191,232,109,155,128, 44,169, 91, 54,154, 34,151,160,145, +233,180, 20,214,122, 20, 60,232, 16, 54, 99,157, 8, 76, 76,102,100,172,239,253, 88,189, 77,170, 10,165, 20,207,189,248, 34,159, +125,226,217,156, 47, 83,241, 98, 80,218,239,116,233,122,136, 1,130, 32,159,137, 73, 7,178, 28,176, 59,248,221, 8,133,201,196, +158,215,247,236,205, 42, 46,206,207, 46, 93,232,207,118,228,113,199,105, 48, 92,206,195,229,206,232, 88,144,113,238,192,234,118, +222, 83,152,124,236,212, 81,160, 82, 74, 86,215,123,166, 51, 67,136,242, 89, 75, 84,135, 65,231,122, 27,169, 27, 2,222, 37,223, +104, 98, 97,199, 24,232,157, 37, 88,199,102,179,150,139, 36, 47,105,221,150,210, 52,216,108, 96,187,167,142, 41,150,179,237, 68, +209, 28,162,236, 85,135, 92,243, 49,145,109, 80, 28,251,196, 25, 80, 58,233, 65,242, 81,125, 76, 16, 0, 69, 81, 21,212, 77, 61, +134,198,124, 49, 83, 91,145,153,140,197,193, 33,231,203, 85,154, 22,196,116, 16,201,147,237,218, 38,249,225,115, 98,204,196,173, +161, 20,139,131,125,250,174,195,164,208,139,253,249,140,190,107,105,234, 13, 69, 46,202,239,214, 71, 22,211,138,233,228, 64,146, +197,181,102,177, 88,176,183, 55,231,202,149, 43, 88,107, 57, 59, 61,227, 15,255,240, 15,121,122,124, 76,239, 93, 98, 44,216,244, +188, 91,194, 78, 40,207, 16,116, 17, 99,196, 39,178,219, 46,228, 60,142,241,146,178, 18, 57,254,248, 61,170,217,148,250,226, 20, +237, 21, 62, 6,200,140,144,193, 84, 18,232,121, 9, 6, 10,182, 67,169, 82,220, 30,209,163, 98, 78,187, 94, 98,108,207,180,156, + 72, 7,141,194,214, 13,217,164, 76,197, 68, 96,126,112,200,242,248, 17,205,234, 12, 99, 50,106,231,168,230,123,236, 29, 94,161, + 93,111, 88, 47,143,137, 14,233, 86, 93,143, 87,113, 27, 20, 37, 3, 83,124,244,130, 9,205, 10, 17, 80,230, 37,218, 52,168,144, +145, 87, 83, 1,237, 52,235,244,189,123,166,179, 57,171,243,179,244, 89, 4,242, 98,194,234,248, 24,239,122,166, 7,251,228,179, + 9, 33, 68,138,201,148,104, 29,206, 89,242,178, 32,120,139, 41, 38,184,214,166,127,191,223, 82, 29,119, 86,139, 99, 42, 98,132, + 24,117,194, 67,169,241,204, 80,169, 57,136, 99, 6,183, 17, 77, 33,194, 12,105,215, 43, 22,215,110,209,247,158,217,193,130,227, +135, 79, 41,231, 11,170,131, 43,156,124,122,151,105,221,209,157,159, 51,217,219,227,197,215,191, 77,140,240,224,163,119,105,154, + 53,121,105,208, 33,146,155,140,217,245, 3, 66,215,225,131,101,177,127,192,201,131,123, 60,250,224,151, 60,248,224, 29,204,100, + 70,119,113,142, 93,159, 17,108,155,138,151,138,222, 5,170,171, 87,232, 47,150,100,113,104, 2,197,177,211,183, 45,121, 53,101, +121,246,132,104, 45,255, 31,107,111,214,107,217,118,158,231, 61,163,155,221, 90,187,173,230, 84,157,150,189, 72,217, 82, 68, 67, +145, 34,201,177, 13, 27, 70,236, 0, 1,114, 23, 36, 65,126, 67,174,114,175,235,252,134,252,132, 24, 72,144,139, 64, 18,226, 8, +233,164,216,162,104, 89,148, 68,137, 61, 79, 91,221,110, 86, 55,155,209,229,226, 27,115,238,181,235, 20, 69, 58, 73, 1, 4,139, +181,139,187,214, 94,107,206, 57,190,230,125,159,119,247,234, 25,147, 15,196,126, 11,198,208, 86, 13,219,231,159, 1,138,241,118, +195, 62, 14,104,109,184,185,122, 73,119,216,224,186, 22, 69,133,107, 42,108,221,162,181,230,208, 15, 24, 99, 36, 17,113,127, 43, +252,134,110,205,118,115,205,116,123, 91,112,169, 5,225, 58, 14,242, 57,215, 53,126, 26,217,222,222,160, 51,168, 82,184,107,103, + 81, 74,104,152,227,126, 75,246,129, 20, 38,172,171, 68,211, 17, 36,159, 32, 5,143,153,237,189,218,200, 68,166,174,192, 58,116, +219,160,135, 17,165, 51,104,203,170, 91, 51, 21, 61, 71,234, 7,208,137,253,245, 75,236,227,183, 89,157, 95, 50,110,174,153, 54, +215, 50,101,169,106, 86,151, 15, 9, 67,191, 76,110, 93,101, 65, 89,170,166,195, 84, 77, 17,168,190, 2,162,168,242,115, 2,101, +229,247, 74,194,192, 92, 99,201, 49, 81,119, 39, 76,227, 68,211, 86,244,187,196, 88,114, 26,108,202, 25,130,167,170, 91, 84, 78, +252,228, 47,254, 13,251,231,159,148,184,205, 1,163, 21,235,183,222,145,212, 28,231,184,122,254,140,241,176, 67,229,204,245,179, + 79,136, 41,177,221,220, 48, 22,155, 81,101, 29, 67,127, 16,219, 86,169,128, 81,142,203, 71, 15, 57, 63, 63,231,111,190,189,165, +170, 91,116, 18,165, 61,179, 42,187, 24,129,238,141,167,239,101, 14,223,133, 36, 28, 91,218,102,100,108,230,110,151,169,148,194, + 41,248,167,223,252, 42,239, 60, 88,243,173,239,124,151,155,205,182, 28,202, 34,130,243,197,190, 38, 2,185,184,196,236, 77, 81, + 48,176, 97,154, 24,167,145,195, 24, 24, 7, 25,191,199, 52, 43,201, 53,167,231, 15,121,231,139, 95, 38,170, 12,175, 41,217,199, +215,236,102,211, 32,227, 92,111,166,123,154, 0, 93,132,114, 66, 41,131,170,114, 69,144, 21, 23,142,186,177,194,228, 54,206,242, +133, 47,127,149,159,252,224,123,236,174,175, 75,152,197,241, 8, 62, 45, 33, 3, 2,221,209,247, 68,135,179,143, 63, 31, 61,184, + 51,137,117, 87,113,123,125,181,228,159,243, 90,194,213,252,111, 28,147,178,244,226, 5,190, 35,252, 29,219, 15,103, 16, 16,101, + 92,153,138,221, 79, 27,141,181, 8,129, 79, 57,170,186, 89, 10,131, 80,132, 75,218,154,101,175,152, 82, 20, 48,201,236,227,212, +242,247, 98, 28,241,227,196,216,247,212,198, 72, 81, 88,170,218,156,239, 54,152,119, 19,140,242,136,141,119,241,137,222, 23, 24, +196,146,173,124, 23,254, 35,197,161,252,185,181,154,190,247,168, 58, 46, 34, 40, 33,238,149, 28, 3,173, 75, 88,142,122,195, 68, +163,225,201,211,183,121,241,226, 51, 8, 35,217,219,242, 25, 5,200, 1,149,196, 83,222,239,119, 52,174, 70,163, 88,175, 87,144, + 34, 58,131,142,129,166,109,249,234, 87,191,200,111,254,202, 55,248,244,147,143,249,225, 79, 62,226, 43, 95,251, 58,127,253,189, +191,230,185,134,143, 62,254,132,159,252,224, 7, 18, 13, 89,246,255, 70,155, 18,121,171, 22,198, 93,158, 3,109,114, 38,167,112, + 55,145,152, 5,171, 71,107,173, 99,193, 78,154, 29, 4, 25,244,189,162, 73, 38, 4, 35,137,170,233,152,250, 30,109,196, 14, 86, +181,107,198,195, 1, 87,215, 69, 21, 61,145, 83, 32,231,106,137,189,156,167, 82,121, 26,202,161, 97, 4, 30,164, 19,109,219, 49, +170,137,147,211, 83,110, 55,175,208,198, 16,134, 30,219,118, 88, 99,192, 53, 76,125, 79,213,182, 84,125, 71, 31, 54,160,196, 3, + 79, 74,100, 93,145,125, 95,196,184,185, 60, 8, 87,133, 82,231,228,249,101, 13,218, 54,210,117,231, 68,187, 58,197,135,162, 37, +170, 91,222,122,255,156,195,102, 67,191,219,115,241,228, 61, 14,135, 45,121, 18, 33, 31,197, 22, 25,250, 3,227, 52,208,180,107, +204,234, 4, 63, 12, 60,184,120,196,243, 31,239, 49,121, 6,113,177,208,230,142, 39,107, 51,224, 68, 33,221,250, 82, 48,135,176, +220, 15,234,181,172, 11, 20, 40, 43,133,209,216,111,241, 49, 82,107,139, 81, 30,101, 58,118, 55, 87,156, 63,122,204,201,249, 67, + 76,219,242,234,217,199,124,231,127,255, 3, 46,223,253,128,102,221,177,187,125,201,245, 39, 63,230,226,233,123, 12,219,107,174, + 62,253, 33,167, 15,158,144,114,100,243,233,199,212,221,154,221,245, 43,170,182, 99, 26,182,228, 97, 36,142, 3,221,233, 57,167, +143,222, 98,183,189, 69, 77, 35,105,200,132,113,192, 89, 77,181, 90,211, 31, 14, 40, 96,117,118, 70,136,208,173, 90,246,219, 45, +174,178, 28,174, 95, 18, 82,160,182,162, 95,209,109,131, 51,208,191,124,129, 31,182,164, 18,217,155,148,130,144,104, 86,122, 73, + 27,171,234,138,186,233,216,221,188,162,223,202, 84,160, 62,185,100,154, 6,218,245, 57, 85,221, 9,202,117, 28,150,156,243, 16, + 60,166,114, 84,117, 39,207,193,186, 38,246, 61, 89,121, 66, 73, 16,100, 63, 21, 84,238,184,196, 16, 91,173,101, 79,111, 53,214, + 53,164,209,131,171,200, 90,163,117, 38, 14, 35,174, 86, 40, 87, 17,235,204,176, 63,208,157, 93, 74, 36,117, 10,226, 46,113,134, +208,143,164, 52,177,191,126, 73,119,241,144,238,201,187,248,205, 53,195,254, 22,101, 12,174,235, 88, 63,122,155,147,203, 7, 84, + 85,205, 20, 35, 85,221, 8,177,116,115,205,199,127,241,167, 40, 63, 98, 87,157, 8, 64,251, 3,182,110,136,227,129, 16,189,232, +110, 80, 98,117,205,226,216, 24,139, 5, 54, 12,131, 52, 5,191,250, 79,255,211,223, 85, 90,227,172, 97,120,245,140,219,207, 62, +100,127,251, 74,186,188, 28,101, 84, 94,117, 60,120,250, 46,221,201, 9,111,189,245,132, 7,151, 23,220,222,222,114,125,117,197, +180,185,230,213,135, 63,100, 56,236,217,223, 94,211,158, 63,164,106, 26, 81, 32,150, 46,201,213, 13, 74, 27,218,213,154,127,240, + 59,255, 62,230,242, 93,110,174, 95,144,134, 81,170,104, 53, 83,159,204,145,250,244,206,175,174,143, 20,214,199,202,230, 57,222, +115, 6,161,216,226, 57,174, 13,252,179,111,126,157, 39, 15, 78,249,179,191,250, 30,183,219, 29, 67,217,159,251, 20, 23,150,187, +159,185,238, 37,210,115,242,179, 24,110, 98, 28, 7,198, 33,208, 15, 35,227, 56,201,250, 32, 43, 50,134, 7,111,189,195, 91,239, +189,191,120,178, 23,101,126,217,137, 27, 35,108,119,231,220,189,220,248, 88,208,178,113, 6,228,112,103,205, 19, 12,161, 95,186, +233, 16,100,239,173,142,132,130, 49, 4, 86,235, 19,134,113, 36,166, 48,243, 7,142,120,195,106, 73, 59,154,213,232,202, 26, 33, + 55, 41,161,179,169,130, 72,244, 97, 96,213, 52,236,182, 59,194, 76, 39, 42,133, 85, 62, 10,135,190,195,206,170,123,221,198,146, +150, 87, 62,135,197,173,112,164,236,159,213,246,233, 72, 79, 97,141,101, 10,129,102,125,206,122,125, 78, 93, 53, 56, 39,233,108, +139,111,255, 8,173,173, 22,154,220,157, 71, 61,165,128, 54,154,171,231,207, 16,126,151, 28, 8, 75,134, 60,199, 43, 74,181,236, +227, 41, 96, 35,209,119, 32,238,134, 52, 99,133,239,132,141,179, 5,105,158,126,196, 24,138, 54, 65,149,207, 76, 23, 37,126,185, +102,115,129,249, 24,179, 88, 65,173,171,120,235,201,219, 60,123,246,113,241,154,139,183,209, 58, 87,192, 58,186,196,137,218, 2, +195,145,117,147,206, 50,206,211,113,228,131,119,223,230,131,183,159,242,107,191,252, 13,166,113,162,247,129,195,190,231,247,255, +224,247,248,254,247,190,199,199, 31,127,196,102,115,131,247, 19,193, 11,181, 44,248,129, 16, 38,166,209,151,140,235,105,249,111, +225, 43,140, 2,165, 41,228,195,249,253, 76,217,151,160,143,185, 27, 23, 1,229,140,192,229,181, 78, 94,238,199,128,214,134,186, + 93,147,162,232, 1,230,232, 90,128, 48,202,120, 55,197,128,115, 21,145, 68,138, 19, 36,179,144,251,180,182, 40, 39,190,228,156, +163,236,191,125,228,244,242, 1,253, 97,203,180,223,139, 0,179,233,112,109, 67,189, 58, 37, 7, 95, 56, 5,226,108, 9,253, 64, + 24,123,116, 78, 16, 19,201, 79,114, 77, 26,177, 21,186,118,133,114,142, 24, 3,182,228, 83,168,242, 60,113,171, 83,230,105,165, + 53,197, 66,105, 96,119,115,141,173, 59, 92,183,194,147, 5,177,107,172, 64,102,198, 1,235, 68,225,109,170,134,213,250,132, 48, +121,234,170, 34,161, 24,118,183, 18, 83, 93,178,220,103, 63, 60,121, 14,132, 41, 34, 43, 85, 81,157,156,241,232,131, 47,147,141, +197, 56,177,216,229, 57,183,161,232, 49,230, 92,116,180, 33, 78, 61,109,183,198,186,134,155,231,159,178,187,125, 73,189,186, 32, + 4,207,187, 95,250, 26,219,205, 45, 99,244,156, 62,120, 72,179, 62, 71,229,196,254,250,154,151, 31,254,144,245,197, 3, 92,211, +138,166, 73, 27,252,102, 67,127,123,197,225,246,134,102,213,178,187,189,194,186,138,170,169,153, 38,113, 15,180,235,115, 78,159, +188, 75,232,123,194,176,199, 89,185,126, 43,235,132,202, 88, 75,128, 75,181, 62,161,110,197, 62,151,181, 20, 97,227,126,143,169, + 43,153, 67,100, 69,232,119,108, 63,251,144,112,232,209, 90, 8,144,171, 7,143, 56,123,231, 3, 65, 72,123,207,116,216,115,184, +185, 37,142, 3,251,219, 43,182, 87, 47,216,111, 94,149,156, 14, 69,152,122, 73,253,155, 70,156,107,100, 42,180,106,139,208, 21, +234,110, 45,147, 36,239,101,255,236,229,186, 71, 41,234,166, 37, 76,163, 64,105, 10,133,112,121, 80,104,141,173,107, 17,109,154, + 74,214, 34,193,139,237, 51, 7,193, 18, 43,193,253,198,113,148,251, 64,203, 14, 31,165,240,125, 79,221,173, 49,174,194,104,203, +184,219, 67, 14,164, 24,105,154,142,195,237, 13, 97,216, 3, 10,215,173,112,141, 96,211, 73,137, 48,244,220,124,246, 33,207,191, +255,215, 98, 73,107, 26,148,169,136, 99, 47,233,163, 41, 74,200,147, 49,212,221,186, 60,143, 84, 1, 79, 9, 16,171,170, 26,208, + 18,152,100,183, 87,175, 64, 27,182, 10,252,245, 43,206,207, 47,240,253,129,113, 47,166,123, 89,138,142,132, 32,163,232, 97, 28, + 24, 71,233,176, 66,191,231, 71,223,249, 83,210,112, 96,181, 90,163,227,196,119,255,232,127,225,139,191,246, 31,112,249,228,221, + 2, 61,185,179,165,220,188,124,201,248,165, 39,252,234,175,255, 61,206,223,122,143, 63,249,253,255,158,143,255,252, 79, 9,169, +199, 58, 17,180,228,146, 57,126,143,170, 84,212,159,243,159,201, 97, 87,108,193, 37, 54, 85,151, 8,204, 74, 37,254,227,223,248, + 59,116,149,225,219,127,249, 93,182,135,158, 16,115,217,163,251,114,120,139, 10, 55,248,184,164,172,249, 98,109, 11, 33,226,189, +168,220,167, 49, 48,134, 64,140,130, 63, 69, 91, 30,191,253, 46,143,223,125, 87, 58,202,196,189, 67,123, 30,169,205,236,121,239, +135,123,157,121,140,113,121,237, 51,239, 55, 22, 59,140,214, 66, 64, 51, 71,145,178,199,200,217, 37,118, 49,103, 30, 63,121,202, +103,159, 38,166,188,151,125,114, 25,224,113,196,202, 71,149,192,148,172,139,143, 95,223, 29,206, 25,106,227,216,110, 54,203, 90, +227,245, 46,253, 88,237,126,140,226, 53, 11,165,237,238,107,139,250,251,216,138,120,151,125,123,148, 57,173, 73, 89, 17,146,166, +106,219, 37,215,253,158, 96,232,104,132, 61, 51,152, 83, 60, 66,102,230, 36,196,177,146,184,101,180,101, 12,241,232,235,247,121, +249,119, 4,194,132,153, 83,213,102,183,133,145,117, 7, 49, 99,172, 94,222,187,202,185,165, 80,138, 94, 44,134,126,242, 84,141, +187, 87,212, 40,149, 37, 24,165, 28,236,198, 24,218,118, 77, 93, 87, 24,235,184,185,121, 41, 33, 45,106,182,172, 9,199,217,148, + 92,113,173,192, 40, 25, 97,234,148,112, 10,106, 99,248,250, 23,222,227, 63,252,251,127,159,182, 93,241,233, 39,159,241, 71,127, +252,175,248,238, 95,127,151,126,216,211,247, 59,134, 65, 56, 10,115,144, 80, 94, 20,222, 44,194, 75,165,194, 82, 21,101,117,167, +182, 94, 28, 39, 69,127,241, 58,154,242,206,217,255,166,228,209, 99,199,138, 20, 67,126, 26, 49,211, 65, 66,109,124,128, 20, 10, + 34, 51,145,163, 39,231, 80,214, 85, 53, 26,208,170,164,181,149,207,203, 54, 45,174,107,232,183,215,132,254,192,250,193, 99,154, +211,115,246, 55,215,248,105, 79,115,114,194, 0,180,103,103,236, 94,189, 68, 69, 17,186,141,126, 96,123,115, 69,211,180, 18,187, + 55,217,146,242, 86, 66,157, 74,214,181, 49,150, 52, 13, 40,109,113,117, 45,100, 69,235, 74, 71,175,177, 86,163,147,131,249,190, + 84,178, 94,168,187, 21, 33, 78, 52,110, 45, 7,204,110, 67,156,122,180,181,162,228, 47,193, 50, 70, 27,250, 41,224,154,134,126, +119, 35,158,238, 18,147, 59,219, 20,141,171,151,251, 46,229,140,113,142,170, 59, 97,117,249,128,195,208,179,221,220, 98,218, 83, +186,139,154,126,181,166,174, 42,110,158,125, 76, 12, 1,171, 32,102, 17,136, 42, 3,171,147, 7, 40,109, 24,135, 3,206,153,114, +175, 67,142, 35,253, 56,240,232,237,247,249,248,251,127,201, 79,191,243,109,214,151,151,196,152,121,244,254, 23,217, 95,157,224, +163,151,113,116, 85, 99,141, 99,236, 26,177,155,166,196,184,219,163,188, 39, 97,240, 54,208,174, 79,208, 4,134,205,142,253,203, + 79,138,221,179, 66,105, 77, 93, 53,104,107, 8,227, 68,189, 94,163,180, 97,127,245,130,237,228, 81,149, 21,108,108,191,195, 96, + 48,166, 69,103,205,112,123, 69, 24, 15, 16, 60, 83,140,116,235, 19, 78, 31, 61,145,206,247,176, 19, 58,161, 21, 93,212,233,227, +135, 96,157, 76,248,250,137,182, 89, 17,149,194, 84, 14,191,223, 17,166,145,122,117, 2,214, 16, 61,140, 87, 55,216,170,146,103, +158, 82, 36, 31,105, 47, 30, 96,141, 99, 58,108,153,174, 95, 81, 59,135,239, 15,228, 32,216,222,156,131, 20,134,133, 22,152, 82, +196, 31, 14,212, 93, 71,208,153,230,228, 12,114,194, 79,129,228, 39, 76,219, 10,154, 88,101, 92,101,200,211, 28,197, 90,138, 88, +149,217, 93,191,100,117,249, 80,206,162,104, 9,126, 98, 56, 28,152,218, 14, 84, 70, 21,171,243,238,229,167,203,234,184,223,109, +201, 42,115,120,249,156, 28, 3,198, 58,140,171,104,219, 21,155,225,192, 52, 77, 24,173, 24,198,129,238,244,130,172, 45,221,217, + 67,198,131,188, 15, 42,131,138,153,221,205, 21,198, 57,148,171, 48, 95,249,205,127,244,187, 57, 37,210,208,243,209,223,252, 91, +114,152,196,194,166, 53,193, 79,178,231,242,158,195,237, 13,239,125,240, 62, 79,223,125,159,237,126, 79, 28,123,254,242,255,250, + 67, 12,137,174, 93,221, 9,219, 82,230,249,135, 63, 68, 27, 75,119,122,134,182,142,211,139, 75, 80,162,248,109,234,150,199,143, + 78, 25,189,226,236,201, 7,188,252,244, 67,198,237,117,177,229,132,101, 31, 59, 71,131, 46, 97, 28,233,200,247,157,103,122,142, + 42, 21,156,198,106, 88, 25,197,127,246,143,127,157, 48, 14,124,231,111,190,207,213,238,192, 24,228, 96, 30,167,145,113,242,244, +227, 68, 63, 72,132,103, 63,142,178, 51,159,252,226, 61, 31, 38,207, 56, 5, 17,198,121, 33,135,101, 20,218,214,188,247,149,175, +114,254,232,113, 81, 97,231,227, 37,170, 88,185, 22, 83, 20,139,109,237,248,144,114,175,101,120, 47,161,142, 90,223,195,189,206, + 10,252,249, 48, 79, 71, 63,187, 16,143, 42,214, 39,167, 12,195, 72, 88,132, 34,234,232,223, 23, 68,165,210, 51,228, 37, 45,121, +188, 74, 41,114,240,132,105, 16,100,164, 82,159,123,134,223,127,221,249, 30, 39,224,245,175,191, 46, 10,211,250,206,157,155,230, +152,194, 34, 10,169,234,138, 97,240,216,170,163,105,219,130,116, 77,139,106,219, 26,161,125,165, 16,165, 32,137,177,164, 32,205, +239, 71, 36,229,194, 11, 24,122, 14,219, 91, 32, 19,162, 64, 97,142,187,243,227,124,236,188,156, 65,226,209,151,176,154, 34, 98, +179,230,181,124,173,153,249,124,119,224,105,163, 5, 98,162, 53, 90,217,187, 80, 29,173,105,219,142, 7,151, 15,121,240,224,146, +203,139, 11,186, 70, 96, 16, 42,121, 42,107,168, 92, 77,229,156, 28,238, 86,126, 70,227, 12,117, 35, 19,138,186,170,105,170,138, +182,177, 60, 56,127,192,127,249,159,255, 23,124,245,107, 95,231, 15,255,240, 15,249, 31,255,167,255,129, 63,249,211,255,155,159, +124,248, 99,118,187, 91, 14,135, 61,195, 48,138,168, 50,132,163,236,229, 18,166,115, 52, 60,191, 39, 26, 76,249,136,115,157,238, +168,126, 41, 45, 97, 47, 71,233, 55,159,251, 79, 86, 71,233, 83, 5,190,162,178,184, 48, 20,162,202,141, 97, 34, 77,253, 29,179, +159,187,162, 65,149, 2,171,106, 87, 50,193, 43,126,110,165, 21,174, 93,145,208,144, 34,205,234,132,140, 98,216,239, 73,211, 40, +157,105, 8,146,163,238, 35,232, 84, 86, 44,137,112,216, 23,184, 73, 47,221,117, 57, 64,181,150,168,215,153,169,111,170, 6, 87, +213, 88,109,133, 86,199,140, 51,246, 40,109, 9, 62,146, 52, 24,165, 81, 37,111, 61,244, 66, 81,108,215, 29,219,235,107,178, 31, +168,154,150,250,228,148,170, 89, 21,241,219, 28, 35,108, 32, 76, 96, 44,209,143,132,105,148, 28,244, 16, 74,252,231,146, 49, 69, + 44,130, 55,116, 69,119,118, 70, 72, 9,165, 37,130,214, 88,203,230,229, 11, 82, 24,176,237, 25,239,124,237,151,201, 85,203,116, +216, 44, 72, 88, 5, 52,103, 15, 56,108,111,201,113,228,252,233, 59,108, 94,188, 66, 91,232, 78, 31, 81,185,138,148, 60, 15,222, +254,128,195,246,154,235,103,159,178, 94,159,177,189,126,133, 31, 14, 36, 63,144, 99,102,191,185,198,239,182,165,168, 21,222, 62, +174, 34,101, 69,115,122, 42,161, 61,109, 39, 34, 57,100, 66, 83,159,156,138,230,200,143,165, 48,169,192,104,246, 55, 47,201,193, + 11,113, 19, 79,229, 42,134,221, 6,223, 31,104, 78,207,152,250, 3,177,223,163,114, 68, 87,141,136, 99,173, 37,107,199,212, 31, + 32,121,148, 49, 84, 93, 71,101, 45,118,125, 34, 80,150,144, 96, 28,136,136, 29,205, 26,195,238,230, 10,162,167,106, 87, 36,173, +153, 14, 91, 84, 14,184,186, 22,107,234,216,227,247, 59,218,211, 53,202, 84, 52,103,231,160, 53,174,233,200,106, 62, 87,196,233, + 5,154,156, 2,166,106, 81, 74,227,234,138,106,125,130,109, 90,154,238,100, 41,188, 46, 30, 63,102, 28,122, 9, 66,178, 22, 91, + 87,248,221, 94, 80,225,211, 40, 19,156,186, 22, 20,117,153,104, 77,135, 65,130,169, 82, 20,176, 84, 1,208,168,156,133, 35, 17, +147, 16, 85,141,240, 72, 82,191,165,191,189,197,186,170,208, 56, 21,227,126, 67,138,129,186,110,240,126, 92, 10,214, 20, 60,195, +126, 71,219,173,138, 5, 61,225,167,177,220,109, 82,220,171,255,228,191,249,111,179, 86,134,208,111,121,254,195,191,160,114,142, +171, 23,207,229,205,107, 86,180,171, 21,187,155, 43, 50,145,186,187,228,226,233, 83,108,101,185,125,241, 2,171,197, 14,164, 82, +194,213, 45,202, 88,166, 97, 39,213,222, 56,112,241,197,175,241,203,191,241, 15,104,214,103,196, 20,217, 95, 95,209,180, 45, 31, +124,225, 93,190,240,165, 47,240,209,179, 45, 47, 63,249,132,255,243, 95,252,119,140, 87,207,137, 94,198, 26,186,196, 3,222, 75, + 40, 91, 30, 20,101,180, 91,118,210,141,117,172,155,138, 47, 60,189,224,159,124,243,107,252,240,167, 63,229,207,191,255, 67,182, +135, 3, 57, 33,129, 36, 94,194, 86, 38, 47,201,107, 50,138, 20,145,156, 80,227,164,243,155, 66, 40, 73,108, 98,105, 19, 43,180, +193, 52, 45, 31,124,249,171,172, 78, 78,203, 46,250,110,220,190, 36, 49,151,131, 26, 40,236,242,124,151, 17,191,132,170, 72,170, +210, 44,192,178,206,150,189,179,196,231,205,221,252,124,136, 58, 39, 29,246, 52,141,146, 51, 92, 32, 49,179,170, 59,248,137, 79, + 63,250,136,195,230,150,232,131,236,197,203,104, 25, 85,200,114,200,247,152, 31,162,218, 24,242, 52, 49,142,135, 37, 81,236, 77, +157,250,177,241, 90, 41,222,184,107,255, 92, 1,240, 26, 74, 86, 21,142,187, 4, 31,204,137, 83,154,179, 7,143,133, 58,101,101, + 69, 97,141,163,114,245,189, 32,158,121,197, 18, 82, 32,229, 89,161, 46, 98,191, 28, 19, 97, 26,120,249,217,199, 88, 13, 99,148, +116,181,251,137,118,199, 83,130, 18, 81,153,131, 36,179,149,110, 84, 38,239,234, 30, 2,119,206,176,159,247,229,179, 8,112, 24, +194, 17, 75, 94,126,150,186,174, 89,173, 78,120,120,113,201, 55,127,229,239,242,206,147,167,156,156,156,144,128,155,237,134,207, +158,125,198,237,102,195,230,230,150,205,174,167,110, 59,201, 60, 46,185,240,171,182,227,226,226,130,203, 7, 15,120,250,244, 29, +158,188,253, 14,191,247,251,255, 51, 63,252,193,119, 25,203,225,237,189, 95, 2,132, 94, 47,244,142,187,236,123,201, 79, 63,231, +215,231,146,162,254, 54,241,254, 49, 89,173, 80,211, 68,214, 85,148, 48, 70, 81,213,107, 76,211, 10, 20, 36,133,146,137, 93,144, +187, 37, 7,160,110, 86, 12,227, 64, 12, 3, 68,121, 15, 99,206,172, 30, 62, 17,203,156,247,140,195, 30, 91, 53,116,235, 83,198, +195, 22, 63, 5,140, 21,219,165, 42,220, 10, 9, 33,145, 32, 23, 85, 44,165,162,131, 48, 76,135,173,220,103,206, 80,219, 90, 98, + 94, 21,226, 88,137, 35,190,239,177,174, 22,136,139,214,216,170, 34,135, 40, 68,184,172,197, 89, 80, 57,146,210, 24, 87, 17,134, +158,169,236, 52,171,182,197, 15,131, 36, 20,182, 77, 9,161,242, 88, 39, 65, 58,209, 7,105, 52,172,240,106,253,126,131,223,221, +144,149, 76,113,150,235,171,170, 56,127,242, 62,125,223,203, 33,128, 98,220,223, 82,117, 93, 17,163, 25, 92,211, 17,188,231,189, + 47,124,153,103, 63,253, 9, 55, 47, 62, 22, 86,190, 50,156, 63,125,135,155, 23,207, 48, 78, 70,223, 85,211, 80,117,231, 24, 39, + 19,171,166,105, 9,227, 72,221,118,156,156, 95,130,214,188,250,232,199, 76, 67,207,230,229,103,156,191,247, 62,166,228,181,223, + 60,251, 8, 93, 57,113,194, 4,143,137,153,144, 35,171,179, 11,114, 85,227, 55, 27,146,159, 88,157,158,178,189,190,194, 57,195, +254,246,134,186, 91, 51,141, 7,114, 12, 52,171,115, 92,219, 97,170,138, 48,236,232,247, 7,204, 76,203,203, 25,239, 39, 30, 60, +121,159,221,238, 26,235,106,134,205, 43,172,109,209,206, 48,110,182,212,103,151,164,169, 39,196, 72,123,249,144,243,199,111, 17, + 67,196,185,134,253,254,134, 92, 16,220, 50,141, 72, 16, 71,148,173,200, 33,112,122,113,201,161,239, 25, 15,123,210,208, 99,234, + 10,165, 52,245,106, 45,244, 70, 32, 78, 19,126, 56,200,243, 49, 76, 75,196,237,184,223,147,226, 36,250,147,170, 69,187,138,179, + 7,111,145,114,196,144,192, 88,233,210,115, 18,152,216,212, 75, 58, 92,215,137,152,179,170,100,252, 29,139, 80,184,236, 12,141, +210,196,113,196, 52, 53,201, 7,108,229, 68, 19,165,213,146, 77,146,149,194,186,134,230,244,148, 20, 34,219,231,159, 64, 12, 40, + 99, 75,240, 86, 36, 76, 19,205,106, 77,127,216,161, 11,150,154, 18, 54,148,203, 64, 45, 39,129,109,165,232,239, 61,151,212, 63, +252,175,254,235,172,173,225,246,217,103, 92,127,248, 61, 50,208,117, 45,231, 79,222, 97,243,234, 57,227,161, 71, 33,121,206,205, +234,140,105, 60,208,157, 92,240,248,237,247, 56,125,240,136,151,207, 62,193,162,160,114, 12,125,207,208, 31, 72, 83,207,228,101, +127,248,248,131, 47,243, 43,255,248,159,115,123,179, 97,218,111,209, 70,211,117, 39,252,250,175,255, 93,246,222,240,234,122,203, +179, 31,124,151,111,255,193,191, 32,239, 55, 4,239,165,211, 57,202,166, 21,196, 99, 46,150,153, 2,214, 48,134,135,167,107,190, +251,157,111,241, 15,191,249,126,114,229, 16, 0, 0, 32, 0, 73, 68, 65, 84,119,248,231,255,240,183,248,238,143,126,204, 95,255, +248,167, 92,111,183,140,147, 39,101, 33,144, 29,198,177,116,226, 98, 73,243,243,254,113,246,162, 23,232,140, 15, 17,239,163, 16, +198, 10, 45,236,244,242, 49,239,127,249,203,168,178, 3, 60, 78, 16,155, 65, 55, 10,169,174,102,114,219,241,206,159,162, 58, 63, + 62,172, 36, 75,157, 59,117,186,214, 12,227,184, 0, 93,154,186, 94, 8,100,249, 40,141,201, 88,203, 56,142,203, 3, 61,198,136, + 81,138,155, 87, 87,188,122,241,140, 88,148,245,162, 98, 15,229, 80, 55,119, 7, 92,241,135,231, 50,186,126,211,115,253,243,128, +159,227,241,249,155, 65, 64,175, 19,231,244,145, 35,225,248, 16,137, 41,211,158,156,114,114,118,129,171,101,148,103,140, 65,101, +141,181,142,166, 84,241,139, 85, 46, 70, 66,244,229, 80,143,152, 66,210,154,198,129,161,223,179,223,222,144, 67, 96,240, 98,155, +155, 99, 57,238,113,228,243, 93,201,161, 85,194, 89, 93,252,242, 44,204,246, 69, 0,104,140, 0,150,172, 94,128, 62,115, 33,213, +247,158, 16,211, 66,254, 3,168,170,138,223,252,205,223,226,119,126,231,183,104,140,225,253,167,239,178,221,237,249,151,255,219, + 31,242,226,229,115,254,189, 95,249, 85,190,241,213, 95,226,242,242,130, 15, 63,123,193,247, 62,252,148, 67,127,192, 24,203,195, + 7,151,156,159,158,224, 39,207,217,197, 5,255,230,223,126,135,255,245, 95,254, 30,195,110,203, 56,141, 71,251,238,244,185,131, +252,245,145,249,231,176,162,127,219, 52,229,141, 49,144,199,161, 65,119,244,122,212, 29,206, 84, 73, 14,170,116, 58,198,210,172, +214, 12,187, 45, 41, 78,210,233,180, 39,178,211, 43,122, 17,177,201, 86, 98, 91,179, 14,223, 15, 40, 29,101,149,149,101, 71,237, +234,150, 80,198,216,202, 88, 66,191, 35,142,162,160, 78, 37,167, 62,163,202, 88, 82, 99,187, 21,201, 71,217,169,103,137,196, 68, +137,253,171,110, 59,140,214,152,218,209, 52, 29,155,155, 27,214, 39,231, 12,253,158,245,229, 5,253,245, 21,193, 71,186,147, 83, +250,253, 86,232, 96, 65, 88, 1,227,190, 71,233, 76,213,201,212, 64,151,153,151, 63, 28,208, 85, 37,207,131, 24, 22,111,187,113, + 21,145, 92, 86,133, 98, 73,171,187, 85, 73, 32,108, 56,123,252,148, 97, 24,249,244,175,190, 77,244, 99, 33, 31, 90,233,244,186, + 21, 81, 91, 84,140, 66,228,172, 42, 50,153,208,247, 66,246, 76,145,140,166,105, 91, 76,213,209,118, 29,183,207, 63, 18, 97,102, +213, 96,154,150,155,103,159,210,158,156,177,191,126, 73,117,126, 65,183, 58,103, 28,123, 84,140,108,111, 94,209,174,206, 57,121, +235, 29,234,174, 1, 63,209,111,182, 12,227, 1,103, 20, 97, 12,248,105,207,176, 59,200,202, 73,107,148,145,207,119,220,110, 57, +121,240, 80,198,253,222,139, 75, 35, 69,200,177,172, 28, 12,126,183, 97, 60,108, 65, 25,234,238, 4,234, 10,231,196, 94, 56, 29, +118,146,153, 48,202, 14, 59,251,145,170, 93,115,250,228,125,118, 87,159,225,199,158,250,244,130,112,216, 18,134, 3,209, 39,206, +158,190, 71, 10, 2, 20,178, 77, 39,250,159,153, 49, 80,132,179,105,154,196,175, 29, 38,113, 78, 88, 65,145,199,146,142, 88,175, +207, 80, 57, 73, 52,116, 86, 37,175,196,162,200, 88,231,216,222,188, 34,123, 47,177,224, 57,163,141, 35, 14, 91,148,169,229,239, + 84,181,172, 73, 10, 47, 65, 43,168,170,134,213,217, 41,251,237, 45, 41, 38,170,174, 91, 38,132, 74,107,180, 17, 98,166, 54,154, +113,183, 67, 27,141,182,181,112, 47,252,128,107,106,252,174,167, 90,119, 18,122,149, 18, 41, 39,170,182,193,185,134,201, 71,153, + 92,110,111, 37, 95, 94,107,162, 23,146,171, 82,220, 11,163, 50, 90,211,180, 34, 10,220,221,190,148,103,171, 54, 75, 70,129,144, + 6,245, 18,229,171, 78,223,253,154,152,205,146, 48,148,231,113,112,213, 84,152,170,166,118,142,238,244, 28,101, 29, 77,221,138, +202,214, 57, 44,138,203,247,190, 72, 28, 7,250,190,167,114,150,253, 97, 47,194,139,195,129,182,182, 4, 44,167,103,231,116,111, +127,145, 47,253,202,223, 43, 12,116,141,194, 8, 2,211, 86,180,235, 19,198,113,228,195, 63,255, 87, 60,255,203,127, 77,152, 38, +241,171, 46, 48,145, 84, 44, 96, 34, 66,202,128, 5, 30,156,156,240, 23,127,254, 39,252,147,111,126,131,223,248,181, 95,226,118, +187,231,251, 31,126,202,213,237,134,195, 56,210, 15, 3, 62,102, 38,239,233,135,158, 97,156,152, 70,217,149,207,135,185, 32, 96, + 19, 62, 21,122, 92, 17,140,101, 36,148,230,173,119,222,227,241, 59,239,242,250,217, 55,191, 71,166,160,104,115,121,125,249, 72, + 12,167,181,198, 57, 39,172,243,146,144, 20, 99, 42,251, 90,121, 16,121,239,165,147, 77,169,248,246,115, 81, 92,139, 95,218, 57, + 39, 94,233, 35,235, 85, 78, 18, 50, 35,225, 43,177, 68,142, 6,198,253,158, 23,159,125,202,112,216,147, 99, 16,122,209,231,178, +216,203, 52, 33,166,251, 20,180,215,118,233,247, 4,102,234, 46,152,228, 24,153,121,140,242,189, 79,110,227,141,246,174, 16, 34, +182,170, 57,187,120,136,171,171,226,189,148,149,128,209, 86,110,226,114,128, 44, 84, 61,165,136, 69,169,157, 83, 66, 37,208, 41, +113,253,234, 25, 77,235,100, 63,181,221,115,232,195,145, 54, 64,196,107,175,255,124, 57,103, 92, 73,104,203, 71, 73, 88, 11,123, +127, 22, 94, 42,133,177, 74,194,145, 22,175, 60,244,125, 88, 14,245,227,159,249,157,119,222,225,173, 39,111,243,219,191,253,247, +121,249,226, 21,223,254,214,191, 70,107, 77, 87, 32, 53,171,213, 10,107, 44, 62, 70, 62,189,186,101, 28, 5, 78,210,216,138,135, + 23,231,124,225, 43, 95,227, 7, 63,250, 17,127,246,237,111,137,162,121,156,238, 29,230,199, 54,189,191,173, 51,255,119,233,212, +127,230, 65, 95, 66, 75,140,169, 0, 69,189,234, 8,211, 40,190,115,231,228,107,182, 90,178,205,181,209,197,206,213,200, 1, 61, +121,146,239, 69,245,157,228,224,110, 87,107,114, 74,248,113, 36,132, 9, 91, 85,164,105, 2,235,202, 92, 90,147, 81,216,170,146, + 49,165,150, 3,198,212,141, 92,187, 73,214, 48,198, 58,178, 18, 70,194,176,223, 74, 24, 84, 18,125,130,173, 87, 84,149,208,254, +180, 85, 56, 99,208,149, 99,127,117, 35, 33, 79, 74,238,213,172, 65, 47,140,109,208, 81,120,217,245,106, 37, 5,129,177, 76, 51, + 30, 57,103,166,161,199,213, 53,186,106, 73,195, 94,246,232,100,252,112, 0, 91,139,110, 40, 41,170,202,209, 61,122,155,202, 25, +174, 95,189,146,174,154,204,230,217,135,244,155,155, 82, 24,170,133, 50, 23,124,192, 24,201, 89,207, 41,129, 17, 97,165,159, 38, + 48,178,154,137, 5, 89,122,249,232, 29,110, 94,124, 74,158,122,148,109,105, 79,215, 92,125,250, 33,109, 43,193, 36,196, 32,130, + 45, 52,166,233,120,252,193,151,217,111,183,228,113,135,174, 58, 78, 31, 60,150,131,113, 28,216,148,241,117,191,221,144,198, 3, +174, 93, 19,166,177, 0,120, 64, 87, 22, 99, 42,246,215,175,176, 69, 16, 71, 74,212,231,151, 50, 53,219,221,202,202, 32, 71,252, + 52,144, 49, 11,202,219, 85, 21,198, 90,252, 56,160,148, 28,148,202, 84,232,170, 42,248,223, 3,132,132, 89,119,196,126, 68,169, +132, 91,173,201, 73, 97,107,203,246,249, 11,234,213,138,106,181, 22,209,169,214,140,227, 84,114, 11, 20,149, 49, 12,123,185, 63, +172,150,209,121,214, 21, 57,140,210,160,141, 3, 90, 67,123,122,137, 50, 22,211,212,194,188,200,153,254,246, 26,107, 13,190,239, + 73, 41,138,159, 61, 70, 82,240,100, 37, 65, 71,221,122,205,246,246, 26,163, 20,209,139,120,212, 88,199,201,229, 35,246,219, 91, +218,245,154,201, 15, 24, 52,253,110, 47, 5,134, 54, 98, 5, 79,145, 56,150,164, 65, 99,132,187,223,116, 66, 68,108,106,234,102, +205, 84,112,202, 49,120,201, 49,152,167,128, 69,247,161,146, 88, 76,133, 80, 56,200,186,170,238,164,153,209,134,108, 13,214, 89, +249,188, 98,196, 79, 7,172,171,202,230, 44,162,172,152,130,163, 31, 48,117,221,252,174, 51,137, 48,141, 88,138,184, 37, 74,108, + 99,158, 70,246,155, 91,110,175, 95, 17, 38,207, 52,246, 69, 13,171,104, 86, 29, 99,127, 64,165,196,246,246, 26,149, 69,121,190, +189,189,165,169, 42, 48,150,147,179,115,188,159, 24,110, 95,241,234,217, 39,156, 93, 62, 34,219,138, 7, 15, 31,224,170, 26, 31, + 67, 73,154,153,232,206, 31,240,226,163, 31,145,252, 40,123,242, 89, 2,173,100,204, 62, 43,224, 29,138, 47,127,240, 62,223,251, +235,191,196,198,129,191,243,181, 15, 88,175, 87,124,248,233, 11,158, 93, 95, 51, 76,158, 97,148,221,120, 63,120,250,126, 96, 63, +244,244,253,196, 56,200,254, 60,198, 40, 35,167,152,137, 33,225, 99, 34,198, 25,249,106,104,215,231,252,242, 55,127,157,211,139, + 75, 36, 19, 70, 14,232,217,170,101, 75, 76, 36,115, 10, 89, 65,213, 6,239, 23,194, 93, 46,225, 56, 33,220,101,147,207,157,250, +228, 5,192, 81, 85, 21,206, 90,186,118,141,179, 66,163,115, 78, 70, 72,218, 80, 2, 80,226, 61, 44,235, 28,251,154,114, 94,198, +243, 74, 41,218,174,227,252,225, 35,214, 39,103, 12,211, 32,160,130, 69,189, 62,123,154,242,189, 4,168, 95,100, 76,251,250,193, +145, 95,163,109, 29, 23, 3,111,250,158, 75,231, 77,166,233, 78,208,243,195,162,168,200, 83, 73,194,139,169, 4,189,148,104, 87, +165, 50,137,180,208,228,230,177,123,229, 28,239,189,255, 1, 93,183, 38, 68,207,110,187,101,242,199,216,220,226, 79,207,234,115, +218, 0,163,149, 96,115,143,202,180,101,170, 48, 39,203,149, 49,175,124,190, 37,155, 91, 27, 97, 96, 31,145,255,142,187,231,182, + 91,113, 24, 70,254,213, 31,255, 17, 87,215, 87,244, 67,207,118,191,101,179,221,240,242,234,138,171,155,107,110, 55, 55,108,183, +183,188,122,241,138,241,176,197,105,232,125,100, 76,153,111,253,241,255, 65,191,223, 50, 76,163,140, 9,203,161, 62,187, 11,142, + 69,146,111,234,202,255,127,249,165,144,156,244,102,133, 50, 78, 68,155,109,135, 53, 21, 97, 20, 44, 42, 41,226,170, 70,250,249, + 56,128,173,113,182, 34,250,137, 56,141, 84,237,170, 80,177, 68,241, 61,175, 46,102, 27,228, 28, 68, 52,167,152, 69, 63,161, 52, + 84,117, 35,214, 36, 63, 22, 24,135, 22, 29,197,216,203,222, 82,107,180,107,208,192,212, 31,150,253, 50,198,208,173, 79,169,155, +150,126,191,197, 57, 43,144,163, 16,200, 70, 19,167, 73, 62,107, 35, 49,154, 90, 91, 97,132, 71,143,181, 21,202, 88, 86, 23,151, + 66, 26, 11, 1,237, 68,156,149,163, 76, 26,108,213, 96, 42, 89, 13,164, 40, 35,209, 48,142,228,163,159,171, 89,159,209,156, 94, +162, 82,160,223, 9,155,126,232,119,140,251, 77,201, 82, 40,233,130, 89,220, 39, 25, 68, 17, 30, 50, 88, 75, 46, 57, 15,185, 8, + 66,115, 12,229,218, 21,161, 85,115,114,142,171, 91,252, 97, 75,247,232, 9,231, 15, 30,113,216,238,121,235,139, 95,199,251,145, +113,123, 43, 0,176, 36, 62,253,205,243, 79,152, 14, 91, 82,130,232, 7,198,126,207,254,250, 5,211,110,195,246,234, 5, 97,154, + 72,209,163,141, 33,145, 68,213, 62,201,251,158, 99,102, 58,220, 66,158,157, 36,138,170,109,203, 84, 82, 51, 28,118,228,156,169, + 79, 46,100, 69, 48,238, 33, 38, 84, 78,133,121, 48, 9,196,169,237,164,249,106, 27,180,210, 76,125, 79,142,130, 19, 71,219, 66, +217,172,120,240,222, 87,217,223, 92,137,128, 24,141,170, 44,204, 84,207, 20,201,209, 19,166, 3,113, 24,228,251, 28,118,104, 45, + 24,243, 56,179,216,135, 3,202,104,170,166,193, 53, 43, 40, 20,198,208,239, 25, 54, 55,132,126, 47,238,146,114,224, 26, 43, 96, +180,170, 91, 97,171, 74, 48,227,193,227,199, 65, 98,177,199, 81,126,150, 36,227,251,126,119, 75,215,173,177,182,162,223,222, 50, + 13, 61,218, 57,180,169, 74,200, 84,194,212, 13,117,187,150,247, 52, 70,186,243, 75,108,177,136, 91, 99,161, 80, 66,115, 74,226, +190, 72,178, 91, 79,177, 76, 12,163, 76,143,179,130,170,109,229,185,173,133, 99,226,202,251,175,148,194, 54, 53,205,250, 20,239, + 3,198, 73,209,107,235,134, 24, 34,198,138,183,191,110,215,152,136,250,221,224, 39, 73,144, 9, 94, 82,147,148, 66,165,196, 52, +142, 84, 86, 18,103,114,140, 12,187, 45,155,155, 43, 76,221, 74,166,242,245, 21,166,118, 28,110,174,216, 92, 61,103,232,247,140, + 67, 79,229, 12,187,219, 91,166, 97,196,185, 10, 63,121,108,244,108,111,174,121,247, 75, 95,193,117, 39,140,211, 72,206, 48,236, +247,248, 98,129,113,206,177,127,241,169, 92,160,139, 66, 92, 14, 48, 82,198,104,203,147, 7,231,188,247,228, 17,219,221,134, 56, +236,249,123,191,242,117,158, 61,127,193,199,207, 94,177, 27,122,246,135,129, 93, 63,210,247, 35,125,223,115, 24,122,134,126, 96, + 28, 71,166,201, 19,125, 42, 81,169,146,141,238, 83,190, 19,189, 41,195,197,227,167,124,240,181, 95, 42,161,138, 37,174, 80, 73, + 44,233, 44, 4,155, 69,129, 25,137, 40,245,222, 47, 57,206,179,103,219,135, 99, 58,220, 76,170, 58,122, 64,151,238,125, 62,252, + 99, 10, 82, 77,134,105,241, 86, 47, 10,225, 50, 5, 88,172, 98,179,197,143, 59, 21,241, 60, 38,174,219,150,139,203,135,180,221, + 10,231,106,162,247, 24, 3, 42,107,224,223,109,239,250,249,223,171, 5, 81,187, 36, 82, 41,245,198, 29,251,221,129, 47,235, 0, + 87,246,127, 20,212,235,236, 67,159, 19,134, 84,177,154, 9, 69,106, 14,181, 60, 2,202, 68, 81, 37,251, 24,216,236,247,220,110, +119,220,222,108, 10, 79,252,110, 85,115,103,129, 84,247,138, 14,117, 71, 80, 89,194,127,102, 33,230,220,186, 43,238,162,178,164, +102, 43,211,152,194, 53, 56, 94,163,196,121, 47, 92,248, 6, 31,253,228, 39,236,246, 27,198, 97,162,239,123,130,159, 24,135,158, +195,126,199, 97,191, 99,187,221, 50, 13, 3,195,208, 83,187,154,171,155, 43,222,253,210, 87,248,243,111,125,139,253,118,139, 47, + 7,250,113,177,240,249,131, 91,221,203, 66,120,253, 84,214,218, 20, 92,172, 89,172,133,191,208,103,157,149, 88,147,144, 7,238, +140,111,182, 70, 51,244,135,187, 4, 49,146, 28, 8,128, 50,150,148, 35, 57, 6, 84,202, 69,237,157,239, 60,216, 86,172, 76,174, +170, 68,152,148,210,114, 15, 64, 22, 45, 14, 37,124, 72,105,218,213, 10, 63,121, 97,178,135, 88,246,205, 82,104,168,226,227,150, + 81,112, 70,187, 90, 58,107, 91,203,218, 75,203,250, 38, 22,139, 97, 24, 39,252,161, 47,182, 55,177,117, 90, 39,148,176, 56,138, + 55, 57, 78,226,157,247,227,132, 31, 5, 93, 27,195, 68, 14,114,152,200,158,124,196,143, 3, 57, 4,210,228,203, 53, 41,247,163, + 42,157,189,107,107,140, 43,176,147,171,231,197,178, 39, 69,139,109,107,210, 56,150,124, 3, 3,218,136,150,164,164,167, 25, 39, + 54, 54,107, 37, 93,208, 58, 43, 66, 76, 43, 19,129,217,118, 21,253,196,184,187,165,233,206,193, 89,252,110,199, 68,164,118, 53, + 73, 65,236,123,161,244, 41, 67, 74, 35, 57, 68, 84, 14, 52, 39,103,164,225,192,184,219,150,252,109, 81,108,163, 69, 33,238,170, +154,241,176, 21,149,189, 53, 18,227, 73,198,184, 6,109,138,125,211, 88, 17,160,141, 35,214, 89,206,222,122, 7,103,100,125,104, +235, 22, 63,138, 95,122,206,163,207, 89, 44, 95, 97, 26,241,135,189,220,207,126, 4,165,152,166,158,105,191,167,238, 86, 2,253, +105,239,172,207,246,244, 20,187, 90,163,109,141,237, 86,242, 62, 36, 48, 77, 71, 78, 89, 68,117,197, 83,158, 70, 17,155, 37, 47, + 93,235, 60, 50,207, 74, 44, 93,113,148,200,106,227, 42, 25,229,219, 26, 93,166,160,106, 22,110,134,128, 31, 6,166,177, 71, 27, + 9, 22, 74,209,163,148, 89, 38,121,169,136, 65,167,126, 71, 70,179,190,124,200,225,230,134, 56, 13, 52,167,167,212,235, 19,186, +211,243,114, 70, 36,140, 85,168, 36,238,134,122,125, 42, 54, 83,239, 81,206, 72,145,172, 32, 36,201,104,168,218,150,147,139, 75, +148,117, 24,227, 4,106, 84,213, 40,231,112,117, 43, 19, 46,165, 48, 85, 77,214,153,122,181,194,143, 35,195,126, 79,189, 94, 9, +123,161,109, 5, 36, 86,183,232,170,161,110, 86,216,174,193, 88, 99,127,183,182,182,236,178,197, 11, 61,119, 8,190,216,169, 98, +140,228, 16,168,156, 69,229,204,238,230,213,124,226,114,245,242, 57,211, 32,135, 38, 9,234,170, 46, 65, 39,242,128,110,155, 70, +198,164,251, 61,117,221,242,252,167, 63, 96,154,122,170,238, 4,101,140,188,249, 5,248, 81,175, 78,121,249,209,143, 37,163,118, + 86,125, 23, 90,144,214,154,202,104,222,122,112,193,111,255,198,111,114,187,235,153,246, 87,228,156,248,248,197, 21,219, 97, 96, +191, 63,176, 59,200,193,126,232,123,250, 97, 88,124,230,163, 23, 53,187, 79, 16,202,126, 55, 37,200, 81, 24,244,182, 89,241,133, +175,124,131,183,222,121,151,144,227,145,194, 61,139,205,109,182,150, 45,108,120, 81, 97,207, 15,223, 80,186,231,249,128, 19,226, +154,185,247, 32, 94, 24,246,249,206, 3,157,146,208,236,124, 8, 12,195, 32, 86,184,153,122,231, 61,241, 72, 68,167,142,108,126, +115,135, 57,127, 63, 17, 82,221,129, 96, 92,221,112,118,118,193,219, 79,159,242,107,223,248, 6,219,253,158,170,170, 24, 75, 62, +251, 47,218,229,189,222,173,207, 93,244,235, 35,250,123, 7,232,113, 58, 93,204,104, 87,209,174,214, 11, 93,107, 30,217,205, 52, +188, 59,141,128,236,183, 99,138,196,114, 45,230, 36,252,245,148,226, 81,114,165,196,184, 14,251, 61, 41, 77,132,123,135,250, 93, +166,252,253,117, 66,177,142,149, 0,133,187,194,104, 78,230,186,163,167,169, 35, 22,119, 46, 7,120, 40, 43,139,187, 67,253,238, +208, 29, 14,226,178,152,134, 99, 81,155, 95,128, 46,177, 20,200,126,154, 64,105, 14,135, 3,104,203,233,217, 37, 63,249,209,247, +229, 58,154, 99,131,143, 88,208,175, 31,218,182,110,168,187,174,176,241, 53, 70, 91, 81, 95,107, 77,221,117,196,156,113,117,139, +209, 86, 68,138, 85, 85, 70,216,241,103,124,186, 26,109, 92,121,112, 24,114,242, 50,125, 82, 37,116, 71, 43,252,208, 47, 78, 14, + 91, 85,101, 44, 92, 75, 34, 86,201, 20,200, 57,163,173, 65,149,181,135,240, 8, 12,182, 28,118,218, 56,146, 23,166, 54, 89,118, +242,112, 52,253, 50,134, 20, 51,214,153, 5,125,153,147,236,176,179, 50,232,156,240,126,162, 89,159, 74,234,218,236, 44,209, 98, +149, 37,137, 77,205,104,131,182, 6,215, 84, 12,125,191, 60, 87,210, 36,206,136, 28,198,194, 66, 80, 24,107,150,235,200, 24, 45, + 58,147, 16, 37,228,168,236,187,231,130,111, 89,131, 20,118, 65,138, 81, 0, 62, 94,166,151, 85,179,102,191,187,197, 31,118,168, + 74,172,190,211,225,192,180,223, 82,107, 75, 44,186, 13,137,173,238, 74,102,187,145,125, 71, 18, 5,179,115, 86,198,254, 41,137, + 85, 42,196,146, 17,239,200,126, 18,141,135,173,216, 93, 95, 49,236,110,209, 37, 4, 42,236,183, 68,157, 48,198, 17,147, 71,187, + 6, 69, 70, 87, 21,227,110,131,138,210, 73, 74, 71, 39,207,147,170, 28,198,126,216,201,228,192, 24, 17, 31,230, 88, 64, 90, 34, +214,210,214,201,136, 26,104,218, 86, 50, 18,108,141, 94,157,208,180, 43, 65, 11, 23, 17,171, 92, 11,250,232, 25, 80,166,109,229, +153,100,235,154,243,119, 62,224,209, 23,190,194,197,211,119, 56,125,244, 4,109, 29,175, 62,252, 9,164, 72, 30, 71, 14,215, 47, + 25,111, 94, 17, 14,123,198,205, 53, 49,121,113, 65, 4,143,113, 21,182,169,209,174, 42,170,253, 17,235, 26,180,117,203, 68,168, +106, 58, 41, 2,235,150,122,181,198,181,107,185, 86,167, 65, 10,116, 43,157,116, 12,190,220,191,153,166,235, 22,123, 98,158, 60, +166,170, 68,231, 83,186,250, 28, 68,167,212,172,215,164, 8,174,169,152,134,189,224,191, 21,146,124,103,197, 99,175,180,165, 62, + 57, 21,186, 93, 63, 74,102,129, 49, 37,116, 69,188,238,214,105,177,200, 25, 71,127,123, 45,216, 91,171,165, 8, 69, 34,154,179, + 82,114, 63,205,137,154, 5, 13,155,201,216, 74,152, 30,201, 7,252, 52, 82, 85, 85, 17, 37, 3, 86, 17, 14, 7,140, 50,234,119, +231, 78,245,110,135,154, 72,196,162,216, 83,146, 55,157, 37,176,195,123,143,202,176,185,190, 98,119,125, 77,191,185,101,232, 15, + 12,251, 61,187,219, 27,246,219, 91, 54, 55, 87,164, 24,216,221, 94,179,187,189,229,176,221,112,216,221,178,219,110,137,211,196, +179,143,126,194,230,197,167, 84, 77,195,217,163,199,100,165,232, 86, 43,208, 22,107, 13,155, 79,126, 92,118, 9, 44,176, 25,149, + 21,219,155,107, 46, 78, 78,249,244,249, 11, 82,134,143, 63,250, 17,251,161,231, 48,120,118,251, 61,219,195,129,253,225,192,208, + 31,232,135, 65, 72,112,163, 39,248,192, 20, 11,201,108, 57, 72,138,164, 74, 41,214,231,151,124,233,151,126, 89, 56,219, 90, 47, +169, 97,186,116, 44,174,236, 81, 77, 17, 82,205, 7,198, 49, 93,237,206, 70,148,143, 60,246,102, 25,217,207, 7,250,241, 3,123, +206, 67,159, 57,231,199,193, 47,247, 44,108,206, 45, 10,208,153,210,198,226, 71,190, 75, 11, 91, 50,229, 99, 66,199,196,186,169, +249,173, 95,251, 85,190,255,195,239,145,115,228, 63,250,103,255,156,205,205, 75, 54,219,237,207, 13,109,249, 89,135,123, 94,136, +126,234, 40,234, 85,125, 78, 89,173, 11,253, 47,163,104,154, 21,182,174,238, 40,103, 37,216, 98,166,225, 29,191,119,243,244, 34, +198, 57,184, 37, 45,162,190, 88, 40,100, 58, 11,255, 64,124,246,133, 61,127,212,201,206, 76,131,121, 79, 76, 78, 84,206, 96,116, + 49,126,228,187,168, 83,238,125, 94,250,232, 8,157,197,116,185,104, 29,242,242,112,158,209,158,119,113,155,178, 27, 59, 94,177, +136, 80, 80,151,196, 63,121,136,132,148, 75,124, 36,116, 37,182,114,115,253,106, 73,103,122,125,111,190,216, 55,181, 40,157, 5, +103,233,137,217, 23,182,125, 81,225, 55,173,236, 30, 67, 16, 37,172, 82, 18, 15, 89, 80,173,117,183, 46,146, 10,185,238,151,185, +139, 86,212, 39,103,203, 1, 61,175,188,100, 4,110,138, 54, 68, 17,162,132,202,228, 66, 1, 20, 58,154, 64, 49, 4,177, 43,110, + 20,178,164,253, 25, 99,136,201,151,189,186,198,247,187, 34, 40,147, 3, 32, 5, 65,112,198,121, 28,159,228,247,202,150,238,204, +218,226,137, 22,152,136, 93,173, 57,127,235, 41,166,233, 24, 55,183,146,100, 55,201,232,222,212, 98, 73,178,206,201, 88, 59, 38, + 14, 55, 55,228, 48, 45, 66, 83,109,172,160,120,251,253, 34,220, 19,107,155,145,255,127,241,148, 7,223,203,103, 88, 10,143,153, +239, 80,181,181, 0, 63, 10,233,176,170, 92, 57, 8,100,122,112,184,189, 38,142,131, 68, 75,143, 7,252,208, 83,183,141,116,250, + 37,171, 93,105, 5, 70, 48,163,217, 57,153, 46, 84, 53,196, 76,240, 35,227, 48, 16,167, 81,158, 49,182, 42, 55, 79, 20, 97, 93, + 41,116, 4, 29,170, 57,127,235,169, 92, 83, 5, 77,157, 67, 44, 66, 62, 45,239, 77,242, 18, 46,101, 4, 68,149,166,161,104, 36, +214, 98, 43,156,198,133, 34,152, 10,192,132,194, 79,152,113,180, 74, 25,234,149,140,148, 87, 23, 15,139, 80, 95, 51,245, 3,222, + 15,130,196, 53,150,135,239,127,145,211, 71, 79, 88, 61,120,200,250,193, 99,161,198,149, 49,244,188,246, 66,101,129,118,189,251, + 62,202,213, 68, 12, 89, 43,134,126, 75,242,131, 20,192,202,224,170, 10,215,201, 78,221,117, 39,130,183, 86, 6, 99, 53,186, 36, +137,234, 82,105, 87, 77,131,237, 86,116, 39, 23,216, 50,249,176, 93, 71,213,173,200,126, 44,197,173, 34, 28,246, 66, 13,212, 74, +248, 16,211, 72,152,119,218, 5,139,110,173,132,243,104,115, 87, 88,205,228, 69,148,198, 85, 21,202, 58, 92, 85,129,130,118,125, + 90,176,174,213,178,182,171,219, 14,162, 76,160, 82,136,128, 64,151, 66, 10,140,251, 3, 58, 73,120, 80, 8,129, 28, 36,139, 67, + 87, 53, 85,229, 74,188,178, 20,183,211, 56,146,189,168,229, 83,150, 40,234,186,145, 17,123, 78,119,177,221, 49, 6,234,110,133, + 15,113, 81,222,123, 31,208, 40,148,169, 92, 54,186, 42, 15,163, 80,160, 28,186,140,200, 68, 68,164,141,166,109,133,197, 27,124, + 98, 26,101, 39,227,189,151, 81,189,149, 49, 82,246, 35,171,147, 83, 34,136, 74, 59,138, 61,237,228,228, 4,235, 44, 7,159,136, +185, 80,180, 92, 77,189,106,184,120,252, 46,221,233, 37,103, 15, 30, 82,119,107,214,167,167,124,252,103,127, 68,216,221,146,115, +184, 3,207,164,204,245,139, 79, 57,105, 27, 98,132,186,174, 24,251, 45,181, 17,181,237, 52, 77, 12,227,184, 16,225,252,228, 9, + 94, 68,112,169, 28,230,243, 77,190,140, 38,181,229,236,225, 83,222,251,194, 23, 36,240,100,238,224,202, 27,172,203, 7, 63, 87, +179,179, 34, 61,197,184, 80,212,142,249,232,233,136,166,118, 39, 16, 11, 50,242, 42,129, 33,198,152,123,244,178,101,164, 59,179, +217,103,220,170, 18,146, 89, 42,241,175,199,136,214,121, 4,239,189, 95, 48,171,243, 40, 57, 6, 25,135,174,234,138,183, 31,158, +243,253,191,249, 46,155,195, 30,239, 61,239,125,240, 69,126,240,189,191, 98,187, 59,208,247, 35,199,197,220, 47,162,152,254,124, +247, 30, 63,135, 71, 61, 38,184,133, 4,174,169,105,186, 53,202,222,241,252,117,113, 22, 28,103,192,207, 41,105,199,223, 71,171, + 59, 75,153,214,119,133,139, 45,147,130,231,159, 61,147, 49,105,140,159, 19,240, 29,227, 82,180,202, 52,165, 3, 75,197,173,144, +239,248,186,247, 82,178,238,212,237,105,241,176, 79, 62,148,110,189,136, 21,179, 94,248,242,115,129, 51, 3, 85,142,127,213,117, +141, 82, 98,235,201,139, 37, 76,246,170,151,143, 30,227,189,103,115,125,117,111, 84,254,250, 4, 69,148,188,229, 16,201,243, 13, + 61,145,115,162,114, 13,193, 71, 92, 85, 9,246, 53, 76,196, 40, 2, 43,235,172,120,144, 11,247,193, 24, 75, 44,228,185,156, 3, +228,162,250,213,242, 26,181,117,228,233,128,159, 60,174,145,152,215,249,189,141,229,122,167, 96,123, 82, 89,109, 88,107, 8,197, + 22, 20, 39,209,125,100, 35,216, 79, 99, 68, 36, 90,117, 13,195,237, 13,214, 58,130,151,140,131, 20, 37, 48,199, 53, 53, 33,133, +101,197, 81,175, 86,178, 75, 14, 94, 68, 87,195, 1,237, 42, 50,170,116,151, 35, 74,207,162, 71, 39, 99,102, 91,225,180, 33,146, +136, 94,138, 29,241,163,231, 50,182,207, 98, 77,165, 36,215,217, 10,215, 52,119,247, 90,140, 36, 47,235, 62, 99,181,168,155,141, +146, 88, 87, 99, 36, 72, 68,137,210,222, 15,123, 81, 85,231,132,214,118,177,221,106,227,176, 93, 71,152, 2, 42, 70,236,170,197, +168,138, 76,100,218,109, 36,144,200, 40,146,177,204, 97, 4,139,179, 34, 69,177, 61,133,128, 63, 28, 72,222,203,206,182, 8,250, +156,109,104, 26, 73, 23, 75, 49,225,125,164, 62, 59,195,239,183, 36,239,169,187,149,236,126, 55,183,242,220,210,242, 60,142,227, +136,174, 43,121,253, 41, 98,235,150,156, 53, 85,123, 2,113,162,223, 92, 19,194,116, 84,220, 74,126,135, 43,185, 2, 74, 25,218, +211, 83,153, 40, 93, 62, 64,215, 53,182, 93,227,180,198, 7, 95, 16,192, 70, 0, 80,198,144, 82, 96, 60,236,229, 90, 73, 9, 63, + 28, 24,119, 27, 14,183, 27,180,134,230,226,193,146,195,174,141, 33,249,136, 31,123, 82,156, 56,121,240,136,148,181,172, 24,154, + 53,193,247,184,110, 69, 46, 98, 54,101,107, 9,231, 41,153, 9, 41, 6,201,174,139, 17,109, 13,166,178,132, 97,146, 21, 76, 6, + 21, 70,108, 41, 94,134,205,141, 8,135, 99, 92,132,203, 42, 73,152,144, 2,148,117, 34, 86,179, 22,219,212,114, 14,204,153,231, + 41, 97,108, 69,138,129,105,242, 84,109,135,117,150, 97,191,163,105, 86, 36,149, 8,195, 88,252,227, 65,166, 54,206,129,117,212, +171, 21, 83,193,165,147,165,152,215, 85, 3, 33, 72,161,163, 13,193,135, 50,242, 87,139,223, 92, 44,183,242, 76, 9,105,126,222, +204, 52,189, 73,114, 20, 98,148, 32,164, 28,197, 94,170, 16, 18,100,185, 79, 45, 80, 48,142,110, 97,108,235, 82,125,172, 86,107, +198,113, 96, 42, 55,236, 56,142,184, 82, 65, 43,149, 72,217,139,220, 41,138,122,155,156, 49, 10,214,171, 53,155,156,197, 2, 48, + 14, 88, 45, 33, 14, 4, 79,240, 94,114,110,199,158, 56, 57,134,155, 27,169, 90,180, 41,227,232,128, 5, 78,215, 43,156,179,104, +173,168, 92, 37,209,149,211,192, 38, 78,120, 47,140,222,186,174,208,185, 98,119,243,146,148,194, 29, 25, 46, 68,124,144,195, 60, + 22, 47,232, 34, 96,155, 31,160, 74,113,114,118,193, 59, 95,250,146,252, 12, 71,156,115,217,177,136,240,205,154,146, 72,150, 67, + 1,124,136,203,217, 20, 74, 89, 76,162, 28,181,214, 82, 85, 85,233, 44,147,140, 54,181,161,109,170, 69, 76, 39,126,217,226, 31, + 95,186,118,241,251,106,173,113,165,160, 80, 41,149, 15,210,209,212,134, 97, 28, 8,161, 88, 29,138,189,111, 62,224,231,209,104, + 42, 10,122, 91,215,212, 64, 99, 18,127,246,103,223,166, 31,101, 21, 17, 99,100, 56,236, 81,100, 42,103,152, 38,125,151, 61,254, + 26,150,247,245,238,251,103,217,161, 94,223,167, 23, 18,170,160, 85,115, 46, 1, 26, 50,126,180,152, 5, 76, 19, 99, 90, 16,185, +119, 42,244, 35,251, 92,177, 83, 37, 53, 71,168,138, 14, 98, 6, 16, 37,163,142,160, 43, 63,199,202,149, 51, 85,101,151,232, 77, + 85, 56,180,234,136,121, 48, 23, 87,220, 67,214,136, 47, 54, 33, 93,169,210, 80,219, 6,227,172, 64, 31,128,113,232,101,172,103, +220, 50,206,227, 8, 74, 52,142,227,162, 63,200,121,246,252,203,251, 21,124,144,170,252,104,186,243, 57,140,155,182,104,215, 20, +100,109, 22,129,214, 20, 36, 86, 84,233,162,228,181,242,112, 46,158,109,167, 5, 12,227,199,210, 93,207, 32,169,201,163,180,162, + 89,159,160, 85,226,176,221, 18, 99,194,232, 8, 89,147,198,177,216,129,140, 92,247, 85, 35,202,239, 24, 72,125, 47,120,212, 73, + 58, 64,173,197,161, 48,141,195,178, 67,143, 57, 99,181,232, 37, 92,201, 53,239, 86, 43,134,195, 30, 87, 58, 13, 93, 10, 85, 99, + 42,148, 74,139,125, 53,233,132,209,150,225,112, 16,222,133,130, 20, 2, 57, 38,124, 56,160,181,145, 38,193,128,171, 90,156,177, +101, 29,209,202,244,161,164,119, 85,117,203,216, 79, 98, 7, 42,152, 91, 17,202, 89,177,149,185,134,172, 52, 62, 39, 12, 48,237, + 7,185,145,231,156,130,152,100, 20,156,133, 2,103,234, 70,186,224,190, 47,208, 28,181,140, 93, 83,140,210,217,106, 83, 10, 38, +201,249,182, 93, 3, 73,161, 79, 90,226,112,144, 3, 44, 75, 97,225,251,219, 5,157, 45, 9,108,101, 38,180,151,136,232, 92,162, +122, 83,142,212,205,169,248,236,147,103,119,115,189, 4, 52,105,224,240,234,153, 76,227, 92,205,161,223, 75,166,248,194,130, 40, +175, 5, 32,102, 70,223, 75,129,149, 7, 98, 12,178,222, 48,118,113,250,184,102, 77,187, 58,161, 41,224,149,238,100,205, 20,164, + 80,148,142, 59,224,131, 76, 59,199,253,150, 49, 38, 98, 24,197,101,226,106,166,225, 64,242,178,110, 2, 69,211,173, 9, 83, 47, +201,122,109, 71,213,157,130,211, 76,251, 61,113, 24, 80, 90,227,195, 36,162,198,202, 80,153, 83,137, 21,237, 58,226,212, 19, 75, +154,162,239, 15,203,179, 82,135,128,107, 87, 12,251,145,232, 7,148,213, 88,219, 72,168, 82, 85,147, 38,177,246, 78,195, 30, 5, + 84,174, 34,135,137, 48,236, 89,159, 95,128,115,164,113,100, 56, 28, 88,157, 93, 98, 84, 46,174, 36,150, 41,169, 80, 15,181, 48, + 48, 74, 94, 5, 42, 17,211, 40,215,132,159,240, 36, 82,168, 80, 10, 9, 35,170,220,130, 28,214,214,112,178,126, 64,156,196, 46, + 61,238,246,104, 39,141,151, 46,118,232, 28, 5, 68,163,157, 45,215,130, 88, 57,181, 49, 76, 67,143, 53,154, 80, 38,225, 49, 6, +180,213,196, 36,120,226, 48,149,231, 68, 17,100, 83,105,140, 66, 4,164,218, 96,107, 39, 43,190,113,196, 26, 45,251,155,105, 44, + 17,114,214,150, 40, 56,176,214,208, 52,103,146, 62, 54, 78,232, 70, 14,166, 76, 68,107,119, 39,188,202, 18,167,106,173, 45,234, +234, 76, 93, 87,172,234,154,151, 37, 43, 59, 21, 26, 85,242,158,132,151, 49,119,152, 72, 74, 18,205,194,140,209, 36,131,134,151, +251, 87, 92, 94, 92,208, 31,122,166,105, 36,133,204,233, 90, 70, 87,135,221, 65, 84,163, 39, 39,152,213,154,243,199, 31,176,185, +126,206,245,237,103, 75,148,102, 90,108, 92,119, 25,198, 50,142,213, 75,168,194,201,217, 25,159,254,244,167,212,133, 89, 61,231, +112, 27,123,196,249, 86,122,177,184,220, 37,194, 73, 36,232, 44,162, 51, 71, 1, 39,226,237,149,239, 49,179,219,149,146,180,174, + 76,201, 21, 47, 1, 54, 51, 20,134, 35,170,156,117,142,170,170, 80, 40,198,105, 98,115, 59, 44,157,120, 88,162, 75, 53, 77,211, +200, 13,114,164,184, 79, 33,113,121,178,162, 81,145, 63,255,139,239,136, 56,107,154, 74,167, 15, 97,216,242,240,226,148,205,118, + 95,144,184,211,231,198,190,111, 82,180,191,233,144, 63, 14,147,153,223, 99, 81,226,151, 66,195,106,180,181,133, 43,144,153, 74, +118,249,220,145,223, 81, 97,213,178,135,141,113, 6,246,132,101,197, 49,143, 56,245,145, 56, 47, 70, 24,246,253, 2,238,121, 61, + 89,238,120,140,110, 52, 56, 87, 82,169, 99, 42,246,107,125,143, 91,159,231,252,117,197, 17, 64, 72,145, 77,197,234,228,156,126, + 24,201, 33, 96,148,102,236,123, 80,241, 46, 26,211, 88, 92,211,242,228,225, 91, 40,149,249,248,199, 63, 42,171,141,227, 81,250, +113,108,182,220, 7,227, 56, 46, 58,150,159, 49, 14,161,174, 27, 66,138,101,148, 89,248,242,202,226,227, 88,186, 35, 33,236,205, +233,124,214,213,248, 97, 36, 71, 47, 96,163,130,218,213, 42,139,149,212, 74,186, 83, 80,165, 24,202,101,143,108, 21,202, 9,246, + 56,250,132,213,166,208,252, 34,132, 88, 70,251, 94,236, 99,182,102, 26, 7,121, 99,149, 16,186,100, 34,160, 9,113,162,106, 79, +136,211,132,113,150,105,146,177,126,213,117,140,253, 32, 5,112,140, 4, 21, 48, 40, 9, 37,162,116, 45, 73,194, 86, 68,248,102, +136,253,142,156, 11,210, 21, 45,133,212,148,113,173, 0, 90,194, 56,149,184, 86, 95,196,152, 19,253, 32,226, 56,227, 4,231, 41, + 7,168,172, 6, 82, 41,204,181,118,144,228,103,203, 74,152, 13,218, 72,215, 29, 66, 57, 28,149, 70,169, 64, 86,147,240, 50,148, +194,213, 13,126, 60,144,115,146, 67, 60, 75,183, 71, 78, 76,195, 1,165, 12,205,233, 9, 83,144,181,161,239, 15,100, 63, 44, 19, + 14,121,198, 33, 25, 12,165,128, 77, 73,118,230,198, 24,210, 52,148,235, 83,254,238,176,219,210, 89,199,238,246, 26,103,141,136, +149, 83,194, 84, 14,229, 5,206,149,198, 3,170,178,242, 94, 90, 91,148,221,147,168,236,181, 38,145,208,182,194, 86, 21, 85,211, +226,186, 78, 24,225,198, 82,183, 45,174,110,169,154, 26,109,170, 34,130,126,201,238,246, 10,180,102,119, 53,162,172, 35, 6, 79, +216,111, 72, 89,209,118, 45,245, 74,104,110, 97,242,104, 45,170,235,186, 54, 12,219, 91, 17, 79,150,184,219,172, 20,251, 87, 55, +212, 77,141,169, 90,249, 28,181,220,123,140,194,100, 55, 85, 77, 56,236,201, 94,156, 14, 42, 37, 84,101,152, 98,160,173, 27, 66, + 24, 81,105, 66,185,122,209,189, 56, 87, 19,167, 9, 91,201,253,169, 93, 77, 56, 92, 99,157,101, 10, 17,140, 98,183,189,161,114, + 21,218, 88, 17, 44,135, 9, 99, 44,245,170,163,170, 42, 14,219, 45,121,242, 68, 50,214,233, 99,177, 80, 17,237,170, 69,215,144, +185,155,196,218,170, 38,101,141,173, 26, 80, 3, 62, 69, 52,224,199,145, 20, 3,253, 86,225,170, 90,168,135, 41,147, 14,101,138, +165,164,240, 27,251,131,172, 6,212, 26, 83,116, 21, 50,129,128,186,149, 53, 18,193, 75, 61,111, 52,218, 86,228,232, 33, 38,140, +179,168,194,212,239,214,235,187, 53,102,209, 32,105,175,241,131,151,107,247,242,225,131, 76, 74,236,247,123,241, 69,151,132,167, +217, 86,112,204,125, 94, 66, 43,172,101,183,221,202, 40,131,153,148, 3,206, 90,218,182,165, 91,203, 72,200,143, 19, 67,121,152, +167, 24,137,153, 5,109, 9,144,141,154,123,222, 69,184,163,114, 70, 35,123,171,203,139, 11, 66,142, 76,227,200, 48,244,156,173, + 59,166,201,139,186, 56,137,234,207, 53,141, 64,243,235,134,243,211, 51,198,194,105,150, 67, 34,210,247,123, 66, 12,164, 56,143, + 87, 29,221,122, 77, 93,215,244,135, 3,219,155, 77,121, 56,189,198, 31,215,234,104,111, 74, 17,129,148,124,242,124,140, 33, 61, + 2,179,168,251,172,243,187,144,148, 55, 24,130,185,235, 12,151,172,101,165,142,128, 45,175,131, 69,212,231, 20,208,188, 70,122, + 67, 65, 61,135,195, 20, 97,159, 88,188, 50, 86, 25,126,253,215,190,206,205, 26,201, 54, 75, 0, 0, 32, 0, 73, 68, 65, 84,205, +134,237,126,207,245,205,142,253,232, 23,203,221,155,188,229,233,181,108,245,159,213,189,139,135, 93,149,201, 65, 65,252, 58, 11, +218,144,185,139, 82,157,211,168,230,195,124,166, 59,205, 48,159,227,174,127,222,113, 11,171,125,134,249, 20,174,119, 8,244, 37, +199,252,117,139,215,241,161,174,138, 15, 84,171, 84,186,114,150,113,214,113, 64,208,113, 26,214, 44,134,114, 77,199,234,228,156, +113,242, 12,253, 1,171,149, 92,203,214, 8, 94,210, 24,124,185, 1,219,174,195,218, 74, 70,223,198,136,224, 49, 75, 39, 32, 98, + 74, 41, 52,239, 89,253,170, 90,174, 81,239,223,248,158,186,170, 45, 22, 48, 1, 77,184,186, 70,105,135, 34,209,239,110, 23,207, +243, 92,148, 44,144, 24, 37, 84, 42,237,236,162,231,240,147,167,106,107, 73,105,139, 1, 84,150,189, 34, 25, 91, 75,140,168, 50, + 70, 2, 48,130,172,179,148,177,152,202,225,234,142, 56,141,140,251, 29,166,114, 24, 43, 22, 47, 91, 50,164, 33,211,111, 55,146, +251,236,106, 41,144, 80,197,205,209,200, 52, 47,149, 14,184, 64,127,178,204,189,139, 54, 68, 45,110, 5,215,118, 40,237,176,221, +154,105,115, 85,130,160, 44,211,184, 45,241,158, 53,117, 85, 49, 14,135, 37,108, 38, 83,118,248, 33, 16,167, 94,208,172, 40,225, + 52,204,176,170, 34,185, 80, 86, 14,121,138,118, 67, 27, 17, 20,230,162,116, 87, 57, 72,161, 93,236, 92,202, 57,121, 52,232,146, + 28, 24, 37,215, 91, 70,245,242,181,105,154,168,187, 86, 30,184, 49, 10, 30,182, 64, 79,140, 17, 53,244,108, 59,245,211,192,126, +179, 93,160, 72,178,243, 78, 37, 37,112, 6,109,149, 16, 39,165,169,219,182,160,120, 69,231,160,141, 38, 34,197, 94,140,177, 16, + 10,197, 43,173,170, 6, 87, 86, 46,117,211, 80, 85,181,216,166,178,164,232,245,195, 64, 85, 57,188,151,201,158, 31,123,136,137, +172, 50,206, 85,244,251,173,172, 5,170,122,249,115,163,172,224,136,167, 1, 85, 85, 52, 39, 39, 76,189,176, 4,106,103,232, 15, +123,114,148,231,179, 2,154,245,169,216,235, 80,248, 73,124,219, 49,120,116,153,180, 85,221,186,192,110, 44, 41,140, 24,224,176, +187, 69,219,138,126,115,139, 53,142,186,109, 73, 74, 97,157, 43,235, 17,207, 52, 76,100, 13,149,171, 81,214,138,245, 48, 68,140, +162, 76, 10, 18,168,132,159,166,226, 0,113,216,210,168, 25,109, 24, 15, 61, 33,136,230,193,152,106,113,191,132, 24,139,218,223, +226, 71, 41, 90,133, 29, 80,180, 36, 83, 40, 40,235, 40,214, 61,231, 80, 57, 75,232, 80,153,204, 25,231, 36,246, 55,197,242,125, +181, 88, 4,103,157, 71,121,173, 89, 33, 1, 63, 22,226, 36, 2,224, 16, 60,196,128,171,203,218, 64, 21,158,129,214,203,202,192, + 86, 21, 42,139,152,122,190,142,140,117,232,202, 22, 17,172, 20,172, 49, 39,121,237, 57,163, 78, 79, 79,179,177,174, 8,175,132, + 5, 94,215,117, 65, 99, 74,151, 61, 39,134,205, 15,222,105,154,238,135,152,148,165,190, 49, 34,116, 51, 90, 14,249, 56,239, 38, +230, 78,176,188,153, 49,132,229,247,170, 36, 95,163, 64, 31,113,163,181, 82,212, 77, 77,202,130,114,205, 33,241,248,241, 67,110, +111, 55,101, 44,163,151,189, 68, 46,112,101,235, 92,161, 80,201,235, 92,173, 86, 75,188,105,211,180,244,195, 64,206,176,219,110, +217,237,182,164,169,255,156,239,250,115,221,104,193,155,170,252,198,227,249,115, 4,182, 55,158,223, 71,225, 51, 63,103, 89, 93, + 0, 32,247,255,254,155, 44, 99,111,250,183, 94,127, 45,199,127,231,209,197, 25,239, 62,185,100,179,221,113, 24, 6,174,110,183, + 12,211,231,129, 38,111,130,208,188,254, 58,222,100,119,123, 61, 85, 15, 83,172, 97,202,220,237,146,139, 48, 80, 23, 15,184, 88, +156, 18, 70,105,156,177,119, 32,152,215,152,248,203,117,100,164, 90,159,250, 93,233, 36,243,210,253,190,233,245,222, 17,241,242, +178,211,254, 89,157,241,204,221,183,214,209,118,107,178,182,248,224,169,235,134,253,110,131, 51,138,201,143,162, 21, 8, 98, 63, + 18,127,168, 65,235, 59, 53,119,244,129,170,150, 73,203, 76,196,243, 97, 44,206,137,180,140,231,223, 84, 56, 45,175, 69, 59,108, + 83,139,154, 90,139, 56,199, 84, 78, 10,161,156, 24,125, 95,178, 17, 28, 42, 75,154,215,140,140, 84,170, 66, 31,233, 59,102,113, +166,113, 78,146,195,180,198,199,113, 97,192, 27, 83,129, 81,104, 37, 59,247, 28, 99, 25, 67, 10, 45,203, 52, 43,172, 49, 12,219, +237, 66, 0,140, 36,170,238, 68,196,144, 33,226,167,190,116,159,162,202,151,107, 33, 20,193,153, 65,105, 43, 99,200,163,251, 59, +149,189,190, 82, 70,214, 12,214, 10,183, 90, 91,170,213,154, 48,246, 40,163, 9,135, 67,193, 27, 87, 24, 87,108,115,204, 58,153, + 84, 10, 5,241, 26, 83,188,232,179,207, 61,149,166, 68,235, 12,218, 81, 53, 45,126, 26,228,224,205,185,140, 62, 5, 98,148, 98, +144, 3, 73, 73,138,225, 44,114, 93, 16,195, 74,137, 93, 45, 43,116,229,138,189, 78, 9,119,220,139, 14, 97,154, 36,169,142,152, + 80,214, 98,173,198,106, 43,137,138, 69, 12, 56,236, 15, 66,153,155,111,112,117,103, 43, 68, 41,148,171,201, 89,209,173, 79, 48, + 77, 35, 20, 57, 99,113, 93, 39,205,214, 65,112,168, 18,166,114,130, 3,129,103,249, 81,108, 93, 33,162,171,154, 41, 38, 76, 18, +151,142, 81, 26,219, 84, 82,156,228,204, 52, 12, 66,236, 43,215,137,109, 86,132,126, 91,226,141, 37, 53, 80,107,205, 52,140,100, +173,201, 97, 4,165,105,186, 85,137,212,173,202,251,164,200,195,192, 56, 78, 40,147,168,171,154,164, 28, 49, 76,146, 47, 30,228, +240, 83, 41, 20, 27,157, 47,161, 80,250, 46,108,202, 89,185,222, 38, 65,184, 38,173,113, 85,205, 52, 12,229, 90,138,248, 65, 86, + 42, 77,183, 46, 20,193, 36,153, 1, 25,198,221, 70, 26,173, 36,103,151,117,142,105, 28,200,229, 51,136, 62,162,109,105, 42, 42, + 71, 14,178,110,182,110,158,206,200,148,137,210,220, 4, 31,150,230,204,160,176,117, 89,169,198,178,126,205,226, 44, 8, 67,225, + 37, 40, 9,176, 81,128, 31, 4,110,163,180, 41, 5,115, 83,172,134,229,185,105,156, 4,202,228, 84,162, 83,101,108, 63,147,196, +165, 24, 17,202, 93,206, 72,241,146,196,134,167, 75, 17,159, 10,220,204, 56,119,231,122, 10,242,254, 46,141,161,117, 46,207, 15, +153,170,114, 71,157,203,220, 85,231,123,132,171,227, 7,187, 41,157, 23, 57,211,156,172, 57, 28,246,165,143,212,228,164,238,212, +197, 71,113,170, 40, 85,246, 21,119,135,250,189,110,235,232,127, 59,107,139,210, 87,212,239,111, 63,125,139,171,171, 43,188,143, +139,197, 68,110,182,185,210, 85,203, 65, 48, 31, 28, 57,229,123, 29,238,146,205,157,197,115,251,243,196, 96,233,232, 80,254,197, +100,100,159, 63,224,223,212,225,190,233,235,121,161,122,253,130, 69,192, 47,248, 58,148, 82,188,245,224,132,166,170,152,250,129, +253, 48,114,152, 60, 49,203, 65, 52,163,103,127,158, 56,238,103,119,234,234,158, 72, 80, 78, 28, 85, 42,203,197, 69,125, 47, 12, +229,120, 39,191, 92, 83, 71, 25,240, 75,128,143,214, 56,107,201,170,196,108, 78, 19,253,246, 22,227,172, 8,147, 20,111,156, 52, + 28,167,142,221,229, 88,155,207,173, 27,238,189,158, 34, 94,170, 91, 17,233,120,239, 89,157,156, 46, 74,227,152,226, 81, 65,122, + 36,158, 76,249,158,151,159, 50,246,173,171,154, 76,146,125, 99, 41,110,195,228,239,189, 87,175, 59, 40,140,173,208,182,146, 3, + 43,140, 18,110, 1, 40, 39,212,189, 56,141,196, 52,149,117,142, 66, 97,202,136,176, 88,238,112, 34, 30, 42,126,239, 84,186, 82, + 83,176,146, 33, 4, 80,113,185,151, 99, 20, 20,103, 93, 75, 44,165, 42,130,186,170, 91, 49,238,110,209,182,150,245, 78, 12,203, + 26,193, 56,131,105, 86,139,208, 44, 76, 3,166, 20, 49, 51, 54, 89,151,135,142,173,220,226, 90, 32, 20,119, 64,140, 40,107,101, +119,238, 39,201, 87,112, 21, 49, 4, 76,229,100,170,166, 37,179,156,178, 38,209,214,201, 94,185, 36,192, 41,173,164, 11,212, 74, + 70,221, 57, 9,176, 67, 59,172, 43,137,107,185, 4, 3,165, 40, 99,232,166, 19,139,214,145,174, 38, 23,203,174,201, 81, 96, 48, +101,204, 61,187, 82,100,194, 99,138,202, 95,192, 48,218,150,206, 61,196, 82,140,100, 17,240,161, 56,185,120, 68, 54,144,189,120, +158,109,187, 34,151,213, 69,240, 35,126,156,216,190,248,152,148,203,154,206, 20, 5,181,213,216,118, 45,156,249,186, 33,197,192, +176,189,165, 61, 61,195,214,174,164, 45, 86, 88,173,136,101,229,151,208,248,253, 78, 86, 90,206, 17,134,129,186,173,151,231,156, +178,150,105,156, 36, 34,183, 68,199, 78,135, 29,227,126,183, 20, 63,200, 98, 20, 87,117,160, 21, 81, 89,116, 18, 24,139, 43, 42, +252,113,216,210,158,156, 9, 51, 36,201,148, 66, 18, 39, 13,126, 26,228, 25,175, 53,227, 97, 79, 93, 94,187,107, 90,146, 50,212, +117, 67,191,185,149, 34, 94,105, 98,152,152, 14, 59,113, 21,116, 45,218, 84,203,117, 50, 14, 67, 17, 17, 42,209,179,196, 32,162, + 61, 35,250,164,170,112,249,229,240, 44, 65, 66,211, 64, 24,229,186, 21, 97,182, 34,132,169, 8,113, 11,141,173, 36,183,105,103, +150, 51, 39,229,194, 14, 40,137,133,193,143,133,140,215,144,179, 39,166, 66, 13,205,119,115,100, 17,184,105,140, 50, 36,226,172, +116, 46, 34, 86,185,174,181, 49,132,105, 64, 91, 41, 34,195, 32, 73,154,174, 59, 97, 60,136,215,190,233,218,133, 77,111,172, 22, + 60,110, 17, 80,162, 53,209, 79,114,175, 78, 99,209, 32,201,251,144, 98,196, 89, 43,175,167,132, 50, 73,129, 20,203, 53,228,200, +193, 99,173,173, 69,180, 18,131, 8,123,150, 69,169,186,183,139,158,247,190,138,187, 17,102, 76,130,225, 91,173, 79,184,184,184, +224,176,219, 21,185, 49,139,122, 48, 33, 35,122,133,189,235, 8,231,152,206, 55,224, 80,142,255, 44, 38,217,105,228, 44,177,170, +198,184,162,216,150, 29,172, 84, 56,234, 78, 92, 5,101,252,117, 63, 64,114, 57,224,103,102,187,254,249, 32,150,165,243,203,111, + 72,160,252,127,113,176,254,194, 5, 64,254,255,246,111,253,172,239,191,219, 29, 8,110, 98, 28, 3, 67,177, 80,213, 90, 18,219, +156, 53, 76, 62, 83, 57,177,246, 76, 33,222,255, 64,142,138, 45,117,180, 34,120,125, 42,112, 15, 21, 27,197,194, 49,139,209,178, +206,100,125,132,157,205,243,167, 38, 7,147, 46,185,211,177, 84,220, 40,177,158,169,164, 8,227, 40, 22,163,236,232, 15, 91,249, +122, 58,238,192,255,182,247, 91, 23, 17, 30, 64, 88, 46,239,255,135,182,119,123,182, 45,187,235,251,190,227, 58,231, 92,107,159, +107,247,233, 86, 95, 37, 97, 33, 1, 78,217,152,150, 64,232, 90, 96, 4, 50,134, 22, 32, 83,101,236, 36, 85,182,137,157, 34,148, + 19, 76,128, 0,126,224,159, 72,133, 84,156, 84,229,217,111, 49,149,188, 17,192, 72, 72, 8, 12,182,193, 6, 74, 18, 82, 75,106, +245,233, 62,221,231,182,215, 90,115,142,107, 30,190,191, 49,230,220,187,143,132, 69,146,166, 84,146,104,245, 57,251,172, 53,231, + 24,191,203,247,251,249,242,142, 85,235,190,219,208,186, 82, 18,187,157, 44, 5, 45, 74,129, 42, 21, 49,100,236,247,123, 28,203, + 81,226, 68,171,136, 20, 53,195,115,234,202,145,231,244, 74, 46, 81,185,208,186,207,222, 40,233, 44, 86,235, 98,149, 82,221, 88, +143,170, 50, 74,153,201, 79, 40, 10,202, 82, 56,101,165,226, 51,154,222,255,210,138, 32,137,251, 77, 49,136,210, 57, 33,205, 11, +252, 64, 18,149,119, 14, 73, 46,198, 84, 43, 82, 34,147,221, 24,142, 70, 81, 11,106, 81,152,143, 71, 88,203, 61,164,117,158, 29, +158,223,179,120, 87, 21,185, 68,164, 90, 96,221, 64, 49,147,228,164, 43,109, 96,148, 70,140, 39,248,129,216, 81,130, 86,232,199, +205, 81,222, 83,105, 18,232,207, 38,181,141,142, 8, 81,239,166,200,241,125,173,107, 36,111, 38, 70, 22, 66,221, 82,202, 72,167, +146,160,138,240,217,151,133,187, 99,101,228, 89, 98,122, 86,173, 69,236,107, 22, 0, 17,166, 57, 5,241,157,179, 83,111, 9,134, +186, 86, 20,205,213,159, 17, 77,145,210, 6,181, 40,185,192, 34,178,100,114, 87,244, 96, 8,129, 41, 53,208, 20,245, 26,122,154, +224,252,196,221,121, 45,200, 49,193, 78, 59,114, 14, 36,190,249,250, 83,111,195,120,182,135,214,134, 12,138, 38,118,205, 12,198, +210,206,146,174,231, 12,118, 2, 95, 41,165,192, 15,212, 51,148,148, 17,107,128, 53,252,190,171, 82,192,114, 34, 32,236,200, 63, + 67, 41, 9, 58,106,118,123,161, 98, 57, 62,228,251, 37,144,177,106, 20,156, 85, 8,167, 83, 79, 24,211,198, 96, 24,207,144, 42, + 71,238, 41, 39,185,140, 21, 78, 15,239,241,121,149,110, 86,247, 9,157, 70,174, 25,195,110,135,179, 43,215, 16,194, 66,253, 78, + 12, 72, 49, 33,207, 71,228,156,225,167,157, 92,182, 21,110, 28,145, 66, 68, 90, 2, 74, 58, 2, 90, 97, 62,175,176,178,230,136, + 61,151,130,103, 74,156, 23,248,113,192,241,225, 34,211, 5,230,115,104, 89,177,150, 82,224,188, 68, 77, 75,113, 62,142, 35,194, + 50,179, 72, 30,216,253,198,152, 96,132, 46, 87,115,129,117, 86, 52, 40,169,227,169,195, 50, 19, 2,100,120, 54,198, 82,232,132, +176,150, 69,130,213, 8,121, 17,218, 39,109,125,214, 13,253,188,174, 57,119,135, 71,152, 79,208, 85, 97,119,229, 26,187,247,221, + 14, 70,175, 17,200, 69, 44,106,203,131, 7,112,251,189, 4, 6, 81,168,189, 44,212,168, 53,158,201, 48, 76, 84,203, 87,198, 55, +147,215, 47, 1, 22,185,240, 78,148, 36, 55,165,181,169,218, 74,176, 70,123, 49,148,196, 45, 86,244, 74,191,138,183, 24, 77, 85, +170, 72,176,186,126,227, 38,174,221,184,138, 47,252,249,159,203,173,201,202,182,200, 45, 90, 21,247, 19,181,208,251,221, 60,188, +125, 7,184,217, 99,111, 81,152, 93,133,172,184, 19,222, 13, 19,110,221,186,133, 59,119,238,224,116,154,153, 32, 94,202,155, 4, + 94, 91, 63,248, 54,178, 84, 89,166,133,213,194,113,111,150,139,237, 47,180,113,109, 26,253,250,136,168,209,175,127,153,126, 99, +221,253,255,159,127,121,163, 48,104,131, 84, 50, 98, 15,163,208,226, 87, 85, 82,185, 82,248, 83,170,186,176, 62,120, 19,211,172, +126, 99, 73, 95,253, 31,212,234, 66, 71,219, 50,214, 47,195,107, 46,106, 18,218,227, 65,156,112, 73, 17,222,143, 20, 28,126, 35, +197,146,122, 84, 86, 56, 95, 24, 99, 45, 47, 6,176,115, 50,134, 34,199, 38,166,107, 29,110,179, 40, 86,197, 36,178,150, 28,214, + 16,188,219,100, 62,109,188,164,208, 25,104,163, 16,194,210,215, 86,186,170,139, 57,244, 0,247,197,211, 30,243,204,168, 77,227, + 6,228,144,160,141,146,253,188,130,115, 35,209,153,162,220,213,218,176,123, 47,153, 18,144, 86,128,101,250, 51,172,117,125,117, +209, 0, 52, 20,232,104,161, 30, 70,228, 76,156,176, 31,119,244,223, 43,192, 57,238,173, 21,106,239, 70,115, 18,111,188,182, 98, +251,108, 28,134, 12,104, 22,211, 90, 93,180, 37, 66, 51, 42, 18,208, 92,179, 56,135, 28,104,169, 83, 50, 10,174, 69, 10, 35,109, +101, 39,159,197,167,110,164, 24,227,207,158,195,178,121,229, 54,216,220,158, 35,175,183,153,114, 93,160, 38, 86, 19,177,232,117, + 85, 39,170, 22,199,139,192, 81,170, 38, 3, 92,107,122,177, 57, 69, 17,228,112, 74, 40, 57, 72,166,248,208,249, 22, 57, 37, 24, + 71,113,152, 86,128, 25,175,226,250,211,207, 34, 11, 1,209, 58, 71, 17,109, 91,131, 72, 92,110,137,180,117,169,193, 3, 57,194, + 24, 47,110, 6,242, 65,116,101, 46,184, 49, 6,199,187,119,232,201,182, 22, 49,109,152, 12,146,234, 85,114,130,223,237, 17, 67, + 64, 13, 97, 29, 41,139, 64, 85,187, 1, 37, 71,140,251, 61,242,210,206, 77, 73,193, 52, 2,140, 1,177,217, 16,134,251, 26, 23, +202,226,198,121, 39,161, 54, 20, 46,150,154,145, 78,179, 36,152, 41,140,211,158,154,134, 40,246,188,249,196,115, 88, 50, 44, 84, +129,240,251, 13, 89, 2,181, 34,137, 62,165,251,255,115, 38, 28, 43,132, 46,166,229, 52,131, 66,176,150,104,231,252,128, 24, 35, +188,115, 36,252,213,194,181, 17,184,195,142, 33,138, 93, 80,193,248,145, 54, 49,235, 17, 79, 92,227,168, 74, 60,111, 35, 28,166, +156,100,116, 79, 66,160, 22,183,147,170, 21, 41, 71,185, 51,184,254,114,214, 9,245,143, 90,159,162, 10,156,159,128,156, 97, 70, + 22,194,241,112, 20,235,119, 64,142, 4,228, 40,205, 41,150, 21,114, 93, 19, 81, 49,229, 52, 11,123,191,194,250,145,191,127,206, +253,231,138,145,133, 67, 19, 28,115,205,109, 80,218,138, 45,113,146,173, 21,157, 17, 41,103, 24,235,135, 95, 81, 18,244,206,113, + 71,100, 66, 84,228,127, 46,210,246,215, 82, 89, 57,131,123,139,179,171,215,177,219, 95, 65, 74, 17,175,188,242,114, 23,151, 84, + 33,192,245,177, 55,149, 38, 28,191, 26,131,210, 14, 31,163,121, 64, 8,114, 17,154,202,105, 62,100,106, 61,160,100,116,234, 45, + 45, 16, 49,144,167, 94, 30, 97, 5,106, 7,101,171,222,182,251,226,188,161,106,233,166, 50,210,237,165, 55,210, 17,188,249, 95, +171, 8,174,253,124,205, 69,200, 74,233,242, 24,185,255, 11,234, 2,217, 12, 23, 48,175, 6,126,183,199,213,107,215,165,170,206, +184,113,243, 49,248,137,241,139, 90, 55,232,226,166,176,104,191,150,252, 44,109,135,162,154,162, 84, 93, 28,231, 27,163,241,244, +173,199,225,140,198, 28, 2,172, 54,120,230,137, 39,176, 59,219,227,252,252,156,162, 10, 40,105,120, 21, 45,137,221,218,165, 54, + 73, 93, 10,219,255,107, 15,100,197,215, 42, 88,234,133, 72, 87,106,126, 20,166,221, 30, 90, 25,212,210,246,189,156,107,173,235, +151, 53, 46, 85, 41,244, 10, 85,105,211, 65, 39, 41, 82,220, 85, 36,236,167,110, 62,146,203,233,113,111, 30,175, 95, 8,135, 69, +173, 32,141, 76,102, 67, 70, 68,160, 33,210, 3,190,132, 89,166, 65,124, 97,106, 3,228,136, 82,159,169,124,229, 66, 42, 95, 15, + 69,209, 10,218,104, 12, 3,217, 14, 60,104, 44,118,187,125,199,227, 54,129,105,109,184, 93, 99,248,125,180, 24, 69, 73, 93, 82, + 82, 69, 57,231, 80,228,123,170,149,235, 38, 99, 44,199,144,150,107, 0, 5,185,100,187, 26,141,130,197, 54,194, 4,179,197, 40, +246, 82, 74, 56, 20,141,211,206,238,127,216,157, 33,246,195, 63,247,202,180,234,214, 7,147,157,175, 21,117, 19,188, 60, 50,140, +113, 27,246,190,172, 21,188,196,254,214,194,125,174,106,197,143,192, 88,208,131,238, 69, 36, 84,161,106,102, 68,166, 29, 96, 60, +199,191, 57, 44,168, 37,138, 43, 66, 82, 17,219,184,114,243,220,212, 77, 50, 32, 39,129, 45, 71,158,238,137, 90, 55,236,245, 34, + 73, 87,150,158,240,225,236, 10, 42, 52,252,200, 9,199,180, 63, 19,116,177, 36,212,201,100,178,150, 36,191, 46,133,155, 10,149, + 83, 36, 63, 97,216,239,184, 2, 40, 66, 66, 12, 84,191,231, 24,176, 28,238, 75, 33, 82, 16,115,128, 1,189,239,125,143, 91, 50, +114, 78, 88, 14,231, 56,157, 63,224, 30,181, 22, 32, 39,156,223,123, 3, 57, 38,132,195, 1,105,225, 36, 36,204, 39, 10,182,106, +145, 51,147, 43,128,146, 51,130,140,225,141,177,112,206,194, 89,122,186, 75, 45,200,129, 19,150, 18, 35,166,179, 43,208, 70, 33, +158, 22,228,101,134,181, 22,110, 28, 96,157,133,245,140, 68,214,214, 82,121, 13,197, 21,140, 68,222,242,157,161, 7, 59, 47, 51, +223,122, 43,223,117,131, 68, 89, 11, 35,205,149, 27,185, 62,137, 33,200, 62,189,160, 40, 41,168,229,172, 94, 78, 51,140, 54,156, + 68, 21,230,145,167,176,192,106,186, 31,170,130, 20,188,238, 66,147,166,157,195,238,202, 85,228, 66, 63, 55, 74,162,197,249,120, +146,100, 55,130,124, 74,150,180,180,178,153, 42,214, 76,119, 1, 52,252,126,191,198, 63, 43,208, 30, 60,142,208,198,116,114, 91, +201, 25, 69, 41,104,203,117, 98,146, 73, 75, 77, 9,121, 14, 80, 37, 67,123,203,117, 81,164, 64,155,241,210,150,188, 10, 8,163, +164,242,140, 79, 37, 49,205,176,130,105,161, 49, 32, 37,137, 48,150,130,167, 2,253, 51,171,133,222,125, 93,229,182, 45, 92, 59, +181, 41,140, 86, 10,234,198,227,111,169,253,197, 18,232,124,169,124,153,115, 46, 40,109,127, 83, 86, 62,182, 42, 5,243,124, 92, +189,185,235,109, 41,119, 37, 71,135,171, 15, 80,242,102,197,179,169,149, 22,123,147, 21,251,152,233,106,245,154,248,224,240,103, +128,188,148,192, 48, 24,126,185,137,126,204,121,158, 59,116,228, 63,233, 47, 77, 15,174,247, 35,139, 62,109,152,155,219, 85,235, + 82,144,180,237, 67, 83, 18,162, 85,141,249, 77,173,183, 86,246,194, 58, 97, 43,184,170, 34,230,105, 59,155, 38, 76,218,237,247, +152,231, 5, 57,205, 66,125,178, 8,203, 17,126,216, 97,119,245, 42,140,124,249, 70,177,128, 57, 29, 30, 82, 24, 97, 89, 16,245, +171, 85, 90,217,157, 85, 88, 34, 87, 39, 74, 0, 45, 79,220,188,137,199,206,206,240,198,189,187, 56, 63, 28, 81,148,194, 59,223, +254, 86,168,148,241,210, 87,111,227, 16, 34, 14,226,135, 92,139,143,202, 62,214, 24,218, 50,154, 26,183,174,130,182,134,104,237, +223,185, 86,111, 82,172, 87, 81, 37,183,203,186, 42,142, 3, 7, 63,194,218, 1,203, 50, 35,151, 32,124,239,218,201,102,245,194, +164,133,151,174, 17,162, 20,138, 66, 10,139,196,124, 86,104,237,190, 97, 34,222,163,196,126,195,196,142,191,200, 78, 74,107,141, +170,120,120, 51, 53,142,172, 0,165,168,174,238, 26, 18, 77,202, 93, 78,185,127,247,107,135,174,229,103, 55,112,102,160,157, 16, +192, 48, 14,196, 63, 42,133, 16,102, 44,167,153,159,120, 87, 6,114,100,143, 28,101,194, 36, 42,118, 67,118, 67, 46,236, 10, 42, +128,146, 22, 1,176, 12, 72, 65,252,201,138, 93, 53,180, 88,242,180,163, 69,176, 71, 56, 2, 21, 9,165, 84,134,153, 40,177,248, +213, 42, 8,202, 2, 45,164, 53, 84, 30, 70, 74,183,238,183, 82, 12, 40,200, 91,198, 97, 82,229,109,134,145, 12,238, 13,196, 68, + 73,234, 30, 49,167,150,135,190,146, 85, 65, 46, 40, 53, 97, 3,253, 19, 16,157,172,231, 52,221, 53,195,180, 7,156, 70, 58,156, +144,230, 35, 69,106,122, 51, 50,147,132,183, 6,243, 49,146, 4,216, 42,197,214,149, 43, 45,185,239,218, 73,180, 46,189,212,165, + 97,136,219,115,221,124,222,226,113,111,170,120, 13, 42,197,107, 10,200, 53,139, 94,211,160,192,244,203, 69, 43, 45, 41, 89, 20, +235, 66,186,114,227, 61,140,159,216, 73,149,140, 24,131, 40,227, 7,140, 35,125,214,202, 40,132,121, 65,134, 98,206,188,102, 49, + 82, 50,225, 71,203,241,200, 95,203, 8, 76, 72,154,160, 44, 35,112,227, 44,204, 48, 64, 41,133,249,156,120,109, 63, 77,124, 94, +149, 70, 70, 69, 9,252,231,180,229,103, 27, 67,160,215, 95,166, 17, 75,138,216,159, 93,101,144, 87, 46, 12, 62,170, 5, 37,102, +216,221, 14, 49,156,160,229, 93, 45,125,202,166,132,159, 79, 64,202, 34,221,121, 21, 80,143,117,131,176, 56,170, 60, 27,220,149, +231, 24, 37,222,216, 98, 9, 1,206, 51,102, 90,149, 2, 37,168,225, 90, 42,198,113,162,224,173, 22,146,247,192,142,189, 77, 62, +232,200,140,130,243, 70, 47, 20,105,245, 20, 23,140,124,255, 41, 70, 64, 85,126,111,181,194, 13, 35, 45,145, 0,172,227,168,219, + 12, 3, 47,243,102, 83, 22,189, 76, 3, 96,181,238, 91,107, 77, 91, 33,148, 92,162, 26, 49, 4,148, 18,145,226,194, 2, 96,216, + 65, 91,135, 20,232, 94, 25,252, 64,164,110,201, 29,160,131,170,101,114,144, 68,187, 70,231, 74, 5,237,107, 28,198, 4,153,166, + 86, 57, 87,100,181, 18, 98,231, 62,148,166, 37,107,195, 80, 62, 31,122,149, 97,242,182,144,241,156,238,130,178,214,157,224, 2, +158, 99,211,149,169,186,233, 34, 91,151,160,250,248, 70, 65,131, 4, 26,221,115, 96,181, 53,112,195,136,157, 80,122, 98, 76, 8, + 97, 70, 8, 1, 70, 41,120,163,225,252,216,115,171,189,183,120,233,115,127, 2,212,140, 28,203,133, 81,231,229, 49,252,229,127, +103,124,166,130, 31, 7,164, 12,252,149,119,126, 43, 25,204,206, 98,240, 94,188,222, 43, 51,156,187, 63,221, 71,125,107,124,169, +128, 54,164,211,210,154, 99,197, 54,206,108, 72,209, 45,223,189, 20, 6, 50,220,254,242,151,112,247,181,215,176,219,239, 48,207, + 39, 17, 34, 38, 33, 83, 37,190, 4,178, 87, 27,166, 29,115,158, 67,160,146, 90, 43, 76,187, 51,156, 93,185, 6, 63, 12,176,206, +245, 42,238,155, 31,223,225,229,219,175,226,193,131,115, 92,189,122, 5,113, 89,112,255,245,215,113,251,254, 3,196, 92,161, 74, +193, 83,143, 95,199,131,135, 71,204, 49, 33, 36,130, 66,154,162, 65,183,113,164,168,211,223,242,236, 91, 49,158, 93,129, 51,182, + 87,173, 89, 58,214,118,169,231,148,132, 60,149, 59,171, 93,201,231,118,231,246,203, 8,167, 35,213,206,146,213,204,110, 53,117, +208, 3, 84,237,185,219,189, 40, 82, 43,126, 86,235,117,202,161, 69, 0, 19,103,118,143,206, 25,164, 84,254, 63, 73, 40, 51, 66, +185, 99, 21, 45,227,252,142, 57,229,101, 76,159,180,234, 42,124, 78,109, 74,247,200, 55,188,111, 76,233, 66,200, 77,145, 0,162, +113,156, 16, 66,196,217,217, 25,162,140,205,141, 49,136, 75,192,225,156,118, 74, 70,234, 42,233,158, 23, 33,222,169,213,154,167, +101,212,107, 28,204,224, 24,110, 33,126,236, 2,141, 97, 28,129, 92,152,162, 88,169, 90, 47,169,244, 9, 79,227, 33,144, 47,193, +232,227,134,103,101,167,199,113,172, 50, 22,222, 13, 28,175,134,176,129,229, 64,166, 37,101, 53,255,203, 65, 98,157, 39,118, 84, +116, 6,168,144, 44,107,254,115,218, 90,134,190, 40, 13, 88, 3,228,138, 82, 34, 90,245,172,128,213, 66, 38,247,181,177, 14,198, +239, 96,167, 17,200, 25,167,251,111, 0, 37, 65, 59,185,112,141,131, 19,174,124,109,188,129,206, 60, 72,194,116, 87,235,175,171, + 13,236,184,231, 88,223, 89,249,231,216,144,148, 78, 15,163,176,174,182,137, 87,138, 66,153, 84,210,164,228,158, 46,167,173,199, +176,191,194, 8, 85,173,122, 1,128, 90, 97,172,195,238,230, 77, 32, 46, 92, 93, 10,216, 42,166, 4, 85, 51,247,237, 57,139,232, +140, 35,122,109, 61,255,179, 49,152,231, 35,167, 82,129,223,163, 86, 64, 56, 74, 96,139, 54,200, 37,193, 15, 99,143, 69,173,155, + 21, 86,142,140,182, 53, 45,163, 61, 70, 32,103, 40,237,224, 28,159,113,229, 44, 12,200,130, 88,230,133,246,227, 84, 80, 53, 16, + 14,135,126,254,213, 82, 96,173, 70, 46, 12, 81,201, 41,178,227, 5, 96,156,135,209, 10,203,124, 36, 0, 8, 10, 37, 39,114,212, + 1,132,195, 57, 25,243,126, 92,223,211,134,193, 78,146, 58, 41,178,166,113,156, 24,144,229, 44,194,178,136,208, 45,174,107,146, +246, 29,201,196, 44,203,168, 25,198, 72, 72, 13,159,183, 42,133, 51,215,136,236, 92,211, 18,228,249, 32,121,174, 59, 52,100, 42, +105, 90, 65, 38,142,174, 90,138,144,242,248,123, 59,137,195,237,236,126, 65,134,135, 48,195, 57, 6, 39, 45,243,188, 65, 91,211, + 37, 70,187,155,130,245,142,116, 67,201, 23,224, 20, 80,214, 75,138,164,191, 92, 88,188,181,117,222,118,231,155, 69, 33,223,136, +166,144,117, 24, 74,221,156, 51,153, 23,190,232,203, 28,197,238,250, 47,125, 58,214,182, 19,215,109,254,169, 59,119,187,141,167, +139,177, 60,140,156, 7, 44,121,202, 26, 68, 76, 94,189,122, 3,111,127,215, 55,227,157,111,123, 43,254,232,243, 95,132,222, 93, +131, 1,112,184,253, 37, 28,143,231,152,166, 61,142,135,115,140,227,128, 87,191,252, 69,220,127,245, 43, 56,157, 22, 25,193, 94, + 28,175,127, 61,203, 21,139, 11,133, 97,119,134,231,191,233,155, 97,135, 1,222,251,245,242,149, 98,164, 93,196, 74,169, 30,119, +218, 4, 81,218,232, 46,144,209, 13, 15,187, 97,185,231, 13, 24,166,171,171, 75,193,233,120,196, 87,191,252, 18,150,211, 65,198, +135,108, 50,156,181,140,102, 20, 63,249, 69, 37,180,194,245, 27,183, 58,181, 76,155,149, 76,116,243,241, 91, 56,187,118,141, 74, +237, 90, 17, 94,123, 9, 15, 15,231, 98, 7,227,169,184, 44, 17, 7, 81, 89, 15,214, 98,178, 10,231, 11, 73, 73,146, 61,215,168, + 0,221,155, 93,181,194,213,235,143,225,153,231,223,214, 19,230,140,248,196,203, 37, 81, 35,247, 67,134, 34, 25,241,165, 26,173, +240,213,175,124, 9,203,233, 33,140,196,103,134,176,244,231, 64,139, 29, 74, 73,197,157,150,136,170, 87, 47,185,145,113,218,118, +101, 65,188, 46, 24,134, 32, 62,111,231,136,204,252,127,243, 87,239,170,183,172,247, 13,242,183,141,246,183,249,238,173, 3,207, +153,223,151,179,174,175, 95,218,238,189,213,187,236,244,148, 92,248, 30, 26, 28,237,183, 78,145,170,225,136,195,225, 97, 79,172, +187,114,229, 26, 30, 60,124,192, 17,185,192,112,180,101,224, 74,149,139,176, 20,230,185,163, 84,118, 55, 90,203,133, 53, 66,193, +144,177,110,164,248, 96,221, 46,162,214,220,179, 3,172, 0,129,226,178,136,143, 20,178, 90,147,207, 67, 91,153,180,212, 46,254, +106, 88,133,246,188,148, 90, 24,210, 82, 43,180, 50,208,206, 33,199,163,140, 76, 91, 33,109,229,117,217,192,140,132, 4, 87,197, +127,223, 86, 97,181,174,130, 90,217,205,241, 16,214,196,205,214, 28, 16, 23,217,137,182,243,165,141,242,203, 74, 98, 67,189,228, + 26, 81, 10, 90,211, 10,167,106, 65, 70, 21, 34, 30,227, 78, 33, 99,217,156, 3,187,121, 59, 72,246, 58,199,171, 74, 27,228,194, + 53,141,130, 98,135,166, 52,114,142, 24,134, 65, 46, 33,218,178,172,181,152,103, 78,203, 74, 76,208,158, 22, 50,141, 2,103, 44, +130, 4,196, 40,227, 49, 77, 3,194,188, 96, 62, 30, 96, 6, 94, 28, 42, 3, 74,212,217, 70,113, 50,166, 4,207,125, 58,158, 80, + 98,146,236,116,195, 46,222,211, 6, 88, 82,166,250, 27, 96, 23,108,180, 52, 82, 44,212,172,243,240,211,200,240,151,211,204,207, + 91,181, 75,130, 23, 79, 56,158,122,129,145, 83,234,232,230,146,137,207,181,150, 19,197,210,236,142,242,185,133,211, 9,202,114, +180,156, 75,150,100, 63,174,128,232, 25,183,112,178,234,128,176, 4, 80,105,237,100, 39, 28,161, 5,135, 90, 75,165, 77, 84,206, + 81, 35,231,176, 18,177, 24,159, 79,238,140,195,188, 96,218,237, 58,145,179,136, 46,195, 58, 90, 13,115, 18,123,167,110,239,155, + 67,152,143, 93,180, 27, 99, 98,242,165,116,190, 57, 23, 12,131, 39, 85, 21,100,168,215, 94,236, 86, 56,239,122, 6, 69,143,147, +142,156,188,148,202,191,223, 2,182,140,209, 72, 45, 3, 34, 5,137,142, 22,174, 65, 23,124,242,158, 44, 98,199,214, 45,133, 83, + 9,241,180, 49, 98,180, 70, 94,130,188, 11, 26, 70,242, 25,154,104, 57,201,184,253,194,121,166, 0,163,148,250,149, 34, 47,110, + 85, 27, 95,245, 95, 56,199,212,130,207,180, 34,144, 49,189, 19, 27,247,123,216,113,135, 97,183, 67, 85, 14,118, 58,195,120,227, + 38,222,245,237,239,195, 59, 94,120, 31,158,122,251, 59,128, 56,227,214, 91,223,134,159,248,153, 95,198,247,125,207,135, 96,158, +124, 59,238, 63, 60,226,193,237, 47,195, 40,133,249,240, 0,167,243,115,120,207,248,188,211,225, 28,243,241,161, 84,185,229,235, + 10,220, 46, 95,234,198,112, 42,240,252, 95,121, 23,185,216,114,129,180,130,160,169,131,137,115,149,112, 14, 1,119,148,141,253, +169,231, 66, 55, 1,213, 38,131,187,117,108,125, 12, 93, 10, 94,127,229,101,188,252,133, 47, 8, 96,132, 15,237,150,196, 22, 99, + 92,233, 51,151,228,230, 41, 71, 0, 5,187,253, 85, 56, 63,210,178,148, 19,142,199, 3,144, 51,118,103, 87,160,181,198,225,252, +128, 7,247, 31, 98,137, 25, 75,140, 56,133,136, 37,150, 77,151, 0, 44, 21, 36,147,109,247,244,235, 70,147,128, 0,173,241,228, + 83,207,174,233,105, 27,145, 88, 45, 43,142, 85,119,103, 68, 69, 76, 81,186,161,138,211,249, 67,156,206, 31,136, 91,161, 18,202, +225,185,147,170,149, 35, 40,138, 36,203, 70, 32, 38, 35,119,179,138, 27,123, 22,247,134, 90,151, 83, 90, 39, 35,165, 92, 16,152, +125,189,196,185, 71, 61, 35,143,178,230,117,197,122,175,136, 37, 58,211, 17,253,155, 82, 75,192, 43, 2,205,177,221, 99, 90,149, +150,173,204,106,115,107, 25,236, 44, 88,208,247,177, 61, 8, 72,138, 23, 37,239,144, 27, 6,242, 16, 20, 69,170,178,192,231,127, + 55, 50,233,130,196,253, 22,174,113, 26, 15, 31, 45, 42, 82, 17,185, 82, 75, 22,177, 79,219,151, 87,122,207,101,117,164,218, 4, + 74,158, 81, 73,221,185, 40, 62,208, 26, 40,185,143,223,187, 80,180,212,141,189,115, 29,125, 43,173, 55, 12,235,118, 60,108,200, +129,114, 64,179, 67,170, 12,142, 17,207,239, 74, 98,225,250,203,143,123, 17,215, 1,206, 15,112,222, 51,116,101, 3,234, 81,219, +108,249, 75,110,145,170, 86,173,140,145, 17, 51, 52, 68, 9,239, 97,135, 81,244, 5, 32, 33,111, 55,194, 79, 87, 48,236,206,176, +191,122,141,104,220,193,195, 88, 15,227, 60,246, 87,175,145,189, 33,225, 46, 70,107,140,251, 51, 64, 46,145, 86,248,101,185,132, +107, 34,178, 84,105,122,212,173,229,133,238, 28,127,205,112,126,206, 46, 58, 4,148, 24,201, 53,240, 94,172,118, 89,210,226, 82, +183,254,214,148,201,180,151,220,129,184, 44,112,227,128,218, 70,214,162,226,206, 34,228,132,192, 81,198, 73, 34,107,107, 69, 73, +137,148, 63,209,112, 64,241,137,154, 15,135, 62, 86,166, 0, 58,117, 91,167, 86, 26,110, 28, 37,201,143,107,207, 6,107,137,167, + 3,179,228,119,123,126,134, 34,126, 43,221,210,200,231, 63,134,136,184, 4, 84, 80, 4,215, 10, 96,166,243,197,238,104,176,206, +179,148,179, 70, 88, 39,220,179, 47,167, 83,239,232,115, 74,220, 55,135,185, 83, 33, 83, 74, 64,202, 80, 61,224,138,122,135, 24, +196,162, 91,214, 21, 75, 46, 45, 10,187,192, 59, 9,103, 1,119,244, 76,109,203,136, 33, 34,200,138,132,197,155, 92,186,168,178, +227,166,198,140, 33, 71,116, 35, 52,167, 70, 90, 22, 32, 39,201, 99, 15,162,168,111,243,172,138,180,204, 20,137,230,218, 11,217, + 44,197, 45, 63,127,134, 84, 65,236,125, 45,123, 68,203,121,225, 36,216,171, 53,146, 70,211,142, 12, 25,185,183,134,168,214, 74, +159,217, 55,220,171,171,117,180,254,150,231,222, 10,227, 61, 82,228,158, 70, 25,131, 88, 43,198,113, 7,101, 12,134,235,183,240, +248,219,191, 5,183,158,124, 10,238,236, 10, 71,137,167, 19, 94,250,179,127, 11,227, 38,252,222,239,255, 33,254,228,202, 21, 60, +118,235, 41,164,176,224,238, 87,190,136,176,204,208,134,176,134,227, 67,118,116,147, 51,120, 32, 69, 67,201,249, 66,144,202,215, + 20, 71,105, 37,100, 33,133,167,158,127, 59,252, 52, 94, 72,215,218,114,211, 85,223,201,229,126,121, 23, 57, 56, 57, 34, 47,107, +103, 33, 23, 64,151,148,201,195, 10, 40,228,148,113,239,245,215,240,250,107,183,145,230, 0,109,170,116,228, 25, 53,173,135,177, +150, 47, 69, 65, 33,166, 72, 1,148,124,129,212,111, 84, 28, 15, 15,145, 66,194, 52, 78,220,149,185, 65, 58,251,140, 59,175,124, + 5, 55, 30,127, 2,251,155,183,144, 0, 28, 14,231, 24,198, 9,211,110,143,229, 52,227,206, 43, 47, 67,213,140,212,246, 49,155, +241,166,117, 78, 68,103,235,184,103,220,157,113, 15,212, 25,243,186,199,239, 86,169,136,181,225, 94,212, 26,118,175, 30,192, 44, +222,210, 92, 41,192,210, 89,203,159, 45, 35,132,128, 69, 44, 78,167,116,234, 35,175,182, 67,110, 36,186, 42, 66, 77, 35,130, 15, +163, 13,114, 76,125,231,215, 58,223,245,115,198, 35, 69,146,151,187,241,203,127, 79,107,141,162,234,155,158,247,173,207, 62,213, +220,181, 9, 37, 23,204,105,102,151,173,152,117, 77, 65, 90,233,217, 0,198, 16,175,138,170,225, 7, 15, 40, 22, 67, 97, 14,178, + 51,213,168,134,160, 18, 93, 40,184,137,129, 21,126, 46, 5,227, 72, 20,236, 34,252,238, 42,140,252, 84,202, 5, 62,137,113, 3, +114, 90,144, 69,153,219,126, 62,165, 34,106,137, 80, 72,114,144,181,110, 64,189, 73,237,175, 42,253,186,198,115, 23, 87, 21,187, +239,237, 42, 75, 21,190, 3,202,200,200,190, 52,157,201, 58,205,226, 5,156,249,153, 24,203, 24, 88, 59,145,232,102, 84,135, 65, +109, 47,220,106, 28,204,186, 10, 7,148,129,202,252,124,156,155,100, 60,235, 48, 94, 57, 67, 10, 17,214, 59, 82,238, 34, 99,136, +181,185, 33,157,222,250, 75,235, 38, 96,213,186,103, 98,123,233,182,214,164, 62,153,190,105, 11,101, 57,121,210,214,162,122,234, + 69,134,105,236, 35, 78,165,184,162,211, 90, 65,139, 98,159,121, 23, 14,126,240,228,159,203,136, 24, 74,113,103, 74,143, 33, 82, + 73,216, 79,103, 8, 89, 24, 24, 41,147,161, 62, 14, 24,198, 29,105,156, 22, 88, 78, 6,225,116,148, 51,140, 63,239,124, 56,107, +247,251,101, 0, 0, 32, 0, 73, 68, 65, 84,239, 8,104,165, 13,180, 2,242,145,182,196,132,140,112, 58,192,250, 17, 73,166, 45, +241,116, 98, 7, 58, 12,200,224,106, 42, 75, 81,101,140,197,184,191, 66,187, 88,145,176, 31, 9,250,136, 33,200,168,182,160, 64, + 73, 49,145,101, 21, 88, 72,156, 75, 11, 16,101,204,158, 24,221, 11,161, 19, 90,203, 9,135, 54, 28,239, 47,243,204, 80,159,101, +238,145,198, 74,113,170,232,156,227,103, 43,159,107,138, 77,228, 88,133, 47, 96,225,189,165, 7, 93,105, 20,163,186,232, 44, 75, +205, 61, 56,139, 26, 19,178,201, 29,223,109, 28, 57, 5, 78, 85,228,196,128,147,156, 51,192, 21, 57, 66,187, 23,148,130,246, 6, + 49, 37,232, 10,178,230,173,197,233,112, 32, 85,111, 71,135, 75,170, 11,156,227, 5,110,220,136,113, 28, 49,207, 39,177,123,242, +236, 88, 26,207, 68, 6, 73, 33, 44,156,136,150,128, 26, 91,166, 65,238, 77, 65,145,137,145,202, 60,183,138,116,230,109,250,192, +117, 14, 3,116,138,100,155,104,200,238, 95, 38,147,237,188, 50,222,195,141, 3,148,209,171,134,204,104,129,228,108,102, 91,150, +116, 66,211, 2, 93,190,177, 11,157,221,133,181, 22,143, 61,243, 28,158,124,219, 55,225,234,141, 91,120,229,203, 95, 68,138, 39, +204,243, 2,141,138, 24,102, 88, 59, 0,113,193,227,207,189, 21,198,144, 93,235,156,129, 86, 6,103,215, 30,195,114, 56, 32,206, + 11,238,165,132,135, 15, 30, 98,127,245, 58,178, 84,238,170, 18,138, 97,149,198,224, 7,188,113,239,174,140, 27,213, 35, 47,241, + 45, 12,103,219,137,229, 92,240,212,179,111,195,213,235, 55,186,104, 72,111, 33, 39, 27, 60,233,214,111,109,164, 82,154,231,185, +255,247, 70,213,195,166, 83, 44,146,117, 91, 66,194,107,175,223,193, 27,175,223,161,160, 75,138,134,138,210, 89,239,198,104, 25, + 73,234,174,154,110,209,170, 74, 2, 58, 8, 27, 97,178,215,213, 43,215,165,115,229,168,101,116, 14,206, 57, 60,120,112,159,251, +181, 92,113,253,198, 77,156, 93,127, 28,103,215, 30,231,200, 78,107,248,113, 15,235, 7,156,206, 31,192,141, 35,166,221, 30,119, +239,188,138,211,241,128, 43, 87,174,225,234,141,199,113,239,141, 59,200, 49,114, 31,110, 12,174,223,124,172, 23, 20, 45, 92, 39, +245,203, 65,117, 54,123, 27,189,167,174, 48,230, 56, 47,133, 32,163, 50, 25,197, 41, 5,109,233, 51,135,140, 2, 27,128, 98,220, +237,225,156,195,195, 7,119,225,156,133, 53, 30,168, 10,199,211, 9,126,156,176,219,237,112,247,206,171,189,120,107,127,181,148, +188,111,148, 15,208, 94,114,165, 21, 84,174,125,127,255, 38, 52,237,165,156,245, 38,250, 44, 69, 24,209, 85,132, 80,166,160, 4, +134,235,104,165, 37,170, 82,201,106,129,147, 4, 22,147,165, 67,156,172,181, 72,105, 65, 76, 74,214, 21, 44, 78,115,206,212, 77, + 24,226, 44,115, 78,178,155,165, 39, 91, 85,192, 14, 30, 41,132,238,221,109,186,141,203,127,206,174,148,120,196, 58,106,251,255, +203, 45,171,155,145,103,111,250,204, 46,100,205, 63,170,112,146,106,150,207, 47, 63, 51,101, 45,170,168,123, 59, 37,173,189,103, + 74, 51,159,218, 57, 25,255, 42,156,157,237, 81, 2,211,190,172, 88,217, 98,140,152, 79, 11,220,224,217, 53,157, 30, 80,191,225, + 29,114,169,176,195,142,251,102, 41, 60,221, 56,193, 13, 99,239,222,181,214, 24,134, 17,231, 15, 31,246,169,132,243,142, 4,181, + 90, 96,161, 49, 14, 3,134, 97,132,241,132, 46, 41, 25,167,134, 72, 78,189,149,247, 45, 87,217,213,203,202,106, 62,157,160,181, +193, 48, 14,176,198, 98,201,132,149, 24, 41,242, 75, 44, 56, 29, 14, 61,248,202,136,176,169, 88,141,147,120,142, 75, 12, 72,129, + 23, 94,213,180,115,181,113,179, 5,247,161,203,137, 9,101,227,110,135,211,225,128,186,176,184,107,158,101, 15,199,220,134, 24, +113, 56, 63,172, 83, 66, 71,181,123,205,137,113,175,185, 32, 37, 22,214,214,176,113,208, 74,163, 42, 77,218,167, 8,216,180, 76, + 23,167,221,180,190, 95,181, 80,241,223,166, 74,194, 14,200,162, 42,167, 80, 80,220, 76,149, 4,181,148, 2,225, 47,137,255, 76, +204,177, 23, 42,198, 88,129,168, 68, 57, 71, 10,156,176, 16, 80, 25,192,162,116, 17, 46,137,130, 19, 43,102,206, 85,244, 67, 25, +218, 0,203,233, 40, 89, 16, 21, 89,219,126, 38,180,179,185, 55, 94,146,132,153, 1,140,195, 64,101,121,160, 6,105,183,219, 35, +135,136,180,156,216,180, 89, 10, 97,189,196,246, 62,188,123, 23, 86, 70,229,196, 36,104,104,129, 24,149, 66, 44,172,214,166, 79, + 31,170,102,161, 63, 88, 6, 87,161, 86, 56, 17, 35, 54, 86, 75,173,133,223, 7,202, 42, 92,149,213,102, 77, 21, 69,137,106, 93, +238,176,150,140,104,157,225,108, 53, 3,121,166, 37, 14,146, 6,233,228,247,171, 45,224, 69, 85, 6,208, 80,224,106,234,215, 69, +157,244,121,188,100,192,106,135, 39,159,125, 30,215,110, 62,134, 36, 35,194, 36,216,197,144, 34, 6,231, 48, 78,103, 64, 45, 56, +205, 39, 24, 59,226,230,219,222,137,235, 79, 62,131,179, 27,143, 97,152, 38,204, 49,224, 11,191,255,219, 56,127,227, 46,190,227, + 7, 94,132, 25,247, 61, 20,229, 15,255,175,127,137,227,235,175, 66, 41,238,120,174, 92,189, 9, 44, 71,220,186,126, 13,159,249, +253, 79,227,225,189,187, 50, 10,253, 26,249,211,232, 26, 28, 40,107,176, 63,187,142, 91,207, 62, 15,109, 12,206,206,246, 23,254, +119, 12, 92, 17,111,159,236, 76,215, 96, 23,117, 33,219,124,235,157,215,205,103,104, 45, 30,220,191,143,215,190,250, 50,142,231, +231,178,103, 86,178, 75,150,209,126,161, 0,107, 16,220,160, 2,199,238,195, 56,118, 65, 72,201,165, 23, 12,237, 96, 86,130,169, +156,166, 51, 2, 62, 36, 28, 38,166, 40,214,149,210, 71,136, 79, 62,245,180,172, 7,215, 17, 76,217,234, 13, 20,186,138,189, 66, +146,235,100,100, 69,225,148,186,248,191, 71,237, 2,169, 90, 75,183,151,213, 77,238,121,227,182,183, 9,234,237,151,191,130,154, + 19,156,245, 24,134, 1,169, 37,168,149,196, 16, 20, 57,228,151,121,134,117,244,130, 47,203,140,253,126, 39, 41,128, 90, 48,143, + 86,188,169, 5,199,243,115,142,166,196, 38, 86,115,249, 75,100,192,115, 45, 98,172, 65,174, 50,218,172,111, 38,238,245, 11,205, +232,205,231, 32,171, 1, 33, 90, 53,241,223, 86, 93,221,212,211, 74,124,198,131,136, 59, 43,170, 8, 39,249, 82,167,196,196, 63, +235, 71, 24,177,171, 65,145, 78, 86,132,255,112,124,120, 14,109,101,204, 45,234,108,242,201, 45,209,146, 57,200,231,208, 52, 14, + 43,122,217, 24,207,247,176,235, 54, 30,125, 57,247,145,249,230,207,176, 37,220,213,139,233, 51, 93, 60,219, 81,166, 88,133, 79, + 85,138,124,109, 24,241, 25,227,210,255,231, 90,211, 69,225,166, 29,134,221, 30, 90, 53,235,159,146,113, 33, 73,111, 89,158,167, + 20, 35,187,212, 90,176,204,146, 23, 33, 78,152,166, 48,231, 36, 44,178, 64,240, 3,140, 49,216,239,247, 88, 2,119,217, 89,184, +230,227, 56, 18, 51, 10,250,139,173,113,240, 50, 17,169,181, 34,156, 78,162,218,182, 52,249, 85, 42,163,149,248,217,155,207, 57, + 44, 11,217,233,198,226,112, 56,174,211, 65,163, 59,190,115, 28, 60, 98,206,164,240, 13, 35,178, 20,253,109, 28,222,159,175, 10, +238,175, 35, 39, 95,170, 69, 0,111,178, 35, 90,179,145,165,139,111,211,188,148, 98, 31, 7,231, 37, 34, 85, 22,137, 70, 27,132, + 64, 69,246,176,223,211, 91, 29, 2, 82, 73, 12, 1,145,179,185, 52, 6,126,165, 22,132, 97, 37, 4,153, 64,219,222, 1, 54, 66, + 95, 74,129,171, 5,205,239,128,219, 57,221,233,154,188, 76,201, 15,105,120, 85,109,116,143,149,206,178, 42, 96, 83,169, 17,162, + 76,145, 64,235,164, 22,241,180, 54,134, 46,121,121, 6,154,110,165,101, 22,180, 95, 35,132, 83, 95,215,233, 38,180,150,245,199, + 54, 14,155,171, 47,221,179,238, 33,133,179,149, 84, 61,158,157,180,199, 86,164,174, 3,115,206,147,248,151,104, 35, 51,214,193, + 26, 35,207,144, 80,228, 44,137,124, 90,105,138, 72,219, 78,190,226,194,232,187,244,120,230, 10, 59, 14, 44, 32, 82,232, 5,190, + 86,156,214, 37, 17, 10,247,149, 98,159,150,229,126,102, 88,237,144,107,165, 21, 15,196,176,243,123,202, 4,118,109, 51, 46,196, +102, 9, 5, 88,168,175,229,237, 85,171,144,189, 2,214, 77,240,227, 14,103,215,174, 3, 2,227,176,158,108,218,209, 59, 44, 33, +224,137, 39,159, 22,190,122,129,177, 14,126, 80,184,126,243, 6,194,221,219,120,245,206, 87,240,250,176,195, 32,161, 0,121, 57, +192,170,132,207,254,222, 39,240,215, 62,240,253, 72,110, 68,124,120, 23, 74,105, 2,238, 99,224, 11,102, 72,120,122,245,206,107, + 24,207,206,240,224,222,189,175,137,250,220,174,165,181,179, 24,166, 17,215, 30,127, 92,118, 42,232, 47, 13, 71,168,232,234,193, + 46,158,176,182,239, 92,187, 96, 67, 42, 39,198, 39,178,194, 74,153, 35,177, 55, 94,123, 21,135, 7, 15, 24,174, 32, 99, 46, 35, + 15, 92,251,117,140,236,136, 83, 34, 86,177, 86,218, 40, 56,170,177, 82,145, 57,161, 3,209,206,146,115, 6, 50,129, 35, 33, 48, + 82,114, 24,175,112,244,103, 12,180, 6,172,177, 56, 29,142, 8,243,140,123,238, 85, 92,185,118, 3,186, 99, 53, 55,254,132,138, +110, 3,161,213, 38,118, 11, 86, 43, 96,106, 59,216,172, 69, 77,107, 17, 67, 8,132,237, 54, 17,134,249,152,126, 16,134,101,129, +209,154,196, 55, 0,185, 22,177, 32, 22, 17,150, 84,201, 0, 23, 79,118, 27,209,139,216,112,154,118, 8, 33,193,143, 99,255,204, +195, 18,176,155, 38, 20,163,224,253, 0, 99, 86,101,234, 95, 86, 20,199, 17, 49,214, 61,120, 42,111,186,204, 59, 22, 88, 4, 99, +109, 66,210, 5, 41,186,176, 88,145,177, 92,169, 50, 46, 85, 18,202, 81,169, 98, 45, 21,125,140,214,220, 17,198,170, 62,169,202, + 41, 32,139,160, 84, 41, 0,177, 74, 40,137, 56, 49,202,210,193, 74,189, 64,149, 65,122,123,126,149,161, 96, 48, 36,198,169, 58, +235, 17, 67,134,179, 14, 41,230, 55, 21,186,151,187,117,244,136, 97,125, 65, 28,136, 75,212,192,102, 98,237,126, 23, 93,187,126, + 64,107,122,113,181,182, 20,158,142, 20,153, 85, 99, 4,186,194, 49,114,140,137, 20,180, 24,232,183, 13,129,239,182,117,128, 49, + 44,110, 23,130,109,160, 50,140,247, 93, 71,163,172,101,192, 72, 41,240,211,136, 20, 35,188,248,134, 33, 7,218,225,120,164,182, + 32, 74,167, 62,141,208, 90, 99,186,114,182, 82,227, 80,113, 60,127,136, 97, 26, 25,119,139, 10,239, 60,187,111, 25, 27,103, 52, +193,107,146, 2,129, 5,133,243, 30,117, 48, 24,188,239,223,137,177, 26,199,195, 57,150,211,140,120,100,120,142,150,130,213,201, +158,189, 24,221,115, 2,166,118, 97,196, 8, 85, 40, 64,165,112, 74,173, 98, 84, 17,138,165,166,179,145,142,121, 89, 78, 76,157, +148, 72,219, 90, 11,172,165,154, 61,132, 32,206,139,136, 20, 22, 70,225,138,142,194, 24,205,221,114,173, 68,192, 66, 73,129,144, + 81, 82, 16, 96, 11, 80, 53,207,217,156,228, 50,146,233, 80,137, 9,218,208, 14, 87,228,125, 77, 18,116, 2,165, 96,189,151,181, +133,146,124,111, 42,184,249,121, 82, 27,211, 44, 97,227, 48,244,116, 74, 99,169,114, 39, 3,162,202,215,168,200, 36, 80, 64,141, + 73,144, 80,107, 3, 81,107,145,128, 23,141, 20, 69, 4,106,128,249,116, 98, 51, 36, 52,188, 24, 35,134,105,130,159,246, 29,127, +157, 19,227,102,167,113,224,115, 83, 43,142,167, 0,109,148,160,200, 61, 49,227, 53,116,139,174, 42,133, 16,156,102,203,116,142, +205, 80,206,200,149,145,192, 53, 73,182,128,156,225,173,160,217, 10,184,203,233,196, 8,234,230,138,169,156,236, 45, 33,116,161, +222,178, 44,189, 67,103, 65, 68,155,163,117, 3,191, 19,231, 0, 48,211, 32,165, 44, 24,105,221, 53, 70, 70, 64, 56, 90, 19, 13, + 29,194, 2,117,243,169,103,171, 81, 21, 39,233,166, 90,120,139,115,252,144,199,113, 47,182, 16,133,152, 72, 12,210, 98,189,242, + 35, 83,147,134,253, 21, 44,167, 35, 66, 88,112,118,245, 58, 98, 8, 24,167, 9, 75,100,213,179,219,237,128,156,113,152,103, 76, +195, 0, 55, 56,196,200, 3, 86, 1, 24,118,103,248,238,239,253, 62,252,199, 63,253, 83,124,229, 63,252, 1,194,233,136, 36, 93, + 92, 73, 9, 15,223,120, 13,243,178,224,252,120, 64, 60,206,152, 79,199, 71,178,211,169,116,180, 61, 24,229,250, 99, 79,224,236, +218, 13,102,106, 79, 19,172,181,184,121,227, 6, 69, 17,105, 29,125,181,127,111,187,160, 86,253,181,203,220,116,113, 81,193,253, +123,119,113,239,206,171, 88, 78, 7, 24,235,168, 2, 93, 24,252,161,187, 26,158,199, 32,127,157,117, 71,171,213,218, 5,182, 98, +193, 88,223,163, 81, 33,246,193, 62,218, 23,128,134,247, 3, 82,161,138,147,144, 20,133, 16,163,224, 83,169, 54,221,157, 93,197, +181,155,143,117,132,175,146, 23,113, 62,157, 99,158,249,153, 37,129, 93, 48,124,196, 67, 91,218, 92,152,152,149,225,188,131,243, + 35,174, 94,189, 78,107, 71,163, 2, 10,126,119, 62,157,176,132, 5,165, 38, 70,241, 2, 24,252,128, 16, 34,194,178, 32,231,200, +157, 57, 0, 63,140,128, 54, 8,243,194, 49, 85,201,221,150,145,114,194,224,188, 84,212,138,182, 16,169,240, 57,166, 94,247, 69, +218, 40, 28,206, 31,114,140,245, 13,118,233,198, 24,120,177,220, 80,149, 26,229,249,102, 16, 80, 11, 48,170, 21, 61,116,161, 95, +106,210,177, 55,167,131,177, 34,122,138,161, 3,107, 46, 20,149,114,243, 25,229,186,219,162, 49, 11, 82,179,186,192,192,202, 62, + 57,133,136, 24,103, 73,119,146,189, 48, 20, 15, 13, 17,194, 41,105,227, 90, 30, 51, 15,162,138, 34, 29,105,110, 16,151, 10, 73, + 80,180, 12, 44,105, 19, 38,121,111,219,216,254,242, 7,216,125,232,117,101, 80,160, 23, 1,186,119,232,218, 90, 88,235,224,199, + 61,166,113, 66,169, 21, 73,246,209,220, 33, 22, 73,125, 99, 2,213, 50,207, 40, 18,221,220, 20,202,181, 16, 99,105, 6,138,223, +106, 37,126, 87,105,210,177,164, 69, 99,112,199, 56, 50,172, 35, 6,248, 97,224,202,233,238, 93,160, 22, 24,231,225, 6,223,223, + 75,235, 28, 71,145, 49, 33,201,212,196,121,102, 75,107,240,224,111,163,211,113, 55,246,212,200, 20,147,104, 37, 26,196, 73,117, +119,198, 18, 22, 10,237,156, 23, 49, 97,225,133, 49, 12, 84,145,167,132,105,162,207, 60, 74, 71,174,181,134,119, 44,236,219,229, + 96,181, 65, 88, 22,174,171,114,238, 86, 77, 94,198, 36,162, 89,177,105,245,241,174,156,137, 90,243,178,204,226,120,224,212,128, + 43, 19,101, 52, 11, 4, 77,165,126,202, 25,214,106,217,119,243,252, 51,138,244,180,156, 18,243,228,229, 61,174,165,116, 65,155, + 53, 6, 85,101,204,243, 76, 61, 75, 33,208, 40,201, 37,229,100, 95, 77, 43,112, 70, 8,139, 76,232,164,163,150, 2, 56,199, 40, +104,212,181,160,204,133, 2, 62,107,157,252,121, 77, 23,255,101, 17,220,105, 45,107, 1,177,254, 26,109, 46, 4, 17,181,127, 37, + 81,145,163,210,186,197,105,154,172, 74,101,106,170, 5,153, 76,198, 6,255,126,146,221,125,201,161,167, 37,110, 18,116, 56, 81, +170, 70,136,111,233, 66,244, 50,208,128, 72,224,243, 86,154,144,154,140, 0,133,214, 97,139, 53, 81,206,102, 40,238,198,105,245, + 77,162,254, 95,169,135, 74,217, 46,184,141, 49,116,113, 57,137,175, 50, 37,117,108,164, 82,224,231,154,195,194,179,209,123,225, +152,180, 63, 75,237,205,135,222, 20,239,234,169,183,125,115, 5, 42,118,187,157, 0, 76, 52,118,211, 4,165, 20,238,221,187,143, + 97, 28, 97,180,193,241,120,232, 29,157,181, 86,126,112, 30,124, 87,111,222,196, 52,237, 48, 55, 88,128,177, 56,157, 78, 24,199, + 1,199,195, 17,110,156, 48,237,175, 98, 26, 44,238,223,125, 3, 85, 91, 60,241,196, 19,152,151, 0,173,128,121, 89, 24,154, 96, + 13, 16, 23,220,216,239,240,215,191,237, 91,240, 45,207, 63,135, 63,254,143,127,132, 95,251,245, 95,199,157, 87, 95, 99, 69,154, +178, 80,129,202,163,119,167,114, 48, 25,163,113,243,137,167,113,253,230, 99,172,126, 44, 85,150, 55,110, 92,239, 93,122,104, 29, +149,140,123,219, 24,170,237, 44,154,202,189,136,197,231,149, 47,125, 25,111,188,118, 27, 80,249, 66, 55,219, 42, 52, 35, 54, 47, +107, 9,144,105,249,236,106, 3,133, 99,148,226, 38, 57,238, 52, 99, 28, 71,156,142, 71,164, 28,161, 45,171,185, 32, 2,179,246, + 69, 57, 67, 15,166,147,162, 69, 9,115,154, 74, 85,142,108,173,103, 52,225,245, 27,215,169,138,191,247, 6,150,249,176, 9, 77, +145, 84,171,134, 21, 48, 78,212,221, 65, 50,223,233, 1, 55,198, 66, 91,221,201,124,109,244, 90, 37,150,176, 66,118,178,112, 23, + 59, 66, 84, 10,197, 10, 71,207,126,220, 97, 28, 39, 64, 14, 87,213,236, 27, 45, 49, 72, 44, 74, 86,160, 15,203,178, 32, 38,218, + 77,156,236,210, 24,162, 18, 55, 5,201,127,218, 95,205,137,160, 52, 11,212,230, 37,175,165,160,170,198, 99,175,125,124,142,114, +177, 72,172,138,187, 57,136, 63,191,109,162,180,209, 72, 2,126, 80, 90,245, 11,171,136,127,182, 51,224, 69,104,214,240,165, 90, + 27, 56,199,189,165, 54,242,207,228, 36, 56,202, 12,101, 72,139,203,114,232,246,149,137, 88,219, 26, 35, 64,113, 25,222,139,209, +218,194,140, 58,125, 82,196,133,162, 29,128, 92,234, 13,239, 91,187, 82, 77, 14,182,214,137, 27, 6,102, 24, 59,146,133,224, 7, +196,200,231,171,161, 49, 83,140, 92, 9, 88,233,232, 4,212, 19,150,128,146,138, 0,165,216, 13,101,173, 48,237,118,210,197,144, +154,168,229,130,207, 57, 82,100, 40,157,190, 23,245,127, 56,158, 48, 12,131,136,217, 12,197,130, 82,168,107,173, 58,217,204, 25, +118,133, 33,198,126,128,166, 86, 52,202,138, 38, 44, 11,172,229,251, 72, 74,215,218,101, 26,109, 58,226,212, 90,141,184, 4, 40, +197, 17,127, 46, 25,222, 15, 88,150, 5,222, 59, 76,211,142,239,114, 46,116,196,180,104,227, 24, 89, 28, 74,151,202,149, 23,237, +107, 13, 11,218, 99,126, 5, 74,212, 63, 63, 41, 30, 8,105,203, 93,227,225,253,208,215, 34,243,210,232,106,226,252, 48,235,153, + 64,118,130,216, 97, 51,117, 49, 13,193,221,166, 47, 40, 44, 24, 90,241, 83,202,230,231,223, 8,141, 27,134,187, 36,174, 69,140, + 92,142, 74,172,171, 57,103, 40,171,187,154,221,136,176,173, 23, 9,194, 31,175, 98, 83, 83, 90,117,155,102,197,186,202, 72,162, + 89,232,192, 50,149,123,211,208, 68,205,236,220,215,181,159, 18, 65, 89,183,186, 41, 43, 89, 14,153, 54,245,237,180,182,249,245, +105,117,144,149, 71,161,125,177, 38,186,137,234,197, 28, 11, 99,116, 39,218, 21,113,183,212,182,106,104,248,226, 77, 26,247,122, + 62,232, 94,188, 87, 69, 44, 47,202,138, 37,238, 19,152, 26, 54,105, 38,205,142,185,230, 53,180, 51,179, 57, 90, 90, 20,116, 91, +221,233,205,180,177,121,216, 59, 30, 89,165,254,179,242,179,217,172,114,222,242,214,119,212,138, 74, 12, 94, 5, 82, 98,183,218, + 67, 91, 68, 57,137, 90,169,250, 3,176,219,237,112, 60,157,122,130,219, 48, 49,191,215,141, 19,119,160,168,216,237,246, 8, 49, +162, 84, 6, 31, 92,189,126, 3,203,241,128,162,128,135,111,220, 69,201, 9,198, 90,140,187, 29, 30,123,236, 22,222,120,253, 14, + 30,222,127, 3,163, 82,120,250,241, 27,240,206,226,185,103,159,199,167, 62,243, 41,220, 59, 63,199,221, 59,119, 16,101, 55,211, + 68,108,109, 52,218,232, 98,171, 79, 28, 48, 86,225,153,103,159,131, 25,105,253,130, 37,229,106,240,142, 76,110, 17,199,108, 71, +147, 90,107, 86,222,109,223,190,233,222, 94,250,179, 63,197,131,251,111,116,203,214,186,187, 87, 23, 88, 60, 20, 66,240,103,108, + 84, 34,165, 40,254,208,198, 96, 89, 2,198,105, 15,173, 21,230,211,130, 24, 78, 28, 1,213, 42,149, 27,171, 46,235,249,226,198, +152,224,156, 21, 4,104,197, 48,140,240, 34,242,129,113,140, 26, 60, 30,122,135,160,141,198, 50, 47,168, 57, 10,156, 65, 93,200, +109,111,121,215,237,146,106, 22,172,166,220, 84,208,112,110, 32, 40, 65,118, 61, 77,213,218,247,180, 72,156, 24,104,215,197, 48, + 37,243, 98, 3,248,188,228,148, 96, 61, 19,155,140,160, 94,169, 17,152,248,114, 90,141, 16, 4, 40, 99, 44,230,211,188,198, 32, +110,212,214,126, 28,144,226,130,211,241, 32, 74,221,191,248, 98,215,114, 65,213, 66, 12,163, 31, 6,185,216, 76, 23,221,212, 82, + 59, 29,143,113,158,232,207,115, 35,203,117, 49, 90,139,249, 20,245,126,227,194,183,233, 78,251,121,201,247,206,189, 40, 48,114, +169,180, 17, 98, 3,214, 84, 1, 29, 85,201,158,215, 70,175,172, 7,249, 50,166,105,194, 44,254,225,214,137,148,182,135,109, 35, + 62,189,218,252, 90,113,217,132,141,132,199,160,143,169,183,241,158,206, 15,176,214,195,141,163, 48,208,185, 99, 85, 50, 21,224, +123, 21,101,101,154,250, 69, 91,115, 97, 87,104,200, 26,208,206, 99, 24, 38, 30, 36,133,197, 9, 52,127,190, 97, 28, 73,220, 43, + 89, 0, 28, 96,106, 85, 74,152,231, 5,251,179, 51, 1, 24, 37,174, 44,106,134, 1, 15,113, 35,244, 51, 55,248,206,153,143, 41, +209,198, 37,147, 29,165,208,199,201, 16,143,118, 5, 16, 67,192, 48,142,136, 49,244,221, 37,207,181, 4, 99, 13,173, 76,173, 64, + 18, 63,183,213,134,174, 8, 9, 2,225,202, 96, 17,235, 33,191, 19,107,140, 20, 72, 76,218, 75, 57, 99, 24,124,159,234,181,213, + 72, 88,102,185,116,116,143,111,173,165, 9,160,200,237,247,110, 32, 53,111, 24,113, 58, 29, 17,101,226, 54,202, 26,106,158,231, +126,118, 52, 14,122, 91,201, 41,128, 19, 80, 17,205, 70,217,215,106,153,246,100,177,153,214, 42, 46, 15,153,216,109, 69,192, 49, +165, 14,204,130,102, 51,163, 42,221, 55,109, 29,208, 39,138,214,162,214, 40, 29,115, 97,172,246,182,155,109, 80,175, 64, 93, 21, +127,158, 44, 5,177, 52, 62, 86,201,222,217,244,181, 83, 69,126, 4,107, 68,193,185,245,146,165,240,222,245,187,159,180, 67,185, + 8,107,234,231, 90,167,204,201,132, 73,195,116, 18, 91, 46,220,105, 91,105,210,180, 86,125,181,220,120,236, 10, 10, 69,200,151, +237, 89,234, 83,136,156, 87, 62, 3,234,198,106,102, 69, 80, 25, 87, 88, 91,109,191, 46,127,246, 82,163, 8,105,209,197,156,106, + 51, 9,227,213, 33, 10,125, 37, 76,137,190,240, 66,135,222, 48, 67, 65, 92, 64,170, 9, 80, 75, 47, 36, 27,181,181, 57,176,212, +173,231,222, 94,141,182, 60,108, 53,149,155,141,140,211,186,140, 54, 98,178,198,224, 56,207, 20,125,165,132, 24,162, 68, 27, 70, +164, 40,137, 77, 50, 78,219,157,157, 97, 28, 71, 76,251,171, 56, 30, 30, 80,101,169, 12,158,126,246,121, 60,124,112, 31,119,190, +250, 21,156, 14, 7,104, 99, 72, 89, 59,157, 16, 68,141,234,141, 6, 20,199, 81,188,180,163,192, 34, 32,163,135, 71,119,233,219, +238, 25, 0,158,125,246, 89, 60,249,236,179, 0, 8,178,184,123,255, 1, 74,173, 24,167,145, 60, 94,107, 68, 73,171, 46,120,158, +139,248,178,141,209, 40,185,226,238,157,219,120,229, 75, 95,232,169,116, 85, 68,102, 77, 67,168, 5,250, 98,157,229, 72, 20, 20, +124, 53, 69, 59,113,156,172, 82, 41,166,147, 2,181,129, 75, 80, 48, 77, 35,149,246, 70,118,254,194, 38, 79,185, 21, 50,182,175, +218,252, 48,245,189,120, 43,110,134,145,225, 5,199,195,195,158,250,229,189,195,114,156, 31,153,151,238,156,147,241,237, 10,208, + 49,155, 29, 43,133,123,128,181, 94,236, 19,194,209,110, 15, 92, 46,152,246, 59,196, 16, 81,228,101,111, 15, 98, 78, 9, 74,243, +103,176,198,226,202,181,155,164,165,201,165, 30,195,204,203, 48,241, 33,236, 22,175, 20,161, 12, 17,167, 85, 14, 82,227, 29, 78, +135, 35,106,166, 79,116,123,224, 60, 50, 83, 94,108,140,109, 36,182, 62,236,171, 7, 61, 39,254,218,165, 38,148,154, 59, 89,141, +169, 93,130,137,148, 44,227, 34, 30,249,134, 60,109,200,203, 21, 58,179,138, 39,183, 1, 66,173,192, 42,133,169, 94,253,255, 54, +105,118, 53,151,222, 97,107, 65, 40, 15,110, 66,106, 94, 94,233,148, 26,252, 72, 27,225,182,215,210, 17,181,141,102,181, 50, 5, +234,166, 72,115, 24,166, 61, 9,109,198, 96,152,118, 72, 49, 33,166,216, 45, 89, 57,208, 71,172,228,251,177,134, 4,195, 16, 2, +198, 97,236, 93, 36, 97, 75,166,175, 38,140,214, 88,150, 32, 92, 7,177, 60,106,141,148,104,243, 83,150,118,180,156, 50,172,179, + 24, 5, 93,218,114, 33,170,240,246, 99, 78,112,150, 25, 16,214, 58,161,150,213,190,103,110, 32,168, 44, 20,182,139,144, 18,134, +217, 12,195,216, 39, 99, 45, 24,164, 86, 18,198, 26,186,180, 37,104, 53,220,168,179, 78,126,159, 34,168,224,180,250,242,229,210, + 95,117, 37, 77,209,222,166, 50,232, 1, 27, 74, 64, 49,121, 62, 97, 28, 71, 28,230, 19,121,251,185, 64,171,213,115,173,205,170, +181, 1,152, 69,193, 75,123, 3,189,130, 98,230,189,210,152, 79, 39,120,207,213, 92, 53,210,253,241,166, 64, 41, 5,161,217, 41, + 53,197,128,168, 96,198,128,232, 66, 90,127,104, 68, 51,176,106, 60,106, 7, 75, 21,233,250,202,118,124, 43,226,188, 34, 69,107, +107,152, 74, 33, 50,188, 97,160,251,223,211,130, 88, 86,142, 58,133,229,196,212,194,222, 4,168, 62,166,108,182,184, 6,220,106, +239, 99, 91, 21, 53,102, 65,201, 69,172,179,182,175, 65,141,113, 50,229,145, 66, 75,241, 62,208, 74, 34,126, 7,207,233, 88,230, +148, 66, 43,197,140,200, 90, 41,210,172, 69,138, 45,161, 69,202,187,210, 38, 61,106,243,123, 55,248,147,210,252,110,173,113,189, + 99,231, 20,166, 64, 85,211, 47,125,126,191, 23,215, 2,219,247, 60,167,210,197,146, 69, 2,139, 20,140,136,147,179, 8,147,141, +176, 31,128, 84,194,122,167,201,148, 38,119,182, 69, 19,228,181, 6,139,239,139,105, 97,105,165, 64, 61,247,142,111,169, 45, 47, +184, 86, 25, 43, 57,203, 75, 90,198, 3, 74, 14,113,165, 21, 82,169, 48,168,120,112,247,181,206,251, 53,146, 54, 83, 10,122,167, +236,189,235, 96, 10, 55, 76,180,186, 84, 5, 5,118,104,198,168,238,211,245,222, 99, 57,205,228,130,167, 36,233,148,107,176, 71, +206,140,191,107, 52,167, 34, 80,128,206,226,150, 81, 20,122, 44,108,237, 23, 23,140,130,179, 35,222,241,205,239, 0,148, 70,200, + 21, 89,107, 12,222, 95, 24,159,111,187,242, 34,151,162, 86,236,120, 62,251, 31,254, 61,169, 83,149,161, 54,166, 9,232,154,226, +176,212, 11,236,251, 54,110,109,161, 15, 97, 9, 93, 13,175, 54,190, 96,109,124,199,224, 26, 99, 16, 83, 64, 76,164,176,181,174, +116,220, 79,136, 33,118,146,151, 49, 86, 58,199,218,163, 53,155,141, 44,151,184,226, 63,165,195, 51,130,247,236,130,191,237,206, + 74,246, 92, 61, 7, 91, 46,243,182, 7,229,231,191,198,221,106,181, 86,143,237, 5, 33, 99,217,194, 88,215,211,147, 56, 53,160, +103,178, 40, 13, 20, 17,117, 88, 30, 36, 77,247,128, 84, 58,136,165, 86,218, 87,140,247, 56, 28,206, 97, 69,145, 31,101, 68, 93, + 75, 33,212,225,146, 13,241,178,229,138,216, 77, 45,209,162,169,127, 31,157,184,167, 0,239,118,124,166,171,112,214, 37,230, 23, + 21, 48,134,184,222,148,151,254,179,181,139, 94, 9, 89,174, 19, 4, 37, 22,148,150,153,120,225,165,107, 99,184, 62, 50,239, 42, +242,245,231, 55,170,101,158,211, 89,130, 90,177,155,174,244,151, 83, 27,211,173,120, 57, 39,164, 48,119,125,134, 17, 64, 72,202, +172,242, 75, 19, 30,109, 46,224, 27,143, 63,137,156, 11, 66, 88,196,246, 2,225,201,139,211,192, 59,148, 34, 65, 45, 57,111,130, +102, 12,114, 72, 80, 86,112,156, 69,222, 37, 85,123, 1, 89, 82, 90,127,118,165,100,159,107,214,236,122,219, 70,225,149,221,180, + 2, 61,228, 34,208,219, 78,219, 90, 80, 78,206, 9, 49, 44,242, 25,202,138,161, 20,174, 1, 36, 85,173,253,124, 37, 19,145,202, + 34,215,247,162, 58, 69, 54, 1,109,154,210,246,228,100, 65,180,245,132,176,200,141, 97,129, 3, 80,208, 90,106,215, 89, 48,117, +183, 94,248,253,226,114,224, 68, 83,177, 73,104,191,126,206, 25, 74,186,104, 24, 33,155, 85, 64, 11,119,161, 52,123,171,156, 43, + 37, 70, 40, 41,144,149, 91,197,185, 49, 70, 56,109,104,231,149,207, 70, 41,133,130,204,233,132,214,114,249, 66,186, 66,197,115, + 85,136,107, 45,199, 33,183,149, 89, 59, 15, 69,179,208,236, 97, 85,232,113,109,141,185, 21, 8,207, 18,191,221, 58, 96,231,125, + 63, 91, 57,125,227,229,153, 34,245, 41, 53, 7,193, 45,227,114,172, 98,143,218,109, 78, 13, 62,175, 89,132,130,166,191, 71,125, +223,140, 22, 50,165,132,210,166,123,131, 3, 84,105, 66,184,154, 75,145,246, 56, 47, 65, 66, 73,214, 41, 70, 72,109, 0,197,210, + 57,101,228,180, 92,204,172, 64,203, 84,103, 81,221,159, 39,113, 31,181, 53,106,233, 65, 79,252, 62, 99, 92,160,149,236,254,179, +234, 43,190,148,216, 28, 52,209,121, 91,199,117,254,131,132,186,176, 40,214, 29,154,196, 75, 63,247,119,184, 86,201,128,183, 92, + 69,108,117, 16,205,123,213, 39, 13,218,201,103, 28, 89,128,201, 89, 99,180,129,122,226,185,111,170,205,242,195,221,231, 76, 49, +132,140, 65,219, 97,225, 29,193, 4, 41, 6, 28, 31, 60, 64, 12,179, 84, 61,121, 29,169,136,170,214, 24, 13,107, 60,125,134,242, +133, 43,217, 3, 25,165,176,204, 39,233,106,249,135,205,130, 52, 53, 82,121,180,189,125,219,177,144,176, 22, 4, 93,152,133,107, +156,250,168,243, 50,254,243, 2,243,189,129,114,140,129, 27, 38, 60,251,150, 39, 17,252, 30,215,206,118,128,140, 79,219,255,182, +237,213,245,102, 28,127,255,141,215,241,202, 75, 95,144,168,214,188,142,226,228, 34,104,104, 86,213,199, 51, 91, 27, 17, 15, 99, + 35, 23,124,199,136,110, 50,180,201, 10,230,129, 56,237,246,136, 75,148, 41,200, 44,163, 43, 3,239, 60, 22, 9, 19,104, 66,141, +203,106,229,166,160,111,227,162,216, 61,167,245,130,112, 76, 27, 90,187, 32, 28,107,165, 52,129, 15, 18,148, 99,189,195,224, 7, +104, 17,133, 89,229, 69,249,202,159, 41,167,212,121,197,237,215, 72, 49,193, 58, 79, 15,183,164,132,181, 11,162, 85,182, 57,166, +245,103,177, 28, 53,182,184,196, 48, 47,124, 81,115,227, 26, 3,211,217,213,158, 94, 53,159,142, 76,150, 42, 76, 27,235,157,197, + 86,252, 85, 36, 40,200,177, 75, 52,176,210,113,229, 78,147, 34, 95,219,118,225,156,117, 22,135,243,131,172, 13, 32,235,153,157, +100,100,207,172,226, 65,182,192,254,202, 30, 57, 5,148,148,201,206,223,236,223,218,207, 82,164, 75,184, 76,170, 43,162,101,184, + 48, 93,218, 40,159, 91,183,167,149,238, 35,103,101,232,205,134, 20, 29,237,175, 24, 66,167, 24,246,195,185, 22, 84,148,238,233, + 14, 33,138,239,213, 2,114, 48, 43,227, 96,228,187, 13,155, 48, 36, 22, 98, 60,184,157,179,130,186, 52, 82, 56, 23,132,200,113, +113,179,204, 52, 72,147,181, 22,208, 10,211, 56,177,208,104,214, 52,153, 94, 76,187, 9,243,178, 80,239,145,171,224,105, 77,127, +103, 90,103, 29, 67, 88,167, 21, 61, 57,171,202,165,195,142,182,253,179, 49,198,126,240, 27,137,131,213,138, 10,120,238,154, 13, +156,245,226, 35,102,118,130,181,150,154,149,211, 44,103, 81, 69, 88, 66,239, 24,149, 42, 34, 62,202, 44,164, 65,250,152,115, 3, +180,150, 80, 15,113, 57,104,205,119, 95,105, 94, 82, 49,196,149,219, 48,211,139,190,132, 64, 31,186, 60,111,165,172,246, 67,165, + 87, 87,131,115,180,184,162,143, 98, 85,159,136,240,187,169,208,186,246,119, 98, 35,178,232,162,219, 42,197,170,150, 4, 61,254, +115, 70,138, 83,211, 87, 81,218,153, 46,124, 78, 50,233,172,185, 10,245,172,172, 12,126, 0,206,112,202, 81, 37,174, 90, 41,133, +188, 48, 14,181, 42, 37,126,244, 36, 22,198,136, 90, 18,180, 29, 72, 32, 20,246,120,203, 65,104,241, 83,173,219,246,195, 4,109, + 41,108, 76, 51,245, 51,176, 6, 59, 65,190,114, 37,121, 98, 22,134, 93, 33, 66,121, 89,200,233, 24,169,243,104, 69,174,150,231, +162,138,238,197, 89,102,136,212,178,177, 60, 3, 12, 3,106,174, 40,209,173,232, 11, 41,154, 10,198,183,120,211, 53,154,187, 33, +104,177, 25,191, 67,238, 57,166, 9,102, 24,237, 68,175, 19,122,206, 64,237,211,196,214,241,235,238,164,162,182, 33,119,135,131, +241,178, 94,128,130, 22, 97, 94,159,248,137,213, 89,105, 80, 76,172, 56,149, 9,203, 2, 85,218,157,167,122, 49,223, 2,106,212, +147,207,127, 83,237,224,147,166, 0,183,174, 87, 26, 70, 43, 44,135, 35, 82, 14, 8, 11, 81,131, 37, 71,193, 66,234, 53,144,163, + 39, 46, 53, 16, 7,129, 8, 45,150,178,237, 34,154, 48, 45,198, 72, 97,152,214,112,214,247, 10,174,167, 46,109, 43,213, 82,224, +188, 65,136, 75, 87, 8,230,148,165,203,192, 26, 87,249, 8,230,251, 42,160, 35,186,241,108,242,184,249,204,219, 49,238,207, 40, +248,217,120,210, 91,246,116,171,134,181, 86,248,202, 23, 62,143,135,111,220,145,236, 94, 25,231, 72,167,211, 4, 64,205, 34, 5, +137,228,107,251,161,150,246,217, 72, 95,237,240,111, 54, 65,138, 67, 86,142,120, 78, 21,222,143,189, 43,235,106, 70, 73, 99,138, +178,231,108, 98,172,173,183,184,239, 99,196,207,221,172,123, 91,175,114, 71,178,218, 53,201,136, 59,101, 81,214, 27, 5,231,173, + 80,179,116, 15,255, 48,198, 10, 11,170, 32, 69,185,236,244, 58, 70,237, 2, 44,173,225,156,237,209,155, 74,254,236, 60,140,213, + 70,160,199,231,192,187, 65, 84,180, 21,110, 24, 88, 25,183, 63,155,165,159,179, 77, 75, 98, 12,128,230,184,172,241,223,157,140, +200,115, 94, 59,147, 42,107,132,221,120, 5,181, 86,204,203, 17,198,104,204,203, 44,151, 57, 15,255, 69, 14,170,214,217,230,210, +186,242, 22, 63,203,239,211, 89,143,105,218,163,232, 74, 68,101,133,132, 60,228, 21,157, 43,221,115,251,110, 46,115,228,183,145, +188,229, 18,226,184,148,139,227,115,237,100,239,175,248,185, 55, 85,123,243, 61,183,127,190,129, 46,200, 55, 87, 40,117, 45, 78, + 83, 35,175, 41,139,253,181,235, 76, 2, 12, 51,184,242,166, 55,190, 11, 48,157,195,225,252,192, 85,135, 49,136, 37,146, 22, 40, + 97, 28, 85, 0, 28, 74,222, 73,173, 53,180,119,221, 91,110, 69,204,213, 53, 32, 75,232,214,206,118, 30,180, 21, 72,206, 69,240, +200,169,139,160,134,113, 16,209,153,235,151,118,179, 30,105,249,126,154,192,177,141, 59,149,105,236, 1,219,215,130,237, 57,235, + 66,182,176, 32,165, 32,197, 64, 18,200,211, 32,171,176, 85, 52, 23, 99, 20,119,134, 18,225, 41,250, 69, 91,123, 6,129,193,224, + 25,244,113, 60, 28,145, 82,128, 22,222,131,245,132,145, 32,101,122,161, 69, 9, 94, 47, 69, 67,211,130, 56,247,213,137,130, 22, +119, 64, 19, 56, 53, 63,123,211,192, 72,154,157,210,128,114, 92,197,133,147,172,243, 68,247,129, 53,198,120, 45, 48, 13,188, 36, +164, 45, 98, 57, 85,222, 94,152,104,182,119, 49,199,128, 2,238,255,155, 70,132,169,148, 70,190, 51,201, 27, 48,190, 79, 55,148, +161, 46,129,169,113, 9, 90, 1, 87,111,220,236,197,130, 49, 6,167,121,193, 52, 77, 23, 56, 23, 45,130,183,237,203, 67, 8,130, + 63, 21,125,134,106,161, 74, 9, 49,206,178, 55,214, 82,156,108,144,196,162,179,169,149,233,118, 70, 68,156, 4,251, 4, 62, 59, +125,116, 45,231,146, 53,240,195, 0, 99, 92, 23,162,214,146, 17, 98,128, 22,148,108,233,186,136,213, 40,210,108,103, 13,109, 91, +181,234, 34,223, 20, 78, 50, 25,145,230, 65,183,243,146,211,157, 20, 35, 19,235,100,220, 62, 12, 67, 39,201,157, 78, 39,113, 92, +104,140,211,136, 28, 19,255,127, 90, 19,185,219,215,122,141,110,202,105,129, 50,154, 22, 57,173,161,114,185,224, 54, 72,125,125, + 4,168,199,159,121, 91,117,222,117, 11, 84,219, 91, 48,171, 55,225,225,189,187, 72, 33,192,104, 69, 11,151, 98,149, 93, 55,169, +102,237,144,106,163, 43, 5, 30, 10,106,211, 99,132,184,192,104, 67,106,210, 50,247,202,172,177,181,219, 11, 11,177,203,213, 42, +151, 43, 74,239, 16, 90, 28,102,110, 29, 74,174,242,210,134,254, 51,247, 52, 57,189,230,158,247, 75, 86, 3,187,179, 43,184,118, +235, 45,216,239,246,240,195,200,151, 66, 46,215,102,213, 83,194,124, 87, 74,225,207,255,228,223, 75,190, 52,186,154,189,237,110, + 27,204,165,230,178, 66, 94, 54, 17,158, 85, 70,243,125,183,178, 17,169, 1,181, 95,110,156, 56,104, 1, 43, 88,140,187, 9,203, +233, 36, 34,172, 44, 99,101, 43, 99, 54, 86,136,143,134,253, 41,137,212,220, 88,195, 30, 65,222,107,209,130,237, 50,113,126,232, +190, 78, 40, 9,201,144,145,249,176, 99,198, 21, 86,125, 49, 0, 0, 32, 0, 73, 68, 65, 84,251, 91,158,122, 26, 95,253,234,151, +129,156, 48, 47, 71,126, 95, 41,139,206,160,137, 4, 53,172,111, 35, 62, 33,159,129, 12, 0,181,245, 64,107,221,241,157,244,134, + 87, 30, 20,206,174, 62,113,161, 50, 89,235, 48,237,118, 72, 41,225, 52, 31, 57,213, 65, 22,145,149,192, 22, 12, 15,247,249,116, +196, 40, 94,100,103,199,158,168, 22, 83, 16, 74, 30,215, 66, 45,145,173,202,164, 40,165, 36,154, 16,133, 42,251,175,113, 63,241, +243,168, 44,120,148,209,216,239,246, 56, 29,143,168, 40,152,231,211, 38, 20, 70, 73,174,177,238,234,235, 54,174,223, 10,219, 46, + 23,157, 29,161,185, 33,229,217,193,173,121,224, 66,179,107, 63,123,223,251,109, 80,152,107, 32, 81,211,122,180, 83, 73, 49, 96, +201, 90, 12,211,116, 97, 39,238,172, 19, 79,125, 35,208, 17,192,116,118,229, 10,253,205, 41,194, 40,141,249, 52,195, 15, 30, 65, +138,178, 6, 19,105, 33, 60, 57,167,190,223,238,171, 24, 41, 60, 46,248,117, 27, 85,171,214, 53, 63, 33,165, 30,233,220,118,208, +222,121, 24,203,130,154, 74,107, 43,251,244,212,167, 62, 20,135, 81,121,222, 14,231, 62,101,178,174,191,191,218,104, 28,143, 39, +177,170,105, 9, 94, 75,162, 76, 86,253,172,113,222, 35,198, 4,239, 70,174, 21, 74, 20, 65,176,134,145,181, 86,138,129, 54,188, +156, 55, 42,110, 89, 1, 58, 43,235, 46,153, 34, 20,116,129,156, 17,151,144,113,174,187, 5,170,236,241,161,180, 92, 26,178,194, +232,249,245,166,235, 38,170,230, 5,168, 4, 9, 92, 43,136,125, 45, 69,172, 82,194, 15, 23,209,100, 45,205, 42, 91,123,129,234, +156, 67,236, 65, 36, 70, 72,113, 10, 41, 50,215,124,144, 2, 45,151, 4,163,201, 82, 72, 57, 83,197, 47,234,121, 37, 26,146,152, + 9, 67,242,195,216,211,211,172,117,130,160, 21,239,121, 76,244,244,215, 66,246,188, 60,223, 77,148,198,227,153,107, 53,107, 12, + 80,133, 8,231, 38,100,209, 80, 89,103,225, 29,239,154,208,172,146, 37, 35,135, 32,157, 41,255,220,109,194,148, 82, 20,253, 15, +241,215, 85, 70,228,235, 4, 4,189,160,175,141,236,153,137, 31,246, 98, 41,174,138, 14, 16,171, 13,210,194,149, 2, 41,131,156, +193,242, 44, 93, 11,139, 42, 32, 35,163,109,207, 22, 73,178, 26, 78, 41,195, 72,135,238,198,161, 71, 57,231, 24, 80, 82,146,239, + 16, 88, 78, 7,209, 49,240,166, 26, 26,101, 79,107,174,121, 50,127, 95, 37,154, 19, 37, 69,114, 19,125, 38,129, 51,141,227,196, + 16, 29, 41,172,212,173,103,223, 86,219, 94, 55, 73,240, 67, 69,197,233,252, 1,142, 15,238, 51, 62, 78,118,165,109, 7,209,226, + 70, 87, 56,127,185,176,103,116,110,144, 78, 67,144,119,165,116,122, 78, 5,129, 10, 90,226, 27, 75,201,240,206,203, 14, 18, 29, + 15,120,182,187, 34, 68,182, 69, 72,108,102,173,220, 68,220,209, 68, 14,198,174, 1, 27, 68,231,101,148, 34,226,154, 84,122,182, + 46, 3, 26,110, 48, 65, 73, 70, 59,205,151,143,186, 85, 22,170,174, 52,188,115,251,203,156, 98, 84, 92, 40, 82, 30, 37, 62,195, +102,135,165,141,140, 93, 83, 35,191,217,254,249,246, 17,173, 8, 96,144,219,202,129,201, 78,168,188,228, 74,230, 62,136,130,148, +149,176,212,246,237,151, 83,234,182,232, 80,173, 47,138, 43,154, 7,124,221, 97,173,201,105,169,172,216,208, 54,138, 30,220, 78, + 38, 4, 28,139, 95,185,122, 13,198, 58,132, 48,227,225,221,215,101, 66, 83, 36, 83,120, 45,112,116,223,149,149, 46, 78,106, 23, +245,101, 20,239,234, 67, 93,189,190,198, 83,160,167, 97,251, 63, 99, 5,254, 80,106, 69, 92,150,149,188,167,106,207, 32,176,218, + 97,153, 79, 40, 53, 97,218, 77,208,202, 81, 20,150,105,155,108, 10, 90, 35, 93, 30,197, 79, 65, 68, 38, 44,112, 56, 78,172,189, +139,107,170,254, 97, 28, 48,238,246, 72,115, 98,135,129,184, 10,214,186,237, 81,148,244,169, 92,208, 87,104,249,141,183, 34,186, + 11,176,155, 46, 82,148, 75,209,153,238,164,104,123,180,230,107, 85, 93,180, 86,251,127,238, 30,112,153, 24, 52,112,142,209, 76, +150,170, 10,112,195, 8, 39, 42,245,182,143, 44, 0,134,113,132,183,182,119,124,203,105,238,106,247,101, 89,250, 74, 66,107, 22, +102, 45,232,162, 23,132, 82, 96, 48, 92,194,247, 16, 14,215, 59,249, 36, 29,132,234,207, 30,215, 93, 50, 37,176, 43,175, 29,218, +200,218,105,145,139,223,246,216,216,214, 73,182,132,185, 90, 19, 14,135,115,201, 75,160,115,231, 32,225, 36, 94,144,203,198, 58, +212, 34, 14, 4,180,213, 64,233, 10,241,134, 27,229,207,149, 68, 69, 47, 75,180, 66,225,231,106,113, 37,195,161,233, 83, 90,177, +188,205, 13,168,138,186,148,102,109,106,159, 17, 15,101,234, 11,106,229,207,106,133, 15, 65, 61, 66,238,107, 33, 6,167, 8, 81, + 80, 75,174,142, 92, 30,181, 84, 89,105, 82,107,145, 36, 88, 36,151, 40,206, 10, 45,103,134,216,218,114,193, 56, 78,156, 42,201, +103, 7, 5,129,188,208,251, 93, 11,137,112,103, 87,174,224,112,184,143, 82, 8,138, 9, 37, 99,127,182,199,114, 56,137,162, 61, + 9, 95,220,139, 62, 97,129, 82, 44, 76,180, 29, 36,168,138, 66,180,184, 4,168, 10,236,247,123,132,146,186,216,177, 79, 4,141, + 37,111, 65,161, 67,170,160, 20, 6, 63, 74, 67,146, 48,203,122,182,105,123, 80, 27,200,138,147,210, 6, 15,107,186,149, 36, 81, +208,109,122, 97,156,199,178,204,208,146,123,209, 26,144,246, 44,110, 89, 32,132,218,176, 51,231,250, 53, 74,120,146, 70,205,122, + 19,199,172,197,138,236, 37, 36,166,246, 56,214,182, 26, 8,139,248,233,165, 49,110, 83,166, 22,241, 76,217,140,176,246, 43,159, + 85, 32,119,171,179,179, 3, 74,201, 72, 89, 28, 12, 5, 93, 12,153, 82,236,129, 87,237,204,131, 96,172, 27,156,170,189,139,234, +217,119,124, 75, 37, 38,180, 81,128, 34, 78,231, 15,241,224,222,235, 60,240,172,185,232, 3,175,107,151,145, 83,234,226,161,210, +108, 20,114,232,140,195,212,187,110,235,156,164,209, 68, 84, 85, 37, 40,190,118,225,152, 31,124,183,207,113,135,174,161,140, 21, + 37,173,234,126,227,134,127, 45, 49, 95,220, 39,202,232,147, 21, 91,129, 31, 60,131, 70, 20,224, 68, 65, 57, 12, 35,140, 27, 81, +123,199,230,187,221, 71, 3, 66, 31,138, 80,224,206,109, 29,119,134, 62,118,111, 66,148,203,202,235,173, 87, 82, 43,242,166,171, + 20, 57,164, 65,149, 11,187,246, 78, 75,106, 23,177,236,228,253, 48, 66,203,168,149, 96, 26, 67, 31,170,216,197,122, 10,156,252, +247,166,190,221,254, 60,219, 81,239, 86,136,178,189, 84, 47, 96, 81, 53,163, 35, 91,193,214,162, 22,107,134,168,111, 19, 98,100, + 16,132,115, 3, 73, 88, 98, 95, 10,241,196, 3,127, 9,107,202, 89,251, 25,101,231,104,141,237,197, 87,247, 86,111, 70,210, 23, + 68,111,138, 47,153,181,236,194,169,128, 93,161, 21,228,174,107,248, 97, 32, 30,179,169, 82, 81,112, 60, 60, 4,114, 65,201, 17, +128,198, 56,237, 96,172,197, 60, 31,251,231,221,124,217,109,215,168,196,179,156,114,146,110,142, 47, 35, 11,216, 53,169, 46,151, + 12,231,104,219, 33, 4,130,223, 89, 20, 60,114, 19,207, 25,109, 16,150, 0,239, 28,146,240,162, 91,166, 55, 47, 92,211, 47,248, +203,211, 19,165, 20,220,224, 97,108, 27, 17,166, 46,184,105, 74,221,245,251, 46,111,134,197,232,149,209,111,140, 65, 73,244,163, +107,205,116,180,155,183,222, 2, 63,120, 28,143, 71, 88,109,112,229,218, 85,148, 90,112, 58,112, 34,180, 44, 51,106,202, 18,122, + 4,217,201,243, 2,143,153,147,140,126, 49,200, 37,207,238, 95,138, 12, 41,208,138, 28,184, 45, 22,210,138,183,188,105, 72,170, +228, 26,240,153, 34, 38,180, 36,134,172,164,148,160,219, 97,105, 27,177, 78,116, 50, 21,112,214, 80,200,213,100, 79, 2,254,112, +206, 33,134,136,113, 26, 55, 57,247,164,251, 53,194,225,210,246,251, 50,109,107,227, 86,116, 6,186,145, 75, 38,194, 57,139, 20, +179,240, 46, 12,147,243, 4, 41,154,115,233,171,193,178, 65,189,150,218, 50,192, 77, 23, 14,119,145,154, 18,228,175,230,190,187, +217,171, 80, 11,180, 93, 39, 27,212,161, 24,122,206,107,233,127, 62, 85, 57,114, 46, 85,245,253,113,127,102,188,164,225, 25,219, + 39, 96, 81,210,223, 32,159, 67,179,138, 86,168,158,172,150, 18,215, 44,200,228,218, 3, 92, 9,104,239, 96,157, 71,145, 14,216, + 24,254,121, 0,230,150, 91,239,153,106, 38,103, 84,206, 65,236,142, 21, 86,214,101,200, 60,219,236,224,165, 80,110,137,102, 22, +206, 13,194,161,151,243,222,112,226,210,190,183,146, 73,199, 35,150, 86,206,176,192,201,140, 86, 43,156,166, 54,135,142,162,144, + 81, 67, 73,108, 44, 16,115,192, 52, 78,176,110, 90,211,227, 74, 21,247, 76,236,122, 39,191, 17, 11,194, 26,198,214, 22, 48, 25, + 79, 10, 18, 99, 12,170, 20,165, 41,208, 37, 97, 68, 7,181,125,247,120, 89,103,228, 84, 72,131, 19,213,125,142,153,207,157, 76, + 59,140,184, 92, 74,201,112,227,142,233,109,137, 26, 2,239,184,226, 41,114,110, 55, 87, 73,227, 93,212,146,161,176,174,183,147, +172, 13,156,117,176,195,192, 70, 55,132, 21, 62,211, 4, 48, 37, 71,220,187,115,187,115,196, 97,214,142, 69, 27,241,225, 98,141, +208,107,112,130, 90,215,241,160,151, 93, 58,215, 25, 78,188,145,179,136, 15,208, 15, 31,170,228,125,143, 39,108,123,222,182,139, +109,149,248,170, 20, 68,127,153,120, 33, 25,201,168,165,112,203, 26,122,207, 89,153,154, 46, 38, 73, 41,195,251, 17, 80,236, 40, +248, 96, 38,156, 36, 66, 16,194,210, 54,114,129,244,253,108,173, 72,113,126,211,165,249,168,144, 12,102, 37,243, 66,111,194,133, +246,123,183,137, 69,231,182, 54, 43, 92,189, 84, 32,136,208,100,187, 39,225,197,154,145, 99,238,126,204, 14,134,137,249,194,239, +127,249, 98,223, 94, 30,125, 45,112, 25,212,211,166, 10,114, 41,121, 55, 94,216, 79,230, 18, 68, 20,167, 49, 14,211, 5,123,216, +188, 28,145, 11, 5, 70, 45,129,173,237,243,183, 97, 11,173, 19,127, 36, 40,104,219,241,200, 5, 57,141,103,235,207, 15, 48,201, + 76,190, 87,231, 28, 32,200, 89,109, 40,166,172, 37,224,120,126,191, 43, 89, 21, 92,191,200,157,116,162, 80,181, 13, 65, 36, 72, +163, 72,242, 26,167, 71, 73,196, 52,173, 99,110,156,129, 22,210,210,138, 72, 22, 38,188,228,202,134,114,215,138, 75,242, 8, 56, + 62,235, 57,235,242,188,199, 16, 59,100, 98,187, 91,111,207,184, 29, 7,236,175,220,228,255, 62, 6,132,101,134,177, 26,203, 50, +119,112, 5, 19,182,226, 70, 76,186, 22, 99,109, 52,217,104, 88,131, 31,112, 58, 29, 97,180,197,120,245, 58,166,105,183,118,120, + 98, 47,107,201,103,218,232,222, 21,199, 16,186, 24,117, 24,134,110,157,105,207,133, 49, 90,128, 44, 25,187,253, 94,186,111,153, + 16, 24, 43,254,118, 2,131,180,214, 80,226,214, 80,214, 96, 89,150, 21,102, 35, 34,210,150,162,198,159,137, 1, 21,222, 79,125, +218,227, 28, 63,211, 52,179,115, 84,150, 23, 24, 59,230,210,199,164, 90,107, 56,205, 34, 82, 91,131,249, 2,172,165, 34, 45, 81, +194,114,108,159,110, 40,173, 9, 0, 42, 44,162,243, 38,235,189, 21, 42, 73, 40,130,252,204,141, 48,232, 83, 15,214,105,135, 63, +191, 8,211, 61,199, 4, 92, 5,226,111,141, 33,249,185,182,238,187, 37, 65,182,213, 13, 58, 29,112,157,106, 66,252,238, 78,206, + 23, 35,171,165,181, 56,136, 41,117,151, 71,251, 61,155,192,182,237,161,235,230,231,105,239, 99,215,151, 56,139,229, 52,163,166, + 40,142, 8, 78, 77,131,168,203, 73, 95,100,163, 68,142, 6,159,229,198,165,112,158, 41,119, 41,134, 46,142,205, 33,118, 61, 68, +115,233, 88,107, 37, 60, 74, 38,135,210,237,210, 60,193,226,179, 69,229, 78, 59, 22,228,198, 88, 60,184,123, 15, 41, 46, 44,188, +156, 21, 54,131,129, 49, 30, 86,236,105, 78, 86,126, 77,191, 21, 3, 87,189,214,177, 64,174, 0,134, 97, 64, 92,102,132,176,136, + 80, 78, 67,149, 36, 19, 57, 2,177,154,190,105,203, 39,104, 13, 93,148, 34,181, 61,143,169, 93,186, 13, 50, 85,139, 92,191, 0, + 52, 73,122, 41,156,164, 96,209, 29, 9,222,206, 23, 40, 5, 59,122,104, 77,231, 80, 56, 29, 55,172, 8,121,238,228,242,215, 82, +100, 91,107, 49, 31,169, 55,104,194, 82,103, 56,209,140, 18,206,147, 98,132,209,198,252, 74, 78, 17, 41, 69,204,199, 3, 30,222, +123,227,130, 98, 58,203, 88, 26, 34, 30,115, 27,240, 70,219,143,117, 21,178, 68,100, 86, 40, 56, 71, 18, 93, 59,220, 82, 73, 61, +111,218,180, 93, 99,167, 34,229,222,141,109, 1, 28, 91,145, 69,201,220,155, 53, 75, 79,219,149,112,119,187,141,207, 92, 21,247, +109,255,200,253, 43,119, 94, 57, 69,156,206, 15,194, 36, 23,203, 74, 23,100,172, 48,131, 53,230,179, 92,232,106, 47,199,189,182, +223,151, 65, 31,237,129,211,155, 11, 84, 93,240,107,182, 95,163,217,120, 46,255,122,140, 55, 85, 61,185,173, 49, 3,154,103,153, +162,168,218, 57,229, 95, 43,130,244,107,198,209,110,138,145, 62, 70, 85,144,233, 2, 21,152,219,191, 47,196, 69,242,166,253, 40, +135,105,171,118,153, 25, 77, 31,101, 90, 5,115, 27, 5,231,215,179,160, 93, 22,146,105, 77, 8, 75,201,181,119,210,181,174,217, +246,237,197, 77,145,118, 51,141,214,105,101,234, 30,178,144,236,166, 29,173, 40,206,242, 34,149, 93,122,169, 25,203, 18, 86,122, + 84,161, 14, 35,181, 29,187, 96, 58,183,122,131, 82, 75, 23,221,172,130, 47,238,113,171, 88,237,218,225,174,181,233,126,228,118, +105,133, 6,129,169,196,227, 54,199,198,246, 89,178, 34,148,212,214,162,130, 26,145,154,139, 8,158, 12, 35, 72,229,192, 48,158, +129, 28, 70, 34, 70, 25, 58, 99,228,192,169,253,215,214,146, 7, 62,236,118, 44, 70, 12, 47,167, 24,151,190,255,204,145,151,170, + 31,135,158,151,157,230, 19,211,251, 98,160,152,104, 62, 33, 71, 78,177,226,178, 64,213,130,148, 55, 17,168,169, 77, 54,100, 50, + 37, 69, 74,142, 17,113,158,225,186, 74,186,160, 0, 24, 5, 84,213,176,172, 85, 38, 99, 80, 26,211, 52,193,137,162,185,233, 17, +198,105,236,140,236, 34,222,236,227,241,128,154, 51,126,249, 23,126, 14,127,245, 91,191, 21,239,125,207,123,240,157,239,126, 55, +118,187, 61,190,240,133, 47, 72,115,194, 29,110,227,104,240,194, 89,129, 85,125,149, 85, 50,254,235,127,252,147,248,212,167,127, +135, 89,244,226, 76,105, 56,213,102,107,180, 13, 19, 28, 24,122,162,141,238,209,156,206,218,126, 46, 61,251,236,115,248,216,139, + 63,140,247,191,239,187,241,194, 11,223,129,119,189,243,157,120,237,206,107,120,253,245, 55,160,149, 17,152,138,129,159,168, 4, +247,214, 74, 46,187,238,162,200,113,183, 35, 29, 82,136, 81,186, 5,179,148,132,113,183,147, 98,118,141,130, 86, 90,227,159,255, +210, 47,224,214,173,199,241,167,127,246, 89, 84,195, 48,157, 2,133, 23,255,246, 15,226,199, 94,252,219,248,215,159,248, 4,146, +124,134,168,133, 66,191, 24,113,154, 15,114,161, 19, 24, 53,207,179,136,189, 42,172, 54,248,135,255,229,127,129,127,243, 7,191, +143, 42,186,134, 34,247,193, 48,208,101, 80, 50, 47, 59, 55,120, 65, 89, 20,209,128,212,238,151,111,137,117, 78, 70,255,222,211, + 89,176,219,159, 97,127,229, 58,198,105,194,184, 63,195, 56,237,224,134,177,187, 40, 82,140, 34,206, 95,215,117,196,113, 83,232, +154,164,176,162,112, 16,132, 89,149, 36,218,135, 32,113,165, 17, 94, 38,158, 49,101,252,212,127,245,143,240,103,159,253,115,121, +119, 87, 59,109,109, 33, 87,160, 86,228,195, 31,252, 16,190,248,197, 47,110, 38,122,186,219,127,219,197,254, 75,191,248,243,248, +196,111,127,146,103, 80,229,251, 83, 74,133,129, 33,198, 87,181, 6, 78,139,235,166,133, 70, 25, 12,187, 51, 64,236,126, 78,166, + 4,185, 50, 5,206,122, 98,146,189,183, 29, 2, 71,235, 45, 25, 2,222,123,248,105, 15,109,157, 56,104, 82,215, 84, 25,173, 97, +231,227, 67, 40, 24, 25, 29, 68,241,228,110,186,208,110,223,169,146,243, 92, 31,169,222,109,192,141,237,190,180,237,208,114,206, +112,134, 42, 87, 63,120, 34,251,138,228,184, 87, 72,167,151, 47,176,211,217,233, 42, 25,235,231,238, 47, 69, 89,189,222,173,243, + 87, 86, 95, 8,192,128,110,132, 76,217, 55, 68,114,125,115,225, 5,105,189, 70, 42, 17, 70, 57,120, 71, 54,177,241, 14, 74, 87, + 44,167, 19,106, 99, 27,215, 40,232,212,244,166, 11,106,123, 49, 89, 25,183,179,154, 34, 78,177,141, 67,173, 93,189,200,141,204, + 7,185, 68, 59,188,164,118,118, 33,253,193,122,221,183,106,165, 41, 52, 51,172,102,149,140, 12,183,251,242, 71,197,102,118,191, +253,230,130,223, 78, 12,182, 23,119,150,200, 87,219,220, 0, 90, 99, 24, 7,132,249, 8, 20, 5, 59,140,176,222, 97, 14, 75, 63, +116,123, 87,219,188,192, 13,124, 34,235,129, 54,110,250, 90,121,231, 23, 34, 67,183,246,188,170, 80, 16, 80,161,123,230,120,205, +220, 57,230,154,137,171, 69,155,100, 44, 80, 18, 66,209, 70,211,252, 12, 79, 80, 3,119,188,110,114,200, 57,225, 52, 31, 40,158, +105, 34, 74,137, 48,108, 42,235,186,101, 72, 2, 24, 68, 68,217,186,223,214,109,176, 99,178, 80, 8,236, 80, 27, 92, 35, 87, 84, + 85, 16, 37,253,203,120, 15, 63, 77, 24,167,137,226,186,196,239,178, 90,181, 10, 43, 55,138,100,109, 53,114, 8, 40, 81,192, 25, +149,241,197,165,174, 93, 96,155, 20,104, 59,245,149,202,178, 44, 93, 27,209,188,194,107, 17, 46, 69,142,247, 56, 29,143,208, 69, +244, 48,142,159, 9, 11,143, 5,167,123,231, 80, 80, 24, 6,223,147,173,170, 60,215,170,135,125,104, 40, 72,164,110,179, 7, 74, +252,227,114,154, 87,124,116, 62, 33, 73,129,228, 7, 17, 9,201,175, 83, 82,133, 82, 22, 57, 19,140, 83, 82,130,202, 9,147, 31, +160, 0,156, 30,220,103,119,149, 18,252,110, 66,200, 11,226,195, 83,183, 34, 41, 99,196, 38,199, 40, 87, 0,248,213,127,241,191, +113,229, 0,141, 31,255,248,143,226, 61,239,254, 14,124,250,119, 63, 77,122,227,124, 18, 54,115,243,199, 43, 24,227,160, 75, 4, + 52,245, 45, 37,103,252,143,191,250, 63,201,180,128, 28,245,246, 16, 88,241,144,103,137, 49,181,218, 96,244, 59,209, 27,112, 36, + 74,225, 30,195, 79,158,121,250, 25,124,252, 71,127, 4,255,199,191,250, 63,241,210,151,190,136, 24, 23, 60,255,252,243,248,241, +143,255, 56,254,213,175,253, 26, 94,190,253,154,248,243,141,196,149, 70, 44,243, 81,236,109,121, 13, 38, 89, 66, 87,105, 59,231, +176,196,163,228,113,187,206, 67, 72, 41,194, 58,122,198,219, 91,246,204, 51, 79,195,123, 22,178,121,166,182,225,185,103,158,234, + 46,134, 90, 51,146,112, 37, 96, 60,236,224,144, 79, 89,232,128, 22,195,180,195,168, 64, 42,156, 64,121,254,231,255,229,127, 69, + 65,225,190,190, 64,172,132, 9,167,153, 78,144, 97,164, 53, 56, 71,242,242,149,161, 48,179, 69,173,114, 82,233,186,166,162,166, + 68,116,179,241,124, 62,132, 8, 90, 98, 64, 12,129, 34,189,193,203, 88,219,194, 24,141,105,127, 13,203,249, 57, 82, 78,152,207, +207,249,243, 9, 63,192, 96,128,170, 26, 41, 22,212,148,168,151, 82,149,161, 96,169,192,160, 34,156,102, 58, 73, 42,240,171,255, +226,127,103,234, 93, 73,240,126, 64, 81,109,212,157,164, 97,201, 48, 90,225,131, 31,124, 31,126,227, 55,127,179, 35,199, 21,128, +176, 68,152,129,110,135,216, 45,161, 65,120, 30,182, 79, 68,180, 53,236,133, 20, 4, 11,172, 40,118,107, 76,139,148, 86,226, 97, + 60,225,225,233, 62, 74, 6,140,182,208,131, 66, 60,158,195,218, 1, 49,202, 68, 71,166,168, 41, 37, 40,195,223, 91, 69, 2,164, + 98, 27,235,107,141,227,249, 57,255,243,238,234,245, 95,177, 27,101,231,163, 58,186,109,119,249,168,236,101,117, 9,180, 81, 11, +250, 14, 46, 37,142,240,154,234,217, 15, 14, 49,132,181,122,111, 20,156, 75, 2,162, 70, 61,106, 79,108,145, 7,115,139,103,189, +172, 52,215, 27, 79, 96, 69, 69, 76,177, 31,160,205, 70,182,138,250,184,183, 12, 97, 97, 71, 18,230, 30,116,176,178,135, 73,221, +186,124,249, 92,190, 40,171, 28,184, 13, 50,161, 85,171,234,146, 8,168,248,165,172,177,158,146, 47,222,149,148,184,144,107,221, +246,203, 73, 84,189,109, 20,212, 46,152,254,121,151, 55,231,193, 95,254,249, 90,129,117,193,255,120,105,202,208,160, 58,106, 19, +163,219, 4, 69, 69,172, 29, 41,240,179, 76, 49, 82,252, 97,214, 40, 82,165, 20,252,224, 24,242, 98,152, 90,117,217,210,243,245, +130, 87,182,251,245, 30, 63, 41,159, 63, 47,180, 13,103,189, 81,159,186,195, 65, 34, 89,229,114, 86,130, 84,204,133, 10,212,222, + 29, 67,161,208,105,218, 69, 94,218,240,217,217,157,237,101,164, 69,161,208,197,119,160, 72,113,102, 68,149,221,236,108,101, 99, +251, 83,221,161, 81,213,170,142,205, 49,178, 11,149,240,139,254, 86,151,122,129,235,223, 44, 73, 44, 12,185,115,107,107, 41, 37, +126,116, 99,109, 87, 46, 55,244,101, 73, 73, 72,139, 84, 84, 55, 17, 87,195,244, 54, 0, 81, 16,251, 30, 90,252,174,116,158,235, + 84,162,192, 40, 30, 80,109,172,107, 44,245, 1,171, 98,221,136,147, 33,174,129, 68,151,166, 77, 41, 37,184, 97,130, 49, 22,126, + 28,168,106,175, 43,200,169, 42, 77,241, 92, 92,196,167, 78, 66, 99, 59,204,183,172,137, 16, 23,118,147, 41, 73,216, 72,238,129, + 72,218,112,124,251,225, 15,125, 8,191,254,235,191,209, 11,226, 87, 95,123, 13,223,251,189,223,131,207,252,254,103,240, 75,255, +195, 47,226,183, 63,241,219,114,137, 90,252,242, 47,254, 60,126,235, 55,255, 53,114, 74,248,249,159,251, 89, 44,243,130, 31,121, +241, 99,248,195, 63,248, 67,252,243, 95,254,101,252,250,111,252,223,184,245,248, 45,252,253,159,248,123,248,192,251, 63,128, 15, +127,240, 67,112,206,227,165, 47,189, 4,165,128,159,255,217,159,131,247, 30, 63,240,253, 31,193,135, 63,252, 65,164,156,113,251, +246,171, 66,110,244, 72, 49,227,197, 23, 95,196, 39,127,231, 83,248,236,103, 63, 71, 65,152,182,152,151,136, 7,231,231,120,247, + 11, 47,224,223,254,209, 31,225, 23,254,217,127,135,253,110,135, 15,189,255,187,241,109,239,122, 23,190,252,242, 87, 80,114,193, +199,127,228, 69,124,248, 67, 31,192, 11, 47,124, 7,238,190,113, 23,247, 31, 60,128, 2,240,207,126,230,159,194, 57,143, 31,252, + 91, 31,197, 7,222,255, 62, 44, 75,192, 43,183,111,195,239, 38, 78, 51,100,106,240,254,247,126, 23,254,221, 31,255, 49,206,246, +103,184,253,202,109,148, 90,241,237,127,253,175,225,252,112,142,167,159,122, 10,159,248,212,167, 48, 12, 19, 62,246,195, 63,132, +143,124,239,223,196,123, 94,248, 14, 60,241,196, 45,124,238,179,159,199,199,127,244, 99,176,214,225,229,175,222, 70, 10, 51,254, +193,127,254,247,241,210, 75, 47, 97, 62,205,248,197, 95,248,239,241,137, 79,125, 6,187,253, 30, 63,246,195, 63,132,247,189,247, + 59,241,194,223,248,118, 28,231,128,243,227, 76, 85,252,188, 32,151, 36, 12, 2, 32, 71,222, 37,203,178,240,121, 73, 9, 47,254, +224, 71, 81,115,198,237,151, 95,198,123,222,253, 55,240, 3,127,243,123,240,201, 79,126, 18,113,153,241,211,255,228, 39,241,204, + 51, 79, 67, 1,120,120,254, 16,223,249,238, 23,240,183,190,255, 35,248,244,239,124, 10,181, 20,252, 55,255,248, 31,225,185,231, +158,133, 54, 6,175,188,250, 26,222,247,222,247,226, 99, 63,252, 67,248,204,239,126, 6,126, 24,241,211, 63,245, 79,240,153,223, +251, 55,253,206, 56, 59,219,227,239,124,252,199,240,190,239,254, 46,188,231,221, 47,224,171,175,220,198,253,123,247,160,180,198, + 47,253,252,207,224,147,191,251,123,176,222,226,191,253,233,159,194, 48,120,124,244, 35,223,135, 15,189,255,253, 8, 75,192,235, +119,239,225, 39,255,225, 63,192,217,217, 30,127,245, 63,251, 54,188,252,202,109,124,244,251, 63,130, 15,188,255,125,248,174,247, +188, 7,247, 31, 62,196,157,215, 95, 71,138, 9, 31,254,208, 7,241, 27,191,245, 91,221,145,160, 0,236,246,123,252,224, 71,191, + 31, 31,249,222,239,193,119,190,240, 2,158,121,203, 83,248,252,231, 62,143,156, 50,126,246,103,254, 41, 66, 12,248,209,143,189, +136,207,127,238,115,248, 59, 63,250, 49,188,247,187,190, 19, 55,111,222,196, 79,252,221,191,139,223,254,196,239, 32, 37, 6, 7, +229, 84, 16, 75, 20,206,254,122, 30,181, 48,178, 6, 20,202,226,248,202,249,255,105,236, 76,159, 45,171,206,243,254,172,113,239, +115,110,247,109, 36,134,238, 6, 97,232, 9, 73, 6, 33, 71, 88, 3, 2,154, 73, 72, 66,178,173,146,227,184,236, 36,114, 92,113, + 20, 89,137,243, 7,164, 42,149,207, 73, 85, 62,197, 54, 66, 8, 13,209, 16, 59,138, 36, 16, 66,102,176,100, 97,155, 18,118, 89, + 52, 13, 52,160,110, 26,232, 6,122,138, 26,163,190,125,239, 61,123, 88, 67, 62,188,239,187,246,190,167, 79, 43, 81, 21, 85, 8, +154, 59,156,179,207, 90,239,240, 60,191, 39, 98, 50,161,207,158, 86,124,152, 16,174,116, 35,110, 21,231,249,255,243,118,149,161, +203,226,181, 82,138, 92,165,117,208, 6,104,186,117, 22, 7, 36,204,214,215, 25,211,199,124,108, 71,225, 33,134,171,226, 50, 70, +112,188,231, 96,242,146,181,166,100,120, 43,163,139,111, 92, 72, 97, 37, 80, 68, 48,143, 33,209,207,163,201,151, 75,214,168, 9, +171,103,199, 64, 8,182,120,141,212,216,146, 7,109,141, 31,112,176,252,179, 26,103,225, 42, 79, 81,147, 60, 54, 41,185,182, 80, +240,174, 70, 93, 79,105, 28, 42,118, 54,134, 62,132,142,152,194,226, 9, 70, 42,211,253,115, 10,169,200, 17,132, 98,101,145, 34, +192, 89, 82,225,138,130,254, 23, 93,232,106,206, 94, 52, 63, 97,152,103, 47,147,106,152,246, 90,109,187,206, 97, 3, 1,109, 59, + 35,194, 90,234,161, 77,134,210, 9,109, 55, 67,136, 29,123,105, 21,172,246,204,180,119,164,226,255,127, 92,224,139,132,114, 27, +126,238,192,206,129,130, 91,165, 9,142,176,160,181, 48,203,249, 89,178,158, 70,204,153, 33, 17, 57, 13, 42,217,152, 34,225, 96, +197,225,192, 69, 76,100,136, 10, 69, 54, 78, 97,172,161, 20, 46,102,127,199, 72,212,180,190,239,209, 52, 45,154,102, 70, 35, 54, +241, 92, 11, 84,194,210,168, 95,241, 94, 90, 94, 87,217, 9,147,101, 38,151,238, 78,113, 49, 65,207, 62, 1,129,104,135,168,137, + 88,101, 8,182,212,199,182, 8,123,114, 74, 72,161, 71,232, 26,164,182,135, 77, 84,112, 26, 69,241,139,154,227, 50, 13, 11,149, + 42,231,224,140, 97,210,155, 46,226, 30, 99,104, 52,152,250,128,174,233,216,254,100,145,161, 97,108,133,106,186, 4,227, 43,134, +200, 80, 74, 33,165,200, 25,248,201, 20,182,158, 64, 57, 15, 88, 7, 87, 79,224, 38, 83, 44,109,217,130,233,230, 77,168, 39, 19, +122,238, 51,117,153,237,172,129, 85, 6,134,121,218, 86,101,232,156, 10, 54, 86,105,141,164,193,142,135, 0,101,128,182, 91,135, +117,154,227, 42,105, 28, 29,216,149,208,245, 13, 21, 52,177, 67, 74, 28,229,105,128,156, 3, 66,236,112,252,196, 49,108, 89, 94, +166,221,249,136,220, 39,187, 80, 24,250,203,123,143,205,155,151,113,215,221,119, 83,246, 56, 51, 19,110,188,225, 70, 60,249,228, + 62,252,233,231,238,198,255,254,214,183,177,247,166,155,160,148,133, 82, 4, 75, 90, 57,187,130, 63,189,235,110,124,245,235,127, +134, 91,110,222, 91,244, 63,194, 76,184,252,109,151,225,208,161, 67,136,169, 71,211,172,163,239, 27,172,173,173,224,192,179,207, +226,109,151, 93, 10, 1,182,158, 56,126, 28,119,221,125, 15,246, 63,189, 31, 55,223,120, 3,238,184,253, 22, 60,185,239, 41,124, +233, 43, 95,195, 55,191,253,109,124,244,163,119,148,103,164,174,107,172,174,207,240,249, 47,126, 9,223,252,206,125,184,229,230, +155,144,144, 48,107,214,145, 56,209, 79,166,111,251,159,126, 22,239,190,246, 26,192, 26, 84,211, 9,174,189,246, 93,120,238,224, +225,242,249,187,243,195,119, 96,125,189,193, 61, 95,249, 26,238,253, 31, 95,199,108,214,224,227,191,118, 39,158,125,238, 5, 92, +181,123, 7, 98, 55,195,150,229, 45, 48,218,224,196,137,147,104, 57,199, 60,180, 13, 62,180,247, 38, 60,245,204, 1,124,245,207, +191,133, 71,126,248,215,184,253,230, 27,145, 98,164, 93,112,223, 33,181, 29, 92, 86,208,164,217, 67,202, 1, 90, 37, 24,157,161, + 84,196,139,135, 15, 97,215,206, 43,144, 16,112,217,165,219,161,141,194,210,196, 99,235,197, 23,227,196,201,147,120,254,133, 23, +176, 99,199,149, 8,161,199,101,151,110,135,209, 26,155,183,108,198,101,219,183,225,248,137, 19, 56,240,220, 1, 92,241, 75,111, +131,175, 60,174,188,242, 10, 24, 99,177,229,130,183,226,146,173, 23,227,228,201, 83,188,102,161,162,246, 29,239,120, 7,158, 61, +240, 28, 62,119,247, 23,240,131, 31,252, 8,111,191,106, 15, 66,228, 73, 52,128,212,119,136,125, 64, 93, 85, 88, 59,187,142, 47, +126,249,235,248, 95,223,190, 15,183,222,188, 23,214, 58,220,115,239,151,144,115,198,231,191,248,101,188,255, 87,223,131,159,236, +219,143,123,191,242, 13,252,249,119,238,195,135,111,191, 13,198, 16,143, 67, 41,160,154, 76,144,149, 0,158, 52, 62,124,199,237, +152, 53, 51,252,241, 93,159,195,127,255,227, 63,193,234,218, 42, 62,250,145, 59,144, 19,241, 16,150, 55, 47,227,158, 47,124, 17, +183,222,178, 23,251,159,222,143, 63,185,235, 46,156, 60,245,127, 70,235,108,131, 4, 13, 55,169, 81, 89, 79,251,116,163, 73,172, + 26, 99,225,185, 20,232,152,175,160,173,135, 50, 22, 41,211,164,196, 14, 4,141, 1,252, 63,127, 8,143, 47,141, 34,248, 26,117, +234,227,127, 38, 9, 89, 4, 83,233, 17, 69, 12,150, 68,188, 96, 17,218,126, 68,219,202,100, 63,201,172, 16,151, 49,170,236, 27, +141, 45,241,152, 64,134,171,104,199, 17,250,192,233, 74,156,188, 36, 20,160, 12,116,161, 43, 16, 16,197,133, 0,197,144, 54, 3, +194, 83,147,189, 66, 32,248, 66,174, 27, 44, 86,128,117, 21, 97, 17, 89,149, 29, 11,247, 88,109,152, 8, 8, 5,148,196, 16, 25, +117,237,208,245,205,112,233,136,234,145,255,251,158,211,123,196,119,184,240, 66,102, 82, 29, 70, 26,130, 24, 34,178, 38,144, 77, +138,233,188,118,182,249, 9,203, 60,140, 39, 45,200, 38,167,204,247,174, 36,176,137, 39,147, 70,242,185, 80,226, 60,227, 9, 99, + 14,112,222,242,127, 23, 10, 37,139, 68, 68,241,188, 24,215,115, 52, 4,162,154,159, 91, 13,200, 30, 49, 55, 27,109,114,153,129, + 28, 36, 78,202, 67, 2, 18,191,127, 42, 15,239, 43, 93,230,185,224, 92,181, 54, 37, 69, 48,100,178, 9,202,126,117,182,122,182, + 4,193,116,163, 52,170, 46,118, 76, 85, 76, 5,177, 58,168,217, 85, 41,184,168, 88, 76, 44, 48,213, 69, 40, 58, 88,248, 12, 39, + 63,129, 45, 64, 96,193,169, 20, 7, 64,232, 35,140,175,248, 67, 75, 10, 92,194,103,170, 98, 47, 19,193,141, 50, 6, 94,203,103, +161, 47,171, 7,195,202,238, 28, 19,218,166, 41,241,198,145, 69,151, 33, 4, 42, 4, 52,101,132,183, 61, 5,222,200,190, 48,178, +200,179,158,110, 98,161, 40, 91, 2,115, 70,219,206,120, 39, 40,170,246,140,118,214,161,239, 90, 26,225,242,104,177, 98, 29,141, +210, 26,179,181,181,146, 47,144, 2,135,120,244, 25,109,163,138,167,189, 8,241,184,235, 88,159,173, 67, 3,232, 83,195, 1, 51, +170,160,135, 5,131, 76,252,108, 86,251, 91, 82,165,139,222, 68,210,220,134,103, 93,166,115, 61, 3,125, 52,246,237,219,207,110, +135, 84,252,229, 15, 60,240,125, 92,121,229, 21,184,241,134, 27,113,249,219, 46, 43, 52, 64,100, 42, 22,159,222,255, 44,170,170, +194,217,179, 43,168,171, 10,211, 41,101, 86,200,129, 44, 1, 40, 58, 37,216,202, 22, 72,140,245,244,185,104, 27,178, 9, 62,123, +224,121, 64, 41, 60,253,204, 1,220,126,235,173, 80, 74, 97,251,214,109,229,204,115,206,225,242,203, 47,199,169,211,111, 0, 0, +158, 63,120, 8,198, 58, 28, 59,113, 2, 85, 69, 14, 20, 91,240,206,177,156, 93,111,188,249,143, 80, 74,227,130,229,101,102,134, + 0,199, 94,123,165,188,102,187,119,237,196,221, 95,248, 18, 86, 87,206,192, 26,131,199, 30,251,107,252,209,103, 63,131, 7, 31, +126, 4,119,126,248, 14,108,222,188,140, 61,187,118,226,249, 23, 94, 64,229, 43,100, 94,113,108,222,188,140, 61,123,118, 99,251, +165,219,203,117, 97,141,193,150,165, 9,142,159,249,121,177,147, 93,125,205,213,184,225,250, 15, 0, 0, 94,123,253,117,124,247, +123,247, 83,113, 13,224,208,161, 67,216,123,211, 94,104,165,176,188,188, 25, 7, 14, 28,192,214,109, 91,113,209,133,151,224,208, +193, 23,113,248,197,151,112,243, 77, 55,161,239, 58,108, 90, 90,194,179,207, 29,192,165,219,182,227,162,139, 46,196,193,131, 7, +113,232,197,131,184,121,239, 94,204, 86,207, 98, 58,153,226,185,231,159,199,214, 75, 46,198, 37,151, 92,140,195,175,188, 12, 87, +121,244, 45,233, 87, 94,125,245, 85,252,230, 39, 63,129,109, 91,183,226,232,209,163,120,236,241,199,137,183,192,175,191,202, 25, +154, 33, 63, 79,238,219,135,190,235,113,236,117, 74, 8, 4, 50, 42,231, 10, 49,116,207,238,221,216,190,109,123, 33,201,121,231, +112,201,133, 23,225,212,201, 83,101,213,232,172, 97,143,120,198, 85,123,246,224,115,247,220, 11,235, 42,100, 21,241,183,143, 63, +129,255,240, 71,159,197,131, 15, 61, 10,173, 53,254,225, 31,126,130,148, 51,118,238,220,129,239, 63,242, 40,170,201, 38,252,244, +208, 75,248,117, 86,146,197, 24,209,207,214, 80, 85, 53,173, 52,196, 30,103, 6,207,125,230,201, 30,229,103, 4,238,224, 3,122, +150,163, 89,242, 40, 83,183,144,121,148, 44, 22,131,177, 90,122,124, 32,203, 67, 60, 62,184,199,130,167,177,218, 25,137,187, 73, + 77,120, 77, 93, 4, 39, 29,119,245,169, 68, 44,138,109, 12, 89, 49,207,118,128,111, 56,103,203,232,175,239, 3,152, 98, 80, 20, +235,154,173,117, 5,251, 42, 99,124, 70, 77,134, 28,120, 4,136,162,154, 12,125, 40,157,105,217,199,142,212,221, 41,145, 82, 56, +132, 8,228,190,216, 23, 40, 98,185, 31, 40,100, 25,136, 32, 81,157,115, 21,214,103,107, 12, 77, 80, 67, 80, 3,163, 27, 67, 8, + 32,158, 78, 42,138,213, 52,166,101,205, 9,217, 98, 74, 27,194, 1,148,210, 8, 41, 12, 86,144, 81,183, 62,252, 25,117,142, 96, + 78,207,165, 47,157,163, 62,215,138, 51,145,133, 87,221, 23, 26,222,240,223,170,193, 82,148,135, 76,238, 12,226,139, 91,199,248, + 83,171,145,146, 62,167,120, 88,180,255, 23,200,143,240,170, 69, 25,170,202,106, 34, 3,188,203, 83, 60, 86,202, 26, 27, 56,245, +162, 72,103, 75, 41,211,160,116,185,196, 99, 26,168, 89, 57,101, 86, 26,107,234,158, 71,185,208, 41, 71,116, 44,118, 73, 41,163, +207,116, 48,106, 14,119, 16,224,136,172, 2,250,209,106,166,120,241,249,235,143,197,118, 90,145,110,193,232, 1,242, 68,185, 7, + 20,189, 75,117,169, 8,137,104, 60, 78,212, 53, 33, 43,210,159, 55, 92, 12,128,223,171, 34,218,169, 42, 82,189,178, 93, 38,167, +132, 54, 72, 58, 29,169,216,145, 51, 34,248,210, 1,225, 62,219,190, 37,209, 85,160,117,153,172,169, 50, 43,136,149,162,201, 72, +232, 5,254,130, 34, 90,108,243,106,217,115,139, 16, 52,247, 1, 74, 73, 82, 23,189,111, 52,101,137,252, 62,164,226,152, 17,236, +172,214, 44, 50, 10,125, 17, 19, 81,250, 89, 42,175,163, 88, 11, 69, 24,168, 52, 29,104, 89,130, 95, 56, 19, 97,251,246,109,120, +227,244,233, 57,194,101,134,178,154,237, 95,117,209,131,172,172,172, 20,129,162, 72, 41,126,247,119,126, 27, 57,103, 60,245,244, + 51,120,238,167,135,176,123,247, 46,108,190,224, 34,134,223,208,103,175,237,154,242,181,155,217,172,188,230, 49, 37, 28, 59,126, + 2,187,118,237,194,243, 47,188, 64,192, 30,190,120,175,218,185, 3,199,142, 31, 71, 61, 37, 45,132,175, 43,248,105,205, 84, 73, +218,215,126,249,171,223, 64, 74, 25, 49, 71, 44, 47,111,198,155,111,254,188, 8, 82, 99, 8,188,151,118,197,155,156,145,233,117, +234,122, 58,220,121,186,183,127,255,211,248, 39,239,190, 22, 49, 70, 60,181,255, 25, 0,150,187, 83,250, 29,214, 87, 87,224,140, +102, 11, 22,157,187,125,219,225,240, 75, 47,227,109,151, 95,142, 61,123,118,227,145, 71, 30, 37, 94, 0, 39,161,173,172,252, 28, + 74, 41,124,245,235,127,134,164, 20,102,235,107,216,178,105, 9,235,107,235,168,152,111,146,145,113,224,185,231,241,204, 51, 79, +163,235,154, 34,254, 75,153,130,190,218,190,199,202,153, 51,216,185,115, 23, 78,159,126, 3, 22, 16,133,108, 0, 0, 30, 13, 73, + 68, 65, 84,175,190,250, 26,246,236,217,131,139, 47,186, 24,247,127,247, 1,156, 57,115, 6,103,206,156,193,238, 93,187,240,179, +211,167,113,244,232, 81,236,217,181, 7, 91,183,109,197, 3, 15, 62,136,182,233,113,118,101, 5,123,246,236,198, 27,255,248, 6, +142, 30,125, 21,187,118,237,196,214,109, 91,241,200,163, 63, 36,246, 2,187, 19,142,159, 56,142, 47,125,229,171,184,236,178, 75, +113,205,213, 87,227,125,239,123, 47,190,246,141,255, 89, 44,193, 98, 27, 43,206, 19, 61, 36,109,182,179, 25,140,172,121,120,141, +122,207,189, 95,100,129,108,192, 91,222,242, 22,172,156, 93, 65,148,207,125,206,232, 67,132,182, 14,155,150,170, 98, 47,116,181, +129,101, 85,191,130, 66, 53, 89, 2, 0,172, 53, 13,217, 53,181,134,210, 14,198,219,241,183, 71,229, 61,101,128,180,179,193,174, +205,246, 82,113,102,196,152, 73,136,110,249,172,230, 40,104,128,116, 44, 90,130,215,125, 85, 67, 91, 83,226, 34, 49,202,211,157, +223,121, 47,234,244,198, 48,150,177,160, 76, 58,206, 20, 3, 98,232,208, 54, 77,185,240,144, 56,228, 62, 49,149,141, 45,109, 41, +210, 62, 84, 20,197, 74, 41,116, 29, 85, 66,129,253,151, 41, 14,147, 3, 10,224, 8,165,155, 42,169, 66, 44,172, 51,156,255, 27, +121,116,154,216,170, 65,128,131, 88,114,142, 5,171, 74,251,193, 30, 49, 13,137,112,137,131, 25,100,223, 46, 99,255, 1,132,162, +120,191, 69,118, 30, 73, 29,202,194,207,143,113, 3,182,181, 76, 42, 70,235,139,141,123, 86,158,138,240,107,148, 35,241,138, 37, +155, 89,104,116,243,163,235,113,160,205,248, 34,157,199,147,206,255, 61,121, 98, 67,161,205, 9, 29, 79,162, 9, 41,255,189, 66, + 93, 87,152, 78,166,152, 76,234,145, 63,219, 65, 43,203,104,205,204,124,232, 52,183,194,209,131,254,162,120,245,243, 0,174, 73, + 35,155, 98,137, 68, 82,228,217,204,137,169,116, 6, 33, 38, 32, 41, 32, 41,196, 62,193, 40,139,190, 13,148,154, 4, 3, 40,138, +132,165,191,200, 90, 98,121,119,236,157,135,175, 60,124, 93,195,122, 42, 46,189,167, 46,213, 58, 87,170,113,177,137, 41,222, 91, +149, 0, 6,246, 2,107, 53,164,121, 73,225, 38,129, 45,218, 88, 0,102, 4, 51,225,247, 49, 43, 40,101,144,179,130,209, 14,149, +175, 11,186,152,186, 76,202,138,118,206,163,174,107, 76,167,155,225,171, 41,124, 61, 65, 85,215, 88,218,188, 25,213,116, 2,227, + 45,136,244,158, 81, 47, 45, 49,238,216,161,102,221,138, 20, 75,211,233,148,136,109,145, 58,104, 13, 0, 42,161,235, 26,204,154, + 53, 14, 14,138, 8,221, 58,102,107,103,209, 53, 13, 66,215,161,107, 86,209,183,107, 64,166,194, 57,132,128,156,104, 74, 66,225, + 39,228,247,119, 94, 96, 41, 28,109,218, 53,228,112,209, 52,122,205, 57,194, 58,205,203, 16,177,108,229, 18, 88,100, 13,145, 36, + 5,111,106,140, 45, 66, 64,234,122, 2,114,236, 73, 12,169, 51,127,205,204,142, 22, 74,165,146, 52, 68,173, 13, 38,147, 26, 31, +254,208, 29,120,106,255, 83,200, 57, 99, 54,155,225,162, 11, 47,130,181, 22,215,190,235,154, 18,117,155,227,184,144, 53,168,166, +203, 0,128,229, 11, 47,196,206, 29, 87,226,133, 23, 15,227,181,227, 39,177,117,219, 86,158,130,116, 36, 24,229, 51,192,251,170, + 20, 31,206,123, 98, 41, 88, 11,235, 29, 30,255,241, 19,248,208,237,183,226,210,109,219,224,141,133,211, 6,111,223,189, 27,119, +220,122, 43, 30,255,187, 39,136,107, 0,224,170, 61,187,113,230,204, 25,236,220,113, 37, 94, 63,118, 12, 71, 95,123, 13,191,122, +221,123, 16,115,194, 91, 46,184, 0,159,250,221,223,193,100, 82,147,239, 30, 64,223, 54,104,214, 86,202,153,151, 50,229,176, 55, +179,134,114, 21, 88, 99, 98,180,193,225, 35, 71,240,246,183, 95,133,107,174,185, 26, 47,191,250, 26, 28,107, 68,172,181,120,229, +149, 35,184,237,150, 91,139, 39,250,134,235, 63,136, 23, 95,122, 25, 70,107, 60,247,211, 23,240, 43,215, 94, 13,231, 28,222,252, +249,153, 18, 53, 76, 32, 45,224,149, 35, 71,112,245, 47,191, 3,171, 43,103,176,105,105, 9,159,250,151,255, 2,109, 75,218, 40, + 9,184,162, 51,115,120,150,115,210,176,182,134,179, 21, 98,159,113,240,224,139,184,121,239, 94, 28, 59,126, 2, 39, 79,254, 12, + 87,252,210, 21, 76, 24,237,224,235, 10, 7, 15, 31,198,222,189,123,241,250,137,147,248,217, 27,111, 98,199,206, 29,112,206, 97, +101,117, 13,202, 90,188,116,244, 40,110,191,237,118, 28, 63,117, 10, 63, 59,125, 26, 59,118, 92, 73, 63,239,202,207, 75,146,104, +206, 9, 55,221,248, 65,188,243,157, 87,225,149,163, 47,227, 7, 63,250, 33, 46,185,228, 98,162, 89,140, 10, 67, 1,208, 36,104, +248,122, 90, 94, 39,101,136, 36, 71, 19, 19,139, 35,175, 28,193,123,175,187, 14, 10, 10,111,189,240, 34,252,254,239,125, 10,203, +111,189, 24, 75,203, 91,248,207, 51, 53, 46,103,132,152,241,210, 43, 71,176,247,134,235, 41,135,160,114,184,254,250,247,226,197, +151, 95,166,192, 23, 0,214, 87,240,213, 4,199, 78,156,196, 59,223,177, 7, 33, 4,252,202,187,174, 30, 88, 34,160,115,198, 88, +143,186, 94,194,242,230, 11, 80,213, 83, 24, 95, 97,178,105, 25,213,100, 51,170,201,166, 18,241, 29, 2,223,209,153,214, 85,125, + 31, 96, 83,140, 80, 60,146, 42, 73, 78,163,136,190,121,129,216,162,191, 95, 52,226, 29, 95,236,227,206, 94,170,103,169,212, 23, +117,115, 41, 37,164, 46,157, 87, 57, 61,223,241, 73,165, 58,102,145,207,175, 15,198, 63, 87,226,240,134, 50, 30,231,200, 60,249, + 75,126, 94,242, 50,115, 40,139, 49,101,172, 43, 68, 61,241,184,210, 5,168,203, 30, 81, 60,172,146,206,165, 88, 65, 57, 22,182, +157,207,126, 54,111, 1,179,115, 22, 66, 1,120,232, 57,173,195,216,137, 48, 30, 7,142, 95,135, 49, 77,238, 28,175,120, 33,149, + 37,100,182,100,197,148,144,212,200,194,196, 30, 74,161,199, 9,217,140, 2,146, 76, 81,104,230, 12,152,202,195, 40, 64,103, 83, +246,225, 80,169,140,242,233, 34,228,176, 31, 69,126, 76, 98,102,115, 26, 87, 70,233, 78,245, 40, 69,105, 90, 87, 20,253,105, 52, +175,113,128,202, 84, 37,195,216,130,223,211,132,209, 37, 36,160,146, 76, 96, 17,153, 36,101,217,115,147, 0, 78, 62, 40, 57, 39, +164, 17,247, 91,241, 78, 89, 27,203,226, 49,234, 92,141,115,144,221, 75, 86, 25,206,121,194, 69,182, 29,144, 2,121,148,121, 66, +147,152,102,151, 25,212, 98,173, 69, 31, 3,150,182,108,198,218,234, 26,209, 14,235, 26,206,215, 5, 79,171,148, 65, 61,157, 34, +165, 72, 25,219,124,128, 27, 70,121,246,103, 87, 75,176, 11, 82, 44, 83,139,174, 35,187,143,116,213, 98,149, 36, 91, 84, 46, 30, +252,242,140,240, 51,170,180,130,206,166, 76, 98,136,169, 78, 2, 68, 99, 12,186, 48,227, 52,169,140,166,105,152,190,167, 57,195, + 71, 38, 61, 28,122,196,232, 87,153, 76,248,170, 98,213, 47,157, 49,145, 49,177,170,120,252, 19, 5, 85, 8,238,212, 90, 68, 94, +181, 72,193, 27, 56,119, 90, 43,148,238,253,223,125,230,179,229, 17,222,247,212, 62,252,228,201, 39,161,148,194, 95, 61,246, 24, +254,213,167,126, 15,179,166,193,161, 67, 47, 98,125,125,157, 64, 37,142, 9,122, 8,232,250,128,212,205,144, 1,156,121,243, 52, + 30,127,226, 9,124,228,182, 91,112,195,251,223,139, 35,175,190,134,147,167, 78,225, 3,239,187, 14, 63,126,226,239, 25, 51,219, +111, 96, 89,164, 20,145, 17, 8, 84, 3,224,165,151, 14,225, 91,223,106,113,219,173,183, 96,203,150, 45,128,162,137,192,125,223, +123, 16,175, 31, 59, 70,140, 5, 0,219,182,109,197,191,255,183,159, 70, 8, 17,223,127,228, 17,172,158, 93,197,111,124,236, 78, +188,251, 93,215, 32,165,132, 7, 31,122, 24,179,217,140, 96, 36, 0,180, 33,238,130, 8,153,233, 61,113, 37,152,168,170, 41,117, +208, 86, 53,214,103, 13,142, 29, 63, 1,133,140,211, 39,142,151,201, 68, 8, 1, 15, 60,248, 61,220,249,209,143,226, 15, 63,243, +111,160,160,240,250,177,215,241,208,195, 15,161,107,214,112,248,208, 79,241,137,143,127, 12, 63,254,187,191, 47,201,117, 85, 85, + 49, 72, 40,226,251, 15,255, 5, 62,249,235,159,160,226, 35, 70,124,255,161,135, 1,171,161, 66, 66,219,117, 5,107, 92, 77,168, + 57, 20, 15,190,181, 22, 25, 17, 46, 37, 28, 62,122, 4, 31,249,200, 29,184,255,190,239,146, 69, 49, 37, 28,121,229, 40, 91,211, +128, 67, 63, 61,136,143,124,232,118,220,255,192,119, 49,155,173, 35,231,140, 35, 71, 95,229,198, 15, 56,112,224, 57,220,182,119, + 47,190,125,223,203,180, 74, 77, 25, 71,142, 30, 45, 66,216,207,124,250, 95,227,174,187, 63,143,159,236,219,135,127,246, 79,127, + 11,239,127,223,251,129,156,241,208,195,143,150, 9,174,240, 72,154,142, 70,241,117, 93, 99,214, 52,224,254,164,172, 76, 94,125, +237,117,252,225, 31,252, 1, 30,252,139,135,112,195,245, 31,192,117,215,189, 7, 49, 69, 60,250,163,191, 65, 76, 28,127, 13, 96, +203, 91, 47, 2, 0,124,250,183, 62,137,111,124,243, 59,248,225, 99,127,131,219,110,190, 17,191,255,207,127,187,172, 33, 30,126, +244,209,146,180,137,152,208,182, 61, 30,254,203,191,194,111,254,198,199,113,253,251,222,139,195, 47,191, 52, 36, 10, 26, 13,235, +201, 21,144,186,128, 62, 4, 88,231,208, 52, 13,250,212, 82, 67,155, 18,159,153, 9, 10,182,184,175, 16,105, 98,165,124, 53,205, + 89,241,232,141,243,157, 69,113,187,200,115,124,190,255,141,225, 48,243,196,178,249,127, 63,190,108,230, 71,206,231,155, 0,204, +143,139,207, 39,194, 90,100,153,218,208,145, 74,132,166, 26,178,137,101,239, 46, 49,157,227,240, 1,171, 76,129,136, 8, 64, 65, +118,188,195,174, 83, 23, 32,142,194,144,135,190,104,244, 61,238,156,101,143,188, 8,161, 58, 63, 29,145, 63, 51,223,221,207, 7, +134,204,127,159,249,255,102, 92, 56,205,191, 94,218,144,224, 43,165,200,158,239,180,129, 70, 39,151, 3,180, 46, 46, 1, 85, 66, +124, 40,232,129, 16,135,105,128, 95, 48,233, 79,118,206, 68, 11,163, 49,168, 1,177,157, 99,236, 1,149,153, 13,173, 74,193, 52, + 38,209,141,127, 79, 81, 93, 67, 37,190, 60,194, 40,129, 13, 8, 49,192,217, 97,204, 59,126,109, 1, 5,163, 28, 93, 26,177,227, + 85, 67, 26,101, 4,112, 20, 99, 73, 85, 35,111,108,206,212,229, 2, 25,206,212,252,115,244, 37,165,144, 9, 55,152, 78,166,108, +117,227,233,144,228, 70, 51,218,216, 79,106,100, 40,120, 95,205, 61,159, 50,198, 15,140,105, 94,163, 34, 50, 37,228, 65, 46, 65, +227,248,144, 10,222, 56,241,238, 90,129,248,237, 80, 3, 46,146,194,114, 34,107, 5,200, 38, 36,170,120,121, 77, 41, 67,221, 48, +252, 39, 12,185,242, 60,242, 87,140,243, 20,139,151,236,242, 52,231, 93, 43,101,202, 20,138, 64, 47,118,136, 83, 29, 37, 8,230, +148, 40, 30, 51,210,106, 39, 15, 73,180, 35,184,205,128,109, 53,198, 64,201, 80, 38, 69,206,165,103, 91, 96,249, 12, 83, 0,137, + 54,102,160, 91,234,204, 7,161, 71, 53,153,208, 88, 54,210,250,193,185,138, 5, 83, 29,148,202, 92,180,107,254,153,153,197, 62, +138, 79,238, 67,128,183, 14, 57, 68,116, 93, 71,170,228, 24,161,116, 46,122, 7,173,137,154,105,180,167,213,134,179,236,211, 15, +108,191, 29, 26,143,148, 51,254,243,127,250,143,248, 47,255,245,191, 21, 26, 33, 56, 84, 71,176,162,134, 51, 15,180, 38,113,111, + 98,116, 41,137,153, 59, 24,231,225,235, 9, 77,124,140, 70,219,176,206,129,121, 17, 52, 57,140,232,214,214, 96,157,131,171, 38, +180,223,205, 25,179,213,179, 0, 59, 41,250,158,152,234,214,146,107, 39,132, 14,222,209,115,221, 52, 51,118,221, 48,208,199,123, +244, 41,162,170, 38,165,136,108,155,117,162, 58,130, 66, 72,172,182,156,131,174,104,213,169, 73,149, 72, 43,178,142, 38, 58,108, + 79,149,175, 91,213, 53,250,190,167,164, 62, 75,238, 32,103, 93, 9,123,177, 12, 23,235,218,174,232, 50,228,108, 9,161,131,210, + 10,222,214,229,156,147,179, 20,165, 96,103,107,167,202,216,180,188, 92,220, 23,179,179,103, 97, 76, 42, 69, 98, 76, 17,206, 79, +138, 71,222, 24,154,240,117, 93,139,102,245, 44, 89,170, 57, 66,181, 90,218, 84,210,101,133, 47, 31, 66, 40,133,111,142, 17,177, +107,105,173,232, 44, 28,127,182,148,214,101, 82,163,181,198, 53,191,252, 78,156, 60,121, 10, 39, 79,157,194,238, 29, 87,226,134, + 15, 94,143, 47,220,251, 5, 30,251,187, 33, 31,193,209, 51,165, 51,208,181, 45,140,167, 56, 89,209, 4,228,156,160, 61, 77,171, +228, 62,179,196,124,167, 14,215,213,245, 6, 82,214,162, 75,113, 67, 30,183,214, 11, 59,247,249,238,113, 17,221,108,124, 89, 47, + 26, 23,159,239,207, 46, 82,120,207,119,186, 24,209,149, 74,231, 63,242,243,101,174,200,114, 76,163,209, 41, 10,239, 93, 68, 73, + 69,133, 61,242,125, 11,250, 81,126,175, 18,229,167,135,159,193, 57,183, 33, 30,181, 60,108,163,215,100,124, 73,207, 79, 52, 22, + 41,194,231, 47,254,249,241,125,129,183,140, 87, 15, 11,246,235,139, 92, 13,243,218, 8,173, 52, 18,134, 98, 99, 3, 67, 62, 68, + 40,157, 74,103, 87,220, 7, 69,148,151, 75,104,133,176,198,181,102, 1, 93,228,152, 54, 30,217,246, 37, 16, 69, 23,112,138,175, + 42,116,125, 15,171, 53,192,158,120,203, 59,168,148,135,140,225,217,250, 58,172,115,232, 67, 71,190,112,182,216, 73, 97, 69,228, + 50, 71,123, 91,165,145, 64,223,203, 90, 7,149, 13,122, 70, 44, 26,103,161,216, 31, 28, 56,184, 68, 43, 77,193, 34, 37, 62,151, +188,203, 70,107,142,151,101,225, 23,239,146, 5, 55, 27, 35, 37, 48,137, 86, 34,167, 4,239, 61,251,152,137,218,215,172,173,211, +197,219,211, 42,202,121,207,251,236,196,236,253,192,154, 2, 77,137,105, 70,145,170,157,243, 9,250,190,163,120, 81, 14,187, 48, + 28,244, 32,170,216, 62,211,161,109, 28,145,221, 98, 8,240,236,248,136, 35,144, 10, 69, 97, 86,100,209,203, 9,245,116, 9, 90, + 91,244,125,203,155, 15, 3,199, 69, 68,219,208,238,216,122,218,175, 27, 95, 13,151, 46, 59, 12, 28,167,173,137,218, 95,108,145, +178, 19, 22,199,137,171, 43,100, 85,163,107, 26,166,252,177, 54,162, 8,126, 4, 25,154,201,175,204, 9,110, 90,107,244, 93, 42, +169,120,214, 57,186,132, 69, 15, 33,148, 56,173, 96,149, 41,197,141,100,143, 67,152,217, 37, 65,144,247,143,134, 57, 21, 92,224, + 4,134, 10, 73,128, 70,207, 73,116,211,233,148,158, 23, 22,137,138, 87, 92,196,147, 2,200, 81,161,163, 29,123,136,176, 74,163, +226, 9,133, 49,134,158,105, 46,223,164,200, 82, 60, 26,215,220, 84,136, 67,161,231,140,238, 20,169,120,101,133, 23, 21,106,129, +220, 25,180, 18,171, 11, 94,183,107, 37, 5, 46,193,250,138, 96, 65,150,194,100, 36, 34,216, 56,135,164, 20,150,150, 47, 32,202, +225,108, 70,207,117, 93, 35, 6, 16,248,166,174, 57,132,171, 43,218,162,156, 18,214,207,174, 48,221,143, 46,176,186,158, 80,145, +212,118, 72,138, 50,236, 83, 86,101, 37,229, 61, 77, 26,218,245,158,226, 72,179,218,208,100, 52, 77, 83,166, 48, 73,129, 29, 39, +145, 4,213,214,210,180, 46, 4, 24,239,202, 20, 45,101, 90, 71,106, 22,122, 6,126,166,135,162,142, 26, 2, 33,193, 37, 46, 36, +214, 87, 86, 97,140,193,116,105,138, 96,135, 17,187, 76,169, 98,232,208,183, 13,156,175, 16,160,208,176, 88,215, 79,166, 8, 81, +158,113,141,220,119,164, 41,233, 91, 78, 34,164,115, 67,132,108, 49, 37, 88, 6, 58, 37,100,172,175,174,177, 11,140, 82,249, 68, +144,122,242,196,113,252,218,157, 31, 99,138, 97,192,253,223,189,191, 76,128, 36, 6, 92, 91,139, 28, 19,186,142,226,161,141,181, + 8, 93, 71, 33, 57,145,154, 41,107, 13, 66,215,193, 79,232,189, 72,125, 15,181,249,130, 45, 57,134,192, 85,196,136, 75, 45,153, +188,233,220,145,240,144, 78,181,248,210,152, 47, 6, 22,117,138,139, 4,120,243, 95, 67,118,176,243, 23,252,152,103, 62,190,220, +203,231,119,110, 74, 32, 62,217, 68, 82,229, 50,202, 45, 23,165, 8,238, 70,161,244, 37, 90,116, 4,214,145,160, 4, 81, 53, 40, + 6, 32,108, 76,112, 99,146, 82, 30, 10,157, 69, 93,183,236, 99, 82,206, 64, 60, 87,116, 56,223,221, 91, 70, 36,198, 64,197,200, +184,211, 30,139,237,198, 95, 99,254, 98, 95,244, 90,142,255,185, 20, 56,114,248, 45,130,195, 72, 88,141, 92, 38, 37,174, 86,186, +235,208,151, 75,222, 90, 74,101, 18,145, 96,140,131,167, 90,243, 5, 89, 87, 36, 44,204,204, 52, 54,138, 3,130,180, 96, 87,171, + 50,186,146,228,171,161, 35,164,223,175,235, 26, 6, 11, 57,104,208, 7,150, 50, 7,108, 33, 26,142,167, 69, 50, 77,177,149, 71, + 96,198, 58,210,128, 93,205, 41, 65, 89,170,248,189,245,220, 68,211,200, 89, 18,199,104,234, 78, 56, 88,227, 28,250, 24,209,207, + 26, 40,197,214, 57, 97,161, 71,234,162,164,121, 8, 33, 0,138,243,178, 37, 19, 59, 18, 49,169, 8,121,114, 38, 11, 30,175,130, + 68,159,225, 45, 51,239,189, 45,104,228,242, 94,135,110, 68, 37, 52,133,131, 29, 99,130,134, 41,104,212,196, 94, 94, 17, 97, 74, + 64, 6, 49,251, 21,172, 51,197,203, 30, 51,117,241,114, 96,181,124, 8, 91,134, 80,213, 85,141,174,153,145,232, 85,145,221, 82, +137,151,157,217,114,214,113,103,193,197, 52, 61, 47, 34, 30,141,163,207, 42, 23,209,114, 73,131,178,166,233,253,227,223, 53,105, +238, 28, 45, 81,229, 18, 96,148, 97,118, 64, 67,182, 84, 30, 75, 87,147, 37,158, 58,101,238,176, 19, 98,236,208,181,164, 40,174, +107, 10,184,105,154,117, 94, 65,104, 76,234, 9,115,209, 3,114, 12,152,205,214,233, 89, 12, 61, 77,144, 28,197,189,130,159,151, +152, 40,170, 53,165,140, 28,185, 56, 97,224,143,226,164, 65,138,247,165,108,119,205, 97, 76, 90, 32, 70,200,232, 2, 1,174,144, + 80,130,134, 36, 10,184,170, 42,186, 76,103,171,180, 90,226,208,147,192,180, 63,148,226, 89,179,194, 95, 81,162, 27,128,233,230, +101, 2, 87,133,128,212,145,247,185, 99,168,141,245,100,129, 50,218,148, 72, 91,173, 57,148, 40,131, 93, 14,148,148,233,189,135, +178, 28,122,162, 73, 68,157,186,128,138, 3,170,122,158, 10,133,142,184, 3, 80, 40, 84, 69,192,148,247, 50,201,100, 34,147,149, + 51,107,133,170,162,125,123,223, 19,167,128,238,137, 72,104, 84,165, 8, 47, 28, 35,103,228,168,194,212, 79, 49,150, 51, 83,162, + 86,165, 64,146, 98,123, 72, 47, 36,157,147,136, 92,135, 38, 10, 37, 97, 84,130, 94,148,166,100,190,204,233,143, 84, 76, 81,118, +130,117,158, 94,239,190,167,113, 63,191,183, 41, 15, 89, 0,196,101,233,209, 53, 51,190, 27, 60, 11,181, 25,150,163,108, 89,197, + 42, 77, 19, 69, 33,133,202,164, 79, 62,135, 36,128,235,139, 72,206,251,138, 0, 64, 18, 41,203,197,173,210, 6,221,172,225,179, +152, 25, 35,213,180,206, 50,106, 44,222,109, 25, 63,139, 56,107,129, 64,110,145, 61,105,190, 91, 94,148, 37,189,104,108, 63,159, + 41,125,190,238,252, 23, 49,215, 41,175, 93, 21, 33, 9, 32,135,106, 95,118,132,196,209, 29, 46,172,113,247, 59,207, 76,159,255, +126,202,104, 22,190,165, 50,118,203,153, 71,198,163,110, 36,179, 71, 26, 41, 47,252, 61, 54,252, 78,134,222, 48,149,206, 45,154, +230, 85,226,122, 84, 60,148,181,193,252,248,124,244,251,204, 23, 82,231,251, 25,210, 2, 84,237, 56,124,101,161,151,220,104,170, + 82,197, 35, 43,216,204, 17,215, 95,254,222,217,170, 64,129,132,221,174, 12,237,125,193,186, 5, 9, 10, 9, 61, 41,160,141, 49, +136,153,252,226,198, 56,228, 60,100, 35,199,148, 56,137, 75,149,113, 86,148,164, 61, 12, 97, 25,150,201, 87, 4, 31,145, 0, 14, +186,192, 60,119, 27,208, 10,129,129, 25,133,216,196,159, 5,203, 62,234,208, 52,176,188,167,214, 90,163,227,252,109, 65,203, 98, + 60, 13,138, 1,202,100,120,231,105,159,206, 33, 32,206,122, 74,176,226,139, 87,105,186,220,188,247,252,186, 42,168,172, 55,140, +196,193, 19, 0, 5, 58,204,140,166, 49, 97, 97, 92, 3, 60, 2, 22,141, 5, 79,159,120,226, 33,211, 13,100,197,236,238,106, 3, +154, 88, 10, 15, 25,157, 91,118,129,216,146,192, 70, 7, 66,215,247,197, 34,230,125,197,226,205,128,122,186, 9, 49,229,146,170, +102,249, 51,101,152, 41, 16, 82, 44, 84, 52,226, 50, 88, 62,108, 19, 66,232,225,188, 67, 61,153, 2,138, 94,247,241,207, 39, 83, + 5,235, 28, 52, 20, 17,249, 82,134,159, 76, 40,252, 73,216,217,214, 34,244,129,144,180,125, 83,118,199,244,185, 20,138,156,134, +182,194,181,231, 49,101,166,200,214,182,109,208, 54, 13,170,170, 66,211, 52,124, 72,114,227,208,243, 90,133,216,199,112,174,134, + 18,235, 28, 64, 48, 38,100,164,220,243,232,147,159,241, 20, 81,213, 53,156,243,232, 3,117, 82, 50,253,208,242, 28, 43, 32, 41, +193,251,242,243,217,181,116,177,205, 77, 67,251,208, 35,131,223,103,254, 30, 10, 84,244, 5,198,187, 26, 51,164, 77,146,157, 50, + 66,107, 46,166,140, 65,142, 67, 54,125,199,171, 19,207,194,176,196,231,153, 8,137, 21,175,171, 40,119,131,249, 8, 24, 50, 57, +100, 61,169, 37,227, 92, 41,104,111, 41,213,142, 73,105, 20,190,100, 11, 23, 95,107,141,208,245,208,236,150,113,206, 21,236,113, +202,122,195,138, 54,116, 13, 98,232, 4,128, 12,103, 45,250, 44,107, 32,201, 45, 36,119,163, 20,163, 98,235,204,194, 56,225,127, +166,248,124,210, 22, 5, 15, 92,156, 26, 25,229,107,142,102,209,133,220, 71,110,141,142,207, 66, 91,226,116, 49, 2,153,135, 16, +161, 6, 50, 76,249, 60, 1, 84, 56,177,238, 24, 9, 52, 69,152, 76, 54,209,103, 35,244,136,125,187, 33,175, 65,101,250,222, 60, + 85, 39,192, 21, 71,231, 10, 24, 44,178, 16,149,158, 5, 62,103, 57,205,209,249,106, 56, 51,234,165, 73, 22, 30,181,116, 93, 82, + 9,228, 13,249,223,139,249,226,243,137, 91,114, 17,204,239,216, 69,236,148, 70, 41, 93,133,118,166, 48,240,109,139,126, 41,151, +110, 54,143,166, 7, 98,163, 2,228, 65,213,128, 70,233,254,114,166,220,104,241,243,106, 30,195,201,158, 78, 58, 93, 98,172,235, +162,110, 46,126,119, 30,227, 10, 1, 78,176,140,242, 98, 67,169, 18,118,163,184,187,151, 48, 18, 73, 80, 42,169,110,163, 3,127, + 17, 50,149,186, 89, 83, 46, 28, 98, 78, 15,235,131,177, 53, 80,200,117,242,218,204, 23, 90, 37, 40,224, 92,177, 65,217,251,157, + 79,155,160,244, 72,204, 88, 94,147, 97,151, 90, 30,104, 25,169,178,109, 76,241,168,141, 87,176,163, 73, 65,166,180, 41, 75, 31, +118, 57,172, 40,121,142,212,219, 49, 16, 77,140, 82,226, 92, 73, 3, 76,125,160, 48, 9, 16,208,163,239, 41,179,217,123,143,166, +153,177, 13,146,126, 95, 25, 97,130,223, 31, 18,155, 40,166,150,245,165,243, 49, 44,248,146, 9,130,144,232,192, 2, 57,241,178, +107,163,145,122,242,115,183,236,189,166,192, 17,195,121,210, 29,151,132,156, 78, 22,169,195,140, 49,161,170,107,222, 87, 83, 39, + 97,188,229,139, 62, 21, 65,102, 98,225,151,209,134, 5,107,186, 20,137,200, 2,159, 96, 77,128,175, 54, 8,247,232, 57,212, 60, + 58, 23,130, 97,164,215,158, 15,133,148,169, 51, 86, 37,187,128, 38, 70,154, 45,114,178,167,155,212,180, 59,157, 53, 52,194,117, +206, 33, 35, 97,245,236, 10, 1, 95,152,210, 88, 88, 17,222, 1, 25,148, 95,221, 7,100, 62,180,164, 32,107, 24, 25, 90,108,169, +138,211,250,180,134,213,131,143, 94, 10, 49,202,193,142,156, 68, 71, 7, 94,230,140,135,201,116, 90,158,193,192, 22, 68, 17,228, +129, 39,104,194, 65,136,137,167, 68, 10, 35,218,157, 32,153, 13,180,178,128,202,232,218, 25, 77,121, 56,170, 54, 33,151,196, 60, + 41,114,170,122, 9, 93,223,114, 20,180,131,202,153,244, 30,124, 6,146, 34,217,242,186,169,160, 28, 16, 82,199, 89,217, 50,225, + 33,176, 78,224,156,235,192,171,164,166,153, 81,167, 23, 40,114, 85, 91,135,170,154, 32,133,158,133,145,185, 40,216,141,172,244, +248, 92, 81, 86,241,186,112,248,190,148, 8,169,144,114,228,105,142, 30,206,111, 74,196,130,113,154,223,119,118,196,240,197,161, +184, 11, 13,129,176,203, 96,198,134, 16, 8,105,106,201,175, 47,115,172, 19,235,102,140,177,204, 84, 31,200,147,213,116, 2, 40, + 10,251, 74, 33,240, 20,129,234,161,200,249,224,164,189,137,232, 57, 29, 78,206, 26, 63, 89, 42,137,121, 68,240,108, 8,102,147, +233,251,201,253, 96,140, 43,249,236, 57, 6, 32, 49, 0,202, 58, 62,215, 41, 65, 77,107,218,241,231, 76,120,216,156, 69,164, 59, +110, 90,116,209,176, 24, 71,221,180, 2,208,119,109,185,216,105, 29,146,138, 7,124,108,169,132, 2,172,162,192,153,164, 56,241, + 81,244, 42, 44,162, 38, 57, 58,231,156,112, 35,147, 99,162,132,195,174, 67,223,207, 54, 76,192,141,113,112, 85,189,209, 9,149, + 50,186,134,196,163, 90,113,152, 19, 55,139, 9, 84, 84,210,247, 1, 39,233,145,182, 75,185,202,103,233,252,100,132, 59,223,177, +142, 47,232,241, 78,120, 17, 41,108,200, 32,158,235, 0,141, 88,219,226,185, 17,166,154,198,216,153,127, 64,140,176,169, 89,243, + 45,159, 85,217, 93, 41,141, 18, 26, 64,135, 92, 42, 85,190,116, 3,101,175,206,181, 84,230,168, 82, 41, 84, 12,139,222,100,132, +169, 70, 23,122,185,252,242, 70, 29,129,208,199, 36,184, 68, 59,179, 33, 45, 46,199, 52, 4,125,140, 10,159,177,103,121,209,200, + 91,137,192,133,127,182,177,136,110,222,166,118, 62,178,223,184, 83, 55,227,145, 20, 79, 24, 18,219,227,140, 53,200, 50,130,226, +169,128,243, 53,197, 45,198,128, 16, 90, 89, 44, 48,172,164, 47, 83, 14,137,127, 53,134, 47, 9,229, 8, 18, 19,187, 33,121, 78, +200, 72,176,195, 56, 82, 58,126, 14,119, 80,150, 81,168,154, 10,189,174,167,241, 96,197,151,244,108, 54, 3, 52,231, 51,247,161, +224, 76, 37, 41,208,216,154,188,195,137, 46, 52,138,142,205, 60,186,235,135,160,149,241,164, 8,131, 74, 27, 90,141, 98,131,134, + 88, 80,195,187,172, 60, 42,110,164, 88,178,206, 34,230,126, 24,255, 97,128,217,140, 47, 30,235,106,158, 52,144, 50, 63,134, 88, +190,190, 98,128,143,202,150, 19,182, 90, 18, 8, 90,143,172, 6,219, 93,207, 93,135,115, 14,211,165, 37,172,173,173, 33,117, 68, + 82, 19,203,139,172,135,104,135,167,209,183, 36,228,146, 41,136,100,136, 71,102,206,203, 26,194,123,143, 12,193,221, 6,182,218, + 80, 17,102,180, 7, 44, 9,183,156,247,132, 80,230,207, 44, 20,144, 59, 66, 62,131,137,142, 2, 28,154,173,175,161,239, 90, 88, +107,177,105,249,173,180,166,136, 52, 70,157, 78,167,136, 41,160,109, 90,210, 6,104, 13,240,100, 77,229,140,102,157,216,238, 74, +103,102, 9, 12, 69,189,226, 46, 36, 33,194,123, 7, 36,179,113,162,149, 19, 41,218,181,166,112, 26,126,221, 19, 51, 1, 8,134, + 4,116,253,108,195,234,206,185, 26, 74, 27,226, 85,244,161, 8, 97,157,119,197,246,164, 56,188,202, 24,131,179,103,207,142,148, +253,204,207,103, 36,113, 8, 45,239,196, 29, 1, 67,178,240,219,201,186,215,117,237,128, 5,230,204,117, 18,148, 89, 56, 95, 19, +234, 55, 70, 40,147, 57, 54,215,151,162, 53,143, 82, 0,169,139, 30,108, 79,162, 82, 13,177, 35,203,166, 98, 84,169, 64,105, 18, +125, 77, 57,171, 73, 60,233,169, 3,207,153,108,183,252,185,144,201, 78,219,182, 52,130,150, 76,135, 81,154,157, 20,159,138,189, +217,198,145,152, 12, 28,127, 28, 2, 69,247,198,174,167, 51, 71,206, 24,126, 45,233,119, 36, 19, 89,236, 57,141,204, 89,216,106, +130,212,209, 10,140, 10,168,140, 28, 3,199, 41, 36,230, 68, 24,206, 88,208,108, 25,165, 85, 10, 77, 45, 21, 7, 41,169, 34,110, +150,115, 84,177, 10, 31, 60,154, 46,235, 46,214, 90, 24,163, 97,109, 69,124,128,216,177,248,141,166, 29, 61, 7,178,164, 60, 52, + 3,164,187,161,159,221, 51, 53, 51, 34,208,215,134, 45,194, 86, 73, 2, 20, 33, 43,121,217,251,226, 16,200, 41, 65,153,196, 83, + 12, 85,172,220,229,181, 23,156, 55,108, 57,131,202,164,152, 45,108, 89, 69,134, 89,233, 13,137,114,138, 98,202, 77, 22,165,246, + 34, 5,250,162,136,204,121, 97,219,188,130,123,252,239,138,112, 65, 94, 76,217,225,168, 97,199,166,173, 46, 86, 13,217,109, 23, +158,182,101,139, 77, 98,117, 42,168,235, 46,214,187,178, 91,209,188, 95,237,202,113,237, 57,122,111, 40, 86, 80,196, 67, 37,255, +156,243,180, 29,171, 64,199, 47,148,140,160, 5, 77, 74, 28,239, 92,162, 42,133,243,157, 82, 34, 65, 76, 23,248, 48, 75,191,144, +202,119,142,200,205, 12,187,120,185, 28,230,149,237, 27, 52,210,115,188,247,178, 39, 42, 58,135, 65,240,150, 71, 35, 38,137,244, +139,253,176,247,149,113,163, 60,112, 41, 69, 56,231,161, 45, 95, 2,163,172,123, 89, 59,196,126, 70,135, 61,239,204,100,156, 89, +136, 71, 25,176,218,151,221, 22,217,251, 72, 8, 35,135, 33, 21, 92,186,116, 74,196, 83,167,223,203, 57,135, 46, 52,163,106,159, +187, 57,126,180,140,113,133, 73, 64, 32,163, 6, 33,246,229,226,119, 60,158,151,125, 25, 51,231,120,183,173, 24,118, 18,160,160, +203,100, 74, 86, 4,162,208, 79,220,225, 10,211, 57,198,128, 12, 26,235,107,238,252,145, 83, 81,248,203, 37,172, 52,121, 69,115, +162,174,189,170,235,162, 24,150,247, 36,198,204, 49,193, 13, 50,200,215,171,149,229,162,201,113, 52,108, 40,249,244,148, 83, 30, + 81, 77,167,244,103,140,101, 98,152, 1, 56,103,185, 93, 91, 35,177, 28,175, 70,178,214,240,149, 71,219,180,136,125,132,243,180, +107, 38,220, 48,133,183, 88,239, 24,130, 83, 3,153,196, 63,221,250,250, 16,233,201,147,138,148, 51, 65, 49,152, 47, 17, 25,245, +218,117, 84,240,213,147, 26,117, 69, 74,102,205,235,147,213,149, 51,208, 76, 98, 12, 18,167,220,199,162,248, 46,207, 62, 40,110, + 88, 4, 79,212,193, 36,202,131, 7, 69, 25, 87,156,212, 22,186,192, 14,135, 76,200,222, 16, 56,129,145, 38, 32,190,170,208, 7, +238,206,178,134,119, 21,105, 38,242, 16,127, 44,205,139, 97,116,116, 8,137, 47,170,136, 73,181, 4, 91, 85,172, 76, 79,212,117, +114,186,158,179, 14,142,119,244, 89, 1, 33, 81, 87, 26,251,142,186, 49, 91,195,121,143,204,160,157,148,104,186, 66,123, 93,113, +222,100,190,152, 13,180, 37,208, 80, 63,155,113,231, 69,234,112,233,166,229,112,143, 41,194,213,117,129,143,228, 56, 20,157, 74, +110, 76,100, 24,237, 56,134, 56,241,216,190, 43, 36, 61, 85,216, 29,156, 35,238,253,224,238, 41,205,195,240,172,143,115,226,157, +119,200, 28, 63,171,120, 66, 4,129,254,176,198,133,132,168,129, 39, 47, 10,198,123,104, 67,209,167, 57,103,164,182,231, 41, 2, +101,154,103,254,126,202, 12,194,197, 13, 83, 76,118,169,128,207, 9,107, 61,186,102, 86,130,112, 32,166,196, 24, 97,205, 16,179, +108,189,101,119, 67, 40,162, 93,161, 59,106, 78,190,164,103, 54, 21,205,152, 26, 9,167,233, 92, 55,176, 85,205,122,170,192,141, +230,176, 58,148,148,209,208,245,229,191,111, 26,138,134,117,140,124, 14,146,187,192,147, 51,225,179,103, 94, 11,211, 57, 30, 54, +220,149,214,186,210,148, 42,177, 65,115,161, 70,110,156, 84,156, 70, 96,231,205, 56,112, 10,172,135,128, 2,148, 49, 38,207,171, +168, 23,141,139, 23, 93,238,227,127, 47,221,225,188,213, 42,241,131,156,211,224,133, 29, 72,101,140,237,228,125,104, 8,113,180, +239, 80,133, 2, 86, 10, 83, 53,108,254,199,100, 37,197, 30,107,249,231,153, 67, 41,232,193,205, 3,243,187,160, 21, 89,105,237, +253,134,241,181, 36, 94,149,157, 30,255, 92,169,140,224,198,123,106,197,187,171, 65,113, 46,187,244,255,159, 8,212,249,108,243, + 69, 25,232,227, 85, 3, 74,113,144,202,142,101, 28, 67, 43,191,183,182,166, 92, 76,146, 0,199, 67, 7,218,189, 56, 18, 51,209, + 5,235,217,243, 76, 33, 37,117, 85, 3, 48,133,131, 47,123,228,114,184, 84,228,211, 22,138,175, 54,190,100, 75,107, 46, 8,148, +206, 84,124, 37,178,194,104,230,169, 83,244,109, 44,140,121,122, 77,217,182,147, 3, 91,140, 98,233, 38, 3, 95,218,134, 87, 32, +224,241,186, 80,158,198,217,225,178,154, 41, 3, 50,165, 7, 49,161, 30, 10, 75,202, 91, 39,219, 28,161, 93, 21, 23,137, 28, 8, +163, 53, 66, 72,101,109,144, 68, 35, 33,107, 2,165,209,118, 29,234,233,132,108, 74, 33,192, 57, 75,133,152, 26,232,129, 49, 4, + 58,248,185,171,183,118,148,239,206, 7, 67,138, 17, 49,245, 69,236, 20, 35, 74, 49, 82,236, 77, 35,203, 99,202, 25,137, 17,145, +142,197, 97,126, 82,163,154, 76,208,206,102, 20,127,154, 50,218,166,225,236, 4,186,196,157,247,240,174, 98,219, 14,143, 37,219, +150, 53, 31,116, 57,118, 93, 71,232, 88,207, 43, 43, 99,128,152,105, 7,170,136, 34,168, 64, 2, 39,178, 49, 41,198,159, 58, 36, + 16,153, 81,240,206,190,158,194,123, 18, 63, 89,235, 16, 83, 96,210,162, 27, 5, 37, 89, 82,253, 51,175, 91,166, 93,179,217, 58, + 84, 38, 21, 63, 97,182, 52, 66,215,162,109, 8,197,234,234, 77, 5,251,170,149, 66, 26, 77, 52, 82,160,209,179,228,197, 3,170, +140,121,243,168,144,144,212,197,156, 51,170, 73, 13,235, 61,197,191,174, 55,133,177,159,115,134,245, 30,125, 34, 10,101,104,251, + 97,236,174,169,185,192, 56,145,113,164, 92, 23,204,171,171, 60,145, 1,155, 6,138,199,246,198,121,154, 42, 4,178,113, 25, 86, +228,147,178,191, 27, 86,127,124, 33,150, 4, 63, 13,196,204,200,107,100,210,111,241, 25, 43,151, 77,215,247,165,147, 31,226,145, + 89,124,170, 93, 25,131, 27, 75, 46,134,196,164,193, 28,184,225, 65,102, 42, 91, 68, 70,228, 28,136,138,167, 31, 25,137, 47, 67, + 42,126, 81, 20,249, 2, 11, 42,180,113,173,134, 25,152, 38,209, 23, 24,133,156, 82,228, 6,128, 59, 81,171,139, 46,130,166, 97, +142, 29, 20,164,223, 0, 39,158,229,190, 37,219, 27, 84,129,194,200,244, 66,192, 72, 18, 93,171, 53, 54, 64,195,138, 82,140,245, + 79, 68,134, 36, 69, 60,253,188,110,131,237, 18,252,239,101,133,129,209, 42,154,112,196,125, 57, 19,170,170, 70,232, 19,135, 53, +229,130,129,158, 39,124,202,100,192, 90, 83,238, 61,197,129, 93,101, 13, 48, 55,141,165, 78,157, 5,138, 74,196,131,154, 67,115, +134,232, 95,177,157, 90, 99,121,133, 9,252, 95, 84,139,234, 94,223, 17,236,117, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, 0}; diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c index e19f774412b..29cdfffa551 100644 --- a/source/blender/editors/gpencil/drawgpencil.c +++ b/source/blender/editors/gpencil/drawgpencil.c @@ -754,7 +754,7 @@ void draw_gpencil_view3d_ext (Scene *scene, View3D *v3d, ARegion *ar, short only * deal with the camera border, otherwise map the coords to the camera border. */ if(rv3d->persp == RV3D_CAMOB && !(G.f & G_RENDER_OGL)) { rctf rectf; - view3d_calc_camera_border(scene, ar, rv3d, v3d, &rectf); + view3d_calc_camera_border(scene, ar, rv3d, v3d, &rectf, -1); /* negative shift */ BLI_copy_rcti_rctf(&rect, &rectf); } else { diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index 75156571cf4..d42e63bf354 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -141,8 +141,20 @@ static void gp_session_validatebuffer(tGPsdata *p); /* check if context is suitable for drawing */ static int gpencil_draw_poll (bContext *C) { - /* check if current context can support GPencil data */ - return (gpencil_data_get_pointers(C, NULL) != NULL); + if(ED_operator_regionactive(C)) { + /* check if current context can support GPencil data */ + if(gpencil_data_get_pointers(C, NULL) != NULL) { + return 1; + } + else { + CTX_wm_operator_poll_msg_set(C, "failed to find grease pencil data to draw into"); + } + } + else { + CTX_wm_operator_poll_msg_set(C, "active region not set"); + } + + return 0; } /* check if projecting strokes into 3d-geometry in the 3D-View */ @@ -890,7 +902,7 @@ static tGPsdata *gp_session_initpaint (bContext *C) /* for camera view set the subrect */ if(rv3d->persp == RV3D_CAMOB) { - view3d_calc_camera_border(p->scene, p->ar, NULL, v3d, &p->subrect_data); + view3d_calc_camera_border(p->scene, p->ar, NULL, v3d, &p->subrect_data, -1); /* negative shift */ p->subrect= &p->subrect_data; } diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h index 32fe10783a7..3e16cae5527 100644 --- a/source/blender/editors/include/ED_armature.h +++ b/source/blender/editors/include/ED_armature.h @@ -91,8 +91,8 @@ typedef struct EditBone #define BONESEL_NOSEL (1<<31) /* Indicates a negative number */ /* useful macros */ -#define EBONE_VISIBLE(arm, ebone) ((arm->layer & ebone->layer) && !(ebone->flag & BONE_HIDDEN_A)) -#define EBONE_EDITABLE(ebone) ((ebone->flag & BONE_SELECTED) && !(ebone->flag & BONE_EDITMODE_LOCKED)) +#define EBONE_VISIBLE(arm, ebone) (((arm)->layer & (ebone)->layer) && !((ebone)->flag & BONE_HIDDEN_A)) +#define EBONE_EDITABLE(ebone) (((ebone)->flag & BONE_SELECTED) && !((ebone)->flag & BONE_EDITMODE_LOCKED)) /* used in bone_select_hierachy() */ #define BONE_SELECT_PARENT 0 @@ -107,7 +107,8 @@ void ED_keymap_armature(struct wmKeyConfig *keyconf); void ED_armature_from_edit(struct Object *obedit); void ED_armature_to_edit(struct Object *ob); void ED_armature_edit_free(struct Object *ob); -void ED_armature_deselectall(struct Object *obedit, int toggle); +void ED_armature_deselect_all(struct Object *obedit, int toggle); +void ED_armature_deselect_all_visible(struct Object *obedit); int ED_do_pose_selectbuffer(struct Scene *scene, struct Base *base, unsigned int *buffer, short hits, short extend); diff --git a/source/blender/editors/include/ED_image.h b/source/blender/editors/include/ED_image.h index c5f0983f494..7f507eab276 100644 --- a/source/blender/editors/include/ED_image.h +++ b/source/blender/editors/include/ED_image.h @@ -29,6 +29,7 @@ #define ED_IMAGE_H struct SpaceImage; +struct Main; struct bContext; struct Image; struct ImageUser; @@ -61,7 +62,7 @@ int ED_space_image_show_uvedit(struct SpaceImage *sima, struct Object *obedit); int ED_space_image_show_uvshadow(struct SpaceImage *sima, struct Object *obedit); /* UI level image (texture) updating... render calls own stuff (too) */ -void ED_image_update_frame(const struct bContext *C); +void ED_image_update_frame(const struct Main *mainp, int cfra); /* image_render.c, export for screen_ops.c, render operator */ void ED_space_image_output(struct bContext *C); diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h index 22779fbba0b..cf0334ce6b3 100644 --- a/source/blender/editors/include/ED_mesh.h +++ b/source/blender/editors/include/ED_mesh.h @@ -181,12 +181,13 @@ void EM_deselect_by_material(struct EditMesh *em, int index); void EM_automerge(struct Scene *scene, struct Object *obedit, int update); /* editface.c */ +void paintface_flush_flags(struct Object *ob); struct MTFace *EM_get_active_mtface(struct EditMesh *em, struct EditFace **act_efa, struct MCol **mcol, int sloppy); -int face_select(struct bContext *C, struct Object *ob, short mval[2], int extend); -void face_borderselect(struct bContext *C, struct Object *ob, struct rcti *rect, int select, int extend); -void selectall_tface(struct Object *ob, int action); -void select_linked_tfaces(struct bContext *C, struct Object *ob, short mval[2], int mode); -int minmax_tface(struct Object *ob, float *min, float *max); +int paintface_mouse_select(struct bContext *C, struct Object *ob, short mval[2], int extend); +int do_paintface_box_select(struct ViewContext *vc, struct rcti *rect, int select, int extend); +void paintface_deselect_all_visible(struct Object *ob, int action, short flush_flags); +void paintface_select_linked(struct bContext *C, struct Object *ob, short mval[2], int mode); +int paintface_minmax(struct Object *ob, float *min, float *max); /* object_vgroup.c */ diff --git a/source/blender/editors/include/ED_particle.h b/source/blender/editors/include/ED_particle.h index 87aa7ca9195..f3b65b343ef 100644 --- a/source/blender/editors/include/ED_particle.h +++ b/source/blender/editors/include/ED_particle.h @@ -59,7 +59,8 @@ void PE_update_object(struct Scene *scene, struct Object *ob, int useflag); int PE_mouse_particles(struct bContext *C, short *mval, int extend); int PE_border_select(struct bContext *C, struct rcti *rect, int select, int extend); int PE_circle_select(struct bContext *C, int selecting, short *mval, float rad); -int PE_lasso_select(struct bContext *C, short mcords[][2], short moves, short select); +int PE_lasso_select(struct bContext *C, short mcords[][2], short moves, short extend, short select); +void PE_deselect_all_visible(struct PTCacheEdit *edit); /* undo */ void PE_undo_push(struct Scene *scene, char *str); diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index 8b8bb75b8e6..b679ca64a28 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -109,7 +109,8 @@ struct ScrArea *ED_screen_full_toggle(struct bContext *C, struct wmWindow *win, void ED_screen_new_window(struct bContext *C, struct rcti *position, int type); /* anim */ -void ED_update_for_newframe(const struct bContext *C, int mute); +void ED_update_for_newframe(struct Main *bmain, struct Scene *scene, struct bScreen *screen, int mute); + void ED_refresh_viewport_fps(struct bContext *C); int ED_screen_animation_play(struct bContext *C, int sync, int mode); @@ -127,6 +128,7 @@ int ED_operator_scene_editable(struct bContext *C); int ED_operator_view3d_active(struct bContext *C); int ED_operator_region_view3d_active(struct bContext *C); +int ED_operator_animview_active(struct bContext *C); int ED_operator_timeline_active(struct bContext *C); int ED_operator_outliner_active(struct bContext *C); int ED_operator_outliner_active_no_editobject(struct bContext *C); @@ -142,6 +144,7 @@ int ED_operator_logic_active(struct bContext *C); int ED_operator_object_active(struct bContext *C); int ED_operator_object_active_editable(struct bContext *C); +int ED_operator_object_active_editable_mesh(struct bContext *C); int ED_operator_editmesh(struct bContext *C); int ED_operator_editmesh_view3d(struct bContext *C); int ED_operator_editmesh_region_view3d(struct bContext *C); diff --git a/source/blender/editors/include/ED_screen_types.h b/source/blender/editors/include/ED_screen_types.h index 18d6a1a48cc..240075565af 100644 --- a/source/blender/editors/include/ED_screen_types.h +++ b/source/blender/editors/include/ED_screen_types.h @@ -52,7 +52,7 @@ enum { /* don't drop frames (and ignore SCE_FRAME_DROP flag) */ ANIMPLAY_FLAG_NO_SYNC = (1<<3), /* use nextfra at next timer update */ - ANIMPLAY_FLAG_USE_NEXT_FRAME, + ANIMPLAY_FLAG_USE_NEXT_FRAME = (1<<4) }; /* ----------------------------------------------------- */ diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h index fe024be29e0..afc6787010a 100644 --- a/source/blender/editors/include/ED_view3d.h +++ b/source/blender/editors/include/ED_view3d.h @@ -106,7 +106,7 @@ int get_view3d_viewplane(struct View3D *v3d, struct RegionView3D *rv3d, int winx int get_view3d_ortho(struct View3D *v3d, struct RegionView3D *rv3d); void view3d_get_object_project_mat(struct RegionView3D *v3d, struct Object *ob, float pmat[4][4]); void view3d_project_float(struct ARegion *a, float *vec, float *adr, float mat[4][4]); -void view3d_calc_camera_border(struct Scene *scene, struct ARegion *ar, struct RegionView3D *rv3d, struct View3D *v3d, struct rctf *viewborder_r); +void view3d_calc_camera_border(struct Scene *scene, struct ARegion *ar, struct RegionView3D *rv3d, struct View3D *v3d, struct rctf *viewborder_r, short do_shift); /* drawobject.c itterators */ void mesh_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userData, struct EditVert *eve, int x, int y, int index), void *userData, int clipVerts); @@ -118,6 +118,7 @@ void lattice_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userDa void ED_view3d_local_clipping(struct RegionView3D *rv3d, float mat[][4]); int view3d_test_clipping(struct RegionView3D *rv3d, float *vec, int local); void view3d_align_axis_to_vector(struct View3D *v3d, struct RegionView3D *rv3d, int axisidx, float vec[3]); +float view3d_pixel_size(struct RegionView3D *rv3d, const float co[3]); void drawcircball(int mode, float *cent, float rad, float tmat[][4]); @@ -164,7 +165,6 @@ void ED_view3d_draw_offscreen(struct Scene *scene, struct View3D *v3d, struct AR struct ImBuf *ED_view3d_draw_offscreen_imbuf(struct Scene *scene, struct View3D *v3d, struct ARegion *ar, int sizex, int sizey, unsigned int flag); struct ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height, unsigned int flag, int drawtype); -void view3d_clipping_local(struct RegionView3D *rv3d, float mat[][4]); Base *ED_view3d_give_base_under_cursor(struct bContext *C, short *mval); void ED_view3d_quadview_update(struct ScrArea *sa, struct ARegion *ar); diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h index 3e8420df7eb..a145df908b9 100644 --- a/source/blender/editors/include/UI_icons.h +++ b/source/blender/editors/include/UI_icons.h @@ -30,886 +30,976 @@ once from UI_resources.h for the internal icon enum and once for interface_api.c for the definition of the RNA enum for the icons */ -DEF_ICON(ICON_BLENDER) -DEF_ICON(ICON_QUESTION) -DEF_ICON(ICON_ERROR) -DEF_ICON(ICON_CANCEL) -DEF_ICON(ICON_TRIA_RIGHT) -DEF_ICON(ICON_TRIA_DOWN) -DEF_ICON(ICON_TRIA_LEFT) -DEF_ICON(ICON_TRIA_UP) -DEF_ICON(ICON_ARROW_LEFTRIGHT) -DEF_ICON(ICON_PLUS) -DEF_ICON(ICON_DISCLOSURE_TRI_DOWN) -DEF_ICON(ICON_DISCLOSURE_TRI_RIGHT) -DEF_ICON(ICON_RADIOBUT_OFF) -DEF_ICON(ICON_RADIOBUT_ON) -DEF_ICON(ICON_MENU_PANEL) -DEF_ICON(ICON_PYTHON) -DEF_ICON(ICON_BLANK003) -DEF_ICON(ICON_DOT) -DEF_ICON(ICON_BLANK004) -DEF_ICON(ICON_X) -DEF_ICON(ICON_BLANK005) -DEF_ICON(ICON_GO_LEFT) -DEF_ICON(ICON_PLUG) -DEF_ICON(ICON_UI) -DEF_ICON(ICON_NODE) -DEF_ICON(ICON_NODE_SEL) +/* ICON_ prefix added */ +DEF_ICON(BLENDER) +DEF_ICON(QUESTION) +DEF_ICON(ERROR) +DEF_ICON(CANCEL) +DEF_ICON(TRIA_RIGHT) +DEF_ICON(TRIA_DOWN) +DEF_ICON(TRIA_LEFT) +DEF_ICON(TRIA_UP) +DEF_ICON(ARROW_LEFTRIGHT) +DEF_ICON(PLUS) +DEF_ICON(DISCLOSURE_TRI_DOWN) +DEF_ICON(DISCLOSURE_TRI_RIGHT) +DEF_ICON(RADIOBUT_OFF) +DEF_ICON(RADIOBUT_ON) +DEF_ICON(MENU_PANEL) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK002) + DEF_ICON(BLANK003) +#endif +DEF_ICON(DOT) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK004) +#endif +DEF_ICON(X) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK005) +#endif +DEF_ICON(GO_LEFT) +DEF_ICON(PLUG) +DEF_ICON(UI) +DEF_ICON(NODE) +DEF_ICON(NODE_SEL) /* ui */ -DEF_ICON(ICON_FULLSCREEN) -DEF_ICON(ICON_SPLITSCREEN) -DEF_ICON(ICON_RIGHTARROW_THIN) -DEF_ICON(ICON_BORDERMOVE) -DEF_ICON(ICON_VIEWZOOM) -DEF_ICON(ICON_ZOOMIN) -DEF_ICON(ICON_ZOOMOUT) -DEF_ICON(ICON_PANEL_CLOSE) -DEF_ICON(ICON_COPY_ID) //ICON_BLANK009 -DEF_ICON(ICON_EYEDROPPER) -DEF_ICON(ICON_LINK_AREA) //ICON_BLANK010 -DEF_ICON(ICON_AUTO) -DEF_ICON(ICON_CHECKBOX_DEHLT) -DEF_ICON(ICON_CHECKBOX_HLT) -DEF_ICON(ICON_UNLOCKED) -DEF_ICON(ICON_LOCKED) -DEF_ICON(ICON_UNPINNED) -DEF_ICON(ICON_PINNED) -DEF_ICON(ICON_SCREEN_BACK) -DEF_ICON(ICON_RIGHTARROW) -DEF_ICON(ICON_DOWNARROW_HLT) -DEF_ICON(ICON_DOTSUP) -DEF_ICON(ICON_DOTSDOWN) -DEF_ICON(ICON_LINK) -DEF_ICON(ICON_INLINK) -DEF_ICON(ICON_PLUGIN) +DEF_ICON(FULLSCREEN) +DEF_ICON(SPLITSCREEN) +DEF_ICON(RIGHTARROW_THIN) +DEF_ICON(BORDERMOVE) +DEF_ICON(VIEWZOOM) +DEF_ICON(ZOOMIN) +DEF_ICON(ZOOMOUT) +DEF_ICON(PANEL_CLOSE) +DEF_ICON(COPY_ID) //ICON_BLANK009 +DEF_ICON(EYEDROPPER) +DEF_ICON(LINK_AREA) //ICON_BLANK010 +DEF_ICON(AUTO) +DEF_ICON(CHECKBOX_DEHLT) +DEF_ICON(CHECKBOX_HLT) +DEF_ICON(UNLOCKED) +DEF_ICON(LOCKED) +DEF_ICON(UNPINNED) +DEF_ICON(PINNED) +DEF_ICON(SCREEN_BACK) +DEF_ICON(RIGHTARROW) +DEF_ICON(DOWNARROW_HLT) +DEF_ICON(DOTSUP) +DEF_ICON(DOTSDOWN) +DEF_ICON(LINK) +DEF_ICON(INLINK) +DEF_ICON(PLUGIN) /* various ui */ -DEF_ICON(ICON_HELP) -DEF_ICON(ICON_GHOST_ENABLED) -DEF_ICON(ICON_COLOR) -DEF_ICON(ICON_LINKED) -DEF_ICON(ICON_UNLINKED) -DEF_ICON(ICON_HAND) -DEF_ICON(ICON_ZOOM_ALL) -DEF_ICON(ICON_ZOOM_SELECTED) -DEF_ICON(ICON_ZOOM_PREVIOUS) -DEF_ICON(ICON_ZOOM_IN) -DEF_ICON(ICON_ZOOM_OUT) -DEF_ICON(ICON_RENDER_REGION) -DEF_ICON(ICON_BORDER_RECT) -DEF_ICON(ICON_BORDER_LASSO) -DEF_ICON(ICON_FREEZE) -DEF_ICON(ICON_STYLUS_PRESSURE) -DEF_ICON(ICON_GHOST_DISABLED) -DEF_ICON(ICON_NEW) -DEF_ICON(ICON_FILE_TICK) -DEF_ICON(ICON_QUIT) -DEF_ICON(ICON_URL) -DEF_ICON(ICON_RECOVER_LAST) -DEF_ICON(ICON_BLANK038) -DEF_ICON(ICON_FULLSCREEN_ENTER) -DEF_ICON(ICON_FULLSCREEN_EXIT) -DEF_ICON(ICON_BLANK1) // Not actually blank - this is used all over the place +DEF_ICON(HELP) +DEF_ICON(GHOST_ENABLED) +DEF_ICON(COLOR) +DEF_ICON(LINKED) +DEF_ICON(UNLINKED) +DEF_ICON(HAND) +DEF_ICON(ZOOM_ALL) +DEF_ICON(ZOOM_SELECTED) +DEF_ICON(ZOOM_PREVIOUS) +DEF_ICON(ZOOM_IN) +DEF_ICON(ZOOM_OUT) +DEF_ICON(RENDER_REGION) +DEF_ICON(BORDER_RECT) +DEF_ICON(BORDER_LASSO) +DEF_ICON(FREEZE) +DEF_ICON(STYLUS_PRESSURE) +DEF_ICON(GHOST_DISABLED) +DEF_ICON(NEW) +DEF_ICON(FILE_TICK) +DEF_ICON(QUIT) +DEF_ICON(URL) +DEF_ICON(RECOVER_LAST) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK038) +#endif +DEF_ICON(FULLSCREEN_ENTER) +DEF_ICON(FULLSCREEN_EXIT) +DEF_ICON(BLANK1) // Not actually blank - this is used all over the place /* BUTTONS */ -DEF_ICON(ICON_LAMP) -DEF_ICON(ICON_MATERIAL) -DEF_ICON(ICON_TEXTURE) -DEF_ICON(ICON_ANIM) -DEF_ICON(ICON_WORLD) -DEF_ICON(ICON_SCENE) -DEF_ICON(ICON_EDIT) -DEF_ICON(ICON_GAME) -DEF_ICON(ICON_RADIO) -DEF_ICON(ICON_SCRIPT) -DEF_ICON(ICON_PARTICLES) -DEF_ICON(ICON_PHYSICS) -DEF_ICON(ICON_SPEAKER) -DEF_ICON(ICON_TEXTURE_SHADED) //ICON_BLANK041 -DEF_ICON(ICON_BLANK042) -DEF_ICON(ICON_BLANK043) -DEF_ICON(ICON_BLANK044) -DEF_ICON(ICON_BLANK045) -DEF_ICON(ICON_BLANK046) -DEF_ICON(ICON_BLANK047) -DEF_ICON(ICON_BLANK048) -DEF_ICON(ICON_BLANK049) -DEF_ICON(ICON_BLANK050) -DEF_ICON(ICON_BLANK051) -DEF_ICON(ICON_BLANK052) -DEF_ICON(ICON_BLANK052b) - +DEF_ICON(LAMP) +DEF_ICON(MATERIAL) +DEF_ICON(TEXTURE) +DEF_ICON(ANIM) +DEF_ICON(WORLD) +DEF_ICON(SCENE) +DEF_ICON(EDIT) +DEF_ICON(GAME) +DEF_ICON(RADIO) +DEF_ICON(SCRIPT) +DEF_ICON(PARTICLES) +DEF_ICON(PHYSICS) +DEF_ICON(SPEAKER) +DEF_ICON(TEXTURE_SHADED) //ICON_BLANK041 +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK042) + DEF_ICON(BLANK043) + DEF_ICON(BLANK044) + DEF_ICON(BLANK045) + DEF_ICON(BLANK046) + DEF_ICON(BLANK047) + DEF_ICON(BLANK048) + DEF_ICON(BLANK049) + DEF_ICON(BLANK050) + DEF_ICON(BLANK051) + DEF_ICON(BLANK052) + DEF_ICON(BLANK052b) +#endif /* EDITORS */ -DEF_ICON(ICON_VIEW3D) -DEF_ICON(ICON_IPO) -DEF_ICON(ICON_OOPS) -DEF_ICON(ICON_BUTS) -DEF_ICON(ICON_FILESEL) -DEF_ICON(ICON_IMAGE_COL) -DEF_ICON(ICON_INFO) -DEF_ICON(ICON_SEQUENCE) -DEF_ICON(ICON_TEXT) -DEF_ICON(ICON_IMASEL) -DEF_ICON(ICON_SOUND) -DEF_ICON(ICON_ACTION) -DEF_ICON(ICON_NLA) -DEF_ICON(ICON_SCRIPTWIN) -DEF_ICON(ICON_TIME) -DEF_ICON(ICON_NODETREE) -DEF_ICON(ICON_LOGIC) -DEF_ICON(ICON_CONSOLE) -DEF_ICON(ICON_PREFERENCES) -DEF_ICON(ICON_ASSET_MANAGER) -DEF_ICON(ICON_BLANK057) -DEF_ICON(ICON_BLANK058) -DEF_ICON(ICON_BLANK059) -DEF_ICON(ICON_BLANK060) -DEF_ICON(ICON_BLANK061) -DEF_ICON(ICON_BLANK061b) - +DEF_ICON(VIEW3D) +DEF_ICON(IPO) +DEF_ICON(OOPS) +DEF_ICON(BUTS) +DEF_ICON(FILESEL) +DEF_ICON(IMAGE_COL) +DEF_ICON(INFO) +DEF_ICON(SEQUENCE) +DEF_ICON(TEXT) +DEF_ICON(IMASEL) +DEF_ICON(SOUND) +DEF_ICON(ACTION) +DEF_ICON(NLA) +DEF_ICON(SCRIPTWIN) +DEF_ICON(TIME) +DEF_ICON(NODETREE) +DEF_ICON(LOGIC) +DEF_ICON(CONSOLE) +DEF_ICON(PREFERENCES) +DEF_ICON(ASSET_MANAGER) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK057) + DEF_ICON(BLANK058) + DEF_ICON(BLANK059) + DEF_ICON(BLANK060) + DEF_ICON(BLANK061) + DEF_ICON(BLANK061b) +#endif + /* MODES */ -DEF_ICON(ICON_OBJECT_DATAMODE) // XXX fix this up -DEF_ICON(ICON_EDITMODE_HLT) -DEF_ICON(ICON_FACESEL_HLT) -DEF_ICON(ICON_VPAINT_HLT) -DEF_ICON(ICON_TPAINT_HLT) -DEF_ICON(ICON_WPAINT_HLT) -DEF_ICON(ICON_SCULPTMODE_HLT) -DEF_ICON(ICON_POSE_HLT) -DEF_ICON(ICON_PARTICLEMODE) -DEF_ICON(ICON_LIGHTPAINT) -DEF_ICON(ICON_BLANK063) -DEF_ICON(ICON_BLANK064) -DEF_ICON(ICON_BLANK065) -DEF_ICON(ICON_BLANK066) -DEF_ICON(ICON_BLANK067) -DEF_ICON(ICON_BLANK068) -DEF_ICON(ICON_BLANK069) -DEF_ICON(ICON_BLANK070) -DEF_ICON(ICON_BLANK071) -DEF_ICON(ICON_BLANK072) -DEF_ICON(ICON_BLANK073) -DEF_ICON(ICON_BLANK074) -DEF_ICON(ICON_BLANK075) -DEF_ICON(ICON_BLANK076) -DEF_ICON(ICON_BLANK077) -DEF_ICON(ICON_BLANK077b) +DEF_ICON(OBJECT_DATAMODE) // XXX fix this up +DEF_ICON(EDITMODE_HLT) +DEF_ICON(FACESEL_HLT) +DEF_ICON(VPAINT_HLT) +DEF_ICON(TPAINT_HLT) +DEF_ICON(WPAINT_HLT) +DEF_ICON(SCULPTMODE_HLT) +DEF_ICON(POSE_HLT) +DEF_ICON(PARTICLEMODE) +DEF_ICON(LIGHTPAINT) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK063) + DEF_ICON(BLANK064) + DEF_ICON(BLANK065) + DEF_ICON(BLANK066) + DEF_ICON(BLANK067) + DEF_ICON(BLANK068) + DEF_ICON(BLANK069) + DEF_ICON(BLANK070) + DEF_ICON(BLANK071) + DEF_ICON(BLANK072) + DEF_ICON(BLANK073) + DEF_ICON(BLANK074) + DEF_ICON(BLANK075) + DEF_ICON(BLANK076) + DEF_ICON(BLANK077) + DEF_ICON(BLANK077b) +#endif /* DATA */ -DEF_ICON(ICON_SCENE_DATA) -DEF_ICON(ICON_RENDERLAYERS) -DEF_ICON(ICON_WORLD_DATA) -DEF_ICON(ICON_OBJECT_DATA) -DEF_ICON(ICON_MESH_DATA) -DEF_ICON(ICON_CURVE_DATA) -DEF_ICON(ICON_META_DATA) -DEF_ICON(ICON_LATTICE_DATA) -DEF_ICON(ICON_LAMP_DATA) -DEF_ICON(ICON_MATERIAL_DATA) -DEF_ICON(ICON_TEXTURE_DATA) -DEF_ICON(ICON_ANIM_DATA) -DEF_ICON(ICON_CAMERA_DATA) -DEF_ICON(ICON_PARTICLE_DATA) -DEF_ICON(ICON_LIBRARY_DATA_DIRECT) -DEF_ICON(ICON_GROUP) -DEF_ICON(ICON_ARMATURE_DATA) -DEF_ICON(ICON_POSE_DATA) -DEF_ICON(ICON_BONE_DATA) -DEF_ICON(ICON_CONSTRAINT) -DEF_ICON(ICON_SHAPEKEY_DATA) -DEF_ICON(ICON_CONSTRAINT_BONE) -DEF_ICON(ICON_BLANK079) -DEF_ICON(ICON_PACKAGE) -DEF_ICON(ICON_UGLYPACKAGE) -DEF_ICON(ICON_BLANK079b) +DEF_ICON(SCENE_DATA) +DEF_ICON(RENDERLAYERS) +DEF_ICON(WORLD_DATA) +DEF_ICON(OBJECT_DATA) +DEF_ICON(MESH_DATA) +DEF_ICON(CURVE_DATA) +DEF_ICON(META_DATA) +DEF_ICON(LATTICE_DATA) +DEF_ICON(LAMP_DATA) +DEF_ICON(MATERIAL_DATA) +DEF_ICON(TEXTURE_DATA) +DEF_ICON(ANIM_DATA) +DEF_ICON(CAMERA_DATA) +DEF_ICON(PARTICLE_DATA) +DEF_ICON(LIBRARY_DATA_DIRECT) +DEF_ICON(GROUP) +DEF_ICON(ARMATURE_DATA) +DEF_ICON(POSE_DATA) +DEF_ICON(BONE_DATA) +DEF_ICON(CONSTRAINT) +DEF_ICON(SHAPEKEY_DATA) +DEF_ICON(CONSTRAINT_BONE) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK079) +#endif +DEF_ICON(PACKAGE) +DEF_ICON(UGLYPACKAGE) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK079b) +#endif /* DATA */ -DEF_ICON(ICON_BRUSH_DATA) -DEF_ICON(ICON_IMAGE_DATA) -DEF_ICON(ICON_FILE) -DEF_ICON(ICON_FCURVE) -DEF_ICON(ICON_FONT_DATA) -DEF_ICON(ICON_RENDER_RESULT) -DEF_ICON(ICON_SURFACE_DATA) -DEF_ICON(ICON_EMPTY_DATA) -DEF_ICON(ICON_SETTINGS) -DEF_ICON(ICON_RENDER_ANIMATION) -DEF_ICON(ICON_RENDER_STILL) -DEF_ICON(ICON_BLANK080F) -DEF_ICON(ICON_BOIDS) -DEF_ICON(ICON_STRANDS) -DEF_ICON(ICON_LIBRARY_DATA_INDIRECT) -DEF_ICON(ICON_GREASEPENCIL) -DEF_ICON(ICON_BLANK083) -DEF_ICON(ICON_BLANK084) -DEF_ICON(ICON_GROUP_BONE) -DEF_ICON(ICON_GROUP_VERTEX) -DEF_ICON(ICON_GROUP_VCOL) -DEF_ICON(ICON_GROUP_UVS) -DEF_ICON(ICON_BLANK089) -DEF_ICON(ICON_BLANK090) -DEF_ICON(ICON_RNA) -DEF_ICON(ICON_RNA_ADD) +DEF_ICON(BRUSH_DATA) +DEF_ICON(IMAGE_DATA) +DEF_ICON(FILE) +DEF_ICON(FCURVE) +DEF_ICON(FONT_DATA) +DEF_ICON(RENDER_RESULT) +DEF_ICON(SURFACE_DATA) +DEF_ICON(EMPTY_DATA) +DEF_ICON(SETTINGS) +DEF_ICON(RENDER_ANIMATION) +DEF_ICON(RENDER_STILL) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK080F) +#endif +DEF_ICON(BOIDS) +DEF_ICON(STRANDS) +DEF_ICON(LIBRARY_DATA_INDIRECT) +DEF_ICON(GREASEPENCIL) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK083) + DEF_ICON(BLANK084) +#endif +DEF_ICON(GROUP_BONE) +DEF_ICON(GROUP_VERTEX) +DEF_ICON(GROUP_VCOL) +DEF_ICON(GROUP_UVS) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK089) + DEF_ICON(BLANK090) +#endif +DEF_ICON(RNA) +DEF_ICON(RNA_ADD) /* available */ -DEF_ICON(ICON_BLANK092) -DEF_ICON(ICON_BLANK093) -DEF_ICON(ICON_BLANK094) -DEF_ICON(ICON_BLANK095) -DEF_ICON(ICON_BLANK096) -DEF_ICON(ICON_BLANK097) -DEF_ICON(ICON_BLANK098) -DEF_ICON(ICON_BLANK099) -DEF_ICON(ICON_BLANK100) -DEF_ICON(ICON_BLANK101) -DEF_ICON(ICON_BLANK102) -DEF_ICON(ICON_BLANK103) -DEF_ICON(ICON_BLANK104) -DEF_ICON(ICON_BLANK105) -DEF_ICON(ICON_BLANK106) -DEF_ICON(ICON_BLANK107) -DEF_ICON(ICON_BLANK108) -DEF_ICON(ICON_BLANK109) -DEF_ICON(ICON_BLANK110) -DEF_ICON(ICON_BLANK111) -DEF_ICON(ICON_BLANK112) -DEF_ICON(ICON_BLANK113) -DEF_ICON(ICON_BLANK114) -DEF_ICON(ICON_BLANK115) -DEF_ICON(ICON_BLANK116) -DEF_ICON(ICON_BLANK116b) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK092) + DEF_ICON(BLANK093) + DEF_ICON(BLANK094) + DEF_ICON(BLANK095) + DEF_ICON(BLANK096) + DEF_ICON(BLANK097) + DEF_ICON(BLANK098) + DEF_ICON(BLANK099) + DEF_ICON(BLANK100) + DEF_ICON(BLANK101) + DEF_ICON(BLANK102) + DEF_ICON(BLANK103) + DEF_ICON(BLANK104) + DEF_ICON(BLANK105) + DEF_ICON(BLANK106) + DEF_ICON(BLANK107) + DEF_ICON(BLANK108) + DEF_ICON(BLANK109) + DEF_ICON(BLANK110) + DEF_ICON(BLANK111) + DEF_ICON(BLANK112) + DEF_ICON(BLANK113) + DEF_ICON(BLANK114) + DEF_ICON(BLANK115) + DEF_ICON(BLANK116) + DEF_ICON(BLANK116b) +#endif /* OUTLINER */ -DEF_ICON(ICON_OUTLINER_OB_EMPTY) -DEF_ICON(ICON_OUTLINER_OB_MESH) -DEF_ICON(ICON_OUTLINER_OB_CURVE) -DEF_ICON(ICON_OUTLINER_OB_LATTICE) -DEF_ICON(ICON_OUTLINER_OB_META) -DEF_ICON(ICON_OUTLINER_OB_LAMP) -DEF_ICON(ICON_OUTLINER_OB_CAMERA) -DEF_ICON(ICON_OUTLINER_OB_ARMATURE) -DEF_ICON(ICON_OUTLINER_OB_FONT) -DEF_ICON(ICON_OUTLINER_OB_SURFACE) -DEF_ICON(ICON_BLANK119) -DEF_ICON(ICON_BLANK120) -DEF_ICON(ICON_BLANK121) -DEF_ICON(ICON_BLANK122) -DEF_ICON(ICON_BLANK123) -DEF_ICON(ICON_BLANK124) -DEF_ICON(ICON_BLANK125) -DEF_ICON(ICON_BLANK126) -DEF_ICON(ICON_BLANK127) -DEF_ICON(ICON_RESTRICT_VIEW_OFF) -DEF_ICON(ICON_RESTRICT_VIEW_ON) -DEF_ICON(ICON_RESTRICT_SELECT_OFF) -DEF_ICON(ICON_RESTRICT_SELECT_ON) -DEF_ICON(ICON_RESTRICT_RENDER_OFF) -DEF_ICON(ICON_RESTRICT_RENDER_ON) -DEF_ICON(ICON_BLANK127b) +DEF_ICON(OUTLINER_OB_EMPTY) +DEF_ICON(OUTLINER_OB_MESH) +DEF_ICON(OUTLINER_OB_CURVE) +DEF_ICON(OUTLINER_OB_LATTICE) +DEF_ICON(OUTLINER_OB_META) +DEF_ICON(OUTLINER_OB_LAMP) +DEF_ICON(OUTLINER_OB_CAMERA) +DEF_ICON(OUTLINER_OB_ARMATURE) +DEF_ICON(OUTLINER_OB_FONT) +DEF_ICON(OUTLINER_OB_SURFACE) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK119) + DEF_ICON(BLANK120) + DEF_ICON(BLANK121) + DEF_ICON(BLANK122) + DEF_ICON(BLANK123) + DEF_ICON(BLANK124) + DEF_ICON(BLANK125) + DEF_ICON(BLANK126) + DEF_ICON(BLANK127) +#endif +DEF_ICON(RESTRICT_VIEW_OFF) +DEF_ICON(RESTRICT_VIEW_ON) +DEF_ICON(RESTRICT_SELECT_OFF) +DEF_ICON(RESTRICT_SELECT_ON) +DEF_ICON(RESTRICT_RENDER_OFF) +DEF_ICON(RESTRICT_RENDER_ON) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK127b) +#endif /* OUTLINER */ -DEF_ICON(ICON_OUTLINER_DATA_EMPTY) -DEF_ICON(ICON_OUTLINER_DATA_MESH) -DEF_ICON(ICON_OUTLINER_DATA_CURVE) -DEF_ICON(ICON_OUTLINER_DATA_LATTICE) -DEF_ICON(ICON_OUTLINER_DATA_META) -DEF_ICON(ICON_OUTLINER_DATA_LAMP) -DEF_ICON(ICON_OUTLINER_DATA_CAMERA) -DEF_ICON(ICON_OUTLINER_DATA_ARMATURE) -DEF_ICON(ICON_OUTLINER_DATA_FONT) -DEF_ICON(ICON_OUTLINER_DATA_SURFACE) -DEF_ICON(ICON_OUTLINER_DATA_POSE) -DEF_ICON(ICON_BLANK129) -DEF_ICON(ICON_BLANK130) -DEF_ICON(ICON_BLANK131) -DEF_ICON(ICON_BLANK132) -DEF_ICON(ICON_BLANK133) -DEF_ICON(ICON_BLANK134) -DEF_ICON(ICON_BLANK135) -DEF_ICON(ICON_BLANK136) -DEF_ICON(ICON_BLANK137) -DEF_ICON(ICON_BLANK138) -DEF_ICON(ICON_BLANK139) -DEF_ICON(ICON_BLANK140) -DEF_ICON(ICON_BLANK141) -DEF_ICON(ICON_BLANK142) -DEF_ICON(ICON_BLANK142b) +DEF_ICON(OUTLINER_DATA_EMPTY) +DEF_ICON(OUTLINER_DATA_MESH) +DEF_ICON(OUTLINER_DATA_CURVE) +DEF_ICON(OUTLINER_DATA_LATTICE) +DEF_ICON(OUTLINER_DATA_META) +DEF_ICON(OUTLINER_DATA_LAMP) +DEF_ICON(OUTLINER_DATA_CAMERA) +DEF_ICON(OUTLINER_DATA_ARMATURE) +DEF_ICON(OUTLINER_DATA_FONT) +DEF_ICON(OUTLINER_DATA_SURFACE) +DEF_ICON(OUTLINER_DATA_POSE) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK129) + DEF_ICON(BLANK130) + DEF_ICON(BLANK131) + DEF_ICON(BLANK132) + DEF_ICON(BLANK133) + DEF_ICON(BLANK134) + DEF_ICON(BLANK135) + DEF_ICON(BLANK136) + DEF_ICON(BLANK137) + DEF_ICON(BLANK138) + DEF_ICON(BLANK139) + DEF_ICON(BLANK140) + DEF_ICON(BLANK141) + DEF_ICON(BLANK142) + DEF_ICON(BLANK142b) +#endif /* PRIMITIVES */ -DEF_ICON(ICON_MESH_PLANE) -DEF_ICON(ICON_MESH_CUBE) -DEF_ICON(ICON_MESH_CIRCLE) -DEF_ICON(ICON_MESH_UVSPHERE) -DEF_ICON(ICON_MESH_ICOSPHERE) -DEF_ICON(ICON_MESH_GRID) -DEF_ICON(ICON_MESH_MONKEY) -DEF_ICON(ICON_MESH_CYLINDER) -DEF_ICON(ICON_MESH_TORUS) -DEF_ICON(ICON_MESH_CONE) -DEF_ICON(ICON_BLANK610) -DEF_ICON(ICON_BLANK611) -DEF_ICON(ICON_LAMP_POINT) -DEF_ICON(ICON_LAMP_SUN) -DEF_ICON(ICON_LAMP_SPOT) -DEF_ICON(ICON_LAMP_HEMI) -DEF_ICON(ICON_LAMP_AREA) -DEF_ICON(ICON_BLANK617) -DEF_ICON(ICON_BLANK618) -DEF_ICON(ICON_BLANK619) -DEF_ICON(ICON_META_PLANE) -DEF_ICON(ICON_META_CUBE) -DEF_ICON(ICON_META_BALL) -DEF_ICON(ICON_META_ELLIPSOID) -DEF_ICON(ICON_META_CAPSULE) -DEF_ICON(ICON_BLANK625) +DEF_ICON(MESH_PLANE) +DEF_ICON(MESH_CUBE) +DEF_ICON(MESH_CIRCLE) +DEF_ICON(MESH_UVSPHERE) +DEF_ICON(MESH_ICOSPHERE) +DEF_ICON(MESH_GRID) +DEF_ICON(MESH_MONKEY) +DEF_ICON(MESH_CYLINDER) +DEF_ICON(MESH_TORUS) +DEF_ICON(MESH_CONE) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK610) + DEF_ICON(BLANK611) +#endif +DEF_ICON(LAMP_POINT) +DEF_ICON(LAMP_SUN) +DEF_ICON(LAMP_SPOT) +DEF_ICON(LAMP_HEMI) +DEF_ICON(LAMP_AREA) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK617) + DEF_ICON(BLANK618) + DEF_ICON(BLANK619) +#endif +DEF_ICON(META_PLANE) +DEF_ICON(META_CUBE) +DEF_ICON(META_BALL) +DEF_ICON(META_ELLIPSOID) +DEF_ICON(META_CAPSULE) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK625) +#endif /* PRIMITIVES */ -DEF_ICON(ICON_SURFACE_NCURVE) -DEF_ICON(ICON_SURFACE_NCIRCLE) -DEF_ICON(ICON_SURFACE_NSURFACE) -DEF_ICON(ICON_SURFACE_NCYLINDER) -DEF_ICON(ICON_SURFACE_NSPHERE) -DEF_ICON(ICON_SURFACE_NTORUS) -DEF_ICON(ICON_BLANK636) -DEF_ICON(ICON_BLANK637) -DEF_ICON(ICON_BLANK638) -DEF_ICON(ICON_CURVE_BEZCURVE) -DEF_ICON(ICON_CURVE_BEZCIRCLE) -DEF_ICON(ICON_CURVE_NCURVE) -DEF_ICON(ICON_CURVE_NCIRCLE) -DEF_ICON(ICON_CURVE_PATH) -DEF_ICON(ICON_BLANK644) -DEF_ICON(ICON_BLANK645) -DEF_ICON(ICON_BLANK646) -DEF_ICON(ICON_BLANK647) -DEF_ICON(ICON_BLANK648) -DEF_ICON(ICON_BLANK649) -DEF_ICON(ICON_BLANK650) -DEF_ICON(ICON_BLANK651) -DEF_ICON(ICON_BLANK652) -DEF_ICON(ICON_BLANK653) -DEF_ICON(ICON_BLANK654) -DEF_ICON(ICON_BLANK655) +DEF_ICON(SURFACE_NCURVE) +DEF_ICON(SURFACE_NCIRCLE) +DEF_ICON(SURFACE_NSURFACE) +DEF_ICON(SURFACE_NCYLINDER) +DEF_ICON(SURFACE_NSPHERE) +DEF_ICON(SURFACE_NTORUS) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK636) + DEF_ICON(BLANK637) + DEF_ICON(BLANK638) +#endif +DEF_ICON(CURVE_BEZCURVE) +DEF_ICON(CURVE_BEZCIRCLE) +DEF_ICON(CURVE_NCURVE) +DEF_ICON(CURVE_NCIRCLE) +DEF_ICON(CURVE_PATH) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK644) + DEF_ICON(BLANK645) + DEF_ICON(BLANK646) + DEF_ICON(BLANK647) + DEF_ICON(BLANK648) + DEF_ICON(BLANK649) + DEF_ICON(BLANK650) + DEF_ICON(BLANK651) + DEF_ICON(BLANK652) + DEF_ICON(BLANK653) + DEF_ICON(BLANK654) + DEF_ICON(BLANK655) +#endif /* EMPTY */ -DEF_ICON(ICON_FORCE_FORCE) -DEF_ICON(ICON_FORCE_WIND) -DEF_ICON(ICON_FORCE_VORTEX) -DEF_ICON(ICON_FORCE_MAGNETIC) -DEF_ICON(ICON_FORCE_HARMONIC) -DEF_ICON(ICON_FORCE_CHARGE) -DEF_ICON(ICON_FORCE_LENNARDJONES) -DEF_ICON(ICON_FORCE_TEXTURE) -DEF_ICON(ICON_FORCE_CURVE) -DEF_ICON(ICON_FORCE_BOID) -DEF_ICON(ICON_FORCE_TURBULENCE) -DEF_ICON(ICON_FORCE_DRAG) -DEF_ICON(ICON_BLANK672) -DEF_ICON(ICON_BLANK673) -DEF_ICON(ICON_BLANK674) -DEF_ICON(ICON_BLANK675) -DEF_ICON(ICON_BLANK676) -DEF_ICON(ICON_BLANK677) -DEF_ICON(ICON_BLANK678) -DEF_ICON(ICON_BLANK679) -DEF_ICON(ICON_BLANK680) -DEF_ICON(ICON_BLANK681) -DEF_ICON(ICON_BLANK682) -DEF_ICON(ICON_BLANK683) -DEF_ICON(ICON_BLANK684) -DEF_ICON(ICON_BLANK685) +DEF_ICON(FORCE_FORCE) +DEF_ICON(FORCE_WIND) +DEF_ICON(FORCE_VORTEX) +DEF_ICON(FORCE_MAGNETIC) +DEF_ICON(FORCE_HARMONIC) +DEF_ICON(FORCE_CHARGE) +DEF_ICON(FORCE_LENNARDJONES) +DEF_ICON(FORCE_TEXTURE) +DEF_ICON(FORCE_CURVE) +DEF_ICON(FORCE_BOID) +DEF_ICON(FORCE_TURBULENCE) +DEF_ICON(FORCE_DRAG) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK672) + DEF_ICON(BLANK673) + DEF_ICON(BLANK674) + DEF_ICON(BLANK675) + DEF_ICON(BLANK676) + DEF_ICON(BLANK677) + DEF_ICON(BLANK678) + DEF_ICON(BLANK679) + DEF_ICON(BLANK680) + DEF_ICON(BLANK681) + DEF_ICON(BLANK682) + DEF_ICON(BLANK683) + DEF_ICON(BLANK684) + DEF_ICON(BLANK685) /* EMPTY */ -DEF_ICON(ICON_BLANK690) -DEF_ICON(ICON_BLANK691) -DEF_ICON(ICON_BLANK692) -DEF_ICON(ICON_BLANK693) -DEF_ICON(ICON_BLANK694) -DEF_ICON(ICON_BLANK695) -DEF_ICON(ICON_BLANK696) -DEF_ICON(ICON_BLANK697) -DEF_ICON(ICON_BLANK698) -DEF_ICON(ICON_BLANK699) -DEF_ICON(ICON_BLANK700) -DEF_ICON(ICON_BLANK701) -DEF_ICON(ICON_BLANK702) -DEF_ICON(ICON_BLANK703) -DEF_ICON(ICON_BLANK704) -DEF_ICON(ICON_BLANK705) -DEF_ICON(ICON_BLANK706) -DEF_ICON(ICON_BLANK707) -DEF_ICON(ICON_BLANK708) -DEF_ICON(ICON_BLANK709) -DEF_ICON(ICON_BLANK710) -DEF_ICON(ICON_BLANK711) -DEF_ICON(ICON_BLANK712) -DEF_ICON(ICON_BLANK713) -DEF_ICON(ICON_BLANK714) -DEF_ICON(ICON_BLANK715) + DEF_ICON(BLANK690) + DEF_ICON(BLANK691) + DEF_ICON(BLANK692) + DEF_ICON(BLANK693) + DEF_ICON(BLANK694) + DEF_ICON(BLANK695) + DEF_ICON(BLANK696) + DEF_ICON(BLANK697) + DEF_ICON(BLANK698) + DEF_ICON(BLANK699) + DEF_ICON(BLANK700) + DEF_ICON(BLANK701) + DEF_ICON(BLANK702) + DEF_ICON(BLANK703) + DEF_ICON(BLANK704) + DEF_ICON(BLANK705) + DEF_ICON(BLANK706) + DEF_ICON(BLANK707) + DEF_ICON(BLANK708) + DEF_ICON(BLANK709) + DEF_ICON(BLANK710) + DEF_ICON(BLANK711) + DEF_ICON(BLANK712) + DEF_ICON(BLANK713) + DEF_ICON(BLANK714) + DEF_ICON(BLANK715) /* EMPTY */ -DEF_ICON(ICON_BLANK720) -DEF_ICON(ICON_BLANK721) -DEF_ICON(ICON_BLANK722) -DEF_ICON(ICON_BLANK733) -DEF_ICON(ICON_BLANK734) -DEF_ICON(ICON_BLANK735) -DEF_ICON(ICON_BLANK736) -DEF_ICON(ICON_BLANK737) -DEF_ICON(ICON_BLANK738) -DEF_ICON(ICON_BLANK739) -DEF_ICON(ICON_BLANK740) -DEF_ICON(ICON_BLANK741) -DEF_ICON(ICON_BLANK742) -DEF_ICON(ICON_BLANK743) -DEF_ICON(ICON_BLANK744) -DEF_ICON(ICON_BLANK745) -DEF_ICON(ICON_BLANK746) -DEF_ICON(ICON_BLANK747) -DEF_ICON(ICON_BLANK748) -DEF_ICON(ICON_BLANK749) -DEF_ICON(ICON_BLANK750) -DEF_ICON(ICON_BLANK751) -DEF_ICON(ICON_BLANK752) -DEF_ICON(ICON_BLANK753) -DEF_ICON(ICON_BLANK754) -DEF_ICON(ICON_BLANK755) + DEF_ICON(BLANK720) + DEF_ICON(BLANK721) + DEF_ICON(BLANK722) + DEF_ICON(BLANK733) + DEF_ICON(BLANK734) + DEF_ICON(BLANK735) + DEF_ICON(BLANK736) + DEF_ICON(BLANK737) + DEF_ICON(BLANK738) + DEF_ICON(BLANK739) + DEF_ICON(BLANK740) + DEF_ICON(BLANK741) + DEF_ICON(BLANK742) + DEF_ICON(BLANK743) + DEF_ICON(BLANK744) + DEF_ICON(BLANK745) + DEF_ICON(BLANK746) + DEF_ICON(BLANK747) + DEF_ICON(BLANK748) + DEF_ICON(BLANK749) + DEF_ICON(BLANK750) + DEF_ICON(BLANK751) + DEF_ICON(BLANK752) + DEF_ICON(BLANK753) + DEF_ICON(BLANK754) + DEF_ICON(BLANK755) /* EMPTY */ -DEF_ICON(ICON_BLANK760) -DEF_ICON(ICON_BLANK761) -DEF_ICON(ICON_BLANK762) -DEF_ICON(ICON_BLANK763) -DEF_ICON(ICON_BLANK764) -DEF_ICON(ICON_BLANK765) -DEF_ICON(ICON_BLANK766) -DEF_ICON(ICON_BLANK767) -DEF_ICON(ICON_BLANK768) -DEF_ICON(ICON_BLANK769) -DEF_ICON(ICON_BLANK770) -DEF_ICON(ICON_BLANK771) -DEF_ICON(ICON_BLANK772) -DEF_ICON(ICON_BLANK773) -DEF_ICON(ICON_BLANK774) -DEF_ICON(ICON_BLANK775) -DEF_ICON(ICON_BLANK776) -DEF_ICON(ICON_BLANK777) -DEF_ICON(ICON_BLANK778) -DEF_ICON(ICON_BLANK779) -DEF_ICON(ICON_BLANK780) -DEF_ICON(ICON_BLANK781) -DEF_ICON(ICON_BLANK782) -DEF_ICON(ICON_BLANK783) -DEF_ICON(ICON_BLANK784) -DEF_ICON(ICON_BLANK785) + DEF_ICON(BLANK760) + DEF_ICON(BLANK761) + DEF_ICON(BLANK762) + DEF_ICON(BLANK763) + DEF_ICON(BLANK764) + DEF_ICON(BLANK765) + DEF_ICON(BLANK766) + DEF_ICON(BLANK767) + DEF_ICON(BLANK768) + DEF_ICON(BLANK769) + DEF_ICON(BLANK770) + DEF_ICON(BLANK771) + DEF_ICON(BLANK772) + DEF_ICON(BLANK773) + DEF_ICON(BLANK774) + DEF_ICON(BLANK775) + DEF_ICON(BLANK776) + DEF_ICON(BLANK777) + DEF_ICON(BLANK778) + DEF_ICON(BLANK779) + DEF_ICON(BLANK780) + DEF_ICON(BLANK781) + DEF_ICON(BLANK782) + DEF_ICON(BLANK783) + DEF_ICON(BLANK784) + DEF_ICON(BLANK785) +#endif /* MODIFIERS */ -DEF_ICON(ICON_MODIFIER) -DEF_ICON(ICON_MOD_WAVE) -DEF_ICON(ICON_MOD_BUILD) -DEF_ICON(ICON_MOD_DECIM) -DEF_ICON(ICON_MOD_MIRROR) -DEF_ICON(ICON_MOD_SOFT) -DEF_ICON(ICON_MOD_SUBSURF) -DEF_ICON(ICON_HOOK) -DEF_ICON(ICON_MOD_PHYSICS) -DEF_ICON(ICON_MOD_PARTICLES) -DEF_ICON(ICON_MOD_BOOLEAN) -DEF_ICON(ICON_MOD_EDGESPLIT) -DEF_ICON(ICON_MOD_ARRAY) -DEF_ICON(ICON_MOD_UVPROJECT) -DEF_ICON(ICON_MOD_DISPLACE) -DEF_ICON(ICON_MOD_CURVE) -DEF_ICON(ICON_MOD_LATTICE) -DEF_ICON(ICON_CONSTRAINT_DATA) -DEF_ICON(ICON_MOD_ARMATURE) -DEF_ICON(ICON_MOD_SHRINKWRAP) -DEF_ICON(ICON_MOD_CAST) -DEF_ICON(ICON_MOD_MESHDEFORM) -DEF_ICON(ICON_MOD_BEVEL) -DEF_ICON(ICON_MOD_SMOOTH) -DEF_ICON(ICON_MOD_SIMPLEDEFORM) -DEF_ICON(ICON_MOD_MASK) +DEF_ICON(MODIFIER) +DEF_ICON(MOD_WAVE) +DEF_ICON(MOD_BUILD) +DEF_ICON(MOD_DECIM) +DEF_ICON(MOD_MIRROR) +DEF_ICON(MOD_SOFT) +DEF_ICON(MOD_SUBSURF) +DEF_ICON(HOOK) +DEF_ICON(MOD_PHYSICS) +DEF_ICON(MOD_PARTICLES) +DEF_ICON(MOD_BOOLEAN) +DEF_ICON(MOD_EDGESPLIT) +DEF_ICON(MOD_ARRAY) +DEF_ICON(MOD_UVPROJECT) +DEF_ICON(MOD_DISPLACE) +DEF_ICON(MOD_CURVE) +DEF_ICON(MOD_LATTICE) +DEF_ICON(CONSTRAINT_DATA) +DEF_ICON(MOD_ARMATURE) +DEF_ICON(MOD_SHRINKWRAP) +DEF_ICON(MOD_CAST) +DEF_ICON(MOD_MESHDEFORM) +DEF_ICON(MOD_BEVEL) +DEF_ICON(MOD_SMOOTH) +DEF_ICON(MOD_SIMPLEDEFORM) +DEF_ICON(MOD_MASK) /* MODIFIERS */ -DEF_ICON(ICON_MOD_CLOTH) -DEF_ICON(ICON_MOD_EXPLODE) -DEF_ICON(ICON_MOD_FLUIDSIM) -DEF_ICON(ICON_MOD_MULTIRES) -DEF_ICON(ICON_MOD_SMOKE) -DEF_ICON(ICON_MOD_SOLIDIFY) -DEF_ICON(ICON_MOD_SCREW) -DEF_ICON(ICON_BLANK160) -DEF_ICON(ICON_BLANK161) -DEF_ICON(ICON_BLANK162) -DEF_ICON(ICON_BLANK163) -DEF_ICON(ICON_BLANK164) -DEF_ICON(ICON_BLANK165) -DEF_ICON(ICON_BLANK166) -DEF_ICON(ICON_BLANK167) -DEF_ICON(ICON_BLANK168) -DEF_ICON(ICON_BLANK169) -DEF_ICON(ICON_BLANK170) -DEF_ICON(ICON_BLANK171) -DEF_ICON(ICON_BLANK172) -DEF_ICON(ICON_BLANK173) -DEF_ICON(ICON_BLANK174) -DEF_ICON(ICON_BLANK175) -DEF_ICON(ICON_BLANK176) -DEF_ICON(ICON_BLANK177) -DEF_ICON(ICON_BLANK177b) +DEF_ICON(MOD_CLOTH) +DEF_ICON(MOD_EXPLODE) +DEF_ICON(MOD_FLUIDSIM) +DEF_ICON(MOD_MULTIRES) +DEF_ICON(MOD_SMOKE) +DEF_ICON(MOD_SOLIDIFY) +DEF_ICON(MOD_SCREW) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK160) + DEF_ICON(BLANK161) + DEF_ICON(BLANK162) + DEF_ICON(BLANK163) + DEF_ICON(BLANK164) + DEF_ICON(BLANK165) + DEF_ICON(BLANK166) + DEF_ICON(BLANK167) + DEF_ICON(BLANK168) + DEF_ICON(BLANK169) + DEF_ICON(BLANK170) + DEF_ICON(BLANK171) + DEF_ICON(BLANK172) + DEF_ICON(BLANK173) + DEF_ICON(BLANK174) + DEF_ICON(BLANK175) + DEF_ICON(BLANK176) + DEF_ICON(BLANK177) + DEF_ICON(BLANK177b) +#endif /* ANIMATION */ -DEF_ICON(ICON_REC) -DEF_ICON(ICON_PLAY) -DEF_ICON(ICON_FF) -DEF_ICON(ICON_REW) -DEF_ICON(ICON_PAUSE) -DEF_ICON(ICON_PREV_KEYFRAME) -DEF_ICON(ICON_NEXT_KEYFRAME) -DEF_ICON(ICON_PLAY_AUDIO) -DEF_ICON(ICON_PLAY_REVERSE) -DEF_ICON(ICON_PREVIEW_RANGE) -DEF_ICON(ICON_BLANK180) -DEF_ICON(ICON_PMARKER_ACT) -DEF_ICON(ICON_PMARKER_SEL) -DEF_ICON(ICON_PMARKER) -DEF_ICON(ICON_MARKER_HLT) -DEF_ICON(ICON_MARKER) -DEF_ICON(ICON_SPACE2) // XXX -DEF_ICON(ICON_SPACE3) // XXX -DEF_ICON(ICON_BLANK181) -DEF_ICON(ICON_KEY_DEHLT) -DEF_ICON(ICON_KEY_HLT) -DEF_ICON(ICON_MUTE_IPO_OFF) -DEF_ICON(ICON_MUTE_IPO_ON) -DEF_ICON(ICON_BLANK182) -DEF_ICON(ICON_BLANK183) -DEF_ICON(ICON_BLANK183b) +DEF_ICON(REC) +DEF_ICON(PLAY) +DEF_ICON(FF) +DEF_ICON(REW) +DEF_ICON(PAUSE) +DEF_ICON(PREV_KEYFRAME) +DEF_ICON(NEXT_KEYFRAME) +DEF_ICON(PLAY_AUDIO) +DEF_ICON(PLAY_REVERSE) +DEF_ICON(PREVIEW_RANGE) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK180) +#endif +DEF_ICON(PMARKER_ACT) +DEF_ICON(PMARKER_SEL) +DEF_ICON(PMARKER) +DEF_ICON(MARKER_HLT) +DEF_ICON(MARKER) +DEF_ICON(SPACE2) // XXX +DEF_ICON(SPACE3) // XXX +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK181) +#endif +DEF_ICON(KEY_DEHLT) +DEF_ICON(KEY_HLT) +DEF_ICON(MUTE_IPO_OFF) +DEF_ICON(MUTE_IPO_ON) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK182) + DEF_ICON(BLANK183) + DEF_ICON(BLANK183b) /* available */ -DEF_ICON(ICON_BLANK184) -DEF_ICON(ICON_BLANK185) -DEF_ICON(ICON_BLANK186) -DEF_ICON(ICON_BLANK187) -DEF_ICON(ICON_BLANK188) -DEF_ICON(ICON_BLANK189) -DEF_ICON(ICON_BLANK190) -DEF_ICON(ICON_BLANK191) -DEF_ICON(ICON_BLANK192) -DEF_ICON(ICON_BLANK193) -DEF_ICON(ICON_BLANK194) -DEF_ICON(ICON_BLANK195) -DEF_ICON(ICON_BLANK196) -DEF_ICON(ICON_BLANK197) -DEF_ICON(ICON_BLANK198) -DEF_ICON(ICON_BLANK199) -DEF_ICON(ICON_BLANK200) -DEF_ICON(ICON_BLANK201) -DEF_ICON(ICON_BLANK202) -DEF_ICON(ICON_BLANK203) -DEF_ICON(ICON_BLANK204) -DEF_ICON(ICON_BLANK205) -DEF_ICON(ICON_BLANK206) -DEF_ICON(ICON_BLANK207) -DEF_ICON(ICON_BLANK208) -DEF_ICON(ICON_BLANK208b) + DEF_ICON(BLANK184) + DEF_ICON(BLANK185) + DEF_ICON(BLANK186) + DEF_ICON(BLANK187) + DEF_ICON(BLANK188) + DEF_ICON(BLANK189) + DEF_ICON(BLANK190) + DEF_ICON(BLANK191) + DEF_ICON(BLANK192) + DEF_ICON(BLANK193) + DEF_ICON(BLANK194) + DEF_ICON(BLANK195) + DEF_ICON(BLANK196) + DEF_ICON(BLANK197) + DEF_ICON(BLANK198) + DEF_ICON(BLANK199) + DEF_ICON(BLANK200) + DEF_ICON(BLANK201) + DEF_ICON(BLANK202) + DEF_ICON(BLANK203) + DEF_ICON(BLANK204) + DEF_ICON(BLANK205) + DEF_ICON(BLANK206) + DEF_ICON(BLANK207) + DEF_ICON(BLANK208) + DEF_ICON(BLANK208b) +#endif /* EDITING */ -DEF_ICON(ICON_VERTEXSEL) -DEF_ICON(ICON_EDGESEL) -DEF_ICON(ICON_FACESEL) -DEF_ICON(ICON_LINKEDSEL) -DEF_ICON(ICON_BLANK210) -DEF_ICON(ICON_ROTATE) -DEF_ICON(ICON_CURSOR) -DEF_ICON(ICON_ROTATECOLLECTION) -DEF_ICON(ICON_ROTATECENTER) -DEF_ICON(ICON_ROTACTIVE) -DEF_ICON(ICON_ALIGN) -DEF_ICON(ICON_BLANK211) -DEF_ICON(ICON_SMOOTHCURVE) -DEF_ICON(ICON_SPHERECURVE) -DEF_ICON(ICON_ROOTCURVE) -DEF_ICON(ICON_SHARPCURVE) -DEF_ICON(ICON_LINCURVE) -DEF_ICON(ICON_NOCURVE) -DEF_ICON(ICON_RNDCURVE) -DEF_ICON(ICON_PROP_OFF) -DEF_ICON(ICON_PROP_ON) -DEF_ICON(ICON_PROP_CON) -DEF_ICON(ICON_BLANK212) -DEF_ICON(ICON_PARTICLE_POINT) -DEF_ICON(ICON_PARTICLE_TIP) -DEF_ICON(ICON_PARTICLE_PATH) +DEF_ICON(VERTEXSEL) +DEF_ICON(EDGESEL) +DEF_ICON(FACESEL) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK209) + DEF_ICON(BLANK210) +#endif +DEF_ICON(ROTATE) +DEF_ICON(CURSOR) +DEF_ICON(ROTATECOLLECTION) +DEF_ICON(ROTATECENTER) +DEF_ICON(ROTACTIVE) +DEF_ICON(ALIGN) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK211) +#endif +DEF_ICON(SMOOTHCURVE) +DEF_ICON(SPHERECURVE) +DEF_ICON(ROOTCURVE) +DEF_ICON(SHARPCURVE) +DEF_ICON(LINCURVE) +DEF_ICON(NOCURVE) +DEF_ICON(RNDCURVE) +DEF_ICON(PROP_OFF) +DEF_ICON(PROP_ON) +DEF_ICON(PROP_CON) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK212) +#endif +DEF_ICON(PARTICLE_POINT) +DEF_ICON(PARTICLE_TIP) +DEF_ICON(PARTICLE_PATH) /* EDITING */ -DEF_ICON(ICON_MAN_TRANS) -DEF_ICON(ICON_MAN_ROT) -DEF_ICON(ICON_MAN_SCALE) -DEF_ICON(ICON_MANIPUL) -DEF_ICON(ICON_SNAP_OFF) -DEF_ICON(ICON_SNAP_ON) -DEF_ICON(ICON_SNAP_NORMAL) -DEF_ICON(ICON_SNAP_INCREMENT) -DEF_ICON(ICON_SNAP_VERTEX) -DEF_ICON(ICON_SNAP_EDGE) -DEF_ICON(ICON_SNAP_FACE) -DEF_ICON(ICON_SNAP_VOLUME) -DEF_ICON(ICON_UVS_FACE) -DEF_ICON(ICON_STICKY_UVS_LOC) -DEF_ICON(ICON_STICKY_UVS_DISABLE) -DEF_ICON(ICON_STICKY_UVS_VERT) -DEF_ICON(ICON_CLIPUV_DEHLT) -DEF_ICON(ICON_CLIPUV_HLT) -DEF_ICON(ICON_SNAP_PEEL_OBJECT) -DEF_ICON(ICON_GRID) -DEF_ICON(ICON_GEARS) -DEF_ICON(ICON_BLANK221) -DEF_ICON(ICON_BLANK224) -DEF_ICON(ICON_BLANK225) -DEF_ICON(ICON_BLANK226) -DEF_ICON(ICON_BLANK226b) +DEF_ICON(MAN_TRANS) +DEF_ICON(MAN_ROT) +DEF_ICON(MAN_SCALE) +DEF_ICON(MANIPUL) +DEF_ICON(SNAP_OFF) +DEF_ICON(SNAP_ON) +DEF_ICON(SNAP_NORMAL) +DEF_ICON(SNAP_INCREMENT) +DEF_ICON(SNAP_VERTEX) +DEF_ICON(SNAP_EDGE) +DEF_ICON(SNAP_FACE) +DEF_ICON(SNAP_VOLUME) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK220) +#endif +DEF_ICON(STICKY_UVS_LOC) +DEF_ICON(STICKY_UVS_DISABLE) +DEF_ICON(STICKY_UVS_VERT) +DEF_ICON(CLIPUV_DEHLT) +DEF_ICON(CLIPUV_HLT) +DEF_ICON(SNAP_PEEL_OBJECT) +DEF_ICON(GRID) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK221) + DEF_ICON(BLANK222) + DEF_ICON(BLANK224) + DEF_ICON(BLANK225) + DEF_ICON(BLANK226) + DEF_ICON(BLANK226b) +#endif /* EDITING */ -DEF_ICON(ICON_PASTEDOWN) -DEF_ICON(ICON_COPYDOWN) -DEF_ICON(ICON_PASTEFLIPUP) -DEF_ICON(ICON_PASTEFLIPDOWN) -DEF_ICON(ICON_BLANK227) -DEF_ICON(ICON_BLANK228) -DEF_ICON(ICON_BLANK229) -DEF_ICON(ICON_BLANK230) -DEF_ICON(ICON_SNAP_SURFACE) -DEF_ICON(ICON_BLANK232) -DEF_ICON(ICON_BLANK233) -DEF_ICON(ICON_RETOPO) -DEF_ICON(ICON_UV_VERTEXSEL) -DEF_ICON(ICON_UV_EDGESEL) -DEF_ICON(ICON_UV_FACESEL) -DEF_ICON(ICON_UV_ISLANDSEL) -DEF_ICON(ICON_UV_SYNC_SELECT) -DEF_ICON(ICON_BLANK240) -DEF_ICON(ICON_BLANK241) -DEF_ICON(ICON_BLANK242) -DEF_ICON(ICON_BLANK243) -DEF_ICON(ICON_BLANK244) -DEF_ICON(ICON_BLANK245) -DEF_ICON(ICON_BLANK246) -DEF_ICON(ICON_BLANK247) -DEF_ICON(ICON_BLANK247b) +DEF_ICON(PASTEDOWN) +DEF_ICON(COPYDOWN) +DEF_ICON(PASTEFLIPUP) +DEF_ICON(PASTEFLIPDOWN) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK227) + DEF_ICON(BLANK228) + DEF_ICON(BLANK229) + DEF_ICON(BLANK230) +#endif +DEF_ICON(SNAP_SURFACE) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK232) + DEF_ICON(BLANK233) +#endif +DEF_ICON(RETOPO) +DEF_ICON(UV_VERTEXSEL) +DEF_ICON(UV_EDGESEL) +DEF_ICON(UV_FACESEL) +DEF_ICON(UV_ISLANDSEL) +DEF_ICON(UV_SYNC_SELECT) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK240) + DEF_ICON(BLANK241) + DEF_ICON(BLANK242) + DEF_ICON(BLANK243) + DEF_ICON(BLANK244) + DEF_ICON(BLANK245) + DEF_ICON(BLANK246) + DEF_ICON(BLANK247) + DEF_ICON(BLANK247b) +#endif /* 3D VIEW */ -DEF_ICON(ICON_BBOX) -DEF_ICON(ICON_WIRE) -DEF_ICON(ICON_SOLID) -DEF_ICON(ICON_SMOOTH) -DEF_ICON(ICON_POTATO) -DEF_ICON(ICON_BLANK248) -DEF_ICON(ICON_ORTHO) -DEF_ICON(ICON_ORTHO_OFF) -DEF_ICON(ICON_CAMERA) -DEF_ICON(ICON_LOCKVIEW_OFF) -DEF_ICON(ICON_LOCKVIEW_ON) -DEF_ICON(ICON_BLANK250) -DEF_ICON(ICON_AXIS_SIDE) -DEF_ICON(ICON_AXIS_FRONT) -DEF_ICON(ICON_AXIS_TOP) -DEF_ICON(ICON_NDOF_DOM) -DEF_ICON(ICON_NDOF_TURN) -DEF_ICON(ICON_NDOF_FLY) -DEF_ICON(ICON_NDOF_TRANS) -DEF_ICON(ICON_LAYER_USED) -DEF_ICON(ICON_LAYER_ACTIVE) -DEF_ICON(ICON_BLANK254) -DEF_ICON(ICON_BLANK255) -DEF_ICON(ICON_BLANK256) -DEF_ICON(ICON_BLANK257) -DEF_ICON(ICON_BLANK257b) +DEF_ICON(BBOX) +DEF_ICON(WIRE) +DEF_ICON(SOLID) +DEF_ICON(SMOOTH) +DEF_ICON(POTATO) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK248) +#endif +DEF_ICON(ORTHO) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK249) + DEF_ICON(BLANK250) +#endif +DEF_ICON(LOCKVIEW_OFF) +DEF_ICON(LOCKVIEW_ON) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK251) +#endif +DEF_ICON(AXIS_SIDE) +DEF_ICON(AXIS_FRONT) +DEF_ICON(AXIS_TOP) +DEF_ICON(NDOF_DOM) +DEF_ICON(NDOF_TURN) +DEF_ICON(NDOF_FLY) +DEF_ICON(NDOF_TRANS) +DEF_ICON(LAYER_USED) +DEF_ICON(LAYER_ACTIVE) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK254) + DEF_ICON(BLANK255) + DEF_ICON(BLANK256) + DEF_ICON(BLANK257) + DEF_ICON(BLANK257b) /* available */ -DEF_ICON(ICON_BLANK258) -DEF_ICON(ICON_BLANK259) -DEF_ICON(ICON_BLANK260) -DEF_ICON(ICON_BLANK261) -DEF_ICON(ICON_BLANK262) -DEF_ICON(ICON_BLANK263) -DEF_ICON(ICON_BLANK264) -DEF_ICON(ICON_BLANK265) -DEF_ICON(ICON_BLANK266) -DEF_ICON(ICON_BLANK267) -DEF_ICON(ICON_BLANK268) -DEF_ICON(ICON_BLANK269) -DEF_ICON(ICON_BLANK270) -DEF_ICON(ICON_BLANK271) -DEF_ICON(ICON_BLANK272) -DEF_ICON(ICON_BLANK273) -DEF_ICON(ICON_BLANK274) -DEF_ICON(ICON_BLANK275) -DEF_ICON(ICON_BLANK276) -DEF_ICON(ICON_BLANK277) -DEF_ICON(ICON_BLANK278) -DEF_ICON(ICON_BLANK279) -DEF_ICON(ICON_BLANK280) -DEF_ICON(ICON_BLANK281) -DEF_ICON(ICON_BLANK282) -DEF_ICON(ICON_BLANK282b) + DEF_ICON(BLANK258) + DEF_ICON(BLANK259) + DEF_ICON(BLANK260) + DEF_ICON(BLANK261) + DEF_ICON(BLANK262) + DEF_ICON(BLANK263) + DEF_ICON(BLANK264) + DEF_ICON(BLANK265) + DEF_ICON(BLANK266) + DEF_ICON(BLANK267) + DEF_ICON(BLANK268) + DEF_ICON(BLANK269) + DEF_ICON(BLANK270) + DEF_ICON(BLANK271) + DEF_ICON(BLANK272) + DEF_ICON(BLANK273) + DEF_ICON(BLANK274) + DEF_ICON(BLANK275) + DEF_ICON(BLANK276) + DEF_ICON(BLANK277) + DEF_ICON(BLANK278) + DEF_ICON(BLANK279) + DEF_ICON(BLANK280) + DEF_ICON(BLANK281) + DEF_ICON(BLANK282) + DEF_ICON(BLANK282b) +#endif /* FILE SELECT */ -DEF_ICON(ICON_SORTALPHA) -DEF_ICON(ICON_SORTBYEXT) -DEF_ICON(ICON_SORTTIME) -DEF_ICON(ICON_SORTSIZE) -DEF_ICON(ICON_LONGDISPLAY) -DEF_ICON(ICON_SHORTDISPLAY) -DEF_ICON(ICON_GHOST) -DEF_ICON(ICON_IMGDISPLAY) -DEF_ICON(ICON_BLANK284) -DEF_ICON(ICON_BLANK285) -DEF_ICON(ICON_BOOKMARKS) -DEF_ICON(ICON_FONTPREVIEW) -DEF_ICON(ICON_FILTER) -DEF_ICON(ICON_NEWFOLDER) -DEF_ICON(ICON_BLANK285F) -DEF_ICON(ICON_FILE_PARENT) -DEF_ICON(ICON_FILE_REFRESH) -DEF_ICON(ICON_FILE_FOLDER) -DEF_ICON(ICON_FILE_BLANK) -DEF_ICON(ICON_FILE_BLEND) -DEF_ICON(ICON_FILE_IMAGE) -DEF_ICON(ICON_FILE_MOVIE) -DEF_ICON(ICON_FILE_SCRIPT) -DEF_ICON(ICON_FILE_SOUND) -DEF_ICON(ICON_FILE_FONT) -DEF_ICON(ICON_BLANK291b) +DEF_ICON(SORTALPHA) +DEF_ICON(SORTBYEXT) +DEF_ICON(SORTTIME) +DEF_ICON(SORTSIZE) +DEF_ICON(LONGDISPLAY) +DEF_ICON(SHORTDISPLAY) +DEF_ICON(GHOST) +DEF_ICON(IMGDISPLAY) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK284) + DEF_ICON(BLANK285) +#endif +DEF_ICON(BOOKMARKS) +DEF_ICON(FONTPREVIEW) +DEF_ICON(FILTER) +DEF_ICON(NEWFOLDER) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK285F) +#endif +DEF_ICON(FILE_PARENT) +DEF_ICON(FILE_REFRESH) +DEF_ICON(FILE_FOLDER) +DEF_ICON(FILE_BLANK) +DEF_ICON(FILE_BLEND) +DEF_ICON(FILE_IMAGE) +DEF_ICON(FILE_MOVIE) +DEF_ICON(FILE_SCRIPT) +DEF_ICON(FILE_SOUND) +DEF_ICON(FILE_FONT) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK291b) /* available */ -DEF_ICON(ICON_BLANK292) -DEF_ICON(ICON_BLANK293) -DEF_ICON(ICON_BLANK294) -DEF_ICON(ICON_BLANK295) -DEF_ICON(ICON_BLANK296) -DEF_ICON(ICON_BLANK297) -DEF_ICON(ICON_BLANK298) -DEF_ICON(ICON_BLANK299) -DEF_ICON(ICON_BLANK300) -DEF_ICON(ICON_BLANK301) -DEF_ICON(ICON_BLANK302) -DEF_ICON(ICON_BLANK303) -DEF_ICON(ICON_BLANK304) -DEF_ICON(ICON_BLANK305) -DEF_ICON(ICON_BLANK306) -DEF_ICON(ICON_BACK) -DEF_ICON(ICON_FORWARD) -DEF_ICON(ICON_BLANK309) -DEF_ICON(ICON_BLANK310) -DEF_ICON(ICON_BLANK311) -DEF_ICON(ICON_BLANK312) -DEF_ICON(ICON_BLANK313) -DEF_ICON(ICON_BLANK314) -DEF_ICON(ICON_BLANK315) -DEF_ICON(ICON_BLANK316) -DEF_ICON(ICON_DISK_DRIVE) + DEF_ICON(BLANK292) + DEF_ICON(BLANK293) + DEF_ICON(BLANK294) + DEF_ICON(BLANK295) + DEF_ICON(BLANK296) + DEF_ICON(BLANK297) + DEF_ICON(BLANK298) + DEF_ICON(BLANK299) + DEF_ICON(BLANK300) + DEF_ICON(BLANK301) + DEF_ICON(BLANK302) + DEF_ICON(BLANK303) + DEF_ICON(BLANK304) + DEF_ICON(BLANK305) + DEF_ICON(BLANK306) +#endif +DEF_ICON(BACK) +DEF_ICON(FORWARD) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK309) + DEF_ICON(BLANK310) + DEF_ICON(BLANK311) + DEF_ICON(BLANK312) + DEF_ICON(BLANK313) + DEF_ICON(BLANK314) + DEF_ICON(BLANK315) + DEF_ICON(BLANK316) +#endif +DEF_ICON(DISK_DRIVE) /* SHADING / TEXT */ -DEF_ICON(ICON_MATPLANE) -DEF_ICON(ICON_MATSPHERE) -DEF_ICON(ICON_MATCUBE) -DEF_ICON(ICON_MONKEY) -DEF_ICON(ICON_HAIR) -DEF_ICON(ICON_ALIASED) -DEF_ICON(ICON_ANTIALIASED) -DEF_ICON(ICON_MAT_SPHERE_SKY) -DEF_ICON(ICON_BLANK319) -DEF_ICON(ICON_BLANK320) -DEF_ICON(ICON_BLANK321) -DEF_ICON(ICON_BLANK322) -DEF_ICON(ICON_WORDWRAP_OFF) -DEF_ICON(ICON_WORDWRAP_ON) -DEF_ICON(ICON_SYNTAX_OFF) -DEF_ICON(ICON_SYNTAX_ON) -DEF_ICON(ICON_LINENUMBERS_OFF) -DEF_ICON(ICON_LINENUMBERS_ON) -DEF_ICON(ICON_SCRIPTPLUGINS) // XXX CREATE NEW -DEF_ICON(ICON_BLANK323) -DEF_ICON(ICON_BLANK324) -DEF_ICON(ICON_BLANK325) -DEF_ICON(ICON_BLANK326) -DEF_ICON(ICON_BLANK327) -DEF_ICON(ICON_BLANK328) -DEF_ICON(ICON_BLANK328b) +DEF_ICON(MATPLANE) +DEF_ICON(MATSPHERE) +DEF_ICON(MATCUBE) +DEF_ICON(MONKEY) +DEF_ICON(HAIR) +DEF_ICON(ALIASED) +DEF_ICON(ANTIALIASED) +DEF_ICON(MAT_SPHERE_SKY) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK319) + DEF_ICON(BLANK320) + DEF_ICON(BLANK321) + DEF_ICON(BLANK322) +#endif +DEF_ICON(WORDWRAP_OFF) +DEF_ICON(WORDWRAP_ON) +DEF_ICON(SYNTAX_OFF) +DEF_ICON(SYNTAX_ON) +DEF_ICON(LINENUMBERS_OFF) +DEF_ICON(LINENUMBERS_ON) +DEF_ICON(SCRIPTPLUGINS) // XXX CREATE NEW +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK323) + DEF_ICON(BLANK324) + DEF_ICON(BLANK325) + DEF_ICON(BLANK326) + DEF_ICON(BLANK327) + DEF_ICON(BLANK328) + DEF_ICON(BLANK328b) +#endif /* SEQUENCE / IMAGE EDITOR */ -DEF_ICON(ICON_SEQ_SEQUENCER) -DEF_ICON(ICON_SEQ_PREVIEW) -DEF_ICON(ICON_SEQ_LUMA_WAVEFORM) -DEF_ICON(ICON_SEQ_CHROMA_SCOPE) -DEF_ICON(ICON_SEQ_HISTOGRAM) -DEF_ICON(ICON_SEQ_SPLITVIEW) -DEF_ICON(ICON_BLANK331) -DEF_ICON(ICON_BLANK332) -DEF_ICON(ICON_BLANK333) -DEF_ICON(ICON_IMAGE_RGB) // XXX CHANGE TO STRAIGHT ALPHA, Z ETC -DEF_ICON(ICON_IMAGE_RGB_ALPHA) -DEF_ICON(ICON_IMAGE_ALPHA) -DEF_ICON(ICON_IMAGE_ZDEPTH) -DEF_ICON(ICON_IMAGEFILE) -DEF_ICON(ICON_BLANK336) -DEF_ICON(ICON_BLANK337) -DEF_ICON(ICON_BLANK338) -DEF_ICON(ICON_BLANK339) -DEF_ICON(ICON_BLANK340) -DEF_ICON(ICON_BLANK341) -DEF_ICON(ICON_BLANK342) -DEF_ICON(ICON_BLANK343) -DEF_ICON(ICON_BLANK344) -DEF_ICON(ICON_BLANK345) -DEF_ICON(ICON_BLANK346) -DEF_ICON(ICON_BLANK346b) +DEF_ICON(SEQ_SEQUENCER) +DEF_ICON(SEQ_PREVIEW) +DEF_ICON(SEQ_LUMA_WAVEFORM) +DEF_ICON(SEQ_CHROMA_SCOPE) +DEF_ICON(SEQ_HISTOGRAM) +DEF_ICON(SEQ_SPLITVIEW) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK331) + DEF_ICON(BLANK332) + DEF_ICON(BLANK333) +#endif +DEF_ICON(IMAGE_RGB) // XXX CHANGE TO STRAIGHT ALPHA, Z ETC +DEF_ICON(IMAGE_RGB_ALPHA) +DEF_ICON(IMAGE_ALPHA) +DEF_ICON(IMAGE_ZDEPTH) +DEF_ICON(IMAGEFILE) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK336) + DEF_ICON(BLANK337) + DEF_ICON(BLANK338) + DEF_ICON(BLANK339) + DEF_ICON(BLANK340) + DEF_ICON(BLANK341) + DEF_ICON(BLANK342) + DEF_ICON(BLANK343) + DEF_ICON(BLANK344) + DEF_ICON(BLANK345) + DEF_ICON(BLANK346) + DEF_ICON(BLANK346b) +#endif /* brush icons */ -DEF_ICON(ICON_BRUSH_ADD) -DEF_ICON(ICON_BRUSH_BLOB) -DEF_ICON(ICON_BRUSH_BLUR) -DEF_ICON(ICON_BRUSH_CLAY) -DEF_ICON(ICON_BRUSH_CLONE) -DEF_ICON(ICON_BRUSH_CREASE) -DEF_ICON(ICON_BRUSH_DARKEN) -DEF_ICON(ICON_BRUSH_FILL) -DEF_ICON(ICON_BRUSH_FLATTEN) -DEF_ICON(ICON_BRUSH_GRAB) -DEF_ICON(ICON_BRUSH_INFLATE) -DEF_ICON(ICON_BRUSH_LAYER) -DEF_ICON(ICON_BRUSH_LIGHTEN) -DEF_ICON(ICON_BRUSH_MIX) -DEF_ICON(ICON_BRUSH_MULTIPLY) -DEF_ICON(ICON_BRUSH_NUDGE) -DEF_ICON(ICON_BRUSH_PINCH) -DEF_ICON(ICON_BRUSH_SCRAPE) -DEF_ICON(ICON_BRUSH_SCULPT_DRAW) -DEF_ICON(ICON_BRUSH_SMEAR) -DEF_ICON(ICON_BRUSH_SMOOTH) -DEF_ICON(ICON_BRUSH_SNAKE_HOOK) -DEF_ICON(ICON_BRUSH_SOFTEN) -DEF_ICON(ICON_BRUSH_SUBTRACT) -DEF_ICON(ICON_BRUSH_TEXDRAW) -DEF_ICON(ICON_BRUSH_THUMB) -DEF_ICON(ICON_BRUSH_ROTATE) -DEF_ICON(ICON_BRUSH_VERTEXDRAW) - - /* vector icons */ - -DEF_ICON(VICO_VIEW3D_VEC) -DEF_ICON(VICO_EDIT_VEC) -DEF_ICON(VICO_EDITMODE_DEHLT) -DEF_ICON(VICO_EDITMODE_HLT) -DEF_ICON(VICO_DISCLOSURE_TRI_RIGHT_VEC) -DEF_ICON(VICO_DISCLOSURE_TRI_DOWN_VEC) -DEF_ICON(VICO_MOVE_UP_VEC) -DEF_ICON(VICO_MOVE_DOWN_VEC) -DEF_ICON(VICO_X_VEC) -DEF_ICON(VICO_SMALL_TRI_RIGHT_VEC) +DEF_ICON(BRUSH_ADD) +DEF_ICON(BRUSH_BLOB) +DEF_ICON(BRUSH_BLUR) +DEF_ICON(BRUSH_CLAY) +DEF_ICON(BRUSH_CLONE) +DEF_ICON(BRUSH_CREASE) +DEF_ICON(BRUSH_DARKEN) +DEF_ICON(BRUSH_FILL) +DEF_ICON(BRUSH_FLATTEN) +DEF_ICON(BRUSH_GRAB) +DEF_ICON(BRUSH_INFLATE) +DEF_ICON(BRUSH_LAYER) +DEF_ICON(BRUSH_LIGHTEN) +DEF_ICON(BRUSH_MIX) +DEF_ICON(BRUSH_MULTIPLY) +DEF_ICON(BRUSH_NUDGE) +DEF_ICON(BRUSH_PINCH) +DEF_ICON(BRUSH_SCRAPE) +DEF_ICON(BRUSH_SCULPT_DRAW) +DEF_ICON(BRUSH_SMEAR) +DEF_ICON(BRUSH_SMOOTH) +DEF_ICON(BRUSH_SNAKE_HOOK) +DEF_ICON(BRUSH_SOFTEN) +DEF_ICON(BRUSH_SUBTRACT) +DEF_ICON(BRUSH_TEXDRAW) +DEF_ICON(BRUSH_THUMB) +DEF_ICON(BRUSH_ROTATE) +DEF_ICON(BRUSH_VERTEXDRAW) +/* vector icons, VICO_ prefix added */ +DEF_VICO(VIEW3D_VEC) +DEF_VICO(EDIT_VEC) +DEF_VICO(EDITMODE_DEHLT) +DEF_VICO(EDITMODE_HLT) +DEF_VICO(DISCLOSURE_TRI_RIGHT_VEC) +DEF_VICO(DISCLOSURE_TRI_DOWN_VEC) +DEF_VICO(MOVE_UP_VEC) +DEF_VICO(MOVE_DOWN_VEC) +DEF_VICO(X_VEC) +DEF_VICO(SMALL_TRI_RIGHT_VEC) diff --git a/source/blender/editors/include/UI_resources.h b/source/blender/editors/include/UI_resources.h index af3f91f8ba8..e3c83291089 100644 --- a/source/blender/editors/include/UI_resources.h +++ b/source/blender/editors/include/UI_resources.h @@ -35,7 +35,8 @@ /* elubie: TODO: move the typedef for icons to UI_interface_icons.h */ /* and add/replace include of UI_resources.h by UI_interface_icons.h */ -#define DEF_ICON(name) name, +#define DEF_ICON(name) ICON_##name, +#define DEF_VICO(name) VICO_##name, typedef enum { #define BIFICONID_FIRST (ICON_BLENDER) @@ -45,6 +46,7 @@ typedef enum { #define BIFNICONIDS (BIFICONID_LAST-BIFICONID_FIRST + 1) } BIFIconID; #undef DEF_ICON +#undef DEF_VICO typedef enum { diff --git a/source/blender/editors/interface/CMakeLists.txt b/source/blender/editors/interface/CMakeLists.txt index 31de4537c24..23a96cce3dc 100644 --- a/source/blender/editors/interface/CMakeLists.txt +++ b/source/blender/editors/interface/CMakeLists.txt @@ -56,8 +56,8 @@ IF(WITH_INTERNATIONAL) ADD_DEFINITIONS(-DINTERNATIONAL) ENDIF(WITH_INTERNATIONAL) -IF(NOT WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) -ENDIF(NOT WITH_PYTHON) +IF(WITH_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) +ENDIF(WITH_PYTHON) BLENDERLIB(bf_editor_interface "${SRC}" "${INC}") diff --git a/source/blender/editors/interface/SConscript b/source/blender/editors/interface/SConscript index 81964a661a4..639a5268ca2 100644 --- a/source/blender/editors/interface/SConscript +++ b/source/blender/editors/interface/SConscript @@ -16,7 +16,7 @@ defs = [] if env['WITH_BF_INTERNATIONAL']: defs.append('INTERNATIONAL') -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') env.BlenderLib ( 'bf_editors_interface', sources, Split(incs), defs, libtype=['core'], priority=[110] ) diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index f65b10eaaea..099629b0422 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -629,7 +629,7 @@ void uiEndBlock(const bContext *C, uiBlock *block) if(but->context) CTX_store_set((bContext*)C, but->context); - if(ot == NULL || WM_operator_poll((bContext*)C, ot)==0) { + if(ot == NULL || WM_operator_poll_context((bContext*)C, ot, but->opcontext)==0) { but->flag |= UI_BUT_DISABLED; but->lock = 1; } @@ -1645,7 +1645,7 @@ int ui_set_but_string(bContext *C, uiBut *but, const char *str) /* number editing */ double value; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON { char str_unit_convert[256]; int unit_type; @@ -1672,7 +1672,7 @@ int ui_set_but_string(bContext *C, uiBut *but, const char *str) } #else value= atof(str); -#endif +#endif // WITH_PYTHON if(!ui_is_but_float(but)) value= (int)floor(value + 0.5); if(but->type==NUMABS) value= fabs(value); diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c index 768be97f930..29278edf451 100644 --- a/source/blender/editors/interface/interface_draw.c +++ b/source/blender/editors/interface/interface_draw.c @@ -33,6 +33,7 @@ #include "DNA_screen_types.h" #include "BLI_math.h" +#include "BLI_rect.h" #include "BKE_colortools.h" #include "BKE_texture.h" @@ -1355,6 +1356,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect CurveMapPoint *cmp; float fx, fy, fac[2], zoomx, zoomy, offsx, offsy; GLint scissor[4]; + rcti scissor_new; int a; cumap= (CurveMapping *)(but->editcumap? but->editcumap: but->poin); @@ -1362,7 +1364,12 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect /* need scissor test, curve can draw outside of boundary */ glGetIntegerv(GL_VIEWPORT, scissor); - glScissor(ar->winrct.xmin + rect->xmin, ar->winrct.ymin+rect->ymin, rect->xmax-rect->xmin, rect->ymax-rect->ymin); + scissor_new.xmin= ar->winrct.xmin + rect->xmin; + scissor_new.ymin= ar->winrct.ymin + rect->ymin; + scissor_new.xmax= ar->winrct.xmin + rect->xmax; + scissor_new.ymax= ar->winrct.ymin + rect->ymax; + BLI_isect_rcti(&scissor_new, &ar->winrct, &scissor_new); + glScissor(scissor_new.xmin, scissor_new.ymin, scissor_new.xmax-scissor_new.xmin, scissor_new.ymax-scissor_new.ymin); /* calculate offset and zoom */ zoomx= (rect->xmax-rect->xmin-2.0*but->aspect)/(cumap->curr.xmax - cumap->curr.xmin); diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 5dbeb08d45b..d3f915cddce 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -29,6 +29,7 @@ #include #include #include +#include #include "MEM_guardedalloc.h" @@ -2991,42 +2992,43 @@ static int ui_numedit_but_HSVCUBE(uiBut *but, uiHandleButtonData *data, int mx, y= ((float)my-but->y1)/(but->y2-but->y1); CLAMP(x, 0.0, 1.0); CLAMP(y, 0.0, 1.0); - - if(but->a1==0) { - hsv[2]= x; - hsv[1]= y; - } - else if(but->a1==1) { - hsv[0]= x; - hsv[2]= y; - } - else if(but->a1==2) { - hsv[0]= x; - hsv[1]= y; - } - else if(but->a1==3) { - hsv[0]= x; - } - else if(but->a1==4) { - hsv[1]= x; - } - else if(but->a1==5) { - hsv[2]= x; - } - else if (but->a1==9){ - float range; - - /* vertical 'value' strip */ + switch((int)but->a1) { + case UI_GRAD_SV: + hsv[2]= x; + hsv[1]= y; + break; + case UI_GRAD_HV: + hsv[0]= x; + hsv[2]= y; + break; + case UI_GRAD_HS: + hsv[0]= x; + hsv[1]= y; + break; + case UI_GRAD_H: + hsv[0]= x; + break; + case UI_GRAD_S: + hsv[1]= x; + break; + case UI_GRAD_V: + hsv[2]= x; + break; + case UI_GRAD_V_ALT: + /* vertical 'value' strip */ + /* exception only for value strip - use the range set in but->min/max */ - range = but->softmax - but->softmin; - hsv[2] = y*range + but->softmin; + hsv[2] = y * (but->softmax - but->softmin) + but->softmin; if (color_profile) hsv[2] = srgb_to_linearrgb(hsv[2]); if (hsv[2] > but->softmax) hsv[2] = but->softmax; + break; + default: + assert(!"invalid hsv type"); } hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb+1, rgb+2); @@ -3061,7 +3063,7 @@ static int ui_do_but_HSVCUBE(bContext *C, uiBlock *block, uiBut *but, uiHandleBu return WM_UI_HANDLER_BREAK; } else if (event->type == ZEROKEY && event->val == KM_PRESS) { - if (but->a1==9){ + if (but->a1==UI_GRAD_V_ALT){ int len; /* reset only value */ @@ -4429,7 +4431,7 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event) retval= ui_do_but_BUT(C, but, data, event); break; case COL: - if(but->a1 == 9) // signal to prevent calling up color picker + if(but->a1 == UI_GRAD_V_ALT) // signal to prevent calling up color picker retval= ui_do_but_EXIT(C, but, data, event); else retval= ui_do_but_BLOCK(C, but, data, event); diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 5f8d604817a..e244565a6a6 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -434,7 +434,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but) if(but->flag & UI_BUT_DISABLED) { const char *poll_msg; CTX_wm_operator_poll_msg_set(C, NULL); - WM_operator_poll(C, but->optype); + WM_operator_poll_context(C, but->optype, but->opcontext); poll_msg= CTX_wm_operator_poll_msg_get(C); if(poll_msg) { BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Disabled: %s", poll_msg); diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index e4837920c3e..9995ddb0d51 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -1821,7 +1821,7 @@ void uiTemplateColorWheel(uiLayout *layout, PointerRNA *ptr, char *propname, int uiItemS(row); if (value_slider) - uiDefButR(block, HSVCUBE, 0, "", WHEEL_SIZE+6, 0, 14, WHEEL_SIZE, ptr, propname, -1, softmin, softmax, 9, 0, ""); + uiDefButR(block, HSVCUBE, 0, "", WHEEL_SIZE+6, 0, 14, WHEEL_SIZE, ptr, propname, -1, softmin, softmax, UI_GRAD_V_ALT, 0, ""); } /********************* Layer Buttons Template ************************/ diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index ed7284bf264..2a6ab525f89 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -1729,7 +1729,7 @@ void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, rcti *rect) void ui_draw_gradient(rcti *rect, float *hsv, int type, float alpha) { int a; - float h= hsv[0], s= hsv[1], v= hsv[0]; + float h= hsv[0], s= hsv[1], v= hsv[2]; float dx, dy, sx1, sx2, sy; float col0[4][3]; // left half, rect bottom to top float col1[4][3]; // right half, rect bottom to top @@ -2905,7 +2905,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct break; case HSVCUBE: - if(but->a1==9) // vertical V slider, uses new widget draw now + if(but->a1 == UI_GRAD_V_ALT) // vertical V slider, uses new widget draw now ui_draw_but_HSV_v(but, rect); else // other HSV pickers... ui_draw_but_HSVCUBE(but, rect); diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c index a17d578fc06..c1c10bf33c6 100644 --- a/source/blender/editors/interface/view2d.c +++ b/source/blender/editors/interface/view2d.c @@ -1069,7 +1069,7 @@ static void step_to_grid(float *step, int *power, int unit) /* for frames, we want 1.0 frame intervals only */ if (unit == V2D_UNIT_FRAMES) { rem = 1.0f; - *step = 1.0f; + *step = 2.0f; /* use 2 since there are grid lines drawn inbetween, this way to get 1 line per frane */ } /* prevents printing 1.0 2.0 3.0 etc */ diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c index 48523ec1a5a..5500d9aae8d 100644 --- a/source/blender/editors/interface/view2d_ops.c +++ b/source/blender/editors/interface/view2d_ops.c @@ -46,6 +46,8 @@ #include "UI_view2d.h" +#include "PIL_time.h" /* USER_ZOOM_CONT */ + static int view2d_poll(bContext *C) { ARegion *ar= CTX_wm_region(C); @@ -493,7 +495,11 @@ void VIEW2D_OT_scroll_up(wmOperatorType *ot) typedef struct v2dViewZoomData { View2D *v2d; /* view2d we're operating in */ ARegion *ar; - + + /* needed for continuous zoom */ + wmTimer *timer; + double timer_lastdraw; + int lastx, lasty; /* previous x/y values of mouse in window */ float dx, dy; /* running tally of previous delta values (for obtaining final zoom) */ float mx_2d, my_2d; /* initial mouse location in v2d coords */ @@ -689,7 +695,7 @@ void VIEW2D_OT_zoom_in(wmOperatorType *ot) /* api callbacks */ ot->invoke= view_zoomin_invoke; - ot->exec= view_zoomin_exec; +// ot->exec= view_zoomin_exec; // XXX, needs view_zoomdrag_init called first. ot->poll= view_zoom_poll; /* rna - must keep these in sync with the other operators */ @@ -746,7 +752,7 @@ void VIEW2D_OT_zoom_out(wmOperatorType *ot) /* api callbacks */ ot->invoke= view_zoomout_invoke; - ot->exec= view_zoomout_exec; +// ot->exec= view_zoomout_exec; // XXX, needs view_zoomdrag_init called first. ot->poll= view_zoom_poll; /* rna - must keep these in sync with the other operators */ @@ -773,7 +779,18 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) /* get amount to move view by */ dx= RNA_float_get(op->ptr, "deltax"); dy= RNA_float_get(op->ptr, "deltay"); - + + /* continous zoom shouldn't move that fast... */ + if (U.viewzoom == USER_ZOOM_CONT) { // XXX store this setting as RNA prop? + double time= PIL_check_seconds_timer(); + float time_step= (float)(time - vzd->timer_lastdraw); + + dx *= time_step * 0.5f; + dy *= time_step * 0.5f; + + vzd->timer_lastdraw= time; + } + /* only move view on an axis if change is allowed */ if ((v2d->keepzoom & V2D_LOCKZOOM_X)==0) { if (v2d->keepofs & V2D_LOCKOFS_X) { @@ -823,9 +840,14 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) } /* cleanup temp customdata */ -static void view_zoomdrag_exit(wmOperator *op) +static void view_zoomdrag_exit(bContext *C, wmOperator *op) { if (op->customdata) { + v2dViewZoomData *vzd= op->customdata; + + if(vzd->timer) + WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), vzd->timer); + MEM_freeN(op->customdata); op->customdata= NULL; } @@ -838,7 +860,7 @@ static int view_zoomdrag_exec(bContext *C, wmOperator *op) return OPERATOR_PASS_THROUGH; view_zoomdrag_apply(C, op); - view_zoomdrag_exit(op); + view_zoomdrag_exit(C, op); return OPERATOR_FINISHED; } @@ -873,7 +895,7 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, wmEvent *event) RNA_float_set(op->ptr, "deltay", dy); view_zoomdrag_apply(C, op); - view_zoomdrag_exit(op); + view_zoomdrag_exit(C, op); return OPERATOR_FINISHED; } @@ -902,6 +924,12 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, wmEvent *event) /* add temp handler */ WM_event_add_modal_handler(C, op); + if (U.viewzoom == USER_ZOOM_CONT) { + /* needs a timer to continue redrawing */ + vzd->timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.01f); + vzd->timer_lastdraw= PIL_check_seconds_timer(); + } + return OPERATOR_RUNNING_MODAL; } @@ -912,85 +940,87 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, wmEvent *event) View2D *v2d= vzd->v2d; /* execute the events */ - switch (event->type) { - case MOUSEMOVE: - { - float dx, dy; + if (event->type == TIMER && event->customdata == vzd->timer) { + view_zoomdrag_apply(C, op); + } + else if(event->type == MOUSEMOVE) { + float dx, dy; + + /* calculate new delta transform, based on zooming mode */ + if (U.viewzoom == USER_ZOOM_SCALE) { + /* 'scale' zooming */ + float dist; - /* calculate new delta transform, based on zooming mode */ - if (U.viewzoom == USER_ZOOM_SCALE) { - /* 'scale' zooming */ - float dist; - - /* x-axis transform */ - dist = (v2d->mask.xmax - v2d->mask.xmin) / 2.0f; - dx= 1.0f - ((float)fabs(vzd->lastx - dist) + 2.0f) / ((float)fabs(event->x - dist) + 2.0f); - dx*= 0.5f * (v2d->cur.xmax - v2d->cur.xmin); - - /* y-axis transform */ - dist = (v2d->mask.ymax - v2d->mask.ymin) / 2.0f; - dy= 1.0f - ((float)fabs(vzd->lasty - dist) + 2.0f) / ((float)fabs(event->y - dist) + 2.0f); - dy*= 0.5f * (v2d->cur.ymax - v2d->cur.ymin); - } - else { - /* 'continuous' or 'dolly' */ - float fac; - - /* x-axis transform */ - fac= 0.01f * (event->x - vzd->lastx); - dx= fac * (v2d->cur.xmax - v2d->cur.xmin); - - /* y-axis transform */ - fac= 0.01f * (event->y - vzd->lasty); - dy= fac * (v2d->cur.ymax - v2d->cur.ymin); - - /* continous zoom shouldn't move that fast... */ - if (U.viewzoom == USER_ZOOM_CONT) { // XXX store this setting as RNA prop? - dx /= 20.0f; - dy /= 20.0f; - } - } + /* x-axis transform */ + dist = (v2d->mask.xmax - v2d->mask.xmin) / 2.0f; + dx= 1.0f - ((float)fabs(vzd->lastx - dist) + 2.0f) / ((float)fabs(event->x - dist) + 2.0f); + dx*= 0.5f * (v2d->cur.xmax - v2d->cur.xmin); - /* set transform amount, and add current deltas to stored total delta (for redo) */ - RNA_float_set(op->ptr, "deltax", dx); - RNA_float_set(op->ptr, "deltay", dy); - vzd->dx += dx; - vzd->dy += dy; - - /* store mouse coordinates for next time, if not doing continuous zoom - * - continuous zoom only depends on distance of mouse to starting point to determine rate of change - */ - if (U.viewzoom != USER_ZOOM_CONT) { // XXX store this setting as RNA prop? - vzd->lastx= event->x; - vzd->lasty= event->y; - } - - /* apply zooming */ - view_zoomdrag_apply(C, op); + /* y-axis transform */ + dist = (v2d->mask.ymax - v2d->mask.ymin) / 2.0f; + dy= 1.0f - ((float)fabs(vzd->lasty - dist) + 2.0f) / ((float)fabs(event->y - dist) + 2.0f); + dy*= 0.5f * (v2d->cur.ymax - v2d->cur.ymin); } - break; + else { + /* 'continuous' or 'dolly' */ + float fac; - case LEFTMOUSE: - case MIDDLEMOUSE: - if (event->val==KM_RELEASE) { - /* for redo, store the overall deltas - need to respect zoom-locks here... */ - if ((v2d->keepzoom & V2D_LOCKZOOM_X)==0) - RNA_float_set(op->ptr, "deltax", vzd->dx); - else - RNA_float_set(op->ptr, "deltax", 0); - - if ((v2d->keepzoom & V2D_LOCKZOOM_Y)==0) - RNA_float_set(op->ptr, "deltay", vzd->dy); - else - RNA_float_set(op->ptr, "deltay", 0); + /* x-axis transform */ + fac= 0.01f * (event->x - vzd->lastx); + dx= fac * (v2d->cur.xmax - v2d->cur.xmin); + + /* y-axis transform */ + fac= 0.01f * (event->y - vzd->lasty); + dy= fac * (v2d->cur.ymax - v2d->cur.ymin); +#if 0 + /* continous zoom shouldn't move that fast... */ + if (U.viewzoom == USER_ZOOM_CONT) { // XXX store this setting as RNA prop? + double time= PIL_check_seconds_timer(); + float time_step= (float)(time - vzd->timer_lastdraw); + + dx /= (0.1f / time_step); + dy /= (0.1f / time_step); - /* free customdata */ - view_zoomdrag_exit(op); - WM_cursor_restore(CTX_wm_window(C)); - - return OPERATOR_FINISHED; + vzd->timer_lastdraw= time; } - break; +#endif + } + + /* set transform amount, and add current deltas to stored total delta (for redo) */ + RNA_float_set(op->ptr, "deltax", dx); + RNA_float_set(op->ptr, "deltay", dy); + vzd->dx += dx; + vzd->dy += dy; + + /* store mouse coordinates for next time, if not doing continuous zoom + * - continuous zoom only depends on distance of mouse to starting point to determine rate of change + */ + if (U.viewzoom != USER_ZOOM_CONT) { // XXX store this setting as RNA prop? + vzd->lastx= event->x; + vzd->lasty= event->y; + } + + /* apply zooming */ + view_zoomdrag_apply(C, op); + } else if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE)) { + if (event->val==KM_RELEASE) { + /* for redo, store the overall deltas - need to respect zoom-locks here... */ + if ((v2d->keepzoom & V2D_LOCKZOOM_X)==0) + RNA_float_set(op->ptr, "deltax", vzd->dx); + else + RNA_float_set(op->ptr, "deltax", 0); + + if ((v2d->keepzoom & V2D_LOCKZOOM_Y)==0) + RNA_float_set(op->ptr, "deltay", vzd->dy); + else + RNA_float_set(op->ptr, "deltay", 0); + + /* free customdata */ + view_zoomdrag_exit(C, op); + WM_cursor_restore(CTX_wm_window(C)); + + return OPERATOR_FINISHED; + } } return OPERATOR_RUNNING_MODAL; diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c index e33e24a75ce..b34f024e9fb 100644 --- a/source/blender/editors/mesh/editface.c +++ b/source/blender/editors/mesh/editface.c @@ -52,7 +52,7 @@ #include "BIF_gl.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON //#include "BPY_extern.h" //#include "BPY_menus.h" #endif @@ -67,14 +67,9 @@ /* own include */ #include "mesh_intern.h" -/* ***************** XXX **************** */ -static int pupmenu(const char *UNUSED(dummy)) {return 0;} -/* ***************** XXX **************** */ - - /* copy the face flags, most importantly selection from the mesh to the final derived mesh, * use in object mode when selecting faces (while painting) */ -void object_facesel_flush_dm(Object *ob) +void paintface_flush_flags(Object *ob) { Mesh *me= get_mesh(ob); DerivedMesh *dm= ob->derivedFinal; @@ -162,7 +157,7 @@ MTFace *EM_get_active_mtface(EditMesh *em, EditFace **act_efa, MCol **mcol, int return NULL; } -void reveal_tface(Scene *scene) +void paintface_unhide(Scene *scene) { Mesh *me; MFace *mface; @@ -181,11 +176,10 @@ void reveal_tface(Scene *scene) mface++; } - object_facesel_flush_dm(OBACT); -// XXX notifier! object_tface_flags_changed(OBACT, 0); + paintface_flush_flags(OBACT); } -void hide_tface(Scene *scene) +void paintface_hide(Scene *scene) { Mesh *me; MFace *mface; @@ -196,7 +190,7 @@ void hide_tface(Scene *scene) if(me==0 || me->totface==0) return; if(alt) { - reveal_tface(scene); + paintface_unhide(scene); return; } @@ -217,8 +211,7 @@ void hide_tface(Scene *scene) mface++; } - object_facesel_flush_dm(OBACT); -// XXX notifier! object_tface_flags_changed(OBACT, 0); + paintface_flush_flags(OBACT); } /* Set tface seams based on edge data, uses hash table to find seam edges. */ @@ -236,7 +229,7 @@ static void hash_add_face(EdgeHash *ehash, MFace *mf) } -void select_linked_tfaces_with_seams(int mode, Mesh *me, unsigned int index) +static void select_linked_tfaces_with_seams(int mode, Mesh *me, unsigned int index) { MFace *mf; int a, doit=1, mark=0; @@ -338,12 +331,9 @@ void select_linked_tfaces_with_seams(int mode, Mesh *me, unsigned int index) } MEM_freeN(linkflag); - - // BIF_undo_push("Select linked UV face"); - // object_tface_flags_changed(OBACT, 0); } -void select_linked_tfaces(bContext *UNUSED(C), Object *ob, short UNUSED(mval[2]), int mode) +void paintface_select_linked(bContext *UNUSED(C), Object *ob, short UNUSED(mval[2]), int mode) { Mesh *me; unsigned int index=0; @@ -361,10 +351,11 @@ void select_linked_tfaces(bContext *UNUSED(C), Object *ob, short UNUSED(mval[2]) select_linked_tfaces_with_seams(mode, me, index); - object_facesel_flush_dm(ob); + paintface_flush_flags(ob); } -void selectall_tface(Object *ob, int action) +/* note: caller needs to run paintface_flush_flags(ob) after this */ +void paintface_deselect_all_visible(Object *ob, int action, short flush_flags) { Mesh *me; MFace *mface; @@ -406,11 +397,12 @@ void selectall_tface(Object *ob, int action) mface++; } - object_facesel_flush_dm(ob); -// XXX notifier! object_tface_flags_changed(OBACT, 0); + if(flush_flags) { + paintface_flush_flags(ob); + } } -void selectswap_tface(Scene *scene) +void paintface_select_swap(Scene *scene) { Mesh *me; MFace *mface; @@ -430,11 +422,10 @@ void selectswap_tface(Scene *scene) mface++; } - object_facesel_flush_dm(OBACT); -// XXX notifier! object_tface_flags_changed(OBACT, 0); + paintface_flush_flags(OBACT); } -int minmax_tface(Object *ob, float *min, float *max) +int paintface_minmax(Object *ob, float *min, float *max) { Mesh *me= get_mesh(ob); MFace *mf; @@ -672,7 +663,7 @@ int edgetag_shortest_path(Scene *scene, EditMesh *em, EditEdge *source, EditEdge } /* *************************************** */ - +#if 0 static void seam_edgehash_insert_face(EdgeHash *ehash, MFace *mf) { BLI_edgehash_insert(ehash, mf->v1, mf->v2, NULL); @@ -739,11 +730,10 @@ void seam_mark_clear_tface(Scene *scene, short mode) // unwrap_lscm(1); me->drawflag |= ME_DRAWSEAMS; - -// XXX notifier! object_tface_flags_changed(OBACT, 1); } +#endif -int face_select(struct bContext *C, Object *ob, short mval[2], int extend) +int paintface_mouse_select(struct bContext *C, Object *ob, short mval[2], int extend) { Mesh *me; MFace *mface, *msel; @@ -780,48 +770,38 @@ int face_select(struct bContext *C, Object *ob, short mval[2], int extend) /* image window redraw */ - object_facesel_flush_dm(ob); -// XXX notifier! object_tface_flags_changed(OBACT, 1); + paintface_flush_flags(ob); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, ob->data); ED_region_tag_redraw(CTX_wm_region(C)); // XXX - should redraw all 3D views return 1; } -void face_borderselect(struct bContext *C, Object *ob, rcti *rect, int select, int extend) +int do_paintface_box_select(ViewContext *vc, rcti *rect, int select, int extend) { Mesh *me; MFace *mface; struct ImBuf *ibuf; unsigned int *rt; - int a, sx, sy, index; + int a, index; char *selar; - - ViewContext vc; - view3d_set_viewcontext(C, &vc); + int sx= rect->xmax-rect->xmin+1; + int sy= rect->ymax-rect->ymin+1; - me= get_mesh(ob); - if(me==0) return; - if(me->totface==0) return; + me= get_mesh(vc->obact); + + if(me==NULL || me->totface==0 || sx*sy <= 0) + return OPERATOR_CANCELLED; selar= MEM_callocN(me->totface+1, "selar"); - sx= (rect->xmax-rect->xmin+1); - sy= (rect->ymax-rect->ymin+1); - if(sx*sy<=0) return; + if (extend == 0 && select) + paintface_deselect_all_visible(vc->obact, SEL_DESELECT, FALSE); - if (extend == 0 && select) { - mface= me->mface; - for(a=1; a<=me->totface; a++, mface++) { - if((mface->flag & ME_HIDE) == 0) - mface->flag &= ~ME_FACE_SEL; - } - } - - view3d_validate_backbuf(&vc); + view3d_validate_backbuf(vc); ibuf = IMB_allocImBuf(sx,sy,32,IB_rect); rt = ibuf->rect; - glReadPixels(rect->xmin+vc.ar->winrct.xmin, rect->ymin+vc.ar->winrct.ymin, sx, sy, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect); + glReadPixels(rect->xmin+vc->ar->winrct.xmin, rect->ymin+vc->ar->winrct.ymin, sx, sy, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect); if(ENDIAN_ORDER==B_ENDIAN) IMB_convert_rgba_to_abgr(ibuf); a= sx*sy; @@ -847,11 +827,11 @@ void face_borderselect(struct bContext *C, Object *ob, rcti *rect, int select, i IMB_freeImBuf(ibuf); MEM_freeN(selar); - -// XXX notifier! object_tface_flags_changed(OBACT, 0); #ifdef __APPLE__ glReadBuffer(GL_BACK); #endif - - object_facesel_flush_dm(ob); + + paintface_flush_flags(vc->obact); + + return OPERATOR_FINISHED; } diff --git a/source/blender/editors/mesh/editmesh.c b/source/blender/editors/mesh/editmesh.c index 6665e82af19..d95a2570e80 100644 --- a/source/blender/editors/mesh/editmesh.c +++ b/source/blender/editors/mesh/editmesh.c @@ -54,6 +54,7 @@ #include "BKE_mesh.h" #include "BKE_paint.h" #include "BKE_report.h" +#include "BKE_multires.h" #include "ED_mesh.h" #include "ED_object.h" @@ -1306,6 +1307,9 @@ void load_editMesh(Scene *scene, Object *ob) } mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL); + + /* topology could be changed, ensure mdisps are ok */ + multires_topology_changed(ob); } void remake_editMesh(Scene *scene, Object *ob) diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c index 89991015419..5dd1b1227a3 100644 --- a/source/blender/editors/mesh/editmesh_add.c +++ b/source/blender/editors/mesh/editmesh_add.c @@ -138,8 +138,11 @@ printf("%d\n", event->val); float nor[3]= {0.0, 0.0, 0.0}; /* 2D normal calc */ - float mval_f[2]= {(float)event->mval[0], (float)event->mval[1]}; - + float mval_f[2]; + + mval_f[0]= (float)event->mval[0]; + mval_f[1]= (float)event->mval[1]; + done= 0; /* calculate the normal for selected edges */ diff --git a/source/blender/editors/mesh/editmesh_lib.c b/source/blender/editors/mesh/editmesh_lib.c index b632cb2a842..b7ae0759f7e 100644 --- a/source/blender/editors/mesh/editmesh_lib.c +++ b/source/blender/editors/mesh/editmesh_lib.c @@ -2578,18 +2578,23 @@ void em_deselect_nth_face(EditMesh *em, int nth, EditFace *efa_act) ok = 0; for (efa= em->faces.first; efa; efa= efa->next) { - if(efa->tmp.l==1) { /* initialize */ - tag_face_edges(efa); + if(efa->f & SELECT) { + if(efa->tmp.l==1) { /* initialize */ + tag_face_edges(efa); + } + + if(efa->tmp.l) { + efa->tmp.l++; + } } - - if(efa->tmp.l) - efa->tmp.l++; } for (efa= em->faces.first; efa; efa= efa->next) { - if(efa->tmp.l==0 && tag_face_edges_test(efa)) { - efa->tmp.l= 1; - ok = 1; /* keep looping */ + if(efa->f & SELECT) { + if(efa->tmp.l==0 && tag_face_edges_test(efa)) { + efa->tmp.l= 1; + ok = 1; /* keep looping */ + } } } } @@ -2644,18 +2649,23 @@ void em_deselect_nth_edge(EditMesh *em, int nth, EditEdge *eed_act) ok = 0; for (eed= em->edges.first; eed; eed= eed->next) { - if(eed->tmp.l==1) { /* initialize */ - tag_edge_verts(eed); + if(eed->f & SELECT) { + if(eed->tmp.l==1) { /* initialize */ + tag_edge_verts(eed); + } + + if(eed->tmp.l) { + eed->tmp.l++; + } } - - if(eed->tmp.l) - eed->tmp.l++; } for (eed= em->edges.first; eed; eed= eed->next) { - if(eed->tmp.l==0 && tag_edge_verts_test(eed)) { - eed->tmp.l= 1; - ok = 1; /* keep looping */ + if(eed->f & SELECT) { + if(eed->tmp.l==0 && tag_edge_verts_test(eed)) { + eed->tmp.l= 1; + ok = 1; /* keep looping */ + } } } } @@ -2711,18 +2721,22 @@ void em_deselect_nth_vert(EditMesh *em, int nth, EditVert *eve_act) ok = 0; for (eve= em->verts.first; eve; eve= eve->next) { - if(eve->tmp.l) - eve->tmp.l++; + if(eve->f & SELECT) { + if(eve->tmp.l) + eve->tmp.l++; + } } for (eed= em->edges.first; eed; eed= eed->next) { - if(eed->v1->tmp.l==2 && eed->v2->tmp.l==0) { /* initialize */ - eed->v2->tmp.l= 1; - ok = 1; /* keep looping */ - } - else if(eed->v2->tmp.l==2 && eed->v1->tmp.l==0) { /* initialize */ - eed->v1->tmp.l= 1; - ok = 1; /* keep looping */ + if(eed->f & SELECT) { + if(eed->v1->tmp.l==2 && eed->v2->tmp.l==0) { /* initialize */ + eed->v2->tmp.l= 1; + ok = 1; /* keep looping */ + } + else if(eed->v2->tmp.l==2 && eed->v1->tmp.l==0) { /* initialize */ + eed->v1->tmp.l= 1; + ok = 1; /* keep looping */ + } } } } @@ -2740,30 +2754,77 @@ void em_deselect_nth_vert(EditMesh *em, int nth, EditVert *eve_act) // EM_nfaces_selected(em); // flush does these } -int EM_deselect_nth(EditMesh *em, int nth) +static void deselect_nth_active(EditMesh *em, EditVert **eve_p, EditEdge **eed_p, EditFace **efa_p) { EditSelection *ese; - ese = ((EditSelection*)em->selected.last); + + *eve_p= NULL; + *eed_p= NULL; + *efa_p= NULL; + + ese= (EditSelection*)em->selected.last; + if(ese) { - if(ese->type == EDITVERT) { - em_deselect_nth_vert(em, nth, (EditVert*)ese->data); - return 1; - } - - if(ese->type == EDITEDGE) { - em_deselect_nth_edge(em, nth, (EditEdge*)ese->data); - return 1; - } - } - else { - EditFace *efa_act = EM_get_actFace(em, 0); - if(efa_act) { - em_deselect_nth_face(em, nth, efa_act); - return 1; + switch(ese->type) { + case EDITVERT: + *eve_p= (EditVert *)ese->data; + return; + case EDITEDGE: + *eed_p= (EditEdge *)ese->data; + return; + case EDITFACE: + *efa_p= (EditFace *)ese->data; + return; } } - return 0; + if(em->selectmode & SCE_SELECT_VERTEX) { + EditVert *eve; + for (eve= em->verts.first; eve; eve= eve->next) { + if(eve->f & SELECT) { + *eve_p= eve; + return; + } + } + } + + if(em->selectmode & SCE_SELECT_EDGE) { + EditEdge *eed; + for (eed= em->edges.first; eed; eed= eed->next) { + if(eed->f & SELECT) { + *eed_p= eed; + return; + } + } + } + + if(em->selectmode & SCE_SELECT_FACE) { + EditFace *efa= EM_get_actFace(em, 1); + if(efa) { + *efa_p= efa; + return; + } + } +} + +int EM_deselect_nth(EditMesh *em, int nth) +{ + EditVert *eve; + EditEdge *eed; + EditFace *efa; + + deselect_nth_active(em, &eve, &eed, &efa); + + if(eve) + em_deselect_nth_vert(em, nth, eve); + else if (eed) + em_deselect_nth_edge(em, nth, eed); + else if (efa) + em_deselect_nth_face(em, nth, efa); + else + return 0; + + return 1; } void EM_project_snap_verts(bContext *C, ARegion *ar, Object *obedit, EditMesh *em) diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c index ab01a773020..309ee6b57e2 100644 --- a/source/blender/editors/mesh/editmesh_mods.c +++ b/source/blender/editors/mesh/editmesh_mods.c @@ -4581,10 +4581,7 @@ static int mesh_select_nth_exec(bContext *C, wmOperator *op) EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data)); int nth = RNA_int_get(op->ptr, "nth"); - if(EM_deselect_nth(em, nth) == 0) { - BKE_report(op->reports, RPT_ERROR, "Mesh has no active vert/edge/face."); - return OPERATOR_CANCELLED; - } + EM_deselect_nth(em, nth); BKE_mesh_end_editmesh(obedit->data, em); diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 7fbdef7b391..eb450c7434b 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -57,6 +57,7 @@ editmesh_tool.c: UI called tools for editmesh, geometry changes here, otherwise #include "BLI_ghash.h" #include "BLI_linklist.h" #include "BLI_heap.h" +#include "BLI_scanfill.h" #include "BKE_context.h" #include "BKE_depsgraph.h" diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index d8b34311e76..0307ba13424 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -63,6 +63,7 @@ #include "BKE_mesh.h" #include "BKE_material.h" #include "BKE_report.h" +#include "BKE_multires.h" #include "BLO_sys_types.h" // for intptr_t support @@ -396,6 +397,9 @@ int join_mesh_exec(bContext *C, wmOperator *UNUSED(op)) } } + if(base->object!=ob) + multiresModifier_prepare_join(scene, base->object, ob); + CustomData_merge(&me->fdata, &fdata, CD_MASK_MESH, CD_DEFAULT, totface); CustomData_copy_data(&me->fdata, &fdata, 0, faceofs, me->totface); diff --git a/source/blender/editors/object/CMakeLists.txt b/source/blender/editors/object/CMakeLists.txt index bfcb233e466..224d72895ba 100644 --- a/source/blender/editors/object/CMakeLists.txt +++ b/source/blender/editors/object/CMakeLists.txt @@ -55,8 +55,8 @@ IF(WIN32) LIST(APPEND INC ${PTHREADS_INC}) ENDIF(WIN32) -IF(NOT WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) -ENDIF(NOT WITH_PYTHON) +IF(WITH_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) +ENDIF(WITH_PYTHON) BLENDERLIB(bf_editor_object "${SRC}" "${INC}") diff --git a/source/blender/editors/object/SConscript b/source/blender/editors/object/SConscript index 98085dd2fe5..e39190c0ef3 100644 --- a/source/blender/editors/object/SConscript +++ b/source/blender/editors/object/SConscript @@ -17,7 +17,7 @@ if env['OURPLATFORM'] == 'linux2': if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): incs += ' ' + env['BF_PTHREADS_INC'] -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') env.BlenderLib ( 'bf_editors_object', sources, Split(incs), defs, libtype=['core'], priority=[35] ) diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index 56af4ce1b1c..196440f29cf 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -607,7 +607,7 @@ static int object_armature_add_exec(bContext *C, wmOperator *op) { Object *obedit= CTX_data_edit_object(C); View3D *v3d= CTX_wm_view3d(C); - RegionView3D *rv3d= NULL; + RegionView3D *rv3d= CTX_wm_region_view3d(C); int newob= 0; int enter_editmode; unsigned int layer; @@ -629,9 +629,6 @@ static int object_armature_add_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - if(v3d) - rv3d= CTX_wm_region(C)->regiondata; - /* v3d and rv3d are allowed to be NULL */ add_primitive_bone(CTX_data_scene(C), v3d, rv3d); @@ -985,7 +982,7 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base) ob->lay= base->lay; copy_m4_m4(ob->obmat, dob->mat); - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, FALSE); } copy_object_set_idnew(C, 0); @@ -1647,7 +1644,7 @@ static int duplicate_exec(bContext *C, wmOperator *op) if(BASACT==base) ED_base_object_activate(C, basen); - ED_render_id_flush_update(bmain, basen->object->data); + DAG_id_flush_update(base->object->data, 0); } CTX_DATA_END; diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c index 0c28d4a608b..dd422f6d221 100644 --- a/source/blender/editors/object/object_bake.c +++ b/source/blender/editors/object/object_bake.c @@ -307,9 +307,7 @@ static int bake_image_exec(bContext *C, wmOperator *op) } else { ListBase threads; - BakeRender bkr; - - memset(&bkr, 0, sizeof(bkr)); + BakeRender bkr= {0}; init_bake_internal(&bkr, C); bkr.reports= op->reports; diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c index 09760a8f51b..e222913e703 100644 --- a/source/blender/editors/object/object_constraint.c +++ b/source/blender/editors/object/object_constraint.c @@ -53,7 +53,7 @@ #include "BKE_report.h" #include "BIK_api.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -154,7 +154,7 @@ void validate_pyconstraint_cb (void *arg1, void *arg2) data->text = text; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* this returns a string for the list of usable pyconstraint script names */ char *buildmenu_pyconstraints (Text *con_text, int *pyconindex) { @@ -195,12 +195,12 @@ char *buildmenu_pyconstraints (Text *con_text, int *pyconindex) return str; } -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ /* this callback gets called when the 'refresh' button of a pyconstraint gets pressed */ void update_pyconstraint_cb (void *arg1, void *arg2) { -#ifdef DISABLE_PYTHON +#ifndef WITH_PYTHON (void)arg1; /* unused */ (void)arg2; /* unused */ #else @@ -726,6 +726,11 @@ static int childof_clear_inverse_exec (bContext *C, wmOperator *op) bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_CHILDOF); bChildOfConstraint *data= (con) ? (bChildOfConstraint *)con->data : NULL; + if(data==NULL) { + BKE_report(op->reports, RPT_ERROR, "Childof constraint not found."); + return OPERATOR_CANCELLED; + } + /* simply clear the matrix */ unit_m4(data->invmat); @@ -1297,7 +1302,7 @@ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase case CONSTRAINT_TYPE_PYTHON: // FIXME: this code is not really valid anymore { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON char *menustr; int scriptint= 0; /* popup a list of usable scripts */ diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 32e49ce3f71..118c649adde 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -1323,7 +1323,7 @@ void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event) BKE_text_to_curve(scene, base->object, 0); /* needed? */ - strcpy(cu1->family, cu->family); + BLI_strncpy(cu1->family, cu->family, sizeof(cu1->family)); base->object->recalc |= OB_RECALC_DATA; } diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c index 3c3e7f1df76..ee7164046ce 100644 --- a/source/blender/editors/object/object_hook.c +++ b/source/blender/editors/object/object_hook.c @@ -447,7 +447,7 @@ static void add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *o hmd->indexar= indexar; copy_v3_v3(hmd->cent, cent); hmd->totindex= tot; - BLI_strncpy(hmd->name, name, 32); + BLI_strncpy(hmd->name, name, sizeof(hmd->name)); /* matrix calculus */ /* vert x (obmat x hook->imat) x hook->obmat x ob->imat */ diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index 3d36ed9f45e..a9759c8c838 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -603,12 +603,13 @@ void OBJECT_OT_modifier_add(wmOperatorType *ot) /************************ generic functions for operators using mod names and data context *********************/ -static int edit_modifier_poll_generic(bContext *C, StructRNA *rna_type) +static int edit_modifier_poll_generic(bContext *C, StructRNA *rna_type, int obtype_flag) { PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", rna_type); Object *ob= (ptr.id.data)?ptr.id.data:ED_object_active_context(C); if (!ob || ob->id.lib) return 0; + if (obtype_flag && ((1<type) & obtype_flag)==0) return 0; if (ptr.data && ((ID*)ptr.id.data)->lib) return 0; return 1; @@ -616,7 +617,7 @@ static int edit_modifier_poll_generic(bContext *C, StructRNA *rna_type) static int edit_modifier_poll(bContext *C) { - return edit_modifier_poll_generic(C, &RNA_Modifier); + return edit_modifier_poll_generic(C, &RNA_Modifier, 0); } static void edit_modifier_properties(wmOperatorType *ot) @@ -913,7 +914,7 @@ void OBJECT_OT_modifier_copy(wmOperatorType *ot) static int multires_poll(bContext *C) { - return edit_modifier_poll_generic(C, &RNA_MultiresModifier); + return edit_modifier_poll_generic(C, &RNA_MultiresModifier, (1<parent= NULL; - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, TRUE); } else if(type == 2) unit_m4(ob->parentinv); @@ -906,7 +906,7 @@ static int object_track_clear_exec(bContext *C, wmOperator *op) } if(type == 1) - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, TRUE); } CTX_DATA_END; diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c index 66c5ab4ec4b..bd8a7f99978 100644 --- a/source/blender/editors/object/object_transform.c +++ b/source/blender/editors/object/object_transform.c @@ -47,6 +47,7 @@ #include "BKE_mesh.h" #include "BKE_object.h" #include "BKE_report.h" +#include "BKE_multires.h" #include "RNA_define.h" #include "RNA_access.h" @@ -119,7 +120,7 @@ void OBJECT_OT_location_clear(wmOperatorType *ot) /* api callbacks */ ot->exec= object_location_clear_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -264,7 +265,7 @@ void OBJECT_OT_rotation_clear(wmOperatorType *ot) /* api callbacks */ ot->exec= object_rotation_clear_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -330,7 +331,7 @@ void OBJECT_OT_scale_clear(wmOperatorType *ot) /* api callbacks */ ot->exec= object_scale_clear_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -372,7 +373,7 @@ void OBJECT_OT_origin_clear(wmOperatorType *ot) /* api callbacks */ ot->exec= object_origin_clear_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -390,7 +391,7 @@ static void ignore_parent_tx(Main *bmain, Scene *scene, Object *ob ) /* a change was made, adjust the children to compensate */ for(ob_child=bmain->object.first; ob_child; ob_child=ob_child->id.next) { if(ob_child->parent == ob) { - object_apply_mat4(ob_child, ob_child->obmat); + object_apply_mat4(ob_child, ob_child->obmat, TRUE); what_does_parent(scene, ob_child, &workob); invert_m4_m4(ob_child->parentinv, workob.obmat); } @@ -491,6 +492,8 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo if(ob->type==OB_MESH) { me= ob->data; + multiresModifier_scale_disp(scene, ob); + /* adjust data */ mvert= me->mvert; for(a=0; atotvert; a++, mvert++) @@ -574,7 +577,7 @@ static int visual_transform_apply_exec(bContext *C, wmOperator *UNUSED(op)) CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { where_is_object(scene, ob); - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, TRUE); where_is_object(scene, ob); change = 1; @@ -597,7 +600,7 @@ void OBJECT_OT_visual_transform_apply(wmOperatorType *ot) /* api callbacks */ ot->exec= visual_transform_apply_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -617,7 +620,7 @@ void OBJECT_OT_location_apply(wmOperatorType *ot) /* api callbacks */ ot->exec= location_apply_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -637,7 +640,7 @@ void OBJECT_OT_scale_apply(wmOperatorType *ot) /* api callbacks */ ot->exec= scale_apply_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -657,7 +660,7 @@ void OBJECT_OT_rotation_apply(wmOperatorType *ot) /* api callbacks */ ot->exec= rotation_apply_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index 015fab05828..dd4864f928f 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -596,7 +596,7 @@ static void vgroup_select_verts(Object *ob, int select) static void vgroup_duplicate(Object *ob) { bDeformGroup *dg, *cdg; - char name[32], s[32]; + char name[sizeof(dg->name)]; MDeformWeight *org, *cpy; MDeformVert *dvert, **dvert_array=NULL; int i, idg, icdg, dvert_tot=0; @@ -605,26 +605,17 @@ static void vgroup_duplicate(Object *ob) if(!dg) return; - if(strstr(dg->name, "_copy")) { - BLI_strncpy(name, dg->name, 32); /* will be renamed _copy.001... etc */ + if(!strstr(dg->name, "_copy")) { + BLI_snprintf(name, sizeof(name), "%s_copy", dg->name); } else { - BLI_snprintf(name, 32, "%s_copy", dg->name); - while(defgroup_find_name(ob, name)) { - if((strlen(name) + 6) > 32) { - if (G.f & G_DEBUG) - printf("Internal error: the name for the new vertex group is > 32 characters"); - return; - } - strcpy(s, name); - BLI_snprintf(name, 32, "%s_copy", s); - } - } + BLI_snprintf(name, sizeof(name), "%s", dg->name); + } cdg = defgroup_duplicate(dg); strcpy(cdg->name, name); defgroup_unique_name(cdg, ob); - + BLI_addtail(&ob->defbase, cdg); idg = (ob->actdef-1); diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index 57867fdc441..e654b868622 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -774,6 +774,7 @@ static void PE_mirror_particle(Object *ob, DerivedMesh *dm, ParticleSystem *psys if(mpoint->keys) MEM_freeN(mpoint->keys); mpa->hair= MEM_dupallocN(pa->hair); + mpa->totkey= pa->totkey; mpoint->keys= MEM_dupallocN(point->keys); mpoint->totkey= point->totkey; @@ -782,7 +783,7 @@ static void PE_mirror_particle(Object *ob, DerivedMesh *dm, ParticleSystem *psys for(k=0; ktotkey; k++, mkey++, mhkey++) { mkey->co= mhkey->co; mkey->time= &mhkey->time; - mkey->flag &= PEK_SELECT; + mkey->flag &= ~PEK_SELECT; } } @@ -1512,6 +1513,17 @@ void PARTICLE_OT_select_linked(wmOperatorType *ot) } /************************ border select operator ************************/ +void PE_deselect_all_visible(PTCacheEdit *edit) +{ + POINT_P; KEY_K; + + LOOP_VISIBLE_POINTS { + LOOP_SELECTED_KEYS { + key->flag &= ~PEK_SELECT; + point->flag |= PEP_EDIT_RECALC; + } + } +} int PE_border_select(bContext *C, rcti *rect, int select, int extend) { @@ -1523,16 +1535,8 @@ int PE_border_select(bContext *C, rcti *rect, int select, int extend) if(!PE_start_edit(edit)) return OPERATOR_CANCELLED; - if (extend == 0 && select) { - POINT_P; KEY_K; - - LOOP_VISIBLE_POINTS { - LOOP_SELECTED_KEYS { - key->flag &= ~PEK_SELECT; - point->flag |= PEP_EDIT_RECALC; - } - } - } + if (extend == 0 && select) + PE_deselect_all_visible(edit); PE_set_view3d_data(C, &data); data.rect= rect; @@ -1573,7 +1577,7 @@ int PE_circle_select(bContext *C, int selecting, short *mval, float rad) /************************ lasso select operator ************************/ -int PE_lasso_select(bContext *C, short mcords[][2], short moves, short select) +int PE_lasso_select(bContext *C, short mcords[][2], short moves, short extend, short select) { Scene *scene= CTX_data_scene(C); Object *ob= CTX_data_active_object(C); @@ -1589,6 +1593,9 @@ int PE_lasso_select(bContext *C, short mcords[][2], short moves, short select) if(!PE_start_edit(edit)) return OPERATOR_CANCELLED; + if (extend == 0 && select) + PE_deselect_all_visible(edit); + unit_m4(mat); LOOP_VISIBLE_POINTS { @@ -1889,7 +1896,7 @@ static void rekey_particle(PEData *data, int pa_index) { PTCacheEdit *edit= data->edit; ParticleSystem *psys= edit->psys; - ParticleSimulationData sim = {data->scene, data->ob, edit->psys, NULL}; + ParticleSimulationData sim= {0}; ParticleData *pa= psys->particles + pa_index; PTCacheEditPoint *point = edit->points + pa_index; ParticleKey state; @@ -1898,6 +1905,10 @@ static void rekey_particle(PEData *data, int pa_index) float dval, sta, end; int k; + sim.scene= data->scene; + sim.ob= data->ob; + sim.psys= edit->psys; + pa->flag |= PARS_REKEY; key= new_keys= MEM_callocN(data->totrekey * sizeof(HairKey),"Hair re-key keys"); @@ -1982,7 +1993,7 @@ static void rekey_particle_to_time(Scene *scene, Object *ob, int pa_index, float { PTCacheEdit *edit= PE_get_current(scene, ob); ParticleSystem *psys; - ParticleSimulationData sim = {scene, ob, edit ? edit->psys : NULL, NULL}; + ParticleSimulationData sim= {0}; ParticleData *pa; ParticleKey state; HairKey *new_keys, *key; @@ -1993,6 +2004,10 @@ static void rekey_particle_to_time(Scene *scene, Object *ob, int pa_index, float psys = edit->psys; + sim.scene= scene; + sim.ob= ob; + sim.psys= psys; + pa= psys->particles + pa_index; pa->flag |= PARS_REKEY; @@ -2187,7 +2202,7 @@ static void subdivide_particle(PEData *data, int pa_index) { PTCacheEdit *edit= data->edit; ParticleSystem *psys= edit->psys; - ParticleSimulationData sim = {data->scene, data->ob, edit->psys, NULL}; + ParticleSimulationData sim= {0}; ParticleData *pa= psys->particles + pa_index; PTCacheEditPoint *point = edit->points + pa_index; ParticleKey state; @@ -2198,6 +2213,10 @@ static void subdivide_particle(PEData *data, int pa_index) short totnewkey=0; float endtime; + sim.scene= data->scene; + sim.ob= data->ob; + sim.psys= edit->psys; + for(k=0, ekey=point->keys; ktotkey-1; k++,ekey++) { if(ekey->flag&PEK_SELECT && (ekey+1)->flag&PEK_SELECT) totnewkey++; @@ -3087,13 +3106,13 @@ static int brush_add(PEData *data, short number) ParticleSystem *psys= edit->psys; ParticleData *add_pars= MEM_callocN(number*sizeof(ParticleData),"ParticleData add"); ParticleSystemModifierData *psmd= psys_get_modifier(ob,psys); - ParticleSimulationData sim = {scene, ob, psys, psmd}; + ParticleSimulationData sim= {0}; ParticleEditSettings *pset= PE_settings(scene); int i, k, n= 0, totpart= psys->totpart; float mco[2]; short dmx= 0, dmy= 0; float co1[3], co2[3], min_d, imat[4][4]; - float framestep, timestep= psys_get_timestep(&sim); + float framestep, timestep; short size= pset->brush[PE_BRUSH_ADD].size; short size2= size*size; DerivedMesh *dm=0; @@ -3103,7 +3122,14 @@ static int brush_add(PEData *data, short number) return 0; BLI_srandom(psys->seed+data->mval[0]+data->mval[1]); - + + sim.scene= scene; + sim.ob= ob; + sim.psys= psys; + sim.psmd= psmd; + + timestep= psys_get_timestep(&sim); + /* painting onto the deformed mesh, could be an option? */ if(psmd->dm->deformedOnly) dm= psmd->dm; @@ -3200,6 +3226,7 @@ static int brush_add(PEData *data, short number) framestep= pa->lifetime/(float)(pset->totaddkey-1); if(tree) { + ParticleData *ppa; HairKey *hkey; ParticleKey key[3]; KDTreeNearest ptn[3]; @@ -3224,6 +3251,8 @@ static int brush_add(PEData *data, short number) for(w=0; wparticles+ptn[0].index; + for(k=0; ktotaddkey; k++) { hkey= (HairKey*)pa->hair + k; hkey->time= pa->time + k * framestep; @@ -3232,6 +3261,9 @@ static int brush_add(PEData *data, short number) psys_get_particle_on_path(&sim, ptn[0].index, key, 0); mul_v3_fl(key[0].co, weight[0]); + /* TODO: interpolatint the weight would be nicer */ + hkey->weight= (ppa->hair+MIN2(k, ppa->totkey-1))->weight; + if(maxw>1) { key[1].time= key[0].time; psys_get_particle_on_path(&sim, ptn[1].index, key + 1, 0); @@ -3258,6 +3290,7 @@ static int brush_add(PEData *data, short number) for(k=0, hkey=pa->hair; ktotaddkey; k++, hkey++) { VECADDFAC(hkey->co, pa->state.co, pa->state.vel, k * framestep * timestep); hkey->time += k * framestep; + hkey->weight = 1.f - (float)k/(float)(pset->totaddkey-1); } } for(k=0, hkey=pa->hair; ktotaddkey; k++, hkey++) { @@ -4001,12 +4034,16 @@ static void PE_create_particle_edit(Scene *scene, Object *ob, PointCache *cache, key->co= hkey->co; key->time= &hkey->time; key->flag= hkey->editflag; - if(!(psys->flag & PSYS_GLOBAL_HAIR)) + if(!(psys->flag & PSYS_GLOBAL_HAIR)) { key->flag |= PEK_USE_WCO; + hkey->editflag |= PEK_USE_WCO; + } + hkey++; } pa++; } + update_world_cos(ob, edit); } else { PTCacheMem *pm; diff --git a/source/blender/editors/physics/physics_fluid.c b/source/blender/editors/physics/physics_fluid.c index b1c373e7a91..adf5d00355e 100644 --- a/source/blender/editors/physics/physics_fluid.c +++ b/source/blender/editors/physics/physics_fluid.c @@ -420,7 +420,7 @@ static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), Fluid /* Modifying the global scene isn't nice, but we can do it in * this part of the process before a threaded job is created */ scene->r.cfra = (int)eval_time; - ED_update_for_newframe(C, 1); + ED_update_for_newframe(CTX_data_main(C), scene, CTX_wm_screen(C), 1); /* now scene data should be current according to animation system, so we fill the channels */ @@ -910,7 +910,7 @@ int fluidsimBake(bContext *C, ReportList *reports, Object *fsDomain) /* reset to original current frame */ scene->r.cfra = origFrame; - ED_update_for_newframe(C, 1); + ED_update_for_newframe(CTX_data_main(C), scene, CTX_wm_screen(C), 1); /* ---- XXX: No Time animation curve for now, leaving this code here for reference diff --git a/source/blender/editors/physics/physics_pointcache.c b/source/blender/editors/physics/physics_pointcache.c index 9e39862cf5d..519a85fe39a 100644 --- a/source/blender/editors/physics/physics_pointcache.c +++ b/source/blender/editors/physics/physics_pointcache.c @@ -83,7 +83,7 @@ void bake_console_progress(void *UNUSED(arg), int nr) void bake_console_progress_end(void *UNUSED(arg)) { - printf("\n"); + printf("\rbake: done!\n"); } static int ptcache_bake_all_exec(bContext *C, wmOperator *op) @@ -103,7 +103,10 @@ static int ptcache_bake_all_exec(bContext *C, wmOperator *op) baker.break_test = cache_break_test; baker.break_data = NULL; - if (win) { + /* Disabled for now as this doesn't work properly, + * and pointcache baking will be reimplemented with + * the job system soon anyways. */ + if (win && 0) { baker.progressbar = (void (*)(void *, int))WM_timecursor; baker.progressend = (void (*)(void *))WM_cursor_restore; baker.progresscontext = win; @@ -201,7 +204,10 @@ static int ptcache_bake_exec(bContext *C, wmOperator *op) baker.break_test = cache_break_test; baker.break_data = NULL; - if (win) { + /* Disabled for now as this doesn't work properly, + * and pointcache baking will be reimplemented with + * the job system soon anyways. */ + if (win && 0) { baker.progressbar = (void (*)(void *, int))WM_timecursor; baker.progressend = (void (*)(void *))WM_cursor_restore; baker.progresscontext = win; diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index 77fa51aa7b1..bf017856389 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -427,7 +427,7 @@ static int screen_render_exec(bContext *C, wmOperator *op) RE_BlenderFrame(re, mainp, scene, NULL, lay, scene->r.cfra); // no redraw needed, we leave state as we entered it - ED_update_for_newframe(C, 1); + ED_update_for_newframe(mainp, scene, CTX_wm_screen(C), 1); WM_event_add_notifier(C, NC_SCENE|ND_RENDER_RESULT, scene); @@ -573,11 +573,18 @@ static void render_startjob(void *rjv, short *stop, short *do_update, float *pro static void render_endjob(void *rjv) { - RenderJob *rj= rjv; + RenderJob *rj= rjv; + + /* this render may be used again by the sequencer without the active 'Render' where the callbacks + * would be re-assigned. assign dummy callbacks to avoid referencing freed renderjobs bug [#24508] */ + RE_InitRenderCB(rj->re); if(rj->main != G.main) free_main(rj->main); + /* else the frame will not update for the original value */ + ED_update_for_newframe(G.main, rj->scene, rj->win->screen, 1); + /* XXX render stability hack */ G.rendering = 0; WM_main_add_notifier(NC_WINDOW, NULL); @@ -630,6 +637,10 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event) if(WM_jobs_test(CTX_wm_manager(C), scene)) return OPERATOR_CANCELLED; + if(!RE_is_rendering_allowed(scene, op->reports, render_error_reports)) { + return OPERATOR_CANCELLED; + } + /* stop all running jobs, currently previews frustrate Render */ WM_jobs_stop_all(CTX_wm_manager(C)); diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c index ef56a596855..eb24919f99b 100644 --- a/source/blender/editors/render/render_opengl.c +++ b/source/blender/editors/render/render_opengl.c @@ -347,7 +347,7 @@ static int screen_opengl_render_anim_step(bContext *C, wmOperator *op) /* update animated image textures for gpu, etc, * call before scene_update_for_newframe so modifiers with textuers dont lag 1 frame */ - ED_image_update_frame(C); + ED_image_update_frame(bmain, scene->r.cfra); /* go to next frame */ while(CFRAnfra) { diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c index e56d8fc1124..14a58a7187c 100644 --- a/source/blender/editors/render/render_shading.c +++ b/source/blender/editors/render/render_shading.c @@ -403,36 +403,38 @@ static int material_slot_de_select(bContext *C, int select) BezTriple *bezt; int a; - for(nu= nurbs->first; nu; nu=nu->next) { - if(nu->mat_nr==ob->actcol-1) { - if(nu->bezt) { - a= nu->pntsu; - bezt= nu->bezt; - while(a--) { - if(bezt->hide==0) { - if(select) { - bezt->f1 |= SELECT; - bezt->f2 |= SELECT; - bezt->f3 |= SELECT; - } - else { - bezt->f1 &= ~SELECT; - bezt->f2 &= ~SELECT; - bezt->f3 &= ~SELECT; + if(nurbs) { + for(nu= nurbs->first; nu; nu=nu->next) { + if(nu->mat_nr==ob->actcol-1) { + if(nu->bezt) { + a= nu->pntsu; + bezt= nu->bezt; + while(a--) { + if(bezt->hide==0) { + if(select) { + bezt->f1 |= SELECT; + bezt->f2 |= SELECT; + bezt->f3 |= SELECT; + } + else { + bezt->f1 &= ~SELECT; + bezt->f2 &= ~SELECT; + bezt->f3 &= ~SELECT; + } } + bezt++; } - bezt++; } - } - else if(nu->bp) { - a= nu->pntsu*nu->pntsv; - bp= nu->bp; - while(a--) { - if(bp->hide==0) { - if(select) bp->f1 |= SELECT; - else bp->f1 &= ~SELECT; + else if(nu->bp) { + a= nu->pntsu*nu->pntsv; + bp= nu->bp; + while(a--) { + if(bp->hide==0) { + if(select) bp->f1 |= SELECT; + else bp->f1 &= ~SELECT; + } + bp++; } - bp++; } } } diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c index 08cc8ebaa2f..08962883ec3 100644 --- a/source/blender/editors/screen/screen_context.c +++ b/source/blender/editors/screen/screen_context.c @@ -36,6 +36,7 @@ #include "BKE_context.h" #include "BKE_utildefines.h" #include "BKE_action.h" +#include "BKE_armature.h" #include "BKE_sequencer.h" #include "RNA_access.h" @@ -234,7 +235,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult if (obpose && obpose->pose && arm) { for (pchan= obpose->pose->chanbase.first; pchan; pchan= pchan->next) { /* ensure that PoseChannel is on visible layer and is not hidden in PoseMode */ - if ((pchan->bone) && (arm->layer & pchan->bone->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) { + if (PBONE_VISIBLE(arm, pchan->bone)) { CTX_data_list_add(result, &obpose->id, &RNA_PoseBone, pchan); } } @@ -250,7 +251,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult if (obpose && obpose->pose && arm) { for (pchan= obpose->pose->chanbase.first; pchan; pchan= pchan->next) { /* ensure that PoseChannel is on visible layer and is not hidden in PoseMode */ - if ((pchan->bone) && (arm->layer & pchan->bone->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) { + if (PBONE_VISIBLE(arm, pchan->bone)) { if (pchan->bone->flag & BONE_SELECTED || pchan->bone == arm->act_bone) CTX_data_list_add(result, &obpose->id, &RNA_PoseBone, pchan); } diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 9d178a57465..e3da9af4e2d 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -643,18 +643,20 @@ static void screen_test_scale(bScreen *sc, int winsizex, int winsizey) /* make sure it fits! */ for(sv= sc->vertbase.first; sv; sv= sv->next) { + /* FIXME, this resizing logic is no good when resizing the window + redrawing [#24428] + * need some way to store these as floats internally and re-apply from there. */ tempf= ((float)sv->vec.x)*facx; sv->vec.x= (short)(tempf+0.5); sv->vec.x+= AREAGRID-1; sv->vec.x-= (sv->vec.x % AREAGRID); - + CLAMP(sv->vec.x, 0, winsizex); - tempf= ((float)sv->vec.y )*facy; + tempf= ((float)sv->vec.y)*facy; sv->vec.y= (short)(tempf+0.5); sv->vec.y+= AREAGRID-1; sv->vec.y-= (sv->vec.y % AREAGRID); - + CLAMP(sv->vec.y, 0, winsizey); } } @@ -1025,27 +1027,35 @@ void ED_screen_draw(wmWindow *win) /* make this screen usable */ /* for file read and first use, for scaling window, area moves */ void ED_screen_refresh(wmWindowManager *wm, wmWindow *win) -{ - ScrArea *sa; - rcti winrct= {0, win->sizex-1, 0, win->sizey-1}; +{ + /* exception for bg mode, we only need the screen context */ + if (!G.background) { + ScrArea *sa; + rcti winrct; - screen_test_scale(win->screen, win->sizex, win->sizey); + winrct.xmin= 0; + winrct.xmax= win->sizex-1; + winrct.ymin= 0; + winrct.ymax= win->sizey-1; + + screen_test_scale(win->screen, win->sizex, win->sizey); + + if(win->screen->mainwin==0) + win->screen->mainwin= wm_subwindow_open(win, &winrct); + else + wm_subwindow_position(win, win->screen->mainwin, &winrct); + + for(sa= win->screen->areabase.first; sa; sa= sa->next) { + /* set spacetype and region callbacks, calls init() */ + /* sets subwindows for regions, adds handlers */ + ED_area_initialize(wm, win, sa); + } - if(win->screen->mainwin==0) - win->screen->mainwin= wm_subwindow_open(win, &winrct); - else - wm_subwindow_position(win, win->screen->mainwin, &winrct); - - for(sa= win->screen->areabase.first; sa; sa= sa->next) { - /* set spacetype and region callbacks, calls init() */ - /* sets subwindows for regions, adds handlers */ - ED_area_initialize(wm, win, sa); + /* wake up animtimer */ + if(win->screen->animtimer) + WM_event_timer_sleep(wm, win, win->screen->animtimer, 0); } - /* wake up animtimer */ - if(win->screen->animtimer) - WM_event_timer_sleep(wm, win, win->screen->animtimer, 0); - if(G.f & G_DEBUG) printf("set screen\n"); win->screen->do_refresh= 0; @@ -1432,7 +1442,7 @@ void ED_screen_set_scene(bContext *C, Scene *scene) CTX_data_scene_set(C, scene); set_scene_bg(CTX_data_main(C), scene); - ED_update_for_newframe(C, 1); + ED_update_for_newframe(CTX_data_main(C), scene, curscreen, 1); /* complete redraw */ WM_event_add_notifier(C, NC_WINDOW, NULL); @@ -1738,20 +1748,17 @@ void ED_screen_animation_timer_update(bScreen *screen, int redraws, int refresh) } } -/* results in fully updated anim system */ -void ED_update_for_newframe(const bContext *C, int UNUSED(mute)) -{ - Main *bmain= CTX_data_main(C); - bScreen *screen= CTX_wm_screen(C); - Scene *scene= CTX_data_scene(C); - +/* results in fully updated anim system + * screen can be NULL */ +void ED_update_for_newframe(Main *bmain, Scene *scene, bScreen *screen, int UNUSED(mute)) +{ #ifdef DURIAN_CAMERA_SWITCH void *camera= scene_camera_switch_find(scene); if(camera && scene->camera != camera) { bScreen *sc; scene->camera= camera; /* are there cameras in the views that are not in the scene? */ - for(sc= CTX_data_main(C)->screen.first; sc; sc= sc->id.next) { + for(sc= bmain->screen.first; sc; sc= sc->id.next) { BKE_screen_view3d_scene_sync(sc); } } @@ -1761,7 +1768,7 @@ void ED_update_for_newframe(const bContext *C, int UNUSED(mute)) /* update animated image textures for gpu, etc, * call before scene_update_for_newframe so modifiers with textuers dont lag 1 frame */ - ED_image_update_frame(C); + ED_image_update_frame(bmain, scene->r.cfra); /* this function applies the changes too */ /* XXX future: do all windows */ @@ -1783,7 +1790,7 @@ void ED_update_for_newframe(const bContext *C, int UNUSED(mute)) /* update animated texture nodes */ { Tex *tex; - for(tex= CTX_data_main(C)->tex.first; tex; tex= tex->id.next) + for(tex= bmain->tex.first; tex; tex= tex->id.next) if( tex->use_nodes && tex->nodetree ) { ntreeTexTagAnimated( tex->nodetree ); } diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 5a6acd24c5f..7cdd19e435b 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -132,17 +132,26 @@ int ED_operator_view3d_active(bContext *C) int ED_operator_region_view3d_active(bContext *C) { -#if 0 // correct but messes up poll() for menu items. if(CTX_wm_region_view3d(C)) return TRUE; -#else - if(ed_spacetype_test(C, SPACE_VIEW3D)) - return TRUE; -#endif + CTX_wm_operator_poll_msg_set(C, "expected a view3d region"); return FALSE; } +/* generic for any view2d which uses anim_ops */ +int ED_operator_animview_active(bContext *C) +{ + if(ED_operator_areaactive(C)) { + SpaceLink *sl= (SpaceLink *)CTX_wm_space_data(C); + if (sl && (ELEM5(sl->spacetype, SPACE_SEQ, SPACE_SOUND, SPACE_ACTION, SPACE_NLA, SPACE_TIME))) + return TRUE; + } + + CTX_wm_operator_poll_msg_set(C, "expected an timeline/animation area to be active"); + return 0; +} + int ED_operator_timeline_active(bContext *C) { return ed_spacetype_test(C, SPACE_TIME); @@ -229,6 +238,12 @@ int ED_operator_object_active_editable(bContext *C) return ((ob != NULL) && !(ob->id.lib) && !(ob->restrictflag & OB_RESTRICT_VIEW)); } +int ED_operator_object_active_editable_mesh(bContext *C) +{ + Object *ob = ED_object_active_context(C); + return ((ob != NULL) && !(ob->id.lib) && !(ob->restrictflag & OB_RESTRICT_VIEW) && ob->type == OB_MESH); +} + int ED_operator_editmesh(bContext *C) { Object *obedit= CTX_data_edit_object(C); @@ -2248,7 +2263,7 @@ static void SCREEN_OT_region_quadview(wmOperatorType *ot) /* api callbacks */ // ot->invoke= WM_operator_confirm; ot->exec= region_quadview_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_region_view3d_active; ot->flag= 0; } @@ -2547,7 +2562,7 @@ static int screen_animation_step(bContext *C, wmOperator *UNUSED(op), wmEvent *e sound_seek_scene(C); /* since we follow drawflags, we can't send notifier but tag regions ourselves */ - ED_update_for_newframe(C, 1); + ED_update_for_newframe(CTX_data_main(C), scene, screen, 1); for (sa= screen->areabase.first; sa; sa= sa->next) { ARegion *ar; diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index a5b5baad4c5..c5402a00942 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -1011,8 +1011,11 @@ static void uv_image_outset(float (*orig_uv)[2], float (*outset_uv)[2], const fl float puv[4][2]; /* pixelspace uv's */ float no1[2], no2[2], no3[2], no4[2]; /* normals */ float dir1[2], dir2[2], dir3[2], dir4[2]; - float ibuf_inv[2] = {1.0f / (float)ibuf_x, 1.0f / (float)ibuf_y}; - + float ibuf_inv[2]; + + ibuf_inv[0]= 1.0f / (float)ibuf_x; + ibuf_inv[1]= 1.0f / (float)ibuf_y; + /* make UV's in pixel space so we can */ puv[0][0] = orig_uv[0][0] * ibuf_x; puv[0][1] = orig_uv[0][1] * ibuf_y; @@ -4178,7 +4181,7 @@ static void imapaint_lift_smear(ImBuf *ibuf, ImBuf *ibufb, int *pos) int a, tot; imapaint_set_region(region, 0, 0, pos[0], pos[1], ibufb->x, ibufb->y); - tot= imapaint_torus_split_region(region, ibuf, ibufb); + tot= imapaint_torus_split_region(region, ibufb, ibuf); for(a=0; aexec= texture_paint_image_from_view_exec; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= OPTYPE_REGISTER; diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c index e3a486a0fee..6e158fe2e66 100644 --- a/source/blender/editors/sculpt_paint/paint_utils.c +++ b/source/blender/editors/sculpt_paint/paint_utils.c @@ -235,7 +235,7 @@ void BRUSH_OT_curve_preset(wmOperatorType *ot) /* face-select ops */ static int paint_select_linked_exec(bContext *C, wmOperator *UNUSED(op)) { - select_linked_tfaces(C, CTX_data_active_object(C), NULL, 2); + paintface_select_linked(C, CTX_data_active_object(C), NULL, 2); ED_region_tag_redraw(CTX_wm_region(C)); return OPERATOR_FINISHED; } @@ -255,7 +255,7 @@ void PAINT_OT_face_select_linked(wmOperatorType *ot) static int paint_select_linked_pick_invoke(bContext *C, wmOperator *op, wmEvent *event) { int mode= RNA_boolean_get(op->ptr, "extend") ? 1:0; - select_linked_tfaces(C, CTX_data_active_object(C), event->mval, mode); + paintface_select_linked(C, CTX_data_active_object(C), event->mval, mode); ED_region_tag_redraw(CTX_wm_region(C)); return OPERATOR_FINISHED; } @@ -277,7 +277,8 @@ void PAINT_OT_face_select_linked_pick(wmOperatorType *ot) static int face_select_all_exec(bContext *C, wmOperator *op) { - selectall_tface(CTX_data_active_object(C), RNA_enum_get(op->ptr, "action")); + Object *ob= CTX_data_active_object(C); + paintface_deselect_all_visible(ob, RNA_enum_get(op->ptr, "action"), TRUE); ED_region_tag_redraw(CTX_wm_region(C)); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index fccee048525..efc39e6ae0a 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -3658,7 +3658,7 @@ static void SCULPT_OT_sculptmode_toggle(wmOperatorType *ot) /* api callbacks */ ot->exec= sculpt_toggle_mode; - ot->poll= ED_operator_object_active; + ot->poll= ED_operator_object_active_editable_mesh; ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index b0704e76138..32bb02ddcda 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -1102,15 +1102,13 @@ static int actkeys_framejump_exec(bContext *C, wmOperator *UNUSED(op)) ListBase anim_data= {NULL, NULL}; bAnimListElem *ale; int filter; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; - /* init edit data */ - memset(&ked, 0, sizeof(KeyframeEditData)); - + /* init edit data */ /* loop over action data, averaging values */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY | ANIMFILTER_NODUPLIS); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); @@ -1174,7 +1172,7 @@ static void snap_action_keys(bAnimContext *ac, short mode) bAnimListElem *ale; int filter; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc edit_cb; /* filter data */ @@ -1186,8 +1184,7 @@ static void snap_action_keys(bAnimContext *ac, short mode) /* get beztriple editing callbacks */ edit_cb= ANIM_editkeyframes_snap(mode); - - memset(&ked, 0, sizeof(KeyframeEditData)); + ked.scene= ac->scene; if (mode == ACTKEYS_SNAP_NEAREST_MARKER) { ked.list.first= (ac->markers) ? ac->markers->first : NULL; @@ -1274,13 +1271,12 @@ static void mirror_action_keys(bAnimContext *ac, short mode) bAnimListElem *ale; int filter; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc edit_cb; /* get beztriple editing callbacks */ edit_cb= ANIM_editkeyframes_mirror(mode); - - memset(&ked, 0, sizeof(KeyframeEditData)); + ked.scene= ac->scene; /* for 'first selected marker' mode, need to find first selected marker first! */ diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index 11b6123dbbb..d6039acce38 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -85,7 +85,7 @@ static void deselect_action_keys (bAnimContext *ac, short test, short sel) bAnimListElem *ale; int filter; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc test_cb, sel_cb; /* determine type-based settings */ @@ -98,7 +98,6 @@ static void deselect_action_keys (bAnimContext *ac, short test, short sel) ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* init BezTriple looping data */ - memset(&ked, 0, sizeof(KeyframeEditData)); test_cb= ANIM_editkeyframes_ok(BEZT_OK_SELECTED); /* See if we should be selecting or deselecting */ @@ -367,7 +366,7 @@ static void markers_selectkeys_between (bAnimContext *ac) int filter; KeyframeEditFunc ok_cb, select_cb; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; float min, max; /* get extreme markers */ @@ -378,8 +377,7 @@ static void markers_selectkeys_between (bAnimContext *ac) /* get editing funcs + data */ ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE); select_cb= ANIM_editkeyframes_select(SELECT_ADD); - - memset(&ked, 0, sizeof(KeyframeEditData)); + ked.f1= min; ked.f2= max; @@ -416,10 +414,9 @@ static void columnselect_action_keys (bAnimContext *ac, short mode) Scene *scene= ac->scene; CfraElem *ce; KeyframeEditFunc select_cb, ok_cb; - KeyframeEditData ked; + KeyframeEditData ked= {{0}};; /* initialise keyframe editing data */ - memset(&ked, 0, sizeof(KeyframeEditData)); /* build list of columns */ switch (mode) { @@ -613,13 +610,12 @@ static void select_moreless_action_keys (bAnimContext *ac, short mode) bAnimListElem *ale; int filter; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc build_cb; /* init selmap building data */ build_cb= ANIM_editkeyframes_buildselmap(mode); - memset(&ked, 0, sizeof(KeyframeEditData)); /* loop through all of the keys and select additional keyframes based on these */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY | ANIMFILTER_NODUPLIS); @@ -746,13 +742,12 @@ static void actkeys_mselect_single (bAnimContext *ac, bAnimListElem *ale, short bDopeSheet *ads= (ac->datatype == ANIMCONT_DOPESHEET) ? ac->data : NULL; int ds_filter = ((ads) ? (ads->filterflag) : (0)); - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc select_cb, ok_cb; /* get functions for selecting keyframes */ select_cb= ANIM_editkeyframes_select(select_mode); ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAME); - memset(&ked, 0, sizeof(KeyframeEditData)); ked.f1= selx; /* select the nominated keyframe on the given frame */ @@ -767,7 +762,7 @@ static void actkeys_mselect_leftright (bAnimContext *ac, short leftright, short int filter; KeyframeEditFunc ok_cb, select_cb; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; Scene *scene= ac->scene; /* if select mode is replace, deselect all keyframes (and channels) first */ @@ -782,8 +777,7 @@ static void actkeys_mselect_leftright (bAnimContext *ac, short leftright, short /* set callbacks and editing data */ ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE); select_cb= ANIM_editkeyframes_select(select_mode); - - memset(&ked, 0, sizeof(KeyframeEditFunc)); + if (leftright == ACTKEYS_LRSEL_LEFT) { ked.f1 = MINAFRAMEF; ked.f2 = (float)(CFRA + FRAME_CLICK_THRESH); @@ -847,10 +841,9 @@ static void actkeys_mselect_column(bAnimContext *ac, short select_mode, float se int filter; KeyframeEditFunc select_cb, ok_cb; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; /* initialise keyframe editing data */ - memset(&ked, 0, sizeof(KeyframeEditData)); /* set up BezTriple edit callbacks */ select_cb= ANIM_editkeyframes_select(select_mode); diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c index e72446366fe..a461fdcd9c6 100644 --- a/source/blender/editors/space_buttons/buttons_ops.c +++ b/source/blender/editors/space_buttons/buttons_ops.c @@ -175,10 +175,12 @@ static int file_browse_invoke(bContext *C, wmOperator *op, wmEvent *event) RNA_string_set(op->ptr, "filepath", str); MEM_freeN(str); - if(RNA_struct_find_property(op->ptr, "relative_path")) - if(!RNA_property_is_set(op->ptr, "relative_path")) - RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS); - + if(RNA_struct_find_property(op->ptr, "relative_path")) { + if(!RNA_property_is_set(op->ptr, "relative_path")) { + /* annoying exception!, if were dealign with the user prefs, default relative to be off */ + RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS && (ptr.data != &U)); + } + } WM_event_add_fileselect(C, op); return OPERATOR_RUNNING_MODAL; diff --git a/source/blender/editors/space_console/CMakeLists.txt b/source/blender/editors/space_console/CMakeLists.txt index b1d9920fed4..dbef838db65 100644 --- a/source/blender/editors/space_console/CMakeLists.txt +++ b/source/blender/editors/space_console/CMakeLists.txt @@ -38,8 +38,8 @@ SET(SRC space_console.c ) -IF(NOT WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) -ENDIF(NOT WITH_PYTHON) +IF(WITH_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) +ENDIF(WITH_PYTHON) BLENDERLIB(bf_editor_space_console "${SRC}" "${INC}") diff --git a/source/blender/editors/space_console/SConscript b/source/blender/editors/space_console/SConscript index 087090a7740..f246f08d7ac 100644 --- a/source/blender/editors/space_console/SConscript +++ b/source/blender/editors/space_console/SConscript @@ -17,7 +17,7 @@ incs = [ '../../blenloader', ] -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') env.BlenderLib ( 'bf_editors_space_console', sources, incs, defs, libtype=['core'], priority=[95] ) diff --git a/source/blender/editors/space_console/console_draw.c b/source/blender/editors/space_console/console_draw.c index edbb539e836..f1fead47a0a 100644 --- a/source/blender/editors/space_console/console_draw.c +++ b/source/blender/editors/space_console/console_draw.c @@ -270,7 +270,11 @@ static int console_draw_string(ConsoleDrawContext *cdc, char *str, int str_len, BLF_draw(mono, str); if(cdc->sel[0] != cdc->sel[1]) { - int isel[2]= {str_len - cdc->sel[1], str_len - cdc->sel[0]}; + int isel[2]; + + isel[0]= str_len - cdc->sel[1]; + isel[1]= str_len - cdc->sel[0]; + // glColor4ub(255, 255, 0, 96); // debug console_draw_sel(isel, cdc->xy, str_len, cdc->cwidth, cdc->lheight); STEP_SEL(-(str_len + 1)); @@ -447,8 +451,12 @@ int console_text_height(struct SpaceConsole *sc, struct ARegion *ar, ReportList void *console_text_pick(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports, int mouse_y) { - int mval[2] = {0, mouse_y}; void *mouse_pick= NULL; + int mval[2]; + + mval[0]= 0; + mval[1]= mouse_y; + console_text_main__internal(sc, ar, reports, 0, mval, &mouse_pick, NULL); return (void *)mouse_pick; } diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c index 2b419b0a833..ceb16d2aab9 100644 --- a/source/blender/editors/space_console/console_ops.c +++ b/source/blender/editors/space_console/console_ops.c @@ -404,12 +404,17 @@ static int insert_invoke(bContext *C, wmOperator *op, wmEvent *event) { // if(!RNA_property_is_set(op->ptr, "text")) { /* always set from keymap XXX */ if(!RNA_string_length(op->ptr, "text")) { - char str[2] = {event->ascii, '\0'}; /* if alt/ctrl/super are pressed pass through */ - if(event->ctrl || event->oskey) + if(event->ctrl || event->oskey) { return OPERATOR_PASS_THROUGH; + } + else { + char str[2]; + str[0]= event->ascii; + str[1]= '\0'; - RNA_string_set(op->ptr, "text", str); + RNA_string_set(op->ptr, "text", str); + } } return insert_exec(C, op); } @@ -863,7 +868,10 @@ static void console_modal_select_apply(bContext *C, wmOperator *op, wmEvent *eve SpaceConsole *sc= CTX_wm_space_console(C); ARegion *ar= CTX_wm_region(C); SetConsoleCursor *scu= op->customdata; - int mval[2] = {event->mval[0], event->mval[1]}; + int mval[2]; + + mval[0]= event->mval[0]; + mval[1]= event->mval[1]; set_cursor_to_pos(sc, ar, scu, mval, TRUE); ED_area_tag_redraw(CTX_wm_area(C)); diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index 70263788b13..72478133f1c 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -327,7 +327,7 @@ void console_keymap(struct wmKeyConfig *keyconf) RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_delete", DELKEY, KM_PRESS, 0, 0)->ptr, "type", DEL_NEXT_CHAR); RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0)->ptr, "type", DEL_PREV_CHAR); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON WM_keymap_add_item(keymap, "CONSOLE_OT_execute", RETKEY, KM_PRESS, 0, 0); /* python operator - space_text.py */ WM_keymap_add_item(keymap, "CONSOLE_OT_execute", PADENTER, KM_PRESS, 0, 0); diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index 43d5d54805d..41ad7ad3503 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -887,7 +887,7 @@ static int groupname_to_code(char *group) char buf[32]; char *lslash; - BLI_strncpy(buf, group, 31); + BLI_strncpy(buf, group, sizeof(buf)); lslash= BLI_last_slash(buf); if (lslash) lslash[0]= '\0'; diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index 8ad3ef08e85..6442cfbb4eb 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -59,6 +59,7 @@ #include "BLI_blenlib.h" #include "BLI_linklist.h" +#include "BLI_path_util.h" #include "BLI_storage_types.h" #include "BLI_dynstr.h" diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index 0aa0a87dbac..4e42e199521 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -85,7 +85,7 @@ static void deselect_graph_keys (bAnimContext *ac, short test, short sel) int filter; SpaceIpo *sipo= (SpaceIpo *)ac->sa->spacedata.first; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc test_cb, sel_cb; /* determine type-based settings */ @@ -95,7 +95,6 @@ static void deselect_graph_keys (bAnimContext *ac, short test, short sel) ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* init BezTriple looping data */ - memset(&ked, 0, sizeof(KeyframeEditData)); test_cb= ANIM_editkeyframes_ok(BEZT_OK_SELECTED); /* See if we should be selecting or deselecting */ diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c index bbc8925a152..e245dfba275 100644 --- a/source/blender/editors/space_image/image_buttons.c +++ b/source/blender/editors/space_image/image_buttons.c @@ -137,21 +137,28 @@ static void image_info(Image *ima, ImBuf *ibuf, char *str) if(ibuf->rect_float) { if(ibuf->channels!=4) { - sprintf(str+ofs, "%d float channel(s)", ibuf->channels); + ofs+= sprintf(str+ofs, "%d float channel(s)", ibuf->channels); } else if(ibuf->depth==32) - strcat(str, " RGBA float"); + ofs+= sprintf(str+ofs, " RGBA float"); else - strcat(str, " RGB float"); + ofs+= sprintf(str+ofs, " RGB float"); } else { if(ibuf->depth==32) - strcat(str, " RGBA byte"); + ofs+= sprintf(str+ofs, " RGBA byte"); else - strcat(str, " RGB byte"); + ofs+= sprintf(str+ofs, " RGB byte"); } if(ibuf->zbuf || ibuf->zbuf_float) - strcat(str, " + Z"); + ofs+= sprintf(str+ofs, " + Z"); + + if(ima->source==IMA_SRC_SEQUENCE) { + char *file= BLI_last_slash(ibuf->name); + if(file==NULL) file= ibuf->name; + else file++; + sprintf(str+ofs, ", %s", file); + } } diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index 429ba64ed0f..50730e3b35e 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -798,7 +798,7 @@ static int replace_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; RNA_string_get(op->ptr, "filepath", str); - BLI_strncpy(sima->image->name, str, sizeof(sima->image->name)-1); /* we cant do much if the str is longer then 240 :/ */ + BLI_strncpy(sima->image->name, str, sizeof(sima->image->name)); /* we cant do much if the str is longer then 240 :/ */ BKE_image_signal(sima->image, &sima->iuser, IMA_SIGNAL_RELOAD); WM_event_add_notifier(C, NC_IMAGE|NA_EDITED, sima->image); @@ -2098,11 +2098,9 @@ void IMAGE_OT_cycle_render_slot(wmOperatorType *ot) /* goes over all ImageUsers, and sets frame numbers if auto-refresh is set */ -void ED_image_update_frame(const bContext *C) +void ED_image_update_frame(const Main *mainp, int cfra) { - Main *mainp= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - wmWindowManager *wm= CTX_wm_manager(C); + wmWindowManager *wm; wmWindow *win; Tex *tex; @@ -2111,13 +2109,13 @@ void ED_image_update_frame(const bContext *C) if(tex->type==TEX_IMAGE && tex->ima) { if(ELEM(tex->ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) { if(tex->iuser.flag & IMA_ANIM_ALWAYS) - BKE_image_user_calc_frame(&tex->iuser, scene->r.cfra, 0); + BKE_image_user_calc_frame(&tex->iuser, cfra, 0); } } } /* image window, compo node users */ - if(wm) { + for(wm=mainp->wm.first; wm; wm= wm->id.next) { /* only 1 wm */ for(win= wm->windows.first; win; win= win->next) { ScrArea *sa; for(sa= win->screen->areabase.first; sa; sa= sa->next) { @@ -2126,12 +2124,12 @@ void ED_image_update_frame(const bContext *C) BGpic *bgpic; for(bgpic= v3d->bgpicbase.first; bgpic; bgpic= bgpic->next) if(bgpic->iuser.flag & IMA_ANIM_ALWAYS) - BKE_image_user_calc_frame(&bgpic->iuser, scene->r.cfra, 0); + BKE_image_user_calc_frame(&bgpic->iuser, cfra, 0); } else if(sa->spacetype==SPACE_IMAGE) { SpaceImage *sima= sa->spacedata.first; if(sima->iuser.flag & IMA_ANIM_ALWAYS) - BKE_image_user_calc_frame(&sima->iuser, scene->r.cfra, 0); + BKE_image_user_calc_frame(&sima->iuser, cfra, 0); } else if(sa->spacetype==SPACE_NODE) { SpaceNode *snode= sa->spacedata.first; @@ -2143,7 +2141,7 @@ void ED_image_update_frame(const bContext *C) ImageUser *iuser= node->storage; if(ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) if(iuser->flag & IMA_ANIM_ALWAYS) - BKE_image_user_calc_frame(iuser, scene->r.cfra, 0); + BKE_image_user_calc_frame(iuser, cfra, 0); } } } diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c index 0789114c054..7a6e5dad017 100644 --- a/source/blender/editors/space_info/info_stats.c +++ b/source/blender/editors/space_info/info_stats.c @@ -327,12 +327,10 @@ static void stats_dupli_object(Base *base, Object *ob, SceneStats *stats) /* Statistics displayed in info header. Called regularly on scene changes. */ static void stats_update(Scene *scene) { - SceneStats stats; + SceneStats stats= {0}; Object *ob= (scene->basact)? scene->basact->object: NULL; Base *base; - memset(&stats, 0, sizeof(stats)); - if(scene->obedit) { /* Edit Mode */ stats_object_edit(scene->obedit, &stats); @@ -341,7 +339,7 @@ static void stats_update(Scene *scene) /* Pose Mode */ stats_object_pose(ob, &stats); } - else if(ob && (ob->flag & (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT))) { + else if(ob && (ob->flag & OB_MODE_ALL_PAINT)) { /* Sculpt and Paint Mode */ stats_object_paint(ob, &stats); } diff --git a/source/blender/editors/space_logic/CMakeLists.txt b/source/blender/editors/space_logic/CMakeLists.txt index 64519d606f1..7716e45167f 100644 --- a/source/blender/editors/space_logic/CMakeLists.txt +++ b/source/blender/editors/space_logic/CMakeLists.txt @@ -38,7 +38,7 @@ SET(SRC ) IF(WITH_GAMEENGINE) - ADD_DEFINITIONS(-DGAMEBLENDER) + ADD_DEFINITIONS(-DWITH_GAMEENGINE) ENDIF(WITH_GAMEENGINE) BLENDERLIB(bf_editor_space_logic "${SRC}" "${INC}") diff --git a/source/blender/editors/space_logic/SConscript b/source/blender/editors/space_logic/SConscript index 0ce2eee575e..4d02363ff90 100644 --- a/source/blender/editors/space_logic/SConscript +++ b/source/blender/editors/space_logic/SConscript @@ -10,6 +10,6 @@ incs += ' ../../makesrna ../interface' defs = [] if env['WITH_BF_GAMEENGINE']: - defs.append('GAMEBLENDER=1') + defs.append('WITH_GAMEENGINE') env.BlenderLib ( 'bf_editors_space_game', sources, Split(incs), defs, libtype=['core'], priority=[120] ) diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index e13a229fdd1..886bd59235e 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -1258,7 +1258,7 @@ static int nlaedit_apply_scale_exec (bContext *C, wmOperator *UNUSED(op)) bAnimListElem *ale; int filter; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) @@ -1269,7 +1269,6 @@ static int nlaedit_apply_scale_exec (bContext *C, wmOperator *UNUSED(op)) ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); /* init the editing data */ - memset(&ked, 0, sizeof(KeyframeEditData)); /* for each NLA-Track, apply scale of all selected strips */ for (ale= anim_data.first; ale; ale= ale->next) { diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 78ae82c57b0..c34ade4f5e2 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -198,7 +198,7 @@ static void node_browse_tex_cb(bContext *C, void *ntree_v, void *node_v) node->id= &tex->id; id_us_plus(node->id); - BLI_strncpy(node->name, node->id->name+2, 21); + BLI_strncpy(node->name, node->id->name+2, sizeof(node->name)); nodeSetActive(ntree, node); @@ -285,7 +285,7 @@ static void node_browse_text_cb(bContext *C, void *ntree_v, void *node_v) oldid= node->id; node->id= BLI_findlink(&bmain->text, node->menunr-1); id_us_plus(node->id); - BLI_strncpy(node->name, node->id->name+2, 21); /* huh? why 21? */ + BLI_strncpy(node->name, node->id->name+2, sizeof(node->name)); node->custom1= BSET(node->custom1, NODE_DYNAMIC_NEW); @@ -1177,7 +1177,7 @@ static void node_texture_buts_proc(uiLayout *layout, bContext *UNUSED(C), Pointe case TEX_MARBLE: row= uiLayoutRow(col, 0); - uiItemR(row, &tex_ptr, "stype", UI_ITEM_R_EXPAND, NULL, 0); + uiItemR(row, &tex_ptr, "marble_type", UI_ITEM_R_EXPAND, NULL, 0); row= uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, 0); row= uiLayoutRow(col, 0); @@ -1186,18 +1186,18 @@ static void node_texture_buts_proc(uiLayout *layout, bContext *UNUSED(C), Pointe case TEX_WOOD: uiItemR(col, &tex_ptr, "noise_basis", 0, "", 0); - uiItemR(col, &tex_ptr, "stype", 0, "", 0); + uiItemR(col, &tex_ptr, "wood_type", 0, "", 0); row= uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "noisebasis_2", UI_ITEM_R_EXPAND, NULL, 0); row= uiLayoutRow(col, 0); - uiLayoutSetActive(row, !(RNA_enum_get(&tex_ptr, "stype")==TEX_BAND || RNA_enum_get(&tex_ptr, "stype")==TEX_RING)); + uiLayoutSetActive(row, !(RNA_enum_get(&tex_ptr, "wood_type")==TEX_BAND || RNA_enum_get(&tex_ptr, "wood_type")==TEX_RING)); uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, 0); break; case TEX_CLOUDS: uiItemR(col, &tex_ptr, "noise_basis", 0, "", 0); row= uiLayoutRow(col, 0); - uiItemR(row, &tex_ptr, "stype", UI_ITEM_R_EXPAND, NULL, 0); + uiItemR(row, &tex_ptr, "cloud_type", UI_ITEM_R_EXPAND, NULL, 0); row= uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, 0); uiItemR(col, &tex_ptr, "noise_depth", UI_ITEM_R_EXPAND, "Depth", 0); diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c index a81d6e3b0ce..07fe497781e 100644 --- a/source/blender/editors/space_node/node_draw.c +++ b/source/blender/editors/space_node/node_draw.c @@ -78,7 +78,7 @@ void ED_node_changed_update(ID *id, bNode *node) if(treetype==NTREE_SHADER) { DAG_id_flush_update(id, 0); - WM_main_add_notifier(NC_MATERIAL|ND_SHADING, id); + WM_main_add_notifier(NC_MATERIAL|ND_SHADING_DRAW, id); } else if(treetype==NTREE_COMPOSIT) { NodeTagChanged(edittree, node); @@ -432,11 +432,9 @@ static void node_draw_mute_line(View2D *v2d, SpaceNode *snode, bNode *node) { bNodeSocket *valsock= NULL, *colsock= NULL, *vecsock= NULL; bNodeSocket *sock; - bNodeLink link; + bNodeLink link= {0}; int a; - memset(&link, 0, sizeof(bNodeLink)); - /* connect the first value buffer in with first value out */ /* connect the first RGBA buffer in with first RGBA out */ diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index b8bfed2b75e..28de4c232e9 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -1785,7 +1785,7 @@ static int cut_links_intersect(bNodeLink *link, float mcoords[][2], int tot) if(node_link_bezier_points(NULL, NULL, link, coord_array, LINK_RESOL)) { for(i=0; i 0) return 1; } @@ -1904,13 +1904,14 @@ void NODE_OT_read_renderlayers(wmOperatorType *ot) static int node_read_fullsamplelayers_exec(bContext *C, wmOperator *UNUSED(op)) { + Main *bmain= CTX_data_main(C); SpaceNode *snode= CTX_wm_space_node(C); Scene *curscene= CTX_data_scene(C); Render *re= RE_NewRender(curscene->id.name); // WM_cursor_wait(1); - RE_MergeFullSample(re, curscene, snode->nodetree); + RE_MergeFullSample(re, bmain, curscene, snode->nodetree); snode_notify(C, snode); // WM_cursor_wait(0); diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index 60431f0e36d..fad34322f0a 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -2211,8 +2211,8 @@ static int tree_element_active_ebone(bContext *C, Scene *scene, TreeElement *te, if(set) { if(!(ebone->flag & BONE_HIDDEN_A)) { bArmature *arm= scene->obedit->data; - if(set==2) ED_armature_deselectall(scene->obedit, 2); // only clear active tag - else ED_armature_deselectall(scene->obedit, 0); // deselect + if(set==2) ED_armature_deselect_all(scene->obedit, 2); // only clear active tag + else ED_armature_deselect_all(scene->obedit, 0); // deselect ebone->flag |= BONE_SELECTED|BONE_ROOTSEL|BONE_TIPSEL; arm->act_edbone= ebone; @@ -5049,11 +5049,11 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname) bArmature *arm= (bArmature *)tselem->id; if(arm->edbo) { EditBone *ebone= te->directdata; - char newname[32]; + char newname[sizeof(ebone->name)]; /* restore bone name */ - BLI_strncpy(newname, ebone->name, 32); - BLI_strncpy(ebone->name, oldname, 32); + BLI_strncpy(newname, ebone->name, sizeof(ebone->name)); + BLI_strncpy(ebone->name, oldname, sizeof(ebone->name)); ED_armature_bone_rename(obedit->data, oldname, newname); WM_event_add_notifier(C, NC_OBJECT|ND_POSE, OBACT); } @@ -5064,15 +5064,15 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname) { Bone *bone= te->directdata; Object *ob; - char newname[32]; + char newname[sizeof(bone->name)]; // always make current object active tree_element_set_active_object(C, scene, soops, te, 1); ob= OBACT; /* restore bone name */ - BLI_strncpy(newname, bone->name, 32); - BLI_strncpy(bone->name, oldname, 32); + BLI_strncpy(newname, bone->name, sizeof(bone->name)); + BLI_strncpy(bone->name, oldname, sizeof(bone->name)); ED_armature_bone_rename(ob->data, oldname, newname); WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); } @@ -5081,15 +5081,15 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname) { bPoseChannel *pchan= te->directdata; Object *ob; - char newname[32]; + char newname[sizeof(pchan->name)]; // always make current object active tree_element_set_active_object(C, scene, soops, te, 1); ob= OBACT; /* restore bone name */ - BLI_strncpy(newname, pchan->name, 32); - BLI_strncpy(pchan->name, oldname, 32); + BLI_strncpy(newname, pchan->name, sizeof(pchan->name)); + BLI_strncpy(pchan->name, oldname, sizeof(pchan->name)); ED_armature_bone_rename(ob->data, oldname, newname); WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); } diff --git a/source/blender/editors/space_script/CMakeLists.txt b/source/blender/editors/space_script/CMakeLists.txt index 88c0ea56ab2..17fcf2296e9 100644 --- a/source/blender/editors/space_script/CMakeLists.txt +++ b/source/blender/editors/space_script/CMakeLists.txt @@ -38,8 +38,7 @@ SET(SRC IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC} ../../python) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(bf_editor_space_script "${SRC}" "${INC}") diff --git a/source/blender/editors/space_script/SConscript b/source/blender/editors/space_script/SConscript index f187df19117..8c75b999bc0 100644 --- a/source/blender/editors/space_script/SConscript +++ b/source/blender/editors/space_script/SConscript @@ -10,7 +10,7 @@ incs += ' ../../python' defs = [] -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') env.BlenderLib ( 'bf_editors_space_script', sources, Split(incs), defs, libtype=['core'], priority=[90] ) diff --git a/source/blender/editors/space_script/script_edit.c b/source/blender/editors/space_script/script_edit.c index 23bc385c758..b9ece0add2f 100644 --- a/source/blender/editors/space_script/script_edit.c +++ b/source/blender/editors/space_script/script_edit.c @@ -46,7 +46,7 @@ #include "script_intern.h" // own include -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" /* BPY_run_python_script */ #endif @@ -54,7 +54,7 @@ static int run_pyfile_exec(bContext *C, wmOperator *op) { char path[512]; RNA_string_get(op->ptr, "filepath", path); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(BPY_run_python_script(C, path, NULL, op->reports)) { ARegion *ar= CTX_wm_region(C); ED_region_tag_redraw(ar); @@ -84,7 +84,7 @@ void SCRIPT_OT_python_file_run(wmOperatorType *ot) static int script_reload_exec(bContext *C, wmOperator *UNUSED(op)) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* TODO, this crashes on netrender and keying sets, need to look into why * disable for now unless running in debug mode */ WM_cursor_wait(1); diff --git a/source/blender/editors/space_script/space_script.c b/source/blender/editors/space_script/space_script.c index 66f630bb5b3..57d7bba8e3b 100644 --- a/source/blender/editors/space_script/space_script.c +++ b/source/blender/editors/space_script/space_script.c @@ -49,7 +49,7 @@ #include "UI_resources.h" #include "UI_view2d.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -94,7 +94,7 @@ static void script_free(SpaceLink *sl) { SpaceScript *sscript= (SpaceScript*) sl; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /*free buttons references*/ if (sscript->but_refs) { // XXX BPy_Set_DrawButtonsList(sscript->but_refs); @@ -150,11 +150,13 @@ static void script_main_area_draw(const bContext *C, ARegion *ar) /* data... */ // BPY_run_python_script(C, "/root/blender-svn/blender25/test.py", NULL); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (sscript->script) { //BPY_run_python_script_space(scpt->script.filename, NULL); BPY_run_script_space_draw(C, sscript); } +#else + (void)sscript; #endif /* reset view matrix */ diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index 35f27953633..286442ba08c 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -1159,8 +1159,9 @@ static int sequencer_snap_exec(bContext *C, wmOperator *op) } SEQ_END - /* test for effects and overlap */ - SEQP_BEGIN(ed, seq) { + /* test for effects and overlap + * dont use SEQP_BEGIN since that would be recursive */ + for(seq= ed->seqbasep->first; seq; seq= seq->next) { if(seq->flag & SELECT && !(seq->depth==0 && seq->flag & SEQ_LOCK)) { seq->flag &= ~SEQ_OVERLAP; if( seq_test_overlap(ed->seqbasep, seq) ) { @@ -1176,7 +1177,6 @@ static int sequencer_snap_exec(bContext *C, wmOperator *op) calc_sequence(scene, seq); } } - SEQ_END; /* as last: */ sort_seq(scene); @@ -1498,6 +1498,42 @@ void SEQUENCER_OT_reassign_inputs(struct wmOperatorType *ot) } +static int sequencer_swap_inputs_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Sequence *seq, *last_seq = seq_active_get(scene); + + if(last_seq->seq1==NULL || last_seq->seq2 == NULL) { + BKE_report(op->reports, RPT_ERROR, "No valid inputs to swap"); + return OPERATOR_CANCELLED; + } + + seq = last_seq->seq1; + last_seq->seq1 = last_seq->seq2; + last_seq->seq2 = seq; + + update_changed_seq_and_deps(scene, last_seq, 1, 1); + + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); + + return OPERATOR_FINISHED; +} +void SEQUENCER_OT_swap_inputs(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Swap Inputs"; + ot->idname= "SEQUENCER_OT_swap_inputs"; + ot->description="Swap the first two inputs for the effects strip"; + + /* api callbacks */ + ot->exec= sequencer_swap_inputs_exec; + ot->poll= sequencer_effect_poll; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + + /* cut operator */ static EnumPropertyItem prop_cut_types[] = { {SEQ_CUT_SOFT, "SOFT", 0, "Soft", ""}, @@ -2008,16 +2044,16 @@ static int sequencer_meta_separate_exec(bContext *C, wmOperator *UNUSED(op)) recurs_del_seq_flag(scene, ed->seqbasep, SEQ_FLAG_DELETE, 0); - /* test for effects and overlap */ - SEQP_BEGIN(ed, seq) { + /* test for effects and overlap + * dont use SEQP_BEGIN since that would be recursive */ + for(seq= ed->seqbasep->first; seq; seq= seq->next) { if(seq->flag & SELECT) { seq->flag &= ~SEQ_OVERLAP; - if( seq_test_overlap(ed->seqbasep, seq) ) { + if(seq_test_overlap(ed->seqbasep, seq)) { shuffle_seq(ed->seqbasep, seq, scene); } } } - SEQ_END; sort_seq(scene); seq_update_muting(scene, ed); diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h index bf0dfff8e98..116786c3009 100644 --- a/source/blender/editors/space_sequencer/sequencer_intern.h +++ b/source/blender/editors/space_sequencer/sequencer_intern.h @@ -87,6 +87,7 @@ void SEQUENCER_OT_unlock(struct wmOperatorType *ot); void SEQUENCER_OT_reload(struct wmOperatorType *ot); void SEQUENCER_OT_refresh_all(struct wmOperatorType *ot); void SEQUENCER_OT_reassign_inputs(struct wmOperatorType *ot); +void SEQUENCER_OT_swap_inputs(struct wmOperatorType *ot); void SEQUENCER_OT_duplicate(struct wmOperatorType *ot); void SEQUENCER_OT_delete(struct wmOperatorType *ot); void SEQUENCER_OT_images_separate(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c index 041b475223b..62c478f916f 100644 --- a/source/blender/editors/space_sequencer/sequencer_ops.c +++ b/source/blender/editors/space_sequencer/sequencer_ops.c @@ -60,6 +60,7 @@ void sequencer_operatortypes(void) WM_operatortype_append(SEQUENCER_OT_reload); WM_operatortype_append(SEQUENCER_OT_refresh_all); WM_operatortype_append(SEQUENCER_OT_reassign_inputs); + WM_operatortype_append(SEQUENCER_OT_swap_inputs); WM_operatortype_append(SEQUENCER_OT_duplicate); WM_operatortype_append(SEQUENCER_OT_delete); WM_operatortype_append(SEQUENCER_OT_images_separate); @@ -169,6 +170,7 @@ void sequencer_keymap(wmKeyConfig *keyconf) RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_swap", RIGHTARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "side", SEQ_SIDE_RIGHT); WM_keymap_add_item(keymap, "SEQUENCER_OT_snap", SKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "SEQUENCER_OT_swap_inputs", SKEY, KM_PRESS, KM_ALT, 0); /* multicam editing keyboard layout, switch to camera 1-10 using regular number keys */ diff --git a/source/blender/editors/space_text/CMakeLists.txt b/source/blender/editors/space_text/CMakeLists.txt index b53a86fbe39..708fc161655 100644 --- a/source/blender/editors/space_text/CMakeLists.txt +++ b/source/blender/editors/space_text/CMakeLists.txt @@ -40,8 +40,7 @@ SET(SRC IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC} ../../python) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(bf_editor_text "${SRC}" "${INC}") diff --git a/source/blender/editors/space_text/SConscript b/source/blender/editors/space_text/SConscript index bd87a799756..6d2816b7834 100644 --- a/source/blender/editors/space_text/SConscript +++ b/source/blender/editors/space_text/SConscript @@ -7,7 +7,7 @@ incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' incs += ' ../../python ../../makesrna ../../blenfont' -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') env.BlenderLib ( 'bf_editors_space_text', sources, Split(incs), defs, libtype=['core'], priority=[95] ) diff --git a/source/blender/editors/space_text/text_header.c b/source/blender/editors/space_text/text_header.c index 464e144515f..b7bf61497bd 100644 --- a/source/blender/editors/space_text/text_header.c +++ b/source/blender/editors/space_text/text_header.c @@ -57,7 +57,7 @@ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // XXX #include "BPY_menus.h" #endif diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c index af29e575482..32b71dbefb7 100644 --- a/source/blender/editors/space_text/text_ops.c +++ b/source/blender/editors/space_text/text_ops.c @@ -58,7 +58,7 @@ #include "RNA_access.h" #include "RNA_define.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -171,9 +171,9 @@ static int new_exec(bContext *C, wmOperator *UNUSED(op)) else if(st) { st->text= text; st->top= 0; + text_drawcache_tag_update(st, 1); } - text_drawcache_tag_update(st, 1); WM_event_add_notifier(C, NC_TEXT|NA_ADDED, text); return OPERATOR_FINISHED; @@ -310,7 +310,7 @@ static int reload_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(text->compiled) BPY_free_compiled_text(text); #endif @@ -557,7 +557,7 @@ static int run_script_poll(bContext *C) static int run_script_exec(bContext *C, wmOperator *op) { -#ifdef DISABLE_PYTHON +#ifndef WITH_PYTHON (void)C; /* unused */ BKE_report(op->reports, RPT_ERROR, "Python disabled in this build"); @@ -597,7 +597,7 @@ void TEXT_OT_run_script(wmOperatorType *ot) static int refresh_pyconstraints_exec(bContext *UNUSED(C), wmOperator *UNUSED(op)) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #if 0 Text *text= CTX_data_edit_text(C); Object *ob; @@ -2603,12 +2603,16 @@ static int insert_invoke(bContext *C, wmOperator *op, wmEvent *event) // if(!RNA_property_is_set(op->ptr, "text")) { /* always set from keymap XXX */ if(!RNA_string_length(op->ptr, "text")) { - char str[2] = {event->ascii, '\0'}; /* if alt/ctrl/super are pressed pass through */ - if(event->ctrl || event->oskey) + if(event->ctrl || event->oskey) { return OPERATOR_PASS_THROUGH; - - RNA_string_set(op->ptr, "text", str); + } + else { + char str[2]; + str[0]= event->ascii; + str[1]= '\0'; + RNA_string_set(op->ptr, "text", str); + } } ret = insert_exec(C, op); diff --git a/source/blender/editors/space_text/text_python.c b/source/blender/editors/space_text/text_python.c index 6e64bef4c85..720e80ec162 100644 --- a/source/blender/editors/space_text/text_python.c +++ b/source/blender/editors/space_text/text_python.c @@ -358,7 +358,7 @@ short do_texttools(SpaceText *st, char ascii, unsigned short evnt, short val) } #if 0 -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Run text plugin scripts if enabled */ if(st->doplugins && event && val) { if(BPY_menu_do_shortcut(PYMENU_TEXTPLUGIN, event, qual)) { diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c index a03baa2fa72..1de7704c3f0 100644 --- a/source/blender/editors/space_time/space_time.c +++ b/source/blender/editors/space_time/space_time.c @@ -281,7 +281,7 @@ static ActKeyColumn *time_cfra_find_ak (ActKeyColumn *ak, float cframe) /* helper for time_draw_keyframes() */ static void time_draw_idblock_keyframes(View2D *v2d, ID *id, short onlysel) { - bDopeSheet ads; + bDopeSheet ads= {0}; DLRBT_Tree keys; ActKeyColumn *ak; @@ -290,7 +290,6 @@ static void time_draw_idblock_keyframes(View2D *v2d, ID *id, short onlysel) /* init dopesheet settings */ // FIXME: the ob_to_keylist function currently doesn't take this into account... - memset(&ads, 0, sizeof(bDopeSheet)); if (onlysel) ads.filterflag |= ADS_FILTER_ONLYSEL; diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt index 855d770c784..e9ed8335061 100644 --- a/source/blender/editors/space_view3d/CMakeLists.txt +++ b/source/blender/editors/space_view3d/CMakeLists.txt @@ -44,6 +44,7 @@ SET(SRC view3d_buttons.c view3d_draw.c view3d_edit.c + view3d_fly.c view3d_header.c view3d_ops.c view3d_select.c @@ -54,7 +55,7 @@ SET(SRC IF(WITH_GAMEENGINE) LIST(APPEND INC ../../../kernel/gen_system) - ADD_DEFINITIONS(-DGAMEBLENDER) + ADD_DEFINITIONS(-DWITH_GAMEENGINE) ENDIF(WITH_GAMEENGINE) IF(WIN32) diff --git a/source/blender/editors/space_view3d/SConscript b/source/blender/editors/space_view3d/SConscript index d9074113ba9..bb32f8b926e 100644 --- a/source/blender/editors/space_view3d/SConscript +++ b/source/blender/editors/space_view3d/SConscript @@ -12,7 +12,7 @@ incs += ' #/intern/smoke/extern' incs += ' #source/kernel/gen_system' if env['WITH_BF_GAMEENGINE']: - defs.append('GAMEBLENDER=1') + defs.append('WITH_GAMEENGINE') if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): incs += ' ' + env['BF_PTHREADS_INC'] diff --git a/source/blender/editors/space_view3d/drawanimviz.c b/source/blender/editors/space_view3d/drawanimviz.c index 52bb90aa8f0..7035006ea70 100644 --- a/source/blender/editors/space_view3d/drawanimviz.c +++ b/source/blender/editors/space_view3d/drawanimviz.c @@ -31,6 +31,7 @@ #include #include +#include "BLO_sys_types.h" #include "DNA_anim_types.h" #include "DNA_armature_types.h" @@ -213,7 +214,7 @@ void draw_motion_path_instance(Scene *scene, if (i == 0) { sprintf(str, "%d", (i+sfra)); mul_v3_m4v3(co, ob->imat, mpv->co); - view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); } else if ((i > stepsize) && (i < len-stepsize)) { bMotionPathVert *mpvP = (mpv - stepsize); @@ -222,7 +223,7 @@ void draw_motion_path_instance(Scene *scene, if ((equals_v3v3(mpv->co, mpvP->co)==0) || (equals_v3v3(mpv->co, mpvN->co)==0)) { sprintf(str, "%d", (sfra+i)); mul_v3_m4v3(co, ob->imat, mpv->co); - view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); } } } @@ -280,7 +281,7 @@ void draw_motion_path_instance(Scene *scene, sprintf(str, "%d", (sfra+i)); mul_v3_m4v3(co, ob->imat, mpv->co); - view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); } } } diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 33776abf4a0..8cfb11478be 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -1979,7 +1979,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) /* catch exception for bone with hidden parent */ flag= eBone->flag; - if ( (eBone->parent) && ((eBone->parent->flag & BONE_HIDDEN_A) || (eBone->parent->layer & arm->layer)==0) ) + if ( (eBone->parent) && !EBONE_VISIBLE(arm, eBone->parent)) flag &= ~BONE_CONNECTED; /* set temporary flag for drawing bone as active, but only if selected */ @@ -2018,7 +2018,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) /* catch exception for bone with hidden parent */ flag= eBone->flag; - if ( (eBone->parent) && ((eBone->parent->flag & BONE_HIDDEN_A) || (eBone->parent->layer & arm->layer)==0) ) + if ( (eBone->parent) && !EBONE_VISIBLE(arm, eBone->parent)) flag &= ~BONE_CONNECTED; /* set temporary flag for drawing bone as active, but only if selected */ diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index bc340ef5b4b..7d30c404bf0 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -320,8 +320,12 @@ static void draw_xyz_wire(float *c, float size, int axis) { float v1[3]= {0.f, 0.f, 0.f}, v2[3] = {0.f, 0.f, 0.f}; float dim = size * 0.1; - float dx[3]={dim, 0.0, 0.0}, dy[3]={0.0, dim, 0.0}, dz[3]={0.0, 0.0, dim}; - + float dx[3], dy[3], dz[3]; + + dx[0]=dim; dx[1]=0.f; dx[2]=0.f; + dy[0]=0.f; dy[1]=dim; dy[2]=0.f; + dz[0]=0.f; dz[1]=0.f; dz[2]=dim; + switch(axis) { case 0: /* x axis */ glBegin(GL_LINES); @@ -524,9 +528,7 @@ void drawcircball(int mode, float *cent, float rad, float tmat[][4]) /* circle for object centers, special_color is for library or ob users */ static void drawcentercircle(View3D *v3d, RegionView3D *rv3d, float *co, int selstate, int special_color) { - float vec[3]= {rv3d->persmat[0][3], rv3d->persmat[1][3], rv3d->persmat[2][3]}; - float size= rv3d->pixsize*((float)U.obcenter_dia*0.5f); - size *= dot_v3v3(vec, co) + rv3d->persmat[3][3]; + const float size= view3d_pixel_size(rv3d, co) * (float)U.obcenter_dia * 0.5f; /* using gldepthfunc guarantees that it does write z values, but not checks for it, so centers remain visible independt order of drawing */ if(v3d->zbuf) glDepthFunc(GL_ALWAYS); @@ -558,10 +560,10 @@ static int CachedTextLevel= 0; typedef struct ViewCachedString { struct ViewCachedString *next, *prev; float vec[3], col[4]; - char str[128]; short mval[2]; short xoffs; short flag; + /* str is allocated past the end */ } ViewCachedString; void view3d_cached_text_draw_begin() @@ -573,15 +575,18 @@ void view3d_cached_text_draw_begin() void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag) { + int alloc_len= strlen(str) + 1; ListBase *strings= &CachedText[CachedTextLevel-1]; - ViewCachedString *vos= MEM_callocN(sizeof(ViewCachedString), "ViewCachedString"); + ViewCachedString *vos= MEM_callocN(sizeof(ViewCachedString) + alloc_len, "ViewCachedString"); BLI_addtail(strings, vos); - BLI_strncpy(vos->str, str, 128); copy_v3_v3(vos->vec, co); glGetFloatv(GL_CURRENT_COLOR, vos->col); vos->xoffs= xoffs; vos->flag= flag; + + /* allocate past the end */ + memcpy(++vos, str, alloc_len); } void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, float mat[][4]) @@ -635,8 +640,14 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, floa } #endif if(vos->mval[0]!=IS_CLIPPED) { + const char *str= (char *)(vos+1); glColor3fv(vos->col); - BLF_draw_default((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, vos->str); + if(vos->flag & V3D_CACHE_TEXT_ASCII) { + BLF_draw_default_ascii((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, str); + } + else { + BLF_draw_default((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, str); + } } } @@ -888,9 +899,10 @@ static void draw_transp_spot_volume(Lamp *la, float x, float z) static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag) { Object *ob= base->object; + const float pixsize= view3d_pixel_size(rv3d, ob->obmat[3]); Lamp *la= ob->data; float vec[3], lvec[3], vvec[3], circrad, x,y,z; - float pixsize, lampsize; + float lampsize; float imat[4][4], curcol[4]; char col[4]; int drawcone= (dt>OB_WIRE && !(G.f & G_PICKSEL) && la->type == LA_SPOT && (la->mode & LA_SHOW_CONE)); @@ -906,8 +918,6 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, glLoadMatrixf(rv3d->viewmat); /* lets calculate the scale: */ - pixsize= rv3d->persmat[0][3]*ob->obmat[3][0]+ rv3d->persmat[1][3]*ob->obmat[3][1]+ rv3d->persmat[2][3]*ob->obmat[3][2]+ rv3d->persmat[3][3]; - pixsize*= rv3d->pixsize; lampsize= pixsize*((float)U.obcenter_dia*0.5f); /* and view aligned matrix: */ @@ -1809,8 +1819,9 @@ static void draw_dm_edges_sel_interp__setDrawInterpOptions(void *userData, int i static void draw_dm_edges_sel_interp(DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol) { - unsigned char *cols[2] = {baseCol, selCol}; - + unsigned char *cols[2]; + cols[0]= baseCol; + cols[1]= selCol; dm->drawMappedEdgesInterp(dm, draw_dm_edges_sel_interp__setDrawOptions, draw_dm_edges_sel_interp__setDrawInterpOptions, cols); } @@ -2113,7 +2124,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E else sprintf(val, conv_float, len_v3v3(v1, v2)); - view3d_cached_text_draw_add(vmid, val, 0, 0); + view3d_cached_text_draw_add(vmid, val, 0, V3D_CACHE_TEXT_ASCII); } } } @@ -2152,7 +2163,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E else sprintf(val, conv_float, area); - view3d_cached_text_draw_add(efa->cent, val, 0, 0); + view3d_cached_text_draw_add(efa->cent, val, 0, V3D_CACHE_TEXT_ASCII); } } } @@ -2194,13 +2205,13 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E /* Vec 1 */ sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v4, v1, v2))); interp_v3_v3v3(fvec, efa->cent, efa->v1->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); } if( (e1->f & e2->f & SELECT) || (do_moving && (efa->v2->f & SELECT)) ) { /* Vec 2 */ sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v1, v2, v3))); interp_v3_v3v3(fvec, efa->cent, efa->v2->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); } if( (e2->f & e3->f & SELECT) || (do_moving && (efa->v3->f & SELECT)) ) { /* Vec 3 */ @@ -2209,14 +2220,14 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E else sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v2, v3, v1))); interp_v3_v3v3(fvec, efa->cent, efa->v3->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); } /* Vec 4 */ if(efa->v4) { if( (e3->f & e4->f & SELECT) || (do_moving && (efa->v4->f & SELECT)) ) { sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v3, v4, v1))); interp_v3_v3v3(fvec, efa->cent, efa->v4->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); } } } @@ -3255,16 +3266,22 @@ static void draw_particle_arrays(int draw_as, int totpoint, int ob_dt, int selec static void draw_particle(ParticleKey *state, int draw_as, short draw, float pixsize, float imat[4][4], float *draw_line, ParticleBillboardData *bb, ParticleDrawData *pdd) { float vec[3], vec2[3]; - float *vd = pdd->vd; - float *cd = pdd->cd; + float *vd = NULL; + float *cd = NULL; float ma_r=0.0f; float ma_g=0.0f; float ma_b=0.0f; - if(pdd->ma_r) { - ma_r = *pdd->ma_r; - ma_g = *pdd->ma_g; - ma_b = *pdd->ma_b; + /* null only for PART_DRAW_CIRC */ + if(pdd) { + vd = pdd->vd; + cd = pdd->cd; + + if(pdd->ma_r) { + ma_r = *pdd->ma_r; + ma_g = *pdd->ma_g; + ma_b = *pdd->ma_b; + } } switch(draw_as){ @@ -3356,8 +3373,6 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix } case PART_DRAW_CIRC: { - if(pdd->ma_r) - glColor3f(ma_r,ma_g,ma_b); drawcircball(GL_LINE_LOOP, state->co, pixsize, imat); break; } @@ -3416,7 +3431,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv ParticleData *pars, *pa; ParticleKey state, *states=0; ParticleBillboardData bb; - ParticleSimulationData sim = {scene, ob, psys, NULL}; + ParticleSimulationData sim= {0}; ParticleDrawData *pdd = psys->pdd; Material *ma; float vel[3], imat[4][4]; @@ -3454,6 +3469,9 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv return; /* 2. */ + sim.scene= scene; + sim.ob= ob; + sim.psys= psys; sim.psmd = psmd = psys_get_modifier(ob,psys); if(part->phystype==PART_PHYS_KEYED){ @@ -3491,12 +3509,6 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv else cpack(0); - if(pdd) { - pdd->ma_r = &ma_r; - pdd->ma_g = &ma_g; - pdd->ma_b = &ma_b; - } - timestep= psys_get_timestep(&sim); if( (base->flag & OB_FROMDUPLI) && (ob->flag & OB_FROMGROUP) ) { @@ -3532,12 +3544,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv case PART_DRAW_CROSS: case PART_DRAW_AXIS: /* lets calculate the scale: */ - pixsize= rv3d->persmat[0][3]*ob->obmat[3][0]+ rv3d->persmat[1][3]*ob->obmat[3][1]+ rv3d->persmat[2][3]*ob->obmat[3][2]+ rv3d->persmat[3][3]; - pixsize*= rv3d->pixsize; - if(part->draw_size==0.0) - pixsize*=2.0; - else - pixsize*=part->draw_size; + pixsize= view3d_pixel_size(rv3d, ob->obmat[3]); if(draw_as==PART_DRAW_AXIS) create_cdata = 1; @@ -3650,11 +3657,18 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv pdd->tot_vec_size= tot_vec_size; } + if(pdd) { + pdd->ma_r = &ma_r; + pdd->ma_g = &ma_g; + pdd->ma_b = &ma_b; + } + psys->lattice= psys_get_lattice(&sim); - if(pdd && draw_as!=PART_DRAW_PATH){ + /* circles don't use drawdata, so have to add a special case here */ + if((pdd || draw_as==PART_DRAW_CIRC) && draw_as!=PART_DRAW_PATH){ /* 5. */ - if((pdd->flag & PARTICLE_DRAW_DATA_UPDATED) + if(pdd && (pdd->flag & PARTICLE_DRAW_DATA_UPDATED) && (pdd->vedata || part->draw & (PART_DRAW_SIZE|PART_DRAW_NUM|PART_DRAW_HEALTH))==0) { totpoint = pdd->totpoint; /* draw data is up to date */ } @@ -3822,16 +3836,24 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv char *val_pos= val; val[0]= '\0'; - if(part->draw&PART_DRAW_NUM) - val_pos += sprintf(val, "%i", a); - - if((part->draw & PART_DRAW_HEALTH) && a < totpart && part->phystype==PART_PHYS_BOIDS) - sprintf(val_pos, (val_pos==val) ? "%.2f" : ":%.2f", pa_health); + if(part->draw&PART_DRAW_NUM) { + if(a < totpart && (part->draw & PART_DRAW_HEALTH) && (part->phystype==PART_PHYS_BOIDS)) { + sprintf(val_pos, "%d:%.2f", a, pa_health); + } + else { + sprintf(val_pos, "%d", a); + } + } + else { + if(a < totpart && (part->draw & PART_DRAW_HEALTH) && (part->phystype==PART_PHYS_BOIDS)) { + sprintf(val_pos, "%.2f", pa_health); + } + } /* in path drawing state.co is the end point */ /* use worldspace beause object matrix is already applied */ mul_v3_m4v3(vec_txt, ob->imat, state.co); - view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); } } } @@ -3920,12 +3942,10 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv for(a=0, pa=psys->particles; aimat, cache[a]->co); - view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); } } } @@ -4736,9 +4756,17 @@ static void drawnurb(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, while (nr-->0) { /* accounts for empty bevel lists */ float fac= bevp->radius * ts->normalsize; - float vec_a[3] = { fac,0, 0}; // Offset perpendicular to the curve - float vec_b[3] = {-fac,0, 0}; // Delta along the curve + float vec_a[3]; // Offset perpendicular to the curve + float vec_b[3]; // Delta along the curve + vec_a[0]= fac; + vec_a[1]= 0.0f; + vec_a[2]= 0.0f; + + vec_b[0]= -fac; + vec_b[1]= 0.0f; + vec_b[2]= 0.0f; + mul_qt_v3(bevp->quat, vec_a); mul_qt_v3(bevp->quat, vec_b); add_v3_v3(vec_a, bevp->vec); @@ -5489,30 +5517,30 @@ static void draw_hooks(Object *ob) void drawRBpivot(bRigidBodyJointConstraint *data) { int axis; - float v1[3]= {data->pivX, data->pivY, data->pivZ}; - float eu[3]= {data->axX, data->axY, data->axZ}; float mat[4][4]; - eul_to_mat4(mat,eu); + eul_to_mat4(mat,&data->axX); glLineWidth (4.0f); setlinestyle(2); for (axis=0; axis<3; axis++) { float dir[3] = {0,0,0}; - float v[3]= {data->pivX, data->pivY, data->pivZ}; + float v[3]; + + copy_v3_v3(v, &data->pivX); dir[axis] = 1.f; glBegin(GL_LINES); mul_m4_v3(mat,dir); add_v3_v3(v, dir); - glVertex3fv(v1); + glVertex3fv(&data->pivX); glVertex3fv(v); glEnd(); if (axis==0) - view3d_cached_text_draw_add(v, "px", 0, 0); + view3d_cached_text_draw_add(v, "px", 0, V3D_CACHE_TEXT_ASCII); else if (axis==1) - view3d_cached_text_draw_add(v, "py", 0, 0); + view3d_cached_text_draw_add(v, "py", 0, V3D_CACHE_TEXT_ASCII); else - view3d_cached_text_draw_add(v, "pz", 0, 0); + view3d_cached_text_draw_add(v, "pz", 0, V3D_CACHE_TEXT_ASCII); } glLineWidth (1.0f); setlinestyle(0); diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 77f6e63e860..f5c1612f786 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -191,7 +191,7 @@ static SpaceLink *view3d_new(const bContext *C) v3d->lay= v3d->layact= scene->lay; v3d->camera= scene->camera; } - v3d->scenelock= 1; + v3d->scenelock= TRUE; v3d->grid= 1.0f; v3d->gridlines= 16; v3d->gridsubdiv = 10; @@ -206,6 +206,7 @@ static SpaceLink *view3d_new(const bContext *C) v3d->near= 0.01f; v3d->far= 500.0f; + v3d->twflag |= U.tw_flag & V3D_USE_MANIPULATOR; v3d->twtype= V3D_MANIP_TRANSLATE; v3d->around= V3D_CENTROID; @@ -249,8 +250,8 @@ static SpaceLink *view3d_new(const bContext *C) ar->regiondata= MEM_callocN(sizeof(RegionView3D), "region view3d"); rv3d= ar->regiondata; rv3d->viewquat[0]= 1.0f; - rv3d->persp= 1; - rv3d->view= 7; + rv3d->persp= RV3D_PERSP; + rv3d->view= RV3D_VIEW_PERSPORTHO; rv3d->dist= 10.0; return (SpaceLink *)v3d; diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 450b3725bdb..9d17bbfe7da 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -884,14 +884,14 @@ static void v3d_posearmature_buts(uiLayout *layout, Object *ob) void validate_editbonebutton_cb(bContext *C, void *bonev, void *namev) { EditBone *eBone= bonev; - char oldname[32], newname[32]; - + char oldname[sizeof(eBone->name)], newname[sizeof(eBone->name)]; + /* need to be on the stack */ - BLI_strncpy(newname, eBone->name, 32); - BLI_strncpy(oldname, (char *)namev, 32); + BLI_strncpy(newname, eBone->name, sizeof(eBone->name)); + BLI_strncpy(oldname, (char *)namev, sizeof(eBone->name)); /* restore */ - BLI_strncpy(eBone->name, oldname, 32); - + BLI_strncpy(eBone->name, oldname, sizeof(eBone->name)); + ED_armature_bone_rename(CTX_data_edit_object(C)->data, oldname, newname); // editarmature.c WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, CTX_data_edit_object(C)); // XXX fix } diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 30880db0c90..27afe07c4b2 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -579,6 +579,7 @@ static void draw_view_axis(RegionView3D *rv3d) const float toll = 0.5; /* used to see when view is quasi-orthogonal */ const float start = k + 1.0; /* axis center in screen coordinates, x=y */ float ydisp = 0.0; /* vertical displacement to allow obj info text */ + int bright = 25*(float)U.rvibright + 5; /* axis alpha (rvibright has range 0-10) */ float vec[3]; float dx, dy; @@ -586,6 +587,9 @@ static void draw_view_axis(RegionView3D *rv3d) /* thickness of lines is proportional to k */ glLineWidth(2); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + /* X */ vec[0] = 1; vec[1] = vec[2] = 0; @@ -593,7 +597,7 @@ static void draw_view_axis(RegionView3D *rv3d) dx = vec[0] * k; dy = vec[1] * k; - glColor3ub(220, 0, 0); + glColor4ub(220, 0, 0, bright); glBegin(GL_LINES); glVertex2f(start, start + ydisp); glVertex2f(start + dx, start + dy + ydisp); @@ -603,6 +607,9 @@ static void draw_view_axis(RegionView3D *rv3d) BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "x"); } + /* BLF_draw_default disables blending */ + glEnable(GL_BLEND); + /* Y */ vec[1] = 1; vec[0] = vec[2] = 0; @@ -610,7 +617,7 @@ static void draw_view_axis(RegionView3D *rv3d) dx = vec[0] * k; dy = vec[1] * k; - glColor3ub(0, 220, 0); + glColor4ub(0, 220, 0, bright); glBegin(GL_LINES); glVertex2f(start, start + ydisp); glVertex2f(start + dx, start + dy + ydisp); @@ -619,6 +626,8 @@ static void draw_view_axis(RegionView3D *rv3d) if (fabs(dx) > toll || fabs(dy) > toll) { BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "y"); } + + glEnable(GL_BLEND); /* Z */ vec[2] = 1; @@ -627,7 +636,7 @@ static void draw_view_axis(RegionView3D *rv3d) dx = vec[0] * k; dy = vec[1] * k; - glColor3ub(30, 30, 220); + glColor4ub(30, 30, 220, bright); glBegin(GL_LINES); glVertex2f(start, start + ydisp); glVertex2f(start + dx, start + dy + ydisp); @@ -640,6 +649,7 @@ static void draw_view_axis(RegionView3D *rv3d) /* restore line-width */ glLineWidth(1.0); + glDisable(GL_BLEND); } @@ -843,7 +853,7 @@ static void view3d_get_viewborder_size(Scene *scene, ARegion *ar, float size_r[2 } } -void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r) +void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r, short do_shift) { float zoomfac, size[2]; float dx= 0.0f, dy= 0.0f; @@ -882,12 +892,13 @@ void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, Vi viewborder_r->xmax-= dx; viewborder_r->ymax-= dy; - if(v3d->camera && v3d->camera->type==OB_CAMERA) { + if(do_shift && v3d->camera && v3d->camera->type==OB_CAMERA) { Camera *cam= v3d->camera->data; float w = viewborder_r->xmax - viewborder_r->xmin; float h = viewborder_r->ymax - viewborder_r->ymin; float side = MAX2(w, h); - + + if(do_shift == -1) side *= -1; viewborder_r->xmin+= cam->shiftx*side; viewborder_r->xmax+= cam->shiftx*side; viewborder_r->ymin+= cam->shifty*side; @@ -922,7 +933,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) if(v3d->camera->type==OB_CAMERA) ca = v3d->camera->data; - view3d_calc_camera_border(scene, ar, rv3d, v3d, &viewborder); + view3d_calc_camera_border(scene, ar, rv3d, v3d, &viewborder, FALSE); /* the offsets */ x1= viewborder.xmin; y1= viewborder.ymin; @@ -1259,7 +1270,7 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d) if(rv3d->persp==RV3D_CAMOB) { rctf vb; - view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb); + view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb, FALSE); x1= vb.xmin; y1= vb.ymin; @@ -1572,22 +1583,32 @@ static void draw_dupli_objects(Scene *scene, ARegion *ar, View3D *v3d, Base *bas void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect) { int x, y, w, h; + rcti r; /* clamp rect by area */ - + + r.xmin= 0; + r.xmax= ar->winx-1; + r.ymin= 0; + r.ymax= ar->winy-1; + /* Constrain rect to depth bounds */ - if (rect->xmin < 0) rect->xmin = 0; - if (rect->ymin < 0) rect->ymin = 0; - if (rect->xmax >= ar->winx) rect->xmax = ar->winx-1; - if (rect->ymax >= ar->winy) rect->ymax = ar->winy-1; + BLI_isect_rcti(&r, rect, rect); /* assign values to compare with the ViewDepths */ - x= ar->winrct.xmin + rect->xmin; - y= ar->winrct.ymin + rect->ymin; + x= rect->xmin; + y= rect->ymin; w= rect->xmax - rect->xmin; h= rect->ymax - rect->ymin; - if( d->w != w || + if(w <= 0 || h <= 0) { + if(d->depths) + MEM_freeN(d->depths); + d->depths= NULL; + + d->damaged= FALSE; + } + else if( d->w != w || d->h != h || d->x != x || d->y != y || @@ -1603,13 +1624,13 @@ void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect) d->depths= MEM_mallocN(sizeof(float)*d->w*d->h,"View depths Subset"); - d->damaged= 1; + d->damaged= TRUE; } if(d->damaged) { glReadPixels(ar->winrct.xmin+d->x,ar->winrct.ymin+d->y, d->w,d->h, GL_DEPTH_COMPONENT,GL_FLOAT, d->depths); glGetDoublev(GL_DEPTH_RANGE,d->depth_range); - d->damaged= 0; + d->damaged= FALSE; } } @@ -1654,7 +1675,7 @@ float view3d_depth_near(ViewDepths *d) const float *depths= d->depths; float depth= FLT_MAX; - int i= d->w * d->h; + int i= (int)d->w * (int)d->h; /* cast to avoid short overflow */ /* far is both the starting 'far' value * and the closest value found. */ @@ -1855,8 +1876,6 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d) Scene *sce; Base *base; Object *ob; - ARegion ar; - RegionView3D rv3d; shadows.first= shadows.last= NULL; @@ -1885,6 +1904,8 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d) /* this needs to be done better .. */ float viewmat[4][4], winmat[4][4]; int drawtype, lay, winsize, flag2=v3d->flag2; + ARegion ar= {0}; + RegionView3D rv3d= {{{0}}}; drawtype= v3d->drawtype; lay= v3d->lay; @@ -1896,9 +1917,6 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d) GPU_lamp_shadow_buffer_bind(shadow->lamp, viewmat, &winsize, winmat); - memset(&ar, 0, sizeof(ar)); - memset(&rv3d, 0, sizeof(rv3d)); - ar.regiondata= &rv3d; ar.regiontype= RGN_TYPE_WINDOW; rv3d.persp= RV3D_CAMOB; @@ -1984,10 +2002,19 @@ static void view3d_main_area_setup_view(Scene *scene, View3D *v3d, ARegion *ar, { /* note: '1.0f / len_v3(v1)' replaced 'len_v3(rv3d->viewmat[0])' * because of float point precission problems at large values [#23908] */ - float v1[3]= {rv3d->persmat[0][0], rv3d->persmat[1][0], rv3d->persmat[2][0]}; - float v2[3]= {rv3d->persmat[0][1], rv3d->persmat[1][1], rv3d->persmat[2][1]}; - float len1= 1.0f / len_v3(v1); - float len2= 1.0f / len_v3(v2); + float v1[3], v2[3]; + float len1, len2; + + v1[0]= rv3d->persmat[0][0]; + v1[1]= rv3d->persmat[1][0]; + v1[2]= rv3d->persmat[2][0]; + + v2[0]= rv3d->persmat[0][1]; + v2[1]= rv3d->persmat[1][1]; + v2[2]= rv3d->persmat[2][1]; + + len1= 1.0f / len_v3(v1); + len2= 1.0f / len_v3(v2); rv3d->pixsize = (2.0f * MAX2(len1, len2)) / (float)MAX2(ar->winx, ar->winy); } @@ -2164,13 +2191,9 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, in /* creates own 3d views, used by the sequencer */ ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height, unsigned int flag, int drawtype) { - View3D v3d; - ARegion ar; - RegionView3D rv3d; - - memset(&v3d, 0, sizeof(v3d)); - memset(&ar, 0, sizeof(ar)); - memset(&rv3d, 0, sizeof(rv3d)); + View3D v3d= {0}; + ARegion ar= {0}; + RegionView3D rv3d= {{{0}}}; /* connect data */ v3d.regionbase.first= v3d.regionbase.last= &ar; diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index a5cca6341f6..9fbfd12f902 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1366,7 +1366,7 @@ void VIEW3D_OT_view_all(wmOperatorType *ot) /* api callbacks */ ot->exec= view3d_all_exec; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; @@ -1432,7 +1432,7 @@ static int viewselected_exec(bContext *C, wmOperator *UNUSED(op)) /* like a loca } } else if (paint_facesel_test(ob)) { - ok= minmax_tface(ob, min, max); + ok= paintface_minmax(ob, min, max); } else if (ob && (ob->mode & OB_MODE_PARTICLE_EDIT)) { ok= PE_minmax(scene, min, max); @@ -1594,7 +1594,7 @@ static int render_border_exec(bContext *C, wmOperator *op) rect.ymax= RNA_int_get(op->ptr, "ymax"); /* calculate range */ - view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb); + view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb, FALSE); scene->r.border.xmin= ((float)rect.xmin-vb.xmin)/(vb.xmax-vb.xmin); scene->r.border.ymin= ((float)rect.ymin-vb.ymin)/(vb.ymax-vb.ymin); @@ -2423,7 +2423,9 @@ static int set_3dcursor_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent *eve short depth_used = 0; if (U.uiflag & USER_ORBIT_ZBUF) { /* maybe this should be accessed some other way */ - short mval_depth[2] = {mx, my}; + short mval_depth[2]; + mval_depth[0]= mx; + mval_depth[1]= my; view3d_operator_needs_opengl(C); if (view_autodist(scene, ar, v3d, mval_depth, fp)) depth_used= 1; @@ -2575,10 +2577,8 @@ static float view_autodist_depth_margin(ARegion *ar, short *mval, int margin) view3d_update_depths_rect(ar, &depth_temp, &rect); depth_close= view3d_depth_near(&depth_temp); - - MEM_freeN(depth_temp.depths); - - return depth_close; + if(depth_temp.depths) MEM_freeN(depth_temp.depths); + return depth_close; } /* XXX todo Zooms in on a border drawn by the user */ @@ -3051,6 +3051,21 @@ void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int UNUSED(mode)) // XXX scrarea_do_windraw(curarea); } - - - +/* give a 4x4 matrix from a perspective view, only needs viewquat, ofs and dist + * basically the same as... + * rv3d->persp= RV3D_PERSP + * setviewmatrixview3d(scene, v3d, rv3d); + * setcameratoview3d(v3d, rv3d, v3d->camera); + * ...but less of a hassle + * */ +void view3d_persp_mat4(RegionView3D *rv3d, float mat[][4]) +{ + float qt[4], dvec[3]; + copy_qt_qt(qt, rv3d->viewquat); + qt[0]= -qt[0]; + quat_to_mat4(mat, qt); + mat[3][2] -= rv3d->dist; + translate_m4(mat, rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2]); + mul_v3_v3fl(dvec, mat[2], -rv3d->dist); + sub_v3_v3v3(mat[3], dvec, rv3d->ofs); +} diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c new file mode 100644 index 00000000000..e137270aa5b --- /dev/null +++ b/source/blender/editors/space_view3d/view3d_fly.c @@ -0,0 +1,939 @@ +/** + * $Id$ + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/* defines VIEW3D_OT_fly modal operator */ + +#include "DNA_anim_types.h" +#include "DNA_scene_types.h" +#include "DNA_object_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_math.h" +#include "BLI_blenlib.h" + +#include "BKE_context.h" +#include "BKE_object.h" +#include "BKE_report.h" + +#include "BKE_depsgraph.h" /* for fly mode updating */ + +#include "BIF_gl.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "ED_keyframing.h" +#include "ED_screen.h" +#include "ED_space_api.h" + +#include "PIL_time.h" /* smoothview */ + +#include "view3d_intern.h" // own include + +/* NOTE: these defines are saved in keymap files, do not change values but just add new ones */ +#define FLY_MODAL_CANCEL 1 +#define FLY_MODAL_CONFIRM 2 +#define FLY_MODAL_ACCELERATE 3 +#define FLY_MODAL_DECELERATE 4 +#define FLY_MODAL_PAN_ENABLE 5 +#define FLY_MODAL_PAN_DISABLE 6 +#define FLY_MODAL_DIR_FORWARD 7 +#define FLY_MODAL_DIR_BACKWARD 8 +#define FLY_MODAL_DIR_LEFT 9 +#define FLY_MODAL_DIR_RIGHT 10 +#define FLY_MODAL_DIR_UP 11 +#define FLY_MODAL_DIR_DOWN 12 +#define FLY_MODAL_AXIS_LOCK_X 13 +#define FLY_MODAL_AXIS_LOCK_Z 14 +#define FLY_MODAL_PRECISION_ENABLE 15 +#define FLY_MODAL_PRECISION_DISABLE 16 + +/* called in transform_ops.c, on each regeneration of keymaps */ +void fly_modal_keymap(wmKeyConfig *keyconf) +{ + static EnumPropertyItem modal_items[] = { + {FLY_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""}, + {FLY_MODAL_CONFIRM, "CONFIRM", 0, "Confirm", ""}, + {FLY_MODAL_ACCELERATE, "ACCELERATE", 0, "Accelerate", ""}, + {FLY_MODAL_DECELERATE, "DECELERATE", 0, "Decelerate", ""}, + + {FLY_MODAL_PAN_ENABLE, "PAN_ENABLE", 0, "Pan Enable", ""}, + {FLY_MODAL_PAN_DISABLE, "PAN_DISABLE", 0, "Pan Disable", ""}, + + {FLY_MODAL_DIR_FORWARD, "FORWARD", 0, "Fly Forward", ""}, + {FLY_MODAL_DIR_BACKWARD,"BACKWARD", 0, "Fly Backward", ""}, + {FLY_MODAL_DIR_LEFT, "LEFT", 0, "Fly Left", ""}, + {FLY_MODAL_DIR_RIGHT, "RIGHT", 0, "Fly Right", ""}, + {FLY_MODAL_DIR_UP, "UP", 0, "Fly Up", ""}, + {FLY_MODAL_DIR_DOWN, "DOWN", 0, "Fly Down", ""}, + + {FLY_MODAL_AXIS_LOCK_X, "AXIS_LOCK_X", 0, "X Axis Correction", "X axis correction (toggle)"}, + {FLY_MODAL_AXIS_LOCK_Z, "AXIS_LOCK_Z", 0, "X Axis Correction", "Z axis correction (toggle)"}, + + {FLY_MODAL_PRECISION_ENABLE, "PRECISION_ENABLE", 0, "Precision Enable", ""}, + {FLY_MODAL_PRECISION_DISABLE, "PRECISION_DISABLE", 0, "Precision Disable", ""}, + + {0, NULL, 0, NULL, NULL}}; + + wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "View3D Fly Modal"); + + /* this function is called for each spacetype, only needs to add map once */ + if(keymap) return; + + keymap= WM_modalkeymap_add(keyconf, "View3D Fly Modal", modal_items); + + /* items for modal map */ + WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CANCEL); + WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CANCEL); + + WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CONFIRM); + WM_modalkeymap_add_item(keymap, RETKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); + WM_modalkeymap_add_item(keymap, SPACEKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); + WM_modalkeymap_add_item(keymap, PADENTER, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); + + WM_modalkeymap_add_item(keymap, PADPLUSKEY, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE); + WM_modalkeymap_add_item(keymap, PADMINUS, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE); + WM_modalkeymap_add_item(keymap, WHEELUPMOUSE, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE); + WM_modalkeymap_add_item(keymap, WHEELDOWNMOUSE, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE); + + WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, KM_ANY, 0, FLY_MODAL_PAN_ENABLE); + WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PAN_DISABLE); /* XXX - Bug in the event system, middle mouse release doesnt work */ + + /* WASD */ + WM_modalkeymap_add_item(keymap, WKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_FORWARD); + WM_modalkeymap_add_item(keymap, SKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_BACKWARD); + WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_LEFT); + WM_modalkeymap_add_item(keymap, DKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_RIGHT); + WM_modalkeymap_add_item(keymap, RKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_UP); + WM_modalkeymap_add_item(keymap, FKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_DOWN); + + WM_modalkeymap_add_item(keymap, XKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_X); + WM_modalkeymap_add_item(keymap, ZKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_Z); + + WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_PRECISION_ENABLE); + WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PRECISION_DISABLE); + + /* assign map to operators */ + WM_modalkeymap_assign(keymap, "VIEW3D_OT_fly"); + +} + +typedef struct FlyInfo { + /* context stuff */ + RegionView3D *rv3d; + View3D *v3d; + ARegion *ar; + Scene *scene; + + wmTimer *timer; /* needed for redraws */ + + short state; + short use_precision; + short redraw; + short mval[2]; + + /* fly state state */ + float speed; /* the speed the view is moving per redraw */ + short axis; /* Axis index to move allong by default Z to move allong the view */ + short pan_view; /* when true, pan the view instead of rotating */ + + /* relative view axis locking - xlock, zlock + 0; disabled + 1; enabled but not checking because mouse hasnt moved outside the margin since locking was checked an not needed + when the mouse moves, locking is set to 2 so checks are done. + 2; mouse moved and checking needed, if no view altering is donem its changed back to 1 */ + short xlock, zlock; + float xlock_momentum, zlock_momentum; /* nicer dynamics */ + float grid; /* world scale 1.0 default */ + + /* root most parent */ + Object *root_parent; + + /* backup values */ + float dist_backup; /* backup the views distance since we use a zero dist for fly mode */ + float ofs_backup[3]; /* backup the views offset incase the user cancels flying in non camera mode */ + float rot_backup[4]; /* backup the views quat incase the user cancels flying in non camera mode. (quat for view, eul for camera) */ + short persp_backup; /* remember if were ortho or not, only used for restoring the view if it was a ortho view */ + + void *obtfm; /* backup the objects transform */ + + /* compare between last state */ + double time_lastwheel; /* used to accelerate when using the mousewheel a lot */ + double time_lastdraw; /* time between draws */ + + void *draw_handle_pixel; + + /* use for some lag */ + float dvec_prev[3]; /* old for some lag */ + +} FlyInfo; + +static void drawFlyPixel(const struct bContext *UNUSED(C), struct ARegion *UNUSED(ar), void *arg) +{ + FlyInfo *fly = arg; + + /* draws 4 edge brackets that frame the safe area where the + mouse can move during fly mode without spinning the view */ + float x1, x2, y1, y2; + + x1= 0.45*(float)fly->ar->winx; + y1= 0.45*(float)fly->ar->winy; + x2= 0.55*(float)fly->ar->winx; + y2= 0.55*(float)fly->ar->winy; + cpack(0); + + + glBegin(GL_LINES); + /* bottom left */ + glVertex2f(x1,y1); + glVertex2f(x1,y1+5); + + glVertex2f(x1,y1); + glVertex2f(x1+5,y1); + + /* top right */ + glVertex2f(x2,y2); + glVertex2f(x2,y2-5); + + glVertex2f(x2,y2); + glVertex2f(x2-5,y2); + + /* top left */ + glVertex2f(x1,y2); + glVertex2f(x1,y2-5); + + glVertex2f(x1,y2); + glVertex2f(x1+5,y2); + + /* bottom right */ + glVertex2f(x2,y1); + glVertex2f(x2,y1+5); + + glVertex2f(x2,y1); + glVertex2f(x2-5,y1); + glEnd(); +} + +/* FlyInfo->state */ +#define FLY_RUNNING 0 +#define FLY_CANCEL 1 +#define FLY_CONFIRM 2 + +static int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *event) +{ + float upvec[3]; // tmp + float mat[3][3]; + + fly->rv3d= CTX_wm_region_view3d(C); + fly->v3d = CTX_wm_view3d(C); + fly->ar = CTX_wm_region(C); + fly->scene= CTX_data_scene(C); + + if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->id.lib) { + BKE_report(op->reports, RPT_ERROR, "Cannot fly a camera from an external library"); + return FALSE; + } + + if(fly->v3d->ob_centre) { + BKE_report(op->reports, RPT_ERROR, "Cannot fly when the view is locked to an object"); + return FALSE; + } + + if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->constraints.first) { + BKE_report(op->reports, RPT_ERROR, "Cannot fly an object with constraints"); + return FALSE; + } + + fly->state= FLY_RUNNING; + fly->speed= 0.0f; + fly->axis= 2; + fly->pan_view= FALSE; + fly->xlock= FALSE; + fly->zlock= FALSE; + fly->xlock_momentum=0.0f; + fly->zlock_momentum=0.0f; + fly->grid= 1.0f; + fly->use_precision= 0; + + fly->dvec_prev[0]= fly->dvec_prev[1]= fly->dvec_prev[2]= 0.0f; + + fly->timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.01f); + + fly->mval[0] = event->x - fly->ar->winrct.xmin; + fly->mval[1] = event->y - fly->ar->winrct.ymin; + + + fly->time_lastdraw= fly->time_lastwheel= PIL_check_seconds_timer(); + + fly->draw_handle_pixel = ED_region_draw_cb_activate(fly->ar->type, drawFlyPixel, fly, REGION_DRAW_POST_PIXEL); + + fly->rv3d->rflag |= RV3D_NAVIGATING; /* so we draw the corner margins */ + + /* detect weather to start with Z locking */ + upvec[0]=1.0f; upvec[1]=0.0f; upvec[2]=0.0f; + copy_m3_m4(mat, fly->rv3d->viewinv); + mul_m3_v3(mat, upvec); + if (fabs(upvec[2]) < 0.1) + fly->zlock = 1; + upvec[0]=0; upvec[1]=0; upvec[2]=0; + + fly->persp_backup= fly->rv3d->persp; + fly->dist_backup= fly->rv3d->dist; + if (fly->rv3d->persp==RV3D_CAMOB) { + Object *ob_back; + if((fly->root_parent=fly->v3d->camera->parent)) { + while(fly->root_parent->parent) + fly->root_parent= fly->root_parent->parent; + ob_back= fly->root_parent; + } + else { + ob_back= fly->v3d->camera; + } + + /* store the original camera loc and rot */ + /* TODO. axis angle etc */ + + fly->obtfm= object_tfm_backup(ob_back); + + where_is_object(fly->scene, fly->v3d->camera); + negate_v3_v3(fly->rv3d->ofs, fly->v3d->camera->obmat[3]); + + fly->rv3d->dist=0.0; + } else { + /* perspective or ortho */ + if (fly->rv3d->persp==RV3D_ORTHO) + fly->rv3d->persp= RV3D_PERSP; /*if ortho projection, make perspective */ + copy_qt_qt(fly->rot_backup, fly->rv3d->viewquat); + copy_v3_v3(fly->ofs_backup, fly->rv3d->ofs); + fly->rv3d->dist= 0.0f; + + upvec[2]= fly->dist_backup; /*x and y are 0*/ + mul_m3_v3(mat, upvec); + sub_v3_v3(fly->rv3d->ofs, upvec); + /*Done with correcting for the dist*/ + } + + + /* center the mouse, probably the UI mafia are against this but without its quite annoying */ + WM_cursor_warp(CTX_wm_window(C), fly->ar->winrct.xmin + fly->ar->winx/2, fly->ar->winrct.ymin + fly->ar->winy/2); + + return 1; +} + +static int flyEnd(bContext *C, FlyInfo *fly) +{ + RegionView3D *rv3d= fly->rv3d; + View3D *v3d = fly->v3d; + + float upvec[3]; + + if(fly->state == FLY_RUNNING) + return OPERATOR_RUNNING_MODAL; + + WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), fly->timer); + + ED_region_draw_cb_exit(fly->ar->type, fly->draw_handle_pixel); + + rv3d->dist= fly->dist_backup; + + if (fly->state == FLY_CANCEL) { + /* Revert to original view? */ + if (fly->persp_backup==RV3D_CAMOB) { /* a camera view */ + Object *ob_back; + if(fly->root_parent)ob_back= fly->root_parent; + else ob_back= fly->v3d->camera; + + /* store the original camera loc and rot */ + object_tfm_restore(ob_back, fly->obtfm); + + DAG_id_flush_update(&ob_back->id, OB_RECALC_OB); + } else { + /* Non Camera we need to reset the view back to the original location bacause the user canceled*/ + copy_qt_qt(rv3d->viewquat, fly->rot_backup); + copy_v3_v3(rv3d->ofs, fly->ofs_backup); + rv3d->persp= fly->persp_backup; + } + } + else if (fly->persp_backup==RV3D_CAMOB) { /* camera */ + DAG_id_flush_update(fly->root_parent ? &fly->root_parent->id : &v3d->camera->id, OB_RECALC_OB); + } + else { /* not camera */ + /* Apply the fly mode view */ + /*restore the dist*/ + float mat[3][3]; + upvec[0]= upvec[1]= 0; + upvec[2]= fly->dist_backup; /*x and y are 0*/ + copy_m3_m4(mat, rv3d->viewinv); + mul_m3_v3(mat, upvec); + add_v3_v3(rv3d->ofs, upvec); + /*Done with correcting for the dist */ + } + + rv3d->rflag &= ~RV3D_NAVIGATING; +//XXX2.5 BIF_view3d_previewrender_signal(fly->sa, PR_DBASE|PR_DISPRECT); /* not working at the moment not sure why */ + + if(fly->obtfm) + MEM_freeN(fly->obtfm); + + if(fly->state == FLY_CONFIRM) { + MEM_freeN(fly); + return OPERATOR_FINISHED; + } + + MEM_freeN(fly); + return OPERATOR_CANCELLED; +} + +static void flyEvent(FlyInfo *fly, wmEvent *event) +{ + if (event->type == TIMER && event->customdata == fly->timer) { + fly->redraw = 1; + } + else if (event->type == MOUSEMOVE) { + fly->mval[0] = event->x - fly->ar->winrct.xmin; + fly->mval[1] = event->y - fly->ar->winrct.ymin; + } /* handle modal keymap first */ + else if (event->type == EVT_MODAL_MAP) { + switch (event->val) { + case FLY_MODAL_CANCEL: + fly->state = FLY_CANCEL; + break; + case FLY_MODAL_CONFIRM: + fly->state = FLY_CONFIRM; + break; + + case FLY_MODAL_ACCELERATE: + { + double time_currwheel; + float time_wheel; + + time_currwheel= PIL_check_seconds_timer(); + time_wheel = (float)(time_currwheel - fly->time_lastwheel); + fly->time_lastwheel = time_currwheel; + /*printf("Wheel %f\n", time_wheel);*/ + /*Mouse wheel delays range from 0.5==slow to 0.01==fast*/ + time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */ + + if (fly->speed<0.0f) fly->speed= 0.0f; + else { + if (event->shift) + fly->speed+= fly->grid*time_wheel*0.1; + else + fly->speed+= fly->grid*time_wheel; + } + break; + } + case FLY_MODAL_DECELERATE: + { + double time_currwheel; + float time_wheel; + + time_currwheel= PIL_check_seconds_timer(); + time_wheel = (float)(time_currwheel - fly->time_lastwheel); + fly->time_lastwheel = time_currwheel; + time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */ + + if (fly->speed>0) fly->speed=0; + else { + if (event->shift) + fly->speed-= fly->grid*time_wheel*0.1; + else + fly->speed-= fly->grid*time_wheel; + } + break; + } + case FLY_MODAL_PAN_ENABLE: + fly->pan_view= TRUE; + break; + case FLY_MODAL_PAN_DISABLE: +//XXX2.5 warp_pointer(cent_orig[0], cent_orig[1]); + fly->pan_view= FALSE; + break; + + /* impliment WASD keys */ + case FLY_MODAL_DIR_FORWARD: + if (fly->speed < 0.0f) fly->speed= -fly->speed; /* flip speed rather then stopping, game like motion */ + else if (fly->axis==2) fly->speed += fly->grid; /* increse like mousewheel if were already moving in that difection*/ + fly->axis= 2; + break; + case FLY_MODAL_DIR_BACKWARD: + if (fly->speed > 0.0f) fly->speed= -fly->speed; + else if (fly->axis==2) fly->speed -= fly->grid; + fly->axis= 2; + break; + case FLY_MODAL_DIR_LEFT: + if (fly->speed < 0.0f) fly->speed= -fly->speed; + else if (fly->axis==0) fly->speed += fly->grid; + fly->axis= 0; + break; + case FLY_MODAL_DIR_RIGHT: + if (fly->speed > 0.0f) fly->speed= -fly->speed; + else if (fly->axis==0) fly->speed -= fly->grid; + fly->axis= 0; + break; + case FLY_MODAL_DIR_DOWN: + if (fly->speed < 0.0f) fly->speed= -fly->speed; + else if (fly->axis==1) fly->speed += fly->grid; + fly->axis= 1; + break; + case FLY_MODAL_DIR_UP: + if (fly->speed > 0.0f) fly->speed= -fly->speed; + else if (fly->axis==1) fly->speed -= fly->grid; + fly->axis= 1; + break; + + case FLY_MODAL_AXIS_LOCK_X: + if (fly->xlock) fly->xlock=0; + else { + fly->xlock = 2; + fly->xlock_momentum = 0.0; + } + break; + case FLY_MODAL_AXIS_LOCK_Z: + if (fly->zlock) fly->zlock=0; + else { + fly->zlock = 2; + fly->zlock_momentum = 0.0; + } + break; + + case FLY_MODAL_PRECISION_ENABLE: + fly->use_precision= TRUE; + break; + case FLY_MODAL_PRECISION_DISABLE: + fly->use_precision= FALSE; + break; + + } + } +} + +static int flyApply(bContext *C, FlyInfo *fly) +{ + +#define FLY_ROTATE_FAC 2.5f /* more is faster */ +#define FLY_ZUP_CORRECT_FAC 0.1f /* ammount to correct per step */ +#define FLY_ZUP_CORRECT_ACCEL 0.05f /* increase upright momentum each step */ + + /* + fly mode - Shift+F + a fly loop where the user can move move the view as if they are flying + */ + RegionView3D *rv3d= fly->rv3d; + View3D *v3d = fly->v3d; + ARegion *ar = fly->ar; + Scene *scene= fly->scene; + + float prev_view_mat[4][4]; + + float mat[3][3], /* 3x3 copy of the view matrix so we can move allong the view axis */ + dvec[3]={0,0,0}, /* this is the direction thast added to the view offset per redraw */ + + /* Camera Uprighting variables */ + upvec[3]={0,0,0}, /* stores the view's up vector */ + + moffset[2], /* mouse offset from the views center */ + tmp_quat[4]; /* used for rotating the view */ + + int cent_orig[2], /* view center */ +//XXX- can avoid using // cent[2], /* view center modified */ + xmargin, ymargin; /* x and y margin are define the safe area where the mouses movement wont rotate the view */ + unsigned char + apply_rotation= 1; /* if the user presses shift they can look about without movinf the direction there looking*/ + + if(fly->root_parent) + view3d_persp_mat4(rv3d, prev_view_mat); + + /* the dist defines a vector that is infront of the offset + to rotate the view about. + this is no good for fly mode because we + want to rotate about the viewers center. + but to correct the dist removal we must + alter offset so the view doesn't jump. */ + + xmargin= ar->winx/20.0f; + ymargin= ar->winy/20.0f; + + cent_orig[0]= ar->winrct.xmin + ar->winx/2; + cent_orig[1]= ar->winrct.ymin + ar->winy/2; + + { + + /* mouse offset from the center */ + moffset[0]= fly->mval[0]- ar->winx/2; + moffset[1]= fly->mval[1]- ar->winy/2; + + /* enforce a view margin */ + if (moffset[0]>xmargin) moffset[0]-=xmargin; + else if (moffset[0] < -xmargin) moffset[0]+=xmargin; + else moffset[0]=0; + + if (moffset[1]>ymargin) moffset[1]-=ymargin; + else if (moffset[1] < -ymargin) moffset[1]+=ymargin; + else moffset[1]=0; + + + /* scale the mouse movement by this value - scales mouse movement to the view size + * moffset[0]/(ar->winx-xmargin*2) - window size minus margin (same for y) + * + * the mouse moves isnt linear */ + + if(moffset[0]) { + moffset[0] /= ar->winx - (xmargin*2); + moffset[0] *= fabs(moffset[0]); + } + + if(moffset[1]) { + moffset[1] /= ar->winy - (ymargin*2); + moffset[1] *= fabs(moffset[1]); + } + + /* Should we redraw? */ + if(fly->speed != 0.0f || moffset[0] || moffset[1] || fly->zlock || fly->xlock || dvec[0] || dvec[1] || dvec[2] ) { + float dvec_tmp[3]; + double time_current, time_redraw; /*time how fast it takes for us to redraw, this is so simple scenes dont fly too fast */ + float time_redraw_clamped; + + time_current= PIL_check_seconds_timer(); + time_redraw= (float)(time_current - fly->time_lastdraw); + time_redraw_clamped= MIN2(0.05f, time_redraw); /* clamt the redraw time to avoid jitter in roll correction */ + fly->time_lastdraw= time_current; + /*fprintf(stderr, "%f\n", time_redraw);*/ /* 0.002 is a small redraw 0.02 is larger */ + + /* Scale the time to use shift to scale the speed down- just like + shift slows many other areas of blender down */ + if (fly->use_precision) + fly->speed= fly->speed * (1.0f-time_redraw_clamped); + + copy_m3_m4(mat, rv3d->viewinv); + + if (fly->pan_view==TRUE) { + /* pan only */ + dvec_tmp[0]= -moffset[0]; + dvec_tmp[1]= -moffset[1]; + dvec_tmp[2]= 0; + + if (fly->use_precision) { + dvec_tmp[0] *= 0.1; + dvec_tmp[1] *= 0.1; + } + + mul_m3_v3(mat, dvec_tmp); + mul_v3_fl(dvec_tmp, time_redraw*200.0 * fly->grid); + + } else { + float roll; /* similar to the angle between the camera's up and the Z-up, but its very rough so just roll*/ + + /* rotate about the X axis- look up/down */ + if (moffset[1]) { + upvec[0]=1; + upvec[1]=0; + upvec[2]=0; + mul_m3_v3(mat, upvec); + axis_angle_to_quat( tmp_quat, upvec, (float)moffset[1] * time_redraw * -FLY_ROTATE_FAC); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); + + if (fly->xlock) fly->xlock = 2; /*check for rotation*/ + if (fly->zlock) fly->zlock = 2; + fly->xlock_momentum= 0.0f; + } + + /* rotate about the Y axis- look left/right */ + if (moffset[0]) { + + /* if we're upside down invert the moffset */ + upvec[0]=0; + upvec[1]=1; + upvec[2]=0; + mul_m3_v3(mat, upvec); + + if(upvec[2] < 0.0f) + moffset[0]= -moffset[0]; + + /* make the lock vectors */ + if (fly->zlock) { + upvec[0]=0; + upvec[1]=0; + upvec[2]=1; + } else { + upvec[0]=0; + upvec[1]=1; + upvec[2]=0; + mul_m3_v3(mat, upvec); + } + + axis_angle_to_quat( tmp_quat, upvec, (float)moffset[0] * time_redraw * FLY_ROTATE_FAC); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); + + if (fly->xlock) fly->xlock = 2;/*check for rotation*/ + if (fly->zlock) fly->zlock = 2; + } + + if (fly->zlock==2) { + upvec[0]=1; + upvec[1]=0; + upvec[2]=0; + mul_m3_v3(mat, upvec); + + /*make sure we have some z rolling*/ + if (fabs(upvec[2]) > 0.00001f) { + roll= upvec[2]*5; + upvec[0]=0; /*rotate the view about this axis*/ + upvec[1]=0; + upvec[2]=1; + + mul_m3_v3(mat, upvec); + axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->zlock_momentum * FLY_ZUP_CORRECT_FAC); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); + + fly->zlock_momentum += FLY_ZUP_CORRECT_ACCEL; + } else { + fly->zlock=1; /* dont check until the view rotates again */ + fly->zlock_momentum= 0.0f; + } + } + + if (fly->xlock==2 && moffset[1]==0) { /*only apply xcorrect when mouse isnt applying x rot*/ + upvec[0]=0; + upvec[1]=0; + upvec[2]=1; + mul_m3_v3(mat, upvec); + /*make sure we have some z rolling*/ + if (fabs(upvec[2]) > 0.00001) { + roll= upvec[2] * -5; + + upvec[0]= 1.0f; /*rotate the view about this axis*/ + upvec[1]= 0.0f; + upvec[2]= 0.0f; + + mul_m3_v3(mat, upvec); + + axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->xlock_momentum*0.1f); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); + + fly->xlock_momentum += 0.05f; + } else { + fly->xlock=1; /* see above */ + fly->xlock_momentum= 0.0f; + } + } + + + if (apply_rotation) { + /* Normal operation */ + /* define dvec, view direction vector */ + dvec_tmp[0]= dvec_tmp[1]= dvec_tmp[2]= 0.0f; + /* move along the current axis */ + dvec_tmp[fly->axis]= 1.0f; + + mul_m3_v3(mat, dvec_tmp); + + mul_v3_fl(dvec_tmp, fly->speed * time_redraw * 0.25f); + } + } + + /* impose a directional lag */ + interp_v3_v3v3(dvec, dvec_tmp, fly->dvec_prev, (1.0f/(1.0f+(time_redraw*5.0f)))); + + if (rv3d->persp==RV3D_CAMOB) { + Object *lock_ob= fly->root_parent ? fly->root_parent : fly->v3d->camera; + if (lock_ob->protectflag & OB_LOCK_LOCX) dvec[0] = 0.0; + if (lock_ob->protectflag & OB_LOCK_LOCY) dvec[1] = 0.0; + if (lock_ob->protectflag & OB_LOCK_LOCZ) dvec[2] = 0.0; + } + + add_v3_v3(rv3d->ofs, dvec); + + /* todo, dynamic keys */ +#if 0 + if (fly->zlock && fly->xlock) + ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); + else if (fly->zlock) + ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); + else if (fly->xlock) + ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); + else + ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); +#endif + + /* we are in camera view so apply the view ofs and quat to the view matrix and set the camera to the view */ + if (rv3d->persp==RV3D_CAMOB) { + ID *id_key; + /* transform the parent or the camera? */ + if(fly->root_parent) { + Object *ob_update; + + float view_mat[4][4]; + float prev_view_imat[4][4]; + float diff_mat[4][4]; + float parent_mat[4][4]; + + invert_m4_m4(prev_view_imat, prev_view_mat); + view3d_persp_mat4(rv3d, view_mat); + mul_m4_m4m4(diff_mat, prev_view_imat, view_mat); + mul_m4_m4m4(parent_mat, fly->root_parent->obmat, diff_mat); + object_apply_mat4(fly->root_parent, parent_mat, TRUE); + + // where_is_object(scene, fly->root_parent); + + ob_update= v3d->camera->parent; + while(ob_update) { + DAG_id_flush_update(&ob_update->id, OB_RECALC_OB); + ob_update= ob_update->parent; + } + + copy_m4_m4(prev_view_mat, view_mat); + + id_key= &fly->root_parent->id; + + } + else { + float view_mat[4][4]; + view3d_persp_mat4(rv3d, view_mat); + object_apply_mat4(v3d->camera, view_mat, TRUE); + id_key= &v3d->camera->id; + } + + /* record the motion */ + if (autokeyframe_cfra_can_key(scene, id_key)) { + ListBase dsources = {NULL, NULL}; + + /* add datasource override for the camera object */ + ANIM_relative_keyingset_add_source(&dsources, id_key, NULL, NULL); + + /* insert keyframes + * 1) on the first frame + * 2) on each subsequent frame + * TODO: need to check in future that frame changed before doing this + */ + if (fly->xlock || fly->zlock || moffset[0] || moffset[1]) { + KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Rotation"); + ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA); + } + if (fly->speed) { + KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Location"); + ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA); + } + + /* free temp data */ + BLI_freelistN(&dsources); + } + } + } else + /*were not redrawing but we need to update the time else the view will jump */ + fly->time_lastdraw= PIL_check_seconds_timer(); + /* end drawing */ + copy_v3_v3(fly->dvec_prev, dvec); + } + +/* moved to flyEnd() */ + + return OPERATOR_FINISHED; +} + + + +static int fly_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + RegionView3D *rv3d= CTX_wm_region_view3d(C); + FlyInfo *fly; + + if(rv3d->viewlock) + return OPERATOR_CANCELLED; + + fly= MEM_callocN(sizeof(FlyInfo), "FlyOperation"); + + op->customdata= fly; + + if(initFlyInfo(C, fly, op, event)==FALSE) { + MEM_freeN(op->customdata); + return OPERATOR_CANCELLED; + } + + flyEvent(fly, event); + + WM_event_add_modal_handler(C, op); + + return OPERATOR_RUNNING_MODAL; +} + +static int fly_cancel(bContext *C, wmOperator *op) +{ + FlyInfo *fly = op->customdata; + + fly->state = FLY_CANCEL; + flyEnd(C, fly); + op->customdata= NULL; + + return OPERATOR_CANCELLED; +} + +static int fly_modal(bContext *C, wmOperator *op, wmEvent *event) +{ + int exit_code; + short do_draw= FALSE; + FlyInfo *fly = op->customdata; + + fly->redraw= 0; + + flyEvent(fly, event); + + if(event->type==TIMER && event->customdata == fly->timer) + flyApply(C, fly); + + do_draw |= fly->redraw; + + exit_code = flyEnd(C, fly); + + if(exit_code!=OPERATOR_RUNNING_MODAL) + do_draw= TRUE; + + if(do_draw) { + if(fly->rv3d->persp==RV3D_CAMOB) { + WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, fly->root_parent ? fly->root_parent : fly->v3d->camera); + } + + ED_region_tag_redraw(CTX_wm_region(C)); + } + + return exit_code; +} + +void VIEW3D_OT_fly(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Fly Navigation"; + ot->description= "Interactively fly around the scene"; + ot->idname= "VIEW3D_OT_fly"; + + /* api callbacks */ + ot->invoke= fly_invoke; + ot->cancel= fly_cancel; + ot->modal= fly_modal; + ot->poll= ED_operator_view3d_active; + + /* flags */ + ot->flag= OPTYPE_BLOCKING; +} diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index e81d0b87589..92167f0f45e 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -66,7 +66,6 @@ void VIEW3D_OT_layers(struct wmOperatorType *ot); /* view3d_ops.c */ void view3d_operatortypes(void); -void view3d_keymap(struct wmKeyConfig *keyconf); /* view3d_edit.c */ void VIEW3D_OT_zoom(struct wmOperatorType *ot); @@ -91,6 +90,11 @@ void VIEW3D_OT_zoom_border(struct wmOperatorType *ot); void VIEW3D_OT_drawtype(struct wmOperatorType *ot); void view3d_boxview_copy(ScrArea *sa, ARegion *ar); +void view3d_persp_mat4(struct RegionView3D *rv3d, float mat[][4]); + +/* view3d_fly.c */ +void view3d_keymap(struct wmKeyConfig *keyconf); +void VIEW3D_OT_fly(struct wmOperatorType *ot); /* drawanim.c */ void draw_motion_paths_init(View3D *v3d, struct ARegion *ar); @@ -111,8 +115,9 @@ void drawaxes(float size, char drawtype); void view3d_cached_text_draw_begin(void); void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag); void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, float mat[][4]); -#define V3D_CACHE_TEXT_ZBUF 1 -#define V3D_CACHE_TEXT_WORLDSPACE 2 +#define V3D_CACHE_TEXT_ZBUF (1<<0) +#define V3D_CACHE_TEXT_WORLDSPACE (1<<1) +#define V3D_CACHE_TEXT_ASCII (1<<2) /* drawarmature.c */ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, int flag); @@ -150,7 +155,6 @@ void VIEW3D_OT_setcameratoview(struct wmOperatorType *ot); void VIEW3D_OT_object_as_camera(struct wmOperatorType *ot); void VIEW3D_OT_localview(struct wmOperatorType *ot); void VIEW3D_OT_game_start(struct wmOperatorType *ot); -void VIEW3D_OT_fly(struct wmOperatorType *ot); int boundbox_clip(RegionView3D *rv3d, float obmat[][4], struct BoundBox *bb); diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index e3212e8a3d1..2159aef0695 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "DNA_armature_types.h" #include "DNA_curve_types.h" @@ -48,6 +49,7 @@ #include "BKE_context.h" #include "BKE_paint.h" +#include "BKE_armature.h" #include "BIF_gl.h" @@ -345,18 +347,21 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, short mcords[][2], bPoseChannel *pchan; float vec[3]; short sco1[2], sco2[2]; + bArmature *arm= ob->data; if(ob->type!=OB_ARMATURE || ob->pose==NULL) return; - + for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - mul_v3_m4v3(vec, ob->obmat, pchan->pose_head); - project_short(vc->ar, vec, sco1); - mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail); - project_short(vc->ar, vec, sco2); - - if(lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { - if(select) pchan->bone->flag |= BONE_SELECTED; - else pchan->bone->flag &= ~BONE_SELECTED; + if (PBONE_VISIBLE(arm, pchan->bone) && (pchan->bone->flag & BONE_UNSELECTABLE)==0) { + mul_v3_m4v3(vec, ob->obmat, pchan->pose_head); + project_short(vc->ar, vec, sco1); + mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail); + project_short(vc->ar, vec, sco2); + + if(lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { + if(select) pchan->bone->flag |= BONE_SELECTED; + else pchan->bone->flag &= ~BONE_SELECTED; + } } } @@ -368,11 +373,24 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, short mcords[][2], } } +static void object_deselect_all_visible(Scene *scene, View3D *v3d) +{ + Base *base; -static void do_lasso_select_objects(ViewContext *vc, short mcords[][2], short moves, short select) + for(base= scene->base.first; base; base= base->next) { + if(BASE_SELECTABLE(v3d, base)) { + ED_base_object_select(base, BA_DESELECT); + } + } +} + +static void do_lasso_select_objects(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { Base *base; + if (extend == 0 && select) + object_deselect_all_visible(vc->scene, vc->v3d); + for(base= vc->scene->base.first; base; base= base->next) { if(BASE_SELECTABLE(vc->v3d, base)) { /* use this to avoid un-needed lasso lookups */ project_short(vc->ar, base->object->obmat[3], &base->sx); @@ -389,7 +407,7 @@ static void do_lasso_select_objects(ViewContext *vc, short mcords[][2], short mo } } -void lasso_select_boundbox(rcti *rect, short mcords[][2], short moves) +static void lasso_select_boundbox(rcti *rect, short mcords[][2], short moves) { short a; @@ -440,7 +458,7 @@ static void do_lasso_select_mesh__doSelectFace(void *userData, EditFace *efa, in } } -static void do_lasso_select_mesh(ViewContext *vc, short mcords[][2], short moves, short select) +static void do_lasso_select_mesh(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { struct { ViewContext vc; rcti *rect; short (*mcords)[2], moves, select, pass, done; } data; ToolSettings *ts= vc->scene->toolsettings; @@ -460,8 +478,11 @@ static void do_lasso_select_mesh(ViewContext *vc, short mcords[][2], short moves data.done = 0; data.pass = 0; + if (extend == 0 && select) + EM_deselect_all(vc->em); + /* workaround: init mats first, EM_mask_init_backbuf_border can change - view matrix to pixel space, breaking edge select with backbuf. fixes bug #20936 */ + view matrix to pixel space, breaking edge select with backbuf. fixes bug [#20936] */ /* [#21018] breaks zbuf select. run below. only if bbsel fails */ /* ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d) */ @@ -589,7 +610,7 @@ static void do_lasso_select_curve__doSelect(void *userData, Nurb *UNUSED(nu), BP } } -static void do_lasso_select_curve(ViewContext *vc, short mcords[][2], short moves, short select) +static void do_lasso_select_curve(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { struct { ViewContext *vc; short (*mcords)[2]; short moves; short select; } data; @@ -599,6 +620,9 @@ static void do_lasso_select_curve(ViewContext *vc, short mcords[][2], short move data.moves = moves; data.select = select; + if (extend == 0 && select) + CU_deselect_all(vc->obedit); + ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ nurbs_foreachScreenVert(vc, do_lasso_select_curve__doSelect, &data); } @@ -611,7 +635,7 @@ static void do_lasso_select_lattice__doSelect(void *userData, BPoint *bp, int x, bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT); } } -static void do_lasso_select_lattice(ViewContext *vc, short mcords[][2], short moves, short select) +static void do_lasso_select_lattice(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { struct { short (*mcords)[2]; short moves; short select; } data; @@ -620,45 +644,52 @@ static void do_lasso_select_lattice(ViewContext *vc, short mcords[][2], short mo data.moves = moves; data.select = select; + if (extend == 0 && select) + ED_setflagsLatt(vc->obedit, 0); + ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ lattice_foreachScreenVert(vc, do_lasso_select_lattice__doSelect, &data); } -static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short moves, short select) +static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { bArmature *arm= vc->obedit->data; EditBone *ebone; float vec[3]; short sco1[2], sco2[2], didpoint; int change= FALSE; - + + if (extend==0 && select) + ED_armature_deselect_all_visible(vc->obedit); + /* set editdata in vc */ for (ebone= arm->edbo->first; ebone; ebone=ebone->next) { - - mul_v3_m4v3(vec, vc->obedit->obmat, ebone->head); - project_short(vc->ar, vec, sco1); - mul_v3_m4v3(vec, vc->obedit->obmat, ebone->tail); - project_short(vc->ar, vec, sco2); - - didpoint= 0; - if(lasso_inside(mcords, moves, sco1[0], sco1[1])) { - if(select) ebone->flag |= BONE_ROOTSEL; - else ebone->flag &= ~BONE_ROOTSEL; - didpoint= 1; - change= TRUE; - } - if(lasso_inside(mcords, moves, sco2[0], sco2[1])) { - if(select) ebone->flag |= BONE_TIPSEL; - else ebone->flag &= ~BONE_TIPSEL; - didpoint= 1; - change= TRUE; - } - /* if one of points selected, we skip the bone itself */ - if(didpoint==0 && lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { - if(select) ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED; - else ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); - change= TRUE; + if (EBONE_VISIBLE(arm, ebone) && (ebone->flag & BONE_UNSELECTABLE)==0) { + mul_v3_m4v3(vec, vc->obedit->obmat, ebone->head); + project_short(vc->ar, vec, sco1); + mul_v3_m4v3(vec, vc->obedit->obmat, ebone->tail); + project_short(vc->ar, vec, sco2); + + didpoint= 0; + if(lasso_inside(mcords, moves, sco1[0], sco1[1])) { + if(select) ebone->flag |= BONE_ROOTSEL; + else ebone->flag &= ~BONE_ROOTSEL; + didpoint= 1; + change= TRUE; + } + if(lasso_inside(mcords, moves, sco2[0], sco2[1])) { + if(select) ebone->flag |= BONE_TIPSEL; + else ebone->flag &= ~BONE_TIPSEL; + didpoint= 1; + change= TRUE; + } + /* if one of points selected, we skip the bone itself */ + if(didpoint==0 && lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { + if(select) ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED; + else ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + change= TRUE; + } } } @@ -669,25 +700,56 @@ static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short m } } -static void do_lasso_select_facemode(ViewContext *vc, short mcords[][2], short moves, short select) + + + +static void do_lasso_select_meta(ViewContext *vc, short mcords[][2], short moves, short extend, short select) +{ + MetaBall *mb = (MetaBall*)vc->obedit->data; + MetaElem *ml; + float vec[3]; + short sco[2]; + + if (extend == 0 && select) { + for(ml= mb->editelems->first; ml; ml= ml->next) { + ml->flag &= ~SELECT; + } + } + + for(ml= mb->editelems->first; ml; ml= ml->next) { + + mul_v3_m4v3(vec, vc->obedit->obmat, &ml->x); + project_short(vc->ar, vec, sco); + + if(lasso_inside(mcords, moves, sco[0], sco[1])) { + if(select) ml->flag |= SELECT; + else ml->flag &= ~SELECT; + } + } +} + +static void do_lasso_select_paintface(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { Object *ob= vc->obact; Mesh *me= ob?ob->data:NULL; rcti rect; - - if(me==NULL || me->mtface==NULL) return; - if(me->totface==0) return; - + + if(me==NULL || me->totface==0) + return; + + if(extend==0 && select) + paintface_deselect_all_visible(ob, SEL_DESELECT, FALSE); /* flush selection at the end */ + em_vertoffs= me->totface+1; /* max index array */ - + lasso_select_boundbox(&rect, mcords, moves); EM_mask_init_backbuf_border(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax); EM_backbuf_checkAndSelectTFaces(me, select); - + EM_free_backbuf(); - -// XXX object_tface_flags_changed(ob, 0); + + paintface_flush_flags(ob); } #if 0 @@ -721,32 +783,44 @@ static void do_lasso_select_node(short mcords[][2], short moves, short select) } #endif -void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], short moves, short select) +static void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], short moves, short extend, short select) { Object *ob = CTX_data_active_object(C); if(vc->obedit==NULL) { /* Object Mode */ if(paint_facesel_test(ob)) - do_lasso_select_facemode(vc, mcords, moves, select); + do_lasso_select_paintface(vc, mcords, moves, extend, select); else if(ob && ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT)) ; else if(ob && ob->mode & OB_MODE_PARTICLE_EDIT) - PE_lasso_select(C, mcords, moves, select); + PE_lasso_select(C, mcords, moves, extend, select); else { - do_lasso_select_objects(vc, mcords, moves, select); + do_lasso_select_objects(vc, mcords, moves, extend, select); WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, vc->scene); } } else { /* Edit Mode */ - if(vc->obedit->type==OB_MESH) - do_lasso_select_mesh(vc, mcords, moves, select); - else if(vc->obedit->type==OB_CURVE || vc->obedit->type==OB_SURF) - do_lasso_select_curve(vc, mcords, moves, select); - else if(vc->obedit->type==OB_LATTICE) - do_lasso_select_lattice(vc, mcords, moves, select); - else if(vc->obedit->type==OB_ARMATURE) - do_lasso_select_armature(vc, mcords, moves, select); - + switch(vc->obedit->type) { + case OB_MESH: + do_lasso_select_mesh(vc, mcords, moves, extend, select); + break; + case OB_CURVE: + case OB_SURF: + do_lasso_select_curve(vc, mcords, moves, extend, select); + break; + case OB_LATTICE: + do_lasso_select_lattice(vc, mcords, moves, extend, select); + break; + case OB_ARMATURE: + do_lasso_select_armature(vc, mcords, moves, extend, select); + break; + case OB_MBALL: + do_lasso_select_meta(vc, mcords, moves, extend, select); + break; + default: + assert(!"lasso select on incorrect object type"); + } + WM_event_add_notifier(C, NC_GEOM|ND_SELECT, vc->obedit->data); } } @@ -757,7 +831,7 @@ void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], short static int view3d_lasso_select_exec(bContext *C, wmOperator *op) { ViewContext vc; - int select, i= 0; + int i= 0; short mcords[1024][2]; RNA_BEGIN(op->ptr, itemptr, "path") { @@ -772,13 +846,15 @@ static int view3d_lasso_select_exec(bContext *C, wmOperator *op) RNA_END; if(i>1) { + short extend, select; view3d_operator_needs_opengl(C); /* setup view context for argument to callbacks */ view3d_set_viewcontext(C, &vc); + extend= RNA_boolean_get(op->ptr, "extend"); select= !RNA_boolean_get(op->ptr, "deselect"); - view3d_lasso_select(C, &vc, mcords, i, select); + view3d_lasso_select(C, &vc, mcords, i, extend, select); return OPERATOR_FINISHED; } @@ -801,6 +877,7 @@ void VIEW3D_OT_select_lasso(wmOperatorType *ot) RNA_def_collection_runtime(ot->srna, "path", &RNA_OperatorMousePath, "Path", ""); RNA_def_boolean(ot->srna, "deselect", 0, "Deselect", "Deselect rather than select items."); + RNA_def_boolean(ot->srna, "extend", 1, "Extend", "Extend selection instead of deselecting everything first."); } @@ -1319,7 +1396,7 @@ static void do_nurbs_box_select__doSelect(void *userData, Nurb *UNUSED(nu), BPoi } } } -static void do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int extend) +static int do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int extend) { struct { ViewContext *vc; rcti *rect; int select; } data; @@ -1327,12 +1404,13 @@ static void do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int ext data.rect = rect; data.select = select; - if (extend == 0 && select) { + if (extend == 0 && select) CU_deselect_all(vc->obedit); - } ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ nurbs_foreachScreenVert(vc, do_nurbs_box_select__doSelect, &data); + + return OPERATOR_FINISHED; } static void do_lattice_box_select__doSelect(void *userData, BPoint *bp, int x, int y) @@ -1343,7 +1421,7 @@ static void do_lattice_box_select__doSelect(void *userData, BPoint *bp, int x, i bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT); } } -static void do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int extend) +static int do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int extend) { struct { ViewContext vc; rcti *rect; int select, pass, done; } data; @@ -1351,12 +1429,13 @@ static void do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int e data.rect = rect; data.select = select; - if (extend == 0 && select) { + if (extend == 0 && select) ED_setflagsLatt(vc->obedit, 0); - } ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ lattice_foreachScreenVert(vc, do_lattice_box_select__doSelect, &data); + + return OPERATOR_FINISHED; } static void do_mesh_box_select__doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index)) @@ -1392,7 +1471,7 @@ static void do_mesh_box_select__doSelectFace(void *userData, EditFace *efa, int EM_select_face_fgon(data->vc.em, efa, data->select); } } -static void do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int extend) +static int do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int extend) { struct { ViewContext vc; rcti *rect; short select, pass, done; } data; ToolSettings *ts= vc->scene->toolsettings; @@ -1405,9 +1484,7 @@ static void do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int exte data.done = 0; if (extend == 0 && select) - { EM_deselect_all(vc->em); - } /* workaround: init mats first, EM_mask_init_backbuf_border can change view matrix to pixel space, breaking edge select with backbuf. fixes bug #20936 */ @@ -1451,261 +1528,280 @@ static void do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int exte EM_free_backbuf(); EM_selectmode_flush(vc->em); + + return OPERATOR_FINISHED; +} + +static int do_meta_box_select(ViewContext *vc, rcti *rect, int select, int extend) +{ + MetaBall *mb = (MetaBall*)vc->obedit->data; + MetaElem *ml; + int a; + + unsigned int buffer[4*MAXPICKBUF]; + short hits; + + hits= view3d_opengl_select(vc, buffer, MAXPICKBUF, rect); + + if (extend == 0 && select) { + for(ml= mb->editelems->first; ml; ml= ml->next) { + ml->flag &= ~SELECT; + } + } + + for(ml= mb->editelems->first; ml; ml= ml->next) { + for(a=0; aselcol1==buffer[ (4 * a) + 3 ]) { + ml->flag |= MB_SCALE_RAD; + if(select) ml->flag |= SELECT; + else ml->flag &= ~SELECT; + break; + } + if(ml->selcol2==buffer[ (4 * a) + 3 ]) { + ml->flag &= ~MB_SCALE_RAD; + if(select) ml->flag |= SELECT; + else ml->flag &= ~SELECT; + break; + } + } + } + + return OPERATOR_FINISHED; +} + +static int do_armature_box_select(ViewContext *vc, rcti *rect, short select, short extend) +{ + bArmature *arm= vc->obedit->data; + EditBone *ebone; + int a; + + unsigned int buffer[4*MAXPICKBUF]; + short hits; + + hits= view3d_opengl_select(vc, buffer, MAXPICKBUF, rect); + + /* clear flag we use to detect point was affected */ + for(ebone= arm->edbo->first; ebone; ebone= ebone->next) + ebone->flag &= ~BONE_DONE; + + if (extend==0 && select) + ED_armature_deselect_all_visible(vc->obedit); + + /* first we only check points inside the border */ + for (a=0; aedbo, index & ~(BONESEL_ANY)); + if ((ebone->flag & BONE_UNSELECTABLE)==0) { + if (index & BONESEL_TIP) { + ebone->flag |= BONE_DONE; + if (select) ebone->flag |= BONE_TIPSEL; + else ebone->flag &= ~BONE_TIPSEL; + } + + if (index & BONESEL_ROOT) { + ebone->flag |= BONE_DONE; + if (select) ebone->flag |= BONE_ROOTSEL; + else ebone->flag &= ~BONE_ROOTSEL; + } + } + } + } + + /* now we have to flush tag from parents... */ + for(ebone= arm->edbo->first; ebone; ebone= ebone->next) { + if(ebone->parent && (ebone->flag & BONE_CONNECTED)) { + if(ebone->parent->flag & BONE_DONE) + ebone->flag |= BONE_DONE; + } + } + + /* only select/deselect entire bones when no points where in the rect */ + for (a=0; aedbo, index & ~(BONESEL_ANY)); + if (index & BONESEL_BONE) { + if ((ebone->flag & BONE_UNSELECTABLE)==0) { + if(!(ebone->flag & BONE_DONE)) { + if (select) + ebone->flag |= (BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED); + else + ebone->flag &= ~(BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED); + } + } + } + } + } + + ED_armature_sync_selection(arm->edbo); + + return OPERATOR_CANCELLED; +} + +static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, int select, int extend) +{ + Bone *bone; + Object *ob= vc->obact; + unsigned int *vbuffer=NULL; /* selection buffer */ + unsigned int *col; /* color in buffer */ + int bone_only; + int bone_selected=0; + int totobj= MAXPICKBUF; // XXX solve later + short hits; + + if((ob) && (ob->mode & OB_MODE_POSE)) + bone_only= 1; + else + bone_only= 0; + + if (extend == 0 && select) { + if (bone_only) { + CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) { + if ((pchan->bone->flag & BONE_UNSELECTABLE)==0) { + pchan->bone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + } + } + CTX_DATA_END; + } else { + object_deselect_all_visible(vc->scene, vc->v3d); + } + } + + /* selection buffer now has bones potentially too, so we add MAXPICKBUF */ + vbuffer = MEM_mallocN(4 * (totobj+MAXPICKBUF) * sizeof(unsigned int), "selection buffer"); + hits= view3d_opengl_select(vc, vbuffer, 4*(totobj+MAXPICKBUF), rect); + /* + LOGIC NOTES (theeth): + The buffer and ListBase have the same relative order, which makes the selection + very simple. Loop through both data sets at the same time, if the color + is the same as the object, we have a hit and can move to the next color + and object pair, if not, just move to the next object, + keeping the same color until we have a hit. + + The buffer order is defined by OGL standard, hopefully no stupid GFX card + does it incorrectly. + */ + + if (hits>0) { /* no need to loop if there's no hit */ + Base *base; + col = vbuffer + 3; + + for(base= vc->scene->base.first; base && hits; base= base->next) { + if(BASE_SELECTABLE(vc->v3d, base)) { + while (base->selcol == (*col & 0xFFFF)) { /* we got an object */ + + if(*col & 0xFFFF0000) { /* we got a bone */ + bone = get_indexed_bone(base->object, *col & ~(BONESEL_ANY)); + if(bone) { + if(select) { + bone->flag |= BONE_SELECTED; + bone_selected=1; +// XXX select_actionchannel_by_name(base->object->action, bone->name, 1); + } + else { + bArmature *arm= base->object->data; + bone->flag &= ~BONE_SELECTED; +// XXX select_actionchannel_by_name(base->object->action, bone->name, 0); + if(arm->act_bone==bone) + arm->act_bone= NULL; + + } + } + } + else if(!bone_only) { + if (select) + ED_base_object_select(base, BA_SELECT); + else + ED_base_object_select(base, BA_DESELECT); + } + + col+=4; /* next color */ + hits--; + if(hits==0) break; + } + } + + if (bone_selected) { + WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, base->object); + } + } + + WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, vc->scene); + + } + MEM_freeN(vbuffer); + + return hits > 0 ? OPERATOR_FINISHED : OPERATOR_CANCELLED; } static int view3d_borderselect_exec(bContext *C, wmOperator *op) { ViewContext vc; - Scene *scene= CTX_data_scene(C); - ScrArea *sa= CTX_wm_area(C); - View3D *v3d= sa->spacedata.first; - Object *obedit= CTX_data_edit_object(C); - Object *obact= CTX_data_active_object(C); rcti rect; - Base *base; - MetaElem *ml; - unsigned int buffer[4*MAXPICKBUF]; - int a, index; - int extend; - short hits, selecting; + short extend; + short select; + + int ret= OPERATOR_CANCELLED; view3d_operator_needs_opengl(C); - + /* setup view context for argument to callbacks */ view3d_set_viewcontext(C, &vc); - selecting= (RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_SELECT); + select= (RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_SELECT); rect.xmin= RNA_int_get(op->ptr, "xmin"); rect.ymin= RNA_int_get(op->ptr, "ymin"); rect.xmax= RNA_int_get(op->ptr, "xmax"); rect.ymax= RNA_int_get(op->ptr, "ymax"); extend = RNA_boolean_get(op->ptr, "extend"); - if(obedit==NULL && (paint_facesel_test(OBACT))) { - face_borderselect(C, obact, &rect, selecting, extend); - return OPERATOR_FINISHED; - } - else if(obedit==NULL && (obact && obact->mode & OB_MODE_PARTICLE_EDIT)) { - return PE_border_select(C, &rect, selecting, extend); - } - else if(obedit==NULL && (obact && obact->mode & OB_MODE_SCULPT)) - return OPERATOR_CANCELLED; - - if(obedit) { - if(obedit->type==OB_MESH) { - Mesh *me= obedit->data; - vc.em= me->edit_mesh; - do_mesh_box_select(&vc, &rect, selecting, extend); + if(vc.obedit) { + switch(vc.obedit->type) { + case OB_MESH: + vc.em= ((Mesh *)vc.obedit->data)->edit_mesh; + ret= do_mesh_box_select(&vc, &rect, select, extend); // if (EM_texFaceCheck()) - WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data); - - } - else if(ELEM(obedit->type, OB_CURVE, OB_SURF)) { - do_nurbs_box_select(&vc, &rect, selecting, extend); - } - else if(obedit->type==OB_MBALL) { - MetaBall *mb = (MetaBall*)obedit->data; - hits= view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect); - - if (extend == 0 && selecting) { - ml= mb->editelems->first; - - while(ml) { - ml->flag &= ~SELECT; - ml= ml->next; - } + if(ret & OPERATOR_FINISHED) { + WM_event_add_notifier(C, NC_GEOM|ND_SELECT, vc.obedit->data); } - - ml= mb->editelems->first; - - while(ml) { - for(a=0; aselcol1==buffer[ (4 * a) + 3 ]) { - ml->flag |= MB_SCALE_RAD; - if(selecting) ml->flag |= SELECT; - else ml->flag &= ~SELECT; - break; - } - if(ml->selcol2==buffer[ (4 * a) + 3 ]) { - ml->flag &= ~MB_SCALE_RAD; - if(selecting) ml->flag |= SELECT; - else ml->flag &= ~SELECT; - break; - } - } - ml= ml->next; + break; + case OB_CURVE: + case OB_SURF: + ret= do_nurbs_box_select(&vc, &rect, select, extend); + break; + case OB_MBALL: + ret= do_meta_box_select(&vc, &rect, select, extend); + break; + case OB_ARMATURE: + ret= do_armature_box_select(&vc, &rect, select, extend); + if(ret & OPERATOR_FINISHED) { + WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, vc.obedit); } - } - else if(obedit->type==OB_ARMATURE) { - bArmature *arm= obedit->data; - EditBone *ebone; - - /* clear flag we use to detect point was affected */ - for(ebone= arm->edbo->first; ebone; ebone= ebone->next) - ebone->flag &= ~BONE_DONE; - - if (extend==0 && selecting) { - /* Set the flags */ - CTX_DATA_BEGIN(C, EditBone *, ebone, visible_bones) { - /* ignore bone if selection can't change */ - if ((ebone->flag & BONE_UNSELECTABLE) == 0) { - ebone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); - } - } - CTX_DATA_END; - } - - hits= view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect); - - /* first we only check points inside the border */ - for (a=0; aedbo, index & ~(BONESEL_ANY)); - if (index & BONESEL_TIP) { - ebone->flag |= BONE_DONE; - if (selecting) ebone->flag |= BONE_TIPSEL; - else ebone->flag &= ~BONE_TIPSEL; - } - - if (index & BONESEL_ROOT) { - ebone->flag |= BONE_DONE; - if (selecting) ebone->flag |= BONE_ROOTSEL; - else ebone->flag &= ~BONE_ROOTSEL; - } - } - } - - /* now we have to flush tag from parents... */ - for(ebone= arm->edbo->first; ebone; ebone= ebone->next) { - if(ebone->parent && (ebone->flag & BONE_CONNECTED)) { - if(ebone->parent->flag & BONE_DONE) - ebone->flag |= BONE_DONE; - } - } - - /* only select/deselect entire bones when no points where in the rect */ - for (a=0; aedbo, index & ~(BONESEL_ANY)); - if (index & BONESEL_BONE) { - if(!(ebone->flag & BONE_DONE)) { - if (selecting) - ebone->flag |= (BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED); - else - ebone->flag &= ~(BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED); - } - } - } - } - - ED_armature_sync_selection(arm->edbo); - WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, vc.obedit); - } - else if(obedit->type==OB_LATTICE) { - do_lattice_box_select(&vc, &rect, selecting, extend); + break; + case OB_LATTICE: + ret= do_lattice_box_select(&vc, &rect, select, extend); + break; + default: + assert(!"border select on incorrect object type"); } } else { /* no editmode, unified for bones and objects */ - Bone *bone; - Object *ob= OBACT; - unsigned int *vbuffer=NULL; /* selection buffer */ - unsigned int *col; /* color in buffer */ - int bone_only; - int bone_selected=0; - int totobj= MAXPICKBUF; // XXX solve later - - if((ob) && (ob->mode & OB_MODE_POSE)) - bone_only= 1; - else - bone_only= 0; - - if (extend == 0 && selecting) { - base= FIRSTBASE; - - if (bone_only) { - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) { - pchan->bone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); - } - CTX_DATA_END; - } else { - while(base) { - Base *next = base->next; - if(BASE_SELECTABLE(v3d, base)) { - ED_base_object_select(base, BA_DESELECT); - } - base= next; - } - } + if(vc.obact && vc.obact->mode & OB_MODE_SCULPT) { + /* pass */ } - - /* selection buffer now has bones potentially too, so we add MAXPICKBUF */ - vbuffer = MEM_mallocN(4 * (totobj+MAXPICKBUF) * sizeof(unsigned int), "selection buffer"); - hits= view3d_opengl_select(&vc, vbuffer, 4*(totobj+MAXPICKBUF), &rect); - /* - LOGIC NOTES (theeth): - The buffer and ListBase have the same relative order, which makes the selection - very simple. Loop through both data sets at the same time, if the color - is the same as the object, we have a hit and can move to the next color - and object pair, if not, just move to the next object, - keeping the same color until we have a hit. - - The buffer order is defined by OGL standard, hopefully no stupid GFX card - does it incorrectly. - */ - - if (hits>0) { /* no need to loop if there's no hit */ - base= FIRSTBASE; - col = vbuffer + 3; - - while(base && hits) { - Base *next = base->next; - if(BASE_SELECTABLE(v3d, base)) { - while (base->selcol == (*col & 0xFFFF)) { /* we got an object */ - - if(*col & 0xFFFF0000) { /* we got a bone */ - bone = get_indexed_bone(base->object, *col & ~(BONESEL_ANY)); - if(bone) { - if(selecting) { - bone->flag |= BONE_SELECTED; - bone_selected=1; -// XXX select_actionchannel_by_name(base->object->action, bone->name, 1); - } - else { - bArmature *arm= base->object->data; - bone->flag &= ~BONE_SELECTED; -// XXX select_actionchannel_by_name(base->object->action, bone->name, 0); - if(arm->act_bone==bone) - arm->act_bone= NULL; - - } - } - } - else if(!bone_only) { - if (selecting) - ED_base_object_select(base, BA_SELECT); - else - ED_base_object_select(base, BA_DESELECT); - } - - col+=4; /* next color */ - hits--; - if(hits==0) break; - } - } - - if (bone_selected) WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, base->object); - - base= next; - } - - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene); - + else if(vc.obact && paint_facesel_test(vc.obact)) { + ret= do_paintface_box_select(&vc, &rect, select, extend); + } + else if(vc.obact && vc.obact->mode & OB_MODE_PARTICLE_EDIT) { + ret= PE_border_select(C, &rect, select, extend); + } + else { /* object mode with none active */ + ret= do_object_pose_box_select(C, &vc, &rect, select, extend); } - MEM_freeN(vbuffer); } - return OPERATOR_FINISHED; + + return ret; } @@ -1764,7 +1860,7 @@ static int view3d_select_invoke(bContext *C, wmOperator *op, wmEvent *event) else if(obact && obact->mode & OB_MODE_PARTICLE_EDIT) return PE_mouse_particles(C, event->mval, extend); else if(obact && paint_facesel_test(obact)) - retval = face_select(C, obact, event->mval, extend); + retval = paintface_mouse_select(C, obact, event->mval, extend); else retval = mouse_select(C, event->mval, extend, center, enumerate); @@ -1829,7 +1925,7 @@ static void mesh_circle_doSelectFace(void *userData, EditFace *efa, int x, int y } } -static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +static void mesh_circle_select(ViewContext *vc, int select, short *mval, float rad) { ToolSettings *ts= vc->scene->toolsettings; int bbsel; @@ -1841,14 +1937,14 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa vc->em= ((Mesh *)vc->obedit->data)->edit_mesh; data.vc = vc; - data.select = selecting; + data.select = select; data.mval[0] = mval[0]; data.mval[1] = mval[1]; data.radius = rad; if(ts->selectmode & SCE_SELECT_VERTEX) { if(bbsel) { - EM_backbuf_checkAndSelectVerts(vc->em, selecting==LEFTMOUSE); + EM_backbuf_checkAndSelectVerts(vc->em, select==LEFTMOUSE); } else { mesh_foreachScreenVert(vc, mesh_circle_doSelectVert, &data, 1); } @@ -1856,7 +1952,7 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa if(ts->selectmode & SCE_SELECT_EDGE) { if (bbsel) { - EM_backbuf_checkAndSelectEdges(vc->em, selecting==LEFTMOUSE); + EM_backbuf_checkAndSelectEdges(vc->em, select==LEFTMOUSE); } else { mesh_foreachScreenEdge(vc, mesh_circle_doSelectEdge, &data, 0); } @@ -1864,7 +1960,7 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa if(ts->selectmode & SCE_SELECT_FACE) { if(bbsel) { - EM_backbuf_checkAndSelectFaces(vc->em, selecting==LEFTMOUSE); + EM_backbuf_checkAndSelectFaces(vc->em, select==LEFTMOUSE); } else { mesh_foreachScreenFace(vc, mesh_circle_doSelectFace, &data); } @@ -1874,7 +1970,7 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa EM_selectmode_flush(vc->em); } -static void paint_facesel_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +static void paint_facesel_circle_select(ViewContext *vc, int select, short *mval, float rad) { Object *ob= vc->obact; Mesh *me = ob?ob->data:NULL; @@ -1884,10 +1980,8 @@ static void paint_facesel_circle_select(ViewContext *vc, int selecting, short *m em_vertoffs= me->totface+1; /* max index array */ bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0)); - EM_backbuf_checkAndSelectTFaces(me, selecting==LEFTMOUSE); + EM_backbuf_checkAndSelectTFaces(me, select==LEFTMOUSE); EM_free_backbuf(); - -// XXX object_tface_flags_changed(OBACT, 0); } } @@ -1923,13 +2017,13 @@ static void nurbscurve_circle_doSelect(void *userData, Nurb *UNUSED(nu), BPoint } } } -static void nurbscurve_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +static void nurbscurve_circle_select(ViewContext *vc, int select, short *mval, float rad) { struct {ViewContext *vc; short select, mval[2]; float radius; } data; /* set vc-> edit data */ - data.select = selecting; + data.select = select; data.mval[0] = mval[0]; data.mval[1] = mval[1]; data.radius = rad; @@ -1950,13 +2044,13 @@ static void latticecurve_circle_doSelect(void *userData, BPoint *bp, int x, int bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT); } } -static void lattice_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +static void lattice_circle_select(ViewContext *vc, int select, short *mval, float rad) { struct {ViewContext *vc; short select, mval[2]; float radius; } data; /* set vc-> edit data */ - data.select = selecting; + data.select = select; data.mval[0] = mval[0]; data.mval[1] = mval[1]; data.radius = rad; @@ -1989,7 +2083,7 @@ static short armature_circle_doSelectJoint(void *userData, EditBone *ebone, int } return 0; } -static void armature_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +static void armature_circle_select(ViewContext *vc, int select, short *mval, float rad) { struct {ViewContext *vc; short select, mval[2]; float radius; } data; bArmature *arm= vc->obedit->data; @@ -1997,7 +2091,7 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval, int change= FALSE; /* set vc->edit data */ - data.select = selecting; + data.select = select; data.mval[0] = mval[0]; data.mval[1] = mval[1]; data.radius = rad; @@ -2029,7 +2123,7 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval, /* only if the endpoints didn't get selected, deal with the middle of the bone too */ // XXX should we just do this always? if ( (didpoint==0) && edge_inside_circle(mval[0], mval[1], rad, sco1[0], sco1[1], sco2[0], sco2[1]) ) { - if (selecting) + if (select) ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED; else ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); @@ -2045,21 +2139,21 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval, /** Callbacks for circle selection in Editmode */ -static void obedit_circle_select(ViewContext *vc, short selecting, short *mval, float rad) +static void obedit_circle_select(ViewContext *vc, short select, short *mval, float rad) { switch(vc->obedit->type) { case OB_MESH: - mesh_circle_select(vc, selecting, mval, rad); + mesh_circle_select(vc, select, mval, rad); break; case OB_CURVE: case OB_SURF: - nurbscurve_circle_select(vc, selecting, mval, rad); + nurbscurve_circle_select(vc, select, mval, rad); break; case OB_LATTICE: - lattice_circle_select(vc, selecting, mval, rad); + lattice_circle_select(vc, select, mval, rad); break; case OB_ARMATURE: - armature_circle_select(vc, selecting, mval, rad); + armature_circle_select(vc, select, mval, rad); break; default: return; @@ -2078,9 +2172,9 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) int y= RNA_int_get(op->ptr, "y"); int radius= RNA_int_get(op->ptr, "radius"); int gesture_mode= RNA_int_get(op->ptr, "gesture_mode"); - int selecting; + int select; - selecting= (gesture_mode==GESTURE_MODAL_SELECT); + select= (gesture_mode==GESTURE_MODAL_SELECT); if(CTX_data_edit_object(C) || paint_facesel_test(obact) || (obact && obact->mode & OB_MODE_PARTICLE_EDIT)) { @@ -2094,22 +2188,22 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) mval[1]= y; if(CTX_data_edit_object(C)) { - obedit_circle_select(&vc, selecting, mval, (float)radius); + obedit_circle_select(&vc, select, mval, (float)radius); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obact->data); } else if(paint_facesel_test(obact)) { - paint_facesel_circle_select(&vc, selecting, mval, (float)radius); + paint_facesel_circle_select(&vc, select, mval, (float)radius); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obact->data); } else - return PE_circle_select(C, selecting, mval, (float)radius); + return PE_circle_select(C, select, mval, (float)radius); } else if(obact && obact->mode & OB_MODE_SCULPT) { return OPERATOR_CANCELLED; } else { Base *base; - selecting= selecting?BA_SELECT:BA_DESELECT; + select= select?BA_SELECT:BA_DESELECT; for(base= FIRSTBASE; base; base= base->next) { if(BASE_SELECTABLE(v3d, base)) { project_short(ar, base->object->obmat[3], &base->sx); @@ -2117,7 +2211,7 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) int dx= base->sx-x; int dy= base->sy-y; if( dx*dx + dy*dy < radius*radius) - ED_base_object_select(base, selecting); + ED_base_object_select(base, select); } } } diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 15e04f31f2f..1be7816f5ea 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -26,12 +26,6 @@ * ***** END GPL LICENSE BLOCK ***** */ -#include -#include -#include -#include - -#include "DNA_anim_types.h" #include "DNA_camera_types.h" #include "DNA_lamp_types.h" #include "DNA_scene_types.h" @@ -40,9 +34,7 @@ #include "MEM_guardedalloc.h" #include "BLI_math.h" -#include "BLI_blenlib.h" -#include "BLI_editVert.h" -#include "BLI_rand.h" +#include "BLI_rect.h" #include "BKE_anim.h" #include "BKE_action.h" @@ -52,26 +44,19 @@ #include "BKE_main.h" #include "BKE_report.h" #include "BKE_scene.h" -#include "BKE_depsgraph.h" /* for fly mode updating */ - #include "BIF_gl.h" #include "BIF_glutil.h" +#include "GPU_draw.h" + #include "WM_api.h" #include "WM_types.h" -#include "ED_keyframing.h" #include "ED_screen.h" #include "ED_armature.h" -#include "ED_space_api.h" -#include "GPU_draw.h" - - -#include "PIL_time.h" /* smoothview */ - -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE #include "SYS_System.h" #endif @@ -154,8 +139,12 @@ void view3d_settings_from_ob(Object *ob, float *ofs, float *quat, float *dist, f } if (dist) { - float vec[3] = {0.0f, 0.0f, -(*dist)}; float tquat[4]; + float vec[3]; + + vec[0]= 0.0f; + vec[1]= 0.0f; + vec[2]= -(*dist); mat4_to_quat(tquat, ob->obmat); @@ -190,10 +179,9 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo { View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= CTX_wm_region_view3d(C); - struct SmoothViewStore sms; + struct SmoothViewStore sms= {0}; /* initialize sms */ - memset(&sms,0,sizeof(struct SmoothViewStore)); copy_v3_v3(sms.new_ofs, rv3d->ofs); copy_qt_qt(sms.new_quat, rv3d->viewquat); sms.new_dist= rv3d->dist; @@ -1036,6 +1024,17 @@ int get_view3d_viewplane(View3D *v3d, RegionView3D *rv3d, int winxi, int winyi, if(cam) { float dx= 0.5*fac*rv3d->camdx*(x2-x1); float dy= 0.5*fac*rv3d->camdy*(y2-y1); + + /* shift offset */ + if(cam->type==CAM_ORTHO) { + dx += cam->shiftx * cam->ortho_scale; + dy += cam->shifty * cam->ortho_scale; + } + else { + dx += cam->shiftx * (cam->clipsta / cam->lens) * 32.0; + dy += cam->shifty * (cam->clipsta / cam->lens) * 32.0; + } + x1+= dx; x2+= dx; y1+= dy; @@ -1175,25 +1174,6 @@ static void view3d_viewlock(RegionView3D *rv3d) } } -/* give a 4x4 matrix from a perspective view, only needs viewquat, ofs and dist - * basically the same as... - * rv3d->persp= RV3D_PERSP - * setviewmatrixview3d(scene, v3d, rv3d); - * setcameratoview3d(v3d, rv3d, v3d->camera); - * ...but less of a hassle - * */ -static void view3d_persp_mat4(RegionView3D *rv3d, float mat[][4]) -{ - float qt[4], dvec[3]; - copy_qt_qt(qt, rv3d->viewquat); - qt[0]= -qt[0]; - quat_to_mat4(mat, qt); - mat[3][2] -= rv3d->dist; - translate_m4(mat, rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2]); - mul_v3_v3fl(dvec, mat[2], -rv3d->dist); - sub_v3_v3v3(mat[3], dvec, rv3d->ofs); -} - /* dont set windows active in in here, is used by renderwin too */ void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d) { @@ -1228,6 +1208,11 @@ void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d) } translate_m4( rv3d->viewmat,-vec[0], -vec[1], -vec[2]); } + else if (v3d->ob_centre_cursor) { + float vec[3]; + copy_v3_v3(vec, give_cursor(scene, v3d)); + translate_m4(rv3d->viewmat, -vec[0], -vec[1], -vec[2]); + } else translate_m4( rv3d->viewmat,rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2]); } } @@ -1513,7 +1498,6 @@ static void initlocalview(Main *bmain, Scene *scene, ScrArea *sa) v3d->cursor[2]= -rv3d->ofs[2]; } } - if (v3d->near> 0.1) v3d->near= 0.1; v3d->lay= locallay; } @@ -1628,7 +1612,7 @@ void VIEW3D_OT_localview(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; } -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE static ListBase queue_back; static void SaveState(bContext *C) @@ -1720,7 +1704,7 @@ void game_set_commmandline_options(GameData *gm) /* maybe we need this defined somewhere else */ extern void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *cam_frame, int always_use_expand_framing); -#endif // GAMEBLENDER == 1 +#endif // WITH_GAMEENGINE int game_engine_poll(bContext *C) { @@ -1772,7 +1756,7 @@ int ED_view3d_context_activate(bContext *C) static int game_engine_exec(bContext *C, wmOperator *op) { -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE Scene *startscene = CTX_data_scene(C); ScrArea *sa, *prevsa= CTX_wm_area(C); ARegion *ar, *prevar= CTX_wm_region(C); @@ -1796,7 +1780,7 @@ static int game_engine_exec(bContext *C, wmOperator *op) if(rv3d->persp==RV3D_CAMOB && startscene->gm.framing.type == SCE_GAMEFRAMING_BARS && startscene->gm.stereoflag != STEREO_DOME) { /* Letterbox */ rctf cam_framef; - view3d_calc_camera_border(startscene, ar, rv3d, CTX_wm_view3d(C), &cam_framef); + view3d_calc_camera_border(startscene, ar, rv3d, CTX_wm_view3d(C), &cam_framef, FALSE); cam_frame.xmin = cam_framef.xmin + ar->winrct.xmin; cam_frame.xmax = cam_framef.xmax + ar->winrct.xmin; cam_frame.ymin = cam_framef.ymin + ar->winrct.ymin; @@ -1850,897 +1834,6 @@ void VIEW3D_OT_game_start(wmOperatorType *ot) ot->poll= game_engine_poll; } - -/* NOTE: these defines are saved in keymap files, do not change values but just add new ones */ -#define FLY_MODAL_CANCEL 1 -#define FLY_MODAL_CONFIRM 2 -#define FLY_MODAL_ACCELERATE 3 -#define FLY_MODAL_DECELERATE 4 -#define FLY_MODAL_PAN_ENABLE 5 -#define FLY_MODAL_PAN_DISABLE 6 -#define FLY_MODAL_DIR_FORWARD 7 -#define FLY_MODAL_DIR_BACKWARD 8 -#define FLY_MODAL_DIR_LEFT 9 -#define FLY_MODAL_DIR_RIGHT 10 -#define FLY_MODAL_DIR_UP 11 -#define FLY_MODAL_DIR_DOWN 12 -#define FLY_MODAL_AXIS_LOCK_X 13 -#define FLY_MODAL_AXIS_LOCK_Z 14 -#define FLY_MODAL_PRECISION_ENABLE 15 -#define FLY_MODAL_PRECISION_DISABLE 16 - -/* called in transform_ops.c, on each regeneration of keymaps */ -void fly_modal_keymap(wmKeyConfig *keyconf) -{ - static EnumPropertyItem modal_items[] = { - {FLY_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""}, - {FLY_MODAL_CONFIRM, "CONFIRM", 0, "Confirm", ""}, - {FLY_MODAL_ACCELERATE, "ACCELERATE", 0, "Accelerate", ""}, - {FLY_MODAL_DECELERATE, "DECELERATE", 0, "Decelerate", ""}, - - {FLY_MODAL_PAN_ENABLE, "PAN_ENABLE", 0, "Pan Enable", ""}, - {FLY_MODAL_PAN_DISABLE, "PAN_DISABLE", 0, "Pan Disable", ""}, - - {FLY_MODAL_DIR_FORWARD, "FORWARD", 0, "Fly Forward", ""}, - {FLY_MODAL_DIR_BACKWARD,"BACKWARD", 0, "Fly Backward", ""}, - {FLY_MODAL_DIR_LEFT, "LEFT", 0, "Fly Left", ""}, - {FLY_MODAL_DIR_RIGHT, "RIGHT", 0, "Fly Right", ""}, - {FLY_MODAL_DIR_UP, "UP", 0, "Fly Up", ""}, - {FLY_MODAL_DIR_DOWN, "DOWN", 0, "Fly Down", ""}, - - {FLY_MODAL_AXIS_LOCK_X, "AXIS_LOCK_X", 0, "X Axis Correction", "X axis correction (toggle)"}, - {FLY_MODAL_AXIS_LOCK_Z, "AXIS_LOCK_Z", 0, "X Axis Correction", "Z axis correction (toggle)"}, - - {FLY_MODAL_PRECISION_ENABLE, "PRECISION_ENABLE", 0, "Precision Enable", ""}, - {FLY_MODAL_PRECISION_DISABLE, "PRECISION_DISABLE", 0, "Precision Disable", ""}, - - {0, NULL, 0, NULL, NULL}}; - - wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "View3D Fly Modal"); - - /* this function is called for each spacetype, only needs to add map once */ - if(keymap) return; - - keymap= WM_modalkeymap_add(keyconf, "View3D Fly Modal", modal_items); - - /* items for modal map */ - WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CANCEL); - WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CANCEL); - - WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CONFIRM); - WM_modalkeymap_add_item(keymap, RETKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); - WM_modalkeymap_add_item(keymap, SPACEKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); - WM_modalkeymap_add_item(keymap, PADENTER, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); - - WM_modalkeymap_add_item(keymap, PADPLUSKEY, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE); - WM_modalkeymap_add_item(keymap, PADMINUS, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE); - WM_modalkeymap_add_item(keymap, WHEELUPMOUSE, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE); - WM_modalkeymap_add_item(keymap, WHEELDOWNMOUSE, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE); - - WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, KM_ANY, 0, FLY_MODAL_PAN_ENABLE); - WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PAN_DISABLE); /* XXX - Bug in the event system, middle mouse release doesnt work */ - - /* WASD */ - WM_modalkeymap_add_item(keymap, WKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_FORWARD); - WM_modalkeymap_add_item(keymap, SKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_BACKWARD); - WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_LEFT); - WM_modalkeymap_add_item(keymap, DKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_RIGHT); - WM_modalkeymap_add_item(keymap, RKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_UP); - WM_modalkeymap_add_item(keymap, FKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_DOWN); - - WM_modalkeymap_add_item(keymap, XKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_X); - WM_modalkeymap_add_item(keymap, ZKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_Z); - - WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_PRECISION_ENABLE); - WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PRECISION_DISABLE); - - /* assign map to operators */ - WM_modalkeymap_assign(keymap, "VIEW3D_OT_fly"); - -} - -typedef struct FlyInfo { - /* context stuff */ - RegionView3D *rv3d; - View3D *v3d; - ARegion *ar; - Scene *scene; - - wmTimer *timer; /* needed for redraws */ - - short state; - short use_precision; - short redraw; - short mval[2]; - - /* fly state state */ - float speed; /* the speed the view is moving per redraw */ - short axis; /* Axis index to move allong by default Z to move allong the view */ - short pan_view; /* when true, pan the view instead of rotating */ - - /* relative view axis locking - xlock, zlock - 0; disabled - 1; enabled but not checking because mouse hasnt moved outside the margin since locking was checked an not needed - when the mouse moves, locking is set to 2 so checks are done. - 2; mouse moved and checking needed, if no view altering is donem its changed back to 1 */ - short xlock, zlock; - float xlock_momentum, zlock_momentum; /* nicer dynamics */ - float grid; /* world scale 1.0 default */ - - /* root most parent */ - Object *root_parent; - - /* backup values */ - float dist_backup; /* backup the views distance since we use a zero dist for fly mode */ - float ofs_backup[3]; /* backup the views offset incase the user cancels flying in non camera mode */ - float rot_backup[4]; /* backup the views quat incase the user cancels flying in non camera mode. (quat for view, eul for camera) */ - short persp_backup; /* remember if were ortho or not, only used for restoring the view if it was a ortho view */ - - void *obtfm; /* backup the objects transform */ - - /* compare between last state */ - double time_lastwheel; /* used to accelerate when using the mousewheel a lot */ - double time_lastdraw; /* time between draws */ - - void *draw_handle_pixel; - - /* use for some lag */ - float dvec_prev[3]; /* old for some lag */ - -} FlyInfo; - -static void drawFlyPixel(const struct bContext *UNUSED(C), struct ARegion *UNUSED(ar), void *arg) -{ - FlyInfo *fly = arg; - - /* draws 4 edge brackets that frame the safe area where the - mouse can move during fly mode without spinning the view */ - float x1, x2, y1, y2; - - x1= 0.45*(float)fly->ar->winx; - y1= 0.45*(float)fly->ar->winy; - x2= 0.55*(float)fly->ar->winx; - y2= 0.55*(float)fly->ar->winy; - cpack(0); - - - glBegin(GL_LINES); - /* bottom left */ - glVertex2f(x1,y1); - glVertex2f(x1,y1+5); - - glVertex2f(x1,y1); - glVertex2f(x1+5,y1); - - /* top right */ - glVertex2f(x2,y2); - glVertex2f(x2,y2-5); - - glVertex2f(x2,y2); - glVertex2f(x2-5,y2); - - /* top left */ - glVertex2f(x1,y2); - glVertex2f(x1,y2-5); - - glVertex2f(x1,y2); - glVertex2f(x1+5,y2); - - /* bottom right */ - glVertex2f(x2,y1); - glVertex2f(x2,y1+5); - - glVertex2f(x2,y1); - glVertex2f(x2-5,y1); - glEnd(); -} - -/* FlyInfo->state */ -#define FLY_RUNNING 0 -#define FLY_CANCEL 1 -#define FLY_CONFIRM 2 - -static int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *event) -{ - float upvec[3]; // tmp - float mat[3][3]; - - fly->rv3d= CTX_wm_region_view3d(C); - fly->v3d = CTX_wm_view3d(C); - fly->ar = CTX_wm_region(C); - fly->scene= CTX_data_scene(C); - - if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->id.lib) { - BKE_report(op->reports, RPT_ERROR, "Cannot fly a camera from an external library"); - return FALSE; - } - - if(fly->v3d->ob_centre) { - BKE_report(op->reports, RPT_ERROR, "Cannot fly when the view is locked to an object"); - return FALSE; - } - - if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->constraints.first) { - BKE_report(op->reports, RPT_ERROR, "Cannot fly an object with constraints"); - return FALSE; - } - - fly->state= FLY_RUNNING; - fly->speed= 0.0f; - fly->axis= 2; - fly->pan_view= FALSE; - fly->xlock= FALSE; - fly->zlock= FALSE; - fly->xlock_momentum=0.0f; - fly->zlock_momentum=0.0f; - fly->grid= 1.0f; - fly->use_precision= 0; - - fly->dvec_prev[0]= fly->dvec_prev[1]= fly->dvec_prev[2]= 0.0f; - - fly->timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.01f); - - fly->mval[0] = event->x - fly->ar->winrct.xmin; - fly->mval[1] = event->y - fly->ar->winrct.ymin; - - - fly->time_lastdraw= fly->time_lastwheel= PIL_check_seconds_timer(); - - fly->draw_handle_pixel = ED_region_draw_cb_activate(fly->ar->type, drawFlyPixel, fly, REGION_DRAW_POST_PIXEL); - - fly->rv3d->rflag |= RV3D_NAVIGATING; /* so we draw the corner margins */ - - /* detect weather to start with Z locking */ - upvec[0]=1.0f; upvec[1]=0.0f; upvec[2]=0.0f; - copy_m3_m4(mat, fly->rv3d->viewinv); - mul_m3_v3(mat, upvec); - if (fabs(upvec[2]) < 0.1) - fly->zlock = 1; - upvec[0]=0; upvec[1]=0; upvec[2]=0; - - fly->persp_backup= fly->rv3d->persp; - fly->dist_backup= fly->rv3d->dist; - if (fly->rv3d->persp==RV3D_CAMOB) { - Object *ob_back; - if((fly->root_parent=fly->v3d->camera->parent)) { - while(fly->root_parent->parent) - fly->root_parent= fly->root_parent->parent; - ob_back= fly->root_parent; - } - else { - ob_back= fly->v3d->camera; - } - - /* store the original camera loc and rot */ - /* TODO. axis angle etc */ - - fly->obtfm= object_tfm_backup(ob_back); - - where_is_object(fly->scene, fly->v3d->camera); - negate_v3_v3(fly->rv3d->ofs, fly->v3d->camera->obmat[3]); - - fly->rv3d->dist=0.0; - } else { - /* perspective or ortho */ - if (fly->rv3d->persp==RV3D_ORTHO) - fly->rv3d->persp= RV3D_PERSP; /*if ortho projection, make perspective */ - copy_qt_qt(fly->rot_backup, fly->rv3d->viewquat); - copy_v3_v3(fly->ofs_backup, fly->rv3d->ofs); - fly->rv3d->dist= 0.0f; - - upvec[2]= fly->dist_backup; /*x and y are 0*/ - mul_m3_v3(mat, upvec); - sub_v3_v3(fly->rv3d->ofs, upvec); - /*Done with correcting for the dist*/ - } - - - /* center the mouse, probably the UI mafia are against this but without its quite annoying */ - WM_cursor_warp(CTX_wm_window(C), fly->ar->winrct.xmin + fly->ar->winx/2, fly->ar->winrct.ymin + fly->ar->winy/2); - - return 1; -} - -static int flyEnd(bContext *C, FlyInfo *fly) -{ - RegionView3D *rv3d= fly->rv3d; - View3D *v3d = fly->v3d; - - float upvec[3]; - - if(fly->state == FLY_RUNNING) - return OPERATOR_RUNNING_MODAL; - - WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), fly->timer); - - ED_region_draw_cb_exit(fly->ar->type, fly->draw_handle_pixel); - - rv3d->dist= fly->dist_backup; - - if (fly->state == FLY_CANCEL) { - /* Revert to original view? */ - if (fly->persp_backup==RV3D_CAMOB) { /* a camera view */ - Object *ob_back; - if(fly->root_parent)ob_back= fly->root_parent; - else ob_back= fly->v3d->camera; - - /* store the original camera loc and rot */ - object_tfm_restore(ob_back, fly->obtfm); - - DAG_id_flush_update(&ob_back->id, OB_RECALC_OB); - } else { - /* Non Camera we need to reset the view back to the original location bacause the user canceled*/ - copy_qt_qt(rv3d->viewquat, fly->rot_backup); - copy_v3_v3(rv3d->ofs, fly->ofs_backup); - rv3d->persp= fly->persp_backup; - } - } - else if (fly->persp_backup==RV3D_CAMOB) { /* camera */ - float mat3[3][3]; - if(fly->root_parent) { - DAG_id_flush_update(&fly->root_parent->id, OB_RECALC_OB); - } - else { - copy_m3_m4(mat3, v3d->camera->obmat); - object_mat3_to_rot(v3d->camera, mat3, TRUE); - DAG_id_flush_update(&v3d->camera->id, OB_RECALC_OB); - } - } - else { /* not camera */ - /* Apply the fly mode view */ - /*restore the dist*/ - float mat[3][3]; - upvec[0]= upvec[1]= 0; - upvec[2]= fly->dist_backup; /*x and y are 0*/ - copy_m3_m4(mat, rv3d->viewinv); - mul_m3_v3(mat, upvec); - add_v3_v3(rv3d->ofs, upvec); - /*Done with correcting for the dist */ - } - - rv3d->rflag &= ~RV3D_NAVIGATING; -//XXX2.5 BIF_view3d_previewrender_signal(fly->sa, PR_DBASE|PR_DISPRECT); /* not working at the moment not sure why */ - - if(fly->obtfm) - MEM_freeN(fly->obtfm); - - if(fly->state == FLY_CONFIRM) { - MEM_freeN(fly); - return OPERATOR_FINISHED; - } - - MEM_freeN(fly); - return OPERATOR_CANCELLED; -} - -static void flyEvent(FlyInfo *fly, wmEvent *event) -{ - if (event->type == TIMER && event->customdata == fly->timer) { - fly->redraw = 1; - } - else if (event->type == MOUSEMOVE) { - fly->mval[0] = event->x - fly->ar->winrct.xmin; - fly->mval[1] = event->y - fly->ar->winrct.ymin; - } /* handle modal keymap first */ - else if (event->type == EVT_MODAL_MAP) { - switch (event->val) { - case FLY_MODAL_CANCEL: - fly->state = FLY_CANCEL; - break; - case FLY_MODAL_CONFIRM: - fly->state = FLY_CONFIRM; - break; - - case FLY_MODAL_ACCELERATE: - { - double time_currwheel; - float time_wheel; - - time_currwheel= PIL_check_seconds_timer(); - time_wheel = (float)(time_currwheel - fly->time_lastwheel); - fly->time_lastwheel = time_currwheel; - /*printf("Wheel %f\n", time_wheel);*/ - /*Mouse wheel delays range from 0.5==slow to 0.01==fast*/ - time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */ - - if (fly->speed<0.0f) fly->speed= 0.0f; - else { - if (event->shift) - fly->speed+= fly->grid*time_wheel*0.1; - else - fly->speed+= fly->grid*time_wheel; - } - break; - } - case FLY_MODAL_DECELERATE: - { - double time_currwheel; - float time_wheel; - - time_currwheel= PIL_check_seconds_timer(); - time_wheel = (float)(time_currwheel - fly->time_lastwheel); - fly->time_lastwheel = time_currwheel; - time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */ - - if (fly->speed>0) fly->speed=0; - else { - if (event->shift) - fly->speed-= fly->grid*time_wheel*0.1; - else - fly->speed-= fly->grid*time_wheel; - } - break; - } - case FLY_MODAL_PAN_ENABLE: - fly->pan_view= TRUE; - break; - case FLY_MODAL_PAN_DISABLE: -//XXX2.5 warp_pointer(cent_orig[0], cent_orig[1]); - fly->pan_view= FALSE; - break; - - /* impliment WASD keys */ - case FLY_MODAL_DIR_FORWARD: - if (fly->speed < 0.0f) fly->speed= -fly->speed; /* flip speed rather then stopping, game like motion */ - else if (fly->axis==2) fly->speed += fly->grid; /* increse like mousewheel if were already moving in that difection*/ - fly->axis= 2; - break; - case FLY_MODAL_DIR_BACKWARD: - if (fly->speed > 0.0f) fly->speed= -fly->speed; - else if (fly->axis==2) fly->speed -= fly->grid; - fly->axis= 2; - break; - case FLY_MODAL_DIR_LEFT: - if (fly->speed < 0.0f) fly->speed= -fly->speed; - else if (fly->axis==0) fly->speed += fly->grid; - fly->axis= 0; - break; - case FLY_MODAL_DIR_RIGHT: - if (fly->speed > 0.0f) fly->speed= -fly->speed; - else if (fly->axis==0) fly->speed -= fly->grid; - fly->axis= 0; - break; - case FLY_MODAL_DIR_DOWN: - if (fly->speed < 0.0f) fly->speed= -fly->speed; - else if (fly->axis==1) fly->speed += fly->grid; - fly->axis= 1; - break; - case FLY_MODAL_DIR_UP: - if (fly->speed > 0.0f) fly->speed= -fly->speed; - else if (fly->axis==1) fly->speed -= fly->grid; - fly->axis= 1; - break; - - case FLY_MODAL_AXIS_LOCK_X: - if (fly->xlock) fly->xlock=0; - else { - fly->xlock = 2; - fly->xlock_momentum = 0.0; - } - break; - case FLY_MODAL_AXIS_LOCK_Z: - if (fly->zlock) fly->zlock=0; - else { - fly->zlock = 2; - fly->zlock_momentum = 0.0; - } - break; - - case FLY_MODAL_PRECISION_ENABLE: - fly->use_precision= TRUE; - break; - case FLY_MODAL_PRECISION_DISABLE: - fly->use_precision= FALSE; - break; - - } - } -} - -static int flyApply(bContext *C, FlyInfo *fly) -{ - -#define FLY_ROTATE_FAC 2.5f /* more is faster */ -#define FLY_ZUP_CORRECT_FAC 0.1f /* ammount to correct per step */ -#define FLY_ZUP_CORRECT_ACCEL 0.05f /* increase upright momentum each step */ - - /* - fly mode - Shift+F - a fly loop where the user can move move the view as if they are flying - */ - RegionView3D *rv3d= fly->rv3d; - View3D *v3d = fly->v3d; - ARegion *ar = fly->ar; - Scene *scene= fly->scene; - - float prev_view_mat[4][4]; - - float mat[3][3], /* 3x3 copy of the view matrix so we can move allong the view axis */ - dvec[3]={0,0,0}, /* this is the direction thast added to the view offset per redraw */ - - /* Camera Uprighting variables */ - upvec[3]={0,0,0}, /* stores the view's up vector */ - - moffset[2], /* mouse offset from the views center */ - tmp_quat[4]; /* used for rotating the view */ - - int cent_orig[2], /* view center */ -//XXX- can avoid using // cent[2], /* view center modified */ - xmargin, ymargin; /* x and y margin are define the safe area where the mouses movement wont rotate the view */ - unsigned char - apply_rotation= 1; /* if the user presses shift they can look about without movinf the direction there looking*/ - - if(fly->root_parent) - view3d_persp_mat4(rv3d, prev_view_mat); - - /* the dist defines a vector that is infront of the offset - to rotate the view about. - this is no good for fly mode because we - want to rotate about the viewers center. - but to correct the dist removal we must - alter offset so the view doesn't jump. */ - - xmargin= ar->winx/20.0f; - ymargin= ar->winy/20.0f; - - cent_orig[0]= ar->winrct.xmin + ar->winx/2; - cent_orig[1]= ar->winrct.ymin + ar->winy/2; - - { - - /* mouse offset from the center */ - moffset[0]= fly->mval[0]- ar->winx/2; - moffset[1]= fly->mval[1]- ar->winy/2; - - /* enforce a view margin */ - if (moffset[0]>xmargin) moffset[0]-=xmargin; - else if (moffset[0] < -xmargin) moffset[0]+=xmargin; - else moffset[0]=0; - - if (moffset[1]>ymargin) moffset[1]-=ymargin; - else if (moffset[1] < -ymargin) moffset[1]+=ymargin; - else moffset[1]=0; - - - /* scale the mouse movement by this value - scales mouse movement to the view size - * moffset[0]/(ar->winx-xmargin*2) - window size minus margin (same for y) - * - * the mouse moves isnt linear */ - - if(moffset[0]) { - moffset[0] /= ar->winx - (xmargin*2); - moffset[0] *= fabs(moffset[0]); - } - - if(moffset[1]) { - moffset[1] /= ar->winy - (ymargin*2); - moffset[1] *= fabs(moffset[1]); - } - - /* Should we redraw? */ - if(fly->speed != 0.0f || moffset[0] || moffset[1] || fly->zlock || fly->xlock || dvec[0] || dvec[1] || dvec[2] ) { - float dvec_tmp[3]; - double time_current, time_redraw; /*time how fast it takes for us to redraw, this is so simple scenes dont fly too fast */ - float time_redraw_clamped; - - time_current= PIL_check_seconds_timer(); - time_redraw= (float)(time_current - fly->time_lastdraw); - time_redraw_clamped= MIN2(0.05f, time_redraw); /* clamt the redraw time to avoid jitter in roll correction */ - fly->time_lastdraw= time_current; - /*fprintf(stderr, "%f\n", time_redraw);*/ /* 0.002 is a small redraw 0.02 is larger */ - - /* Scale the time to use shift to scale the speed down- just like - shift slows many other areas of blender down */ - if (fly->use_precision) - fly->speed= fly->speed * (1.0f-time_redraw_clamped); - - copy_m3_m4(mat, rv3d->viewinv); - - if (fly->pan_view==TRUE) { - /* pan only */ - dvec_tmp[0]= -moffset[0]; - dvec_tmp[1]= -moffset[1]; - dvec_tmp[2]= 0; - - if (fly->use_precision) { - dvec_tmp[0] *= 0.1; - dvec_tmp[1] *= 0.1; - } - - mul_m3_v3(mat, dvec_tmp); - mul_v3_fl(dvec_tmp, time_redraw*200.0 * fly->grid); - - } else { - float roll; /* similar to the angle between the camera's up and the Z-up, but its very rough so just roll*/ - - /* rotate about the X axis- look up/down */ - if (moffset[1]) { - upvec[0]=1; - upvec[1]=0; - upvec[2]=0; - mul_m3_v3(mat, upvec); - axis_angle_to_quat( tmp_quat, upvec, (float)moffset[1] * time_redraw * -FLY_ROTATE_FAC); /* Rotate about the relative up vec */ - mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); - - if (fly->xlock) fly->xlock = 2; /*check for rotation*/ - if (fly->zlock) fly->zlock = 2; - fly->xlock_momentum= 0.0f; - } - - /* rotate about the Y axis- look left/right */ - if (moffset[0]) { - - /* if we're upside down invert the moffset */ - upvec[0]=0; - upvec[1]=1; - upvec[2]=0; - mul_m3_v3(mat, upvec); - - if(upvec[2] < 0.0f) - moffset[0]= -moffset[0]; - - /* make the lock vectors */ - if (fly->zlock) { - upvec[0]=0; - upvec[1]=0; - upvec[2]=1; - } else { - upvec[0]=0; - upvec[1]=1; - upvec[2]=0; - mul_m3_v3(mat, upvec); - } - - axis_angle_to_quat( tmp_quat, upvec, (float)moffset[0] * time_redraw * FLY_ROTATE_FAC); /* Rotate about the relative up vec */ - mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); - - if (fly->xlock) fly->xlock = 2;/*check for rotation*/ - if (fly->zlock) fly->zlock = 2; - } - - if (fly->zlock==2) { - upvec[0]=1; - upvec[1]=0; - upvec[2]=0; - mul_m3_v3(mat, upvec); - - /*make sure we have some z rolling*/ - if (fabs(upvec[2]) > 0.00001f) { - roll= upvec[2]*5; - upvec[0]=0; /*rotate the view about this axis*/ - upvec[1]=0; - upvec[2]=1; - - mul_m3_v3(mat, upvec); - axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->zlock_momentum * FLY_ZUP_CORRECT_FAC); /* Rotate about the relative up vec */ - mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); - - fly->zlock_momentum += FLY_ZUP_CORRECT_ACCEL; - } else { - fly->zlock=1; /* dont check until the view rotates again */ - fly->zlock_momentum= 0.0f; - } - } - - if (fly->xlock==2 && moffset[1]==0) { /*only apply xcorrect when mouse isnt applying x rot*/ - upvec[0]=0; - upvec[1]=0; - upvec[2]=1; - mul_m3_v3(mat, upvec); - /*make sure we have some z rolling*/ - if (fabs(upvec[2]) > 0.00001) { - roll= upvec[2] * -5; - - upvec[0]= 1.0f; /*rotate the view about this axis*/ - upvec[1]= 0.0f; - upvec[2]= 0.0f; - - mul_m3_v3(mat, upvec); - - axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->xlock_momentum*0.1f); /* Rotate about the relative up vec */ - mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); - - fly->xlock_momentum += 0.05f; - } else { - fly->xlock=1; /* see above */ - fly->xlock_momentum= 0.0f; - } - } - - - if (apply_rotation) { - /* Normal operation */ - /* define dvec, view direction vector */ - dvec_tmp[0]= dvec_tmp[1]= dvec_tmp[2]= 0.0f; - /* move along the current axis */ - dvec_tmp[fly->axis]= 1.0f; - - mul_m3_v3(mat, dvec_tmp); - - mul_v3_fl(dvec_tmp, fly->speed * time_redraw * 0.25f); - } - } - - /* impose a directional lag */ - interp_v3_v3v3(dvec, dvec_tmp, fly->dvec_prev, (1.0f/(1.0f+(time_redraw*5.0f)))); - - if (rv3d->persp==RV3D_CAMOB) { - Object *lock_ob= fly->root_parent ? fly->root_parent : fly->v3d->camera; - if (lock_ob->protectflag & OB_LOCK_LOCX) dvec[0] = 0.0; - if (lock_ob->protectflag & OB_LOCK_LOCY) dvec[1] = 0.0; - if (lock_ob->protectflag & OB_LOCK_LOCZ) dvec[2] = 0.0; - } - - add_v3_v3(rv3d->ofs, dvec); - - /* todo, dynamic keys */ -#if 0 - if (fly->zlock && fly->xlock) - ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); - else if (fly->zlock) - ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); - else if (fly->xlock) - ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); - else - ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); -#endif - - /* we are in camera view so apply the view ofs and quat to the view matrix and set the camera to the view */ - if (rv3d->persp==RV3D_CAMOB) { - ID *id_key; - /* transform the parent or the camera? */ - if(fly->root_parent) { - Object *ob_update; - - float view_mat[4][4]; - float prev_view_imat[4][4]; - float diff_mat[4][4]; - float parent_mat[4][4]; - - invert_m4_m4(prev_view_imat, prev_view_mat); - view3d_persp_mat4(rv3d, view_mat); - mul_m4_m4m4(diff_mat, prev_view_imat, view_mat); - mul_m4_m4m4(parent_mat, fly->root_parent->obmat, diff_mat); - object_apply_mat4(fly->root_parent, parent_mat); - - // where_is_object(scene, fly->root_parent); - - ob_update= v3d->camera->parent; - while(ob_update) { - DAG_id_flush_update(&ob_update->id, OB_RECALC_OB); - ob_update= ob_update->parent; - } - - copy_m4_m4(prev_view_mat, view_mat); - - id_key= &fly->root_parent->id; - - } - else { - float view_mat[4][4]; - view3d_persp_mat4(rv3d, view_mat); - object_apply_mat4(v3d->camera, view_mat); - id_key= &v3d->camera->id; - } - - /* record the motion */ - if (autokeyframe_cfra_can_key(scene, id_key)) { - ListBase dsources = {NULL, NULL}; - - /* add datasource override for the camera object */ - ANIM_relative_keyingset_add_source(&dsources, id_key, NULL, NULL); - - /* insert keyframes - * 1) on the first frame - * 2) on each subsequent frame - * TODO: need to check in future that frame changed before doing this - */ - if (fly->xlock || fly->zlock || moffset[0] || moffset[1]) { - KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Rotation"); - ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA); - } - if (fly->speed) { - KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Location"); - ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA); - } - - /* free temp data */ - BLI_freelistN(&dsources); - } - } - } else - /*were not redrawing but we need to update the time else the view will jump */ - fly->time_lastdraw= PIL_check_seconds_timer(); - /* end drawing */ - copy_v3_v3(fly->dvec_prev, dvec); - } - -/* moved to flyEnd() */ - - return OPERATOR_FINISHED; -} - - - -static int fly_invoke(bContext *C, wmOperator *op, wmEvent *event) -{ - RegionView3D *rv3d= CTX_wm_region_view3d(C); - FlyInfo *fly; - - if(rv3d->viewlock) - return OPERATOR_CANCELLED; - - fly= MEM_callocN(sizeof(FlyInfo), "FlyOperation"); - - op->customdata= fly; - - if(initFlyInfo(C, fly, op, event)==FALSE) { - MEM_freeN(op->customdata); - return OPERATOR_CANCELLED; - } - - flyEvent(fly, event); - - WM_event_add_modal_handler(C, op); - - return OPERATOR_RUNNING_MODAL; -} - -static int fly_cancel(bContext *C, wmOperator *op) -{ - FlyInfo *fly = op->customdata; - - fly->state = FLY_CANCEL; - flyEnd(C, fly); - op->customdata= NULL; - - return OPERATOR_CANCELLED; -} - -static int fly_modal(bContext *C, wmOperator *op, wmEvent *event) -{ - int exit_code; - - FlyInfo *fly = op->customdata; - - fly->redraw= 0; - - flyEvent(fly, event); - - if(event->type==TIMER && event->customdata == fly->timer) - flyApply(C, fly); - - if(fly->redraw) { - ED_region_tag_redraw(CTX_wm_region(C)); - } - - exit_code = flyEnd(C, fly); - - if(exit_code!=OPERATOR_RUNNING_MODAL) - ED_region_tag_redraw(CTX_wm_region(C)); - - return exit_code; -} - -void VIEW3D_OT_fly(wmOperatorType *ot) -{ - - /* identifiers */ - ot->name= "Fly Navigation"; - ot->description= "Interactively fly around the scene"; - ot->idname= "VIEW3D_OT_fly"; - - /* api callbacks */ - ot->invoke= fly_invoke; - ot->cancel= fly_cancel; - ot->modal= fly_modal; - ot->poll= ED_operator_view3d_active; - - /* flags */ - ot->flag= OPTYPE_BLOCKING; - -} - /* ************************************** */ void view3d_align_axis_to_vector(View3D *v3d, RegionView3D *rv3d, int axisidx, float vec[3]) @@ -2780,3 +1873,12 @@ int view3d_is_ortho(View3D *v3d, RegionView3D *rv3d) { return (rv3d->persp == RV3D_ORTHO || (v3d->camera && ((Camera *)v3d->camera->data)->type == CAM_ORTHO)); } + +float view3d_pixel_size(struct RegionView3D *rv3d, const float co[3]) +{ + return (rv3d->persmat[3][3] + ( + rv3d->persmat[0][3]*co[0] + + rv3d->persmat[1][3]*co[1] + + rv3d->persmat[2][3]*co[2]) + ) * rv3d->pixsize; +} diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 4c6fb887ebc..0f27316ec5b 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -534,6 +534,9 @@ wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf) WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_SNAP_INV_ON); WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_RELEASE, KM_ANY, 0, TFM_MODAL_SNAP_INV_OFF); + + WM_modalkeymap_add_item(keymap, RIGHTCTRLKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_SNAP_INV_ON); + WM_modalkeymap_add_item(keymap, RIGHTCTRLKEY, KM_RELEASE, KM_ANY, 0, TFM_MODAL_SNAP_INV_OFF); WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, TFM_MODAL_ADD_SNAP); WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, KM_ALT, 0, TFM_MODAL_REMOVE_SNAP); @@ -1224,7 +1227,10 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata) if (t->helpline != HLP_NONE && !(t->flag & T_USES_MANIPULATOR)) { float vecrot[3], cent[2]; - int mval[2] = {x, y}; + int mval[2]; + + mval[0]= x; + mval[1]= y; VECCOPY(vecrot, t->center); if(t->flag & T_EDIT) { @@ -1669,7 +1675,7 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int /* overwrite initial values if operator supplied a non-null vector */ if (RNA_property_is_set(op->ptr, "value")) { - float values[4]; + float values[4]= {0}; /* incase value isn't length 4, avoid uninitialized memory */ RNA_float_get_array(op->ptr, "value", values); QUATCOPY(t->values, values); QUATCOPY(t->auto_values, values); @@ -1681,6 +1687,7 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int { RNA_float_get_array(op->ptr, "axis", t->axis); normalize_v3(t->axis); + copy_v3_v3(t->axis_orig, t->axis); } /* Constraint init from operator */ @@ -1919,14 +1926,13 @@ static void constraintTransLim(TransInfo *UNUSED(t), TransData *td) { if (td->con) { bConstraintTypeInfo *cti= get_constraint_typeinfo(CONSTRAINT_TYPE_LOCLIMIT); - bConstraintOb cob; + bConstraintOb cob= {0}; bConstraint *con; /* Make a temporary bConstraintOb for using these limit constraints * - they only care that cob->matrix is correctly set ;-) * - current space should be local */ - memset(&cob, 0, sizeof(bConstraintOb)); unit_m4(cob.matrix); VECCOPY(cob.matrix[3], td->loc); @@ -2084,14 +2090,13 @@ static void constraintSizeLim(TransInfo *t, TransData *td) { if (td->con && td->ext) { bConstraintTypeInfo *cti= get_constraint_typeinfo(CONSTRAINT_TYPE_SIZELIMIT); - bConstraintOb cob; + bConstraintOb cob= {0}; bConstraint *con; /* Make a temporary bConstraintOb for using these limit constraints * - they only care that cob->matrix is correctly set ;-) * - current space should be local */ - memset(&cob, 0, sizeof(bConstraintOb)); if ((td->flag & TD_SINGLESIZE) && !(t->con.mode & CON_APPLY)) { /* scale val and reset size */ return; // TODO: fix this case @@ -2839,6 +2844,8 @@ void initRotation(TransInfo *t) negate_v3_v3(t->axis, t->viewinv[2]); normalize_v3(t->axis); + + copy_v3_v3(t->axis_orig, t->axis); } static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short around) { @@ -3105,8 +3112,7 @@ int Rotation(TransInfo *t, short UNUSED(mval[2])) t->con.applyRot(t, NULL, t->axis, NULL); } else { /* reset axis if constraint is not set */ - negate_v3_v3(t->axis, t->viewinv[2]); - normalize_v3(t->axis); + copy_v3_v3(t->axis, t->axis_orig); } applySnapping(t, &final); diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 49ce4d2e0dd..b9f3382e9d3 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -314,6 +314,7 @@ typedef struct TransInfo { float values[4]; float auto_values[4]; float axis[3]; + float axis_orig[3]; /* TransCon can change 'axis', store the original value here */ void *view; struct ScrArea *sa; @@ -556,7 +557,6 @@ void flushTransSeq(TransInfo *t); /*********************** exported from transform_manipulator.c ********** */ int gimbal_axis(struct Object *ob, float gmat[][3]); /* return 0 when no gimbal for selection */ int calc_manipulator_stats(const struct bContext *C); -float get_drawsize(struct ARegion *ar, float *co); /*********************** TransData Creation and General Handling *********** */ void createTransData(struct bContext *C, TransInfo *t); diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 818e5c2df66..edae59fc00c 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -678,7 +678,7 @@ int count_set_pose_transflags(int *out_mode, short around, Object *ob) for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { bone = pchan->bone; - if ((bone->layer & arm->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) { + if (PBONE_VISIBLE(arm, bone)) { if ((bone->flag & BONE_SELECTED) && !(ob->proxy && pchan->bone->layer & arm->layer_protected)) bone->flag |= BONE_TRANSFORM; else @@ -3868,8 +3868,13 @@ static void SeqTransInfo(TransInfo *t, Sequence *seq, int *recursive, int *count #ifdef XXX_DURIAN_ANIM_TX_HACK /* hack */ if((seq->flag & SELECT)==0 && seq->type & SEQ_EFFECT) { - Sequence *seq_t[3] = {seq->seq1, seq->seq2, seq->seq3}; + Sequence *seq_t[3]; int i; + + seq_t[0]= seq->seq1; + seq_t[1]= seq->seq2; + seq_t[2]= seq->seq3; + for(i=0; i<3; i++) { if (seq_t[i] && ((seq_t[i])->flag & SELECT) && !(seq_t[i]->flag & SEQ_LOCK) && !(seq_t[i]->flag & (SEQ_LEFTSEL|SEQ_RIGHTSEL))) seq->flag |= SELECT; @@ -5080,6 +5085,17 @@ void special_aftertrans_update(bContext *C, TransInfo *t) if (C && recalcObPaths) { //ED_objects_clear_paths(C); // XXX for now, don't need to clear ED_objects_recalculate_paths(C, t->scene); + + /* recalculating the frame positions means we loose our original transform if its not auto-keyed [#24451] + * this hack re-applies it, which is annoying, only alternatives are... + * - dont recalc paths. + * - have an object_handle_update() which gives is the new transform without touching the objects. + * - only recalc paths on auto-keying. + * - ED_objects_recalculate_paths could backup/restore transforms. + * - re-apply the transform which is simplest in this case. (2 lines below) + */ + t->redraw |= TREDRAW_HARD; + transformApply(C, t); } } diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index cd40cb3bb25..22888a6b007 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -334,15 +334,13 @@ void recalcData(TransInfo *t) Scene *scene= t->scene; SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; - bAnimContext ac; + bAnimContext ac= {0}; ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; int filter; /* initialise relevant anim-context 'context' data from TransInfo data */ /* NOTE: sync this with the code in ANIM_animdata_get_context() */ - memset(&ac, 0, sizeof(bAnimContext)); - ac.scene= t->scene; ac.obact= OBACT; ac.sa= t->sa; @@ -1570,12 +1568,3 @@ void calculatePropRatio(TransInfo *t) strcpy(t->proptext, ""); } } - -float get_drawsize(ARegion *ar, float *co) -{ - RegionView3D *rv3d= ar->regiondata; - float vec[3]= {rv3d->persmat[0][3], rv3d->persmat[1][3], rv3d->persmat[2][3]}; - float size= rv3d->pixsize * 5; - size *= dot_v3v3(vec, co) + rv3d->persmat[3][3]; - return size; -} diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index f3afd5793bc..7ed569dab93 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -156,6 +156,37 @@ static void stats_editbone(RegionView3D *rv3d, EditBone *ebo) protectflag_to_drawflags(OB_LOCK_LOC|OB_LOCK_ROT|OB_LOCK_SCALE, &rv3d->twdrawflag); } +/* could move into BLI_math however this is only useful for display/editing purposes */ +static void axis_angle_to_gimbal_axis(float gmat[3][3], float axis[3], float angle) +{ + /* X/Y are arbitrary axies, most importantly Z is the axis of rotation */ + + float cross_vec[3]; + float quat[4]; + + /* this is an un-scientific method to get a vector to cross with + * XYZ intentionally YZX */ + cross_vec[0]= axis[1]; + cross_vec[1]= axis[2]; + cross_vec[2]= axis[0]; + + /* X-axis */ + cross_v3_v3v3(gmat[0], cross_vec, axis); + normalize_v3(gmat[0]); + axis_angle_to_quat(quat, axis, angle); + mul_qt_v3(quat, gmat[0]); + + /* Y-axis */ + axis_angle_to_quat(quat, axis, M_PI/2.0); + copy_v3_v3(gmat[1], gmat[0]); + mul_qt_v3(quat, gmat[1]); + + /* Z-axis */ + copy_v3_v3(gmat[2], axis); + + normalize_m3(gmat); +} + static int test_rotmode_euler(short rotmode) { @@ -169,10 +200,18 @@ int gimbal_axis(Object *ob, float gmat[][3]) { bPoseChannel *pchan= get_active_posechannel(ob); - if(pchan && test_rotmode_euler(pchan->rotmode)) { + if(pchan) { float mat[3][3], tmat[3][3], obmat[3][3]; + if(test_rotmode_euler(pchan->rotmode)) { + eulO_to_gimbal_axis(mat, pchan->eul, pchan->rotmode); + } + else if (pchan->rotmode == ROT_MODE_AXISANGLE) { + axis_angle_to_gimbal_axis(mat, pchan->rotAxis, pchan->rotAngle); + } + else { /* quat */ + return 0; + } - eulO_to_gimbal_axis(mat, pchan->eul, pchan->rotmode); /* apply bone transformation */ mul_m3_m3m3(tmat, pchan->bone->bone_mat, mat); @@ -201,24 +240,23 @@ int gimbal_axis(Object *ob, float gmat[][3]) } else { if(test_rotmode_euler(ob->rotmode)) { - - - if (ob->parent) - { - float parent_mat[3][3], amat[3][3]; - - eulO_to_gimbal_axis(amat, ob->rot, ob->rotmode); - copy_m3_m4(parent_mat, ob->parent->obmat); - normalize_m3(parent_mat); - mul_m3_m3m3(gmat, parent_mat, amat); - return 1; - } - else - { - eulO_to_gimbal_axis(gmat, ob->rot, ob->rotmode); - return 1; - } + eulO_to_gimbal_axis(gmat, ob->rot, ob->rotmode); } + else if(ob->rotmode == ROT_MODE_AXISANGLE) { + axis_angle_to_gimbal_axis(gmat, ob->rotAxis, ob->rotAngle); + } + else { /* quat */ + return 0; + } + + if (ob->parent) + { + float parent_mat[3][3]; + copy_m3_m4(parent_mat, ob->parent->obmat); + normalize_m3(parent_mat); + mul_m3_m3m3(gmat, parent_mat, gmat); + } + return 1; } } @@ -278,7 +316,7 @@ int calc_manipulator_stats(const bContext *C) bArmature *arm= obedit->data; EditBone *ebo; for (ebo= arm->edbo->first; ebo; ebo=ebo->next){ - if(ebo->layer & arm->layer && !(ebo->flag & BONE_HIDDEN_A)) { + if(EBONE_VISIBLE(arm, ebo)) { if (ebo->flag & BONE_TIPSEL) { calc_tw_center(scene, ebo->tail); totsel++; @@ -405,7 +443,7 @@ int calc_manipulator_stats(const bContext *C) mul_m4_v3(ob->obmat, scene->twmax); } } - else if(ob && (ob->mode & (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT))) { + else if(ob && (ob->mode & OB_MODE_ALL_PAINT)) { ; } else if(ob && ob->mode & OB_MODE_PARTICLE_EDIT) { @@ -1363,17 +1401,6 @@ static void draw_manipulator_rotate_cyl(View3D *v3d, RegionView3D *rv3d, int mov /* ********************************************* */ -static float get_manipulator_drawsize(ARegion *ar) -{ - RegionView3D *rv3d= ar->regiondata; - float size = get_drawsize(ar, rv3d->twmat[3]); - - size*= (float)U.tw_size; - - return size; -} - - /* main call, does calc centers & orientation too */ /* uses global G.moving */ static int drawflags= 0xFFFF; // only for the calls below, belongs in scene...? @@ -1421,7 +1448,7 @@ void BIF_draw_manipulator(const bContext *C) break; } - mul_mat3_m4_fl(rv3d->twmat, get_manipulator_drawsize(ar)); + mul_mat3_m4_fl(rv3d->twmat, view3d_pixel_size(rv3d, rv3d->twmat[3]) * U.tw_size * 5.0f); } test_manipulator_axis(C); diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index 16519bdf647..28ff095e706 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -86,33 +86,23 @@ TransformOrientation* findOrientationName(bContext *C, char *name) return NULL; } -void uniqueOrientationName(bContext *C, char *name) +static void uniqueOrientationName(bContext *C, char *name) { if (findOrientationName(C, name) != NULL) { - char tempname[64]; - int number; - char *dot; - - - number = strlen(name); - - if (number && isdigit(name[number-1])) - { - dot = strrchr(name, '.'); // last occurrence - if (dot) - *dot=0; - } - - for (number = 1; number <= 999; number++) - { - sprintf(tempname, "%s.%03d", name, number); - if (findOrientationName(C, tempname) == NULL) - { - BLI_strncpy(name, tempname, 32); - break; + /* note: this block is used in other places, when changing logic apply to all others, search this message */ + char tempname[sizeof(((TransformOrientation *)NULL)->name)]; + char left[sizeof(((TransformOrientation *)NULL)->name)]; + int number; + int len= BLI_split_name_num(left, &number, name); + do { /* nested while loop looks bad but likely it wont run most times */ + while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) { + if(len > 0) left[--len]= '\0'; /* word too long */ + else number= 0; /* reset, must be a massive number */ } - } + } while(number++, findOrientationName(C, tempname)); + + BLI_strncpy(name, tempname, sizeof(tempname)); } } @@ -893,7 +883,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], result = ORIENTATION_EDGE; } } - else if(ob && (ob->mode & (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT|OB_MODE_PARTICLE_EDIT))) + else if(ob && (ob->mode & (OB_MODE_ALL_PAINT|OB_MODE_PARTICLE_EDIT))) { } else { diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index adaaf7c9de6..06a2db527fd 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -146,16 +146,16 @@ void drawSnapping(const struct bContext *C, TransInfo *t) glDisable(GL_DEPTH_TEST); - size = 0.5f * UI_GetThemeValuef(TH_VERTEX_SIZE); + size = 2.5f * UI_GetThemeValuef(TH_VERTEX_SIZE); invert_m4_m4(imat, rv3d->viewmat); for (p = t->tsnap.points.first; p; p = p->next) { - drawcircball(GL_LINE_LOOP, p->co, size * get_drawsize(t->ar, p->co), imat); + drawcircball(GL_LINE_LOOP, p->co, view3d_pixel_size(rv3d, p->co) * size, imat); } if (t->tsnap.status & POINT_INIT) { - drawcircball(GL_LINE_LOOP, t->tsnap.snapPoint, size * get_drawsize(t->ar, t->tsnap.snapPoint), imat); + drawcircball(GL_LINE_LOOP, t->tsnap.snapPoint, view3d_pixel_size(rv3d, t->tsnap.snapPoint) * size, imat); } /* draw normal if needed */ diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c index a4f661e9511..37a3a65f170 100644 --- a/source/blender/editors/util/undo.c +++ b/source/blender/editors/util/undo.c @@ -156,7 +156,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname) if(do_glob_undo) { if(U.uiflag & USER_GLOBALUNDO) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // XXX BPY_scripts_clear_pyobjects(); #endif if(undoname) diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index d311733e945..d8c618d4d07 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -3182,6 +3182,7 @@ void ED_operatortypes_uvedit(void) void ED_keymap_uvedit(wmKeyConfig *keyconf) { wmKeyMap *keymap; + wmKeyMapItem *kmi; keymap= WM_keymap_find(keyconf, "UV Editor", 0, 0); keymap->poll= ED_operator_uvedit; @@ -3234,6 +3235,19 @@ void ED_keymap_uvedit(wmKeyConfig *keyconf) WM_keymap_add_menu(keymap, "IMAGE_MT_uvs_snap", SKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_menu(keymap, "IMAGE_MT_uvs_select_mode", TABKEY, KM_PRESS, KM_CTRL, 0); + /* pivot */ + kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", COMMAKEY, KM_PRESS, 0, 0); + RNA_string_set(kmi->ptr, "data_path", "space_data.uv_editor.pivot_point"); + RNA_string_set(kmi->ptr, "value", "CENTER"); + + kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", COMMAKEY, KM_PRESS, KM_CTRL, 0); + RNA_string_set(kmi->ptr, "data_path", "space_data.uv_editor.pivot_point"); + RNA_string_set(kmi->ptr, "value", "MEDIAN"); + + kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", PERIODKEY, KM_PRESS, 0, 0); + RNA_string_set(kmi->ptr, "data_path", "space_data.uv_editor.pivot_point"); + RNA_string_set(kmi->ptr, "value", "CURSOR"); + ED_object_generic_keymap(keyconf, keymap, 2); transform_keymap_for_space(keyconf, keymap, SPACE_IMAGE); diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 02a43abf098..a2bfddd96fb 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -28,7 +28,6 @@ SET(INC . ../blenlib ../blenkernel - ../include ../imbuf ../makesdna ../makesrna diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c index 90c33f68c65..7d2006a3aab 100644 --- a/source/blender/gpu/intern/gpu_buffers.c +++ b/source/blender/gpu/intern/gpu_buffers.c @@ -491,7 +491,11 @@ void *GPU_build_mesh_buffers(GHash *map, MVert *mvert, MFace *mface, if(tri_data) { for(i = 0; i < totface; ++i) { MFace *f = mface + face_indices[i]; - int v[3] = {f->v1, f->v2, f->v3}; + int v[3]; + + v[0]= f->v1; + v[1]= f->v2; + v[2]= f->v3; for(j = 0; j < (f->v4 ? 2 : 1); ++j) { for(k = 0; k < 3; ++k) { diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index a31ec950711..d7aa7c3377d 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -629,10 +629,8 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la } else { if(lamp->type == LA_AREA) { - float area[4][4], areasize; + float area[4][4]= {{0.0f}}, areasize= 0.0f; - memset(&area, 0, sizeof(area)); - memset(&areasize, 0, sizeof(areasize)); mat->dynproperty |= DYN_LAMP_VEC|DYN_LAMP_CO; GPU_link(mat, "shade_inp_area", GPU_builtin(GPU_VIEW_POSITION), GPU_dynamic_uniform(lamp->dynco), GPU_dynamic_uniform(lamp->dynvec), vn, GPU_uniform((float*)area), GPU_uniform(&areasize), GPU_uniform(&lamp->k), &inp); diff --git a/source/blender/ikplugin/CMakeLists.txt b/source/blender/ikplugin/CMakeLists.txt index 61d5ff4f7fe..1c1cc27611a 100644 --- a/source/blender/ikplugin/CMakeLists.txt +++ b/source/blender/ikplugin/CMakeLists.txt @@ -28,7 +28,6 @@ SET(INC ../blenlib ../makesdna ../blenkernel - ../include ../ikplugin ../../../intern/guardedalloc ../../../intern/iksolver/extern diff --git a/source/blender/imbuf/intern/anim_movie.c b/source/blender/imbuf/intern/anim_movie.c index 8df0d69bcfa..421ef08dc25 100644 --- a/source/blender/imbuf/intern/anim_movie.c +++ b/source/blender/imbuf/intern/anim_movie.c @@ -839,7 +839,15 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) { } } +/* disable seek_by_bytes for now, since bitrates are guessed wrong! + also: MPEG2TS-seeking was fixed in later versions of ffmpeg, so problem + is somewhat fixed by now (until we add correct timecode management code...) +*/ +#if 0 seek_by_bytes = !!(anim->pFormatCtx->iformat->flags & AVFMT_TS_DISCONT); +#else + seek_by_bytes = FALSE; +#endif if (position != anim->curposition + 1) { #ifdef FFMPEG_OLD_FRAME_RATE @@ -851,12 +859,9 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) { av_q2d(anim->pFormatCtx->streams[anim->videoStream] ->r_frame_rate); #endif - double time_base = - av_q2d(anim->pFormatCtx->streams[anim->videoStream] - ->time_base); + double pts_time_base = av_q2d(anim->pFormatCtx->streams[anim->videoStream]->time_base); long long pos; - long long st_time = anim->pFormatCtx - ->streams[anim->videoStream]->start_time; + long long st_time = anim->pFormatCtx->start_time; int ret; if (seek_by_bytes) { @@ -876,7 +881,7 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) { } if (st_time != AV_NOPTS_VALUE) { - pos += st_time * AV_TIME_BASE * time_base; + pos += st_time; } } @@ -891,9 +896,9 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) { } pts_to_search = (long long) - (((double) position) / time_base / frame_rate); + (((double) position) / pts_time_base / frame_rate); if (st_time != AV_NOPTS_VALUE) { - pts_to_search += st_time; + pts_to_search += st_time / pts_time_base/ AV_TIME_BASE; } pos_found = 0; diff --git a/source/blender/imbuf/intern/cache.c b/source/blender/imbuf/intern/cache.c index 77e01d8ebef..5650a4f9b94 100644 --- a/source/blender/imbuf/intern/cache.c +++ b/source/blender/imbuf/intern/cache.c @@ -82,6 +82,8 @@ typedef struct ImGlobalTileCache { int totthread; ThreadMutex mutex; + + int initialized; } ImGlobalTileCache; static ImGlobalTileCache GLOBAL_CACHE; @@ -203,6 +205,8 @@ void imb_tile_cache_init(void) /* initialize for one thread, for places that access textures outside of rendering (displace modifier, painting, ..) */ IMB_tile_cache_params(0, 0); + + GLOBAL_CACHE.initialized = 1; } void imb_tile_cache_exit(void) @@ -210,19 +214,23 @@ void imb_tile_cache_exit(void) ImGlobalTile *gtile; int a; - for(gtile=GLOBAL_CACHE.tiles.first; gtile; gtile=gtile->next) - imb_global_cache_tile_unload(gtile); + if(GLOBAL_CACHE.initialized) { + for(gtile=GLOBAL_CACHE.tiles.first; gtile; gtile=gtile->next) + imb_global_cache_tile_unload(gtile); - for(a=0; ax * ibuf->y; i > 0; i--, to+=4, tof+=4) { const float d = (BLI_frand()-0.5)*dither; - const float col[4] = {d+tof[0], d+tof[1], d+tof[2], d+tof[3]}; + float col[4]; + + col[0]= d + tof[0]; + col[1]= d + tof[1]; + col[2]= d + tof[2]; + col[3]= d + tof[3]; + to[0] = FTOCHAR(col[0]); to[1] = FTOCHAR(col[1]); to[2] = FTOCHAR(col[2]); diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h index d9f0f20ad52..caba9815a8d 100644 --- a/source/blender/makesdna/DNA_action_types.h +++ b/source/blender/makesdna/DNA_action_types.h @@ -203,12 +203,10 @@ typedef struct bPoseChannel { struct bPoseChannel *child; /* set on read file or rebuild pose, the 'ik' child, for b-bones */ struct ListBase iktree; /* only while evaluating pose */ - /* only while deform, stores precalculated b_bone deform mats, - dual quaternions */ - void *b_bone_mats; - void *dual_quat; - void *b_bone_dual_quats; - + bMotionPath *mpath; /* motion path cache for this bone */ + struct Object *custom; /* draws custom object instead of default bone shape */ + struct bPoseChannel *custom_tx; /* odd feature, display with another bones transform. needed in rare cases for advanced rigs, since the alternative is highly complicated - campbell */ + /* transforms - written in by actions or transform */ float loc[3]; float size[3]; @@ -234,9 +232,6 @@ typedef struct bPoseChannel { float iklinweight; /* weight of joint stretch constraint */ float *path; /* totpath x 3 x float */ // XXX depreceated... old animation system (armature only viz) - bMotionPath *mpath; /* motion path cache for this bone */ - struct Object *custom; /* draws custom object instead of default bone shape */ - struct bPoseChannel *custom_tx; /* odd feature, display with another bones transform. needed in rare cases for advanced rigs, since the alternative is highly complicated - campbell */ } bPoseChannel; diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index 0708698c40c..30b2503c677 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -548,12 +548,8 @@ typedef struct MeshDeformModifierData { } MeshDeformModifierData; typedef enum { - eParticleSystemFlag_Loaded = (1<<0), - eParticleSystemFlag_Pars = (1<<1), - eParticleSystemFlag_FromCurve = (1<<2), - eParticleSystemFlag_DM_changed = (1<<3), - eParticleSystemFlag_Disabled = (1<<4), - eParticleSystemFlag_psys_updated = (1<<5), + eParticleSystemFlag_Pars = (1<<0), + eParticleSystemFlag_psys_updated = (1<<1), } ParticleSystemModifierFlag; typedef struct ParticleSystemModifierData { diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index 60b4f6a51b6..a5e8e1545b0 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -557,6 +557,9 @@ typedef enum ObjectMode { OB_MODE_POSE = 64 } ObjectMode; +/* any mode where the brush system is used */ +#define OB_MODE_ALL_PAINT (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT) + #define MAX_DUPLI_RECUR 8 #ifdef __cplusplus diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 0e2eea0b942..0ca31983ac5 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -157,7 +157,7 @@ typedef struct SpaceSeq { } SpaceSeq; typedef struct FileSelectParams { - char title[24]; /* title, also used for the text of the execute button */ + char title[32]; /* title, also used for the text of the execute button */ char dir[240]; /* directory */ char file[80]; /* file */ char renamefile[80]; @@ -241,34 +241,30 @@ typedef struct SpaceImage { ListBase regionbase; /* storage of regions for inactive spaces */ int spacetype; - float blockscale; - short blockhandler[8]; - + int flag; + struct Image *image; struct ImageUser iuser; + struct CurveMapping *cumap; - struct CurveMapping *cumap; - short menunr, imanr, pad2; + struct Scopes scopes; /* histogram waveform and vectorscope */ + struct Histogram sample_line_hist; /* sample line histogram */ + + struct bGPdata *gpd; /* grease pencil data */ + + float cursor[2]; /* UV editor 2d cursor */ + float xof, yof; /* user defined offset, image is centered */ + float zoom; /* user defined zoom level */ + float centx, centy; /* storage for offset while render drawing */ + short curtile; /* the currently active tile of the image when tile is enabled, is kept in sync with the active faces tile */ - int flag; - short imtypenr, lock; - short pin, pad3; + short imtypenr; + short lock; + short pin; char dt_uv; /* UV draw type */ char sticky; /* sticky selection type */ char dt_uvstretch; char around; - float cursor[2]; /* UV editor 2d cursor */ - - float xof, yof; /* user defined offset, image is centered */ - float zoom, pad4; /* user defined zoom level */ - float centx, centy; /* storage for offset while render drawing */ - - struct bGPdata *gpd; /* grease pencil data */ - - struct Scopes scopes; /* histogram waveform and vectorscope */ - - struct Histogram sample_line_hist; /* sample line histogram */ - } SpaceImage; typedef struct SpaceNla { diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index 9de5ad198a6..307e111abe6 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -160,7 +160,7 @@ typedef struct View3D { * The drawing mode for the 3d display. Set to OB_WIRE, OB_SOLID, * OB_SHADED or OB_TEXTURE */ short drawtype; - short pad2; + short ob_centre_cursor; /* optional bool for 3d cursor to define center */ short scenelock, around, pad3; short flag, flag2; diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 58e4101421f..10c1946416d 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -698,6 +698,7 @@ int RNA_property_animated(PointerRNA *ptr, PropertyRNA *prop); void RNA_property_update(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop); void RNA_property_update_main(struct Main *bmain, struct Scene *scene, PointerRNA *ptr, PropertyRNA *prop); +int RNA_property_update_check(struct PropertyRNA *prop); /* Property Data */ diff --git a/source/blender/makesrna/RNA_define.h b/source/blender/makesrna/RNA_define.h index 16ca718e335..dc31573e8dd 100644 --- a/source/blender/makesrna/RNA_define.h +++ b/source/blender/makesrna/RNA_define.h @@ -132,6 +132,7 @@ void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, void RNA_def_property_flag(PropertyRNA *prop, int flag); void RNA_def_property_clear_flag(PropertyRNA *prop, int flag); +void RNA_def_property_subtype(PropertyRNA *prop, PropertySubType subtype); void RNA_def_property_array(PropertyRNA *prop, int length); void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, int length[]); void RNA_def_property_range(PropertyRNA *prop, double min, double max); diff --git a/source/blender/makesrna/SConscript b/source/blender/makesrna/SConscript index ef2035cb5a2..e32f453b67e 100644 --- a/source/blender/makesrna/SConscript +++ b/source/blender/makesrna/SConscript @@ -47,13 +47,13 @@ if env['WITH_BF_LCMS']: incs += ' ' + env['BF_LCMS_INC'] if env['WITH_BF_GAMEENGINE']: - defs.append('GAMEBLENDER=1') + defs.append('WITH_GAMEENGINE') if env['BF_UNIT_TEST']: defs.append('UNIT_TEST') -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') if env['OURPLATFORM'] == 'linux2': cflags='-pthread' diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index 50704b4c45a..d430fd405fc 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -27,12 +27,16 @@ # Generated code has some unused vars we can ignore. REMOVE_STRICT_FLAGS() +MESSAGE(STATUS "Configuring makesrna") + FILE(GLOB DEFSRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.c") FILE(GLOB APISRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*_api.c") LIST(REMOVE_ITEM DEFSRC rna_access.c rna_define.c makesrna.c) LIST(REMOVE_ITEM DEFSRC ${APISRC}) STRING(REGEX REPLACE "rna_([a-zA-Z0-9_-]*).c" "${CMAKE_CURRENT_BINARY_DIR}/rna_\\1_gen.c" GENSRC "${DEFSRC}") +SET_SOURCE_FILES_PROPERTIES(GENSRC PROPERTIES GENERATED true) + SET(SRC makesrna.c @@ -62,16 +66,16 @@ INCLUDE_DIRECTORIES( FILE(GLOB INC_FILES ../*.h ../../makesdna/*.h) -IF(NOT WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) -ENDIF(NOT WITH_PYTHON) +IF(WITH_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) +ENDIF(WITH_PYTHON) IF(WIN32) LIST(APPEND INC ${PTHREADS_INC}) ENDIF(WIN32) IF(WITH_GAMEENGINE) - ADD_DEFINITIONS(-DGAMEBLENDER) + ADD_DEFINITIONS(-DWITH_GAMEENGINE) ENDIF(WITH_GAMEENGINE) IF(WITH_IMAGE_OPENEXR) @@ -148,5 +152,3 @@ ADD_CUSTOM_COMMAND( # Build bf_rna SET(SRC rna_access.c ${GENSRC}) BLENDERLIB(bf_rna "${SRC}" "${INC}") - -MESSAGE(STATUS "Configuring makesrna") diff --git a/source/blender/makesrna/intern/SConscript b/source/blender/makesrna/intern/SConscript index ecee3f94796..b8e30bcfe98 100644 --- a/source/blender/makesrna/intern/SConscript +++ b/source/blender/makesrna/intern/SConscript @@ -6,7 +6,7 @@ def normpath(path): return os.path.abspath(os.path.normpath(path)) Import ('env') -cflags = ['-Wall'] +cflags = [] #['-Wall'] defines = [] root_build_dir=normpath(env['BF_BUILDDIR']) @@ -68,7 +68,7 @@ if env['WITH_BF_LCMS']: defs.append('WITH_LCMS') if env['WITH_BF_GAMEENGINE']: - defs.append('GAMEBLENDER=1') + defs.append('WITH_GAMEENGINE') if env['WITH_BF_FFTW3']: defs.append('FFTW3=1') @@ -85,8 +85,8 @@ if env['WITH_BF_JACK']: if env['BF_UNIT_TEST']: defs.append('UNIT_TEST') -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') if env['OURPLATFORM'] == 'linux2': cflags='-pthread' diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 6cb5858648a..fe82c6e06e1 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -101,11 +101,10 @@ void RNA_main_pointer_create(struct Main *main, PointerRNA *r_ptr) void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr) { - PointerRNA tmp; StructRNA *type, *idtype= NULL; if(id) { - memset(&tmp, 0, sizeof(tmp)); + PointerRNA tmp= {{0}}; tmp.data= id; idtype= rna_ID_refine(&tmp); @@ -126,11 +125,10 @@ void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr) void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr) { - PointerRNA tmp; StructRNA *idtype= NULL; if(id) { - memset(&tmp, 0, sizeof(tmp)); + PointerRNA tmp= {{0}}; tmp.data= id; idtype= rna_ID_refine(&tmp); } @@ -1268,6 +1266,14 @@ static void rna_property_update(bContext *C, Main *bmain, Scene *scene, PointerR } +/* must keep in sync with 'rna_property_update' + * note, its possible this returns a false positive in the case of PROP_CONTEXT_UPDATE + * but this isnt likely to be a performance problem. */ +int RNA_property_update_check(PropertyRNA *prop) +{ + return (prop->magic != RNA_MAGIC || prop->update || prop->noteflag); +} + void RNA_property_update(bContext *C, PointerRNA *ptr, PropertyRNA *prop) { rna_property_update(C, CTX_data_main(C), CTX_data_scene(C), ptr, prop); @@ -1966,9 +1972,7 @@ PointerRNA RNA_property_pointer_get(PointerRNA *ptr, PropertyRNA *prop) return RNA_property_pointer_get(ptr, prop); } else { - PointerRNA result; - - memset(&result, 0, sizeof(result)); + PointerRNA result= {{0}}; return result; } } diff --git a/source/blender/makesrna/intern/rna_actuator.c b/source/blender/makesrna/intern/rna_actuator.c index a4becb87e28..49df68d6681 100644 --- a/source/blender/makesrna/intern/rna_actuator.c +++ b/source/blender/makesrna/intern/rna_actuator.c @@ -41,7 +41,7 @@ EnumPropertyItem actuator_type_items[] ={ {ACT_CAMERA, "CAMERA", 0, "Camera", ""}, {ACT_CONSTRAINT, "CONSTRAINT", 0, "Constraint", ""}, {ACT_EDIT_OBJECT, "EDIT_OBJECT", 0, "Edit Object", ""}, - {ACT_IPO, "F-Curve", 0, "F-Curve", ""}, + {ACT_IPO, "FCURVE", 0, "F-Curve", ""}, {ACT_2DFILTER, "FILTER_2D", 0, "Filter 2D", ""}, {ACT_GAME, "GAME", 0, "Game", ""}, {ACT_MESSAGE, "MESSAGE", 0, "Message", ""}, @@ -1384,16 +1384,16 @@ static void rna_def_random_actuator(BlenderRNA *brna) PropertyRNA *prop; static EnumPropertyItem prop_distribution_items[] ={ - {ACT_RANDOM_BOOL_CONST, "RESTART", 0, "Bool Constant", ""}, - {ACT_RANDOM_BOOL_UNIFORM, "SET", 0, "Bool Uniform", ""}, - {ACT_RANDOM_BOOL_BERNOUILLI, "CAMERA", 0, "Bool Bernoulli", ""}, - {ACT_RANDOM_INT_CONST, "ADDFRONT", 0, "Int Constant", ""}, - {ACT_RANDOM_INT_UNIFORM, "ADDBACK", 0, "Int Uniform", ""}, - {ACT_RANDOM_INT_POISSON, "REMOVE", 0, "Int Poisson", ""}, - {ACT_RANDOM_FLOAT_CONST, "SUSPEND", 0, "Float Constant", ""}, - {ACT_RANDOM_FLOAT_UNIFORM, "RESUME", 0, "Float Uniform", ""}, - {ACT_RANDOM_FLOAT_NORMAL, "RESUME", 0, "Float Normal", ""}, - {ACT_RANDOM_FLOAT_NEGATIVE_EXPONENTIAL, "RESUME", 0, "Float Neg. Exp.", ""}, + {ACT_RANDOM_BOOL_CONST, "BOOL_CONSTANT", 0, "Bool Constant", ""}, + {ACT_RANDOM_BOOL_UNIFORM, "BOOL_UNIFORM", 0, "Bool Uniform", ""}, + {ACT_RANDOM_BOOL_BERNOUILLI, "BOOL_BERNOUILLI", 0, "Bool Bernouilli", ""}, + {ACT_RANDOM_INT_CONST, "INT_CONSTANT", 0, "Int Constant", ""}, + {ACT_RANDOM_INT_UNIFORM, "INT_UNIFORM", 0, "Int Uniform", ""}, + {ACT_RANDOM_INT_POISSON, "INT_POISSON", 0, "Int Poisson", ""}, + {ACT_RANDOM_FLOAT_CONST, "FLOAT_CONSTANT", 0, "Float Constant", ""}, + {ACT_RANDOM_FLOAT_UNIFORM, "FLOAT_UNIFORM", 0, "Float Uniform", ""}, + {ACT_RANDOM_FLOAT_NORMAL, "FLOAT_NORMAL", 0, "Float Normal", ""}, + {ACT_RANDOM_FLOAT_NEGATIVE_EXPONENTIAL, "FLOAT_NEGATIVE_EXPONENTIAL", 0, "Float Neg. Exp.", ""}, {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "RandomActuator", "Actuator"); diff --git a/source/blender/makesrna/intern/rna_controller.c b/source/blender/makesrna/intern/rna_controller.c index ee0707ad0ae..73ac46e8e78 100644 --- a/source/blender/makesrna/intern/rna_controller.c +++ b/source/blender/makesrna/intern/rna_controller.c @@ -207,7 +207,6 @@ void RNA_def_controller(BlenderRNA *brna) prop= RNA_def_property(srna, "expression", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "str"); - RNA_def_property_string_maxlength(prop, 127); RNA_def_property_ui_text(prop, "Expression", ""); RNA_def_property_update(prop, NC_LOGIC, NULL); diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c index 7983b8f8a7f..c7802de9ebb 100644 --- a/source/blender/makesrna/intern/rna_curve.c +++ b/source/blender/makesrna/intern/rna_curve.c @@ -844,7 +844,7 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna) /* strings */ prop= RNA_def_property(srna, "family", PROP_STRING, PROP_NONE); - RNA_def_property_string_maxlength(prop, 21); + RNA_def_property_string_maxlength(prop, (sizeof((ID *)NULL)->name)-2); RNA_def_property_ui_text(prop, "Object Font", "Use Blender Objects as font characters. Give font objects a common name followed by the character it represents, eg. familya, familyb etc, and turn on Verts Duplication"); RNA_def_property_update(prop, 0, "rna_Curve_update_data"); diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index 0a8e0bad7f0..85f31e245d4 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -1005,6 +1005,11 @@ void RNA_def_property_clear_flag(PropertyRNA *prop, int flag) prop->flag &= ~flag; } +void RNA_def_property_subtype(PropertyRNA *prop, PropertySubType subtype) +{ + prop->subtype= subtype; +} + void RNA_def_property_array(PropertyRNA *prop, int length) { StructRNA *srna= DefRNA.laststruct; @@ -2235,8 +2240,11 @@ PropertyRNA *RNA_def_float_matrix(StructOrFunctionRNA *cont_, const char *identi { ContainerRNA *cont= cont_; PropertyRNA *prop; - int length[2]= {rows, columns}; - + int length[2]; + + length[0]= rows; + length[1]= columns; + prop= RNA_def_property(cont, identifier, PROP_FLOAT, PROP_MATRIX); RNA_def_property_multi_array(prop, 2, length); if(default_value) RNA_def_property_float_array_default(prop, default_value); diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c index 92c860a8074..62e7b516e9e 100644 --- a/source/blender/makesrna/intern/rna_image.c +++ b/source/blender/makesrna/intern/rna_image.c @@ -171,9 +171,19 @@ static void rna_Image_file_format_set(PointerRNA *ptr, int value) { Image *image= (Image*)ptr->data; if(BKE_imtype_is_movie(value) == 0) { /* should be able to throw an error here */ - ImBuf *ibuf= BKE_image_get_ibuf(image, NULL); + ImBuf *ibuf; + int ftype= BKE_imtype_to_ftype(value); + + /* + ibuf= BKE_image_get_ibuf(image, NULL); if(ibuf) - ibuf->ftype= BKE_imtype_to_ftype(value); + ibuf->ftype= ftype; + */ + + /* to be safe change all buffer file types */ + for(ibuf= image->ibufs.first; ibuf; ibuf= ibuf->next) { + ibuf->ftype= ftype; + } } } diff --git a/source/blender/makesrna/intern/rna_image_api.c b/source/blender/makesrna/intern/rna_image_api.c index 74d61101273..6e495c5db8e 100644 --- a/source/blender/makesrna/intern/rna_image_api.c +++ b/source/blender/makesrna/intern/rna_image_api.c @@ -73,9 +73,17 @@ static void rna_Image_save_render(Image *image, bContext *C, ReportList *reports if (ibuf == NULL) { BKE_reportf(reports, RPT_ERROR, "Couldn't acquire buffer from image"); } - - if (!BKE_write_ibuf(NULL, ibuf, path, scene->r.imtype, scene->r.subimtype, scene->r.quality)) { - BKE_reportf(reports, RPT_ERROR, "Couldn't write image: %s", path); + else { + /* temp swap out the color */ + const unsigned char imb_depth_back= ibuf->depth; + const float dither_back= ibuf->dither; + ibuf->depth= scene->r.planes; + ibuf->dither= scene->r.dither_intensity; + if (!BKE_write_ibuf(NULL, ibuf, path, scene->r.imtype, scene->r.subimtype, scene->r.quality)) { + BKE_reportf(reports, RPT_ERROR, "Couldn't write image: %s", path); + } + ibuf->depth= imb_depth_back; + ibuf->dither= dither_back; } BKE_image_release_ibuf(image, lock); diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index bf4a958eeb4..8557f115737 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -695,8 +695,8 @@ static void rna_def_material_colors(StructRNA *srna) {MA_RAMP_SAT, "SATURATION", 0, "Saturation", ""}, {MA_RAMP_VAL, "VALUE", 0, "Value", ""}, {MA_RAMP_COLOR, "COLOR", 0, "Color", ""}, - {MA_RAMP_SOFT, "SOFT LIGHT", 0, "Soft Light", ""}, - {MA_RAMP_LINEAR, "LINEAR LIGHT", 0, "Linear Light", ""}, + {MA_RAMP_SOFT, "SOFT_LIGHT", 0, "Soft Light", ""}, + {MA_RAMP_LINEAR, "LINEAR_LIGHT", 0, "Linear Light", ""}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem prop_ramp_input_items[] = { diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index e83a17cc277..7fc07d6c193 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -811,7 +811,7 @@ static void rna_def_modifier_decimate(BlenderRNA *brna) RNA_def_struct_sdna(srna, "DecimateModifierData"); RNA_def_struct_ui_icon(srna, ICON_MOD_DECIM); - prop= RNA_def_property(srna, "ratio", PROP_FLOAT, PROP_PERCENTAGE); + prop= RNA_def_property(srna, "ratio", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "percent"); RNA_def_property_range(prop, 0, 1); RNA_def_property_ui_range(prop, 0, 1, 1, 2); diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index c29ad0d9adf..599aa4abc91 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -143,7 +143,8 @@ static void rna_Object_internal_update(Main *bmain, Scene *scene, PointerRNA *pt static void rna_Object_matrix_world_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - object_apply_mat4(ptr->id.data, ((Object *)ptr->id.data)->obmat); + /* dont use compat so we get pradictable rotation */ + object_apply_mat4(ptr->id.data, ((Object *)ptr->id.data)->obmat, FALSE); rna_Object_internal_update(bmain, scene, ptr); } @@ -177,7 +178,8 @@ static void rna_Object_matrix_local_set(PointerRNA *ptr, const float values[16]) copy_m4_m4(ob->obmat, (float(*)[4])values); } - object_apply_mat4(ob, ob->obmat); + /* dont use compat so we get pradictable rotation */ + object_apply_mat4(ob, ob->obmat, FALSE); } void rna_Object_internal_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c index e4a3be023ca..b4a132dd1ec 100644 --- a/source/blender/makesrna/intern/rna_pose.c +++ b/source/blender/makesrna/intern/rna_pose.c @@ -550,7 +550,7 @@ static void rna_PoseChannel_matrix_local_get(PointerRNA *ptr, float *values) static void rna_PoseChannel_matrix_local_set(PointerRNA *ptr, const float *values) { bPoseChannel *pchan= (bPoseChannel*)ptr->data; - pchan_apply_mat4(pchan, (float (*)[4])values); + pchan_apply_mat4(pchan, (float (*)[4])values, FALSE); /* no compat for pradictable result */ } #else diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index e6b86ae8766..ae965b237cd 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -47,7 +47,7 @@ static RenderEngineType internal_render_type = { NULL, NULL, "BLENDER_RENDER", "Blender Render", RE_INTERNAL, NULL, {NULL, NULL, NULL, NULL}}; -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE static RenderEngineType internal_game_type = { NULL, NULL, "BLENDER_GAME", "Blender Game", RE_INTERNAL|RE_GAME, NULL, {NULL, NULL, NULL, NULL}}; #endif @@ -57,7 +57,7 @@ ListBase R_engines = {NULL, NULL}; void RE_engines_init() { BLI_addtail(&R_engines, &internal_render_type); -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE BLI_addtail(&R_engines, &internal_game_type); #endif } diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c index 800922ceba0..4b5edb5c6e9 100644 --- a/source/blender/makesrna/intern/rna_scene_api.c +++ b/source/blender/makesrna/intern/rna_scene_api.c @@ -96,8 +96,9 @@ void RNA_api_scene_render(StructRNA *srna) func= RNA_def_function(srna, "frame_path", "rna_SceneRender_get_frame_path"); RNA_def_function_ui_description(func, "Return the absolute path to the filename to be written for a given frame."); parm= RNA_def_int(func, "frame", INT_MIN, INT_MIN, INT_MAX, "", "Frame number to use, if unset the current frame will be used.", MINAFRAME, MAXFRAME); - parm= RNA_def_string(func, "name", "", FILE_MAX, "File Name", "the resulting filename from the scenes render settings."); + parm= RNA_def_string(func, "filepath", "", FILE_MAX, "File Path", "the resulting filepath from the scenes render settings."); RNA_def_property_flag(parm, PROP_THICK_WRAP); /* needed for string return value */ + RNA_def_property_subtype(parm, PROP_FILEPATH); /* allow non utf8 */ RNA_def_function_output(func, parm); } diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c index 3b83ec2d3ad..8f83e0b39a4 100644 --- a/source/blender/makesrna/intern/rna_sculpt_paint.c +++ b/source/blender/makesrna/intern/rna_sculpt_paint.c @@ -162,8 +162,19 @@ static int rna_Brush_mode_poll(PointerRNA *ptr, PointerRNA value) Scene *scene= (Scene *)ptr->id.data; Object *ob = OBACT; Brush *brush= value.id.data; - return ob->mode & brush->ob_mode; + + /* weak, for object painting we need to check against the object mode + * but for 2D view image painting we always want texture brushes + * this is not quite correct since you could be in object weightpaint + * mode at the same time as the 2D image view, but for now its *good enough* */ + if(ob && ob->mode & OB_MODE_ALL_PAINT) { + return ob->mode & brush->ob_mode; + } + else { + return OB_MODE_TEXTURE_PAINT & brush->ob_mode; + } } + #else static void rna_def_paint(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_sensor.c b/source/blender/makesrna/intern/rna_sensor.c index 6dddb042533..a1e25207f1f 100644 --- a/source/blender/makesrna/intern/rna_sensor.c +++ b/source/blender/makesrna/intern/rna_sensor.c @@ -491,7 +491,7 @@ static void rna_def_armature_sensor(BlenderRNA *brna) {SENS_ARM_LIN_ERROR_BELOW, "LINERRORBELOW", 0, "Lin error below", ""}, {SENS_ARM_LIN_ERROR_ABOVE, "LINERRORABOVE", 0, "Lin error above", ""}, {SENS_ARM_ROT_ERROR_BELOW, "ROTERRORBELOW", 0, "Rot error below", ""}, - {SENS_ARM_ROT_ERROR_ABOVE, "ROTERRORBELOW", 0, "Rot error above", ""}, + {SENS_ARM_ROT_ERROR_ABOVE, "ROTERRORABOVE", 0, "Rot error above", ""}, {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "ArmatureSensor", "Sensor"); diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c index 923f4560532..681de0dc792 100644 --- a/source/blender/makesrna/intern/rna_sequencer.c +++ b/source/blender/makesrna/intern/rna_sequencer.c @@ -119,7 +119,7 @@ static void rna_Sequence_start_frame_set(PointerRNA *ptr, int value) Sequence *seq= (Sequence*)ptr->data; Scene *scene= (Scene*)ptr->id.data; - seq->start= value; + seq_translate(scene, seq, value - seq->start); rna_Sequence_frame_change_update(scene, seq); } @@ -502,6 +502,12 @@ static void rna_Sequence_attenuation_set(PointerRNA *ptr, float value) } +static int rna_Sequence_input_count_get(PointerRNA *ptr) +{ + Sequence *seq= (Sequence*)(ptr->data); + + return get_sequence_effect_num_inputs(seq->type); +} /*static void rna_SoundSequence_filename_set(PointerRNA *ptr, const char *value) { Sequence *seq= (Sequence*)(ptr->data); @@ -985,6 +991,24 @@ static void rna_def_sequence(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Speed factor", "Multiply the current speed of the sequence with this number or remap current frame to this frame"); RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); + /* effect strip inputs */ + + prop= RNA_def_property(srna, "input_count", PROP_INT, PROP_UNSIGNED); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_int_funcs(prop, "rna_Sequence_input_count_get", NULL, NULL); + + prop= RNA_def_property(srna, "input_1", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "seq1"); + RNA_def_property_ui_text(prop, "Input 1", "First input for the effect strip"); + + prop= RNA_def_property(srna, "input_2", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "seq2"); + RNA_def_property_ui_text(prop, "Input 2", "Second input for the effect strip"); + + prop= RNA_def_property(srna, "input_3", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "seq1"); + RNA_def_property_ui_text(prop, "Input 3", "Third input for the effect strip"); + RNA_api_sequence_strip(srna); } diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c index 53f27bc06fb..11b00e1c77f 100644 --- a/source/blender/makesrna/intern/rna_smoke.c +++ b/source/blender/makesrna/intern/rna_smoke.c @@ -33,6 +33,7 @@ #include "BKE_smoke.h" #include "DNA_modifier_types.h" +#include "DNA_object_force.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" #include "DNA_smoke_types.h" @@ -64,6 +65,11 @@ static void rna_Smoke_reset(Main *bmain, Scene *scene, PointerRNA *ptr) smokeModifier_reset(settings->smd); + if(settings->smd && settings->smd->domain) { + settings->point_cache[0]->flag |= PTCACHE_OUTDATED; + settings->point_cache[1]->flag |= PTCACHE_OUTDATED; + } + rna_Smoke_update(bmain, scene, ptr); } @@ -73,6 +79,11 @@ static void rna_Smoke_reset_dependancy(Main *bmain, Scene *scene, PointerRNA *pt smokeModifier_reset(settings->smd); + if(settings->smd && settings->smd->domain) { + settings->smd->domain->point_cache[0]->flag |= PTCACHE_OUTDATED; + settings->smd->domain->point_cache[1]->flag |= PTCACHE_OUTDATED; + } + rna_Smoke_dependency_update(bmain, scene, ptr); } diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 70ccd4f8a6e..80a053c3c99 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -1008,12 +1008,17 @@ static void rna_def_space_view3d(BlenderRNA *brna) prop= RNA_def_property(srna, "lock_object", PROP_POINTER, PROP_NONE); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_pointer_sdna(prop, NULL, "ob_centre"); - RNA_def_property_ui_text(prop, "Lock Object", "3D View center is locked to this object's position"); + RNA_def_property_ui_text(prop, "Lock to Object", "3D View center is locked to this object's position"); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); prop= RNA_def_property(srna, "lock_bone", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "ob_centre_bone"); - RNA_def_property_ui_text(prop, "Lock Bone", "3D View center is locked to this bone's position"); + RNA_def_property_ui_text(prop, "Lock to Bone", "3D View center is locked to this bone's position"); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); + + prop= RNA_def_property(srna, "lock_cursor", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "ob_centre_cursor", 1); + RNA_def_property_ui_text(prop, "Lock to Cursor", "3D View center is locked to the cursor's position"); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); prop= RNA_def_property(srna, "viewport_shade", PROP_ENUM, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c index 567166fd15f..4b5b450a620 100644 --- a/source/blender/makesrna/intern/rna_texture.c +++ b/source/blender/makesrna/intern/rna_texture.c @@ -429,8 +429,8 @@ static void rna_def_mtex(BlenderRNA *brna) {MTEX_BLEND_SAT, "SATURATION", 0, "Saturation", ""}, {MTEX_BLEND_VAL, "VALUE", 0, "Value", ""}, {MTEX_BLEND_COLOR, "COLOR", 0, "Color", ""}, - {MTEX_SOFT_LIGHT, "SOFT LIGHT", 0, "Soft Light", ""}, - {MTEX_LIN_LIGHT , "LINEAR LIGHT", 0, "Linear Light", ""}, + {MTEX_SOFT_LIGHT, "SOFT_LIGHT", 0, "Soft Light", ""}, + {MTEX_LIN_LIGHT , "LINEAR_LIGHT", 0, "Linear Light", ""}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem output_node_items[] = { diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index a230a51e792..2e4c6e5a7b7 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -65,11 +65,15 @@ static PointerRNA rna_uiItemO(uiLayout *layout, char *opname, char *name, int ic #else -#define DEF_ICON(name) {name, (#name)+5, 0, (#name)+5, ""}, +#define DEF_ICON_BLANK_SKIP +#define DEF_ICON(name) {ICON_##name, (#name), 0, (#name), ""}, +#define DEF_VICO(name) {VICO_##name, (#name), 0, (#name), ""}, static EnumPropertyItem icon_items[] = { #include "UI_icons.h" {0, NULL, 0, NULL, NULL}}; +#undef DEF_ICON_BLANK_SKIP #undef DEF_ICON +#undef DEF_VICO static void api_ui_item_common(FunctionRNA *func) { diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index b00afa73ca9..97bf19f019a 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -33,6 +33,7 @@ #include "DNA_space_types.h" #include "DNA_userdef_types.h" #include "DNA_brush_types.h" +#include "DNA_view3d_types.h" #include "WM_api.h" #include "WM_types.h" @@ -47,6 +48,7 @@ #include "BKE_DerivedMesh.h" #include "BKE_depsgraph.h" #include "DNA_object_types.h" +#include "DNA_screen_types.h" #include "GPU_draw.h" #include "BKE_global.h" @@ -58,6 +60,34 @@ static void rna_userdef_update(Main *bmain, Scene *scene, PointerRNA *ptr) WM_main_add_notifier(NC_WINDOW, NULL); } +static void rna_userdef_show_manipulator_update(Main *bmain, Scene *scene, PointerRNA *ptr) +{ + UserDef *userdef = (UserDef *)ptr->data; + + /* lame, loop over all views and set */ + bScreen *sc; + ScrArea *sa; + SpaceLink *sl; + + /* from scene copy to the other views */ + for(sc=bmain->screen.first; sc; sc=sc->id.next) { + for(sa=sc->areabase.first; sa; sa=sa->next) { + for(sl=sa->spacedata.first; sl; sl=sl->next) { + if(sl->spacetype==SPACE_VIEW3D) { + View3D *v3d= (View3D *)sl; + if(userdef->tw_flag & V3D_USE_MANIPULATOR) + v3d->twflag |= V3D_USE_MANIPULATOR; + else + v3d->twflag &= ~V3D_USE_MANIPULATOR; + } + } + } + } + + rna_userdef_update(bmain, scene, ptr); +} + + static void rna_userdef_script_autoexec_update(Main *bmain, Scene *scene, PointerRNA *ptr) { UserDef *userdef = (UserDef*)ptr->data; @@ -2008,9 +2038,9 @@ static void rna_def_userdef_view(BlenderRNA *brna) /* 3D transform widget */ prop= RNA_def_property(srna, "show_manipulator", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "tw_flag", 1); + RNA_def_property_boolean_sdna(prop, NULL, "tw_flag", V3D_USE_MANIPULATOR); RNA_def_property_ui_text(prop, "Manipulator", "Use 3D transform manipulator"); - RNA_def_property_update(prop, 0, "rna_userdef_update"); + RNA_def_property_update(prop, 0, "rna_userdef_show_manipulator_update"); prop= RNA_def_property(srna, "manipulator_size", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "tw_size"); @@ -2733,11 +2763,11 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Temporary Directory", "The directory for storing temporary save files"); RNA_def_property_update(prop, 0, "rna_userdef_temp_update"); - prop= RNA_def_property(srna, "image_editor", PROP_STRING, PROP_DIRPATH); + prop= RNA_def_property(srna, "image_editor", PROP_STRING, PROP_FILEPATH); RNA_def_property_string_sdna(prop, NULL, "image_editor"); RNA_def_property_ui_text(prop, "Image Editor", "Path to an image editor"); - prop= RNA_def_property(srna, "animation_player", PROP_STRING, PROP_DIRPATH); + prop= RNA_def_property(srna, "animation_player", PROP_STRING, PROP_FILEPATH); RNA_def_property_string_sdna(prop, NULL, "anim_player"); RNA_def_property_ui_text(prop, "Animation Player", "Path to a custom animation/frame sequence player"); diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index 1bc22b7af25..f8c262dff43 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -649,7 +649,7 @@ static void rna_wmClipboard_set(PointerRNA *ptr, const char *value) WM_clipboard_text_set((void *) value, FALSE); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static void rna_Operator_unregister(const bContext *C, StructRNA *type) { char *idname; @@ -952,7 +952,7 @@ static StructRNA *rna_MacroOperator_register(const bContext *C, ReportList *repo return dummyot.ext.srna; } -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ static StructRNA* rna_Operator_refine(PointerRNA *opr) { @@ -1061,7 +1061,7 @@ static void rna_def_operator(BlenderRNA *brna) RNA_def_struct_ui_text(srna, "Operator", "Storage of an operator being executed, or registered after execution"); RNA_def_struct_sdna(srna, "wmOperator"); RNA_def_struct_refine_func(srna, "rna_Operator_refine"); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON RNA_def_struct_register_funcs(srna, "rna_Operator_register", "rna_Operator_unregister"); #endif @@ -1124,7 +1124,7 @@ static void rna_def_macro_operator(BlenderRNA *brna) RNA_def_struct_ui_text(srna, "Macro Operator", "Storage of a macro operator being executed, or registered after execution"); RNA_def_struct_sdna(srna, "wmOperator"); RNA_def_struct_refine_func(srna, "rna_MacroOperator_refine"); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON RNA_def_struct_register_funcs(srna, "rna_MacroOperator_register", "rna_Operator_unregister"); #endif diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c index dd2c4b6efb6..9e93557968d 100644 --- a/source/blender/modifiers/intern/MOD_explode.c +++ b/source/blender/modifiers/intern/MOD_explode.c @@ -663,7 +663,7 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd, DerivedMesh *explode, *dm=to_explode; MFace *mf=0, *mface; ParticleSettings *part=psmd->psys->part; - ParticleSimulationData sim = {scene, ob, psmd->psys, psmd}; + ParticleSimulationData sim= {0}; ParticleData *pa=NULL, *pars=psmd->psys->particles; ParticleKey state; EdgeHash *vertpahash; @@ -680,6 +680,11 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd, mface= dm->getFaceArray(dm); totpart= psmd->psys->totpart; + sim.scene= scene; + sim.ob= ob; + sim.psys= psmd->psys; + sim.psmd= psmd; + timestep= psys_get_timestep(&sim); //if(part->flag & PART_GLOB_TIME) diff --git a/source/blender/modifiers/intern/MOD_particlesystem.c b/source/blender/modifiers/intern/MOD_particlesystem.c index 9d99174b7c4..cd56bd3c8bc 100644 --- a/source/blender/modifiers/intern/MOD_particlesystem.c +++ b/source/blender/modifiers/intern/MOD_particlesystem.c @@ -154,6 +154,10 @@ static void deformVerts(ModifierData *md, Object *ob, psmd->dm->needsFree = 1; psmd->dm->release(psmd->dm); } + else { + /* no dm before, so recalc particles fully */ + psys->recalc |= PSYS_RECALC_RESET; + } /* make new dm */ psmd->dm=CDDM_copy(dm); @@ -175,7 +179,6 @@ static void deformVerts(ModifierData *md, Object *ob, /* in file read dm hasn't really changed but just wasn't saved in file */ psys->recalc |= PSYS_RECALC_RESET; - psmd->flag |= eParticleSystemFlag_DM_changed; psmd->totdmvert= psmd->dm->getNumVerts(psmd->dm); psmd->totdmedge= psmd->dm->getNumEdges(psmd->dm); @@ -186,7 +189,6 @@ static void deformVerts(ModifierData *md, Object *ob, psmd->flag &= ~eParticleSystemFlag_psys_updated; particle_system_update(md->scene, ob, psys); psmd->flag |= eParticleSystemFlag_psys_updated; - psmd->flag &= ~eParticleSystemFlag_DM_changed; } } diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt index d4383f330c4..5a6470d994e 100644 --- a/source/blender/nodes/CMakeLists.txt +++ b/source/blender/nodes/CMakeLists.txt @@ -146,8 +146,7 @@ ENDIF(WIN32) IF(WITH_PYTHON) SET(INC ${INC} ../python ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(bf_nodes "${SRC}" "${INC}") diff --git a/source/blender/nodes/SConscript b/source/blender/nodes/SConscript index 3e7e0dbe54c..4bed612144c 100644 --- a/source/blender/nodes/SConscript +++ b/source/blender/nodes/SConscript @@ -22,10 +22,9 @@ defs = [] if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] incs += ' ../python' + defs.append('WITH_PYTHON') if env['BF_DEBUG']: defs.append('_DEBUG') -else: - defs.append('DISABLE_PYTHON') if env['OURPLATFORM'] == 'linux2': cflags='-pthread' diff --git a/source/blender/nodes/intern/CMP_util.c b/source/blender/nodes/intern/CMP_util.c index c762d8cb42d..06c4740f6b9 100644 --- a/source/blender/nodes/intern/CMP_util.c +++ b/source/blender/nodes/intern/CMP_util.c @@ -1303,7 +1303,7 @@ CompBuf* qd_downScaledCopy(CompBuf* src, int scale) void IIR_gauss(CompBuf* src, float sigma, int chan, int xy) { double q, q2, sc, cf[4], tsM[9], tsu[3], tsv[3]; - float *X, *Y, *W; + double *X, *Y, *W; int i, x, y, sz; // <0.5 not valid, though can have a possibly useful sort of sharpening effect @@ -1367,9 +1367,9 @@ void IIR_gauss(CompBuf* src, float sigma, int chan, int xy) // intermediate buffers sz = MAX2(src->x, src->y); - X = MEM_callocN(sz*sizeof(float), "IIR_gauss X buf"); - Y = MEM_callocN(sz*sizeof(float), "IIR_gauss Y buf"); - W = MEM_callocN(sz*sizeof(float), "IIR_gauss W buf"); + X = MEM_callocN(sz*sizeof(double), "IIR_gauss X buf"); + Y = MEM_callocN(sz*sizeof(double), "IIR_gauss Y buf"); + W = MEM_callocN(sz*sizeof(double), "IIR_gauss W buf"); if (xy & 1) { // H for (y=0; yy; ++y) { const int yx = y*src->x; diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c b/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c index 5e391e02feb..a548893905a 100644 --- a/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c +++ b/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c @@ -27,22 +27,22 @@ * ***** END GPL LICENSE BLOCK ***** */ -#ifndef DISABLE_PYTHON +/* TODO, support python3.x */ +#undef WITH_PYTHON + +#ifdef WITH_PYTHON #include #include #include #endif -/* TODO, support python3.x */ -#define DISABLE_PYTHON 1 - #include "DNA_text_types.h" #include "BKE_text.h" #include "BKE_utildefines.h" // XXX #if 0 -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "api2_2x/Node.h" #include "api2_2x/gen_utils.h" #include "BPY_extern.h" @@ -57,7 +57,7 @@ static void node_dynamic_setup(bNode *node); static void node_dynamic_exec_cb(void *data, bNode *node, bNodeStack **in, bNodeStack **out); static void node_dynamic_free_storage_cb(bNode *node); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static PyObject *init_dynamicdict(void) { PyObject *newscriptdict, *item; PyGILState_STATE gilstate = PyGILState_Ensure(); @@ -156,7 +156,7 @@ static void node_dynamic_update_socket_links(bNode *node, bNodeTree *ntree) static void node_dynamic_free_storage_cb(bNode *node) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON NodeScriptDict *nsd; PyObject *pydict; BPy_Node *pynode; @@ -186,7 +186,7 @@ static void node_dynamic_disable(bNode *node) /* Disable all pynodes using the given text (script) id */ static void node_dynamic_disable_all_by_id(ID *id) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON Material *ma; /* XXX hardcoded for shaders */ for (ma= G.main->mat.first; ma; ma= ma->id.next) { @@ -346,7 +346,7 @@ int nodeDynamicUnlinkText(ID *txtid) { static void node_dynamic_pyerror_print(bNode *node) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyGILState_STATE gilstate = PyGILState_Ensure(); fprintf(stderr, "\nError in dynamic node script \"%s\":\n", node->name); @@ -373,7 +373,7 @@ static void node_dynamic_register_type(bNode *node) node->typeinfo->name = BLI_strdup(node->name); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* node_dynamic_get_pynode: * Find the pynode definition from the script */ static PyObject *node_dynamic_get_pynode(PyObject *dict) @@ -415,11 +415,11 @@ static PyObject *node_dynamic_get_pynode(PyObject *dict) "no PyNode definition found in the script!"); return NULL; } -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ static int node_dynamic_parse(struct bNode *node) { -#ifdef DISABLE_PYTHON +#ifndef WITH_PYTHON return -1; #else PyObject *dict= NULL; @@ -516,7 +516,7 @@ static int node_dynamic_parse(struct bNode *node) * pynodes already linked to a script (node->id != NULL). */ static void node_dynamic_setup(bNode *node) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON NodeScriptDict *nsd = NULL; bNodeTree *nodetree = NULL; bNodeType *ntype = NULL; @@ -640,7 +640,7 @@ static void node_dynamic_setup(bNode *node) node->custom1 = BSET(node->custom1, NODE_DYNAMIC_READY); PyGILState_Release(gilstate); -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ return; } @@ -673,7 +673,7 @@ static void node_dynamic_init_cb(bNode *node) { /* node_dynamic_copy_cb: pynode copy callback */ static void node_dynamic_copy_cb(bNode *orig_node, bNode *new_node) { -#ifdef DISABLE_PYTHON +#ifndef WITH_PYTHON return; #else NodeScriptDict *nsd; @@ -698,7 +698,7 @@ static void node_dynamic_copy_cb(bNode *orig_node, bNode *new_node) /* node_dynamic_exec_cb: the execution callback called per pixel * during rendering. */ static void node_dynamic_exec_cb(void *data, bNode *node, bNodeStack **in, bNodeStack **out) { -#ifdef DISABLE_PYTHON +#ifndef WITH_PYTHON return; #else BPy_Node *mynode = NULL; diff --git a/source/blender/python/generic/CMakeLists.txt b/source/blender/python/generic/CMakeLists.txt index 4ac3fc36ebd..2f5551d4c96 100644 --- a/source/blender/python/generic/CMakeLists.txt +++ b/source/blender/python/generic/CMakeLists.txt @@ -34,10 +34,10 @@ SET(SRC bgl.c blf_api.c bpy_internal_import.c - geometry.c mathutils.c mathutils_color.c mathutils_euler.c + mathutils_geometry.c mathutils_matrix.c mathutils_quat.c mathutils_vector.c diff --git a/source/blender/python/generic/bgl.c b/source/blender/python/generic/bgl.c index 86b7bc522fe..321152ab581 100644 --- a/source/blender/python/generic/bgl.c +++ b/source/blender/python/generic/bgl.c @@ -1115,12 +1115,11 @@ static struct PyModuleDef BGL_module_def = { }; -PyObject *BGL_Init(void) +PyObject *BPyInit_bgl(void) { - PyObject *mod, *dict, *item; - mod = PyModule_Create(&BGL_module_def); - PyDict_SetItemString(PyImport_GetModuleDict(), BGL_module_def.m_name, mod); - dict= PyModule_GetDict(mod); + PyObject *submodule, *dict, *item; + submodule= PyModule_Create(&BGL_module_def); + dict= PyModule_GetDict(submodule); if( PyType_Ready( &BGL_bufferType) < 0) return NULL; /* should never happen */ @@ -1612,6 +1611,6 @@ PyObject *BGL_Init(void) EXPP_ADDCONST(GL_TEXTURE_BINDING_1D); EXPP_ADDCONST(GL_TEXTURE_BINDING_2D); - return mod; + return submodule; } diff --git a/source/blender/python/generic/bgl.h b/source/blender/python/generic/bgl.h index 80b0b90f643..5e40cda3114 100644 --- a/source/blender/python/generic/bgl.h +++ b/source/blender/python/generic/bgl.h @@ -38,7 +38,7 @@ #include -PyObject *BGL_Init(void); +PyObject *BPyInit_bgl(void); /*@ Create a buffer object */ /*@ dimensions is an array of ndimensions integers representing the size of each dimension */ diff --git a/source/blender/python/generic/blf_api.c b/source/blender/python/generic/blf_api.c index 66d8cdd923a..80e140b7eac 100644 --- a/source/blender/python/generic/blf_api.c +++ b/source/blender/python/generic/blf_api.c @@ -390,17 +390,16 @@ static struct PyModuleDef BLF_module_def = { 0, /* m_free */ }; -PyObject *BLF_Init(void) +PyObject *BPyInit_blf(void) { PyObject *submodule; submodule = PyModule_Create(&BLF_module_def); - PyDict_SetItemString(PyImport_GetModuleDict(), BLF_module_def.m_name, submodule); PyModule_AddIntConstant(submodule, "ROTATION", BLF_ROTATION); PyModule_AddIntConstant(submodule, "CLIPPING", BLF_CLIPPING); PyModule_AddIntConstant(submodule, "SHADOW", BLF_SHADOW); PyModule_AddIntConstant(submodule, "KERNING_DEFAULT", BLF_KERNING_DEFAULT); - return (submodule); + return submodule; } diff --git a/source/blender/python/generic/blf_api.h b/source/blender/python/generic/blf_api.h index fae20ace996..db17f62337b 100644 --- a/source/blender/python/generic/blf_api.h +++ b/source/blender/python/generic/blf_api.h @@ -22,5 +22,4 @@ * ***** END GPL LICENSE BLOCK ***** */ - -PyObject *BLF_Init(void); +PyObject *BPyInit_blf(void); diff --git a/source/blender/python/generic/bpy_internal_import.c b/source/blender/python/generic/bpy_internal_import.c index 3ee0c76a44a..dae0da82dbd 100644 --- a/source/blender/python/generic/bpy_internal_import.c +++ b/source/blender/python/generic/bpy_internal_import.c @@ -26,7 +26,12 @@ * ***** END GPL LICENSE BLOCK ***** */ +#include +#include "compile.h" /* for the PyCodeObject */ +#include "eval.h" /* for PyEval_EvalCode */ + #include "bpy_internal_import.h" + #include "DNA_text_types.h" #include "MEM_guardedalloc.h" @@ -62,16 +67,17 @@ void bpy_import_main_set(struct Main *maggie) /* returns a dummy filename for a textblock so we can tell what file a text block comes from */ void bpy_text_filename_get(char *fn, Text *text) { - sprintf(fn, "%s/%s", text->id.lib ? text->id.lib->filepath : G.main->name, text->id.name+2); - - /* XXX, this is a bug in python's Py_CompileString()! +#if PY_VERSION_HEX >= 0x03020000 + sprintf(fn, "%s%c%s", text->id.lib ? text->id.lib->filepath : G.main->name, SEP, text->id.name+2); +#else + /* this is a bug in python's Py_CompileString()!, fixed for python 3.2. the string encoding should not be required to be utf-8 - reported: http://bugs.python.org/msg115202 - */ - BLI_utf8_invalid_strip(fn, strlen(fn)); + reported: http://bugs.python.org/msg115202 */ + strcpy(fn, text->id.name+2); +#endif } -PyObject *bpy_text_import( Text *text ) +PyObject *bpy_text_import(Text *text) { char *buf = NULL; char modulename[24]; diff --git a/source/blender/python/generic/bpy_internal_import.h b/source/blender/python/generic/bpy_internal_import.h index f191ab22651..dd7a3ab9f64 100644 --- a/source/blender/python/generic/bpy_internal_import.h +++ b/source/blender/python/generic/bpy_internal_import.h @@ -28,8 +28,8 @@ /* Note, the BGE needs to use this too, keep it minimal */ -#ifndef EXPP_bpy_import_h -#define EXPP_bpy_import_h +#ifndef BPY_INTERNAL_IMPORT_H +#define BPY_INTERNAL_IMPORT_H /* python redefines :/ */ #ifdef _POSIX_C_SOURCE @@ -40,16 +40,12 @@ #undef _XOPEN_SOURCE #endif -#include -#include "compile.h" /* for the PyCodeObject */ -#include "eval.h" /* for PyEval_EvalCode */ - struct Text; -PyObject* bpy_text_import( struct Text *text ); -PyObject* bpy_text_import_name( char *name, int *found ); -PyObject* bpy_text_reimport( PyObject *module, int *found ); -/* void bpy_text_clear_modules( int clear_all );*/ /* Clear user modules */ +PyObject* bpy_text_import(struct Text *text); +PyObject* bpy_text_import_name(char *name, int *found); +PyObject* bpy_text_reimport(PyObject *module, int *found); +/* void bpy_text_clear_modules(int clear_all);*/ /* Clear user modules */ void bpy_text_filename_get(char *fn, struct Text *text); @@ -60,4 +56,4 @@ extern PyMethodDef bpy_reload_meth; struct Main *bpy_import_main_get(void); void bpy_import_main_set(struct Main *maggie); -#endif /* EXPP_bpy_import_h */ +#endif /* BPY_INTERNAL_IMPORT_H */ diff --git a/source/blender/python/generic/mathutils.c b/source/blender/python/generic/mathutils.c index c1f24e413c8..73f16cb0cf1 100644 --- a/source/blender/python/generic/mathutils.c +++ b/source/blender/python/generic/mathutils.c @@ -245,10 +245,11 @@ static struct PyModuleDef M_Mathutils_module_def = { 0, /* m_free */ }; -PyObject *Mathutils_Init(void) +PyMODINIT_FUNC BPyInit_mathutils(void) { PyObject *submodule; - + PyObject *item; + if( PyType_Ready( &vector_Type ) < 0 ) return NULL; if( PyType_Ready( &matrix_Type ) < 0 ) @@ -261,7 +262,6 @@ PyObject *Mathutils_Init(void) return NULL; submodule = PyModule_Create(&M_Mathutils_module_def); - PyDict_SetItemString(PyImport_GetModuleDict(), M_Mathutils_module_def.m_name, submodule); /* each type has its own new() function */ PyModule_AddObject( submodule, "Vector", (PyObject *)&vector_Type ); @@ -270,7 +270,15 @@ PyObject *Mathutils_Init(void) PyModule_AddObject( submodule, "Quaternion", (PyObject *)&quaternion_Type ); PyModule_AddObject( submodule, "Color", (PyObject *)&color_Type ); + /* submodule */ + PyModule_AddObject( submodule, "geometry", (item=BPyInit_mathutils_geometry())); + /* XXX, python doesnt do imports with this usefully yet + * 'from mathutils.geometry import PolyFill' + * ...fails without this. */ + PyDict_SetItemString(PyThreadState_GET()->interp->modules, "mathutils.geometry", item); + Py_INCREF(item); + mathutils_matrix_vector_cb_index= Mathutils_RegisterCallback(&mathutils_matrix_vector_cb); - return (submodule); + return submodule; } diff --git a/source/blender/python/generic/mathutils.h b/source/blender/python/generic/mathutils.h index 85fbe3225ba..22f1536bb10 100644 --- a/source/blender/python/generic/mathutils.h +++ b/source/blender/python/generic/mathutils.h @@ -55,13 +55,13 @@ typedef struct { #include "mathutils_quat.h" #include "mathutils_euler.h" #include "mathutils_color.h" +#include "mathutils_geometry.h" PyObject *BaseMathObject_getOwner( BaseMathObject * self, void * ); PyObject *BaseMathObject_getWrapped( BaseMathObject *self, void * ); void BaseMathObject_dealloc(BaseMathObject * self); -PyObject *Mathutils_Init(void); -PyObject *Noise_Init(void); /* lazy, saves having own header */ +PyMODINIT_FUNC BPyInit_mathutils(void); int EXPP_FloatsAreEqual(float A, float B, int floatSteps); int EXPP_VectorsAreEqual(float *vecA, float *vecB, int size, int floatSteps); diff --git a/source/blender/python/generic/geometry.c b/source/blender/python/generic/mathutils_geometry.c similarity index 98% rename from source/blender/python/generic/geometry.c rename to source/blender/python/generic/mathutils_geometry.c index e0583cc0028..e57eb4ce83d 100644 --- a/source/blender/python/generic/geometry.c +++ b/source/blender/python/generic/mathutils_geometry.c @@ -27,7 +27,7 @@ * ***** END GPL LICENSE BLOCK ***** */ -#include "geometry.h" +#include "mathutils_geometry.h" /* Used for PolyFill */ #include "BKE_displist.h" @@ -819,7 +819,7 @@ struct PyMethodDef M_Geometry_methods[] = { static struct PyModuleDef M_Geometry_module_def = { PyModuleDef_HEAD_INIT, - "geometry", /* m_name */ + "mathutils.geometry", /* m_name */ M_Geometry_doc, /* m_doc */ 0, /* m_size */ M_Geometry_methods, /* m_methods */ @@ -830,12 +830,8 @@ static struct PyModuleDef M_Geometry_module_def = { }; /*----------------------------MODULE INIT-------------------------*/ -PyObject *Geometry_Init(void) +PyMODINIT_FUNC BPyInit_mathutils_geometry(void) { - PyObject *submodule; - - submodule = PyModule_Create(&M_Geometry_module_def); - PyDict_SetItemString(PyImport_GetModuleDict(), M_Geometry_module_def.m_name, submodule); - - return (submodule); + PyObject *submodule= PyModule_Create(&M_Geometry_module_def); + return submodule; } diff --git a/source/blender/python/generic/geometry.h b/source/blender/python/generic/mathutils_geometry.h similarity index 96% rename from source/blender/python/generic/geometry.h rename to source/blender/python/generic/mathutils_geometry.h index 401efcc7888..3d3f7c606a4 100644 --- a/source/blender/python/generic/geometry.h +++ b/source/blender/python/generic/mathutils_geometry.h @@ -34,6 +34,6 @@ #include #include "mathutils.h" -PyObject *Geometry_Init(void); +PyMODINIT_FUNC BPyInit_mathutils_geometry(void); #endif /* EXPP_Geometry_H */ diff --git a/source/blender/python/generic/mathutils_matrix.c b/source/blender/python/generic/mathutils_matrix.c index 36a9bf8b55d..c74ec3536e5 100644 --- a/source/blender/python/generic/mathutils_matrix.c +++ b/source/blender/python/generic/mathutils_matrix.c @@ -942,6 +942,7 @@ PyObject *Matrix_scalePart(MatrixObject * self) scale[2]= tmat[2][2]; return newVectorObject(scale, 3, Py_NEW, NULL); } + /*---------------------------Matrix.invert() ---------------------*/ static char Matrix_Invert_doc[] = ".. method:: invert()\n" @@ -1009,6 +1010,41 @@ PyObject *Matrix_Invert(MatrixObject * self) return (PyObject *)self; } +/*---------------------------Matrix.decompose() ---------------------*/ +static char Matrix_decompose_doc[] = +".. method:: decompose()\n" +"\n" +" Return the location, rotaion and scale components of this matrix.\n" +"\n" +" :return: loc, rot, scale triple.\n" +" :rtype: (:class:`Vector`, :class:`Quaternion`, :class:`Vector`)"; +static PyObject *Matrix_decompose(MatrixObject * self) +{ + PyObject *ret; + float loc[3]; + float rot[3][3]; + float quat[4]; + float size[3]; + + if(self->colSize != 4 || self->rowSize != 4) { + PyErr_SetString(PyExc_AttributeError, "Matrix.decompose(): inappropriate matrix size - expects 4x4 matrix\n"); + return NULL; + } + + if(!BaseMath_ReadCallback(self)) + return NULL; + + mat4_to_loc_rot_size(loc, rot, size, (float (*)[4])self->contigPtr); + mat3_to_quat(quat, rot); + + ret= PyTuple_New(3); + PyTuple_SET_ITEM(ret, 0, newVectorObject(loc, 3, Py_NEW, NULL)); + PyTuple_SET_ITEM(ret, 1, newQuaternionObject(quat, Py_NEW, NULL)); + PyTuple_SET_ITEM(ret, 2, newVectorObject(size, 3, Py_NEW, NULL)); + + return ret; +} + /*---------------------------Matrix.determinant() ----------------*/ static char Matrix_Determinant_doc[] = @@ -1755,6 +1791,7 @@ static struct PyMethodDef Matrix_methods[] = { {"translation_part", (PyCFunction) Matrix_TranslationPart, METH_NOARGS, Matrix_TranslationPart_doc}, {"rotation_part", (PyCFunction) Matrix_RotationPart, METH_NOARGS, Matrix_RotationPart_doc}, {"scale_part", (PyCFunction) Matrix_scalePart, METH_NOARGS, Matrix_scalePart_doc}, + {"decompose", (PyCFunction) Matrix_decompose, METH_NOARGS, Matrix_decompose_doc}, {"resize4x4", (PyCFunction) Matrix_Resize4x4, METH_NOARGS, Matrix_Resize4x4_doc}, {"to_4x4", (PyCFunction) Matrix_to_4x4, METH_NOARGS, Matrix_to_4x4_doc}, {"to_3x3", (PyCFunction) Matrix_to_3x3, METH_NOARGS, Matrix_to_3x3_doc}, diff --git a/source/blender/python/generic/noise.c b/source/blender/python/generic/noise.c index a9bbc016a54..b12ca47bdda 100644 --- a/source/blender/python/generic/noise.c +++ b/source/blender/python/generic/noise.c @@ -122,8 +122,6 @@ static int left = 1; static int initf = 0; static unsigned long *next; -PyObject *Noise_Init(void); - /* initializes state[N] with a seed */ static void init_genrand(unsigned long s) { @@ -657,10 +655,9 @@ static struct PyModuleDef noise_module_def = { 0, /* m_free */ }; -PyObject *Noise_Init(void) +PyObject *BPyInit_noise(void) { PyObject *submodule = PyModule_Create(&noise_module_def); - PyDict_SetItemString(PyImport_GetModuleDict(), noise_module_def.m_name, submodule); /* use current time as seed for random number generator by default */ setRndSeed(0); diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c index 9b1f09a7984..b1c4a9951cd 100644 --- a/source/blender/python/intern/bpy.c +++ b/source/blender/python/intern/bpy.c @@ -38,7 +38,7 @@ #include "BKE_utildefines.h" /* external util modules */ -#include "../generic/geometry.h" +#include "../generic/mathutils.h" #include "../generic/bgl.h" #include "../generic/blf_api.h" #include "../generic/IDProp.h" @@ -197,13 +197,7 @@ void BPy_init_modules( void ) printf("bpy: couldnt find 'scripts/modules', blender probably wont start.\n"); } /* stand alone utility modules not related to blender directly */ - Geometry_Init(); - Mathutils_Init(); - Noise_Init(); - BGL_Init(); - BLF_Init(); - IDProp_Init_Types(); - AUD_initPython(); + IDProp_Init_Types(); /* not actually a submodule, just types */ Freestyle_Init(); mod = PyModule_New("_bpy"); diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 3ff0d86b433..a894fa60237 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -23,13 +23,12 @@ * ***** END GPL LICENSE BLOCK ***** */ - - /* grr, python redefines */ #ifdef _POSIX_C_SOURCE #undef _POSIX_C_SOURCE #endif +#include #include "bpy.h" #include "bpy_rna.h" @@ -197,6 +196,24 @@ void BPY_set_context(bContext *C) BPy_SetContext(C); } +/* init-tab */ +extern PyObject *BPyInit_noise(void); +extern PyObject *BPyInit_mathutils(void); +// extern PyObject *BPyInit_mathutils_geometry(void); // BPyInit_mathutils calls, py doesnt work with thos :S +extern PyObject *BPyInit_bgl(void); +extern PyObject *BPyInit_blf(void); +extern PyObject *AUD_initPython(void); + +static struct _inittab bpy_internal_modules[]= { + {"noise", BPyInit_noise}, + {"mathutils", BPyInit_mathutils}, +// {"mathutils.geometry", BPyInit_mathutils_geometry}, + {"bgl", BPyInit_bgl}, + {"blf", BPyInit_blf}, + {"aud", AUD_initPython}, + {NULL, NULL} +}; + /* call BPY_set_context first */ void BPY_start_python( int argc, char **argv ) { @@ -207,6 +224,9 @@ void BPY_start_python( int argc, char **argv ) utf8towchar(bprogname_wchar, bprogname); Py_SetProgramName(bprogname_wchar); + /* builtin modules */ + PyImport_ExtendInittab(bpy_internal_modules); + BPY_start_python_path(); /* allow to use our own included python */ Py_Initialize( ); diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c index 3ffa78dab70..f3e960f87b2 100644 --- a/source/blender/python/intern/bpy_operator.c +++ b/source/blender/python/intern/bpy_operator.c @@ -46,12 +46,15 @@ static PyObject *pyop_poll(PyObject *UNUSED(self), PyObject *args) char *opname; PyObject *context_dict= NULL; /* optional args */ PyObject *context_dict_back; + char *context_str= NULL; PyObject *ret; + int context= WM_OP_EXEC_DEFAULT; + // XXX Todo, work out a better solution for passing on context, could make a tuple from self and pack the name and Context into it... bContext *C = BPy_GetContext(); - if (!PyArg_ParseTuple(args, "s|O:_bpy.ops.poll", &opname, &context_dict)) + if (!PyArg_ParseTuple(args, "s|Os:_bpy.ops.poll", &opname, &context_dict, &context_str)) return NULL; ot= WM_operatortype_find(opname, TRUE); @@ -61,6 +64,15 @@ static PyObject *pyop_poll(PyObject *UNUSED(self), PyObject *args) return NULL; } + if(context_str) { + if(RNA_enum_value_from_id(operator_context_items, context_str, &context)==0) { + char *enum_str= BPy_enum_as_string(operator_context_items); + PyErr_Format(PyExc_TypeError, "Calling operator \"bpy.ops.%s.poll\" error, expected a string enum in (%.200s)", opname, enum_str); + MEM_freeN(enum_str); + return NULL; + } + } + if(!PyDict_Check(context_dict)) context_dict= NULL; @@ -70,7 +82,7 @@ static PyObject *pyop_poll(PyObject *UNUSED(self), PyObject *args) Py_XINCREF(context_dict); /* so we done loose it */ /* main purpose of thsi function */ - ret= WM_operator_poll((bContext*)C, ot) ? Py_True : Py_False; + ret= WM_operator_poll_context((bContext*)C, ot, context) ? Py_True : Py_False; /* restore with original context dict, probably NULL but need this for nested operator calls */ Py_XDECREF(context_dict); @@ -126,7 +138,7 @@ static PyObject *pyop_call(PyObject *UNUSED(self), PyObject *args) CTX_py_dict_set(C, (void *)context_dict); Py_XINCREF(context_dict); /* so we done loose it */ - if(WM_operator_poll((bContext*)C, ot) == FALSE) { + if(WM_operator_poll_context((bContext*)C, ot, context) == FALSE) { const char *msg= CTX_wm_operator_poll_msg_get(C); PyErr_Format( PyExc_SystemError, "Operator bpy.ops.%.200s.poll() %s", opname, msg ? msg : "failed, context is incorrect"); CTX_wm_operator_poll_msg_set(C, NULL); /* better set to NULL else it could be used again */ @@ -313,14 +325,8 @@ static struct PyModuleDef bpy_ops_module = { PyObject *BPY_operator_module(void) { PyObject *submodule; - - submodule= PyModule_Create(&bpy_ops_module); - PyDict_SetItemString(PyImport_GetModuleDict(), bpy_ops_module.m_name, submodule); - /* INCREF since its its assumed that all these functions return the - * module with a new ref like PyDict_New, since they are passed to - * PyModule_AddObject which steals a ref */ - Py_INCREF(submodule); + submodule= PyModule_Create(&bpy_ops_module); return submodule; } diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index a3b0c4739c4..2bffd7f6b88 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -120,7 +120,9 @@ static int mathutils_rna_vector_set(BaseMathObject *bmo, int subtype) } RNA_property_float_set_array(&self->ptr, self->prop, bmo->data); - RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + if(RNA_property_update_check(self->prop)) { + RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + } /* Euler order exception */ if(subtype==MATHUTILS_CB_SUBTYPE_EUL) { @@ -129,7 +131,9 @@ static int mathutils_rna_vector_set(BaseMathObject *bmo, int subtype) short order= pyrna_rotation_euler_order_get(&self->ptr, &prop_eul_order, eul->order); if(order != eul->order) { RNA_property_enum_set(&self->ptr, prop_eul_order, eul->order); - RNA_property_update(BPy_GetContext(), &self->ptr, prop_eul_order); + if(RNA_property_update_check(prop_eul_order)) { + RNA_property_update(BPy_GetContext(), &self->ptr, prop_eul_order); + } } } return 1; @@ -160,7 +164,11 @@ static int mathutils_rna_vector_set_index(BaseMathObject *bmo, int UNUSED(subtyp RNA_property_float_clamp(&self->ptr, self->prop, &bmo->data[index]); RNA_property_float_set_index(&self->ptr, self->prop, index, bmo->data[index]); - RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + + if(RNA_property_update_check(self->prop)) { + RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + } + return 1; } @@ -201,7 +209,10 @@ static int mathutils_rna_matrix_set(BaseMathObject *bmo, int UNUSED(subtype)) /* can ignore clamping here */ RNA_property_float_set_array(&self->ptr, self->prop, bmo->data); - RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + + if(RNA_property_update_check(self->prop)) { + RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + } return 1; } @@ -1235,7 +1246,9 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb } /* Run rna property functions */ - RNA_property_update(BPy_GetContext(), ptr, prop); + if(RNA_property_update_check(prop)) { + RNA_property_update(BPy_GetContext(), ptr, prop); + } return 0; } @@ -1309,8 +1322,10 @@ static int pyrna_py_to_prop_array_index(BPy_PropertyArrayRNA *self, int index, P } /* Run rna property functions */ - RNA_property_update(BPy_GetContext(), ptr, prop); - + if(RNA_property_update_check(prop)) { + RNA_property_update(BPy_GetContext(), ptr, prop); + } + return ret; } @@ -1720,7 +1735,9 @@ static int pyrna_prop_array_ass_subscript( BPy_PropertyArrayRNA *self, PyObject } if(ret != -1) { - RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + if(RNA_property_update_check(self->prop)) { + RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + } } return ret; diff --git a/source/blender/render/CMakeLists.txt b/source/blender/render/CMakeLists.txt index 10a6d891e42..b65aefeb162 100644 --- a/source/blender/render/CMakeLists.txt +++ b/source/blender/render/CMakeLists.txt @@ -36,7 +36,6 @@ SET(INC ../makesrna ../blenkernel ../imbuf - ../include ../../kernel/gen_messaging ../../../intern/smoke/extern ../../../intern/guardedalloc diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index dee557386b0..42bf95827e7 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -159,6 +159,9 @@ struct Render *RE_GetRender(const char *name); /* returns 1 while render is working (or renders called from within render) */ int RE_RenderInProgress(struct Render *re); +/* assign default dummy callbacks */ +void RE_InitRenderCB(struct Render *re); + /* use free render as signal to do everything over (previews) */ void RE_FreeRender (struct Render *re); /* only called on exit */ @@ -221,7 +224,7 @@ void RE_WriteRenderResult(RenderResult *rr, char *filename, int compress); struct RenderResult *RE_MultilayerConvert(void *exrhandle, int rectx, int recty); /* do a full sample buffer compo */ -void RE_MergeFullSample(struct Render *re, struct Scene *sce, struct bNodeTree *ntree); +void RE_MergeFullSample(struct Render *re, struct Main *bmain, struct Scene *sce, struct bNodeTree *ntree); /* ancient stars function... go away! */ void RE_make_stars(struct Render *re, struct Scene *scenev3d, void (*initfunc)(void), @@ -298,5 +301,7 @@ void RE_engine_update_stats(RenderEngine *engine, char *stats, char *info); void RE_engines_init(void); void RE_engines_exit(void); +int RE_is_rendering_allowed(struct Scene *scene, void *erh, void (*error)(void *handle, char *str)); + #endif /* RE_PIPELINE_H */ diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h index 65eda26ef9b..79913ef1b6c 100644 --- a/source/blender/render/intern/include/render_types.h +++ b/source/blender/render/intern/include/render_types.h @@ -131,7 +131,8 @@ struct Render ThreadRWMutex resultmutex; /* window size, display rect, viewplane */ - int winx, winy; + int winx, winy; /* buffer width and height with percentage applied + * without border & crop. convert to long before multiplying together to avoid overflow. */ rcti disprect; /* part within winx winy */ rctf viewplane; /* mapped on winx winy */ float viewdx, viewdy; /* size of 1 pixel */ diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index e70287e522e..89176944652 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -1485,7 +1485,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem ParticleKey state; ParticleCacheKey *cache=0; ParticleBillboardData bb; - ParticleSimulationData sim = {re->scene, ob, psys, NULL}; + ParticleSimulationData sim = {0}; ParticleStrandData sd; StrandBuffer *strandbuf=0; StrandVert *svert=0; @@ -1519,10 +1519,15 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem /* 2. start initialising things */ /* last possibility to bail out! */ - sim.psmd = psmd = psys_get_modifier(ob,psys); + psmd = psys_get_modifier(ob,psys); if(!(psmd->modifier.mode & eModifierMode_Render)) return 0; + sim.scene= re->scene; + sim.ob= ob; + sim.psys= psys; + sim.psmd= psmd; + if(part->phystype==PART_PHYS_KEYED) psys_count_keyed_targets(&sim); @@ -5186,7 +5191,7 @@ static void calculate_speedvector(float *vectors, int step, float winsq, float w static float *calculate_strandsurface_speedvectors(Render *re, ObjectInstanceRen *obi, StrandSurface *mesh) { - float winsq= re->winx*re->winy, winroot= sqrt(winsq), (*winspeed)[4]; + float winsq= (float)re->winx*(float)re->winy, winroot= sqrt(winsq), (*winspeed)[4]; /* int's can wrap on large images */ float ho[4], prevho[4], nextho[4], winmat[4][4], vec[2]; int a; @@ -5225,7 +5230,7 @@ static void calculate_speedvectors(Render *re, ObjectInstanceRen *obi, float *ve StrandSurface *mesh= NULL; float *speed, (*winspeed)[4]=NULL, ho[4], winmat[4][4]; float *co1, *co2, *co3, *co4, w[4]; - float winsq= re->winx*re->winy, winroot= sqrt(winsq); + float winsq= (float)re->winx*(float)re->winy, winroot= sqrt(winsq); /* int's can wrap on large images */ int a, *face, *index; if(obi->flag & R_TRANSFORMED) @@ -5292,7 +5297,7 @@ static int load_fluidsimspeedvectors(Render *re, ObjectInstanceRen *obi, float * VertRen *ver= NULL; float *speed, div, zco[2], avgvel[4] = {0.0, 0.0, 0.0, 0.0}; float zmulx= re->winx/2, zmuly= re->winy/2, len; - float winsq= re->winx*re->winy, winroot= sqrt(winsq); + float winsq= (float)re->winx*(float)re->winy, winroot= sqrt(winsq); /* int's can wrap on large images */ int a, j; float hoco[4], ho[4], fsvec[4], camco[4]; float mat[4][4], winmat[4][4]; diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 2d072a58b2b..4995e98fc07 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -452,7 +452,7 @@ static int passtype_from_name(char *str) return 0; } -static void render_unique_exr_name(Render *re, char *str, int sample) +static void scene_unique_exr_name(Scene *scene, char *str, int sample) { char di[FILE_MAX], name[FILE_MAXFILE+MAX_ID_NAME+100], fi[FILE_MAXFILE]; @@ -460,13 +460,18 @@ static void render_unique_exr_name(Render *re, char *str, int sample) BLI_splitdirstring(di, fi); if(sample==0) - sprintf(name, "%s_%s.exr", fi, re->scene->id.name+2); + sprintf(name, "%s_%s.exr", fi, scene->id.name+2); else - sprintf(name, "%s_%s%d.exr", fi, re->scene->id.name+2, sample); + sprintf(name, "%s_%s%d.exr", fi, scene->id.name+2, sample); BLI_make_file_string("/", str, btempdir, name); } +static void render_unique_exr_name(Render *re, char *str, int sample) +{ + scene_unique_exr_name(re->scene, str, sample); +} + static void render_layer_add_pass(RenderResult *rr, RenderLayer *rl, int channels, int passtype) { char *typestr= get_pass_name(passtype, 0); @@ -1163,6 +1168,18 @@ Render *RE_NewRender(const char *name) BLI_rw_mutex_init(&re->resultmutex); } + RE_InitRenderCB(re); + + /* init some variables */ + re->ycor= 1.0f; + + return re; +} + +/* called for new renders and when finishing rendering so + * we calways have valid callbacks on a render */ +void RE_InitRenderCB(Render *re) +{ /* set default empty callbacks */ re->display_init= result_nothing; re->display_clear= result_nothing; @@ -1176,11 +1193,6 @@ Render *RE_NewRender(const char *name) re->stats_draw= stats_nothing; /* clear callback handles */ re->dih= re->dch= re->ddh= re->sdh= re->prh= re->tbh= re->erh= NULL; - - /* init some variables */ - re->ycor= 1.0f; - - return re; } /* only call this while you know it will remove the link too */ @@ -1542,8 +1554,10 @@ static RenderPart *find_next_pano_slice(Render *re, int *minx, rctf *viewplane) static RenderPart *find_next_part(Render *re, int minx) { RenderPart *pa, *best= NULL; - int centx=re->winx/2, centy=re->winy/2, tot=1; - int mindist, distx, disty; + + /* long long int's needed because of overflow [#24414] */ + long long int centx=re->winx/2, centy=re->winy/2, tot=1; + long long int mindist= (long long int)re->winx * (long long int)re->winy; /* find center of rendered parts, image center counts for 1 too */ for(pa= re->parts.first; pa; pa= pa->next) { @@ -1557,12 +1571,11 @@ static RenderPart *find_next_part(Render *re, int minx) centy/=tot; /* closest of the non-rendering parts */ - mindist= re->winx*re->winy; for(pa= re->parts.first; pa; pa= pa->next) { if(pa->ready==0 && pa->nr==0) { - distx= centx - (pa->disprect.xmin+pa->disprect.xmax)/2; - disty= centy - (pa->disprect.ymin+pa->disprect.ymax)/2; - distx= (int)sqrt(distx*distx + disty*disty); + long long int distx= centx - (pa->disprect.xmin+pa->disprect.xmax)/2; + long long int disty= centy - (pa->disprect.ymin+pa->disprect.ymax)/2; + distx= (long long int)sqrt(distx*distx + disty*disty); if(distxr.mode & R_PANORAMA) { if(pa->disprect.xmin==minx) { @@ -1975,7 +1988,7 @@ static void do_render_fields_3d(Render *re) /* first field, we have to call camera routine for correct aspect and subpixel offset */ RE_SetCamera(re, re->scene->camera); - if(re->r.mode & R_MBLUR) + if(re->r.mode & R_MBLUR && (re->r.scemode & R_FULL_SAMPLE)==0) do_render_blur_3d(re); else do_render_3d(re); @@ -1995,7 +2008,7 @@ static void do_render_fields_3d(Render *re) re->field_offs = 0.5f; } RE_SetCamera(re, re->scene->camera); - if(re->r.mode & R_MBLUR) + if(re->r.mode & R_MBLUR && (re->r.scemode & R_FULL_SAMPLE)==0) do_render_blur_3d(re); else do_render_3d(re); @@ -2085,7 +2098,7 @@ static void do_render_fields_blur_3d(Render *re) if(re->r.mode & R_FIELDS) do_render_fields_3d(re); - else if(re->r.mode & R_MBLUR) + else if(re->r.mode & R_MBLUR && (re->r.scemode & R_FULL_SAMPLE)==0) do_render_blur_3d(re); else do_render_3d(re); @@ -2386,10 +2399,12 @@ static void do_merge_fullsample(Render *re, bNodeTree *ntree) BLI_rw_mutex_unlock(&re->resultmutex); } -void RE_MergeFullSample(Render *re, Scene *sce, bNodeTree *ntree) +void RE_MergeFullSample(Render *re, Main *bmain, Scene *sce, bNodeTree *ntree) { Scene *scene; bNode *node; + + re->main= bmain; /* first call RE_ReadRenderResult on every renderlayer scene. this creates Render structs */ @@ -2585,6 +2600,12 @@ static void do_render_seq(Render * re) /* if (R.rectz) freeN(R.rectz); */ /* R.rectz = BLI_dupallocN(ibuf->zbuf); */ /* } */ + + /* Same things as above, old rectf can hang around from previous render. */ + if(rr->rectf) { + MEM_freeN(rr->rectf); + rr->rectf= NULL; + } } if (recurs_depth == 0) { /* with nested scenes, only free on toplevel... */ @@ -2654,61 +2675,112 @@ static void do_render_all_options(Render *re) } } -static int is_rendering_allowed(Render *re) +static int check_valid_camera(Scene *scene) +{ + int check_comp= 1; + + if (scene->camera == NULL) + scene->camera= scene_find_camera(scene); + + if(scene->r.scemode&R_DOSEQ) { + if(scene->ed) { + Sequence *seq= scene->ed->seqbase.first; + + check_comp= 0; + + while(seq) { + if(seq->type == SEQ_SCENE) { + if(!seq->scene_camera) { + if(!seq->scene->camera && !scene_find_camera(seq->scene)) { + if(seq->scene == scene) { + /* for current scene camera could be unneeded due to compisite nodes */ + check_comp= 1; + } else { + /* for other scenes camera is necessary */ + return 0; + } + } + } + } + + seq= seq->next; + } + } + } + + if(check_comp) { /* no sequencer or sequencer depends on compositor */ + if(scene->r.scemode&R_DOCOMP && scene->use_nodes) { + bNode *node= scene->nodetree->nodes.first; + + while(node) { + if(node->type == CMP_NODE_R_LAYERS) { + Scene *sce= node->id ? (Scene*)node->id : scene; + + if(!sce->camera && !scene_find_camera(sce)) { + /* all render layers nodes need camera */ + return 0; + } + } + + node= node->next; + } + } else return scene->camera != NULL; + } + + return 1; +} + +int RE_is_rendering_allowed(Scene *scene, void *erh, void (*error)(void *handle, char *str)) { SceneRenderLayer *srl; /* forbidden combinations */ - if(re->r.mode & R_PANORAMA) { - if(re->r.mode & R_BORDER) { - re->error(re->erh, "No border supported for Panorama"); + if(scene->r.mode & R_PANORAMA) { + if(scene->r.mode & R_BORDER) { + error(erh, "No border supported for Panorama"); return 0; } - if(re->r.mode & R_ORTHO) { - re->error(re->erh, "No Ortho render possible for Panorama"); + if(scene->r.mode & R_ORTHO) { + error(erh, "No Ortho render possible for Panorama"); return 0; } } - if(re->r.mode & R_BORDER) { - if(re->r.border.xmax <= re->r.border.xmin || - re->r.border.ymax <= re->r.border.ymin) { - re->error(re->erh, "No border area selected."); + if(scene->r.mode & R_BORDER) { + if(scene->r.border.xmax <= scene->r.border.xmin || + scene->r.border.ymax <= scene->r.border.ymin) { + error(erh, "No border area selected."); return 0; } } - if(re->r.scemode & (R_EXR_TILE_FILE|R_FULL_SAMPLE)) { + if(scene->r.scemode & (R_EXR_TILE_FILE|R_FULL_SAMPLE)) { char str[FILE_MAX]; - render_unique_exr_name(re, str, 0); + scene_unique_exr_name(scene, str, 0); if (BLI_is_writable(str)==0) { - re->error(re->erh, "Can not save render buffers, check the temp default path"); + error(erh, "Can not save render buffers, check the temp default path"); return 0; } - /* no osa + fullsample won't work... */ - if(re->osa==0) - re->r.scemode &= ~R_FULL_SAMPLE; - /* no fullsample and edge */ - if((re->r.scemode & R_FULL_SAMPLE) && (re->r.mode & R_EDGE)) { - re->error(re->erh, "Full Sample doesn't support Edge Enhance"); + if((scene->r.scemode & R_FULL_SAMPLE) && (scene->r.mode & R_EDGE)) { + error(erh, "Full Sample doesn't support Edge Enhance"); return 0; } } else - re->r.scemode &= ~R_FULL_SAMPLE; /* clear to be sure */ + scene->r.scemode &= ~R_FULL_SAMPLE; /* clear to be sure */ - if(re->r.scemode & R_DOCOMP) { - if(re->scene->use_nodes) { - bNodeTree *ntree= re->scene->nodetree; + if(scene->r.scemode & R_DOCOMP) { + if(scene->use_nodes) { + bNodeTree *ntree= scene->nodetree; bNode *node; if(ntree==NULL) { - re->error(re->erh, "No Nodetree in Scene"); + error(erh, "No Nodetree in Scene"); return 0; } @@ -2718,46 +2790,51 @@ static int is_rendering_allowed(Render *re) if(node==NULL) { - re->error(re->erh, "No Render Output Node in Scene"); + error(erh, "No Render Output Node in Scene"); return 0; } } } /* check valid camera, without camera render is OK (compo, seq) */ - if(re->scene->camera==NULL) - re->scene->camera= scene_find_camera(re->scene); - - if(!(re->r.scemode & (R_DOSEQ|R_DOCOMP))) { - if(re->scene->camera==NULL) { - re->error(re->erh, "No camera"); - return 0; - } + if(!check_valid_camera(scene)) { + error(erh, "No camera"); + return 0; } /* layer flag tests */ - if(re->r.scemode & R_SINGLE_LAYER) { - srl= BLI_findlink(&re->scene->r.layers, re->r.actlay); + if(scene->r.scemode & R_SINGLE_LAYER) { + srl= BLI_findlink(&scene->r.layers, scene->r.actlay); /* force layer to be enabled */ srl->layflag &= ~SCE_LAY_DISABLE; } - for(srl= re->scene->r.layers.first; srl; srl= srl->next) + for(srl= scene->r.layers.first; srl; srl= srl->next) if(!(srl->layflag & SCE_LAY_DISABLE)) break; if(srl==NULL) { - re->error(re->erh, "All RenderLayers are disabled"); + error(erh, "All RenderLayers are disabled"); return 0; } /* renderer */ - if(!ELEM(re->r.renderer, R_INTERN, R_YAFRAY)) { - re->error(re->erh, "Unknown render engine set"); + if(!ELEM(scene->r.renderer, R_INTERN, R_YAFRAY)) { + error(erh, "Unknown render engine set"); return 0; } + return 1; } +static void validate_render_settings(Render *re) +{ + if(re->r.scemode & (R_EXR_TILE_FILE|R_FULL_SAMPLE)) { + /* no osa + fullsample won't work... */ + if(re->r.osa==0) + re->r.scemode &= ~R_FULL_SAMPLE; + } else re->r.scemode &= ~R_FULL_SAMPLE; /* clear to be sure */ +} + static void update_physics_cache(Render *re, Scene *scene, int UNUSED(anim_init)) { PTCacheBaker baker; @@ -2834,10 +2911,9 @@ static int render_initialize_from_main(Render *re, Main *bmain, Scene *scene, Sc /* initstate makes new result, have to send changed tags around */ ntreeCompositTagRender(re->scene); - - if(!is_rendering_allowed(re)) - return 0; - + + validate_render_settings(re); + re->display_init(re->dih, re->result); re->display_clear(re->dch, re->result); diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c index d8156594085..a5609390ef4 100644 --- a/source/blender/render/intern/source/pointdensity.c +++ b/source/blender/render/intern/source/pointdensity.c @@ -94,7 +94,7 @@ static void pointdensity_cache_psys(Render *re, PointDensity *pd, Object *ob, Pa { DerivedMesh* dm; ParticleKey state; - ParticleSimulationData sim = {re->scene, ob, psys, NULL}; + ParticleSimulationData sim= {0}; ParticleData *pa=NULL; float cfra = BKE_curframe(re->scene); int i, childexists; @@ -103,10 +103,9 @@ static void pointdensity_cache_psys(Render *re, PointDensity *pd, Object *ob, Pa float partco[3]; float obview[4][4]; - /* init everything */ if (!psys || !ob || !pd) return; - + mul_m4_m4m4(obview, re->viewinv, ob->obmat); /* Just to create a valid rendering context for particles */ @@ -119,6 +118,10 @@ static void pointdensity_cache_psys(Render *re, PointDensity *pd, Object *ob, Pa return; } + sim.scene= re->scene; + sim.ob= ob; + sim.psys= psys; + /* in case ob->imat isn't up-to-date */ invert_m4_m4(ob->imat, ob->obmat); diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c index 1172bee7d67..17ec48c8422 100644 --- a/source/blender/render/intern/source/rayshade.c +++ b/source/blender/render/intern/source/rayshade.c @@ -718,7 +718,7 @@ static void traceray(ShadeInput *origshi, ShadeResult *origshr, short depth, flo shi.mask= origshi->mask; shi.osatex= origshi->osatex; - shi.depth= 1; /* only used to indicate tracing */ + shi.depth= origshi->depth + 1; /* only used to indicate tracing */ shi.thread= origshi->thread; //shi.sample= 0; // memset above, so dont need this shi.xs= origshi->xs; @@ -1458,8 +1458,8 @@ void ray_trace(ShadeInput *shi, ShadeResult *shr) float diff[3]; int do_tra, do_mir; - do_tra= ((shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_RAYTRANSP) && shr->alpha!=1.0f); - do_mir= ((shi->mat->mode & MA_RAYMIRROR) && shi->ray_mirror!=0.0f); + do_tra= ((shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_RAYTRANSP) && shr->alpha!=1.0f && (shi->depth <= shi->mat->ray_depth_tra)); + do_mir= ((shi->mat->mode & MA_RAYMIRROR) && shi->ray_mirror!=0.0f && (shi->depth <= shi->mat->ray_depth)); /* raytrace mirror amd refract like to separate the spec color */ if(shi->combinedflag & SCE_PASS_SPEC) @@ -1570,7 +1570,7 @@ static void ray_trace_shadow_tra(Isect *is, ShadeInput *origshi, int depth, int memset(&shi, 0, sizeof(ShadeInput)); /* end warning! - Campbell */ - shi.depth= 1; /* only used to indicate tracing */ + shi.depth= origshi->depth + 1; /* only used to indicate tracing */ shi.mask= origshi->mask; shi.thread= origshi->thread; shi.passflag= SCE_PASS_COMBINED; diff --git a/source/blender/render/intern/source/strand.c b/source/blender/render/intern/source/strand.c index 88d042e7b97..be17d640b66 100644 --- a/source/blender/render/intern/source/strand.c +++ b/source/blender/render/intern/source/strand.c @@ -825,6 +825,8 @@ int zbuffer_strands_abuf(Render *re, RenderPart *pa, APixstrand *apixbuf, ListBa /* for all object instances */ for(obi=re->instancetable.first, i=0; obi; obi=obi->next, i++) { + Material *ma; + obr= obi->obr; if(!obr->strandbuf || !(obr->strandbuf->lay & lay)) @@ -836,6 +838,14 @@ int zbuffer_strands_abuf(Render *re, RenderPart *pa, APixstrand *apixbuf, ListBa else copy_m4_m4(obwinmat, winmat); + /* test if we should skip it */ + ma = obr->strandbuf->ma; + + if(shadow && !(ma->mode & MA_SHADBUF)) + continue; + else if(!shadow && (ma->mode & MA_ONLYCAST)) + continue; + if(clip_render_object(obi->obr->boundbox, bounds, winmat)) continue; diff --git a/source/blender/render/intern/source/volume_precache.c b/source/blender/render/intern/source/volume_precache.c index 39e8315e7cf..ccdef6006d4 100644 --- a/source/blender/render/intern/source/volume_precache.c +++ b/source/blender/render/intern/source/volume_precache.c @@ -91,12 +91,11 @@ int intersect_outside_volume(RayObject *tree, Isect *isect, float *offset, int l /* Uses ray tracing to check if a point is inside or outside an ObjectInstanceRen */ int point_inside_obi(RayObject *tree, ObjectInstanceRen *UNUSED(obi), float *co) { - Isect isect; + Isect isect= {{0}}; float vec[3] = {0.0f,0.0f,1.0f}; int final_depth=0, depth=0, limit=20; /* set up the isect */ - memset(&isect, 0, sizeof(isect)); VECCOPY(isect.start, co); VECCOPY(isect.vec, vec); isect.mode= RE_RAY_MIRROR; @@ -486,7 +485,11 @@ static void *vol_precache_part(void *data) float scatter_col[3] = {0.f, 0.f, 0.f}; float co[3], cco[3]; int x, y, z, i; - const int res[3]= {pa->res[0], pa->res[1], pa->res[2]}; + int res[3]; + + res[0]= pa->res[0]; + res[1]= pa->res[1]; + res[2]= pa->res[2]; for (z= pa->minz; z < pa->maxz; z++) { co[2] = pa->bbmin[2] + (pa->voxel[2] * (z + 0.5f)); diff --git a/source/blender/windowmanager/CMakeLists.txt b/source/blender/windowmanager/CMakeLists.txt index 36d9f2b5c8c..6c93334fd0a 100644 --- a/source/blender/windowmanager/CMakeLists.txt +++ b/source/blender/windowmanager/CMakeLists.txt @@ -33,7 +33,6 @@ SET(INC ../makesdna ../makesrna ../blenkernel - ../include ../imbuf ../blenloader ../editors/include @@ -87,10 +86,13 @@ ENDIF(WITH_FFMPEG) IF(WITH_PYTHON) LIST(APPEND INC ../python ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) +IF(WITH_GAMEENGINE) + ADD_DEFINITIONS(-DWITH_GAMEENGINE) +ENDIF(WITH_GAMEENGINE) + IF(WIN32) LIST(APPEND INC ${PTHREADS_INC}) ENDIF(WIN32) diff --git a/source/blender/windowmanager/SConscript b/source/blender/windowmanager/SConscript index 51168d7a9d3..cbaf74ddc10 100644 --- a/source/blender/windowmanager/SConscript +++ b/source/blender/windowmanager/SConscript @@ -16,8 +16,8 @@ incs += ' #/intern/elbeem #/extern/glew/include' defs = [ 'GLEW_STATIC' ] -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') if env['WITH_BF_COLLADA']: defs.append('WITH_COLLADA') diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 2a36e91ac66..7d4690ac7e1 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -218,6 +218,7 @@ struct wmOperatorTypeMacro *WM_operatortype_macro_define(struct wmOperatorType * int WM_operator_poll (struct bContext *C, struct wmOperatorType *ot); +int WM_operator_poll_context(struct bContext *C, struct wmOperatorType *ot, int context); int WM_operator_call (struct bContext *C, struct wmOperator *op); int WM_operator_repeat (struct bContext *C, struct wmOperator *op); int WM_operator_name_call (struct bContext *C, const char *opstring, int context, struct PointerRNA *properties); diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index 1b0870194a6..76b5762fa4e 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -58,7 +58,7 @@ #include "ED_screen.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -69,7 +69,7 @@ void WM_operator_free(wmOperator *op) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(op->py_instance) { /* do this first incase there are any __del__ functions or * similar that use properties */ @@ -232,12 +232,13 @@ void WM_check(bContext *C) /* case: no open windows at all, for old file reads */ wm_window_add_ghostwindows(C, wm); + } - /* case: fileread */ - if((wm->initialized & WM_INIT_WINDOW) == 0) { - ED_screens_initialize(wm); - wm->initialized |= WM_INIT_WINDOW; - } + /* case: fileread */ + /* note: this runs in bg mode to set the screen context cb */ + if((wm->initialized & WM_INIT_WINDOW) == 0) { + ED_screens_initialize(wm); + wm->initialized |= WM_INIT_WINDOW; } } @@ -274,7 +275,7 @@ void wm_add_default(bContext *C) win= wm_window_new(C); win->screen= screen; screen->winid= win->winid; - BLI_strncpy(win->screenname, screen->id.name+2, 21); + BLI_strncpy(win->screenname, screen->id.name+2, sizeof(win->screenname)); wm->winactive= win; wm->file_saved= 1; diff --git a/source/blender/windowmanager/intern/wm_cursors.c b/source/blender/windowmanager/intern/wm_cursors.c index 1803a1cee91..ab49c8a34bf 100644 --- a/source/blender/windowmanager/intern/wm_cursors.c +++ b/source/blender/windowmanager/intern/wm_cursors.c @@ -216,16 +216,13 @@ void WM_timecursor(wmWindow *win, int nr) {0, 60, 66, 66, 60, 66, 66, 60}, {0, 56, 68, 68, 120, 64, 68, 56} }; - unsigned char mask[16][2]; - unsigned char bitmap[16][2]; + unsigned char mask[16][2]= {{0}}; + unsigned char bitmap[16][2]= {{0}}; int i, idx; if(win->lastcursor == 0) win->lastcursor= win->cursor; - memset(&bitmap, 0x00, sizeof(bitmap)); - memset(&mask, 0xFF, sizeof(mask)); - /* print number bottom right justified */ for (idx= 3; nr && idx>=0; idx--) { char *digit= number_bitmaps[nr%10]; diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 47ca4314cc7..910a528d419 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -72,6 +72,8 @@ #include "wm_event_types.h" #include "wm_draw.h" +static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, PointerRNA *properties, ReportList *reports, short context, short poll_only); + /* ************ event management ************** */ void wm_event_add(wmWindow *win, wmEvent *event_to_add) @@ -241,7 +243,7 @@ void wm_event_do_notifiers(bContext *C) if(!G.rendering) { /* depsgraph gets called, might send more notifiers */ - ED_update_for_newframe(C, 1); + ED_update_for_newframe(CTX_data_main(C), win->screen->scene, win->screen, 1); } } } @@ -364,9 +366,9 @@ int WM_operator_poll(bContext *C, wmOperatorType *ot) wmOperatorTypeMacro *otmacro; for(otmacro= ot->macro.first; otmacro; otmacro= otmacro->next) { - wmOperatorType *ot= WM_operatortype_find(otmacro->idname, 0); + wmOperatorType *ot_macro= WM_operatortype_find(otmacro->idname, 0); - if(0==WM_operator_poll(C, ot)) + if(0==WM_operator_poll(C, ot_macro)) return 0; } @@ -379,6 +381,12 @@ int WM_operator_poll(bContext *C, wmOperatorType *ot) return 1; } +/* sets up the new context and calls 'wm_operator_invoke()' with poll_only */ +int WM_operator_poll_context(bContext *C, wmOperatorType *ot, int context) +{ + return wm_operator_call_internal(C, ot, NULL, NULL, context, TRUE); +} + static void wm_operator_print(wmOperator *op) { char *buf = WM_operator_pystring(NULL, op->type, op->ptr, 1); @@ -603,11 +611,15 @@ static void wm_region_mouse_co(bContext *C, wmEvent *event) } } -int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, PointerRNA *properties, ReportList *reports) +int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, PointerRNA *properties, ReportList *reports, short poll_only) { wmWindowManager *wm= CTX_wm_manager(C); int retval= OPERATOR_PASS_THROUGH; + /* this is done because complicated setup is done to call this function that is better not duplicated */ + if(poll_only) + return WM_operator_poll(C, ot); + if(WM_operator_poll(C, ot)) { wmOperator *op= wm_operator_create(wm, ot, properties, reports); /* if reports==NULL, theyll be initialized */ @@ -693,7 +705,7 @@ int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, PointerR * this is for python to access since its done the operator lookup * * invokes operator in context */ -static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int context, PointerRNA *properties, ReportList *reports) +static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, PointerRNA *properties, ReportList *reports, short context, short poll_only) { wmWindow *window= CTX_wm_window(C); wmEvent *event; @@ -758,7 +770,7 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex CTX_wm_region_set(C, ar1); } - retval= wm_operator_invoke(C, ot, event, properties, reports); + retval= wm_operator_invoke(C, ot, event, properties, reports, poll_only); /* set region back */ CTX_wm_region_set(C, ar); @@ -772,7 +784,7 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex ARegion *ar= CTX_wm_region(C); CTX_wm_region_set(C, NULL); - retval= wm_operator_invoke(C, ot, event, properties, reports); + retval= wm_operator_invoke(C, ot, event, properties, reports, poll_only); CTX_wm_region_set(C, ar); return retval; @@ -786,7 +798,7 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex CTX_wm_region_set(C, NULL); CTX_wm_area_set(C, NULL); - retval= wm_operator_invoke(C, ot, event, properties, reports); + retval= wm_operator_invoke(C, ot, event, properties, reports, poll_only); CTX_wm_region_set(C, ar); CTX_wm_area_set(C, area); @@ -794,7 +806,7 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex } case WM_OP_EXEC_DEFAULT: case WM_OP_INVOKE_DEFAULT: - return wm_operator_invoke(C, ot, event, properties, reports); + return wm_operator_invoke(C, ot, event, properties, reports, poll_only); } } @@ -807,7 +819,7 @@ int WM_operator_name_call(bContext *C, const char *opstring, int context, Pointe { wmOperatorType *ot= WM_operatortype_find(opstring, 0); if(ot) - return wm_operator_call_internal(C, ot, context, properties, NULL); + return wm_operator_call_internal(C, ot, properties, NULL, context, FALSE); return 0; } @@ -839,7 +851,7 @@ int WM_operator_call_py(bContext *C, wmOperatorType *ot, int context, PointerRNA printf("error \"%s\" operator has no exec function, python cannot call it\n", op->type->name); #endif - retval= wm_operator_call_internal(C, ot, context, properties, reports); + retval= wm_operator_call_internal(C, ot, properties, reports, context, FALSE); /* keep the reports around if needed later */ if ( (retval & OPERATOR_RUNNING_MODAL) || @@ -1168,7 +1180,7 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand wmOperatorType *ot= WM_operatortype_find(event->keymap_idname, 0); if(ot) - retval= wm_operator_invoke(C, ot, event, properties, NULL); + retval= wm_operator_invoke(C, ot, event, properties, NULL, FALSE); } /* Finished and pass through flag as handled */ @@ -1421,7 +1433,7 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers) if(drop->poll(C, drag, event)) { drop->copy(drag, drop); - wm_operator_invoke(C, drop->ot, event, drop->ptr, NULL); + wm_operator_invoke(C, drop->ot, event, drop->ptr, NULL, FALSE); action |= WM_HANDLER_BREAK; } } @@ -1636,7 +1648,7 @@ void wm_event_do_handlers(bContext *C) int ncfra = sound_sync_scene(scene) * FPS + 0.5; if(ncfra != scene->r.cfra) { scene->r.cfra = ncfra; - ED_update_for_newframe(C, 1); + ED_update_for_newframe(CTX_data_main(C), scene, win->screen, 1); WM_event_add_notifier(C, NC_WINDOW, NULL); } } diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index 6db7f2554c4..ca37f0db61b 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -96,7 +96,7 @@ #include "GPU_draw.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -195,7 +195,7 @@ static void wm_window_match_do(bContext *C, ListBase *oldwmlist) else win->screen= ED_screen_duplicate(win, screen); - BLI_strncpy(win->screenname, win->screen->id.name+2, 21); + BLI_strncpy(win->screenname, win->screen->id.name+2, sizeof(win->screenname)); win->screen->winid= win->winid; } } @@ -317,7 +317,7 @@ void WM_read_file(bContext *C, char *name, ReportList *reports) ED_editors_init(C); DAG_on_load_update(CTX_data_main(C)); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* run any texts that were loaded in and flagged as modules */ BPY_load_user_modules(C); #endif @@ -400,7 +400,7 @@ int WM_read_homefile(bContext *C, wmOperator *op) ED_editors_init(C); DAG_on_load_update(CTX_data_main(C)); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(CTX_py_init_get(C)) { /* sync addons, these may have changed from the defaults */ BPY_eval_string(C, "__import__('bpy').utils.addon_reset_all()"); diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c index 8dcf65886e4..c1e28654f73 100644 --- a/source/blender/windowmanager/intern/wm_gesture.c +++ b/source/blender/windowmanager/intern/wm_gesture.c @@ -232,8 +232,12 @@ static void draw_filled_lasso(wmGesture *gt) int i; for (i=0; ipoints; i++, lasso+=2) { - float co[3] = {(float)lasso[0], (float)lasso[1], 0.f}; - + float co[3]; + + co[0]= (float)lasso[0]; + co[1]= (float)lasso[1]; + co[2]= 0.0f; + v = BLI_addfillvert(co); if (lastv) e = BLI_addfilledge(lastv, v); diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index e373579577d..d98459a113c 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -61,11 +61,13 @@ #include "RE_pipeline.h" /* RE_ free stuff */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif +#ifdef WITH_GAMEENGINE #include "SYS_System.h" +#endif #include "RNA_define.h" @@ -141,7 +143,7 @@ void WM_init(bContext *C, int argc, char **argv) * before WM_read_homefile() or make py-drivers check if python is running. * Will try fix when the crash can be repeated. - campbell. */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON BPY_set_context(C); /* necessary evil */ BPY_start_python(argc, argv); BPY_load_user_modules(C); @@ -396,7 +398,7 @@ void WM_exit(bContext *C) // free_txt_data(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* XXX - old note */ /* before free_blender so py's gc happens while library still exists */ /* needed at least for a rare sigsegv that can happen in pydrivers */ @@ -432,9 +434,9 @@ void WM_exit(bContext *C) wm_ghost_exit(); CTX_free(C); - +#ifdef WITH_GAMEENGINE SYS_DeleteSystem(SYS_GetSystem()); - +#endif if(MEM_get_memory_blocks_in_use()!=0) { printf("Error Totblock: %d\n", MEM_get_memory_blocks_in_use()); MEM_printmemlist(); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index ccdb19adfce..7fa58db54bb 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -31,6 +31,7 @@ #include #include #include +#include #ifdef WIN32 #include #include @@ -889,6 +890,11 @@ static uiBlock *wm_block_create_redo(bContext *C, ARegion *ar, void *arg_op) block= uiBeginBlock(C, ar, "redo_popup", UI_EMBOSS); uiBlockClearFlag(block, UI_BLOCK_LOOP); uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN|UI_BLOCK_RET_1|UI_BLOCK_MOVEMOUSE_QUIT); + + /* if register is not enabled, the operator gets freed on OPERATOR_FINISHED + * ui_apply_but_funcs_after calls redo_cb and crashes */ + assert(op->type->flag & OPTYPE_REGISTER); + uiBlockSetHandleFunc(block, redo_cb, arg_op); if(!op->properties) { @@ -1021,6 +1027,11 @@ int WM_operator_props_popup(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) { int retval= OPERATOR_CANCELLED; + if((op->type->flag & OPTYPE_REGISTER)==0) { + BKE_reportf(op->reports, RPT_ERROR, "Operator '%s' does not have register enabled, incorrect invoke function.", op->type->idname); + return OPERATOR_CANCELLED; + } + if(op->type->exec) { retval= op->type->exec(C, op); @@ -1059,6 +1070,11 @@ int WM_operator_ui_popup(bContext *C, wmOperator *op, int width, int height) int WM_operator_redo_popup(bContext *C, wmOperator *op) { + if((op->type->flag & OPTYPE_REGISTER)==0) { + BKE_reportf(op->reports, RPT_ERROR, "Operator '%s' does not have register enabled, incorrect invoke function.", op->type->idname); + return OPERATOR_CANCELLED; + } + uiPupBlock(C, wm_block_create_redo, op); return OPERATOR_CANCELLED; @@ -1904,7 +1920,7 @@ static void WM_OT_save_mainfile(wmOperatorType *ot) #include "../../collada/collada.h" -static int wm_collada_export_invoke(bContext *C, wmOperator *op, wmEvent *event) +static int wm_collada_export_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) { if(!RNA_property_is_set(op->ptr, "filepath")) { char filepath[FILE_MAX]; @@ -2850,7 +2866,10 @@ int WM_radial_control_invoke(bContext *C, wmOperator *op, wmEvent *event) int mode = RNA_int_get(op->ptr, "mode"); float initial_value = RNA_float_get(op->ptr, "initial_value"); //float initial_size = RNA_float_get(op->ptr, "initial_size"); - int mouse[2] = {event->x, event->y}; + int mouse[2]; + + mouse[0]= event->x; + mouse[1]= event->y; //if (initial_size == 0) // initial_size = WM_RADIAL_CONTROL_DISPLAY_SIZE; @@ -2986,7 +3005,8 @@ static int redraw_timer_exec(bContext *C, wmOperator *op) for(a=0; ascreen= ED_screen_duplicate(win, winorig->screen); - BLI_strncpy(win->screenname, win->screen->id.name+2, 21); + BLI_strncpy(win->screenname, win->screen->id.name+2, sizeof(win->screenname)); win->screen->winid= win->winid; win->screen->do_refresh= 1; diff --git a/source/blenderplayer/CMakeLists.txt b/source/blenderplayer/CMakeLists.txt index b1dbde8d4b1..6c97c2a4465 100644 --- a/source/blenderplayer/CMakeLists.txt +++ b/source/blenderplayer/CMakeLists.txt @@ -74,8 +74,8 @@ IF(UNIX) bf_converter bf_ketsji bf_bullet + bf_dummy bf_common - bf_dummy bf_logic bf_rasterizer bf_oglrasterizer diff --git a/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt b/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt index a242c8b7551..28510b0a113 100644 --- a/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt +++ b/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt @@ -48,7 +48,7 @@ IF(WITH_BUILDINFO) ENDIF(WITH_BUILDINFO) IF(WITH_GAMEENGINE) - ADD_DEFINITIONS(-DGAMEBLENDER) + ADD_DEFINITIONS(-DWITH_GAMEENGINE) ENDIF(WITH_GAMEENGINE) IF(WITH_INTERNATIONAL) diff --git a/source/blenderplayer/bad_level_call_stubs/SConscript b/source/blenderplayer/bad_level_call_stubs/SConscript index 5d71f83719f..0217f1aeacc 100644 --- a/source/blenderplayer/bad_level_call_stubs/SConscript +++ b/source/blenderplayer/bad_level_call_stubs/SConscript @@ -12,6 +12,6 @@ if env['WITH_BF_INTERNATIONAL']: defs += 'WITH_FREETYPE2' if env['WITH_BF_GAMEENGINE']: - defs += ' GAMEBLENDER=1' + defs += ' WITH_GAMEENGINE' env.BlenderLib ('blenkernel_blc', sources = Split(sources), includes=Split(incs), defines=Split(defs), libtype=['player'],priority=[220] ) diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c index f2970293b05..7f0a57be371 100644 --- a/source/blenderplayer/bad_level_call_stubs/stubs.c +++ b/source/blenderplayer/bad_level_call_stubs/stubs.c @@ -28,7 +28,7 @@ * BKE_bad_level_calls function stubs */ -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE #include #include "DNA_listBase.h" #include "RNA_types.h" @@ -358,6 +358,7 @@ struct wmOperatorTypeMacro *WM_operatortype_macro_define(struct wmOperatorType * int WM_operator_call_py(struct bContext *C, struct wmOperatorType *ot, int context, struct PointerRNA *properties, struct ReportList *reports){return 0;} int WM_operatortype_remove(const char *idname){return 0;} int WM_operator_poll(struct bContext *C, struct wmOperatorType *ot){return 0;} +int WM_operator_poll_context(struct bContext *C, struct wmOperatorType *ot, int context){return 0;} int WM_operator_props_popup(struct bContext *C, struct wmOperator *op, struct wmEvent *event){return 0;} void WM_operator_properties_free(struct PointerRNA *ptr){} void WM_operator_properties_create(struct PointerRNA *ptr, const char *opstring){} @@ -443,4 +444,4 @@ int CSG_PerformBooleanOperation( CSG_VertexIteratorDescriptor obBVertices) { return 0;} -#endif // GAMEBLENDER == 1 +#endif // WITH_GAMEENGINE diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index f0b3ac53343..e42f707a38e 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -41,8 +41,6 @@ INCLUDE_DIRECTORIES( ../blender/gpu ../blender/freestyle ../blender/windowmanager - ../kernel/gen_messaging - ../kernel/gen_system ) IF(WIN32) @@ -75,10 +73,18 @@ ENDIF(WITH_IMAGE_HDR) IF(WITH_PYTHON) INCLUDE_DIRECTORIES(../blender/python) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) +IF(WITH_GAMEENGINE) + INCLUDE_DIRECTORIES( + ../kernel/gen_messaging + ../kernel/gen_system + ) + + ADD_DEFINITIONS(-DWITH_GAMEENGINE) +ENDIF(WITH_GAMEENGINE) + IF(NOT WITH_SDL) ADD_DEFINITIONS(-DDISABLE_SDL) ENDIF(NOT WITH_SDL) @@ -536,13 +542,13 @@ ENDIF(WITH_MOD_FLUID) bf_intern_ctr bf_blroutines bf_converter - bf_dummy + bf_dummy bf_bullet bf_intern_smoke extern_minilzo extern_lzma - bf_common bf_ketsji + bf_common bf_logic bf_rasterizer bf_oglrasterizer diff --git a/source/creator/SConscript b/source/creator/SConscript index d8f875b3d49..96899489c1f 100644 --- a/source/creator/SConscript +++ b/source/creator/SConscript @@ -31,10 +31,9 @@ if not env['WITH_BF_SDL']: if env['WITH_BF_PYTHON']: incs += ' ../blender/python' + defs.append('WITH_PYTHON') if env['BF_DEBUG']: defs.append('_DEBUG') -else: - defs.append('DISABLE_PYTHON') if env['BF_BUILDINFO']: defs.append('BUILD_DATE') diff --git a/source/creator/creator.c b/source/creator/creator.c index a89bef537a9..46176106026 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -57,8 +57,7 @@ #include "BLI_args.h" #include "BLI_threads.h" - -#include "GEN_messaging.h" +#include "BLI_scanfill.h" // for BLI_setErrorCallBack, TODO, move elsewhere #include "DNA_ID.h" #include "DNA_scene_types.h" @@ -80,7 +79,7 @@ #include "IMB_imbuf.h" // for IMB_init -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -99,7 +98,12 @@ #include "FRS_freestyle.h" /* for passing information between creator and gameengine */ +#ifdef WITH_GAMEENGINE +#include "GEN_messaging.h" #include "SYS_System.h" +#else /* dummy */ +#define SYS_SystemHandle int +#endif #include @@ -446,6 +450,9 @@ static int register_extension(int UNUSED(argc), char **UNUSED(argv), void *data) static int no_joystick(int UNUSED(argc), char **UNUSED(argv), void *data) { +#ifndef WITH_GAMEENGINE + (void)data; +#else SYS_SystemHandle *syshandle = data; /** @@ -454,6 +461,7 @@ static int no_joystick(int UNUSED(argc), char **UNUSED(argv), void *data) */ SYS_WriteCommandLineInt(*syshandle, "nojoystick",1); if (G.f & G_DEBUG) printf("disabling nojoystick\n"); +#endif return 0; } @@ -635,8 +643,13 @@ static int set_extension(int argc, char **argv, void *data) static int set_ge_parameters(int argc, char **argv, void *data) { - SYS_SystemHandle syshandle = *(SYS_SystemHandle*)data; int a = 0; +#ifdef WITH_GAMEENGINE + SYS_SystemHandle syshandle = *(SYS_SystemHandle*)data; +#else + (void)data; +#endif + /** gameengine parameters are automaticly put into system -g [paramname = value] @@ -657,7 +670,9 @@ example: { a++; /* assignment */ +#ifdef WITH_GAMEENGINE SYS_WriteCommandLineString(syshandle,paramname,argv[a]); +#endif } else { printf("error: argument assignment (%s) without value.\n",paramname); @@ -666,8 +681,9 @@ example: /* name arg eaten */ } else { +#ifdef WITH_GAMEENGINE SYS_WriteCommandLineInt(syshandle,argv[a],1); - +#endif /* doMipMap */ if (!strcmp(argv[a],"nomipmap")) { @@ -815,7 +831,7 @@ static int set_skip_frame(int argc, char **argv, void *data) } /* macro for ugly context setup/reset */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #define BPY_CTX_SETUP(_cmd) \ { \ wmWindowManager *wm= CTX_wm_manager(C); \ @@ -833,11 +849,11 @@ static int set_skip_frame(int argc, char **argv, void *data) CTX_data_scene_set(C, prevscene); \ } \ -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ static int run_python(int argc, char **argv, void *data) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON bContext *C = data; /* workaround for scripts not getting a bpy.context.scene, causes internal errors elsewhere */ @@ -858,12 +874,12 @@ static int run_python(int argc, char **argv, void *data) (void)argc; (void)argv; (void)data; /* unused */ printf("This blender was built without python support\n"); return 0; -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ } static int run_python_console(int UNUSED(argc), char **argv, void *data) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON bContext *C = data; const char *expr= "__import__('code').interact()"; @@ -874,7 +890,7 @@ static int run_python_console(int UNUSED(argc), char **argv, void *data) (void)argv; (void)data; /* unused */ printf("This blender was built without python support\n"); return 0; -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ } static int load_file(int UNUSED(argc), char **argv, void *data) @@ -900,7 +916,7 @@ static int load_file(int UNUSED(argc), char **argv, void *data) } /* WM_read_file() runs normally but since we're in background mode do here */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* run any texts that were loaded in and flagged as modules */ BPY_load_user_modules(C); #endif @@ -1079,8 +1095,12 @@ int main(int argc, char **argv) IMB_init(); +#ifdef WITH_GAMEENGINE syshandle = SYS_GetSystem(); GEN_init_messaging_system(); +#else + syshandle= 0; +#endif /* first test for background */ ba = BLI_argsInit(argc, argv); /* skip binary path */ @@ -1116,13 +1136,6 @@ int main(int argc, char **argv) #ifndef DISABLE_SDL BLI_setenv("SDL_VIDEODRIVER", "dummy"); -/* I think this is not necessary anymore (04-24-2010 neXyon) -#ifdef __linux__ - // On linux the default SDL driver dma often would not play - // use alsa if none is set - setenv("SDL_AUDIODRIVER", "alsa", 0); -#endif -*/ #endif } else { @@ -1132,7 +1145,7 @@ int main(int argc, char **argv) BLI_where_is_temp( btempdir, 0 ); /* call after loading the startup.blend so we can read U.tempdir */ } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /** * NOTE: the U.pythondir string is NULL until WM_init() is executed, * so we provide the BPY_ function below to append the user defined @@ -1143,7 +1156,8 @@ int main(int argc, char **argv) */ // TODO - U.pythondir - +#else + printf("\n* WARNING * - Blender compiled without Python!\nthis is not intended for typical usage\n\n"); #endif CTX_py_init_set(C, 1); diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp index 858a5964a52..9de4020ecff 100644 --- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp +++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp @@ -142,7 +142,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c BLI_strncpy(pathname, blenderdata->name, sizeof(pathname)); BLI_strncpy(oldsce, G.main->name, sizeof(oldsce)); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON resetGamePythonPath(); // need this so running a second time wont use an old blendfiles path setGamePythonPath(G.main->name); @@ -172,7 +172,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c bool frameRate = (SYS_GetCommandLineInt(syshandle, "show_framerate", 0) != 0); bool animation_record = (SYS_GetCommandLineInt(syshandle, "animation_record", 0) != 0); bool displaylists = (SYS_GetCommandLineInt(syshandle, "displaylists", 0) != 0); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON bool nodepwarnings = (SYS_GetCommandLineInt(syshandle, "ignore_deprecation_warnings", 0) != 0); #endif bool novertexarrays = (SYS_GetCommandLineInt(syshandle, "novertexarrays", 0) != 0); @@ -221,7 +221,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c ketsjiengine->SetUseFixedTime(usefixed); ketsjiengine->SetTimingDisplay(frameRate, profile, properties); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON CValue::SetDeprecationWarnings(nodepwarnings); #endif @@ -311,7 +311,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c if(blenderdata) { BLI_strncpy(G.main->name, blenderdata->name, sizeof(G.main->name)); BLI_strncpy(pathname, blenderdata->name, sizeof(pathname)); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON setGamePythonPath(G.main->name); #endif } @@ -382,11 +382,11 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c scene, canvas); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // some python things PyObject *gameLogic, *gameLogic_keys; setupGamePython(ketsjiengine, startscene, blenderdata, pyGlobalDict, &gameLogic, &gameLogic_keys, 0, NULL); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON //initialize Dome Settings if(scene->gm.stereoflag == STEREO_DOME) @@ -477,7 +477,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c // when exiting the mainloop -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // Clears the dictionary by hand: // This prevents, extra references to global variables // inside the GameLogic dictionary when the python interpreter is finalized. @@ -499,7 +499,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c gameLogic_keys_new = NULL; #endif ketsjiengine->StopEngine(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON exitGamePythonScripting(); #endif networkdevice->Disconnect(); @@ -510,7 +510,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c sceneconverter = NULL; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON Py_DECREF(gameLogic_keys); gameLogic_keys = NULL; #endif @@ -575,7 +575,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c BLI_strncpy(G.main->name, oldsce, sizeof(G.main->name)); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON Py_DECREF(pyGlobalDict); // Release Python's GIL diff --git a/source/gameengine/BlenderRoutines/CMakeLists.txt b/source/gameengine/BlenderRoutines/CMakeLists.txt index 661f9c5b25d..1f895ad0abc 100644 --- a/source/gameengine/BlenderRoutines/CMakeLists.txt +++ b/source/gameengine/BlenderRoutines/CMakeLists.txt @@ -8,7 +8,6 @@ SET(INC ../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer ../../../source/gameengine/Converter ../../../source/blender/imbuf - ../../../intern/ghost/include ../../../intern/moto/include ../../../source/gameengine/Ketsji ../../../source/blender/blenlib @@ -16,8 +15,7 @@ SET(INC ../../../source/blender/blenfont ../../../source/blender/editors/include ../../../source/blender/windowmanager - ../../../source/blender - ../../../source/blender/include + ../../../source/blender ../../../source/blender/makesdna ../../../source/blender/makesrna ../../../source/gameengine/Rasterizer @@ -28,7 +26,6 @@ SET(INC ../../../source/gameengine/Physics/common ../../../source/gameengine/Physics/Bullet ../../../source/gameengine/Network/LoopBackNetwork - ../../../source/blender/misc ../../../source/blender/blenloader ../../../source/blender/gpu ../../../extern/bullet2/src @@ -54,8 +51,7 @@ ENDIF(WITH_FFMPEG) IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(bf_blroutines "${SRC}" "${INC}") diff --git a/source/gameengine/BlenderRoutines/SConscript b/source/gameengine/BlenderRoutines/SConscript index 1a774fc8aba..91dc2692384 100644 --- a/source/gameengine/BlenderRoutines/SConscript +++ b/source/gameengine/BlenderRoutines/SConscript @@ -27,8 +27,7 @@ if env['WITH_BF_FFMPEG']: if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_CXX_GUARDEDALLOC']: defs.append('WITH_CXX_GUARDEDALLOC') diff --git a/source/gameengine/Converter/BL_ActionActuator.cpp b/source/gameengine/Converter/BL_ActionActuator.cpp index b8d4c4e0f04..39e3e87708e 100644 --- a/source/gameengine/Converter/BL_ActionActuator.cpp +++ b/source/gameengine/Converter/BL_ActionActuator.cpp @@ -428,7 +428,7 @@ bool BL_ActionActuator::Update(double curtime, bool frame) return keepgoing; }; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -674,4 +674,4 @@ PyObject* BL_ActionActuator::pyattr_get_channel_names(void *self_v, const KX_PYA return ret; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Converter/BL_ActionActuator.h b/source/gameengine/Converter/BL_ActionActuator.h index 10ce1fad27a..9682c0e45f7 100644 --- a/source/gameengine/Converter/BL_ActionActuator.h +++ b/source/gameengine/Converter/BL_ActionActuator.h @@ -84,7 +84,7 @@ public: bAction* GetAction() { return m_action; } void SetAction(bAction* act) { m_action= act; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_O(BL_ActionActuator,GetChannel); KX_PYMETHOD_DOC(BL_ActionActuator,setChannel); @@ -131,7 +131,7 @@ public: return 1; } } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON protected: diff --git a/source/gameengine/Converter/BL_ArmatureActuator.cpp b/source/gameengine/Converter/BL_ArmatureActuator.cpp index 82b8307a2bc..db36f7e7c38 100644 --- a/source/gameengine/Converter/BL_ArmatureActuator.cpp +++ b/source/gameengine/Converter/BL_ArmatureActuator.cpp @@ -175,7 +175,7 @@ bool BL_ArmatureActuator::Update(double curtime, bool frame) return result; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python Integration Hooks */ @@ -257,5 +257,5 @@ PyObject* BL_ArmatureActuator::pyattr_get_constraint(void *self, const struct KX return constraint->GetProxy(); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Converter/BL_ArmatureActuator.h b/source/gameengine/Converter/BL_ArmatureActuator.h index 72e2e96ea73..b3f9ee2f1f2 100644 --- a/source/gameengine/Converter/BL_ArmatureActuator.h +++ b/source/gameengine/Converter/BL_ArmatureActuator.h @@ -66,14 +66,14 @@ public: virtual bool Update(double curtime, bool frame); virtual void ReParent(SCA_IObject* parent); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* These are used to get and set m_target */ static PyObject* pyattr_get_constraint(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON private: // identify the constraint that this actuator controls diff --git a/source/gameengine/Converter/BL_ArmatureChannel.cpp b/source/gameengine/Converter/BL_ArmatureChannel.cpp index 8f5ec230486..13de701c510 100644 --- a/source/gameengine/Converter/BL_ArmatureChannel.cpp +++ b/source/gameengine/Converter/BL_ArmatureChannel.cpp @@ -33,7 +33,7 @@ #include "BLI_math.h" #include "BLI_string.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyTypeObject BL_ArmatureChannel::Type = { PyVarObject_HEAD_INIT(NULL, 0) @@ -72,7 +72,7 @@ PyObject *BL_ArmatureChannel::NewProxy(bool py_owns) return NewProxyPlus_Ext(this, &Type, m_posechannel, py_owns); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON BL_ArmatureChannel::BL_ArmatureChannel( BL_ArmatureObject *armature, @@ -85,7 +85,7 @@ BL_ArmatureChannel::~BL_ArmatureChannel() { } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // PYTHON @@ -461,4 +461,4 @@ PyObject *BL_ArmatureBone::py_bone_get_children(void *self, const struct KX_PYAT return childrenlist; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Converter/BL_ArmatureChannel.h b/source/gameengine/Converter/BL_ArmatureChannel.h index 79f0cc80348..e1c18215c53 100644 --- a/source/gameengine/Converter/BL_ArmatureChannel.h +++ b/source/gameengine/Converter/BL_ArmatureChannel.h @@ -57,7 +57,7 @@ public: struct bPoseChannel *posechannel); virtual ~BL_ArmatureChannel(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // Python access virtual PyObject* py_repr(void); @@ -65,7 +65,7 @@ public: static int py_attr_setattr(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); static PyObject* py_attr_get_joint_rotation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int py_attr_set_joint_rotation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; /* this is a factory class to access bBone data field in the GE. @@ -82,7 +82,7 @@ private: public: -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static PyObject *py_bone_repr(PyObject *self); static PyObject *py_bone_get_parent(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static PyObject *py_bone_get_children(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); diff --git a/source/gameengine/Converter/BL_ArmatureConstraint.cpp b/source/gameengine/Converter/BL_ArmatureConstraint.cpp index 0b7ab043d16..fa7f8a1bea1 100644 --- a/source/gameengine/Converter/BL_ArmatureConstraint.cpp +++ b/source/gameengine/Converter/BL_ArmatureConstraint.cpp @@ -33,7 +33,7 @@ #include "BLI_math.h" #include "BLI_string.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyTypeObject BL_ArmatureConstraint::Type = { PyVarObject_HEAD_INIT(NULL, 0) @@ -62,7 +62,7 @@ PyObject* BL_ArmatureConstraint::py_repr(void) return PyUnicode_FromString(m_name); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON BL_ArmatureConstraint::BL_ArmatureConstraint( BL_ArmatureObject *armature, @@ -237,7 +237,7 @@ void BL_ArmatureConstraint::SetSubtarget(KX_GameObject* subtarget) } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // PYTHON @@ -447,4 +447,4 @@ int BL_ArmatureConstraint::py_attr_setattr(void *self_v, const struct KX_PYATTRI return PY_SET_ATTR_FAIL; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Converter/BL_ArmatureConstraint.h b/source/gameengine/Converter/BL_ArmatureConstraint.h index a9f612b6c0c..92da8327edb 100644 --- a/source/gameengine/Converter/BL_ArmatureConstraint.h +++ b/source/gameengine/Converter/BL_ArmatureConstraint.h @@ -104,14 +104,14 @@ public: void SetTarget(KX_GameObject* target); void SetSubtarget(KX_GameObject* subtarget); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // Python access virtual PyObject* py_repr(void); static PyObject* py_attr_getattr(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int py_attr_setattr(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; #endif //__BL_ARMATURECONSTRAINT diff --git a/source/gameengine/Converter/BL_ArmatureObject.cpp b/source/gameengine/Converter/BL_ArmatureObject.cpp index 97d6b6efd27..0c5bb036b04 100644 --- a/source/gameengine/Converter/BL_ArmatureObject.cpp +++ b/source/gameengine/Converter/BL_ArmatureObject.cpp @@ -594,7 +594,7 @@ float BL_ArmatureObject::GetBoneLength(Bone* bone) const return (float)(MT_Point3(bone->head) - MT_Point3(bone->tail)).length(); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // PYTHON @@ -661,4 +661,4 @@ KX_PYMETHODDEF_DOC_NOARGS(BL_ArmatureObject, update, Py_RETURN_NONE; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Converter/BL_ArmatureObject.h b/source/gameengine/Converter/BL_ArmatureObject.h index 646e9d45365..525c265d607 100644 --- a/source/gameengine/Converter/BL_ArmatureObject.h +++ b/source/gameengine/Converter/BL_ArmatureObject.h @@ -108,14 +108,14 @@ public: virtual int GetGameObjectType() { return OBJ_ARMATURE; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // PYTHON static PyObject* pyattr_get_constraints(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_channels(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); KX_PYMETHOD_DOC_NOARGS(BL_ArmatureObject, update); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON protected: /* list element: BL_ArmatureConstraint. Use SG_DListHead to have automatic list replication */ diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp index 69483aed1ec..715e5e33e75 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp +++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp @@ -1740,8 +1740,9 @@ static KX_GameObject *gameobject_from_blenderobject( bool bHasDvert = mesh->dvert != NULL && ob->defbase.first; bool bHasArmature = (BL_ModifierDeformer::HasArmatureDeformer(ob) && ob->parent && ob->parent->type == OB_ARMATURE && bHasDvert); bool bHasModifier = BL_ModifierDeformer::HasCompatibleDeformer(ob); +#ifdef USE_BULLET bool bHasSoftBody = (!ob->parent && (ob->gameflag & OB_SOFT_BODY)); - +#endif if (bHasModifier) { BL_ModifierDeformer *dcont = new BL_ModifierDeformer((BL_DeformableGameObject *)gameobj, kxscene->GetBlenderScene(), ob, meshobj); diff --git a/source/gameengine/Converter/BL_DeformableGameObject.h b/source/gameengine/Converter/BL_DeformableGameObject.h index 076bfaeb458..12f641eee96 100644 --- a/source/gameengine/Converter/BL_DeformableGameObject.h +++ b/source/gameengine/Converter/BL_DeformableGameObject.h @@ -37,6 +37,7 @@ #include "DNA_mesh_types.h" #include "KX_GameObject.h" #include "BL_MeshDeformer.h" +#include "KX_SoftBodyDeformer.h" #include class BL_ShapeActionActuator; @@ -79,7 +80,20 @@ public: bool GetShape(vector &shape); Key* GetKey() { - return (m_pDeformer) ? ((BL_MeshDeformer*)m_pDeformer)->GetMesh()->key : NULL; + if(m_pDeformer) { + BL_MeshDeformer *deformer= dynamic_cast(m_pDeformer); // incase its not a MeshDeformer + if(deformer) { + return deformer->GetMesh()->key; + } + +#if 0 // TODO. shape keys for softbody, currently they dont store a mesh. + KX_SoftBodyDeformer *deformer_soft= dynamic_cast(m_pDeformer); + if(deformer) { + return deformer->GetMesh()->key; + } +#endif + } + return NULL; } virtual void SetDeformer(class RAS_Deformer* deformer); diff --git a/source/gameengine/Converter/BL_ShapeActionActuator.cpp b/source/gameengine/Converter/BL_ShapeActionActuator.cpp index 08d3e54a7c5..ccd7dc6f745 100644 --- a/source/gameengine/Converter/BL_ShapeActionActuator.cpp +++ b/source/gameengine/Converter/BL_ShapeActionActuator.cpp @@ -408,7 +408,7 @@ bool BL_ShapeActionActuator::Update(double curtime, bool frame) return keepgoing; }; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -491,4 +491,4 @@ int BL_ShapeActionActuator::pyattr_set_action(void *self_v, const KX_PYATTRIBUTE } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Converter/BL_ShapeActionActuator.h b/source/gameengine/Converter/BL_ShapeActionActuator.h index 64cd21e5544..e6457e2c686 100644 --- a/source/gameengine/Converter/BL_ShapeActionActuator.h +++ b/source/gameengine/Converter/BL_ShapeActionActuator.h @@ -82,7 +82,7 @@ public: bAction* GetAction() { return m_action; } void SetAction(bAction* act) { m_action= act; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static PyObject* pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); @@ -125,7 +125,7 @@ public: } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON protected: diff --git a/source/gameengine/Converter/CMakeLists.txt b/source/gameengine/Converter/CMakeLists.txt index e6b5f6c81a0..9e0b4242f28 100644 --- a/source/gameengine/Converter/CMakeLists.txt +++ b/source/gameengine/Converter/CMakeLists.txt @@ -41,7 +41,6 @@ SET(INC ../../../source/blender/blenkernel ../../../source/blender/windowmanager ../../../source/blender - ../../../source/blender/include ../../../source/blender/makesdna ../../../source/blender/makesrna ../../../source/gameengine/Rasterizer @@ -54,7 +53,6 @@ SET(INC ../../../source/gameengine/Physics/Bullet ../../../source/gameengine/Physics/Dummy ../../../source/gameengine/Network/LoopBackNetwork - ../../../source/blender/misc ../../../source/blender/blenloader ../../../source/blender/gpu ../../../source/blender/ikplugin @@ -87,8 +85,7 @@ SET(SRC IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) IF(WITH_BULLET) diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp index 7ec7104f1f4..05b0e75b070 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp @@ -906,7 +906,7 @@ void KX_BlenderSceneConverter::TestHandlesPhysicsObjectToAnimationIpo() } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject *KX_BlenderSceneConverter::GetPyNamespace() { return m_ketsjiEngine->GetPyNamespace(); diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.h b/source/gameengine/Converter/KX_BlenderSceneConverter.h index 20f3f863563..8692a75ecb6 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.h +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.h @@ -174,7 +174,7 @@ public: -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject *GetPyNamespace(); #endif diff --git a/source/gameengine/Converter/KX_ConvertControllers.cpp b/source/gameengine/Converter/KX_ConvertControllers.cpp index a6b62ecb7b0..3bca6b9ab11 100644 --- a/source/gameengine/Converter/KX_ConvertControllers.cpp +++ b/source/gameengine/Converter/KX_ConvertControllers.cpp @@ -153,7 +153,7 @@ void BL_ConvertControllers( bPythonCont* pycont = (bPythonCont*) bcontr->data; SCA_PythonController* pyctrl = new SCA_PythonController(gameobj, pycont->mode); gamecontroller = pyctrl; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON pyctrl->SetNamespace(converter->GetPyNamespace()); @@ -183,7 +183,7 @@ void BL_ConvertControllers( } } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON break; } @@ -210,7 +210,7 @@ void BL_ConvertControllers( converter->RegisterGameController(gamecontroller, bcontr); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (bcontr->type==CONT_PYTHON) { SCA_PythonController *pyctrl= static_cast(gamecontroller); /* not strictly needed but gives syntax errors early on and @@ -225,7 +225,7 @@ void BL_ConvertControllers( // pyctrl->Import(); } } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON //done with gamecontroller gamecontroller->Release(); diff --git a/source/gameengine/Converter/KX_ConvertProperties.cpp b/source/gameengine/Converter/KX_ConvertProperties.cpp index 44c0ad38909..6c850008e5e 100644 --- a/source/gameengine/Converter/KX_ConvertProperties.cpp +++ b/source/gameengine/Converter/KX_ConvertProperties.cpp @@ -126,7 +126,7 @@ void BL_ConvertProperties(Object* object,KX_GameObject* gameobj,SCA_TimeEventMan propval->Release(); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Warn if we double up on attributes, this isnt quite right since it wont find inherited attributes however there arnt many */ for(PyAttributeDef *attrdef = KX_GameObject::Attributes; attrdef->m_name; attrdef++) { if(strcmp(prop->name, attrdef->m_name)==0) { @@ -141,7 +141,7 @@ void BL_ConvertProperties(Object* object,KX_GameObject* gameobj,SCA_TimeEventMan } } /* end warning check */ -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON prop = prop->next; } diff --git a/source/gameengine/Converter/SConscript b/source/gameengine/Converter/SConscript index a276d1623df..f6cf2331a43 100644 --- a/source/gameengine/Converter/SConscript +++ b/source/gameengine/Converter/SConscript @@ -29,8 +29,7 @@ if env['BF_DEBUG']: if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_CXX_GUARDEDALLOC']: defs.append('WITH_CXX_GUARDEDALLOC') diff --git a/source/gameengine/Expressions/BoolValue.cpp b/source/gameengine/Expressions/BoolValue.cpp index e6bb454a1b5..5510554bd22 100644 --- a/source/gameengine/Expressions/BoolValue.cpp +++ b/source/gameengine/Expressions/BoolValue.cpp @@ -201,9 +201,9 @@ CValue* CBoolValue::GetReplica() return replica; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* CBoolValue::ConvertValueToPython() { return PyBool_FromLong(m_bool != 0); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Expressions/BoolValue.h b/source/gameengine/Expressions/BoolValue.h index dac70e3c0b7..8110b9719bf 100644 --- a/source/gameengine/Expressions/BoolValue.h +++ b/source/gameengine/Expressions/BoolValue.h @@ -45,7 +45,7 @@ public: void Configure(CValue* menuvalue); virtual CValue* GetReplica(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON virtual PyObject* ConvertValueToPython(); #endif diff --git a/source/gameengine/Expressions/CMakeLists.txt b/source/gameengine/Expressions/CMakeLists.txt index 828afa7ae92..ad446d1085e 100644 --- a/source/gameengine/Expressions/CMakeLists.txt +++ b/source/gameengine/Expressions/CMakeLists.txt @@ -58,8 +58,7 @@ SET(SRC IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(bf_expressions "${SRC}" "${INC}") diff --git a/source/gameengine/Expressions/FloatValue.cpp b/source/gameengine/Expressions/FloatValue.cpp index 82c86ac68b2..e00121354f8 100644 --- a/source/gameengine/Expressions/FloatValue.cpp +++ b/source/gameengine/Expressions/FloatValue.cpp @@ -310,9 +310,9 @@ CValue* CFloatValue::GetReplica() } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* CFloatValue::ConvertValueToPython() { return PyFloat_FromDouble(m_float); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Expressions/FloatValue.h b/source/gameengine/Expressions/FloatValue.h index 49d4efa9f74..83b9ff1db5e 100644 --- a/source/gameengine/Expressions/FloatValue.h +++ b/source/gameengine/Expressions/FloatValue.h @@ -36,7 +36,7 @@ public: virtual CValue* GetReplica(); virtual CValue* Calc(VALUE_OPERATOR op, CValue *val); virtual CValue* CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON virtual PyObject* ConvertValueToPython(); #endif diff --git a/source/gameengine/Expressions/IntValue.cpp b/source/gameengine/Expressions/IntValue.cpp index 83e57200db0..5ba57e756c0 100644 --- a/source/gameengine/Expressions/IntValue.cpp +++ b/source/gameengine/Expressions/IntValue.cpp @@ -322,7 +322,7 @@ void CIntValue::SetValue(CValue* newval) } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* CIntValue::ConvertValueToPython() { if((m_int > INT_MIN) && (m_int < INT_MAX)) @@ -330,4 +330,4 @@ PyObject* CIntValue::ConvertValueToPython() else return PyLong_FromLongLong(m_int); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Expressions/IntValue.h b/source/gameengine/Expressions/IntValue.h index 63efea56d14..e484c436177 100644 --- a/source/gameengine/Expressions/IntValue.h +++ b/source/gameengine/Expressions/IntValue.h @@ -48,7 +48,7 @@ public: void AddConfigurationData(CValue* menuvalue); virtual CValue* GetReplica(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON virtual PyObject* ConvertValueToPython(); #endif diff --git a/source/gameengine/Expressions/KX_Python.h b/source/gameengine/Expressions/KX_Python.h index 7901d5226f7..62353f04e50 100644 --- a/source/gameengine/Expressions/KX_Python.h +++ b/source/gameengine/Expressions/KX_Python.h @@ -40,7 +40,7 @@ #undef _POSIX_C_SOURCE #endif -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "Python.h" #define USE_MATHUTILS // Blender 2.5x api will use mathutils, for a while we might want to test without it diff --git a/source/gameengine/Expressions/ListValue.cpp b/source/gameengine/Expressions/ListValue.cpp index 4d9d82efb98..258aada6565 100644 --- a/source/gameengine/Expressions/ListValue.cpp +++ b/source/gameengine/Expressions/ListValue.cpp @@ -268,7 +268,7 @@ bool CListValue::IsModified() return bmod; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -674,4 +674,4 @@ PyObject* CListValue::Pyfrom_id(PyObject* value) } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Expressions/ListValue.h b/source/gameengine/Expressions/ListValue.h index 8f3b9dcda0b..ff675dd0e68 100644 --- a/source/gameengine/Expressions/ListValue.h +++ b/source/gameengine/Expressions/ListValue.h @@ -60,7 +60,7 @@ public: bool CheckEqual(CValue* first,CValue* second); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON virtual PyObject* py_repr(void) { PyObject *py_proxy= this->GetProxy(); PyObject *py_list= PySequence_List(py_proxy); diff --git a/source/gameengine/Expressions/PyObjectPlus.cpp b/source/gameengine/Expressions/PyObjectPlus.cpp index 32bf4ba95c4..9195bd64f3f 100644 --- a/source/gameengine/Expressions/PyObjectPlus.cpp +++ b/source/gameengine/Expressions/PyObjectPlus.cpp @@ -49,7 +49,7 @@ PyObjectPlus::~PyObjectPlus() { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(m_proxy) { BGE_PROXY_REF(m_proxy)= NULL; Py_DECREF(m_proxy); /* Remove own reference, python may still have 1 */ @@ -60,14 +60,14 @@ PyObjectPlus::~PyObjectPlus() PyObjectPlus::PyObjectPlus() : SG_QList() // constructor { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_proxy= NULL; #endif }; void PyObjectPlus::ProcessReplica() { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Clear the proxy, will be created again if needed with GetProxy() * otherwise the PyObject will point to the wrong reference */ m_proxy= NULL; @@ -84,7 +84,7 @@ void PyObjectPlus::ProcessReplica() */ void PyObjectPlus::InvalidateProxy() // check typename of each parent { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(m_proxy) { BGE_PROXY_REF(m_proxy)=NULL; Py_DECREF(m_proxy); @@ -94,7 +94,7 @@ void PyObjectPlus::InvalidateProxy() // check typename of each parent } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /*------------------------------ * PyObjectPlus Type -- Every class, even the abstract one should have a Type @@ -1224,4 +1224,4 @@ void PyObjectPlus::SetDeprecationWarningFirst(WarnLink* wlink) {m_base_wlink_f void PyObjectPlus::SetDeprecationWarningLinkLast(WarnLink* wlink) {m_base_wlink_last= wlink;} void PyObjectPlus::NullDeprecationWarning() {m_base_wlink_first= m_base_wlink_last= NULL;} -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Expressions/PyObjectPlus.h b/source/gameengine/Expressions/PyObjectPlus.h index b2688231a43..d69be6af5e5 100644 --- a/source/gameengine/Expressions/PyObjectPlus.h +++ b/source/gameengine/Expressions/PyObjectPlus.h @@ -43,7 +43,7 @@ * Python defines ------------------------------*/ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #ifdef USE_MATHUTILS extern "C" { #include "../../blender/python/generic/mathutils.h" /* so we can have mathutils callbacks */ @@ -459,7 +459,7 @@ typedef struct KX_PYATTRIBUTE_DEF { ------------------------------*/ typedef PyTypeObject * PyParentObject; // Define the PyParent Object -#else // DISABLE_PYTHON +#else // WITH_PYTHON #ifdef WITH_CXX_GUARDEDALLOC #define Py_Header \ @@ -505,7 +505,7 @@ public: virtual ~PyObjectPlus(); // destructor -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject *m_proxy; /* actually a PyObjectPlus_Proxy */ /* These static functions are referenced by ALL PyObjectPlus_Proxy types @@ -561,7 +561,7 @@ public: static bool m_ignore_deprecation_warnings; }; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject *py_getattr_dict(PyObject *pydict, PyObject *tp_dict); #endif diff --git a/source/gameengine/Expressions/SConscript b/source/gameengine/Expressions/SConscript index 85db689a9ba..dea652dabb4 100644 --- a/source/gameengine/Expressions/SConscript +++ b/source/gameengine/Expressions/SConscript @@ -9,8 +9,7 @@ defs = [] if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_CXX_GUARDEDALLOC']: defs.append('WITH_CXX_GUARDEDALLOC') diff --git a/source/gameengine/Expressions/StringValue.h b/source/gameengine/Expressions/StringValue.h index d28e435e2a7..ef8228141a2 100644 --- a/source/gameengine/Expressions/StringValue.h +++ b/source/gameengine/Expressions/StringValue.h @@ -39,11 +39,11 @@ public: virtual CValue* CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val); virtual void SetValue(CValue* newval) { m_strString = newval->GetText(); SetModified(true); }; virtual CValue* GetReplica(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON virtual PyObject* ConvertValueToPython() { return PyUnicode_FromString(m_strString.Ptr()); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON private: // data member diff --git a/source/gameengine/Expressions/Value.cpp b/source/gameengine/Expressions/Value.cpp index 1f4f961268b..262f543f834 100644 --- a/source/gameengine/Expressions/Value.cpp +++ b/source/gameengine/Expressions/Value.cpp @@ -29,7 +29,7 @@ double CValue::m_sZeroVec[3] = {0.0,0.0,0.0}; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyTypeObject CValue::Type = { PyVarObject_HEAD_INIT(NULL, 0) @@ -60,7 +60,7 @@ PyTypeObject CValue::Type = { PyMethodDef CValue::Methods[] = { {NULL,NULL} //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /*#define CVALUE_DEBUG*/ @@ -520,7 +520,7 @@ CValue* CValue::FindIdentifier(const STR_String& identifiername) return result; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyAttributeDef CValue::Attributes[] = { KX_PYATTRIBUTE_RO_FUNCTION("name", CValue, pyattr_get_name), @@ -611,7 +611,7 @@ PyObject* CValue::ConvertKeysToPython( void ) return pylist; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/source/gameengine/Expressions/Value.h b/source/gameengine/Expressions/Value.h index 009d95ee4d2..e6ea431ec1c 100644 --- a/source/gameengine/Expressions/Value.h +++ b/source/gameengine/Expressions/Value.h @@ -198,7 +198,7 @@ public: #include "PyObjectPlus.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "object.h" #endif class CValue : public PyObjectPlus @@ -221,7 +221,7 @@ public: // Construction / Destruction CValue(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON //static PyObject* PyMake(PyObject*,PyObject*); virtual PyObject *py_repr(void) { @@ -237,7 +237,7 @@ public: static PyObject * pyattr_get_name(void * self, const KX_PYATTRIBUTE_DEF * attrdef); virtual PyObject* ConvertKeysToPython( void ); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/GameLogic/CMakeLists.txt b/source/gameengine/GameLogic/CMakeLists.txt index 57150a90e99..b346df2b340 100644 --- a/source/gameengine/GameLogic/CMakeLists.txt +++ b/source/gameengine/GameLogic/CMakeLists.txt @@ -87,8 +87,7 @@ ENDIF(WITH_SDL) IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(bf_logic "${SRC}" "${INC}") diff --git a/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp b/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp index f6d24af0e67..3e9217251b5 100644 --- a/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp +++ b/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp @@ -96,7 +96,7 @@ void SCA_2DFilterActuator::SetShaderText(const char *text) m_shaderText = text; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_ANDController.cpp b/source/gameengine/GameLogic/SCA_ANDController.cpp index 53c9be5215e..7e2c5bdb350 100644 --- a/source/gameengine/GameLogic/SCA_ANDController.cpp +++ b/source/gameengine/GameLogic/SCA_ANDController.cpp @@ -87,7 +87,7 @@ CValue* SCA_ANDController::GetReplica() return replica; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -123,5 +123,5 @@ PyMethodDef SCA_ANDController::Methods[] = { PyAttributeDef SCA_ANDController::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp b/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp index c77e58d2f3b..d6c328cd730 100644 --- a/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp +++ b/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp @@ -110,7 +110,7 @@ void SCA_ActuatorSensor::Update() } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -160,6 +160,6 @@ int SCA_ActuatorSensor::CheckActuator(void *self, const PyAttributeDef*) return 1; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_ActuatorSensor.h b/source/gameengine/GameLogic/SCA_ActuatorSensor.h index 323746889bf..eb52d365079 100644 --- a/source/gameengine/GameLogic/SCA_ActuatorSensor.h +++ b/source/gameengine/GameLogic/SCA_ActuatorSensor.h @@ -56,7 +56,7 @@ public: virtual void ReParent(SCA_IObject* parent); void Update(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -64,7 +64,7 @@ public: static int CheckActuator(void *self, const PyAttributeDef*); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; #endif diff --git a/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp b/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp index e364225af3d..88f5855b223 100644 --- a/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp +++ b/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp @@ -94,7 +94,7 @@ bool SCA_AlwaysSensor::Evaluate() return result; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_DelaySensor.cpp b/source/gameengine/GameLogic/SCA_DelaySensor.cpp index 6cad801e429..abe72fb6757 100644 --- a/source/gameengine/GameLogic/SCA_DelaySensor.cpp +++ b/source/gameengine/GameLogic/SCA_DelaySensor.cpp @@ -120,7 +120,7 @@ bool SCA_DelaySensor::Evaluate() return trigger; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -160,6 +160,6 @@ PyAttributeDef SCA_DelaySensor::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_IController.cpp b/source/gameengine/GameLogic/SCA_IController.cpp index c291ff091aa..0c6b8350bca 100644 --- a/source/gameengine/GameLogic/SCA_IController.cpp +++ b/source/gameengine/GameLogic/SCA_IController.cpp @@ -194,7 +194,7 @@ void SCA_IController::ApplyState(unsigned int state) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Python api */ @@ -247,4 +247,4 @@ PyObject* SCA_IController::pyattr_get_actuators(void *self_v, const KX_PYATTRIBU { return KX_PythonSeq_CreatePyObject((static_cast(self_v))->m_proxy, KX_PYGENSEQ_CONT_TYPE_ACTUATORS); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/GameLogic/SCA_IController.h b/source/gameengine/GameLogic/SCA_IController.h index e23a0d7dc92..2d19770be4a 100644 --- a/source/gameengine/GameLogic/SCA_IController.h +++ b/source/gameengine/GameLogic/SCA_IController.h @@ -99,11 +99,11 @@ public: } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static PyObject* pyattr_get_state(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_sensors(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_actuators(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; #endif diff --git a/source/gameengine/GameLogic/SCA_ILogicBrick.cpp b/source/gameengine/GameLogic/SCA_ILogicBrick.cpp index f2e1a8dd151..afda218c99c 100644 --- a/source/gameengine/GameLogic/SCA_ILogicBrick.cpp +++ b/source/gameengine/GameLogic/SCA_ILogicBrick.cpp @@ -169,7 +169,7 @@ CValue* SCA_ILogicBrick::GetEvent() -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* python stuff */ @@ -253,4 +253,4 @@ PyObject* SCA_ILogicBrick::BoolToPyArg(bool boolarg) return PyLong_FromSsize_t(boolarg? KX_TRUE: KX_FALSE); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/GameLogic/SCA_ILogicBrick.h b/source/gameengine/GameLogic/SCA_ILogicBrick.h index 3225c245550..a444210e8d9 100644 --- a/source/gameengine/GameLogic/SCA_ILogicBrick.h +++ b/source/gameengine/GameLogic/SCA_ILogicBrick.h @@ -133,7 +133,7 @@ public: virtual void Replace_IScene(SCA_IScene *val) {}; virtual void Replace_NetworkScene(NG_NetworkScene *val) {}; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // python methods static PyObject* pyattr_get_owner(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); @@ -157,7 +157,7 @@ protected: /** Convert a a c++ value to KX_TRUE, KX_FALSE in Python. */ PyObject* BoolToPyArg(bool); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/GameLogic/SCA_IObject.cpp b/source/gameengine/GameLogic/SCA_IObject.cpp index 7c0a5b2db15..ff71d1bf96b 100644 --- a/source/gameengine/GameLogic/SCA_IObject.cpp +++ b/source/gameengine/GameLogic/SCA_IObject.cpp @@ -303,7 +303,7 @@ void SCA_IObject::SetState(unsigned int state) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -342,4 +342,4 @@ PyAttributeDef SCA_IObject::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/GameLogic/SCA_IObject.h b/source/gameengine/GameLogic/SCA_IObject.h index 0178da5f343..591be6fe53b 100644 --- a/source/gameengine/GameLogic/SCA_IObject.h +++ b/source/gameengine/GameLogic/SCA_IObject.h @@ -41,7 +41,7 @@ class SCA_ISensor; class SCA_IController; class SCA_IActuator; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON template T PyVecTo(PyObject*); #endif diff --git a/source/gameengine/GameLogic/SCA_ISensor.cpp b/source/gameengine/GameLogic/SCA_ISensor.cpp index fada69848b2..c655924aa48 100644 --- a/source/gameengine/GameLogic/SCA_ISensor.cpp +++ b/source/gameengine/GameLogic/SCA_ISensor.cpp @@ -300,7 +300,7 @@ void SCA_ISensor::Activate(class SCA_LogicManager* logicmgr) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ----------------------------------------------- */ /* Python Functions */ @@ -427,6 +427,6 @@ int SCA_ISensor::pyattr_check_tap(void *self_v, const KX_PYATTRIBUTE_DEF *attrde self->m_level = false; return 0; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_ISensor.h b/source/gameengine/GameLogic/SCA_ISensor.h index 2d3a3ef08a0..f31dd83343b 100644 --- a/source/gameengine/GameLogic/SCA_ISensor.h +++ b/source/gameengine/GameLogic/SCA_ISensor.h @@ -190,7 +190,7 @@ public: bool IsNoLink() const { return !m_links; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Python functions: */ KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,reset); @@ -210,7 +210,7 @@ public: KX_SENSOR_JUST_DEACTIVATED }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; #endif //__SCA_ISENSOR diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp index 29a6a73b865..a68938ec834 100644 --- a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp +++ b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp @@ -241,7 +241,7 @@ bool SCA_JoystickSensor::isValid(SCA_JoystickSensor::KX_JOYSENSORMODE m) return res; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.h b/source/gameengine/GameLogic/SCA_JoystickSensor.h index 90fb16de747..39f826dfe02 100644 --- a/source/gameengine/GameLogic/SCA_JoystickSensor.h +++ b/source/gameengine/GameLogic/SCA_JoystickSensor.h @@ -117,7 +117,7 @@ public: return m_joyindex; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -157,7 +157,7 @@ public: return 0; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp b/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp index 1a87528e540..fe4124eb833 100644 --- a/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp +++ b/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp @@ -408,7 +408,7 @@ void SCA_KeyboardSensor::LogKeystrokes(void) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python Functions */ @@ -501,7 +501,7 @@ PyObject* SCA_KeyboardSensor::pyattr_get_events(void *self_v, const KX_PYATTRIBU return resultlist; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* Accessed from python */ diff --git a/source/gameengine/GameLogic/SCA_KeyboardSensor.h b/source/gameengine/GameLogic/SCA_KeyboardSensor.h index 5ca329b0846..0a3b25ac361 100644 --- a/source/gameengine/GameLogic/SCA_KeyboardSensor.h +++ b/source/gameengine/GameLogic/SCA_KeyboardSensor.h @@ -103,7 +103,7 @@ public: virtual bool IsPositiveTrigger(); bool TriggerOnAllKeys(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ diff --git a/source/gameengine/GameLogic/SCA_LogicManager.cpp b/source/gameengine/GameLogic/SCA_LogicManager.cpp index d003c5618f1..ab06fe7f9ef 100644 --- a/source/gameengine/GameLogic/SCA_LogicManager.cpp +++ b/source/gameengine/GameLogic/SCA_LogicManager.cpp @@ -307,7 +307,7 @@ void SCA_LogicManager::AddTriggeredController(SCA_IController* controller, SCA_I { controller->Activate(m_triggeredControllerSet); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // so that the controller knows which sensor has activited it // only needed for python controller diff --git a/source/gameengine/GameLogic/SCA_MouseSensor.cpp b/source/gameengine/GameLogic/SCA_MouseSensor.cpp index 9f4b25986b0..af11353c93e 100644 --- a/source/gameengine/GameLogic/SCA_MouseSensor.cpp +++ b/source/gameengine/GameLogic/SCA_MouseSensor.cpp @@ -232,7 +232,7 @@ bool SCA_MouseSensor::isValid(SCA_MouseSensor::KX_MOUSESENSORMODE m) return ((m > KX_MOUSESENSORMODE_NODEF) && (m < KX_MOUSESENSORMODE_MAX)); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -305,6 +305,6 @@ PyAttributeDef SCA_MouseSensor::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_MouseSensor.h b/source/gameengine/GameLogic/SCA_MouseSensor.h index f52b57a3e11..dc0e9a11d39 100644 --- a/source/gameengine/GameLogic/SCA_MouseSensor.h +++ b/source/gameengine/GameLogic/SCA_MouseSensor.h @@ -104,7 +104,7 @@ class SCA_MouseSensor : public SCA_ISensor static void UpdateHotkey(void *self); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ diff --git a/source/gameengine/GameLogic/SCA_NANDController.cpp b/source/gameengine/GameLogic/SCA_NANDController.cpp index c09a53d8ac7..bcb2c84a083 100644 --- a/source/gameengine/GameLogic/SCA_NANDController.cpp +++ b/source/gameengine/GameLogic/SCA_NANDController.cpp @@ -87,7 +87,7 @@ CValue* SCA_NANDController::GetReplica() return replica; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_NORController.cpp b/source/gameengine/GameLogic/SCA_NORController.cpp index 8ebd79efcfa..5711fb5751b 100644 --- a/source/gameengine/GameLogic/SCA_NORController.cpp +++ b/source/gameengine/GameLogic/SCA_NORController.cpp @@ -87,7 +87,7 @@ CValue* SCA_NORController::GetReplica() return replica; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -124,6 +124,6 @@ PyAttributeDef SCA_NORController::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_ORController.cpp b/source/gameengine/GameLogic/SCA_ORController.cpp index a638147e211..72c368d632f 100644 --- a/source/gameengine/GameLogic/SCA_ORController.cpp +++ b/source/gameengine/GameLogic/SCA_ORController.cpp @@ -83,7 +83,7 @@ void SCA_ORController::Trigger(SCA_LogicManager* logicmgr) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -120,6 +120,6 @@ PyAttributeDef SCA_ORController::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_PropertyActuator.cpp b/source/gameengine/GameLogic/SCA_PropertyActuator.cpp index c1b49d32712..a5ac5654e21 100644 --- a/source/gameengine/GameLogic/SCA_PropertyActuator.cpp +++ b/source/gameengine/GameLogic/SCA_PropertyActuator.cpp @@ -217,7 +217,7 @@ void SCA_PropertyActuator::Relink(GEN_Map *obj_map) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_PropertySensor.cpp b/source/gameengine/GameLogic/SCA_PropertySensor.cpp index be86b976a70..a32cc50fd63 100644 --- a/source/gameengine/GameLogic/SCA_PropertySensor.cpp +++ b/source/gameengine/GameLogic/SCA_PropertySensor.cpp @@ -304,7 +304,7 @@ CValue* SCA_PropertySensor::FindIdentifier(const STR_String& identifiername) return GetParent()->FindIdentifier(identifiername); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -378,6 +378,6 @@ PyAttributeDef SCA_PropertySensor::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_PropertySensor.h b/source/gameengine/GameLogic/SCA_PropertySensor.h index 9a5c4762558..5a29c526fc0 100644 --- a/source/gameengine/GameLogic/SCA_PropertySensor.h +++ b/source/gameengine/GameLogic/SCA_PropertySensor.h @@ -84,7 +84,7 @@ public: virtual bool IsPositiveTrigger(); virtual CValue* FindIdentifier(const STR_String& identifiername); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ diff --git a/source/gameengine/GameLogic/SCA_PythonController.cpp b/source/gameengine/GameLogic/SCA_PythonController.cpp index 45f0684c02f..109b199f230 100644 --- a/source/gameengine/GameLogic/SCA_PythonController.cpp +++ b/source/gameengine/GameLogic/SCA_PythonController.cpp @@ -35,10 +35,10 @@ #include "SCA_IActuator.h" #include "PyObjectPlus.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "compile.h" #include "eval.h" -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON #include @@ -49,7 +49,7 @@ SCA_PythonController* SCA_PythonController::m_sCurrentController = NULL; SCA_PythonController::SCA_PythonController(SCA_IObject* gameobj, int mode) : SCA_IController(gameobj), -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_bytecode(NULL), m_function(NULL), #endif @@ -57,7 +57,7 @@ SCA_PythonController::SCA_PythonController(SCA_IObject* gameobj, int mode) m_bModified(true), m_debug(false), m_mode(mode) -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON , m_pythondictionary(NULL) #endif @@ -84,7 +84,7 @@ int SCA_PythonController::Release() SCA_PythonController::~SCA_PythonController() { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON //printf("released python byte script\n"); Py_XDECREF(m_bytecode); @@ -104,7 +104,7 @@ CValue* SCA_PythonController::GetReplica() { SCA_PythonController* replica = new SCA_PythonController(*this); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* why is this needed at all??? - m_bytecode is NULL'd below so this doesnt make sense * but removing it crashes blender (with YoFrankie). so leave in for now - Campbell */ Py_XINCREF(replica->m_bytecode); @@ -146,7 +146,7 @@ void SCA_PythonController::SetScriptName(const STR_String& name) } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON void SCA_PythonController::SetNamespace(PyObject* pythondictionary) { if (m_pythondictionary) @@ -171,7 +171,7 @@ int SCA_PythonController::IsTriggered(class SCA_ISensor* sensor) return 0; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* warning, self is not the SCA_PythonController, its a PyObjectPlus_Proxy */ PyObject* SCA_PythonController::sPyGetCurrentController(PyObject *self) @@ -527,13 +527,13 @@ int SCA_PythonController::pyattr_set_script(void *self_v, const KX_PYATTRIBUTE_D return PY_SET_ATTR_SUCCESS; } -#else // DISABLE_PYTHON +#else // WITH_PYTHON void SCA_PythonController::Trigger(SCA_LogicManager* logicmgr) { /* intentionally blank */ } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_PythonController.h b/source/gameengine/GameLogic/SCA_PythonController.h index bd78014038c..602b5e27e47 100644 --- a/source/gameengine/GameLogic/SCA_PythonController.h +++ b/source/gameengine/GameLogic/SCA_PythonController.h @@ -42,7 +42,7 @@ class SCA_IObject; class SCA_PythonController : public SCA_IController { Py_Header; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON struct _object * m_bytecode; /* SCA_PYEXEC_SCRIPT only */ PyObject* m_function; /* SCA_PYEXEC_MODULE only */ #endif @@ -55,7 +55,7 @@ class SCA_PythonController : public SCA_IController protected: STR_String m_scriptText; STR_String m_scriptName; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* m_pythondictionary; /* for SCA_PYEXEC_SCRIPT only */ PyObject* m_pythonfunction; /* for SCA_PYEXEC_MODULE only */ #endif @@ -83,7 +83,7 @@ class SCA_PythonController : public SCA_IController void SetScriptText(const STR_String& text); void SetScriptName(const STR_String& name); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON void SetNamespace(PyObject* pythondictionary); #endif void SetDebug(bool debug) { m_debug = debug; } @@ -94,7 +94,7 @@ class SCA_PythonController : public SCA_IController bool Import(); void ErrorPrint(const char *error_msg); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static const char* sPyGetCurrentController__doc__; static PyObject* sPyGetCurrentController(PyObject* self); static const char* sPyAddActiveActuator__doc__; diff --git a/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp b/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp index 3d5d3568335..213446935b6 100644 --- a/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp +++ b/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp @@ -33,20 +33,20 @@ SCA_PythonKeyboard::SCA_PythonKeyboard(SCA_IInputDevice* keyboard) : PyObjectPlus(), m_keyboard(keyboard) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_event_dict = PyDict_New(); #endif } SCA_PythonKeyboard::~SCA_PythonKeyboard() { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyDict_Clear(m_event_dict); Py_DECREF(m_event_dict); #endif } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_PythonKeyboard.h b/source/gameengine/GameLogic/SCA_PythonKeyboard.h index 260835155e6..6a89ba7de76 100644 --- a/source/gameengine/GameLogic/SCA_PythonKeyboard.h +++ b/source/gameengine/GameLogic/SCA_PythonKeyboard.h @@ -32,14 +32,14 @@ class SCA_PythonKeyboard : public PyObjectPlus Py_Header; private: class SCA_IInputDevice *m_keyboard; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* m_event_dict; #endif public: SCA_PythonKeyboard(class SCA_IInputDevice* keyboard); virtual ~SCA_PythonKeyboard(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static PyObject* pyattr_get_events(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); #endif }; diff --git a/source/gameengine/GameLogic/SCA_PythonMouse.cpp b/source/gameengine/GameLogic/SCA_PythonMouse.cpp index 936ee2ff5c4..7267eb74594 100644 --- a/source/gameengine/GameLogic/SCA_PythonMouse.cpp +++ b/source/gameengine/GameLogic/SCA_PythonMouse.cpp @@ -35,20 +35,20 @@ SCA_PythonMouse::SCA_PythonMouse(SCA_IInputDevice* mouse, RAS_ICanvas* canvas) m_mouse(mouse), m_canvas(canvas) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_event_dict = PyDict_New(); #endif } SCA_PythonMouse::~SCA_PythonMouse() { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyDict_Clear(m_event_dict); Py_DECREF(m_event_dict); #endif } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_PythonMouse.h b/source/gameengine/GameLogic/SCA_PythonMouse.h index 9e1085e6bec..15a7e19c602 100644 --- a/source/gameengine/GameLogic/SCA_PythonMouse.h +++ b/source/gameengine/GameLogic/SCA_PythonMouse.h @@ -33,7 +33,7 @@ class SCA_PythonMouse : public PyObjectPlus private: class SCA_IInputDevice *m_mouse; class RAS_ICanvas *m_canvas; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* m_event_dict; #endif public: @@ -42,7 +42,7 @@ public: void Show(bool visible); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_DOC(SCA_PythonMouse, show); static PyObject* pyattr_get_events(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); diff --git a/source/gameengine/GameLogic/SCA_RandomActuator.cpp b/source/gameengine/GameLogic/SCA_RandomActuator.cpp index 4b90ca7dadf..c3d5988be24 100644 --- a/source/gameengine/GameLogic/SCA_RandomActuator.cpp +++ b/source/gameengine/GameLogic/SCA_RandomActuator.cpp @@ -305,7 +305,7 @@ void SCA_RandomActuator::enforceConstraints() { } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_RandomActuator.h b/source/gameengine/GameLogic/SCA_RandomActuator.h index 41d19f5b4c4..1fd2180f32c 100644 --- a/source/gameengine/GameLogic/SCA_RandomActuator.h +++ b/source/gameengine/GameLogic/SCA_RandomActuator.h @@ -92,7 +92,7 @@ class SCA_RandomActuator : public SCA_IActuator virtual CValue* GetReplica(); virtual void ProcessReplica(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -112,7 +112,7 @@ class SCA_RandomActuator : public SCA_IActuator KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setFloatNormal); KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setFloatNegativeExponential); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; /* end of class KX_EditObjectActuator : public SCA_PropertyActuator */ diff --git a/source/gameengine/GameLogic/SCA_RandomSensor.cpp b/source/gameengine/GameLogic/SCA_RandomSensor.cpp index a7d18ff40d4..8194f1c97c8 100644 --- a/source/gameengine/GameLogic/SCA_RandomSensor.cpp +++ b/source/gameengine/GameLogic/SCA_RandomSensor.cpp @@ -120,7 +120,7 @@ bool SCA_RandomSensor::Evaluate() return evaluateResult; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -176,6 +176,6 @@ int SCA_RandomSensor::pyattr_set_seed(void *self_v, const KX_PYATTRIBUTE_DEF *at return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_RandomSensor.h b/source/gameengine/GameLogic/SCA_RandomSensor.h index 3be17943d84..af5a767c1c1 100644 --- a/source/gameengine/GameLogic/SCA_RandomSensor.h +++ b/source/gameengine/GameLogic/SCA_RandomSensor.h @@ -56,7 +56,7 @@ public: virtual bool IsPositiveTrigger(); virtual void Init(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ diff --git a/source/gameengine/GameLogic/SCA_XNORController.cpp b/source/gameengine/GameLogic/SCA_XNORController.cpp index 9f54e41d110..f1f76c83718 100644 --- a/source/gameengine/GameLogic/SCA_XNORController.cpp +++ b/source/gameengine/GameLogic/SCA_XNORController.cpp @@ -91,7 +91,7 @@ CValue* SCA_XNORController::GetReplica() return replica; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -128,6 +128,6 @@ PyAttributeDef SCA_XNORController::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_XORController.cpp b/source/gameengine/GameLogic/SCA_XORController.cpp index a58f30a3bed..ee63b72e455 100644 --- a/source/gameengine/GameLogic/SCA_XORController.cpp +++ b/source/gameengine/GameLogic/SCA_XORController.cpp @@ -91,7 +91,7 @@ CValue* SCA_XORController::GetReplica() return replica; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -127,6 +127,6 @@ PyMethodDef SCA_XORController::Methods[] = { PyAttributeDef SCA_XORController::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SConscript b/source/gameengine/GameLogic/SConscript index c9d1fed875d..04990e10d06 100644 --- a/source/gameengine/GameLogic/SConscript +++ b/source/gameengine/GameLogic/SConscript @@ -16,8 +16,7 @@ else: if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): if env['BF_DEBUG']: diff --git a/source/gameengine/GamePlayer/common/CMakeLists.txt b/source/gameengine/GamePlayer/common/CMakeLists.txt index 47ac7f73a51..39667a27c7d 100644 --- a/source/gameengine/GamePlayer/common/CMakeLists.txt +++ b/source/gameengine/GamePlayer/common/CMakeLists.txt @@ -39,7 +39,6 @@ SET(INC ../../../../source/blender/blenlib ../../../../source/blender/blenkernel ../../../../source/blender - ../../../../source/blender/include ../../../../source/blender/makesdna ../../../../source/gameengine/Rasterizer ../../../../source/gameengine/GameLogic @@ -49,7 +48,6 @@ SET(INC ../../../../source/gameengine/Physics/common ../../../../source/gameengine/Network/LoopBackNetwork ../../../../source/gameengine/GamePlayer/ghost - ../../../../source/blender/misc ../../../../source/blender/blenloader ../../../../source/blender/gpu ../../../../extern/glew/include @@ -71,6 +69,11 @@ SET(SRC GPC_System.cpp ) +IF(WITH_PYTHON) + LIST(APPEND INC ${PYTHON_INC}) + ADD_DEFINITIONS(-DWITH_PYTHON) +ENDIF(WITH_PYTHON) + ADD_DEFINITIONS(-DGLEW_STATIC) BLENDERLIB_NOLIST(gp_common "${SRC}" "${INC}") diff --git a/source/gameengine/GamePlayer/common/SConscript b/source/gameengine/GamePlayer/common/SConscript index 7a16e950b36..60cb437b10f 100644 --- a/source/gameengine/GamePlayer/common/SConscript +++ b/source/gameengine/GamePlayer/common/SConscript @@ -62,8 +62,7 @@ defs = [ 'GLEW_STATIC' ] if env['WITH_BF_PYTHON']: incs += Split(env['BF_PYTHON_INC']) -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') incs += Split(env['BF_PNG_INC']) incs += Split(env['BF_ZLIB_INC']) diff --git a/source/gameengine/GamePlayer/ghost/CMakeLists.txt b/source/gameengine/GamePlayer/ghost/CMakeLists.txt index 6ce9f7be280..e02a8a53ba2 100644 --- a/source/gameengine/GamePlayer/ghost/CMakeLists.txt +++ b/source/gameengine/GamePlayer/ghost/CMakeLists.txt @@ -40,7 +40,6 @@ SET(INC ../../../../source/blender/blenkernel ../../../../source/blender/readblenfile ../../../../source/blender - ../../../../source/blender/include ../../../../source/blender/makesdna ../../../../source/blender/makesrna ../../../../source/gameengine/Rasterizer @@ -51,7 +50,6 @@ SET(INC ../../../../source/gameengine/Physics/common ../../../../source/gameengine/Network/LoopBackNetwork ../../../../source/gameengine/GamePlayer/common - ../../../../source/blender/misc ../../../../source/blender/blenloader ../../../../source/blender/gpu ../../../../extern/glew/include @@ -72,4 +70,9 @@ IF(WITH_FFMPEG) ADD_DEFINITIONS(-DWITH_FFMPEG) ENDIF(WITH_FFMPEG) +IF(WITH_PYTHON) + LIST(APPEND INC ${PYTHON_INC}) + ADD_DEFINITIONS(-DWITH_PYTHON) +ENDIF(WITH_PYTHON) + BLENDERLIB_NOLIST(gp_ghost "${SRC}" "${INC}") diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp index d1b8fb12336..197e31af188 100644 --- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp +++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp @@ -603,8 +603,11 @@ bool GPG_Application::initEngine(GHOST_IWindow* window, const int stereoMode) m_ketsjiengine->SetNetworkDevice(m_networkdevice); m_ketsjiengine->SetTimingDisplay(frameRate, false, false); - +#ifdef WITH_PYTHON CValue::SetDeprecationWarnings(nodepwarnings); +#else + (void)nodepwarnings; +#endif m_ketsjiengine->SetUseFixedTime(fixed_framerate); m_ketsjiengine->SetTimingDisplay(frameRate, profile, properties); @@ -677,20 +680,21 @@ bool GPG_Application::startEngine(void) m_startScene, m_canvas); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // some python things PyObject *gameLogic, *gameLogic_keys; setupGamePython(m_ketsjiengine, startscene, m_maggie, NULL, &gameLogic, &gameLogic_keys, m_argc, m_argv); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON //initialize Dome Settings if(m_startScene->gm.stereoflag == STEREO_DOME) m_ketsjiengine->InitDome(m_startScene->gm.dome.res, m_startScene->gm.dome.mode, m_startScene->gm.dome.angle, m_startScene->gm.dome.resbuf, m_startScene->gm.dome.tilt, m_startScene->gm.dome.warptext); +#ifdef WITH_PYTHON // Set the GameLogic.globalDict from marshal'd data, so we can // load new blend files and keep data in GameLogic.globalDict loadGamePythonConfig(m_pyGlobalDictString, m_pyGlobalDictString_Length); - +#endif m_sceneconverter->ConvertScene( startscene, m_rendertools, @@ -723,6 +727,7 @@ bool GPG_Application::startEngine(void) void GPG_Application::stopEngine() { +#ifdef WITH_PYTHON // GameLogic.globalDict gets converted into a buffer, and sorted in // m_pyGlobalDictString so we can restore after python has stopped // and started between .blend file loads. @@ -735,6 +740,8 @@ void GPG_Application::stopEngine() // when exiting the mainloop exitGamePythonScripting(); +#endif + m_ketsjiengine->StopEngine(); m_networkdevice->Disconnect(); diff --git a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp index 94142e7a604..45eea75eb2f 100644 --- a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp +++ b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp @@ -822,8 +822,9 @@ int main(int argc, char** argv) BLI_strncpy(pathname, maggie->name, sizeof(pathname)); BLI_strncpy(G.main->name, maggie->name, sizeof(G.main->name)); +#ifdef WITH_PYTHON setGamePythonPath(G.main->name); - +#endif if (firstTimeRunning) { firstTimeRunning = false; diff --git a/source/gameengine/GamePlayer/ghost/SConscript b/source/gameengine/GamePlayer/ghost/SConscript index 41520a06c66..d2224884f7f 100644 --- a/source/gameengine/GamePlayer/ghost/SConscript +++ b/source/gameengine/GamePlayer/ghost/SConscript @@ -44,8 +44,7 @@ defs = [ 'GLEW_STATIC' ] if env['WITH_BF_PYTHON']: incs += Split(env['BF_PYTHON_INC']) -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_FFMPEG']: defs.append('WITH_FFMPEG') diff --git a/source/gameengine/Ketsji/BL_Shader.cpp b/source/gameengine/Ketsji/BL_Shader.cpp index 8edefe7ac2d..b00c1b7efb7 100644 --- a/source/gameengine/Ketsji/BL_Shader.cpp +++ b/source/gameengine/Ketsji/BL_Shader.cpp @@ -728,7 +728,7 @@ void BL_Shader::SetUniform(int uniform, const int* val, int len) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyMethodDef BL_Shader::Methods[] = { @@ -1411,6 +1411,6 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformDef, "setUniformDef(name, enum)" ) return NULL; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON // eof diff --git a/source/gameengine/Ketsji/BL_Shader.h b/source/gameengine/Ketsji/BL_Shader.h index 5108acea0ff..77c642ecc7b 100644 --- a/source/gameengine/Ketsji/BL_Shader.h +++ b/source/gameengine/Ketsji/BL_Shader.h @@ -222,7 +222,7 @@ public: void SetUniform(int uniform, const int val); // Python interface -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON virtual PyObject* py_repr(void) { return PyUnicode_FromFormat("BL_Shader\n\tvertex shader:%s\n\n\tfragment shader%s\n\n", vertProg, fragProg); } // ----------------------------------- diff --git a/source/gameengine/Ketsji/CMakeLists.txt b/source/gameengine/Ketsji/CMakeLists.txt index 68f0a0de994..1ca71e678e8 100644 --- a/source/gameengine/Ketsji/CMakeLists.txt +++ b/source/gameengine/Ketsji/CMakeLists.txt @@ -32,7 +32,6 @@ SET(INC ../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer ../../../source/gameengine/Converter ../../../source/blender/imbuf - ../../../intern/ghost/include ../../../intern/moto/include ../../../source/gameengine/Ketsji ../../../source/blender/blenlib @@ -40,7 +39,6 @@ SET(INC ../../../source/blender/python ../../../source/blender/python/generic ../../../source/blender - ../../../source/blender/include ../../../source/blender/makesdna ../../../source/gameengine/Rasterizer ../../../source/gameengine/GameLogic @@ -51,7 +49,6 @@ SET(INC ../../../source/gameengine/Physics/common ../../../source/gameengine/Network/LoopBackNetwork ../../../intern/audaspace/intern - ../../../source/blender/misc ../../../source/blender/blenloader ../../../source/blender/gpu ../../../extern/glew/include @@ -137,8 +134,7 @@ ENDIF(WITH_SDL) IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) IF(WITH_FFMPEG) diff --git a/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt b/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt index 2b1c1a698f3..5099534c0ad 100644 --- a/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt +++ b/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt @@ -46,8 +46,7 @@ SET(SRC IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(kx_network "${SRC}" "${INC}") diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp index e047a9aa273..0f563dc4fe4 100644 --- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp +++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp @@ -91,7 +91,7 @@ CValue* KX_NetworkMessageActuator::GetReplica() return replica; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* -------------------------------------------------------------------- */ /* Python interface --------------------------------------------------- */ @@ -132,4 +132,4 @@ PyAttributeDef KX_NetworkMessageActuator::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp index 56ccac9a93e..91b05990ba1 100644 --- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp +++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp @@ -154,7 +154,7 @@ bool KX_NetworkMessageSensor::IsPositiveTrigger() return m_IsUp; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -215,4 +215,4 @@ PyObject* KX_NetworkMessageSensor::pyattr_get_subjects(void *self_v, const KX_PY } } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h index 1efd25dd65f..8f5a11426a7 100644 --- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h +++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h @@ -71,7 +71,7 @@ public: m_NetworkScene= val; }; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------- */ /* Python interface -------------------------------------------- */ @@ -81,7 +81,7 @@ public: static PyObject* pyattr_get_bodies(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_subjects(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/Ketsji/KXNetwork/SConscript b/source/gameengine/Ketsji/KXNetwork/SConscript index e7f98ff5850..78cdc8df9af 100644 --- a/source/gameengine/Ketsji/KXNetwork/SConscript +++ b/source/gameengine/Ketsji/KXNetwork/SConscript @@ -11,7 +11,6 @@ defs = [] if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') env.BlenderLib ( 'bf_network', Split(sources), Split(incs), defines=defs,libtype=['core','player'], priority=[400,125], cxx_compileflags=env['BGE_CXXFLAGS']) diff --git a/source/gameengine/Ketsji/KX_ArmatureSensor.cpp b/source/gameengine/Ketsji/KX_ArmatureSensor.cpp index a47a1972beb..732c0b910df 100644 --- a/source/gameengine/Ketsji/KX_ArmatureSensor.cpp +++ b/source/gameengine/Ketsji/KX_ArmatureSensor.cpp @@ -149,7 +149,7 @@ bool KX_ArmatureSensor::Evaluate() return (reset) ? true : false; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -201,4 +201,4 @@ PyObject* KX_ArmatureSensor::pyattr_get_constraint(void *self, const struct KX_P Py_RETURN_NONE; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_ArmatureSensor.h b/source/gameengine/Ketsji/KX_ArmatureSensor.h index 636309f5bdf..b007899c4ff 100644 --- a/source/gameengine/Ketsji/KX_ArmatureSensor.h +++ b/source/gameengine/Ketsji/KX_ArmatureSensor.h @@ -66,14 +66,14 @@ public: // identify the constraint that this actuator controls void FindConstraint(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ static PyObject* pyattr_get_constraint(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON private: struct bConstraint* m_constraint; diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp index d88997e2128..a4dc68b92e5 100644 --- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp +++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp @@ -783,7 +783,7 @@ void KX_BlenderMaterial::SetBlenderGLSLShader(int layer) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyMethodDef KX_BlenderMaterial::Methods[] = { @@ -967,4 +967,4 @@ KX_PYMETHODDEF_DOC( KX_BlenderMaterial, setBlending , "setBlending( bge.logic.sr return NULL; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h index 239e334f68a..745045ff784 100644 --- a/source/gameengine/Ketsji/KX_BlenderMaterial.h +++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h @@ -98,7 +98,7 @@ public: } }; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // -------------------------------- virtual PyObject* py_repr(void) { return PyUnicode_FromString(mMaterial->matname.ReadPtr()); } @@ -113,7 +113,7 @@ public: KX_PYMETHOD_DOC( KX_BlenderMaterial, setTexture ); KX_PYMETHOD_DOC( KX_BlenderMaterial, setBlending ); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON // -------------------------------- // pre calculate to avoid pops/lag at startup diff --git a/source/gameengine/Ketsji/KX_Camera.cpp b/source/gameengine/Ketsji/KX_Camera.cpp index 2402baf92ac..46a92365302 100644 --- a/source/gameengine/Ketsji/KX_Camera.cpp +++ b/source/gameengine/Ketsji/KX_Camera.cpp @@ -474,7 +474,7 @@ int KX_Camera::GetViewportTop() const return m_camdata.m_viewporttop; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON //---------------------------------------------------------------------------- //Python diff --git a/source/gameengine/Ketsji/KX_Camera.h b/source/gameengine/Ketsji/KX_Camera.h index ad2460d34ef..130dfd4067d 100644 --- a/source/gameengine/Ketsji/KX_Camera.h +++ b/source/gameengine/Ketsji/KX_Camera.h @@ -41,7 +41,7 @@ #include "IntValue.h" #include "RAS_CameraData.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* utility conversion function */ bool ConvertPythonToCamera(PyObject * value, KX_Camera **object, bool py_none_ok, const char *error_prefix); #endif @@ -269,7 +269,7 @@ public: virtual int GetGameObjectType() { return OBJ_CAMERA; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_DOC_VARARGS(KX_Camera, sphereInsideFrustum); KX_PYMETHOD_DOC_O(KX_Camera, boxInsideFrustum); KX_PYMETHOD_DOC_O(KX_Camera, pointInsideFrustum); diff --git a/source/gameengine/Ketsji/KX_CameraActuator.cpp b/source/gameengine/Ketsji/KX_CameraActuator.cpp index bc67ecbe1a5..18d3e046577 100644 --- a/source/gameengine/Ketsji/KX_CameraActuator.cpp +++ b/source/gameengine/Ketsji/KX_CameraActuator.cpp @@ -346,7 +346,7 @@ CValue *KX_CameraActuator::findObject(char *obName) return NULL; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -414,6 +414,6 @@ int KX_CameraActuator::pyattr_set_object(void *self_v, const KX_PYATTRIBUTE_DEF return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_CameraActuator.h b/source/gameengine/Ketsji/KX_CameraActuator.h index 2bc0ee18593..0a0a47f1ce2 100644 --- a/source/gameengine/Ketsji/KX_CameraActuator.h +++ b/source/gameengine/Ketsji/KX_CameraActuator.h @@ -114,7 +114,7 @@ private : /** Methods inherited from SCA_ILogicBrick */ virtual void Relink(GEN_Map *obj_map); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -124,7 +124,7 @@ private : static PyObject* pyattr_get_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/Ketsji/KX_ConstraintActuator.cpp b/source/gameengine/Ketsji/KX_ConstraintActuator.cpp index 9380f4b5d2f..15a4a4680bb 100644 --- a/source/gameengine/Ketsji/KX_ConstraintActuator.cpp +++ b/source/gameengine/Ketsji/KX_ConstraintActuator.cpp @@ -557,7 +557,7 @@ bool KX_ConstraintActuator::IsValidMode(KX_ConstraintActuator::KX_CONSTRAINTTYPE return res; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp index b1baa5fe9e1..2882ca5a371 100644 --- a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp +++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp @@ -45,7 +45,7 @@ KX_ConstraintWrapper::~KX_ConstraintWrapper() { } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* KX_ConstraintWrapper::PyGetConstraintId() { @@ -120,4 +120,4 @@ PyObject* KX_ConstraintWrapper::pyattr_get_constraintId(void *self_v, const KX_P return self->PyGetConstraintId(); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.h b/source/gameengine/Ketsji/KX_ConstraintWrapper.h index db9543c23ae..58c204d5da0 100644 --- a/source/gameengine/Ketsji/KX_ConstraintWrapper.h +++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.h @@ -40,7 +40,7 @@ public: virtual ~KX_ConstraintWrapper (); int getConstraintId() { return m_constraintId;}; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_NOARGS(KX_ConstraintWrapper,GetConstraintId); KX_PYMETHOD(KX_ConstraintWrapper,SetParam); KX_PYMETHOD(KX_ConstraintWrapper,GetParam); diff --git a/source/gameengine/Ketsji/KX_Dome.cpp b/source/gameengine/Ketsji/KX_Dome.cpp index 64ef06a4e09..36fc02ab833 100644 --- a/source/gameengine/Ketsji/KX_Dome.cpp +++ b/source/gameengine/Ketsji/KX_Dome.cpp @@ -24,7 +24,7 @@ Developed as part of a Research and Development project for SAT - La Société d #include "KX_Dome.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include #endif diff --git a/source/gameengine/Ketsji/KX_GameActuator.cpp b/source/gameengine/Ketsji/KX_GameActuator.cpp index 208c526398a..1a195913e4a 100644 --- a/source/gameengine/Ketsji/KX_GameActuator.cpp +++ b/source/gameengine/Ketsji/KX_GameActuator.cpp @@ -124,7 +124,7 @@ bool KX_GameActuator::Update() } case KX_GAME_SAVECFG: { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (m_ketsjiengine) { char mashal_path[512]; @@ -152,11 +152,11 @@ bool KX_GameActuator::Update() delete [] marshal_buffer; } break; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON } case KX_GAME_LOADCFG: { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (m_ketsjiengine) { char mashal_path[512]; @@ -191,7 +191,7 @@ bool KX_GameActuator::Update() } } break; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON } default: ; /* do nothing? this is an internal error !!! */ @@ -201,7 +201,7 @@ bool KX_GameActuator::Update() } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -241,4 +241,4 @@ PyAttributeDef KX_GameActuator::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp index bbb17cd1df9..6b1c36a1589 100644 --- a/source/gameengine/Ketsji/KX_GameObject.cpp +++ b/source/gameengine/Ketsji/KX_GameObject.cpp @@ -102,7 +102,7 @@ KX_GameObject::KX_GameObject( m_xray(false), m_pHitObject(NULL), m_isDeformable(false) -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON , m_attr_dict(NULL) #endif { @@ -148,12 +148,12 @@ KX_GameObject::~KX_GameObject() { delete m_pGraphicController; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (m_attr_dict) { PyDict_Clear(m_attr_dict); /* incase of circular refs or other weired cases */ Py_DECREF(m_attr_dict); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON } KX_GameObject* KX_GameObject::GetClientObject(KX_ClientObjectInfo* info) @@ -348,7 +348,7 @@ void KX_GameObject::ProcessReplica() m_pClient_info->m_gameobject = this; m_state = 0; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(m_attr_dict) m_attr_dict= PyDict_Copy(m_attr_dict); #endif @@ -1448,7 +1448,7 @@ void KX_GameObject_Mathutils_Callback_Init(void) #endif // USE_MATHUTILS -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------- python stuff ---------------------------------------------------*/ PyMethodDef KX_GameObject::Methods[] = { {"applyForce", (PyCFunction) KX_GameObject::sPyApplyForce, METH_VARARGS}, @@ -3053,4 +3053,4 @@ bool ConvertPythonToGameObject(PyObject * value, KX_GameObject **object, bool py return false; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_GameObject.h b/source/gameengine/Ketsji/KX_GameObject.h index 14587d25c7f..640816e19ca 100644 --- a/source/gameengine/Ketsji/KX_GameObject.h +++ b/source/gameengine/Ketsji/KX_GameObject.h @@ -60,7 +60,7 @@ class PHY_IGraphicController; class PHY_IPhysicsEnvironment; struct Object; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* utility conversion function */ bool ConvertPythonToGameObject(PyObject * value, KX_GameObject **object, bool py_none_ok, const char *error_prefix); #endif @@ -116,7 +116,7 @@ public: */ static KX_GameObject* GetClientObject(KX_ClientObjectInfo* info); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // Python attributes that wont convert into CValue // // there are 2 places attributes can be stored, in the CValue, @@ -796,7 +796,7 @@ public: CListValue* GetChildren(); CListValue* GetChildrenRecursive(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /** * @section Python interface functions. */ diff --git a/source/gameengine/Ketsji/KX_IpoActuator.cpp b/source/gameengine/Ketsji/KX_IpoActuator.cpp index eca40cafb0e..605aea5f592 100644 --- a/source/gameengine/Ketsji/KX_IpoActuator.cpp +++ b/source/gameengine/Ketsji/KX_IpoActuator.cpp @@ -400,7 +400,7 @@ int KX_IpoActuator::string2mode(char* modename) { return res; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -448,6 +448,6 @@ PyAttributeDef KX_IpoActuator::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp index 4f3b6e5bb96..a1c7957dc72 100644 --- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp +++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp @@ -112,7 +112,7 @@ KX_KetsjiEngine::KX_KetsjiEngine(KX_ISystem* system) m_rendertools(NULL), m_sceneconverter(NULL), m_networkdevice(NULL), -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_pythondictionary(NULL), #endif m_keyboarddevice(NULL), @@ -233,7 +233,7 @@ void KX_KetsjiEngine::SetRasterizer(RAS_IRasterizer* rasterizer) m_rasterizer = rasterizer; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* * At the moment the bge.logic module is imported into 'pythondictionary' after this function is called. * if this function ever changes to assign a copy, make sure the game logic module is imported into this dictionary before hand. @@ -370,7 +370,7 @@ void KX_KetsjiEngine::RenderDome() } m_dome->Draw(); // Draw Callback for the last scene -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON scene->RunDrawingCallbacks(scene->GetPostDrawCB()); #endif EndFrame(); @@ -612,7 +612,7 @@ else m_logger->StartLog(tc_physics, m_kxsystem->GetTimeInSeconds(), true); SG_SetActiveStage(SG_STAGE_PHYSICS1); // set Python hooks for each scene -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PHY_SetActiveEnvironment(scene->GetPhysicsEnvironment()); #endif KX_SetActiveScene(scene); @@ -716,7 +716,7 @@ else m_suspendeddelta = scene->getSuspendedDelta(); // set Python hooks for each scene -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PHY_SetActiveEnvironment(scene->GetPhysicsEnvironment()); #endif KX_SetActiveScene(scene); @@ -1287,7 +1287,7 @@ void KX_KetsjiEngine::RenderFrame(KX_Scene* scene, KX_Camera* cam) m_logger->StartLog(tc_rasterizer, m_kxsystem->GetTimeInSeconds(), true); SG_SetActiveStage(SG_STAGE_RENDER); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // Run any pre-drawing python callbacks scene->RunDrawingCallbacks(scene->GetPreDrawCB()); #endif @@ -1304,7 +1304,7 @@ void KX_KetsjiEngine::PostRenderScene(KX_Scene* scene) { m_rendertools->MotionBlur(m_rasterizer); scene->Render2DFilters(m_canvas); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON scene->RunDrawingCallbacks(scene->GetPostDrawCB()); #endif m_rasterizer->FlushDebugLines(); diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.h b/source/gameengine/Ketsji/KX_KetsjiEngine.h index f52ec8192cc..4ce14e100cc 100644 --- a/source/gameengine/Ketsji/KX_KetsjiEngine.h +++ b/source/gameengine/Ketsji/KX_KetsjiEngine.h @@ -70,7 +70,7 @@ private: class RAS_IRenderTools* m_rendertools; class KX_ISceneConverter* m_sceneconverter; class NG_NetworkDeviceInterface* m_networkdevice; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* borrowed from sys.modules["__main__"], dont manage ref's */ PyObject* m_pythondictionary; #endif @@ -204,7 +204,7 @@ public: void SetCanvas(RAS_ICanvas* canvas); void SetRenderTools(RAS_IRenderTools* rendertools); void SetRasterizer(RAS_IRasterizer* rasterizer); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON void SetPyNamespace(PyObject* pythondictionary); PyObject* GetPyNamespace(){return m_pythondictionary;}; #endif diff --git a/source/gameengine/Ketsji/KX_Light.cpp b/source/gameengine/Ketsji/KX_Light.cpp index fdd325c46a1..b608be4c89f 100644 --- a/source/gameengine/Ketsji/KX_Light.cpp +++ b/source/gameengine/Ketsji/KX_Light.cpp @@ -259,7 +259,7 @@ void KX_LightObject::UnbindShadowBuffer(RAS_IRasterizer *ras) GPU_lamp_shadow_buffer_unbind(lamp); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python Integration Hooks */ /* ------------------------------------------------------------------------- */ @@ -385,4 +385,4 @@ int KX_LightObject::pyattr_set_type(void* self_v, const KX_PYATTRIBUTE_DEF *attr return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_Light.h b/source/gameengine/Ketsji/KX_Light.h index 334aed1995d..f7b40d24293 100644 --- a/source/gameengine/Ketsji/KX_Light.h +++ b/source/gameengine/Ketsji/KX_Light.h @@ -69,7 +69,7 @@ public: virtual int GetGameObjectType() { return OBJ_LIGHT; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* attributes */ static PyObject* pyattr_get_color(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_color(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject* value); diff --git a/source/gameengine/Ketsji/KX_MeshProxy.cpp b/source/gameengine/Ketsji/KX_MeshProxy.cpp index a5ff7ebcbc1..3cedda38201 100644 --- a/source/gameengine/Ketsji/KX_MeshProxy.cpp +++ b/source/gameengine/Ketsji/KX_MeshProxy.cpp @@ -26,7 +26,7 @@ * ***** END GPL LICENSE BLOCK ***** */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "KX_MeshProxy.h" #include "RAS_IPolygonMaterial.h" @@ -308,4 +308,4 @@ bool ConvertPythonToMesh(PyObject * value, RAS_MeshObject **object, bool py_none return false; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_MeshProxy.h b/source/gameengine/Ketsji/KX_MeshProxy.h index 7b627040b4c..29231498163 100644 --- a/source/gameengine/Ketsji/KX_MeshProxy.h +++ b/source/gameengine/Ketsji/KX_MeshProxy.h @@ -29,7 +29,7 @@ #ifndef __KX_MESHPROXY #define __KX_MESHPROXY -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "SCA_IObject.h" @@ -74,7 +74,7 @@ public: static PyObject * pyattr_get_numPolygons(void * self, const KX_PYATTRIBUTE_DEF * attrdef); }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON #endif //__KX_MESHPROXY diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp index 19114c86c98..637210525f8 100644 --- a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp +++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp @@ -347,7 +347,7 @@ const MT_Vector2& KX_MouseFocusSensor::HitUV() const return m_hitUV; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -442,7 +442,7 @@ PyObject* KX_MouseFocusSensor::pyattr_get_hit_uv(void *self_v, const KX_PYATTRIB return PyObjectFrom(self->HitUV()); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.h b/source/gameengine/Ketsji/KX_MouseFocusSensor.h index c969aa3ec74..3ea0f932314 100644 --- a/source/gameengine/Ketsji/KX_MouseFocusSensor.h +++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.h @@ -94,7 +94,7 @@ class KX_MouseFocusSensor : public SCA_MouseSensor const MT_Vector3& HitNormal() const; const MT_Vector2& HitUV() const; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -109,7 +109,7 @@ class KX_MouseFocusSensor : public SCA_MouseSensor static PyObject* pyattr_get_hit_normal(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_hit_uv(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* --------------------------------------------------------------------- */ SCA_IObject* m_hitObject; diff --git a/source/gameengine/Ketsji/KX_NearSensor.cpp b/source/gameengine/Ketsji/KX_NearSensor.cpp index 36c1b0f5bd1..c9af5d8d2a5 100644 --- a/source/gameengine/Ketsji/KX_NearSensor.cpp +++ b/source/gameengine/Ketsji/KX_NearSensor.cpp @@ -242,7 +242,7 @@ bool KX_NearSensor::NewHandleCollision(void* obj1,void* obj2,const PHY_CollData return false; // was DT_CONTINUE; but this was defined in Sumo as false } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python Functions */ @@ -285,4 +285,4 @@ PyAttributeDef KX_NearSensor::Attributes[] = { {NULL} //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_NearSensor.h b/source/gameengine/Ketsji/KX_NearSensor.h index 10dba22c4e9..67f235ceae2 100644 --- a/source/gameengine/Ketsji/KX_NearSensor.h +++ b/source/gameengine/Ketsji/KX_NearSensor.h @@ -78,7 +78,7 @@ public: virtual bool BroadPhaseSensorFilterCollision(void*obj1,void*obj2) { return false; }; virtual sensortype GetSensorType() { return ST_NEAR; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -99,7 +99,7 @@ public: return 0; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/Ketsji/KX_ObjectActuator.cpp b/source/gameengine/Ketsji/KX_ObjectActuator.cpp index 0d0cac3c084..9f1df329005 100644 --- a/source/gameengine/Ketsji/KX_ObjectActuator.cpp +++ b/source/gameengine/Ketsji/KX_ObjectActuator.cpp @@ -313,7 +313,7 @@ bool KX_ObjectActuator::isValid(KX_ObjectActuator::KX_OBJECT_ACT_VEC_TYPE type) return res; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -636,6 +636,6 @@ int KX_ObjectActuator::pyattr_set_reference(void *self, const struct KX_PYATTRIB return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_ObjectActuator.h b/source/gameengine/Ketsji/KX_ObjectActuator.h index b12cf77d3e1..9dab1e39cba 100644 --- a/source/gameengine/Ketsji/KX_ObjectActuator.h +++ b/source/gameengine/Ketsji/KX_ObjectActuator.h @@ -157,7 +157,7 @@ public: } virtual bool Update(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -217,7 +217,7 @@ public: return 0; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/Ketsji/KX_ParentActuator.cpp b/source/gameengine/Ketsji/KX_ParentActuator.cpp index 62740585831..b41d48f5cf3 100644 --- a/source/gameengine/Ketsji/KX_ParentActuator.cpp +++ b/source/gameengine/Ketsji/KX_ParentActuator.cpp @@ -130,7 +130,7 @@ bool KX_ParentActuator::Update() return false; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -199,6 +199,6 @@ int KX_ParentActuator::pyattr_set_object(void *self, const struct KX_PYATTRIBUTE return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_ParentActuator.h b/source/gameengine/Ketsji/KX_ParentActuator.h index 884b1829ae3..28745c6d0f5 100644 --- a/source/gameengine/Ketsji/KX_ParentActuator.h +++ b/source/gameengine/Ketsji/KX_ParentActuator.h @@ -77,7 +77,7 @@ class KX_ParentActuator : public SCA_IActuator virtual void Relink(GEN_Map *obj_map); virtual bool UnlinkObject(SCA_IObject* clientobj); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -87,7 +87,7 @@ class KX_ParentActuator : public SCA_IActuator static PyObject* pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; /* end of class KX_ParentActuator : public SCA_PropertyActuator */ diff --git a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp index 15fc3e5c471..471774866ac 100644 --- a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp +++ b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp @@ -46,7 +46,7 @@ KX_PhysicsObjectWrapper::~KX_PhysicsObjectWrapper() { } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* KX_PhysicsObjectWrapper::PySetPosition(PyObject* args) { diff --git a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h index 01980c0f644..ca7e99350c4 100644 --- a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h +++ b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h @@ -39,14 +39,14 @@ public: KX_PhysicsObjectWrapper(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsEnvironment* physenv); virtual ~KX_PhysicsObjectWrapper(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetPosition); KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetLinearVelocity); KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetAngularVelocity); KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetActive); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON private: class PHY_IPhysicsController* m_ctrl; diff --git a/source/gameengine/Ketsji/KX_PolyProxy.cpp b/source/gameengine/Ketsji/KX_PolyProxy.cpp index 9395e57e68b..9843d93c506 100644 --- a/source/gameengine/Ketsji/KX_PolyProxy.cpp +++ b/source/gameengine/Ketsji/KX_PolyProxy.cpp @@ -26,7 +26,7 @@ * ***** END GPL LICENSE BLOCK ***** */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "KX_PolyProxy.h" #include "KX_MeshProxy.h" @@ -267,4 +267,4 @@ KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterial, } } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_PolyProxy.h b/source/gameengine/Ketsji/KX_PolyProxy.h index 3e669630e30..179fb67f85f 100644 --- a/source/gameengine/Ketsji/KX_PolyProxy.h +++ b/source/gameengine/Ketsji/KX_PolyProxy.h @@ -29,7 +29,7 @@ #ifndef __KX_POLYROXY #define __KX_POLYPROXY -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "SCA_IObject.h" @@ -77,7 +77,7 @@ public: }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON #endif //__KX_POLYPROXY diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp index 63204b16e8b..89889845125 100644 --- a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp +++ b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp @@ -54,7 +54,7 @@ KX_PolygonMaterial::KX_PolygonMaterial() m_tface(NULL), m_mcol(NULL), m_material(NULL), -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_pymaterial(NULL), #endif m_pass(0) @@ -90,7 +90,7 @@ void KX_PolygonMaterial::Initialize( m_tface = tface; m_mcol = mcol; m_material = ma; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_pymaterial = 0; #endif m_pass = 0; @@ -98,19 +98,19 @@ void KX_PolygonMaterial::Initialize( KX_PolygonMaterial::~KX_PolygonMaterial() { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (m_pymaterial) { Py_DECREF(m_pymaterial); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON } bool KX_PolygonMaterial::Activate(RAS_IRasterizer* rasty, TCachingInfo& cachingInfo) const { bool dopass = false; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (m_pymaterial) { PyObject *pyRasty = PyCObject_FromVoidPtr((void*)rasty, NULL); /* new reference */ @@ -130,7 +130,7 @@ bool KX_PolygonMaterial::Activate(RAS_IRasterizer* rasty, TCachingInfo& cachingI } } else -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON { switch (m_pass++) { @@ -201,7 +201,7 @@ void KX_PolygonMaterial::GetMaterialRGBAColor(unsigned char *rgba) const RAS_IPolyMaterial::GetMaterialRGBAColor(rgba); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON //---------------------------------------------------------------------------- //Python @@ -393,4 +393,4 @@ int KX_PolygonMaterial::pyattr_set_specular(void *self_v, const KX_PYATTRIBUTE_D return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.h b/source/gameengine/Ketsji/KX_PolygonMaterial.h index 03b4bf11a18..17adbac79c0 100644 --- a/source/gameengine/Ketsji/KX_PolygonMaterial.h +++ b/source/gameengine/Ketsji/KX_PolygonMaterial.h @@ -58,7 +58,7 @@ private: unsigned int* m_mcol; Material* m_material; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* m_pymaterial; #endif @@ -122,7 +122,7 @@ public: } virtual void GetMaterialRGBAColor(unsigned char *rgba) const; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_DOC(KX_PolygonMaterial, updateTexture); KX_PYMETHOD_DOC(KX_PolygonMaterial, setTexture); KX_PYMETHOD_DOC(KX_PolygonMaterial, activate); diff --git a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp index bbf8152bd68..d2cb9aef985 100644 --- a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp +++ b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp @@ -37,7 +37,7 @@ #include "PyObjectPlus.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // nasty glob variable to connect scripting language // if there is a better way (without global), please do so! @@ -659,5 +659,5 @@ PHY_IPhysicsEnvironment* PHY_GetActiveEnvironment() return g_CurrentActivePhysicsEnvironment; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_PyConstraintBinding.h b/source/gameengine/Ketsji/KX_PyConstraintBinding.h index a1b3c3d6da3..6da60794eb0 100644 --- a/source/gameengine/Ketsji/KX_PyConstraintBinding.h +++ b/source/gameengine/Ketsji/KX_PyConstraintBinding.h @@ -29,7 +29,7 @@ #ifndef PHY_PYTHON_CONSTRAINTBINDING #define PHY_PYTHON_CONSTRAINTBINDING -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include @@ -37,7 +37,7 @@ PyObject* initPythonConstraintBinding(); void PHY_RemovePythonConstraintBinding(); void PHY_SetActiveEnvironment(class PHY_IPhysicsEnvironment* env); PHY_IPhysicsEnvironment* PHY_GetActiveEnvironment(); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON #endif //PHY_PYTHON_CONSTRAINTBINDING diff --git a/source/gameengine/Ketsji/KX_PyMath.cpp b/source/gameengine/Ketsji/KX_PyMath.cpp index 12f88331d15..45957ca1911 100644 --- a/source/gameengine/Ketsji/KX_PyMath.cpp +++ b/source/gameengine/Ketsji/KX_PyMath.cpp @@ -32,7 +32,7 @@ #pragma warning (disable : 4786) #endif //WIN32 -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "MT_Vector3.h" #include "MT_Vector4.h" @@ -190,4 +190,4 @@ PyObject* PyObjectFrom(const MT_Tuple2 &vec) #endif } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_PyMath.h b/source/gameengine/Ketsji/KX_PyMath.h index 9c9688f79cd..589bd72c760 100644 --- a/source/gameengine/Ketsji/KX_PyMath.h +++ b/source/gameengine/Ketsji/KX_PyMath.h @@ -42,7 +42,7 @@ #include "KX_Python.h" #include "PyObjectPlus.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #ifdef USE_MATHUTILS extern "C" { #include "../../blender/python/generic/mathutils.h" /* so we can have mathutils callbacks */ @@ -239,4 +239,4 @@ PyObject* PyObjectFrom(const MT_Tuple4 &pos); #endif -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index 56ec61f9f4c..99870c42018 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -34,20 +34,28 @@ #pragma warning (disable : 4786) #endif //WIN32 -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON + +#ifdef _POSIX_C_SOURCE +#undef _POSIX_C_SOURCE +#endif + +#ifdef _XOPEN_SOURCE +#undef _XOPEN_SOURCE +#endif + +#include extern "C" { #include "bpy_internal_import.h" /* from the blender python api, but we want to import text too! */ #include "py_capi_utils.h" #include "mathutils.h" // Blender.Mathutils module copied here so the blenderlayer can use. - #include "geometry.h" // Blender.Geometry module copied here so the blenderlayer can use. #include "bgl.h" #include "blf_api.h" #include "marshal.h" /* python header for loading/saving dicts */ } -#define WITH_PYTHON #include "AUD_PyInit.h" #endif @@ -130,7 +138,7 @@ extern "C" { // 'local' copy of canvas ptr, for window height/width python scripts -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static RAS_ICanvas* gp_Canvas = NULL; static char gp_GamePythonPath[FILE_MAXDIR + FILE_MAXFILE] = ""; @@ -138,7 +146,7 @@ static char gp_GamePythonPathOrig[FILE_MAXDIR + FILE_MAXFILE] = ""; // not super static SCA_PythonKeyboard* gp_PythonKeyboard = NULL; static SCA_PythonMouse* gp_PythonMouse = NULL; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON static KX_Scene* gp_KetsjiScene = NULL; static KX_KetsjiEngine* gp_KetsjiEngine = NULL; @@ -167,7 +175,7 @@ void KX_RasterizerDrawDebugLine(const MT_Vector3& from,const MT_Vector3& to,cons gp_Rasterizer->DrawDebugLine(from,to,color); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static PyObject *gp_OrigPythonSysPath= NULL; static PyObject *gp_OrigPythonSysModules= NULL; @@ -2324,22 +2332,22 @@ PyObject* initGameKeys() PyObject* initMathutils() { - return Mathutils_Init(); + return BPyInit_mathutils(); } PyObject* initGeometry() { - return Geometry_Init(); + return BPyInit_mathutils_geometry(); } PyObject* initBGL() { - return BGL_Init(); + return BPyInit_bgl(); } PyObject* initBLF() { - return BLF_Init(); + return BPyInit_blf(); } // utility function for loading and saving the globalDict @@ -2443,4 +2451,4 @@ void resetGamePythonPath() gp_GamePythonPathOrig[0] = '\0'; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_PythonInit.h b/source/gameengine/Ketsji/KX_PythonInit.h index fb59a2f21eb..7b0ed08c6bb 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.h +++ b/source/gameengine/Ketsji/KX_PythonInit.h @@ -39,7 +39,7 @@ typedef enum { extern bool gUseVisibilityTemp; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* initGameLogic(class KX_KetsjiEngine *engine, class KX_Scene* ketsjiscene); PyObject* initGameKeys(); PyObject* initRasterizer(class RAS_IRasterizer* rasty,class RAS_ICanvas* canvas); diff --git a/source/gameengine/Ketsji/KX_PythonInitTypes.cpp b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp index 6b9d7a2cccf..3cca4f39f85 100644 --- a/source/gameengine/Ketsji/KX_PythonInitTypes.cpp +++ b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp @@ -32,7 +32,7 @@ #ifndef _adr_py_init_types_h_ // only process once, #define _adr_py_init_types_h_ // even if multiply included -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Only for Class::Parents */ #include "BL_BlenderShader.h" @@ -256,6 +256,6 @@ void initPyTypes(void) #endif } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON #endif diff --git a/source/gameengine/Ketsji/KX_PythonInitTypes.h b/source/gameengine/Ketsji/KX_PythonInitTypes.h index c16fafedf93..1053f320e5e 100644 --- a/source/gameengine/Ketsji/KX_PythonInitTypes.h +++ b/source/gameengine/Ketsji/KX_PythonInitTypes.h @@ -30,7 +30,7 @@ #ifndef _adr_py_init_types_h_ // only process once, #define _adr_py_init_types_h_ // even if multiply included -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON void initPyTypes(void); #endif diff --git a/source/gameengine/Ketsji/KX_PythonSeq.cpp b/source/gameengine/Ketsji/KX_PythonSeq.cpp index 5c87fe2e757..bed3f33ab77 100644 --- a/source/gameengine/Ketsji/KX_PythonSeq.cpp +++ b/source/gameengine/Ketsji/KX_PythonSeq.cpp @@ -28,7 +28,7 @@ * Readonly sequence wrapper for lookups on logic bricks */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "KX_PythonSeq.h" #include "KX_GameObject.h" @@ -512,4 +512,4 @@ PyTypeObject KX_PythonSeq_Type = { NULL }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_PythonSeq.h b/source/gameengine/Ketsji/KX_PythonSeq.h index ca8f667852a..7ca36cc19f4 100644 --- a/source/gameengine/Ketsji/KX_PythonSeq.h +++ b/source/gameengine/Ketsji/KX_PythonSeq.h @@ -31,7 +31,7 @@ #ifndef _adr_py_seq_h_ // only process once, #define _adr_py_seq_h_ // even if multiply included -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "PyObjectPlus.h" @@ -61,6 +61,6 @@ typedef struct { PyObject *KX_PythonSeq_CreatePyObject(PyObject *base, short type); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON #endif // _adr_py_seq_h_ diff --git a/source/gameengine/Ketsji/KX_RadarSensor.cpp b/source/gameengine/Ketsji/KX_RadarSensor.cpp index 041559158dd..60dc3be7d6e 100644 --- a/source/gameengine/Ketsji/KX_RadarSensor.cpp +++ b/source/gameengine/Ketsji/KX_RadarSensor.cpp @@ -172,7 +172,7 @@ void KX_RadarSensor::SynchronizeTransform() /* Python Functions */ /* ------------------------------------------------------------------------- */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python Integration Hooks */ @@ -212,4 +212,4 @@ PyAttributeDef KX_RadarSensor::Attributes[] = { {NULL} //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_RaySensor.cpp b/source/gameengine/Ketsji/KX_RaySensor.cpp index e745d1f0334..001c7a290d7 100644 --- a/source/gameengine/Ketsji/KX_RaySensor.cpp +++ b/source/gameengine/Ketsji/KX_RaySensor.cpp @@ -309,7 +309,7 @@ bool KX_RaySensor::Evaluate() return result; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -365,4 +365,4 @@ PyObject* KX_RaySensor::pyattr_get_hitobject(void *self_v, const KX_PYATTRIBUTE_ Py_RETURN_NONE; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_RaySensor.h b/source/gameengine/Ketsji/KX_RaySensor.h index 34f7d8a7b1d..ac0b5eba26b 100644 --- a/source/gameengine/Ketsji/KX_RaySensor.h +++ b/source/gameengine/Ketsji/KX_RaySensor.h @@ -90,12 +90,12 @@ public: KX_RAY_AXIS_NEG_Z }; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Attributes */ static PyObject* pyattr_get_hitobject(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp index eee6146f6ed..34b49045337 100644 --- a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp +++ b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp @@ -159,7 +159,7 @@ void KX_SCA_AddObjectActuator::Relink(GEN_Map *obj_map) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -246,7 +246,7 @@ PyObject* KX_SCA_AddObjectActuator::PyInstantAddObject() Py_RETURN_NONE; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON void KX_SCA_AddObjectActuator::InstantAddObject() { diff --git a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h index c2068d157ee..16612f9a743 100644 --- a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h +++ b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h @@ -122,7 +122,7 @@ public: void InstantAddObject(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_DOC_NOARGS(KX_SCA_AddObjectActuator,InstantAddObject); @@ -130,7 +130,7 @@ public: static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); static PyObject* pyattr_get_objectLastCreated(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; /* end of class KX_SCA_AddObjectActuator : public KX_EditObjectActuator */ diff --git a/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp b/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp index bc59c63dc69..6e36bde59ec 100644 --- a/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp +++ b/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp @@ -37,7 +37,7 @@ #include "KX_SCA_DynamicActuator.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -77,7 +77,7 @@ PyAttributeDef KX_SCA_DynamicActuator::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Native functions */ diff --git a/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp b/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp index c9ead726905..f50dc9fc46a 100644 --- a/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp +++ b/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp @@ -80,7 +80,7 @@ CValue* KX_SCA_EndObjectActuator::GetReplica() return replica; }; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions : integration hooks */ @@ -116,6 +116,6 @@ PyAttributeDef KX_SCA_EndObjectActuator::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp index 20c3168d7ba..51a3979830d 100644 --- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp +++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp @@ -40,7 +40,7 @@ #include "PyObjectPlus.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -110,7 +110,7 @@ KX_PYMETHODDEF_DOC(KX_SCA_ReplaceMeshActuator, instantReplaceMesh, Py_RETURN_NONE; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Native functions */ diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h index 4a6ae9f8fce..573ec76782c 100644 --- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h +++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h @@ -74,7 +74,7 @@ class KX_SCA_ReplaceMeshActuator : public SCA_IActuator void InstantReplaceMesh(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -90,7 +90,7 @@ class KX_SCA_ReplaceMeshActuator : public SCA_IActuator KX_PYMETHOD_DOC(KX_SCA_ReplaceMeshActuator,instantReplaceMesh); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp index 3d7fcb25f2b..c48112dbcb7 100644 --- a/source/gameengine/Ketsji/KX_Scene.cpp +++ b/source/gameengine/Ketsji/KX_Scene.cpp @@ -208,7 +208,7 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice, m_bucketmanager=new RAS_BucketManager(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_attr_dict = PyDict_New(); /* new ref */ m_draw_call_pre = NULL; m_draw_call_post = NULL; @@ -262,7 +262,7 @@ KX_Scene::~KX_Scene() delete m_bucketmanager; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyDict_Clear(m_attr_dict); Py_DECREF(m_attr_dict); @@ -1073,8 +1073,9 @@ void KX_Scene::ReplaceMesh(class CValue* obj,void* meshobj, bool use_gfx, bool u blendobj->parent && // original object had armature (not sure this test is needed) blendobj->parent->type == OB_ARMATURE && blendmesh->dvert!=NULL; // mesh has vertex group +#ifdef USE_BULLET bool bHasSoftBody = (!parentobj && (blendobj->gameflag & OB_SOFT_BODY)); - +#endif bool releaseParent = true; @@ -1838,7 +1839,7 @@ void KX_Scene::Render2DFilters(RAS_ICanvas* canvas) m_filtermanager.RenderFilters(canvas); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON void KX_Scene::RunDrawingCallbacks(PyObject* cb_list) { @@ -2248,4 +2249,4 @@ KX_PYMETHODDEF_DOC(KX_Scene, get, "") return def; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_Scene.h b/source/gameengine/Ketsji/KX_Scene.h index cd8277ec39f..9b4a6ec5ec6 100644 --- a/source/gameengine/Ketsji/KX_Scene.h +++ b/source/gameengine/Ketsji/KX_Scene.h @@ -99,7 +99,7 @@ class KX_Scene : public PyObjectPlus, public SCA_IScene { Py_Header; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* m_attr_dict; PyObject* m_draw_call_pre; PyObject* m_draw_call_post; @@ -544,7 +544,7 @@ public: void Update2DFilter(vector& propNames, void* gameObj, RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text); void Render2DFilters(RAS_ICanvas* canvas); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ diff --git a/source/gameengine/Ketsji/KX_SceneActuator.cpp b/source/gameengine/Ketsji/KX_SceneActuator.cpp index 8f6000ebc3d..f991b843c99 100644 --- a/source/gameengine/Ketsji/KX_SceneActuator.cpp +++ b/source/gameengine/Ketsji/KX_SceneActuator.cpp @@ -210,7 +210,7 @@ KX_Scene* KX_SceneActuator::FindScene(char * sceneName) } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -283,6 +283,6 @@ int KX_SceneActuator::pyattr_set_camera(void *self, const struct KX_PYATTRIBUTE_ return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_SceneActuator.h b/source/gameengine/Ketsji/KX_SceneActuator.h index 360488f9f74..b49357b21ca 100644 --- a/source/gameengine/Ketsji/KX_SceneActuator.h +++ b/source/gameengine/Ketsji/KX_SceneActuator.h @@ -89,7 +89,7 @@ class KX_SceneActuator : public SCA_IActuator virtual bool Update(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON virtual void Replace_IScene(SCA_IScene *val) { @@ -103,7 +103,7 @@ class KX_SceneActuator : public SCA_IActuator static PyObject* pyattr_get_camera(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_camera(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; /* end of class KXSceneActuator */ diff --git a/source/gameengine/Ketsji/KX_SoundActuator.cpp b/source/gameengine/Ketsji/KX_SoundActuator.cpp index 9ebb36578c4..d5f8aa74880 100644 --- a/source/gameengine/Ketsji/KX_SoundActuator.cpp +++ b/source/gameengine/Ketsji/KX_SoundActuator.cpp @@ -233,7 +233,7 @@ bool KX_SoundActuator::Update(double curtime, bool frame) } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -496,4 +496,4 @@ int KX_SoundActuator::pyattr_set_pitch(void *self, const struct KX_PYATTRIBUTE_D return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_SoundActuator.h b/source/gameengine/Ketsji/KX_SoundActuator.h index c175a184a15..7c1108ea8fb 100644 --- a/source/gameengine/Ketsji/KX_SoundActuator.h +++ b/source/gameengine/Ketsji/KX_SoundActuator.h @@ -93,7 +93,7 @@ public: CValue* GetReplica(); void ProcessReplica(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* -------------------------------------------------------------------- */ /* Python interface --------------------------------------------------- */ @@ -115,7 +115,7 @@ public: static PyObject* pyattr_get_pitch(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_type(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/Ketsji/KX_StateActuator.cpp b/source/gameengine/Ketsji/KX_StateActuator.cpp index 33f21f49810..ff4c3985a04 100644 --- a/source/gameengine/Ketsji/KX_StateActuator.cpp +++ b/source/gameengine/Ketsji/KX_StateActuator.cpp @@ -124,7 +124,7 @@ void KX_StateActuator::Activate(SG_DList& head) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -165,4 +165,4 @@ PyAttributeDef KX_StateActuator::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_TouchSensor.cpp b/source/gameengine/Ketsji/KX_TouchSensor.cpp index 9b44f487682..b590624e6c7 100644 --- a/source/gameengine/Ketsji/KX_TouchSensor.cpp +++ b/source/gameengine/Ketsji/KX_TouchSensor.cpp @@ -283,7 +283,7 @@ bool KX_TouchSensor::NewHandleCollision(void*object1,void*object2,const PHY_Coll return false; // was DT_CONTINUE but this was defined in sumo as false. } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/Ketsji/KX_TouchSensor.h b/source/gameengine/Ketsji/KX_TouchSensor.h index c9448897936..80e5a0f938e 100644 --- a/source/gameengine/Ketsji/KX_TouchSensor.h +++ b/source/gameengine/Ketsji/KX_TouchSensor.h @@ -118,7 +118,7 @@ public: // todo: put some info for collision maybe -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ diff --git a/source/gameengine/Ketsji/KX_TrackToActuator.cpp b/source/gameengine/Ketsji/KX_TrackToActuator.cpp index ae8d2f6459b..cae183ac4a2 100644 --- a/source/gameengine/Ketsji/KX_TrackToActuator.cpp +++ b/source/gameengine/Ketsji/KX_TrackToActuator.cpp @@ -417,7 +417,7 @@ bool KX_TrackToActuator::Update(double curtime, bool frame) return result; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -486,6 +486,6 @@ int KX_TrackToActuator::pyattr_set_object(void *self, const struct KX_PYATTRIBUT return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_TrackToActuator.h b/source/gameengine/Ketsji/KX_TrackToActuator.h index 2b44994f103..33b2ecb1aa5 100644 --- a/source/gameengine/Ketsji/KX_TrackToActuator.h +++ b/source/gameengine/Ketsji/KX_TrackToActuator.h @@ -69,7 +69,7 @@ class KX_TrackToActuator : public SCA_IActuator virtual void Relink(GEN_Map *obj_map); virtual bool Update(double curtime, bool frame); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Python part */ @@ -77,7 +77,7 @@ class KX_TrackToActuator : public SCA_IActuator static PyObject* pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; /* end of class KX_TrackToActuator : public KX_EditObjectActuator */ diff --git a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp index 4ee80c64570..17368357cc4 100644 --- a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp +++ b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp @@ -29,7 +29,7 @@ KX_VehicleWrapper::~KX_VehicleWrapper() m_motionStates.clear(); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* KX_VehicleWrapper::PyAddWheel(PyObject* args) { @@ -319,4 +319,4 @@ PyAttributeDef KX_VehicleWrapper::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_VehicleWrapper.h b/source/gameengine/Ketsji/KX_VehicleWrapper.h index 2ca06da18fc..4cde50b0932 100644 --- a/source/gameengine/Ketsji/KX_VehicleWrapper.h +++ b/source/gameengine/Ketsji/KX_VehicleWrapper.h @@ -20,7 +20,7 @@ public: virtual ~KX_VehicleWrapper (); int getConstraintId(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_VARARGS(KX_VehicleWrapper,AddWheel); KX_PYMETHOD_VARARGS(KX_VehicleWrapper,GetNumWheels); @@ -47,7 +47,7 @@ public: KX_PYMETHOD_VARARGS(KX_VehicleWrapper,SetSuspensionCompression); KX_PYMETHOD_VARARGS(KX_VehicleWrapper,SetRollInfluence); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON private: PHY_IVehicle* m_vehicle; diff --git a/source/gameengine/Ketsji/KX_VertexProxy.cpp b/source/gameengine/Ketsji/KX_VertexProxy.cpp index 09630ad2851..f66d11394fd 100644 --- a/source/gameengine/Ketsji/KX_VertexProxy.cpp +++ b/source/gameengine/Ketsji/KX_VertexProxy.cpp @@ -26,7 +26,7 @@ * ***** END GPL LICENSE BLOCK ***** */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "KX_VertexProxy.h" #include "KX_MeshProxy.h" @@ -553,4 +553,4 @@ PyObject* KX_VertexProxy::PySetUV2(PyObject* args) Py_RETURN_NONE; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_VertexProxy.h b/source/gameengine/Ketsji/KX_VertexProxy.h index b39d3ecb7d4..a5f2e5a08e0 100644 --- a/source/gameengine/Ketsji/KX_VertexProxy.h +++ b/source/gameengine/Ketsji/KX_VertexProxy.h @@ -29,7 +29,7 @@ #ifndef __KX_VERTEXPROXY #define __KX_VERTEXPROXY -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "SCA_IObject.h" @@ -102,7 +102,7 @@ public: }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON #endif //__KX_VERTEXPROXY diff --git a/source/gameengine/Ketsji/KX_VisibilityActuator.cpp b/source/gameengine/Ketsji/KX_VisibilityActuator.cpp index e2f2badf051..464dbd14721 100644 --- a/source/gameengine/Ketsji/KX_VisibilityActuator.cpp +++ b/source/gameengine/Ketsji/KX_VisibilityActuator.cpp @@ -79,7 +79,7 @@ KX_VisibilityActuator::Update() return false; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -121,4 +121,4 @@ PyAttributeDef KX_VisibilityActuator::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/SConscript b/source/gameengine/Ketsji/SConscript index 6f06d0ff19c..5f7cf9edcd8 100644 --- a/source/gameengine/Ketsji/SConscript +++ b/source/gameengine/Ketsji/SConscript @@ -30,8 +30,7 @@ else: if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_FFMPEG']: defs.append('WITH_FFMPEG') diff --git a/source/gameengine/Physics/Bullet/CMakeLists.txt b/source/gameengine/Physics/Bullet/CMakeLists.txt index faa9385a745..1954d58df3e 100644 --- a/source/gameengine/Physics/Bullet/CMakeLists.txt +++ b/source/gameengine/Physics/Bullet/CMakeLists.txt @@ -24,6 +24,9 @@ # # ***** END GPL LICENSE BLOCK ***** +# since this includes bullet we get errors from the headers too +REMOVE_STRICT_FLAGS() + SET(INC . ../common diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp index 421a9fc64b8..54f98d16cf6 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp +++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp @@ -13,6 +13,10 @@ subject to the following restrictions: 3. This notice may not be removed or altered from any source distribution. */ +#ifndef WIN32 +#include +#endif + #include "CcdPhysicsController.h" #include "btBulletDynamicsCommon.h" #include "BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h" diff --git a/source/gameengine/Physics/Bullet/SConscript b/source/gameengine/Physics/Bullet/SConscript index 6cebe0638b0..272d0003c1a 100644 --- a/source/gameengine/Physics/Bullet/SConscript +++ b/source/gameengine/Physics/Bullet/SConscript @@ -24,8 +24,7 @@ defs = [] if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_CXX_GUARDEDALLOC']: defs.append('WITH_CXX_GUARDEDALLOC') diff --git a/source/gameengine/Physics/common/CMakeLists.txt b/source/gameengine/Physics/common/CMakeLists.txt index 0389280340f..f67de0f77d0 100644 --- a/source/gameengine/Physics/common/CMakeLists.txt +++ b/source/gameengine/Physics/common/CMakeLists.txt @@ -27,7 +27,6 @@ SET(INC . ../Dummy - ../../../intern/moto/include ) SET(SRC diff --git a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp index 0c16d6a29c2..93d82702e90 100644 --- a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp +++ b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp @@ -512,11 +512,11 @@ void RAS_2DFilterManager::EnableFilter(vector& propNames, void* game return; } - if(mode>=RAS_2DFILTER_MOTIONBLUR && mode<=RAS_2DFILTER_INVERT) - { - if(m_filters[pass]) - glDeleteObjectARB(m_filters[pass]); - m_filters[pass] = CreateShaderProgram(mode); - m_enabled[pass] = 1; - } + // We've checked all other cases, which means we must be dealing with a builtin filter + if(m_filters[pass]) + glDeleteObjectARB(m_filters[pass]); + m_filters[pass] = CreateShaderProgram(mode); + m_gameObjects[pass] = NULL; + AnalyseShader(pass, propNames); + m_enabled[pass] = 1; } diff --git a/source/gameengine/Rasterizer/SConscript b/source/gameengine/Rasterizer/SConscript index dc189c54a40..045714e80ac 100644 --- a/source/gameengine/Rasterizer/SConscript +++ b/source/gameengine/Rasterizer/SConscript @@ -10,8 +10,7 @@ defs = [ 'GLEW_STATIC' ] if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_CXX_GUARDEDALLOC']: defs.append('WITH_CXX_GUARDEDALLOC') diff --git a/source/gameengine/VideoTexture/CMakeLists.txt b/source/gameengine/VideoTexture/CMakeLists.txt index 1c624482d30..1bde0bc8a40 100644 --- a/source/gameengine/VideoTexture/CMakeLists.txt +++ b/source/gameengine/VideoTexture/CMakeLists.txt @@ -33,7 +33,6 @@ SET(INC ../../../source/gameengine/Rasterizer ../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer ../../../source/gameengine/BlenderRoutines - ../../../source/blender/include ../../../source/blender/blenlib ../../../source/blender/blenkernel ../../../source/blender/makesdna @@ -76,8 +75,7 @@ ENDIF(WITH_FFMPEG) IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(bf_videotex "${SRC}" "${INC}") diff --git a/source/gameengine/VideoTexture/SConscript b/source/gameengine/VideoTexture/SConscript index 21a5f8ce3fe..8a5e3726aa7 100644 --- a/source/gameengine/VideoTexture/SConscript +++ b/source/gameengine/VideoTexture/SConscript @@ -21,8 +21,7 @@ if env['OURPLATFORM'] in ('win32-vc', 'win64-vc','win32-mingw'): if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_FFMPEG']: defs.append('WITH_FFMPEG')